国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于VisualC++環(huán)境下MapX的研究與應(yīng)用

2015-05-15 21:48張亞軍王川詹家賓
電腦知識(shí)與技術(shù) 2015年8期
關(guān)鍵詞:經(jīng)緯度二次開(kāi)發(fā)對(duì)話(huà)框

張亞軍 王川 詹家賓

摘要:地理信息系統(tǒng)是一項(xiàng)以計(jì)算機(jī)為基礎(chǔ)的新興技術(shù)。該文首先概述了地理信息系統(tǒng)的基本概念,然后介紹了地理信息系統(tǒng)軟件MapInfo MapX及其開(kāi)發(fā)技術(shù)。最后,通過(guò)一個(gè)具體的示例演示了MapX在Visual C++環(huán)境進(jìn)行開(kāi)發(fā)的過(guò)程。

關(guān)鍵詞:地理信息系統(tǒng);MapInfo MapX;Visual C++

中圖分類(lèi)號(hào): TP311 文獻(xiàn)標(biāo)識(shí)碼 A 文章編號(hào):1009-3044(2015)08-0086-03

Abstract: Geographic Information System is a new technique based on computer. This paper begins with an overview of GIS; then details the MapInfo MapX and; finally gives an instance of how to develop application using Mapx based on visual C++.

Key words: GIS; MapInfo MapX; Visual C++

1 引言

1.1 地理信息系統(tǒng)GIS簡(jiǎn)介

地理信息系統(tǒng)(Geographic Information System, GIS),system)直譯為地理信息系統(tǒng),是一種處理地理空間數(shù)據(jù)的信息系統(tǒng)[1],是一項(xiàng)以計(jì)算機(jī)為基礎(chǔ)的新興技術(shù),它是在計(jì)算機(jī)硬、軟件系統(tǒng)支持下,對(duì)整個(gè)或部分地球表層(包括大氣層)空間中的有關(guān)地理分布數(shù)據(jù)進(jìn)行采集、存儲(chǔ)、管理、運(yùn)算、分析、顯示和描述的技術(shù)系統(tǒng)。地理信息系統(tǒng)處理、管理的對(duì)象是多種地理空間實(shí)體數(shù)據(jù)及其關(guān)系,包括空間定位數(shù)據(jù)、圖形數(shù)據(jù)、遙感圖像數(shù)據(jù)、屬性數(shù)據(jù)等,用于分析和處理在一定地理區(qū)域分布的各種現(xiàn)象和過(guò)程,解決復(fù)雜的規(guī)劃、決策和管理問(wèn)題[2]。地理信息系統(tǒng)的出現(xiàn),改變了地理信息交換的方式,并為地理學(xué)的研究注入了新活力,正如陳述彭先生所說(shuō):“ 如果說(shuō)地圖是地理學(xué)的第二代語(yǔ)言, 那么地理信息系統(tǒng)就是地理學(xué)的第三代語(yǔ)言?!?[3]

地理信息系統(tǒng)按內(nèi)容分為兩類(lèi):應(yīng)用型GIS與工具型GIS。應(yīng)用型GIS是以某一專(zhuān)業(yè)、領(lǐng)域或工作為主要內(nèi)容,而工具型GIS是支撐軟件,包括空間數(shù)據(jù)輸入、存儲(chǔ)、管理、分析與輸出等基本功能。目前開(kāi)發(fā)應(yīng)用型GIS是開(kāi)發(fā)者最關(guān)心的問(wèn)題。二次開(kāi)發(fā)有以下三種實(shí)現(xiàn)方式:

獨(dú)立開(kāi)發(fā)。獨(dú)立開(kāi)發(fā)不依賴(lài)于任何GIS工具軟件,從空間數(shù)據(jù)的采集、編輯到數(shù)據(jù)的處理分析及結(jié)果輸出,所有的算法都由開(kāi)發(fā)者獨(dú)立設(shè)計(jì),然后選用某種程序設(shè)計(jì)語(yǔ)言,在一定的操作系統(tǒng)平臺(tái)上編譯實(shí)現(xiàn)。獨(dú)立開(kāi)發(fā)的優(yōu)點(diǎn)是:不依賴(lài)任何商業(yè)GIS工具軟件,可減少開(kāi)發(fā)成本。不足之處是:對(duì)大多數(shù)開(kāi)發(fā)者來(lái)講,開(kāi)發(fā)出來(lái)的產(chǎn)品很難在功能上與商業(yè)GIS工具軟件相比,且在GIS工具軟件上省下的錢(qián),可能抵不上開(kāi)發(fā)者在開(kāi)發(fā)過(guò)程中絞盡腦汁所付出的代價(jià)。

單純二次開(kāi)發(fā)。單純二次開(kāi)發(fā)完全借助于GIS工具關(guān)鍵提供的開(kāi)發(fā)語(yǔ)言進(jìn)行應(yīng)用系統(tǒng)開(kāi)發(fā)。GIS工具軟件大多提供了可供用戶(hù)進(jìn)行二次開(kāi)發(fā)的宏語(yǔ)言,如ArcView提供了Avenue語(yǔ)言,MapInfo公司研制的MapInfo Professional提供了MapBasic語(yǔ)言等。用戶(hù)可以利用這些宏語(yǔ)言,以原GIS工具軟件為開(kāi)發(fā)平臺(tái),開(kāi)發(fā)出針對(duì)不同應(yīng)用對(duì)象的應(yīng)用程序。這種方式雖省時(shí)省心,但進(jìn)行二次開(kāi)發(fā)的宏語(yǔ)言作為變成語(yǔ)言智能算是二流語(yǔ)言,功能極弱,用它們來(lái)開(kāi)發(fā)應(yīng)用程序仍然不盡如人意。

集成二次開(kāi)發(fā)。集成二次開(kāi)發(fā)指利用專(zhuān)業(yè)的GIS工具軟件,如ArcView、MapInfo等,實(shí)現(xiàn)GIS的基本功能,以通用軟件開(kāi)發(fā)攻擊尤其是可視化開(kāi)發(fā)工具,如Delphi、Visual C++、Visua Basic、PowerBuilder等為開(kāi)發(fā)平臺(tái),進(jìn)行二者的集成開(kāi)發(fā)。

1.2 MapInfo MapX簡(jiǎn)介

MapInfo MapX是美國(guó)MapInfo公司開(kāi)發(fā)的低價(jià)高效、強(qiáng)大的ActiveX組件,可以很方便的集成到使用標(biāo)準(zhǔn)可視化編程工具開(kāi)發(fā)的商業(yè)應(yīng)用中。MapInfo MapX支持將地圖功能添加到任何應(yīng)用中,提供了一種高度可視化的方法,來(lái)顯示和分析基于位置的數(shù)據(jù),從而更好的為客戶(hù)服務(wù),更好的進(jìn)行商業(yè)決策,更好的管理資產(chǎn)和運(yùn)營(yíng)。

MapInfo MapX支持開(kāi)發(fā)商方便快捷的將地圖功能集成到新的或已有的應(yīng)用中??梢允褂脴?biāo)準(zhǔn)的編程語(yǔ)言——Visual Basic、Visual C++、Delphi、PowerBuilder和Oracle Express Objects。因?yàn)椴恍枰獙W(xué)習(xí)新的或高難度的編程語(yǔ)言,開(kāi)發(fā)者可以快速展開(kāi)工作,方便的適合和實(shí)現(xiàn)地圖功能和特性。

MapInfo MapX提供了大量的方法和事件以及其他向?qū)?lái)幫助簡(jiǎn)化應(yīng)用開(kāi)發(fā)。

2 Visual C++中創(chuàng)建MapX地圖

在Visual C++中使用MapX,項(xiàng)目當(dāng)中必須包含MapX.cpp和MapX.h兩個(gè)文件,可以在MapX的示例當(dāng)中找到這兩個(gè)文件。在Visual C++中創(chuàng)建MapX地圖,可以根據(jù)需要在主視圖或?qū)υ?huà)框中創(chuàng)建。下面分別對(duì)這兩種方式進(jìn)行簡(jiǎn)單介紹。

2.1 在主視圖中創(chuàng)建地圖

首先,用Visual C++創(chuàng)建一個(gè)工程。通過(guò)菜單File->New,在Projects窗口選中MFC AppWizard(exe),在右側(cè)填寫(xiě)項(xiàng)目名稱(chēng)。在接下來(lái)的第一步,選擇Single document,其他步驟選擇默認(rèn)設(shè)置。

工程建立完畢以后,為了使用MapX,將MapX.cpp、MapX.h兩個(gè)文件復(fù)制到工程的根目錄里面,然后使用菜單Project->Add To Project->Files,選擇MapX.cpp和MapX.h兩個(gè)文件,將其加入到成當(dāng)中。添加到工程以后,Visual C++中的ClassView當(dāng)中會(huì)顯示MapX提供的類(lèi),如圖1所示。所有MapX相關(guān)類(lèi)都以“CMapX”開(kāi)頭,后面為具體的類(lèi)名。不要選擇“項(xiàng)目”->“組件和控件”命令。這樣做將會(huì)創(chuàng)建一個(gè) .cpp 文件,但該文件將是不完整的[4]。

1)為在工程中使用MapX,在自己創(chuàng)建的視圖類(lèi)CMapView的頭文件中,添加如下代碼:

3 簡(jiǎn)單開(kāi)發(fā)實(shí)例

本節(jié)通過(guò)在對(duì)話(huà)框插入MapX,然后開(kāi)發(fā)工具測(cè)量地圖上任意兩點(diǎn)間的距離,演示采用Visual C++進(jìn)行MapX開(kāi)發(fā)的基本方法。

3.1 為對(duì)話(huà)框添加快捷菜單

通過(guò)菜單Project->Add To Project->Components and Controls …打開(kāi)Components and Controls Gallery對(duì)話(huà)框,選擇“Visual C++ Components”文件夾里面的“Pop-up Menu”,雙擊和點(diǎn)擊“Insert”插入快捷菜單,在彈出的Pop-up Menu對(duì)話(huà)框中,在“Add pop-up menu to:”里面選擇MapX所對(duì)應(yīng)的對(duì)話(huà)框。

然后在ResourceView窗口選中新建的快捷菜單進(jìn)行編輯,保留“開(kāi)始測(cè)距”和“結(jié)束測(cè)距”兩個(gè)菜單,ID分別為ID_MAP_BDIS和ID_MAP_EDIS。運(yùn)行程序,右鍵點(diǎn)擊地圖,即可得到快捷菜單。

3.2 開(kāi)發(fā)地圖上任意兩點(diǎn)間距離的計(jì)算

在MapX當(dāng)中,提供了計(jì)算兩點(diǎn)間距離的函數(shù)double CMapX::Distance(double X1, double Y1, double X2, double Y2),其中(X1,Y1)、(X2,Y2)分別對(duì)應(yīng)了地圖上兩點(diǎn)的經(jīng)緯度。但是,用鼠標(biāo)獲取的點(diǎn)的坐標(biāo)都是屏幕坐標(biāo),不能直接用該函數(shù)計(jì)算距離,必須轉(zhuǎn)化成地圖上的經(jīng)緯度。MapX提供了一個(gè)經(jīng)緯度和屏幕坐標(biāo)間相互轉(zhuǎn)化的函數(shù),void CMapX::ConvertCoord(float* ScreenX, float* ScreenY, double* MapX, double* MapY, short Direction),從參數(shù)名稱(chēng)可以對(duì)其功能一目了然,Direction則是一個(gè)標(biāo)志位,表示轉(zhuǎn)化是由屏幕坐標(biāo)轉(zhuǎn)換到地圖坐標(biāo),還是由地圖坐標(biāo)轉(zhuǎn)換到屏幕坐標(biāo),取值為miMapToScreen=0,或miSceeenToMap=1。

為了保存鼠標(biāo)點(diǎn)擊位置,為對(duì)話(huà)框類(lèi)CMapdlgDlg增加四個(gè)成員變量,double StartX、double StartY、double EndX、double EndY,分別保存鼠標(biāo)按下和彈起時(shí)地圖坐標(biāo)的經(jīng)緯度。之后再增加成員變量double Distance保存計(jì)算得到的兩點(diǎn)間的距離。

通過(guò)View->ClassWizard打開(kāi)ClassWizard對(duì)話(huà)框,在Class name選擇對(duì)話(huà)框類(lèi)“CMapdlgDlg”,然后在Object IDs選擇MapX對(duì)應(yīng)的資源符號(hào)“IDC_MAP1”,在Message選擇“MouseDown”和“MouseUp”,點(diǎn)擊“Add Function”。

4 結(jié)束語(yǔ)

本文首先概述地理信息系統(tǒng)GIS,然后介紹了在Visual C++下引入MapX的方法,最后通過(guò)一個(gè)簡(jiǎn)單的示例說(shuō)明了在Visual C++下采用對(duì)話(huà)框的方式開(kāi)發(fā)MapX的方法。限于篇幅,該示例非常簡(jiǎn)單,但涵蓋了在Visual C++下MapX開(kāi)發(fā)常用的技術(shù),具有一定的借鑒意義。

參考文獻(xiàn):

[1] 犁夏,劉凱.GIS 與空間分析原理與方法[M].北京:科學(xué)出版社.2006

[2] 尹旭日,張武軍.Visual C++環(huán)境下MapX的開(kāi)發(fā)技術(shù)[M].北京:冶金工業(yè)出版社,2009.

[3] 李連營(yíng),李清泉,李漢武,等.基于MapX的GIS應(yīng)用開(kāi)發(fā)[M].武漢:武漢大學(xué)出版社,2003.

[4] Troy. MapX開(kāi)發(fā)人員指南[M].紐約:MapInfo公司,2002.

猜你喜歡
經(jīng)緯度二次開(kāi)發(fā)對(duì)話(huà)框
淺談基于Revit平臺(tái)的二次開(kāi)發(fā)
正?;謴?fù)虛擬機(jī)
淺談Mastercam后處理器的二次開(kāi)發(fā)
基于經(jīng)緯度范圍的多點(diǎn)任務(wù)打包算法
西門(mén)子Easy Screen對(duì)倒棱機(jī)床界面二次開(kāi)發(fā)
澳洲位移大,需調(diào)經(jīng)緯度
基于Pro/E二次開(kāi)發(fā)的推土鏟參數(shù)化模塊開(kāi)發(fā)