尊重原创,转载时请注明来源
基于Arcpy根据属性表XY坐标生成点要素文件
一、需求描述
这是一次在执行近邻分析后发生的故事
在项目实施过程中,如果执行近邻分析,会在原有数据属性表的基础上,获得近邻要素的坐标信息。这时若需要将这些近邻要素进行导出,并生成新的要素类,当前arcgis软件的操作较为复杂。因此,通过编写arcpy脚本,创建“根据属性表XY坐标生成点要素文件”工具
二、传统方式
目前,我已知的方式的就是:(如果还有其他方式麻烦留言告诉我,我是真的想不到其他方法了!!!)
① 先执行近邻分析
② 再导出或复制近邻分析属性表(A表)
③ 接着重新导入A表
④ 将近邻分析结果的XY坐标(nearX, nearY)展开到地图上
⑤ 最后再导出为要素类数据。
五步法过程,繁琐复杂,往往需要经历好几步,且中间涉及了图形展示等,在数据量较大时,等待的时间往往较长。
反正我是苦于此方法已久,现在正好想到办法解决他。
三、解决思路
利用arcpy脚本,编写工具,实现工具操作,一步完成。
四、脚本代码介绍
主要思路
- 读取近邻分析结果要素文件
- 借助点几何列表对象,逐条记录读取坐标,生成新的点记录,并生成要素文件
包含功能
(1) 应用原数据文件坐标系统信息
(2)由用户选择XY字段
(3)由用户指定路径生成新的点要素文件
arcpy函数
函数用法详情请参考ArcGIS帮助文档,里面有详细具体的介绍。
https://desktop.arcgis.com/zh-cn/arcmap/10.3/analyze/arcpy/what-is-arcpy-.htm
下面单拎了几个主要的实现函数
- arcpy.PointGeometry()
- pointGeometryList.append()
- arcpy.CopyFeatures_management()
五、代码演示
下面放上我自己的亲测代码,该代码已实现工具化,不信你就试试吧
界面
代码块
# -*- coding:gbk -*-
#@author:GIS公寓#Copyright © GIS公寓(www.sircourse.com)
# 介绍:根据要素数据属性表中的XY坐标数据,生成点要素。 坐标参考跟要素数据保持一致。
# 参数:
# 1)输入源数据
# 2)生成新的点要素文件
# 3)选择X坐标字段
# 4)选择Y坐标字段
import arcpy
import os
# ----输入内容
# ----有XY信息的要素数据
oldpoint = arcpy.GetParameterAsText(0)
# ----根据XY生成的新要素数据
newpoint = arcpy.GetParameterAsText(1)
# ----输入坐标
x_zb = arcpy.GetParameterAsText(2)
y_zb = arcpy.GetParameterAsText(3)
# 确定生成的要素类型为点
# 确定生成的要素投影坐标
get data pointGeometryList = []
# 创建一个点要素对象列表
point = arcpy.Point()
# 坐标系须修改与输入一致
spRef = arcpy.Describe(oldpoint).spatialReference
def main():
with arcpy.da.SearchCursor(oldpoint, (x_zb, y_zb)) as cursor:
for row in cursor:
point.X = float(row[0])
point.Y = float(row[1])
pointGeometry = arcpy.PointGeometry(point, spRef)
pointGeometryList.append(pointGeometry)
arcpy.CopyFeatures_management(pointGeometryList,newpoint)
message = arcpy.GetMessages()
arcpy.AddMessage(message)
main()
成果演示
运行工具前的属性表
运行工具后得到要素类的属性表
写在最后
工具的构思是源于实际项目需求,如果有相关的需求,欢迎留言探讨。
第一次尝试转载文章,碎石转载,原创还是自己的,哈哈哈
因为这次从自己个人网站转载过来的,感谢阅读,有什么问题欢迎留言评论
更多文章请登录:www.sircourse.com,或者公众号:“GIS公寓”