在ArcGIS 10和Python中,我想获取shapefile中每个多边形的范围(xmax,ymax,xmin,ymin)信息。

我可以使用
file=r"D:\SCRATCH\ARCGIS0k_trc_tiles_TVM.shp"
desc=arcpy.Describe(file)
print desc.extent.Xmax



394551.52085039532


但是我似乎无法弄清楚如何为每一行获取相同的信息在数据集中。

打印数据集中的31行,但是
rows = arcpy.SearchCursor("100k_trc_tiles_TVM")
for row in rows:
 print row


显示错误。


运行时错误:对象:描述输入
值无效类型


我正在考虑将范围值添加到使用“计算几何”的表格,但这仅给出了质心。然后我猜我们可以使用row.GetValue(“ xmax”)之类的东西。

我知道我们可以使用http://的函数创建X / Y,max / min www.ian-ko.com/free/free_arcgis.htm,但最好避免添加字段,尤其是ArcPy可以获取这些值的情况。

基本上,我需要获取范围由于分割工具由于数据集的大尺寸而失败(请参见为什么相交会导致错误999999:执行函数无效时发生错误),因此将其放入裁剪工具以裁剪出30个数据区域(按照1:100,000的地图)进行地理处理拓扑[线段端点过多]?我要自动执行此操作,因为它在许多数据集上都重复进行。

评论

您无需将剪辑功能写入磁盘,只需使用内存中的多边形,例如:polygon = arcpy.Polygon(array)arcpy.Clip_analysis(in_features,polygon,out_feature_class,xy_tolerance)

tks。知道如何将行导出到新的形状文件以便使用,而不只是行的范围吗?这样一来,它也可以处理非矩形的剪辑。

好吧,如果您只想在同一脚本中剪切该功能,则只需使用功能对象。同样,无需导出到形状文件,例如:arcpy.Clip_analysis(in_features,feat,out_feature_class,xy_tolerance)

对于shapefile还是shapefile中的每个多边形?看起来您在这里谈论的是两件分开的事情。

您的shapefile中只有一个多边形对象吗?如果不是,请在对象范围内使用for循环。

#1 楼

在光标中获取形状对象并访问其range属性。
请参阅ArcGIS Help在Python中使用几何:

shapeName = arcpy.Describe(inFeatures).shapeFieldName
for row in rows:
    feat = row.getValue(shapeName)
    extent = feat.extent
    print extent.XMin,extent.YMin,extent.XMax,extent.YMax


评论


谢谢卢克。这很棒。如果有人想使用一个工具,我将编辑问题以使用新的工作代码,该工具-迭代使用“裁剪”工具集来裁剪大型要素类的矩形区域。模拟弧信息拆分工具的功能,而不会崩溃至最大10GB FGDB和1亿条记录的数据集。

–GeorgeC
2011年11月7日,下午3:06

一件事-我必须通过尝试将name属性设置为;硬编码列的名称,以获取与Name = row.Name_1等效的名称。 NameField =“ Name_1”; Name = row.NameField;或Name = row +“。” + NameField,其中NameField = arcpy.GetParameterAsText(2),并且Name保留在Name_1列中。有任何想法吗?注意我;已使用“;”表示换行。

–GeorgeC
2011年11月7日在3:11



从gis.stackexchange.com/questions/16586/中找出以上-row.GetValue(xxx)。

–GeorgeC
2011年11月8日,0:44

#2 楼

边界容器工具集完全可以满足您的需求。如果您只需要代码片段,请检查脚本中的功能,其中一个功能明确地涉及范围。创建的输出文件中的“右”,“上”和“下”字段,可用于后续处理

#3 楼

我刚刚尝试了ArcGIS 10中的“最小边界几何(信封)”(在数据管理中),对于所有字段,它似乎完全一样。

#4 楼

另一种方法是在shapefile上执行SearchCursor(),然后可以使用row.shape.extent:

rows = arcpy.SearchCursor(shapefileName)

for row in rows:
   extent = row.shape.extent
   ...
   ...


#5 楼

如在ArcMap中提取多边形顶点的坐标中所述?
,您可以获取多边形的顶点,然后将每个顶点的x和y坐标添加为属性表中的字段。这样做的局限是不能将max / min坐标直接附加到每个多边形上,但是可以通过几种方法来实现。使用pyshp模块的python列表,然后可以对其进行排序以找到每个多边形的最大值和最小值。然后,可以使用Pyshp打开writer类,以将新字段添加到原始多边形并将这些max和min值写入正确的多边形。使用geoprocessor在9.3中写入shapefile时遇到很多问题,因此我更喜欢pyshp方法,但是我不确定
arcpy模块是否解决了这些问题。

#6 楼

您是否尝试将“ XMax”中的“ M”大写?我认为应该是:

print desc.extent.XMax


而不是

print desc.extent.Xmax


根据文档。当然,这使我想知道您的第一个代码段是如何工作的。无论哪种方式,请尝试一下吧!