PowerBuilder和MapInfo的集成開發(fā)技術_第1頁
PowerBuilder和MapInfo的集成開發(fā)技術_第2頁
PowerBuilder和MapInfo的集成開發(fā)技術_第3頁
PowerBuilder和MapInfo的集成開發(fā)技術_第4頁
PowerBuilder和MapInfo的集成開發(fā)技術_第5頁
已閱讀5頁,還剩3頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、 PowerBuilder和MapInfo的集成開發(fā)技術powerbuilder 是一個面向?qū)ο蟮挠糜跇嬙旎诳蛻?服務器數(shù)據(jù)庫應用系統(tǒng)的開發(fā)工具,它通過odbc可同時支持sysbase、oracle、informix、sql server等多種關系數(shù)據(jù)庫,具有強大的數(shù)據(jù)庫應用程序開發(fā)功能,尤其是它提供的如數(shù)據(jù)窗口等工具,使其能夠更加方便有效地訪問與操縱數(shù)據(jù)庫。 mapinfo是由美國mapinfo公司推出的地理信息系統(tǒng)開發(fā)平臺,其核心包括mapinfo professional和mapbasic兩個部件。通過mapinfo平臺,能把大量信息直觀地與地理圖形有機聯(lián)系起來,使枯燥的表格數(shù)據(jù)可視化

2、,從而極大地方便了數(shù)據(jù)分析和輔助決策。 利用powerbuilder強大的數(shù)據(jù)訪問與操縱能力和mapinfo的地圖信息管理功能,結合integrated mapping技術、ole自動化技術等,將mapinfo地圖集成到powerbuilder的應用中,可以迅速地開發(fā)出具有強大地圖處理能力的應用程序,使數(shù)據(jù)庫中繁雜抽象的數(shù)據(jù)快速、準確、靈活地顯示于電子地圖之上,將數(shù)據(jù)可視化,實現(xiàn)空間數(shù)據(jù)和屬性數(shù)據(jù)的有機結合。 1 開發(fā)框架 使用powerbuilder和mapinfo集成開發(fā)技術所開發(fā)的應用程序,稱為集成的地圖應用程序。在集成的地圖應用程序中,以客戶/服務器的開發(fā)模式,使用powerbuild

3、er開發(fā)的應用程序稱為客戶程序??蛻舫绦蜻\行在前臺,通過ole調(diào)用在后臺運行的作為ole自動化服務器的mapinfo。LOCALHOst 在集成的地圖應用程序中,根據(jù)mapinfo提供的integrated mapping接口,在powerbuilder客戶程序中使用outbound ole automation技術,將mapinfo的地圖窗口集成到客戶程序中,從而使客戶程序具備地圖處理能力??蛻舫绦蚴褂胢apinfo ole自動化對象、mapbasic ole自動化對象的有關屬性和方法,通過mapinfo ole自動化服務器對集成的地圖窗口進行控制。圖1給出了客戶程序和服務器程序間的關系。

4、圖1 powerbuilder客戶程序和mapinfo服務器的關系 2建立powerbuilder客戶程序和mapinfo ole服務器的連接 建立powerbuilder客戶程序和mapinfo ole服務器的連接在原理上是:在powerbuilder開發(fā)的客戶程序中,通過使用outbound ole automation技術實現(xiàn)客戶程序和mapinfo服務器的連接,借助ole調(diào)用mapinfo服務器。具體實現(xiàn)上是:在包含地圖窗口的框架窗口的open事件中添加代碼,創(chuàng)建一個新的oleobject,而將mapinfo作為這個新的oleobject的ole服務器。要調(diào)用mapinfo服務,則需調(diào)

5、用connecttonewobject函數(shù)并傳遞ole programmable object的程序標識,即“”: /oleobject對象的實例 oleobject mapinfo /接收錯誤代碼 integer errcode /創(chuàng)建一個與mapinfo進行通信的ole自動化對象 mapinfo = create oleobject /連接ole自動化對象到mapinfo服務器 errcode = () if errcode 0 then messagebox(fatal error, error connecting to the map server. exiting.) ruturn

6、 end if 在退出應用程序時,要調(diào)用disconnecttoobject函數(shù)斷開ole自動化對象和mapinfo ole自動化服務器之間的連接,并撤消ole自動化對象,以釋放其占用的系統(tǒng)資源。為此,可在上述框架窗口的close事件中添加代碼實現(xiàn): /斷開與ole自動化對象與mapinfo服務器的連接 () /釋放ole自動化對象 destroy mapinfo 3將地圖窗口集成到powerbuilder應用程序中 要將mapinfo的地圖窗口集成到powerbuilder開發(fā)的客戶程序中,必須在客戶程序中為mapinfo中的應用窗口重新指定父窗口,并指定一個picture控件作為集成的地圖

7、窗口的父窗口??梢允褂胦le自動化對象的do方法實現(xiàn)上述功能: /重新指定mapinfo中的應用窗口的父窗口為應用程序窗口 /其中w_map為一個窗口 (set application window + string(handle(w_map) /指定一個picture控件棗p_map為地圖窗口的父窗口,將地圖窗口集成到客戶程序中 (set next document parent + string(handle(p_map) + style 1).gif (11237 字節(jié)) src=/lunwen/uploadfiles/200505/ width=681 圖2 回調(diào)技術的實現(xiàn) 4實現(xiàn)回調(diào)

8、 在powerbuilder的客戶程序中,是通過ole自動化對象對集成的地圖窗口進行控制,如圖2所示。當客戶程序在地圖窗口進行有關的操作后,對應的事件只傳遞給mapinfo服務器,而不直接傳遞給客戶程序,為了在客戶程序中對事件進行處理,必須采用回調(diào)技術。由于在powerbuilder中不能定義公共123下一頁 的回調(diào)類,因此必須編寫一個在mapinfo服務器中運行的mapbasic應用程序,用來將回調(diào)信息反饋給powerbuilder客戶程序。其實現(xiàn)過程為: 首先,在包含集成地圖窗口的powerbuilder應用窗口創(chuàng)建一個用戶自定義事件ue_selectionmade,事件id為pbm_cu

9、stom01。 然后,編寫一個在mapinfo服務器中運行的mapbasic應用程序,在此應用程序中添加對地圖窗口事件進行處理的子程序。當對客戶程序中的集成地圖窗口進行操作時,mapbasic程序中對應的事件處理程序被觸發(fā)。在事件處理程序中,可以將要傳遞給客戶程序的信息保存到mapbasic中定義的一個全局變量中,然后使用win32 api函數(shù)postmessage,以powerbuilder應用窗口的句柄和該窗口的用戶自定義事件的id為參數(shù),向powerbuilder客戶程序發(fā)送消息,這樣powerbuilder客戶程序就可以在該窗口的用戶自定義事件中處理地圖窗口事件了,并且還可以使用mba

10、pplications對象的方法,獲取mapbasic全局變量中保存的事件信息。如下代碼展示了mapbasic應用程序在接收到地圖對象選擇事件時的處理的過程: 預定義powerbuilder應用窗口的用戶自定義事件的唯一數(shù)值標識符 define selection_made 1024 響應地圖對象選擇事件 sub selchangedhandler() 如果選中一個地圖對象 if commandinfo(cmd_info_seltype) = 1 then 保存地圖對象所在的表的名稱 g_seltabname = selectioninfo(sel_info_tablename) 向power

11、builder客戶程序發(fā)送消息 irc = postmessage(g_pbhwnd_bg,selection_made,0,0) end if end sub 下面的程序段中給出了實現(xiàn)回調(diào)時powerbuilder客戶程序的處理過程。該處理過程使用了mapbasic編寫的程序。在mapbasic程序中保存事件信息的變量為g_seltabname,而g_pbhwnd是mapbasic程序中用來接收powerbuilder客戶程序窗口句柄的全局變量。 /在mapinfo服務器中運行mapbasic應用程序 (run application + gs_appdir + ) /創(chuàng)建對mapbasic

12、應用程序進行控制的ole自動化對象 mbappoleobject = create oleobject mbappoleobject = (1) /傳遞powerbuilder客戶程序中的窗口句柄給mapbasic應用程序 /以便mapbasic應用程序?qū)⒎祷亟opowerbuilder客戶程序 (g_pbhwnd_bg).value = string(handle(this) 由下面代碼所示的powerbuilder客戶程序就可以在窗口w_map的用戶自定義事件ue_selectionmade中處理地圖窗口事件: /在powerbuilder客戶程序的用戶自定義事件中使用mbappoleobj

13、ect對象獲取回調(diào)信息 ls_mi_commandinfo = (g_commandinfostring).value 5充分利用mapbasic應用程序 mapbasic是mapinfo提供的用戶系統(tǒng)開發(fā)工具,它具有對地圖對象的管理、對含有地圖對象的mapinfo表的管理等方面的強大功能。 在將mapinfo地圖集成到powerbuilder的開發(fā)應用中,mapbasic不僅僅能用來實現(xiàn)回調(diào),還可實現(xiàn)其它諸多功能。例如,在開發(fā)過程中經(jīng)常會遇到需要保存地圖對象類型的中間結果的問題,而在powerbuilder中沒有與之對應的數(shù)據(jù)類型,又難以通過mapinfo ole自動化對象的方法和屬性實現(xiàn)等

14、諸如此類的問題,若利用mapbasic應用程序以及使用它的ole自動化對象mbapplications的方法和屬性來解決,可以達到事半功倍之效果。 與mapinfo ole自動化對象相似,mapbasic的ole自動化對象mbapplications也有自己的do方法和eval方法。每當powerbuilder客戶程序調(diào)用它們時,mapinfo就會自動調(diào)用mapbasic的保留過程remotemsghandler或remotequeryhandler過程,并可以在過程中通過commandinfo(cmd_info_msg)得到調(diào)用do方法或eval方法的參數(shù)。 以下代碼運用mbapplicat

15、ions的do方法,實現(xiàn)改變當前選中地圖對象的顏色: /要求將當前選中地圖對象的顏色改為蘭色 (blue) mapinfo將自動調(diào)用remotemsghandler過程: sub remotemsghandler() dim myobject as object 獲取并分析do方法的參數(shù) cmdinfostr = commandinfo(cmd_info_msg) 改變地圖對象的顏色 if cmdstr= blue then myobject = alter object myobject info 2, makecustomsymbol (, rgb(0,0,255), 18, 2) update selection set obj = myobject where rowid = 1 end if end sub mbapplications的eval方法的調(diào)用與do方法的類似,只不過mapinfo將自動調(diào)用remotequeryhandler過程,并要求返回一個結果。 6 結束語 目前,關于mapinfo地圖的集成應用大都是利用vb、vc+開發(fā)的,利用powerbuilder開發(fā)的實際應用卻很少,以至很多人認為難以利用powerbuilder實現(xiàn)對mapinfo的集成開發(fā),就算實現(xiàn)了也難以很好地完成對地圖窗口的控制。本文介紹了如何將mapinfo地圖集成到po

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論