我在ArcGIS Desktop中有一个矩形栅格图像。

如何生成仅与光栅图像范围相同的多边形?

也就是说,我要有一个具有一个四边形的多边形层,该四边形是图像的边缘。

我已经尝试过简单地进行Raster-> Polygon转换,但这会尝试使用图像中的数据生成轮廓-我想要的只是图像边缘的轮廓。

我正在使用ArcGIS Desktop10。

#1 楼

如果您有Spatial Analyst,则可以:


将栅格乘以0以使用栅格计算器创建恒定值栅格。 (请确保将其转换为整数类型,否则第2步将不起作用)
使用“栅格转多边形”工具将第1步的结果转换为多边形。

另一种解决方案:

如果您拥有3D Analyst许可证,则可以从栅格使用3D Analyst>转换>下的Raster Domain工具(但是它不具有平滑功能)

#2 楼




您可以使用3D Analyst中的“栅格域”工具来创建与栅格数据具有相同范围的多边形。

评论


欢迎使用GIS SE!您能否在答案中添加参考?这样,它将更加牢固。

– R.K.
2012年11月22日14:22

栅格域工具完美地完成了任务!创建栅格数据的轮廓或边界。

–user27891
2014年10月10日在17:28

关于此工具的警告语-创建的边界多边形是栅格数据在像素CENTER处开始和结束的范围,而不是像素的外部边缘。我只是尝试过,并认为它返回了栅格的外部边界框,但是当您放大时,您会看到边界框从像素中心开始。

–优惠
16年8月4日,下午3:29

实际上,IRasterDomainExtractor.ExtractDomain方法有一个参数,用于控制它使用像素/像元的中心还是外部边缘。

–普雷斯顿
17年5月19日在22:36

太棒了!一个工具,我有一个栅格的多边形轮廓。谢谢!

– MyNameisTK
17年8月3日在20:10

#3 楼




简单地数字化呢?单击单击单击单击完成。

评论


不太确定为什么这个选项被否决了。您可以找到范围角的坐标,并在这些坐标处创建顶点。它甚至可以用于分析。如果仅用于显示,则单击-单击-单击-单击非常有用。

– Baltok
2012年3月20日19:26

我说这是因为栅格可能是不规则的形状,并且视复杂程度而定,可能会导致非常繁琐的数字化工作

–菲尔·亨利(Phil Henley)
2012年3月20日在21:57

但是,OP说这是矩形的。对我来说似乎很简单。通过放大并保持准确,实际的栅格轮廓和数字化轮廓之间的差异对于任何现实应用都是可以忽略的。

–马特
2012年3月21日13:09

#4 楼

您可以使用“数据管理工具箱”中的“构建足迹”工具。您必须从栅格中创建一个镶嵌数据集。

在文件地理数据库中创建一个新的镶嵌,添加栅格。

在ArcMap中打开镶嵌并提取足迹。

那就是我要做的。

#5 楼

我使用这个简单的python脚本,它创建一个面要素类,其中包含文件夹中所有栅格的范围。要使用它,可以在ArcToolbox中创建一个工具,也可以只更改InFolder和Dest(目标)变量。

import arcpy,os

InFolder = arcpy.GetParameterAsText(0)
Dest=arcpy.GetParameterAsText(1)

arcpy.env.workspace=InFolder
#The raster datasets in the input workspace
in_raster_datasets = arcpy.ListRasters()

arcpy.CreateFeatureclass_management(os.path.dirname(Dest),
                                   os.path.basename(Dest),
                                   "POLYGON")
arcpy.AddField_management(Dest,"RasterName", "String","","",250)
arcpy.AddField_management(Dest,"RasterPath", "String","","",250)

cursor = arcpy.InsertCursor(Dest)
point = arcpy.Point()
array = arcpy.Array()
corners = ["lowerLeft", "lowerRight", "upperRight", "upperLeft"]
for Ras in in_raster_datasets:
    feat = cursor.newRow()  
    r = arcpy.Raster(Ras)
    for corner in corners:    
        point.X = getattr(r.extent, "%s" % corner).X
        point.Y = getattr(r.extent, "%s" % corner).Y
        array.add(point)
    array.add(array.getObject(0))
    polygon = arcpy.Polygon(array)
    feat.shape = polygon
    feat.setValue("RasterName", Ras)
    feat.setValue("RasterPath", InFolder + "\" + Ras)
    cursor.insertRow(feat)
    array.removeAll()
del feat
del cursor  


评论


可以详细告诉我们如何使用此代码。我想在.asc光栅文件上使用它。我的图像是不同的子文件夹。

– GIS数据屠夫
15年3月23日在12:14

jeb的回答对我有用,没有足够的代表投票给他。 @GIS Data Butcher将完整的源代码保存到script.py文件中,然后从ArcMap中的Python窗口执行它。您可以在Python窗口上使用以下命令从文件执行脚本。 > execfile(r'd:\ temp \ script.py')

–阿萨德
16-3-13在10:13



完善!!我想知道,还有一种方法可以读取子文件夹吗?

–拉斐尔
19年2月18日在18:14

@raphael,当然,您只需要在脚本中实现标准的python os.listdir或os.walk。

–杰布
19-2-27在15:08



@jeb是的,我明白了这个概念...机器人,我对此非常陌生,无法正常工作...您能提供一些帮助吗?

–拉斐尔
19年2月27日在19:05

#6 楼

另外,一种简单的方法是使用“重新分类”工具,您应该单击“分类”按钮并将类数更改为1。单击“确定”。现在,可以使用“栅格到多边形”转换工具轻松地转换输出栅格。 ;)

#7 楼

我认为将栅格重新分类并将其转换为多边形可能会非常耗时。在我看来,最简单的方法是:


获取maxX,maxY,minX,minY(可以使用describe命令在Python中完成)
运行Create渔网的范围如上所述,行/列的数量为1

如果栅格很多,则应使用Python进行,并且可以在几秒钟内创建数百个足迹。

#8 楼

在ArcCatalog中,您可以在.gdb中创建栅格目录(数据管理工具->栅格)。不受管理可以。然后右键单击并加载(如果栅格仅位于文件夹中,则“从工作区加载”。如果将栅格目录加载到ArcMap中,则可以右键单击->数据->导出轮廓,作为形状文件或要素类。形状文件将具有一个“名称”字段,其中填充了栅格的名称。

栅格目录将自动显示范围,但我需要将范围发送给未使用ArcGIS的人。

#9 楼

使用转换工具工具箱中的“栅格转多边形”工具。确保取消选中“简化多边形”框。这将完全创建您想要的。

评论


您确定这不仅会造成巨大的多边形混乱,而是为原始图像中的每组连续的等值像素提供一个多边形吗?

– hu
2012年3月21日在16:33

在此之后,您总是可以添加一个溶解来获得范围poly。但是,我敢打赌@jeb列出的python解决方案会更快。

– GeoJohn
2015年6月4日15:45

#10 楼

“栅格域”工具将在形状不规则的栅格周围创建多边形。我认为3d分析师扩展程序需要许可证。

#11 楼

使用ArcCatalog是最佳选择。根据可用栅格创建镶嵌数据集。在镶嵌图中定义“无值”,以避免栅格背景包含在多边形中。使用辐射度法构建足迹。在ArcGIS中打开镶嵌数据集,然后将“足迹”导出为shp文件。获取镶嵌边界的好方法...

#12 楼

如果要获取DEM栅格的轮廓,则需要执行以下操作

如果具有Spatial Analyst和3d Analyst,则可以:


使用栅格计算器将栅格乘以0以创建恒定值栅格。
使用“ INT(工具)”将步骤1的结果转换为栅格整数。这对于下一步是必需的。
使用“栅格转多边形”工具将步骤2的结果转换为多边形(仅适用于栅格整数)。


评论


嗨,Seamster02,欢迎来到GIS Stack Exchange :)按照书面说明,这与公认的答案gis.stackexchange.com/a/22016/108并无明显不同。

–马特·威尔基
15年6月12日在16:04