李 東,毛之琳
(國家測繪地理信息局大地測量數據處理中心,陜西西安710054)
MapInfo二次開發在坐標轉換中的應用
李 東,毛之琳
(國家測繪地理信息局大地測量數據處理中心,陜西西安710054)
在VC++環境下運用MapInfo軟件進行二次開發,編制坐標轉換程序。利用OLE技術與MapInfo建立聯系,實現坐標轉換的地理信息處理功能,使用戶直觀了解轉換區域位置、大小、點位分布及轉換殘差情況,并可在圖中對重合點進行取舍。
坐標轉換;OLE;二次開發
測繪工程中經常涉及坐標轉換處理的問題,而轉換精度的高低將直接影響著工程質量。轉換精度除與數學模型有關外,更主要是與重合點分布、精度、個數等因素有關。即使程序輸出的轉換成果精度很高,但因重合點采用不當,轉換成果質量也將受到質疑。坐標轉換的實質是為了尋找最佳轉換參數,是不斷對重合點進行取舍的過程。準確判斷重合點的數量及分布是否達到要求,找出粗差點所在位置并剔除是轉換處理的重要環節。如果坐標轉換與圖形相脫節,各種點位及殘差分布不清,容易造成轉換成果的質量問題。筆者在VC++環境下集成MapInfo編制坐標轉換程序,將坐標轉換與圖形有效地結合,不僅可實現地理信息二次開發的放大、選擇、平移等基本功能,而且可實現繪制點位分布圖和轉換殘差圖,并可對重合點和外檢點進行增刪。通過顯示行政區圖和基本比例尺地形圖范圍,可清楚了解轉換區域位置及大小,使坐標轉換處理更加直觀容易。
坐標轉換的基本原理是利用兩種不同坐標系重合點坐標和數學模型,通過最小二乘法獲取最小殘差的轉換參數,然后利用轉換參數計算待定點坐標[1-2]。
1.數學模型
坐標轉換常用的數學模型有平面四參數模型和Brush七參數模型,基本可滿足各種坐標轉換的需要。以平面四參數模型為例

式中,x0、y0為平移參數;α為旋轉參數;m為尺度參數;(x2,y2)為輸出平面直角坐標;(x1,y1)為輸入平面直角坐標。
2.重合點選取原則
不同坐標系轉換的前提條件是轉換區域應具備一定數量、分布均勻的重合點。應選擇有代表性的高精度重合點作為轉換之用,要求重合點的點位分布均勻,具有一定密度,盡量選取控制網的起始點和高等級的控制點,在待轉換點周圍、內部都要有重合點。必要時選定部分均勻分布的重合點作為外部檢核點,對轉換精度進行檢核。一般當轉換范圍不超過4個1∶100 000圖幅時,重合點至少應選擇5個,外部檢核點不少于5個,且要求均勻分布、能覆蓋轉換區域,考慮到重合點中可能存在粗差點,需要選擇多余點作為備用點。總之,一般轉換參數不能用于外推計算,待定點應位于重合點范圍之內。
3.精度估計
(1)轉換參數精度估計
利用重合點轉換回代誤差,評定轉換解算精度。
轉換殘差(V)=已知點平面坐標-轉換回代平面坐標

轉換(殘差)中誤差

式中,n為重合點個數。
(2)外部檢驗
低精度成果向高精度坐標轉換時,低精度成果應盡可能附合到高精度成果上,設立合理外部檢核點是驗證轉換精度的有效方法之一,部分重合點不參加轉換而用于外符合精度檢核,外部檢核點誤差σ為

式中,m為檢核點個數;Δ為檢核點轉換坐標與其已知值之差。
當低精度成果向高精度坐標轉換時,坐標轉換精度要通過外部檢核點誤差與轉換(殘差)中誤差來全面衡量,當兩者數值接近時,認為坐標轉換精度是可靠的。
1.MapInfo二次開發功能
(1)VC++與MapInfo集成技術
跨平臺集成地圖開發是在Windows環境下,將利用VC++編制的應用程序,通過調用語句來啟動后臺MapInfo應用程序。集成程序首先構造MapBasic語句的字符串,使用對象連接與嵌入技術(object linking and embedding,OLE)將該字符串發送給MapInfo來控制MapInfo的運行[3],其調用關系如圖1所示。

圖1 用戶程序與MapInfo調用關系
(2)在VC++環境下通過OLE控制MapInfo
VC中集成地圖技術是利用OLE自動化技術中的Do、Eval等方法,通過向MapInfo發送一系列命令或取得返回信息實現應用程序與MapInfo之間交流。具體方法有以下4種。
1)Do方法:向MapInfo發送特殊字符串命令,將一個字符串解釋為MapBasic語句并執行,并且不返回參數。如顯示殘差圖zdtw
mapinfo.Do(″set map layer zdtw display graphic″);
2)Eval方法:向MapInfo發送特殊字符串命令,將一個表達式解釋為MapBasic表達式并返回表達式的值,即一個字符串。如返回圖中選擇的點名
char te[30];
strcpy(te,mapinfo.Eval(″selection.點名″));
3)RunCommand方法:使用方法完全同Do方法,直接執行嵌入的所有MapBasic支持的命令,不返回值。
4)RunMenuCommand方法:執行定義好的標準命令。如圖形放大
mapinfo.RunMenuCommand(1705);
2.坐標轉換集成地圖的方法
關于VC++中集成MapInfo地圖的具體步驟,文獻[4-5]對此作過較為詳細的論述,在此不再贅述。坐標轉換與地圖結合需要解決的主要問題是轉換處理數據如何以地圖形式反映出來,以及地圖上的數據如何反饋到轉換數據文件中。
(1)解決問題的思路
坐標轉換處理通過輸出點位圖和殘差圖數據,調用后臺MapInfo應用程序生成點位分布圖和殘差圖,完成轉換數據向地圖的轉變。通過OLE控制MapInfo取得返回信息,將圖面提取信息反饋到轉換數據文件中,從而實現坐標轉換與地圖的結合。
(2)程序流程圖
程序流程圖如圖2所示。首先,從文件中讀取轉換數據,經坐標轉換計算,輸出畫點位圖和殘差圖數據文本文件;然后啟動MapInfo調用MapBasic繪圖應用程序;最后生成MapInfo點位分布圖表和殘差圖表,并加以顯示。如果轉換沒有達到要求,對重合點進行取舍,然后返回重新讀入轉換數據,再重復以上步驟,直到達到轉換要求,輸出成果。

圖2 程序流程圖
(3)生成點位分布圖和殘差圖
調用MapBasic編制的繪圖應用程序,分別生成點位分布圖和殘差圖
mapinfo.Do(″Run Application″zdt.mbx″″);∥zdt.mbx為繪圖應用程序
1)生成點位分布圖程序

2)生成點位殘差圖程序

(4)刪除與添加重合點方法
尋找最佳轉換參數時,需要不斷對重合點進行刪除和添加。刪除重合點的方法是在轉換數據文件中找到要刪除的重合點,在點名前加入“*”號作為刪除標志,當程序讀入轉換數據,遇見帶有“*”號的點不讀跳過,相當于刪除該重合點;添加重合點方法是在已有“*”號的點名前去掉星號,恢復該重合點地位,相當于添加。同理,對于外部檢核點,其刪除標志為“@”號。具體實現方法:首先點擊工具欄中“選擇”按鈕,再從顯示點位分布圖中,選中要刪除的點,程序自動在轉換數據文件中查找相應的點名,并在其點名前添加“*”號,程序再重新讀入轉換數據文件,從而完成對重合點的刪除操作

為了區別圖中重合點和被刪除點,MapBasic程序對它們賦予不同標志,重合點標志為五角星,而被刪除點標志為三角形


以某城市GPS點的2000國家大地坐標系坐標向1980西安坐標系坐標的轉換為例,其中B1、B3、B4、B5、B6、B7為重合點,其余為待轉換點,轉換計算如圖3、圖4所示。

圖3 坐標轉換計算

圖4 坐標轉換殘差分布圖
圖4顯示了重合點和待轉換點的分布情況,橢圓反映了重合點轉換殘差的大小,B3點殘差最大,橢圓也最大;同時顯示1∶100 000圖幅范圍作為比較參照物,用戶可以判斷轉換區域的大小、位置和圖幅號信息,B2點為被剔除的重合點。
從實用性和方便性出發,在VC++環境下集成利用MapInfo開發的坐標轉換程序,凸顯了圖形功能,能夠直觀了解轉換區域的地理位置、大小、所在圖幅、點數量及分布情況,便于準確判斷重合點分布是否合理。在圖上以橢圓形式反映轉換殘差大小,并可對重合點和外檢點進行取舍,有助于尋找最佳轉換參數,使坐標轉換處理更加直觀,進一步保證了成果質量。
[1] 施一民.現代大地控制測量[M].北京:測繪出版社,2003.
[2] 程鵬飛,成英燕,文漢江,等.2000國家大地坐標系實用寶典[M].北京:測繪出版社,2008.
[3] 劉光.地理信息系統二次開發教程:語言篇[M].北京:清華大學出版社,2003.
[4] 聶田.MapInfo在 VC++中的集成及其鷹眼的實踐[J].科技信息:學術研究,2007(15):279.
[5] 顏輝武,徐智勇,祝國瑞.VC++中MapInfo的跨平臺集成地圖技術的實現[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—),男,山東濰坊人,高級工程師,主要從事大地測量數據處理及應用程序開發等工作。