从马赛克数据集提取栅格单元值到点的最佳方法

740
7
跳到解决方案
01-28-2020 12:11
adamwade1
通过
新贡献者III

我有大约50个马赛克数据集,有50个对应的点特征类。我的目标是将栅格单元值(抬高)附加到覆盖点。马赛克数据集全部来自单一波段光栅(仰角)。我一直在尝试在arcpy中迭代这个过程,但我得到了复杂的结果。我运行的是ArcGIS Desktop 10.6.1,所有的特征类和马赛克数据集都在同一个投影中。当我运行我的脚本时,我将得到我想要的前几次迭代的结果,但是其余的点特征类包含提取的值,这些值不存在于任何光栅中。

我不确定从马赛克数据集中提取值的最佳方法。一种似乎有效的方法是从马赛克数据集创建一个马赛克层。我一直在存储点特征类的相同地理数据库中创建马赛克层,然后运行提取。

进口arcpyarcpy进口env进口操作系统#创建目录下所有文件夹的列表目录“栅格和马赛克数据集文件夹的路径”文件夹操作系统listdir目录#创建点特性类列表env工作空间r“指向特征类的路径”文件arcpyListFeatureClassespoint_path“点特征类路径”#用于创建马赛克层arcpyCheckOutExtension“空间”j邮政编码文件夹文件in_workspace+“到每个地理数据库的路径”in_mosaic_dataset_name"镶嵌数据集名称"path_to_rasterin_workspace+in_mosaic_dataset_name outlayernamepoint_path+in_mosaic_dataset_name arcpyMakeMosaicLayer_managementpath_to_rasteroutlayernamearcpysaExtractMultiValuesToPointsjoutlayername

我在ArcMap的python窗口和spyder中都运行过,在这两个实例中我都遇到了问题。前几次迭代工作正常,然后提取的栅格单元值不存在于任何栅格中。有没有更好的方法从马赛克数据集中提取栅格单元值?

干杯!

0荣誉
1解决方案

接受的解决方案
adamwade1
通过
新贡献者III

我想到了一个让它工作的方法。出于某种原因,我不知道为什么,如果你从一个马赛克数据集中运行ExtractMultiValuesToPoints,你最终会得到在栅格单元格中找不到的值。我仍然不确定这些值的来源。但是,如果您使用完全相同的数据再次运行它,您将得到所需的结果。我修改了上面的脚本,以便ExtractMultiValuesToPoints两次使用马赛克数据集。此外,我确定没有必要制作马赛克层,该工具仅从马赛克数据集工作。这个解决方案将在属性表中提供两个新列;一个是未知值,另一个是期望值。根据运行的文件数量,您可以手动删除每个表中的额外列,也可以修改脚本删除未知值的第一列。

进口arcpyarcpy进口env进口操作系统#创建目录下所有文件夹的列表目录“栅格和马赛克数据集文件夹的路径”文件夹操作系统listdir目录#创建点特性类列表env工作空间r“指向特征类的路径”文件arcpyListFeatureClasses#迭代点文件和马赛克数据集arcpyCheckOutExtension“空间”j邮政编码文件夹文件in_workspace+“到每个地理数据库的路径”in_mosaic_dataset_name"镶嵌数据集名称"path_to_rasterin_workspace+in_mosaic_dataset_name rasterlistpath_to_rasterpath_to_rasterarcpysaExtractMultiValuesToPointsjoutlayername

如果有人知道为什么初始运行会给你未知的值,或者这些值来自哪里,请告诉我。

干杯!

在原帖子中查看解决方案

0荣誉
7回复
DavidPike
通过 常规赛MVP
常规赛MVP

也许是从二级光栅的值被应用?当您创建马赛克层时,您可以使用查询。也可能有重叠操作不受控制?

0荣誉
adamwade1
通过
新贡献者III

这似乎是从第三次迭代开始的。前两次迭代给出了期望值,然后问题就开始了。如果我从之前的第三次迭代开始重新运行代码,我将再次获得两次迭代的期望值,然后它又变坏了。所以栅格不是问题。如何检查重叠操作?

0荣誉
DavidPike
通过 常规赛MVP
常规赛MVP

看看帮助,似乎提取多值点附加光栅值的输入点?否定任何迭代。除非我在看旧语法。

脚本似乎试图为每个栅格创建点输出,如果我读它对吗?

如果我看错了,请原谅。

0荣誉
adamwade1
通过
新贡献者III

该脚本在50个不同的马赛克数据集上对大约50个不同的点特征类进行提取。它完全满足了我两次迭代的需要,然后又没有。我用工具箱做同样的操作时也遇到过类似的问题。我将使用点特征类和马赛克数据集运行该工具,并获得完全意想不到的值。我将使用相同的数据再次运行它,它将正常工作。一定是和读取马赛克数据集有关。快把我逼疯了。

0荣誉
DavidPike
通过 常规赛MVP
常规赛MVP

哈哈!在您的拼接数据集的源栅格中运行它怎么样?

此外,OID字段的点可能会被改变,如果这是误导性的信息。

0荣誉
adamwade1
通过
新贡献者III

每个马赛克中都有数百个栅格,所以我最终会在每个点特征类中有数百个新的新列。我只需要一列所有的值。我可以将所有列连接到一个列中,然后删除之前的列,但这是大量额外的时间,并且违背了使用马赛克数据集的目的。流程显然可以工作,但是在迭代过程中遇到了一个问题。只是不确定是什么引起的问题。

0荣誉
adamwade1
通过
新贡献者III

我想到了一个让它工作的方法。出于某种原因,我不知道为什么,如果你从一个马赛克数据集中运行ExtractMultiValuesToPoints,你最终会得到在栅格单元格中找不到的值。我仍然不确定这些值的来源。但是,如果您使用完全相同的数据再次运行它,您将得到所需的结果。我修改了上面的脚本,以便ExtractMultiValuesToPoints两次使用马赛克数据集。此外,我确定没有必要制作马赛克层,该工具仅从马赛克数据集工作。这个解决方案将在属性表中提供两个新列;一个是未知值,另一个是期望值。根据运行的文件数量,您可以手动删除每个表中的额外列,也可以修改脚本删除未知值的第一列。

进口arcpyarcpy进口env进口操作系统#创建目录下所有文件夹的列表目录“栅格和马赛克数据集文件夹的路径”文件夹操作系统listdir目录#创建点特性类列表env工作空间r“指向特征类的路径”文件arcpyListFeatureClasses#迭代点文件和马赛克数据集arcpyCheckOutExtension“空间”j邮政编码文件夹文件in_workspace+“到每个地理数据库的路径”in_mosaic_dataset_name"镶嵌数据集名称"path_to_rasterin_workspace+in_mosaic_dataset_name rasterlistpath_to_rasterpath_to_rasterarcpysaExtractMultiValuesToPointsjoutlayername

如果有人知道为什么初始运行会给你未知的值,或者这些值来自哪里,请告诉我。

干杯!

0荣誉