使用Python读取几何
读取几何
要素类中的每个要素都包含一组用于定义面或线折点的点要素,或者包含单个用于定义一个点要素的坐标。可以使用几何对象( 面 Polygon、 折线 Polyline、 点几何 PointGeometry 或 多点 MultiPoint)访问这些点,这些几何对象将以 点对象的数组形式返回这些点。
要素可具有多个部件。几何对象的 partCount 属性将返回要素的部件数。如果指定了索引,则 getPart 方法将返回特定几何部件的点对象数组。如果未指定索引,则返回的数组将包含每个几何部件的点对象数组。
PointGeometry 要素将返回单个点对象而不是点对象数组。所有其他要素类型(面、折线和多点)将返回一个点对象数组,或者,如果要素具有多个部分,则返回包含多个点对象数组的数组。
如果一个面包含多个洞,它将由多个环组成。针对面返回的点对象数组将包含外部环及所有内部环的点。外部环总是先返回,接着是内部环,其中以空点对象作为环之间的分隔符。当脚本在地理数据库或 shapefile 中读取面的坐标时,它应包含用于处理内部环的逻辑(如果脚本需要此信息);否则,将只读取外部环。
多部件要素是由多个物理部分组成的,但是只引用数据库中的一组属性。例如,在州行政区图层中,可将夏威夷州看作是一个多部件要素。虽然它是由许多岛屿组成的,但在数据库中仍将其记录为一个要素。
环是一个用于定义二维区域的闭合路径。有效的环是由有效路径组成的,因而环的起点和终点具有相同的 x,y 坐标。顺时针环是外部环,逆时针环则定义内部环。
使用几何令牌
几何令牌同样可以作为快捷方式来替代访问完整几何对象。附加几何令牌可用于访问特定几何信息。访问完整几何往往更加耗时。如果只需要几何的某些特定属性,可使用令牌来提供快捷方式从而访问几何属性。例如,SHAPE@XY 会返回一组代表要素质心的 x,y 坐标。
|
令牌 |
说明 |
|---|---|
|
SHAPE@ |
要素的 几何对象。 |
|
SHAPE@XY |
一组要素的质心 x,y 坐标。 |
|
SHAPE@TRUECENTROID |
一组要素的真正质心 x,y 坐标。 |
|
SHAPE@X |
要素的双精度 x 坐标。 |
|
SHAPE@Y |
要素的双精度 y 坐标。 |
|
SHAPE@Z |
要素的双精度 z 坐标。 |
|
SHAPE@M |
要素的双精度 m 值。 |
|
SHAPE@JSON |
表示几何的 esri JSON 字符串。 |
|
SHAPE@WKB |
OGC 几何的熟知二进制 (WKB) 制图表达。该存储类型将几何值表示为不间断的字节流形式。 |
|
SHAPE@WKT |
OGC 几何的熟知文本 (WKT) 制图表达。其将几何值表示为文本字符串。 |
|
SHAPE@AREA |
要素的双精度面积。 |
|
SHAPE@LENGTH |
要素的双精度长度。 |
读取点几何
以下示例将使用 SearchCursor 打印所有要素的坐标:
1 import arcpy 2 3 infc = arcpy.GetParameterAsText(0) 4 5 # Enter for loop for each feature 6 # 7 for row in arcpy.da.SearchCursor(infc, ["SHAPE@XY"]): 8 # Print x,y coordinates of each point feature 9 # 10 x, y = row[0] 11 print("{0}, {1}".format(x, y))

对于上述要素类,脚本将返回以下信息:
2.0 4.0 8.0 10.0 7.0 5.0
读取多点几何
1 import arcpy 2 3 infc = arcpy.GetParameterAsText(0) 4 5 # Enter for loop for each feature 6 # 7 for row in arcpy.da.SearchCursor(infc, ["OID@", "SHAPE@"]): 8 # Print the current multipoint's ID 9 # 10 print("Feature {0}:".format(row[0])) 11 12 # For each point in the multipoint feature, 13 # print the x,y coordinates 14 for pnt in row[1]: 15 print("{0}, {1}".format(pnt.X, pnt.Y))

对于上述要素类,脚本将返回以下信息:
Feature 0: 3.0 8.0 4.0 4.0 6.0 6.0 Feature 1: 5.0 9.0 8.0 10.0 Feature 2: 9.0 5.0
读取折线或面几何
1 import arcpy 2 3 infc = arcpy.GetParameterAsText(0) 4 5 # Enter for loop for each feature 6 # 7 for row in arcpy.da.SearchCursor(infc, ["OID@", "SHAPE@"]): 8 # Print the current multipoint's ID 9 # 10 print("Feature {0}:".format(row[0])) 11 partnum = 0 12 13 # Step through each part of the feature 14 # 15 for part in row[1]: 16 # Print the part number 17 # 18 print("Part {0}:".format(partnum)) 19 20 # Step through each vertex in the feature 21 # 22 for pnt in part: 23 if pnt: 24 # Print x,y coordinates of current point 25 # 26 print("{0}, {1}".format(pnt.X, pnt.Y)) 27 else: 28 # If pnt is None, this represents an interior ring 29 # 30 print("Interior Ring:") 31 partnum += 1

对于上述要素类,脚本将返回以下信息。要素 0 是单部分面,要素 1 是两部分面,而要素 2 是带有内部环的单部分面。
Feature 0: Part 0: 3.0 8.0 1.0 8.0 2.0 10.0 3.0 8.0 Feature 1: Part 0: 5.0 3.0 3.0 3.0 3.0 5.0 5.0 3.0 Part 1: 7.0 5.0 5.0 5.0 5.0 7.0 7.0 5.0 Feature 2: Part 0: 9.0 11.0 9.0 8.0 6.0 8.0 6.0 11.0 9.0 11.0 Interior Ring: 7.0 10.0 7.0 9.0 8.0 9.0 8.0 10.0 7.0 10.0

浙公网安备 33010602011771号