Wednesday, 19 December 2018

Returning strings showing all vertices from all polygons in shapefile using ArcPy?


I want to have a string showing all vertices from all polygons in a shapefile. In my example below my code lists all vertices and the first column shows the polygon they are part of (I only have 2 in this example)


import arcpy
fc=r'D:\GIS Data\TOOLS\EV calc in Python\Data.gdb\PolyWGS84'

myList = []

with arcpy.da.SearchCursor(fc,['OID@','SHAPE@']) as cursor:

for row in cursor:
array1=row[1].getPart()
for vertice in range(row[1].pointCount):
pnt=array1.getObject(0).getObject(vertice)
print row[0],pnt.X,pnt.Y
myList.append(str(pnt.X) + " " + str(pnt.Y))

print ", ".join(myList)

This is the result



1 151.513429431 -33.568900991
1 151.313554706 -34.011480738
1 150.928082023 -33.975788823
1 150.906666874 -34.27560091
1 150.506917425 -34.211355462
1 150.692515384 -33.51893231
1 151.513429431 -33.568900991
2 151.72520146 -32.500522999
2 152.082120611 -33.242914833
2 151.196961117 -33.100147173

2 151.72520146 -32.500522999
151.513429431 -33.568900991, 151.313554706 -34.011480738, 150.928082023 -33.975788823, 150.906666874 -34.27560091, 150.506917425 -34.211355462, 150.692515384 -33.51893231, 151.513429431 -33.568900991, 151.72520146 -32.500522999, 152.082120611 -33.242914833, 151.196961117 -33.100147173, 151.72520146 -32.500522999

But what I want is separate strings for each polygon in the shapefile


151.513429431 -33.568900991, 151.313554706 -34.011480738, 150.928082023 -33.975788823, 150.906666874 -34.27560091, 150.506917425 -34.211355462, 150.692515384 -33.51893231, 151.513429431 -33.568900991
151.72520146 -32.500522999, 152.082120611 -33.242914833, 151.196961117 -33.100147173, 151.72520146 -32.500522999

How would you do this?



Answer



You have the general idea in place already -- just move your print of the list into the loop, and remove the print for each vertex.



import arcpy
fc=r'D:\GIS Data\TOOLS\EV calc in Python\Data.gdb\PolyWGS84'



with arcpy.da.SearchCursor(fc,['OID@','SHAPE@']) as cursor:
for row in cursor:
myList = []
array1=row[1].getPart()
for vertice in range(row[1].pointCount):

pnt=array1.getObject(0).getObject(vertice)
# print row[0],pnt.X,pnt.Y
myList.append(str(pnt.X) + " " + str(pnt.Y))
print row[0], ", ".join(myList)




No comments:

Post a Comment

arcpy - Changing output name when exporting data driven pages to JPG?

Is there a way to save the output JPG, changing the output file name to the page name, instead of page number? I mean changing the script fo...