当前位置:文档之家› 在ArcGIS下基于Python的矢量数据处理方法

在ArcGIS下基于Python的矢量数据处理方法

测绘技术装备 第18卷 2016年第4期 技术交流 63在ArcGIS 下基于Python 的矢量数据处理方法林璐 王爽 李海泉 侯兴泽 马鹏刚(国家测绘地理信息局第二地形测量队 陕西西安 710054)摘 要:在ArcGIS 中地理处理可以通过Python 脚本语言来具体实现。

通过Python 串联Arcgis 的地理处理工具,实现工作流自动化完成,同时,实践批处理过程,解放人工的机械重复工作,提高效率,进而保证数据质量。

现以地形图中示坡线的正确、严谨表达为实践案例,介绍了在ArcGIS 下利用Python 处理矢量数据,为矢量数据处理的高效、自动化提供解决方法。

关键词:Python ARCGIS 地理处理 示坡线1 引言地理处理是GIS 用户应用的重要组成部分,ArcGIS 的ArcToolbox 窗口为GIS 用户提供了数百个地理处理。

对于数据处理人员在使用ArcGIS 地理处理工具时,就会遇到这样的难题,如何将几个简单的地理处理工具串联起来,自动化地完成一个简单工作流,使得人工操作转换为自动化的程序批处理过程[1]。

Python 是一种不受局限、跨平台的开源编程语言,它功能强大且简单易学。

同时,它可伸缩程度高,适于大型项目或小型的一次性程序(称为脚本),并且可嵌入(使ArcGIS 可脚本化)。

目前,Python 已延伸到ArcGIS 中,成为了一种用于进行数据分析、数据转换、数据管理和地图自动化的语言。

运用Python 语言可以实现对地理数据的批处理,从而有助于提高工作效率[2]。

2 开发案例说明示坡线,是指示斜坡降落的方向线,它与等高线垂直相交。

一般表示在谷地、山头、鞍部、图廓边及斜坡方向不易判读的地方。

凹地的最高、最低一条等高线上也应表示示坡线[3]。

在测绘4D 产品之一的数字线划图(DLG)中,示坡线一般以有向点或有向线(长度为定值的线段)的方式表达。

其中,有向点应严格捕捉相应等高线,通过填写要素角度属性项表达所示方向;有向线为线段,起始节点应严格捕捉相应等高线,终止节点指向所示方向,线段长度为规范要求长度。

图1 山丘、山峰和盆地、洼地的示坡线示意图一般在DLG 制作过程中,特别是中小比例尺地形图,通常利用立体测图系统,在恢复立体影像相对模型的情况下,人工判断地貌,并采集示坡线。

采集时要求在对应等高线采集第一点,沿斜坡的方向采集第二点。

为提高生产效率及生产工序技术要求,此时采集的示坡线,不符合前述DLG 拓扑规范要求。

存在未严格捕捉等高线,造成悬挂和相交的拓扑问题;或示坡线要素长度不定,不符合技术要求;亦或示坡线采集图形上看正确,实际上刚好与要求相反,是由斜坡降落方向向等高线采集。

这些情况致使下工序矢量数据编辑处理时,需要人工核对、修改,工作量大且繁琐(尤其是在沙漠、特殊丘陵地区,1幅1∶10000比例尺地形图可能需要上千个示坡线表示地貌形态),如果作业人员责任心不足还易造成质量隐患。

3 处理方案设计 3.1 方案设计思路数据要素处理的关键是两点:一是解决拓扑问题,二是实现示坡线角度正确表达。

因此解决思路是:首先,要满足拓扑要求,即相应要素之间严格64 技术交流 测绘技术装备 第18卷 2016年第4期捕捉,可以通过处理要素线段与等高线之间的悬挂和相交拓扑问题实现,使得要素线段的一个端点捕捉到等高线上。

然后,在确定该端点为要素线段起始点的基础上,将方向正确的要素线段转换为点,并继承线段方向,即获得有向点。

最后,如果示坡线是由定长有向线表达,再依据有向点的角度值,生成方向、长度均符合要求的有向线。

3.2 方案操作的具体流程(1)提取等高线和原始示坡线要素,并导入一个新的数据集,为数据处理做好准备。

经过后续处理,将成果示坡线与数据中原始示坡线要素核对,没有错漏后,自动将原始示坡线要素删除,并导入核对后最终示坡线。

(2)使用悬挂、相交功能,将示坡线延伸或打断,使得示坡线与相应的等高线实现严格的捕捉。

应注意合理设置拓扑容差,过小可能不能自动化延伸或打断,过大可能形成错误的拓扑关系,造成新的问题。

(3)判断示坡线与等高线相交的节点是起始点,指向斜坡方向的是终止点。

首尾节点位置的正确性,是决定角度计算值合理的前提。

当节点位置不正确时,利用反向功能,将要素采集方向反转。

(4)将示坡线要素线段转有向点。

示坡线要素与等高线相交处为有向点的位置。

角度值依据示坡线要素方向确定。

在角度确定时,应考虑不同项目设计要求,对角度0值的起算方向,以及旋转方向的定义。

另外,还要注意角度值的精度取位要求。

(5)示坡线除了有向点表达方式外,还有固定长度要求向线段表达方式。

可以依据上步有向点的位置及角度,创建符合相应项目设计要求的定长有向线段要素。

(6)经过核查处理好的示坡线要素,将最终成果导入数据库。

图2 示坡线要素处理流程示意图4 关键函数及源代码实现 ArcGIS 的地理处理均有相应功能函数,Python 可以直接调用,对于开发人员十分友好。

同时,Python 也可以通过程序开发语言实现需求功能[4]、[5]。

(1)处理悬挂、及打断可通过调用“延伸线”、“修剪线”两个功能函数实现。

其中,延伸线功能语法是:ExtendLine_edit(in_features,{length},{ex tend_to});修剪线功能语法是:TrimLine_edit(in_features,{dangle_length},{delete_shorts})。

测绘技术装备第18卷 2016年第4期技术交流 65延伸线修剪线图3 函数功能示意图(2)将线要素转为点,并判断起始点或终止点,可调用“要素折点转点”功能函数,语法是:FeatureVerticesToPoints_management(in_featur es,out_feature_class,{point_location})。

参数point_location为指定输出点的创建位置。

本文关注“START”和“END”两个设置,即在输入要素的起点或终点(第一个或最后一个折点)处创建一个点。

创建起始点的代码实例:import arcpyfrom arcpy import envenv.workspace = “D:/Testdata”arcpy.FeatureVerticesToPoints_management (TestSPX.shp,“D:/Testdata/output/TestSPXstart.shp”,“START”)(3)将线要素反向调用“延伸线”功能函数,语法是:FlipLine_edit(in_features)。

(4)为获取线要素角度值,可调用“线性方向平均值”功能函数,该函数可识别一组线的平均方向、长度和地理中心。

其中,输出线要素的属性值包括罗盘角的CompassA(以正北为基准方向按顺时针旋转)、方向平均值的DirMean(以正东为基准方向按逆时针旋转)。

功能语法是:irectionalMean_stats(Input_Feature_Class,Output _Feature_Class,Orientation_Only,{Case_Field})。

代码实例:import arcpyarcpy.env.workspace = r“D:/Testdata”arcpy.DirectionalMean_stats(“TestSPX.sh p”,“TestdirSPX.shp”,“DIRECTION”,“#”) (5)通过已知端点位置和方向角度值,创建需求长度线段,是一个简单的几何原理。

依据方向角度值,将线段长度分解到直角坐标系两个方向的增量,然后叠加到已知端点的位置坐标值中,从而获取示坡线要素线段的终止节点坐标位置。

在两个已知点位置的基础上,Python实现点集合创建线段要素的代码实例:import arcpyfc=“D:/Testdata/TestSPXline.shp”cursor=arcpy.da.InsertCursor(fc,[“SHAPE@”])array=arcpy.Array([arcpy.Point(Ax,Ay),ar cpy.Point(Bx,By)])polyline=arcpy.Polyline(array)cursor.insertRow([polyline])5 结束语生产是一个重复的实践过程,测绘生产同时还要关注每一次重复的精度满足。

在测绘数据处理方面,Arcgis提供了众多地理处理工具,它保障了每次重复的可行性。

而通过Python我们将每一个可行性组装并统一起来,最终实现了提高效率、保证质量的结果,满足了测绘生产需求。

本文通过DLG产品中,示坡线要素的处理方案的成功实践,验证了基于Python的ARCGIS应用在测绘生产方面的高效与可靠,为矢量数据自动化处理提供解决思路。

参考文献:[1] 柳琳.基于工作流的地理处理建模技术[J].地理空间信息,2011,9(1):39-42.[2] 石晶,郭子珍,李小勇.ArcGIS中应用Python脚本进行空间数据批量处理的研究与实现[J].河南科技,2012(11):60-61.[3] GB/T 20257.2-2006,国家基本比例尺地形图图式第2部分:1:5 000 1:10 000地形图图式[S].[4] 田庆,陈美阳,田慧云.ArcGIS地理信息系统详解(10.1版)[M].北京:希望电子出版社,2014.[5] PaulA.Zandbergen.面向ArcGIS的Python脚本编程[M].北京:人民邮电出版社,2014.。

相关主题