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

本文介绍了在GIS环境中使用ArcPy创建点要素的方法,包括单个点和批量创建。通过坐标值生成点,再利用PointGeometry转换为点要素,最后使用CopyFeatures_management函数保存为shapefile。示例代码展示了如何从包含经纬度信息的表格批量创建点要素,使用pandas库进行迭代处理。

前言

在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')

在这里插入图片描述

总结

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

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

### 使用 ArcPy要素导入已创建的要素数据集 在 ArcPy 中,将要素导入到已创建的要素数据集中通常涉及使用 `FeatureClassToFeatureClass_conversion` 或 `CopyFeatures_management` 等工具,将源要素类复制到目标要素数据集。要素数据集是地理信息库中用于组织相关要素类的容器,因此将要素导入其中时,需要确保目标要素数据集已经存在并具有与源要素类兼容的空间参考系统。 以下是个完整的示例代码,演示如何将要素类导入到已存在的要素数据集中: ```python import arcpy import os # 设置工作空间 workspace = r"C:\path\to\your\geodatabase.gdb" dataset_name = "MyFeatureDataset" input_feature_class = r"C:\path\to\source\feature_class.shp" output_feature_class_name = "ImportedFeatureClass" # 构建要素数据集的完整路径 dataset_path = os.path.join(workspace, dataset_name) # 将要素类导入到要素数据集中 arcpy.FeatureClassToFeatureClass_conversion( in_features=input_feature_class, out_path=dataset_path, out_name=output_feature_class_name ) ``` 该代码使用 `FeatureClassToFeatureClass_conversion` 工具将个 Shapefile 格式的要素类导入到指定的要素数据集中。`out_path` 参数应指向目标要素数据集的完整路径,而 `out_name` 指定导入后要素类的名称。如果源要素类与目标要素数据集的空间参考不致,ArcPy 会自动进行投影转换,但建议提前确保空间参考致以避免潜在问题[^2]。 此外,也可以使用 `CopyFeatures_management` 工具实现类似功能,如下所示: ```python # 构建输出要素类的完整路径 output_feature_class = os.path.join(dataset_path, output_feature_class_name) # 使用 CopyFeatures_management 导入要素arcpy.CopyFeatures_management(input_feature_class, output_feature_class) ``` ###
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值