0
点赞
收藏
分享

微信扫一扫

Arcpy 点要素的那些事儿(一)

艾米吖 2022-03-19 阅读 121

文章目录

前言

在GIS里,点要素作为矢量数据的三大巨头之一,是每个giser都必须知道的。在日常中,我们使用ArcMap可以轻松操作点要素,那么在Arcpy开发的世界里,点要素又是如何创建使用和进行分析,,这背后有着十分精彩的故事。

点与点要素

点(Point)点要素(Point Geometry) 是两种需要进行区分的事物,虽然他们都是由坐标组成,但在地理学里,点要素是指具有空间参考信息的点,是有实际地理意义的。而点,实质上就只是一对数值,不具有地理意义,因此,在开始创建点要素之前,我们需要区分好这两个概念。

创建点要素的核心工具

在Arcpy里创建点要素的方法有很多,从整体上划分,有创建单个点要素多点要素两种,而在多个点要素创建里头,各种方法层出不穷,但主要可以分为以下几类:

  1. 将坐标值保存到属性表里,主要运用游标进行属性更新。
  2. 通过坐标值直接创建点,进而转成点要素,通过迭代的方法重复上述过程生成点要素列表,最后将点要素列表转成所需数据

无论使用哪种方法,在创建点要素的时候需要使用的函数也相差无异。主要用到以下几个函数:

  1. arcpy.Point(x,y) -- 用于生成点(*注意不是点要素,是点!!!*)
  2. arcpy.PointGeometry(point,spatial_reference) -- 生成点要素

创建单个点要素

创建单个点要素的方法比较简单,只需要有经纬度坐标即可,代码如下:

#创建点
test_point= arcpy.Point(-77.4349451, 37.5408265)

#创建点要素
test_geo = arcpy.PointGeometry(test_point,spef)

#保存点要素
arcpy.CopyFeatures_management(test_geo,'test3.shp') 

上面保存点要素用到的方法是一个叫做CopyFeatures_management的函数,这里有两个核心参数:

1. 需要保存的要素类
2. 第二个是保存的文件名。

注意记得设置好工作环境,不然容易报错~

创建多点要素

上面讲过主要有游标和迭代两种方法,游标法比较常见,官网示例也是用的游标,那我就选择用迭代的方法来弥补一下这块的空缺吧。

我的做法是用一个存储经纬度的表来批量新建点要素。通过相应的字段传给点的X、Y,当然我这里用pandas库来实现读取和迭代。
在这里插入图片描述
代码如下:

# -*— coding: utf-8 -*-
import arcpy
import sys
reload(sys)
import pandas as pd
sys.setdefaultencoding("utf-8")

#设置工作空间
arcpy.env.workspace = 'D:/New Desktop/2019全国行政区划'

#准备了一个带有经纬度信息的表
table = 'XY.txt'

#迭代过程中存储点要素的列表
pointList = []

#读取经纬度表
XY_table = pd.read_table(table,sep=',')

#定义空间参考,众所周知4326是我们熟悉的wgs84
spef = arcpy.SpatialReference(4326)

#使用pandas里的iterrows方法进行迭代,该方法会返回每一行的索引和内容
for index,row in XY_table.iterrows():
    X = row['X']
    Y = row['Y']

    #将x、y传入Point()中生成点
    point = arcpy.Point(X,Y)
    point_geo = arcpy.PointGeometry(point,spef)
    
    #生成点要素之后将其放进列表中
    pointList.append(point_geo)

#将该要素保存为test2.shp,并输出到工作路径下
arcpy.CopyFeatures_management(pointList,'test2.shp')

总结

我觉得这个方法是比较简单的,而且在没有字段要求的时候也不用设置插入、更新游标,核心过程简单且功能简单。如果需要添加字段的话可以用其他函数封装,无需在创建点要素的过程中增加其他功能,这样可拓展性不仅下降了,而且对于阅读者来说也增加难度。

当然,至于迭代的方法快还是用游标更新属性表的速度快,我没有认真比较,因此可能思考不够全面,记录下来以后方便反省!

举报

相关推荐

0 条评论