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

前言

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

在这里插入图片描述

总结

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

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

  • 6
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 我可以回答关于arcpy要素的代码的问题。你可以参考以下代码: ```python import arcpy # 设置工作空间 arcpy.env.workspace = r"C:\data" # 输入要转换的要素类和输出要素类 in_features = "lines.shp" out_feature_class = "points.shp" # 使用FeatureToPoint工具进行要素 arcpy.FeatureToPoint_management(in_features, out_feature_class, "CENTROID") ``` 以上代码会将输入的要素类中的所有线要素转换为要素,并且输出到指定的输出要素类中。 ### 回答2: arcpy是ArcGIS软件中的一个Python库,用于处理地理数据。要素是将矢量要素转化为要素的操作。 下面是一个示例代码,演示了如何使用arcpy库进行要素的操作: ```python import arcpy # 设置工作空间 arcpy.env.workspace = "C:/data" # 输入要素类路径 input_featureclass = "input_featureclass.shp" # 输出要素类路径 output_featureclass = "output_featureclass.shp" try: # 创建新的要素arcpy.CreateFeatureclass_management(arcpy.env.workspace, output_featureclass, "POINT") # 使用游标遍历要素 with arcpy.da.SearchCursor(input_featureclass, ["SHAPE@"]) as cursor: # 使用插入游标向要素类中插入要素 with arcpy.da.InsertCursor(output_featureclass, ["SHAPE@"]) as ins_cursor: for row in cursor: # 获取要素的中心 centroid = row[0].centroid # 插入要素 ins_cursor.insertRow([centroid]) print("要素成功!") except arcpy.ExecuteError: print(arcpy.GetMessages()) ``` 在上述代码中,首先我们设置了工作空间,然后指定了输入要素类的路径和输出要素类的路径。接下来通过CreateFeatureclass_management函数创建了一个新的要素类。然后,使用SearchCursor迭代读取输入要素类中的要素,再使用InsertCursor将要素的中心作为要素插入到输出要素类中。 以上就是用arcpy库进行要素的代码示例。 ### 回答3: arcpy是ArcGIS中用于进行地理数据处理的Python库。要素是将矢量要素数据中的线或面要素转换成要素数据的过程。下面是使用arcpy进行要素的代码示例: ```python import arcpy # 设置工作空间 arcpy.env.workspace = "C:/data" # 输入要素类的路径 input_feature_class = "C:/data/input.shp" # 输出要素类的路径 output_feature_class = "C:/data/output.shp" # 使用FeatureToPoint工具进行要素 arcpy.FeatureToPoint_management(input_feature_class, output_feature_class, "INSIDE") ``` 以上代码中,我们首先导入了arcpy库,然后设置了工作空间。接着指定了输入要素类的路径和输出要素类的路径。最后使用`FeatureToPoint_management`工具进行要素,其中的`INSIDE`表示要素在线或面要素内部。 注意,这只是一个示例代码,路径和参数需要根据实际情况进行修改。同时,使用之前请确保已正确安装了ArcGIS软件和相应的Python环境。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值