張宏宇,曲苑婷,楊金玲,曹先革
(1.黑龍江工程學院 測繪工程學院,黑龍江 哈爾濱150050;2.東北林業(yè)大學 林學院,黑龍江 哈爾濱150040)
我國幅員遼闊,以至產(chǎn)生的各種比例尺地形圖數(shù)量非常大。為了便于測繪、拼接、管理,防止漏測、重測,將地形按一定的面積、大小進行劃分,統(tǒng)一編號十分有必要。同時地形圖的圖幅編碼有新舊兩種規(guī)則,在生產(chǎn)工作中,存在著新舊圖幅轉(zhuǎn)換的問題,故開發(fā)一個能自動進行新舊圖幅編號轉(zhuǎn)換的程序就有了需求。國家基本比例尺地形圖系列包括1∶100萬、1∶50萬、1∶25萬、1∶10萬、1∶5萬、1∶2.5萬、1∶1萬、1∶5 000。本文利用.net體系下的C#語言實現(xiàn)了在不同比例尺下地圖新舊編碼的查詢[1-2]。
地圖分幅有按經(jīng)緯線的梯形分幅和按平面直角坐標網(wǎng)格線的矩形分幅兩種[3]。本文采用梯形分幅。
新舊圖幅編碼中1∶100萬地形圖的分幅和編號相同,采用國際分幅標準。經(jīng)差6°、緯差4°。但在緯度60°~76°之間為經(jīng)差12°、緯差4°;緯度76°~88°之間為經(jīng)差24°、緯差4°,緯度為88°以上單獨為1幅來劃分。從地球的赤道起算,分別向南北極每4°為一行,至88°共22行,依次以A,B…V編號。從180°經(jīng)線起,自西向東,每6°為一列,共60列。依次以1,2…60編號[4-5]。
1)新圖幅編碼。其余比例尺地形圖以百萬圖為基礎(chǔ),按各自經(jīng)差、緯差分幅,行從上到下,列從左到右依次以阿拉伯數(shù)字編碼,表示行列號。編碼位數(shù)為三位,不足三位前面補0。形成編碼方式為:在1∶100萬圖幅編號之后接代表各比例尺的代碼B~H,再接其行列號,例如:H-51-G-078-024。
2)舊圖幅編碼。1∶50萬地形圖將1:100萬圖分為2行2列,共4幅,分別以A~D以自然順序編碼,例如H-51-A。1∶25萬圖將百萬圖分為4行4列,共16幅,以1~16編碼,例如 H-51-16。1∶10萬圖將百萬圖分為12行12列,共144幅,以1~144編碼,例如H-51-134。1∶5萬和1∶1萬圖是在1∶10萬圖基礎(chǔ)上,分別分1∶10萬圖為2行2列,共4幅,和8行8列,共64幅。分別以A~D、1~64編碼,例如 H-51-136-A、H-51-136-23。1∶2.5萬圖將1∶5萬圖分為2行2列,分別以1~4編碼,例如H-51-136-A-2。1∶5 000圖分1∶1萬圖為2行2列,以a~d編碼,例如 H-51-136-23-a。
本程序可完成兩個功能:1)根據(jù)已知圖幅編號(包括新圖幅編號和舊圖幅編號)查詢圖幅范圍。2)根據(jù)已知點經(jīng)緯坐標,確定已知點在不同國家標準比例尺下所屬圖幅的新舊圖幅編號。
首先對新舊編碼的編碼規(guī)則比較,發(fā)現(xiàn)新編碼更易于編程實現(xiàn)。通過總結(jié)編碼規(guī)則,發(fā)現(xiàn)舊編碼和新編碼之間存在轉(zhuǎn)換關(guān)系。故將舊編碼轉(zhuǎn)換為新編碼統(tǒng)一運算。
對于功能1),需要確定地圖邊界。而地圖邊界的確定只需確定邊界最大和最小經(jīng)緯度值即可。新編碼的編碼形式為× × × × ×,前兩位為百萬圖幅行列編號,第三位為比例尺,后兩位為在相應比例尺中的行列編號。故首先對百萬圖幅按分幅規(guī)則進行劃分,利用一個22行60列二維數(shù)組存放其邊界最大和最小經(jīng)緯度,以數(shù)組下標表示行列編碼,即新圖幅編碼中前兩位。對于其他比例尺地形圖,再利用一個二維數(shù)組,依據(jù)相應的分幅規(guī)則對百萬圖進行劃分,同樣以數(shù)組下標表示行列編碼即舊圖幅編碼的后兩位。在使用功能1)時,只需根據(jù)新編碼第三位確定比例尺大小,依據(jù)相應規(guī)則劃分由新編碼前兩位所確定的百萬圖數(shù)組,再根據(jù)最后兩位的值取相應的數(shù)組中存儲的經(jīng)緯值即得到該編碼所代表地圖的范圍。
對于功能2),先劃分百萬圖,通過與數(shù)組內(nèi)存儲的最大最小經(jīng)緯值比較,確定所屬百萬數(shù)組,根據(jù)數(shù)組下標即得所屬百萬圖行列編號。再依照所欲查詢的比例尺對百萬圖幅進行劃分,做相同比較,確定相應比例尺的行列號,得到新圖幅編碼[6]。
1)運行界面如圖1、圖2所示。
2)將新圖幅編碼轉(zhuǎn)換為舊圖幅編碼算法。通過對新舊編碼的編號規(guī)則的比對,可以發(fā)現(xiàn)新舊編碼之間存在以下函數(shù)關(guān)系:
(%表示取余ceil()表示向上取整)
新編碼為:× ×k i j
舊編碼為:× ×x
1∶50萬:
x=2* (i-1)+j
(例:新編碼為J50B002002,舊編碼為J50D即i=2 j=2代入得x=4對應舊編碼格式4即為D)
1∶25萬:
x=4* (i-1)+j
(例:新編碼為J50C004004,舊編碼為J50016即i=4 j=4代入得x=16)
1∶10萬:
x=12* (i-1)+j
(例:新編碼為J50D012012,舊編碼為J50144即i=12 j=12代入得x=144)
舊編碼為:× ×x y
1∶5萬:
x =12* (ceil(i/2)-1)+ceil(j/2)
y=2*((i-1)%2)+ (j-1)%2+1
(例:新編碼為J50E024024,舊編碼為J50144D即i=24 j=24代入得x=144 y=4對應舊編碼格式4即為D)
1∶1萬:
x =12* (ceil(i/8)-1)+ceil(j/8)
y=8*((i-1)%8)+ (j-1)%8+1
(例:新編碼為J50G096096,舊編碼為J50144064即i=96 j=96代入得x=144 y=64)
舊編碼為:× ×x y z
1∶2.5萬:
x =12* (ceil(i/4)-1)+ceil(j/4)
y =2*((ceil(i/2)-1)%2)+((ceil(j/2)-1)%2)+1
z=2*((i-1)%2)+ ((j-1)%2)+1
(例:新編碼為J50F048048,舊編碼為J50144D004即i=48 j=48代入得x=144 y=4對應舊編碼格式4即為Dz=4)
3)圖幅劃分。按照新編碼規(guī)則,首先劃分百萬圖幅,代碼如下:
k= MapCode.code_3-65;
for(i=0;i<22;i++)
{
for(j=0;j<60;j++)
{
MapRangeValue mapRangeValue=new MapRangeValue();
mapRangeValue.rangeValue[0]= 180-6*j;
mapRangeValue.rangeValue[1]= 174-6*j;
mapRangeValue.rangeValue[2]=4+4*i;
mapRangeValue.rangeValue[3]=0+4*i;
million[i,j]= mapRangeValue;
}
}
4)根據(jù)不同比例尺,按以下方法劃分圖幅。①劃分1:50萬、1:25萬比例尺圖幅:
millionBase= million[MapCode.code_1 - 65,MapCode.code_2-1];
for(i=0;i< (2*k);i++)
{
for(j=0;j< (2*k);j++)
{
MapRangeValue mapRangeValue=new MapRangeValue();
mapRangeValue.rangeValue[1]= million-Base.rangeValue[1]+ (6.0/(2*k))*j;
mapRangeValue.rangeValue[0]= mapRangeValue.rangeValue[1]+ (6.0/(2*k));
mapRangeValue.rangeValue[2]= million-Base.rangeValue[2]- (4.0/(2*k))*i;
mapRangeValue.rangeValue[3]= mapRangeValue.rangeValue[2]- (4.0/(2*k));
million[i,j]= mapRangeValue;
}
}
②劃分其他比例尺地形圖:
for(i=0;i< (12* Math.Pow(2,k-3));i++)
{
for(j=0;j< (12* Math.Pow(2,k-3));j++)
{
MapRangeValue mapRangeValue=new MapRangeValue();
mapRangeValue.rangeValue[1]= million-Base.rangeValue[1]+ (6.0/ (12* Math.Pow(2,k-3)))*j;
mapRangeValue.rangeValue[0]= mapRangeValue.rangeValue[1] + (6.0 / (12 *Math.Pow(2,k-3)));
mapRangeValue.rangeValue[2]= million-Base.rangeValue[2]- (4.0/ (12* Math.Pow(2,k-3)))*i;
mapRangeValue.rangeValue[3]= mapRangeValue.rangeValue[2] - (4.0 / (12 *Math.Pow(2,k-3)));
million[i,j]= mapRangeValue;
}
}
5)實現(xiàn)搜索功能。由于數(shù)組中存放著地圖范圍經(jīng)緯度的最大值和最小值,故只需將已知的經(jīng)緯度和數(shù)組中的最值進行比較便可確認已知點所屬數(shù)組,即可確定行列號,得到新圖幅編碼,再由新編碼進行轉(zhuǎn)換得到舊編碼[7-8],流程如圖3所示。
圖3 工作流程
實現(xiàn)確定行列號代碼:
if(longitude<= mapRangeValue.rangeValue[0] && longitude > = mapRangeValue.rangeValue[1]&&latitude < = mapRangeValue.rangeValue[2]&&latitude > = mapRangeValue.rangeValue[3])
通過計算機實現(xiàn)地形圖分幅編碼查詢,直觀,利于識別,大大方便了地形圖的管理。同時實現(xiàn)了新舊編碼的轉(zhuǎn)換,滿足了現(xiàn)實生產(chǎn)工作中的需要,具有一定的實用價值。通過進一步完善,本程序可作為地理信息系統(tǒng)存取地形圖的組件,用以組成功能強大、完善的GIS系統(tǒng)。
[1]項仲貞,許承權(quán),方子巖.中大比例尺地形圖標準分幅與編號查詢系統(tǒng)的實現(xiàn)[J].鐵道勘察,2008(1):24-26.
[2]畢旭東,李永樹.AE環(huán)境下宗地圖自動生成模塊的設計與實現(xiàn)[J].測繪工程,2009(1):42-44.
[3]馬俊海,王文福,祁向前.現(xiàn)代地圖學理論與技術(shù)[M].哈爾濱:哈爾濱地圖出版社,2008:89-95.
[4]羅勝,郭海濤,張保明.矢量地圖圖幅裁剪技術(shù)研究[J].測繪工程,2007,16(4):56-59.
[5]杜軍和.王英.大比例尺地形圖圖幅號查詢的可視化實現(xiàn)[J].城市勘測,2007(5):67-70.
[6]李學民,田耀永,鄧麗霞.國家基本比例尺地形圖的分幅與編號及新舊圖號的轉(zhuǎn)換[J].河南測繪,2007(3):25-26.
[7]頡耀文.GIS中地圖投影的應用[J].黑龍江工程學院學報:自然科學版,2001,5(3):22-25.
[8]王俊,張文詩,王建濤.多圖幅海量數(shù)據(jù)電子地圖快速顯示的研究與實現(xiàn)[J].測繪工程,2003,2(3):18-20.