如何解决Python Esri Arcpy 比较多边形和折线中的几何
我在 ArcMap 上有两个图层:
- 图层 A 几何多边形
- B 层几何折线(关闭) 我想将 A 层的每条记录与 B 层的轮廓进行比较。 B 层(折线)具有围绕多边形(配菜)的线条。 因此,我必须比较线 B 是多边形 A 与 python 2.7 和 arcpy 的边界
如果我在折线中转换第一个多边形
#arcpy.polygonToLine_management("inLayerpolygon","outFeaturepolyline","IGnorE_NEIGHBORS")
所以你有两条折线
然后 我可以比较 Shape 字段吗?
''''
#LIST LAYERS ON THE MAP
for lyr in arcpy.mapping.ListLayers(self.mxd,'*'):
self.listLayer[lyr.name] = lyr.dataSource
LayerP = 'LayerA'
LayerB = 'LayerB'
dsLayer = self.listLayer.get(layer,0)
arr = arcpy.da.FeatureClasstoNumPyArray(in_table= ds,field_names= ["ID","SHAPE"])
for row in arr:
cursor = arcpy.da.SearchCursor("LayerB","SHAPE"],where_clause = "ID = " + str(row[0]))
for r in cursor:
if row["SHAPE"] == r["SHAPE"]:
arcpy.AddMessage('YES')
else:
arcpy.AddMessage('NO')
''''
谢谢
解决方法
我找到了这个解决方案:
#LIST LAYERS
for lyr in arcpy.mapping.ListLayers(self.mxd,'*'):
self.listLayer[lyr.name] = lyr.dataSource
desc = arcpy.Describe(lyr.dataSource)
arcpy.AddMessage("Feature Type: " + desc.featureType)
arcpy.AddMessage("Shape Type : " + desc.shapeType)
arcpy.AddMessage("Spatial Index: " + str(desc.hasSpatialIndex))
layer1 = 'LayerA' (Polyline)
layer2 = 'LayerB' (Polygon)
newLayer = 'newLayer'
ds1 = self.listLayer.get(layer1,0)
ds2 = self.listLayer.get(layer2,0)
geodb = 'C:/GEODB/chk.gdb'
arcpy.MakeFeatureLayer_management(ds1,newLayer)
# Select all cities that overlap the chihuahua polygon
arcpy.SelectLayerByLocation_management(newLayer,"BOUNDARY_TOUCHES",ds2,"","NEW_SELECTION")
num = arcpy.GetCount_management(newLayer)
arcpy.AddMessage("num = " + str(num))
# Write the selected features to a new featureclass
arcpy.CopyFeatures_management(newLayer,geodb + "/newfc")
我想获取未选择的功能
,这是一个更好的解决方案
arr = arcpy.da.FeatureClassToNumPyArray(in_table= ds,field_names= '*',where_clause= sWhere)
for row in arr:
if arcpy.Exists(fcLayerPolyline):
arcpy.Delete_management(fcLayerPolyline)
if arcpy.Exists(fcLayerPolygon):
arcpy.Delete_management(fcLayerPolygon)
arcpy.MakeFeatureLayer_management(dsPolyline,fcLayerPolyline,"ID_GMO = " + str(row["ID"]))
arcpy.MakeFeatureLayer_management(dsPolygon,fcLayerPolygon)
#Seleziono Poligono ST011PAT
arcpy.SelectLayerByLocation_management(fcLayerPolygon,"SHARE_A_LINE_SEGMENT_WITH","NEW_SELECTION")
num = arcpy.GetCount_management(fcLayerPolygon)
with arcpy.da.SearchCursor(fcLayerPolygon,['TIPO']) as cursor:
for r in cursor:
if r[0] == row["TIPO"]
....
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。