ArcGIS—基于Python的脚本编程(4)

这篇文章介绍一些基于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)    

–原创文章,转载必须注明出处–

  • 4
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值