这篇文章介绍一些基于Python处理ArccGIS中几何图形的模块和方法。
目录
1 游标访问要素对象字段
arcpy中使用游标来访问要素对象,通过特殊的字段名来访问要素对象的几何特征,在游标使用语法中的第二个参数字段名成列表中使用如下字段名称(注意格式要是字符串哦)。例如:
- OID@:对象标识符字段
- SHAPE@LENGTH:范围几何对象的长度
- SHAPE@:返回整个几何对象
## 举个使用的例子
cursor = arcpy.da.SearchCursor(fc, ["SHAPE@XY", "SHAPE@LENGTH"])
2. 通过游标访问要素
- 单个点要素返回一个点对象;
- 线、多边形、多点则返回一个点对象数组;若要素包含多个部分,则返回一个包含多个点对象的数组。
- getPart(索引):获取几何图形的第索引值部分点对象数组
## 假设有一个有三条线段的线要素(每条线段都只有一个完整的部分)
cursor = arcpy.da.SearchCursor(fc, ["OID@", "SHAPE@"])
for row in cursor:
##打印出当前线段的ID
print("Feature {0}: " .format(row[0]))
##对于单部分要素类,getPart[0]要素就可以返回它的几何对象。
##对于多部分要素的几何读取,就需要用for循环遍历获取了。
for point in row[1].getPart[0]:
## 运行后将分组输出三条线段的点坐标
3. 处理多部分要素
- 实际在处理一些线面要素时,会出现下面的情况:在属性表中只有一条记录,但是在图形界面中却有好几个部分。这种就属于多部分要素。那么对于多部分要素的几何属性处理该怎么办呢?有如下关于多部分要素的处理方法:
## 判断一个要素类的具体数据类型。将返回Point、Polyline、Polygon和Multipoint、Multipatch
arcpy.Describe(fc).shapeType()
##判断该要素是否为多部分的
要素类的某一要素.isMultipart()
## 返回组成这一要素所有部分的数目
要素类的某一要素.partCount()
- 举个例子:假设现在有多个面,并且有些面要素是多部分的。
cursor = arcpy.SearchCursor(fc, ["OID@", "SHAPE@"])
for row in cursor:
print("Feature {0}: " .format(row[0])) //打印每个面要素的ID,此时打印的个数是与表记录中一致的。
partnum = 0
for part in row[1]:
print("Part {0}: " .format(partnum)) //打印每个面要素中的每个部分的ID
for point in part:
print("{0}, {1}" .format(point.X, point.Y)) //打印组成每个部分的点坐标信息。
partnum += 1
4. 处理有孔洞的多边形
- 顺时针定义的是一个外部环,逆时针定义的是一个内部环。
- 孔洞多边访问几何对象时,将首先返回外环,然后返回内环。环与环之间用空的点对象分开。
- 举个例子:
for point in part:
if point: //一般访问顺序都是顺时针
print "外环"
else: //当顺时针访问后没有point对象了,则说明此时要进行逆时针访问,即是内环了
print "内环"
5. 写入几何要素
假设我们要根据一个存入了很多点的txt文件创建一个面要素,具体思想如下:
##指定需要创建的几何要素完整路径,如果是shapefile类型则还需要包括后缀
fc = XXX
arcpy.CreateFeatureclass_management(指定创建的位置, fc, 指定数据类型如"Polygon"或者"Polyline")
## 首先创建这个面要素的游标对象
ursor = arcpy.da.InsertCursor(fc, 字段列表如["SHAPE@"])
## 创建一个数组用于存放点对象
array = arcpy.Array()
## 用于创建规范的arcgis支持的点对象格式
point = arcpy.Point()
##使用fileinput模块遍历读取txt文件信息
for line in fileinput.input(txt文件路径):
//将文件中的点数据信息分别赋值到点对象上
point.ID, point.X, point.Y = 具体数据列表
//将点对象加入到arcgis支持的数组中
array.add(point)
## 将存储点对象的数组转换成符合arcgis规范的几何面对象类型
poly = arcpy.Polygon(array)
## 将此面对象插入到fc中
cursor.insertRow([poly])
del cursor
通过上述步骤我们进行总结:
- 创建空的要素
- 创建arcpy.Point对象
- 创建arcpy.Array对象
- 将txt中的信息规范到point对象
- 将规范后的所有point对象添加到array中
- 将array规范为arcgis的要素对象
- 插入要素对象
6. 使用地理工具处理几何对象
## 生成点对象
point = arcpy.point(x, y)
## 创建单个点几何对象
pg = arcpy.PointGeometry(point)
–原创文章,转载必须注明出处–