with arcpy.da.SearchCursor(inFC,['OID@','SHAPE@']) as cursor: for row in cursor: array1=row[1].getPart() # get a single polygon for vertice in range(row[1].pointCount): # a loop to access vertices in a polygon pnt=array1.getObject(0).getObject(vertice) #print(row[0],pnt.X,pnt.Y) try: vertices = (pnt.X,pnt.Y) print(vertices) except: print("No vertice")
What I got is a list of coordinates, but not all of them. The code's run breaks by an error:
File "C:\Program Files\ArcGIS\Pro\Resources\ArcPy\arcpy\arcobjects\arcobjects.py", line 105, in getObject return convertArcObjectToPythonObject(self._arc_object.GetObject(*gp_fixargs(args))) RuntimeError: Array: Error in getting object from array
Why this can happen?
There's an oven-ready solution here Read geometries—ArcGIS Pro | Documentation - section headed 'Reading polyline or polygon geometries'
import arcpy infc = arcpy.GetParameterAsText(0) # Enter for loop for each feature for row in arcpy.da.SearchCursor(infc, ["OID@", "SHAPE@"]): # Print the current polygon or polyline's ID print("Feature {}:".format(row[0])) partnum = 0 # Step through each part of the feature for part in row[1]: # Print the part number print("Part {}:".format(partnum)) # Step through each vertex in the feature for pnt in part: if pnt: # Print x,y coordinates of current point print("{}, {}".format(pnt.X, pnt.Y)) else: # If pnt is None, this represents an interior ring print("Interior Ring:") partnum += 1
in_fc = r"C:\arcpro_npg\npg\Project_npg\tests.gdb\sq2" with SearchCursor(in_fc, "SHAPE@") as cursor: a = [row[0] for row in cursor] a Out[16]: [<Polygon object at 0x1759a6c8348[0x1759a6b7ba0]>, <Polygon object at 0x1759a6c82c8[0x1759a6b7bd0]>, <Polygon object at 0x1759a6c8548[0x1759a6b7c30]>, <Polygon object at 0x1759a6c8a48[0x1759a6b7a80]>, <Polygon object at 0x1759a6c8148[0x1759a6b7cc0]>, <Polygon object at 0x1759a6c8cc8[0x1759a6b7ae0]>, <Polygon object at 0x1759a6c8848[0x1759a6b7b10]>] a[0] # image of shape a[0][0] <Array [<Point (300009.0, 5000001.0, #, #)>, <Point (300000.0, 5000000.0, #, #)>, <Point (300002.0, 5000008.0, #, #)>, <Point (300008.0, 5000010.0, #, #)>, <Point (300010.0, 5000010.0, #, #)>, <Point (300010.0, 5000008.0, #, #)>, <Point (300009.0, 5000001.0, #, #)>, None, <Point (300003.0, 5000003.0, #, #)>, <Point (300007.0, 5000003.0, #, #)>, <Point (300005.0, 5000007.0, #, #)>, <Point (300003.0, 5000003.0, #, #)>]> a[0][0][0] <Point (300009.0, 5000001.0, #, #)>
The simplest is to use methods on the cursor directly,
def _fc_as_narray_(in_fc, with_id=True): """Return geometry from a featureclass using `as_narray`.""" flds = ["SHAPE@X", "SHAPE@Y"] if with_id: flds = ["OID@", "SHAPE@X", "SHAPE@Y"] with SearchCursor(in_fc, flds, explode_to_points=True) as cursor: a = cursor._as_narray() del cursor return a a = _fc_as_narray_(in_fc, True) a0 = list(a) # --- convert to list a0 [(1, 300009.00, 5000001.00), (1, 300000.00, 5000000.00), (1, 300002.00, 5000008.00), (1, 300008.00, 5000010.00), (1, 300010.00, 5000010.00), (1, 300010.00, 5000008.00), (1, 300009.00, 5000001.00), (1, 300003.00, 5000003.00), (1, 300007.00, 5000003.00), (1, 300005.00, 5000007.00), (1, 300003.00, 5000003.00), (2, 300010.00, 5000008.00), (2, 300010.00, 5000010.00), (2, 300008.00, 5000010.00), (2, 300008.00, 5000011.00), (2, 300008.00, 5000012.00), (2, 300012.00, 5000012.00), (2, 300012.00, 5000008.00), (2, 300010.00, 5000008.00), (3, 300008.00, 5000011.00), (3, 300005.00, 5000010.00), (3, 300005.00, 5000012.00), (3, 300006.00, 5000012.00), (3, 300008.00, 5000012.00), (3, 300008.00, 5000011.00), (4, 300006.00, 5000012.00), (4, 300005.00, 5000012.00), (4, 300005.00, 5000015.00), (4, 300007.00, 5000014.00), (4, 300006.00, 5000012.00), (5, 300002.50, 5000013.00), (5, 300001.00, 5000011.50), (5, 300000.00, 5000010.00), (5, 300001.00, 5000013.00), (5, 300003.00, 5000014.00), (5, 300002.50, 5000013.00), (5, 300001.00, 5000012.50), (5, 300001.50, 5000012.50), (5, 300001.50, 5000013.00), (5, 300001.00, 5000012.50), (6, 300004.00, 5000012.50), (6, 300003.00, 5000011.00), (6, 300002.00, 5000011.00), (6, 300001.00, 5000011.50), (6, 300002.50, 5000013.00), (6, 300004.00, 5000012.50), (6, 300002.50, 5000012.50), (6, 300001.50, 5000011.50), (6, 300002.50, 5000011.50), (6, 300002.50, 5000012.50), (9, 300002.00, 5000011.00), (9, 300003.00, 5000011.00), (9, 300004.00, 5000009.00), (9, 300002.00, 5000009.00), (9, 300002.00, 5000011.00)]
Signed in members can post, follow updates, and more. New here? Register a free account.
Find useful guides, FAQs, and documents to help you navigate and make the most of Esri Community.