日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當前位置:首頁 > 嵌入式 > 嵌入式教程
[導讀]地理信息系統(tǒng)的嵌入式開發(fā)技術

地理信息系統(tǒng)(GIS)是近年來興起的一門新興技術,由于它能夠直觀有效地利用和表達地理信息數(shù)據(jù),滿足了信息綜合管理和數(shù)據(jù)服務可視化的需要,因此在地質勘測、城市規(guī)劃、交通管理、遙控遙測等許多領域獲得了普遍應用。目前國內(nèi)流行的基礎GIS軟件主要有MapInfo、ARC/INFO、MGE等幾種。為支持應用系統(tǒng)的開發(fā),多數(shù)通用GIS系統(tǒng)都提供了專用的開發(fā)工具和編程語言,但與通用的編程工具如Visual C++、Visual Basic等相比,其功能十分有限且不夠靈活。如果在設計應用GIS系統(tǒng)時采用嵌入式技術,則既能夠發(fā)揮通用編程工具的強大程序開發(fā)能力,又能充分利用現(xiàn)有GIS系統(tǒng)的豐富功能,從而給開發(fā)工作帶來極大的方便。

1 嵌入式開發(fā)技術簡介

  所謂嵌入式開發(fā)技術是指以在應用程序中嵌入由其他程序所提供的數(shù)據(jù)或對象的方式來獲得特定功能的程序設計方法。由于這種嵌入是通過窗口嵌套技術和程序進程間的數(shù)據(jù)通信技術來實現(xiàn)的,可以使兩個不同的程序完全“無縫”地集成到一起,因此所開發(fā)出的應用程序與普通程序看起來并沒有什么區(qū)別。使用嵌入式技術的GIS應用程序與為其提供支持的GIS系統(tǒng)之間是一種并行的同時運行的關系,在功能上不受任何限制,可以象正常程序一樣使用操作系統(tǒng)所提供的一切資源。絕大多數(shù)的GIS系統(tǒng)和通用編程工具都對嵌入式開發(fā)提供支持。本文將以目前流行的MapInfo地理信息系統(tǒng)和Visual Basic 5.0程序設計語言為例,系統(tǒng)地介紹利用嵌入式技術開發(fā)GIS應用軟件的方法。

  MapInfo是一個功能強大的通用地理信息和空間數(shù)據(jù)管理系統(tǒng),能提供豐富的地理信息數(shù)據(jù)編輯轉換、分析處理、瀏覽顯示、查詢檢索等功能,是目前應用最為廣泛的GIS基礎平臺之一。為了支持二次開發(fā),MapInfo提供了簡單易用的MapBasic語言,并在4.0以后的版本中全面支持嵌入式技術。在應用程序中嵌入MapInfo系統(tǒng)所使用的主要方法有OLE自動化、回應方法和動態(tài)數(shù)據(jù)交換三種。下面分別對這些方法作進一步的介紹。

2 OLE自動化技術

  OLE自動化技術是在微軟公司的對象鏈接和嵌入(OLE)技術和組件對象模型技術(COM)基礎上發(fā)展起來的一種程序設計標準,它允許一個程序模塊控制其他程序模塊的執(zhí)行。換句話說,支持自動化的程序模塊的行為是可以通過編程來控制的,這種控制通過應用程序對自動化支持程序所提供的對象的訪問來完成。OLE自動化實質上是兩個不同的應用程序之間以客戶機/服務器方式進行的動態(tài)信息交換過程,作為服務器一方的應用程序提供一組具有特定方法和屬性的對象模型,客戶程序則使用標準的通信接口對其進行訪問和控制。MapInfo所提供的OLE自動化對象模型如圖1所示。

從圖1可以看出,MapInfo提供的OLE自動化對象體系具有很明顯的層次結構。最高層是Application對象即MapInfo系統(tǒng)本身的運行實例,其下是MapBasic應用程序對象集合MBApplications及其公共變量對象集合MBGlobals。所有的對象和對象集合都有相應的方法和屬性,應用程序可以調用這些方法和屬性來實現(xiàn)特定的功能。以VB5.0為例,要想在程序中嵌入MapInfo對象,首先要聲明一個ActiveX對象變量并用其創(chuàng)建MapInfo運行實例,方法如下:

  Public MapInfo As Object

  Set MapInfo = CreateObject(″MapInfo.Application″)

  上述代碼將使MapInfo系統(tǒng)啟動并自動在后臺運行。與獨立運行時相比,作為自動化對象的MapInfo系統(tǒng)沒有自己的啟動窗體和用戶界面(菜單、工具條等),其行為完全由調用它的應用程序控制。通過訪問Application對象的屬性和方法可以獲得MapInfo系統(tǒng)的絕大多數(shù)功能。常用的方法主要有三種:Do方法將一個代表MapBasic語句的字符串傳遞給MapInfo系統(tǒng)執(zhí)行;Eval方法將一個代表MapBasic表達式的字符串傳遞給MapInfo系統(tǒng)并返回其值;RunMenuCommand方法通知MapInfo系統(tǒng)執(zhí)行指定的菜單功能項。如果需要使用MapInfo的地圖顯示功能,可以把其地圖窗口嵌入到指定的窗體或圖形控件中。例如,下面的代碼可以使MapInfo的地圖窗口顯示在應用程序窗體2的Picture控件中:[!--empirenews.page--]

  MapInfo.Do ″Set Application Window″ & Form2.Picture1.hwnd

  MapInfo.Do″Set Next Document Parent″ & Form2.Picture1.hwnd & ″Style 1″

  在地圖窗口嵌入后,應用程序還可以象對待正常窗口一樣對其進行放大、縮小和移動操作。同樣的方法也可以用來嵌入MapInfo系統(tǒng)所能提供的其他窗口,如圖例窗口、布局窗口、信息窗口和數(shù)據(jù)瀏覽窗口等。

在進行一些比較復雜的地理信息操作時,僅僅使用Do方法一條條地發(fā)送MapBasic指令顯然是不方便的,應當采用編寫Mapbasic程序的方式處理,并把執(zhí)行結果返回給應用程序。這樣能夠避免在應用程序和MapInfo系統(tǒng)之間過于頻繁的數(shù)據(jù)交換,從而節(jié)省了系統(tǒng)資源、提高了運行效率。調用MapBasic程序的代碼如下:

  MapBasic.Do ″Run Application″ & Mbfilename

  要實現(xiàn)對MapBasic程序的控制并從中獲取數(shù)據(jù),可以使用MBApplications對象集合。把MBApplications稱作對象集合是因為它代表了當前所有在MapInfo系統(tǒng)中運行的MapBasic程序。與Application對象的使用方法相同,我們首先要創(chuàng)建MBApplications對象,然后再訪問其屬性和方法。如果要訪問一個具體的MapBasic程序對象,可以在集合對象后加上序號來指定。下面的代碼通過訪問MBApplication對象集合把當前正在運行的所有MapBasic程序名稱返回給數(shù)組Mbfilename():

  Dim MbApplist As Object

  Set MbApplist=MapInfo.MBApplications

  i=1

  Do While i <=MbApplist.Count

  Mbfilename(i)=MbApplist(i).Name

  i=i+1

  Loop

  MBApplications對象集合的屬性是只讀的,其值不能由應用程序改變。如果要對某一MapBaisc程序對象進行控制,必須使用其Do方法。MapBasic程序對Do方法的響應是通過執(zhí)行RemoteMsgHandler()過程來完成的。在Do方法被調用時,MapInfo會自動執(zhí)行指定程序的RemoteMsgHandler()過程,這時可以用CommandInfo()函數(shù)來獲得Do方法的調用參數(shù),加以判斷后再轉到相應的執(zhí)行代碼。類似的,要從MapBasic程序中返回數(shù)據(jù)可以使用其Eval方法,而程序返回什么值由其RemoteQueryHandler()函數(shù)中的代碼決定。對于在MapBasic程序中使用的公共變量,應用程序也可以通過MBGlobals對象集合來直接訪問。比如要將序號為1的MapBasic程序中的公共變量global1的值加1,可以使用下面的代碼:

  Dim globinfo As Object, Oldval As Integer

  Set globinfo = Mapinfo.MBApplications(1).MBGlobals

  Oldval = globinfo(″global1″).Value

  globinfo(″global1″).Value = Oldval + 1

  通過OLE自動化技術,應用程序可以使用MapInfo系統(tǒng)幾乎所有的功能。不過,由于采用了客戶機/服務器的運行模式,在OLE自動化方式下應用程序總是處于絕對主動的地位,而MapInfo系統(tǒng)只能作為被動的服務提供方。這樣在實際應用中,一些需要由MapInfo主動提供信息的情況就變得很難處理了。因此僅使用OLE自動化技術還不能完全滿足應用需要,必須用其他方法來補充其功能。采用下面要介紹的CallBack(回應)方法可以很好地解決這一問題。

3 回應方法

  為完成某些功能,有時我們要允許用戶對以自動化方式嵌入應用程序中的MapInfo系統(tǒng)進行直接操作。比如,用戶可能想通過用鼠標點擊圖形對象的方式來查看與之相關的信息,或者是要在地圖窗口中繪制一個新的圖形對象。在這種情況下,應用程序并不知道用戶操作事件發(fā)生和結束的具體時間,要想及時獲得操作信息并作出處理,只能借助直接接受該操作的MapInfo系統(tǒng)的主動通知。這種由自動化服務程序主動通知客戶程序用戶事件信息的技術就是回應方法。[!--empirenews.page--]

  在MapInfo系統(tǒng)中,回應方法通過使用OLE技術實現(xiàn)。引發(fā)回應信息的事件主要有三類:地圖窗口狀態(tài)的改變、特定功能控件(菜單、按鈕、工具條)的選擇以及在繪圖或對象選擇等特定狀態(tài)下地圖窗口內(nèi)的用戶輸入事件。要在應用程序中使用回應方法,首先要創(chuàng)建一個專門負責回應信息接收和處理的OLE對象類(class),然后在其中定義不同的方法以處理不同類型的回應信息。以獲取地圖窗口狀態(tài)變化的回應信息為例,首先在VB工程中添加一個自定義類MIResponder,并在其中添加如下過程:

  Public Sub WindowContentsChanged (ByVal CommandInfoStr As Integer)

  然后創(chuàng)建接收CallBack信息的OLE類對象theResponder:

  Set theResponder = New MIResponder

  MapInfo.SetCallback theResponder

  則當某一地圖窗口狀態(tài)因用戶操作而改變時,theResponder對象的WindowContentsChanged 方法就會因MapInfo系統(tǒng)的調用而自動執(zhí)行。此時的CommandInfoStr參數(shù)就是MapInfo傳來的一個整數(shù)值即通知窗口狀態(tài)改變的回應信息,代表發(fā)生變化的地圖窗口的標識號,而WindowContentsChanged方法中的代碼就可以利用這個參數(shù)從MapInfo中獲取詳細的信息并作出處理。

  在絕大多數(shù)情況下,使用OLE自動化技術和回應方法已經(jīng)可以實現(xiàn)MapInfo系統(tǒng)與應用程序的完美集成。不過在某些比較復雜的應用情況中,有可能需要讓MapBasic程序主動從應用程序中提取數(shù)據(jù)。在OLE自動化方式下,作為服務器程序的MapInfo系統(tǒng)只能被動接受應用程序的操控,即使用回應方式也只是做到了主動通知,真正的數(shù)據(jù)交換還是必須由應用程序控制完成。為了讓MapBasic程序在自動化方式下取得數(shù)據(jù)交換的主動權,可以采用標準的進程間通信方式:動態(tài)數(shù)據(jù)交換(DDE)技術。

4 動態(tài)數(shù)據(jù)交換技術

  DDE是Windows環(huán)境下不同應用程序之間通過主動鏈接完成數(shù)據(jù)交換的協(xié)議標準,它可以讓兩個應用程序通過一條即時建立的數(shù)據(jù)通道進行動態(tài)實時的信息傳遞。在一次DDE會話過程中,主動申請建立數(shù)據(jù)交換通道的應用程序稱為客戶程序,它是數(shù)據(jù)交換服務的接受者;響應鏈接請求的應用程序稱為服務器程序,它是數(shù)據(jù)交換服務的提供者。DDE技術允許一個應用程序同時與其他程序建立多個DDE會話,在一個DDE會話中作為客戶方的程序也可以同時是另一個會話中的服務器。DDE會話有三個要素:會話對象名稱(ApplicationName)、會話主題(LinkTopic)和數(shù)據(jù)項(LinkItem)。其中對象名稱應當是一個支持DDE功能且正在運行的應用程序,會話主題和數(shù)據(jù)項則要符合服務器程序的定義。MapInfo系統(tǒng)和使用VB開發(fā)的應用程序都支持DDE功能,并且定義了一套會話主題供其他程序使用。

  要實現(xiàn)DDE會話,應用程序首先要向Windows操作系統(tǒng)申請建立數(shù)據(jù)通道,并提供會話對象的名稱和主題作為參數(shù)。操作系統(tǒng)隨后將這一請求轉發(fā)給擁有該名稱和主題的應用程序,在得到響應后就在內(nèi)存中建立一個數(shù)據(jù)交換通道,并把其標識返回給會話雙方。數(shù)據(jù)通道建立后,會話雙方就可以互相傳遞數(shù)據(jù)項完成信息交換。只要服務器程序支持,在一個數(shù)據(jù)通道內(nèi)可以傳遞多個數(shù)據(jù)項。在數(shù)據(jù)交換完成后,客戶程序應當主動提出終止會話,操作系統(tǒng)隨即關閉數(shù)據(jù)通道并釋放其占用的內(nèi)存資源。以MapBasic程序向VB應用程序申請數(shù)據(jù)交換服務的DDE會話為例,建立數(shù)據(jù)交換通道的程序代碼如下:

  Dim channelID As Integer

  ChannelID = DDEInitiate(″vbappname″, ″form1″)

  其中vbappname是VB應用程序的名稱,form1是其擁有的一個支持DDE功能的窗體。由于VB對DDE的支持是以控件為單位,因此其提供的DDE會話數(shù)據(jù)項就是擁有所請求數(shù)據(jù)的控件,而該控件所在的窗體就是會話主題。一旦與窗體建立了DDE數(shù)據(jù)通道,就可以與該窗體中所有支持DDE功能的控件進行數(shù)據(jù)交換。在MapBasic程序中,如果要從數(shù)據(jù)項獲取數(shù)據(jù)可以使用函數(shù)DDERequest$(),發(fā)送數(shù)據(jù)則使用DDEPoke語句。例如,下面的代碼將讀取VB文本控件Text1的值,隨后返回一個新的字符串值:

  Dim Oldtext As string, Newtext as string

  Oldtext = DDERequest$(ChannelID, ″text1″)

  Newtext = Oldtext & ″newstring″

  DDEPoke ChannelID, ″text1″, Newtext

  數(shù)據(jù)交換結束后,可以用DDETerminate語句來終止對話:

  DDETerminate ChannelID[!--empirenews.page--]

  對于同時有多個DDE會話的情況,也可以用DDETerminateAll來關閉所有的會話。

  隨著Windows操作系統(tǒng)的日益流行,嵌入式開發(fā)技術目前已成為設計大型軟件系統(tǒng)的主流方法。由于充分利用了已有的軟件成果,采用嵌入式技術可以縮短應用軟件的開發(fā)周期、減少開發(fā)成本,并且使系統(tǒng)具有清晰的層次結構,有利于進行調試和維護。本文以MapInfo系統(tǒng)和VB5.0為例,詳細介紹了三種主要的嵌入式集成設計技術:OLE自動化、回應方法和動態(tài)數(shù)據(jù)交換。這些方法已經(jīng)被應用在智能交通調度系統(tǒng)、車輛監(jiān)控系統(tǒng)、油田綜合信息管理系統(tǒng)等多項GIS工程項目中,實踐證明效果良好。

本站聲明: 本文章由作者或相關機構授權發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

憑借其全新的功能豐富的移動交易應用程序,屢獲殊榮的經(jīng)紀商HFM讓客戶實現(xiàn)觸手可及的全方位交易體驗。 毛里求斯路易港2022年10月14日 /美通社/ -- 全球多資產(chǎn)經(jīng)紀商...

關鍵字: 應用程序 FM 移動應用 ADI

倫敦2022年10月13日 /美通社/ -- Ubuntu Pro是擴展式安全維護和合規(guī)訂閱服務,目前針對數(shù)據(jù)中心和工作站已推出公開測試Beta版本。Canonical將按照...

關鍵字: UBUNTU CANONICAL BSP 應用程序

加拿大政府9月26日表示,從2022年10月1日起,加拿大將取消所有疫情下的旅行限制,包括對乘坐航班和火車乘客的疫苗接種和口罩要求。所有旅行者(無論國籍)從10月1日開始將不必通過ArriveCAN應用程序提交健康信息或...

關鍵字: ECAN 應用程序 飛機 ARRI

SIXT管理委員會批準整體可持續(xù)發(fā)展計劃,以進一步加快二氧化碳減排和智能新能源出行需求 到2030年, SIXT在歐洲車隊中的新能源車將達到70%至90% 投資5000萬歐元:公司將大...

關鍵字: 可持續(xù)發(fā)展 新能源汽車 應用程序 移動平臺

(全球TMT2022年9月22日訊)建筑項目管理軟件領域企業(yè)InEight Inc.宣布了最新的軟件創(chuàng)新,包括范圍、設計和資源管理方面的新流程標準化,以及新的進展跟蹤功能和創(chuàng)建基準驗證型進程預估和時間表的能力。該更新還...

關鍵字: 軟件 進程 應用程序 模板

InEight專注于軟件創(chuàng)新的標準化和基準更新,從而提高了效率,增加了項目信心 InEight建筑項目管理平臺的最新發(fā)展引入了新的設計管理和基準實踐,提高了各個項目之間的一...

關鍵字: 軟件 應用程序 進程 移動應用

Sumo Logic可靠性管理為企業(yè)領導者提供關鍵數(shù)據(jù),以平衡創(chuàng)新速度和服務可靠性

關鍵字: LOGIC 應用程序 PEN COM

中國晉城2022年9月7日 /美通社/ -- 希爾頓集團 (NYSE: HLT)今日宣布,晉城古書院希爾頓花園酒店正式開門迎客。作為集團旗下標志性高端精選服務酒店,首次進駐山西省的晉城古書院希爾頓花園酒店,將秉承品牌在全...

關鍵字: MIDDOT BSP 應用程序 感應器

(全球TMT2022年9月6日訊)近年來美網(wǎng)在提升數(shù)字體驗方面下了功夫,這背后,作為賽事主辦方美國網(wǎng)球協(xié)會 (USTA)長期合作伙伴的IBM及其眾多數(shù)字化解決方案功不可沒。很長時間以來,IBM Consulting與美...

關鍵字: IBM 數(shù)字化 應用程序 CODE

洛杉磯2022年8月31日 /美通社/ -- 由INKA Entworks提供的領先云端到端移動應用保護解決方案AppSealing宣布,公司榮獲2022年Gartner Hype Cycle應用安全"榜樣供應...

關鍵字: PSE APPS GARTNER 應用程序

嵌入式教程

6897 篇文章

關注

發(fā)布文章

編輯精選

技術子站

關閉