刘曦
摘 要:地形图接图表能够直观地反映地形图的分布情况,是地形图管理的重要辅助资料。为了解决在实际工作中接图表制作的问题,该文研究了一种基于Arcpy的接图表快速生成方法。该方法可以根据指定范围、图幅号等信息快速生成接图表。该文以湖南省1∶5万和1∶2000图幅为例进行了实验,实验结果表明该方法快速、有效,能够满足地形图管理工作的需要。
关键词:地形图 接图表 Arcpy
中图分类号:P208 文献标识码:A 文章编号:1672-3791(2017)07(a)-0011-02
我国国家基本比例尺地形图采用全国统一的标准进行分幅和编号,基本比例尺图幅是地形图生产、管理的基本单元。各图幅间相互位置和分布情况一般是以接图表的形式展示的,接图表中包含了图幅编号、图幅范围等信息,能够为数据管理提供帮助。然而,在实际工作当中,常常会出现接图表缺失、接图表与数据不对应等情况,给数据管理工作带来不便。因此,该文介绍一种基于Arcpy快速生成接图表的方法,该方法能够根据不同的比例尺和范围一键生成接图表,从而提高工作效率。
1 地形图分幅与编号
国家基本比例尺地形图一共包括1∶100万到1∶500不等11种比例尺。1∶100万地形图采用国际1∶100万地图分幅标准,1∶50万到1∶500比例尺的地形图都以1∶100万比例尺的地形图为基础,按规定的经差和纬差划分图幅,各比例尺地形图代码与图幅范围见表1。
其中,1∶2 000、1∶1 000、1∶500地形图经纬度分幅是在GB/T 13989-2012[1]中所新增的内容,是国家推荐使用的分幅方式,该标准也保留了矩形分幅的内容。由于历史原因,我国积累了大量矩形分幅的地形图,且目前新生产的大于1∶2 000比例尺的地形图仍以矩形分幅为主。因此,该文考虑了经纬度分幅和矩形分幅两种情况分别进行研究。
2 指定范围生成接图表
在实际工作当中,经常需要根据指定的范围生成接图表,利用Arcpy中的CreateFishnet[2]函数可以快速完成这项工作。
2.1 参数设置
CreateFishnet函数共有11个参数,该文以湖南省1∶50 000(经纬度分幅)和1∶2000(矩形分幅)两种比例尺为例进行实验,所采用的参数值设置如表2所示。
其中,生成接图表涉及的关键参数为原点坐标(origin_coord)、单元宽度(cell_width)、单元高度(cell_height)、对角点坐标(corner_coord),这几个参数决定了所生成的接图表的大小和位置。
需要注意的是,经纬度分幅和矩形分幅所采用的坐标系是不一样的,因此在调用CreateFish函数前应根据不同的分幅类型设置相应的坐标系。按照国家标准,我国地形图经纬度分幅和矩形分幅分别采用CGCS2000地理坐标系和CGCS2000高斯投影坐标系。在Arcpy中,可以通过调用SpatialReference函数对坐标系进行设置,对应的Python语句如下:
env.outputCoordinate=arcpy.SpatialReference(4490)。
其中,4490是CGCS2000地理坐标系的WKID码,适用于1∶50 000图幅,1∶2 000图幅对应的坐标系是CGCS2000高斯投影3度分带36带, WKID码为4545。当矩形分幅接图表跨越不同度带时,需要先根据投影带进行分组,分别在相应的坐标系下生成接图表。
2.2 图幅号计算
接图表矢量文件生成以后,还需要计算每图幅号,并赋值到相应的要素中。应首先计算图幅中心点坐标,再根据地形图分幅规则计算图幅号[4]。
式中B表示图幅中心点纬度;L表示图幅中心点经度;dB表示图幅纬度差;dL表示图幅经度差;M表示比例尺代码;int()用于取整;str()用于数值转字符串;zfill()用于在数值前补0。图幅中心点坐标可以采用!SHAPE.CENTROID.X!获得。矩形分幅图幅号代表的是图幅的西南角坐标,因此只需将该节点的坐标换算成图幅号的格式即可。确定好图幅号计算语句以后,就可以使用Arcpy中的字段计算函数arcpy.CalculateField_management()计算出图幅号并赋值到相应的字段中。
3 指定图幅号生成接图表
在地形图管理工作中,常常会遇到需要根据一批以图幅号命名的文件、文件夹,或一个图幅清单来生成接图表的情况。在Arcpy中,可以将这个问题分解为以下三個步骤:(1)根据文件名获取图幅号列表;(2)按照图幅号计算图幅坐标;(3)按照给定的坐标生成多边形。该流程如图1所示。
按图幅号计算图幅坐标的方法根据分幅方式有所不同。经纬度分幅的图幅号中包含了1:100图幅号、图幅比例尺、图幅在百万图幅中的行列号三种信息,根据这些信息就可以计算出该图幅四个角点坐标。矩形分幅的图幅号本就是以西南点坐标命名的,因此只需要根据该比例尺图幅的宽度和高度就能计算出四个角点的坐标。计算出图幅坐标以后,就可以使用Arcpy中的创建多边形函数生成接图表。具体步骤为:(1)使用arcpy.Point()成点对象;(2)使用arcpy.Array()构建坐标串。(3)使用arcpy.Polygon()生成多边形。最后将多边形列表输出到要素集即可。
4 结语
该文介绍了一种基于Arcpy快速生成地形图接图表的方法,该方法支持任意范围和任意比例尺接图表的生成。在实际工作中,只须对该文所提供的方法进行一定的修改,就可以满足各种情况的需要。
参考文献
[1] GB/T 13989-2012,国家基本比例尺地形图分幅与编号[S].
[2] ESRI.ArcGIS10.1帮助[EB/OL]. http://resources.arcgis.com/zh-cn/help/main/10.1/index.html,2017-04-25.
[3] 聂小波,邱儒琼,洪亮,等.基于ArcMap的图幅结合表快速生成方法研究[J].地理空间信息,2015(4):165-167.
[4] 任娟.一种快速制作地形图图幅结合表的方法[J].北京测绘,2010(2):78-80.