#coding=utf-8
# ①要素几何由点Point构成
# 要素类中的每个要素都包含一组用于定义 面或线 折点的点,或者包含单个用于定义一个 点要素 的点。
# 可以使用几何对象(Polygon、Polyline、PointGeometry 或 MultiPoint)访问这些点,
# 几何对象将以 Point 对象的数组形式返回这些点。
# ②多部件
# 要素的几何可具有多个部件,几何对象的 partCount 属性将返回要素的部分数目。
# 如果指定了索引,则 getPart(i) 方法将返回特定几何部分的点对象数组。
# 如果未指定索引,则返回的数组将包含每个几何部分的点对象数组。[[p,p,p],[]]
# 多部件要素是由多个物理部分组成的,但是只引用数据库中的一组属性。
# 例如,在州行政区图层中,可将夏威夷州看作是一个多部件要素。虽然它是由许多岛屿组成的,但在数据库中仍将其记录为一个要素。
# ③环
# 如果一个面包含多个洞,它将由多个环组成。针对面返回的点对象数组将包含外部环及所有内部环的点。
# 外部环总是先返回,接着是内部环,其中以空点对象作为环之间的分隔符。None
# 环是一个用于定义二维区域的闭合路径。
# 有效的环是由有效路径组成的,因而环的起点和终点具有相同的 x,y 坐标。
# 顺时针环是外部环,逆时针环则定义内部环。
import arcpy
# # 3个环的组成点集合
# points1=[[0,0],[0,10],[10,10],[10,0],[0,0]]
# points2=[[2,2],[2,8],[8,8],[8,2],[2,2]]
# points3=[[4,4],[4,6],[6,6],[6,4],[4,4]]
#
# # 3个环的Array对象
# ring1=arcpy.Array([arcpy.Point(*p) for p in points1])
# ring2=arcpy.Array([arcpy.Point(*p) for p in points2])
# ring3=arcpy.Array([arcpy.Point(*p) for p in points3])
#
# polygon=arcpy.Polygon(arcpy.Array([ring1,ring2,ring3]))
#
# partIndex=1
# for part in polygon:
# print 'Part%d:'%partIndex
# partIndex+=1
# for point in part:
# if point:
# print '{},{}'.format(int(point.X),int(point.Y))
# else:
# print 'InnerRing'
featureClass=r"E:\3 coding\py code\arcpy\create\polygon\polygon_multiPart.shp"
with arcpy.da.SearchCursor(featureClass,["SHAPE@"]) as cursor:
polygonIndex=1
for row in cursor:
print 'Polygon%d'%polygonIndex
polygonIndex+=1
partIndex = 1
for part in row[0]:
print 'Part%d:' % partIndex
partIndex += 1
for point in part:
if point:
print '{},{}'.format(int(point.X), int(point.Y))
else:
print 'InnerRing'