2010年8月6日 星期五

MapGuide_Map.Open VS Map.Create(不開MapGuide框架操作地圖)

在開發MapGuide程式時,通常都會依照我們所設計的網頁框架,將其中一個frame指定給/mapguide2010/mapviewernet/ajaxviewer.aspx,並且後面帶有SESSION跟WEBLAYOUT的參數,這樣就可以很容易的顯示出一個簡單的MapGuide公版。(不清楚該如何設定的可以參考)開出頁面以後,若是需要對地圖進行操作,我們就可以new出一個MgMap,然後使用Map.Open("地圖名稱")來取得地圖,並且進行任何一個介紹過的功能。

但是有時候我們並不想把整個MapGuide的框架打開來操作地圖,可能只希望去連接MapGuide Server的資料,利用程式的處理來獲取一些資訊,比如說:我想要去查詢信義區有多少間7-11,看到這個需求,通常的回應是:利用台北市行政區圖與7-11的點位資料進行空間查詢(空間查詢可參考),那麼我們可能會在MapGuide框架下,撰寫一個便利商店空間查詢功能,讓使用者選擇行政區跟需要統計的子項目來獲得答案,但可能實際需求只是需要一個統計列表;又可能想要去擷取於MapGuide Server上某個比例尺下的圖面資料貼在另一個系統上,那我們可能會製做一個匯出圖檔的功能,讓使用者操作,但實際需求是只要取得該區域的影像放到imageBox就好;所以不管怎樣,我們的思維往往被侷限在"我必須先產生MapGuide的框架"才能進而進行地圖的操作。

那我們有沒有辦法不要開啟MapGuide的框架,直接對MapGuide Server取得資料?去觀察整個開啟框架然後打開地圖進而對MapGuide Server進行操作的過程中有一個重點,就是Map.Open("地圖名稱")這個指令,既然使用Open這個字,就代表他是將已經存在的地圖打開來,那"已經存在"的地圖是誰?其實就是我們所用的MapGuide框架,所以!使用框架時它幫我們做了一個很重要的事情:new一個地圖!

所以整件事情的重點是,我要如何可以不要開框架的情況下創造出地圖,後來發現其實很有趣,整個答案就是前一句話,我要創造一個地圖,所以函式是:Map.Create(resourceService,MgResourceIdentifier,mapName),我們可以嘗試把程式碼略為修改,就可以發現我們不需要經過框架而產生出地圖,才對MapGuide Server進行操作。所以整個程式流程就像下圖:

寫這篇的時候讓我想到另一個有趣的事情,請見下篇。

沒有留言:

張貼留言