劉曦
摘 要:地形圖接圖表能夠直觀地反映地形圖的分布情況,是地形圖管理的重要輔助資料。為了解決在實(shí)際工作中接圖表制作的問題,該文研究了一種基于Arcpy的接圖表快速生成方法。該方法可以根據(jù)指定范圍、圖幅號等信息快速生成接圖表。該文以湖南省1∶5萬和1∶2000圖幅為例進(jìn)行了實(shí)驗(yàn),實(shí)驗(yàn)結(jié)果表明該方法快速、有效,能夠滿足地形圖管理工作的需要。
關(guān)鍵詞:地形圖 接圖表 Arcpy
中圖分類號:P208 文獻(xiàn)標(biāo)識碼:A 文章編號:1672-3791(2017)07(a)-0011-02
我國國家基本比例尺地形圖采用全國統(tǒng)一的標(biāo)準(zhǔn)進(jìn)行分幅和編號,基本比例尺圖幅是地形圖生產(chǎn)、管理的基本單元。各圖幅間相互位置和分布情況一般是以接圖表的形式展示的,接圖表中包含了圖幅編號、圖幅范圍等信息,能夠?yàn)閿?shù)據(jù)管理提供幫助。然而,在實(shí)際工作當(dāng)中,常常會出現(xiàn)接圖表缺失、接圖表與數(shù)據(jù)不對應(yīng)等情況,給數(shù)據(jù)管理工作帶來不便。因此,該文介紹一種基于Arcpy快速生成接圖表的方法,該方法能夠根據(jù)不同的比例尺和范圍一鍵生成接圖表,從而提高工作效率。
1 地形圖分幅與編號
國家基本比例尺地形圖一共包括1∶100萬到1∶500不等11種比例尺。1∶100萬地形圖采用國際1∶100萬地圖分幅標(biāo)準(zhǔn),1∶50萬到1∶500比例尺的地形圖都以1∶100萬比例尺的地形圖為基礎(chǔ),按規(guī)定的經(jīng)差和緯差劃分圖幅,各比例尺地形圖代碼與圖幅范圍見表1。
其中,1∶2 000、1∶1 000、1∶500地形圖經(jīng)緯度分幅是在GB/T 13989-2012[1]中所新增的內(nèi)容,是國家推薦使用的分幅方式,該標(biāo)準(zhǔn)也保留了矩形分幅的內(nèi)容。由于歷史原因,我國積累了大量矩形分幅的地形圖,且目前新生產(chǎn)的大于1∶2 000比例尺的地形圖仍以矩形分幅為主。因此,該文考慮了經(jīng)緯度分幅和矩形分幅兩種情況分別進(jìn)行研究。
2 指定范圍生成接圖表
在實(shí)際工作當(dāng)中,經(jīng)常需要根據(jù)指定的范圍生成接圖表,利用Arcpy中的CreateFishnet[2]函數(shù)可以快速完成這項(xiàng)工作。
2.1 參數(shù)設(shè)置
CreateFishnet函數(shù)共有11個參數(shù),該文以湖南省1∶50 000(經(jīng)緯度分幅)和1∶2000(矩形分幅)兩種比例尺為例進(jìn)行實(shí)驗(yàn),所采用的參數(shù)值設(shè)置如表2所示。
其中,生成接圖表涉及的關(guān)鍵參數(shù)為原點(diǎn)坐標(biāo)(origin_coord)、單元寬度(cell_width)、單元高度(cell_height)、對角點(diǎn)坐標(biāo)(corner_coord),這幾個參數(shù)決定了所生成的接圖表的大小和位置。
需要注意的是,經(jīng)緯度分幅和矩形分幅所采用的坐標(biāo)系是不一樣的,因此在調(diào)用CreateFish函數(shù)前應(yīng)根據(jù)不同的分幅類型設(shè)置相應(yīng)的坐標(biāo)系。按照國家標(biāo)準(zhǔn),我國地形圖經(jīng)緯度分幅和矩形分幅分別采用CGCS2000地理坐標(biāo)系和CGCS2000高斯投影坐標(biāo)系。在Arcpy中,可以通過調(diào)用SpatialReference函數(shù)對坐標(biāo)系進(jìn)行設(shè)置,對應(yīng)的Python語句如下:
env.outputCoordinate=arcpy.SpatialReference(4490)。
其中,4490是CGCS2000地理坐標(biāo)系的WKID碼,適用于1∶50 000圖幅,1∶2 000圖幅對應(yīng)的坐標(biāo)系是CGCS2000高斯投影3度分帶36帶, WKID碼為4545。當(dāng)矩形分幅接圖表跨越不同度帶時,需要先根據(jù)投影帶進(jìn)行分組,分別在相應(yīng)的坐標(biāo)系下生成接圖表。
2.2 圖幅號計(jì)算
接圖表矢量文件生成以后,還需要計(jì)算每圖幅號,并賦值到相應(yīng)的要素中。應(yīng)首先計(jì)算圖幅中心點(diǎn)坐標(biāo),再根據(jù)地形圖分幅規(guī)則計(jì)算圖幅號[4]。
式中B表示圖幅中心點(diǎn)緯度;L表示圖幅中心點(diǎn)經(jīng)度;dB表示圖幅緯度差;dL表示圖幅經(jīng)度差;M表示比例尺代碼;int()用于取整;str()用于數(shù)值轉(zhuǎn)字符串;zfill()用于在數(shù)值前補(bǔ)0。圖幅中心點(diǎn)坐標(biāo)可以采用!SHAPE.CENTROID.X!獲得。矩形分幅圖幅號代表的是圖幅的西南角坐標(biāo),因此只需將該節(jié)點(diǎn)的坐標(biāo)換算成圖幅號的格式即可。確定好圖幅號計(jì)算語句以后,就可以使用Arcpy中的字段計(jì)算函數(shù)arcpy.CalculateField_management()計(jì)算出圖幅號并賦值到相應(yīng)的字段中。
3 指定圖幅號生成接圖表
在地形圖管理工作中,常常會遇到需要根據(jù)一批以圖幅號命名的文件、文件夾,或一個圖幅清單來生成接圖表的情況。在Arcpy中,可以將這個問題分解為以下三個步驟:(1)根據(jù)文件名獲取圖幅號列表;(2)按照圖幅號計(jì)算圖幅坐標(biāo);(3)按照給定的坐標(biāo)生成多邊形。該流程如圖1所示。
按圖幅號計(jì)算圖幅坐標(biāo)的方法根據(jù)分幅方式有所不同。經(jīng)緯度分幅的圖幅號中包含了1:100圖幅號、圖幅比例尺、圖幅在百萬圖幅中的行列號三種信息,根據(jù)這些信息就可以計(jì)算出該圖幅四個角點(diǎn)坐標(biāo)。矩形分幅的圖幅號本就是以西南點(diǎn)坐標(biāo)命名的,因此只需要根據(jù)該比例尺圖幅的寬度和高度就能計(jì)算出四個角點(diǎn)的坐標(biāo)。計(jì)算出圖幅坐標(biāo)以后,就可以使用Arcpy中的創(chuàng)建多邊形函數(shù)生成接圖表。具體步驟為:(1)使用arcpy.Point()成點(diǎn)對象;(2)使用arcpy.Array()構(gòu)建坐標(biāo)串。(3)使用arcpy.Polygon()生成多邊形。最后將多邊形列表輸出到要素集即可。
4 結(jié)語
該文介紹了一種基于Arcpy快速生成地形圖接圖表的方法,該方法支持任意范圍和任意比例尺接圖表的生成。在實(shí)際工作中,只須對該文所提供的方法進(jìn)行一定的修改,就可以滿足各種情況的需要。
參考文獻(xiàn)
[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的圖幅結(jié)合表快速生成方法研究[J].地理空間信息,2015(4):165-167.
[4] 任娟.一種快速制作地形圖圖幅結(jié)合表的方法[J].北京測繪,2010(2):78-80.