劉曦
摘 要:地形圖接圖表能夠直觀地反映地形圖的分布情況,是地形圖管理的重要輔助資料。為了解決在實際工作中接圖表制作的問題,該文研究了一種基于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.