引用主題地圖
API使用範例:於TGOS底圖上套疊主題地圖
情境假設:
假設今天使用者需要在TGOS底圖上加入一張主題地圖圖層(例:避難收容處所),以作為參考圖資。在這邊我們提供了取得主題地圖的方式,以及示範如何透過圖片影像疊加層(TGGroundOverlay)來承接主題地圖取出的影像,最後套疊在地圖上。
TGOS MAP API建置方式:
1. 初始化地圖:
首先加入一張TWD97坐標的TGOS底圖,並透過TGMapOptions將地圖類型控制項關閉。接著透過TGOnlineMap的「fitBounds()」方法,將地圖的初始位置設定在一個較小的區域範圍。
var pOMap =document.getElementById("TGMap");
var mapOptions = {
mapTypeControl: false //mapTypeControl(關閉地圖類型控制項)
};
pMap = new TGOS.TGOnlineMap(pOMap, TGOS.TGCoordSys.EPSG3826, mapOptions);
pMap.fitBounds(newTGOS.TGEnvelope(304705, 2763900, 305492, 2763483));
2. 加入主題地圖:
2.1 取得地圖邊界及宣告主題地圖物件:
在加入主題地圖之前,我們先使用TGOnlineMap的「getBounds( )」方法來取得目前圖面的邊界範圍,作為之後加入主題地圖的查詢條件之一。
var Bounds = pMap.getBounds();
接著宣告一個主題地圖物件「TGThemeLayer()」。
ThemeLayer = new TGOS.TGThemeLayer();
2.2 設定主題地圖參數:
每次需要取得主題地圖時,都必須透過回傳參數的方式來向伺服器送出要求,伺服器會依照使用者回傳的參數即時產生相對應的圖檔。幾個必要的參數包括了所需主題圖的上下左右邊界,及回傳影像的寬度和高度。
在主題圖邊界的部份,我們可以直接使用目前地圖圖面的邊界,而影像的寬度高度則是依照一開始地圖容器(<div>)的寬度高度進行設定。
var req = {
left: Bounds.left,
right: Bounds.right,
top: Bounds.top,
bottom: Bounds.bottom,
height: 480,
width: 640
};
2.3 取得主題地圖:
完成參數設定的步驟之後,我們就可以使用TGThemeLayer( )的「getThemePic( )」方法來取得主題圖。主題圖服務名稱和圖層名稱可以在主題地圖列表中找到。以範例來說,我們要取得避難收容處所服務內的避難收容處所圖層,因此服務名稱就是「TGOS.TGMapServiceId.SHELTERS」,而圖層名稱則是「TGOS.TGMapId.SHELTERS」。
getThemePic( )的第三項參數我們可以將上一個步驟所設定的地圖參數加入(req),另外也可以要求最後的function把從伺服器取得的影像連結網址傳回來。
ThemeLayer.getThemePic(TGOS.TGMapServiceId.SHELTERS,TGOS.TGMapId.SHELTERS,
req, function handler(url) {
2.4 將主題圖疊加至TGOS底圖:
通過上一步驟,我們可以從伺服器取得特定範圍的指定圖層影像,接下來我們就可以將這張影像加至我們的TGOS底圖上。在這裡可以使用TGGroundOverlay( )物件來完成這個目的,首先將主題地圖的URL接進來。
接著宣告一個空的TGGroundOverlay( )圖片影像疊加層物件,然後把現在的地圖圖面範圍(Bounds)、圖片影像(url)及放置的地圖名稱加到函式內,完成圖片影像套疊的操作。
GOverlay = new TGOS.TGGroundOverlay();
GOverlay.setBounds(Bounds);
GOverlay.setImage(url);
GOverlay.setMap(pMap);
2.3 移除主題地圖圖層
最後我們可以在整個function的最前端,加入一個簡單的判斷程式,當加入主題地圖的時候地圖上已經有主題地圖存在的時候,就可以使用TGGroundOverlay( )的「setMap(null)」方法,將存在的主題地圖先行移除。
if (GOverlay) {
GOverlay.setMap(null);
}