李 東,毛之琳
(國家測繪地理信息局大地測量數(shù)據(jù)處理中心,陜西西安710054)
MapInfo二次開發(fā)在坐標(biāo)轉(zhuǎn)換中的應(yīng)用
李 東,毛之琳
(國家測繪地理信息局大地測量數(shù)據(jù)處理中心,陜西西安710054)
在VC++環(huán)境下運用MapInfo軟件進(jìn)行二次開發(fā),編制坐標(biāo)轉(zhuǎn)換程序。利用OLE技術(shù)與MapInfo建立聯(lián)系,實現(xiàn)坐標(biāo)轉(zhuǎn)換的地理信息處理功能,使用戶直觀了解轉(zhuǎn)換區(qū)域位置、大小、點位分布及轉(zhuǎn)換殘差情況,并可在圖中對重合點進(jìn)行取舍。
坐標(biāo)轉(zhuǎn)換;OLE;二次開發(fā)
測繪工程中經(jīng)常涉及坐標(biāo)轉(zhuǎn)換處理的問題,而轉(zhuǎn)換精度的高低將直接影響著工程質(zhì)量。轉(zhuǎn)換精度除與數(shù)學(xué)模型有關(guān)外,更主要是與重合點分布、精度、個數(shù)等因素有關(guān)。即使程序輸出的轉(zhuǎn)換成果精度很高,但因重合點采用不當(dāng),轉(zhuǎn)換成果質(zhì)量也將受到質(zhì)疑。坐標(biāo)轉(zhuǎn)換的實質(zhì)是為了尋找最佳轉(zhuǎn)換參數(shù),是不斷對重合點進(jìn)行取舍的過程。準(zhǔn)確判斷重合點的數(shù)量及分布是否達(dá)到要求,找出粗差點所在位置并剔除是轉(zhuǎn)換處理的重要環(huán)節(jié)。如果坐標(biāo)轉(zhuǎn)換與圖形相脫節(jié),各種點位及殘差分布不清,容易造成轉(zhuǎn)換成果的質(zhì)量問題。筆者在VC++環(huán)境下集成MapInfo編制坐標(biāo)轉(zhuǎn)換程序,將坐標(biāo)轉(zhuǎn)換與圖形有效地結(jié)合,不僅可實現(xiàn)地理信息二次開發(fā)的放大、選擇、平移等基本功能,而且可實現(xiàn)繪制點位分布圖和轉(zhuǎn)換殘差圖,并可對重合點和外檢點進(jìn)行增刪。通過顯示行政區(qū)圖和基本比例尺地形圖范圍,可清楚了解轉(zhuǎn)換區(qū)域位置及大小,使坐標(biāo)轉(zhuǎn)換處理更加直觀容易。
坐標(biāo)轉(zhuǎn)換的基本原理是利用兩種不同坐標(biāo)系重合點坐標(biāo)和數(shù)學(xué)模型,通過最小二乘法獲取最小殘差的轉(zhuǎn)換參數(shù),然后利用轉(zhuǎn)換參數(shù)計算待定點坐標(biāo)[1-2]。
1.數(shù)學(xué)模型
坐標(biāo)轉(zhuǎn)換常用的數(shù)學(xué)模型有平面四參數(shù)模型和Brush七參數(shù)模型,基本可滿足各種坐標(biāo)轉(zhuǎn)換的需要。以平面四參數(shù)模型為例
式中,x0、y0為平移參數(shù);α為旋轉(zhuǎn)參數(shù);m為尺度參數(shù);(x2,y2)為輸出平面直角坐標(biāo);(x1,y1)為輸入平面直角坐標(biāo)。
2.重合點選取原則
不同坐標(biāo)系轉(zhuǎn)換的前提條件是轉(zhuǎn)換區(qū)域應(yīng)具備一定數(shù)量、分布均勻的重合點。應(yīng)選擇有代表性的高精度重合點作為轉(zhuǎn)換之用,要求重合點的點位分布均勻,具有一定密度,盡量選取控制網(wǎng)的起始點和高等級的控制點,在待轉(zhuǎn)換點周圍、內(nèi)部都要有重合點。必要時選定部分均勻分布的重合點作為外部檢核點,對轉(zhuǎn)換精度進(jìn)行檢核。一般當(dāng)轉(zhuǎn)換范圍不超過4個1∶100 000圖幅時,重合點至少應(yīng)選擇5個,外部檢核點不少于5個,且要求均勻分布、能覆蓋轉(zhuǎn)換區(qū)域,考慮到重合點中可能存在粗差點,需要選擇多余點作為備用點??傊?,一般轉(zhuǎn)換參數(shù)不能用于外推計算,待定點應(yīng)位于重合點范圍之內(nèi)。
3.精度估計
(1)轉(zhuǎn)換參數(shù)精度估計
利用重合點轉(zhuǎn)換回代誤差,評定轉(zhuǎn)換解算精度。
轉(zhuǎn)換殘差(V)=已知點平面坐標(biāo)-轉(zhuǎn)換回代平面坐標(biāo)
轉(zhuǎn)換(殘差)中誤差
式中,n為重合點個數(shù)。
(2)外部檢驗
低精度成果向高精度坐標(biāo)轉(zhuǎn)換時,低精度成果應(yīng)盡可能附合到高精度成果上,設(shè)立合理外部檢核點是驗證轉(zhuǎn)換精度的有效方法之一,部分重合點不參加轉(zhuǎn)換而用于外符合精度檢核,外部檢核點誤差σ為
式中,m為檢核點個數(shù);Δ為檢核點轉(zhuǎn)換坐標(biāo)與其已知值之差。
當(dāng)?shù)途瘸晒蚋呔茸鴺?biāo)轉(zhuǎn)換時,坐標(biāo)轉(zhuǎn)換精度要通過外部檢核點誤差與轉(zhuǎn)換(殘差)中誤差來全面衡量,當(dāng)兩者數(shù)值接近時,認(rèn)為坐標(biāo)轉(zhuǎn)換精度是可靠的。
1.MapInfo二次開發(fā)功能
(1)VC++與MapInfo集成技術(shù)
跨平臺集成地圖開發(fā)是在Windows環(huán)境下,將利用VC++編制的應(yīng)用程序,通過調(diào)用語句來啟動后臺MapInfo應(yīng)用程序。集成程序首先構(gòu)造MapBasic語句的字符串,使用對象連接與嵌入技術(shù)(object linking and embedding,OLE)將該字符串發(fā)送給MapInfo來控制MapInfo的運行[3],其調(diào)用關(guān)系如圖1所示。
圖1 用戶程序與MapInfo調(diào)用關(guān)系
(2)在VC++環(huán)境下通過OLE控制MapInfo
VC中集成地圖技術(shù)是利用OLE自動化技術(shù)中的Do、Eval等方法,通過向MapInfo發(fā)送一系列命令或取得返回信息實現(xiàn)應(yīng)用程序與MapInfo之間交流。具體方法有以下4種。
1)Do方法:向MapInfo發(fā)送特殊字符串命令,將一個字符串解釋為MapBasic語句并執(zhí)行,并且不返回參數(shù)。如顯示殘差圖zdtw
mapinfo.Do(″set map layer zdtw display graphic″);
2)Eval方法:向MapInfo發(fā)送特殊字符串命令,將一個表達(dá)式解釋為MapBasic表達(dá)式并返回表達(dá)式的值,即一個字符串。如返回圖中選擇的點名
char te[30];
strcpy(te,mapinfo.Eval(″selection.點名″));
3)RunCommand方法:使用方法完全同Do方法,直接執(zhí)行嵌入的所有MapBasic支持的命令,不返回值。
4)RunMenuCommand方法:執(zhí)行定義好的標(biāo)準(zhǔn)命令。如圖形放大
mapinfo.RunMenuCommand(1705);
2.坐標(biāo)轉(zhuǎn)換集成地圖的方法
關(guān)于VC++中集成MapInfo地圖的具體步驟,文獻(xiàn)[4-5]對此作過較為詳細(xì)的論述,在此不再贅述。坐標(biāo)轉(zhuǎn)換與地圖結(jié)合需要解決的主要問題是轉(zhuǎn)換處理數(shù)據(jù)如何以地圖形式反映出來,以及地圖上的數(shù)據(jù)如何反饋到轉(zhuǎn)換數(shù)據(jù)文件中。
(1)解決問題的思路
坐標(biāo)轉(zhuǎn)換處理通過輸出點位圖和殘差圖數(shù)據(jù),調(diào)用后臺MapInfo應(yīng)用程序生成點位分布圖和殘差圖,完成轉(zhuǎn)換數(shù)據(jù)向地圖的轉(zhuǎn)變。通過OLE控制MapInfo取得返回信息,將圖面提取信息反饋到轉(zhuǎn)換數(shù)據(jù)文件中,從而實現(xiàn)坐標(biāo)轉(zhuǎn)換與地圖的結(jié)合。
(2)程序流程圖
程序流程圖如圖2所示。首先,從文件中讀取轉(zhuǎn)換數(shù)據(jù),經(jīng)坐標(biāo)轉(zhuǎn)換計算,輸出畫點位圖和殘差圖數(shù)據(jù)文本文件;然后啟動MapInfo調(diào)用MapBasic繪圖應(yīng)用程序;最后生成MapInfo點位分布圖表和殘差圖表,并加以顯示。如果轉(zhuǎn)換沒有達(dá)到要求,對重合點進(jìn)行取舍,然后返回重新讀入轉(zhuǎn)換數(shù)據(jù),再重復(fù)以上步驟,直到達(dá)到轉(zhuǎn)換要求,輸出成果。
圖2 程序流程圖
(3)生成點位分布圖和殘差圖
調(diào)用MapBasic編制的繪圖應(yīng)用程序,分別生成點位分布圖和殘差圖
mapinfo.Do(″Run Application″zdt.mbx″″);∥zdt.mbx為繪圖應(yīng)用程序
1)生成點位分布圖程序
2)生成點位殘差圖程序
(4)刪除與添加重合點方法
尋找最佳轉(zhuǎn)換參數(shù)時,需要不斷對重合點進(jìn)行刪除和添加。刪除重合點的方法是在轉(zhuǎn)換數(shù)據(jù)文件中找到要刪除的重合點,在點名前加入“*”號作為刪除標(biāo)志,當(dāng)程序讀入轉(zhuǎn)換數(shù)據(jù),遇見帶有“*”號的點不讀跳過,相當(dāng)于刪除該重合點;添加重合點方法是在已有“*”號的點名前去掉星號,恢復(fù)該重合點地位,相當(dāng)于添加。同理,對于外部檢核點,其刪除標(biāo)志為“@”號。具體實現(xiàn)方法:首先點擊工具欄中“選擇”按鈕,再從顯示點位分布圖中,選中要刪除的點,程序自動在轉(zhuǎn)換數(shù)據(jù)文件中查找相應(yīng)的點名,并在其點名前添加“*”號,程序再重新讀入轉(zhuǎn)換數(shù)據(jù)文件,從而完成對重合點的刪除操作
為了區(qū)別圖中重合點和被刪除點,MapBasic程序?qū)λ鼈冑x予不同標(biāo)志,重合點標(biāo)志為五角星,而被刪除點標(biāo)志為三角形
以某城市GPS點的2000國家大地坐標(biāo)系坐標(biāo)向1980西安坐標(biāo)系坐標(biāo)的轉(zhuǎn)換為例,其中B1、B3、B4、B5、B6、B7為重合點,其余為待轉(zhuǎn)換點,轉(zhuǎn)換計算如圖3、圖4所示。
圖3 坐標(biāo)轉(zhuǎn)換計算
圖4 坐標(biāo)轉(zhuǎn)換殘差分布圖
圖4顯示了重合點和待轉(zhuǎn)換點的分布情況,橢圓反映了重合點轉(zhuǎn)換殘差的大小,B3點殘差最大,橢圓也最大;同時顯示1∶100 000圖幅范圍作為比較參照物,用戶可以判斷轉(zhuǎn)換區(qū)域的大小、位置和圖幅號信息,B2點為被剔除的重合點。
從實用性和方便性出發(fā),在VC++環(huán)境下集成利用MapInfo開發(fā)的坐標(biāo)轉(zhuǎn)換程序,凸顯了圖形功能,能夠直觀了解轉(zhuǎn)換區(qū)域的地理位置、大小、所在圖幅、點數(shù)量及分布情況,便于準(zhǔn)確判斷重合點分布是否合理。在圖上以橢圓形式反映轉(zhuǎn)換殘差大小,并可對重合點和外檢點進(jìn)行取舍,有助于尋找最佳轉(zhuǎn)換參數(shù),使坐標(biāo)轉(zhuǎn)換處理更加直觀,進(jìn)一步保證了成果質(zhì)量。
[1] 施一民.現(xiàn)代大地控制測量[M].北京:測繪出版社,2003.
[2] 程鵬飛,成英燕,文漢江,等.2000國家大地坐標(biāo)系實用寶典[M].北京:測繪出版社,2008.
[3] 劉光.地理信息系統(tǒng)二次開發(fā)教程:語言篇[M].北京:清華大學(xué)出版社,2003.
[4] 聶田.MapInfo在 VC++中的集成及其鷹眼的實踐[J].科技信息:學(xué)術(shù)研究,2007(15):279.
[5] 顏輝武,徐智勇,祝國瑞.VC++中MapInfo的跨平臺集成地圖技術(shù)的實現(xiàn)[J].測繪工程,2002,9(3): 14-17.
Application of Secondary Development of MapInfo in Coordinate Transformation
LI Dong,MAO Zhilin
0494-0911(2011)12-0058-03
P282.2
B
2010-12-06
李 東(1958—),男,山東濰坊人,高級工程師,主要從事大地測量數(shù)據(jù)處理及應(yīng)用程序開發(fā)等工作。