基于ArcPy的增减挂钩报备坐标文件的批量生成

基于ArcPy的增减挂钩报备坐标文件的批量生成

湖北众易伟业土地勘测规划有限公司湖北武汉430000

摘要:工作中常遇到增减挂钩实施方案项目,在进行系统报备时,需要分地块上传标准格式的txt坐标文件,有时会遇到一个实施方案中涉及上千个地块,需要制作上千个txt坐标文件,会耗费大量时间,本文研究利用ArcPy批量生成报备坐标文件的方法,能使工作效率得到极大的提高。

关键词:ArcGIS;ArcPy;Python;坐标文件

1、概述

增减挂钩项目报备中,坐标文件是一项重要的基础资料,必须按照国土资源部要求的坐标交换格式上报。其模板如下:

[属性描述]

格式版本号=1.01版本

数据产生单位=XX公司

数据产生日期=2018-11-10

坐标系=2000国家大地坐标系

几度分带=3

投影类型=高斯克吕格

计量单位=米

带号=37

精度=0.01

转换参数=0,0,0,0,0,0,0

[地块坐标]

界址点数,地块面积,地块编号,地块名称,面(点、线),图幅号,地块用途,地类编码,@

点号,地块圈号,X坐标,Y坐标

……

点号,地块圈号,X坐标,Y坐标

如果带有挖空的地块,则外圈的圈号为1,挖空的内圈圈号依次为2,3,4……。圈号不能重复。

传统坐标文件生成方式复杂繁琐,当项目中涉及地块越多,浪费的人力、时间越多。在工作中曾碰到过一个增减挂钩项目中涉及拆旧地块上千个的情况,需要制作上千个txt坐标文件,用传统方式会耗费大量的时间,通过ArcGIS,利用Python与ArcPy编写一个批量导出坐标文件的脚本,能极大的提高工作效率。

2、批量生成坐标文件的脚本实现

2.1ArcPy简介

ArcPy是一个以成功的arcgisscripting模块为基础并继承arcgisscripting功能进而构建而成的站点包。目的是为以实用高效的方式通过Python执行地理数据分析、数据转换、数据管理和地图自动化创建基础。使用Python和ArcPy,可以很方便的通过脚本调用ArcGIS的各种函数和功能,可以直接在ArcMap中使用命令行,也可以创建Python脚本,更能在ArcGIS中通过Python创建脚本工具。Python作为一种高级编程语言,它简单易懂,适合编程基础比较薄弱的人学习,短短几行代码就能实现一个小功能。非常容易入门。

2.2ArcPy中的面对象

ArcPy中的面对象简单来说是指由一系列相连的x,y坐标对定义的闭合形状。具体来说面对象是由一个或多个环对象的有序集合,如果一个多边形内包含空洞,那表示这个多边形包含很多环:一个外环和若干内环。环是定义在二维平面上的闭合路径,路径由一系列点构成,其中起始点和终止点的坐标相同。外环是顺时针定义的路径,内环是逆时针定义的路径,在读取面对象时,外环总是先返回,接着是内环,环之间以一个空的点对象作为分隔符。

2.3实现批量导出坐标文件

通过分析坐标文件模板文件,很容易看出,对于同一个项目来说,文件头部分是一致的,即[属性描述]至[地块坐标]之间的内容。[地块坐标]之后是一行地块的相关属性信息,接下来才是地块的坐标。那么实现批量导出坐标文件的思路就很清晰了:首先利用ArcPy中的搜索游标和for循环遍历地块图层中的每一个地块;然后利用Python中的open()函数,创建一个以地块编号为名称的txt文件,利用write()函数将坐标文件头内容写入创建的txt文件中;最后利用ArcPy与Python读取地块属性与坐标,并以坐标文件模板的格式写入txt文件中,需要注意的是,ArcGIS中的X、Y坐标与测量坐标的X、Y相反。具体实现如下:

#-*-coding:utf-8-*-

importArcPy

importsys

reload(sys)

sys.setdefaultencoding('utf-8')

path=r"E:\try"#指定坐标文件存放的路径

fc=r"E:\try\CJDK.shp"#指定地块范围图层

cursor=ArcPy.da.SearchCursor(fc,["SHAPE@","SHAPE@AREA",

"DKBH","DKMC","TFH"])

forrowincursor:

jzd=1

filename=path+"\\"+str(row[2])+".txt"

output=open(filename,"w")

output.write("[属性描述]"+'\n')

output.write("格式版本号=1.01版本"+'\n')

output.write("数据产生单位=XX国土资源局"+'\n')

output.write("数据产生日期=2018-11-12"'\n')

output.write("坐标系=2000国家大地坐标系"+'\n')

output.write("几度分带=3"+'\n')

output.write("投影类型=高斯克吕格"+'\n')

output.write("计量单位=米"+'\n')

output.write("带号=37"+'\n')

output.write("精度=0.01"+'\n')

output.write("转换参数=0,0,0,0,0,0,0"+'\n')

output.write("[地块坐标]"+'\n')

output.write(str(row[0].pointCount)+","+

str(round(row[1]/10000,4))+","+row[2]+","+row[3]+

","+u"面"+","+row[4]+",,,@"+'\n')

ringh=1

forpointinrow[0].getPart(0):

ifpoint:

output.write("J"+str(jzd)+","+str(ringh)+","+

str(point.Y)+","+str(point.X)+'\n')

else:

ringh+=1

jzd+=1

output.close()

3、结束语

通过此脚本导出某县增减挂钩1700个拆旧地块坐标,一共用时8.36秒。极大的提高了工作效率,降低了人工劳动,且通过脚本导出的坐标文件标准、准确,极大的降低了人工失误。用于其他地区的坐标导出时,只需更改脚本中坐标文件存放路径、地块范围图层、文件头部分内容即可。也可将此脚本在ArcGIS中制作成工具箱,更方便使用。

参考文献:

[1]ArcGIS10.2帮助文档

[2](美)PaulA.Zandbergen著;李明巨,刘昱君,陶旸,张磊译.面向ArcGIS的Python脚本编程[M].北京:人民邮电出版社,2014:143-150

标签:;  ;  ;  

基于ArcPy的增减挂钩报备坐标文件的批量生成
下载Doc文档

猜你喜欢