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