2016-05-31 56 views
0

我正在嘗試使用谷歌地圖api將WMS圖層添加到谷歌地圖上。我可以用下面的代碼瓷磚WMS層成功地做到這一點:谷歌地圖上的單個瓦片WMS圖層v3

var tileSize = new google.maps.Size(256, 256); 

var options = { 
    'getTileUrl': googleGetTileUrlFunction, 
    'tileSize': tileSize, 
    'isPng': true 
}; 

var googleWMSLayer = new google.maps.ImageMapType(options); 

googleGetTileUrlFunction是一個函數,在參數接受座標和縮放,並返回一個URL到WMS請求。

但是,我需要添加另一個圖層到相同的地圖,其中圖層是單個圖像,而不是圖塊。由於我無法在google maps api中找到單個圖塊WMS圖層的對象,因此我試圖設置一個平鋪的地圖,其中的圖塊具有視口的大小。我結束了這樣的結果:

enter image description here

這顯然還是瓷磚,這不是正確居中。有沒有辦法強制谷歌地圖API從WMS請求中的指定位置繪製一個圖塊?

編輯:這是由谷歌地圖與由WMS請求返回的圖像呈現的WMS層的比較: enter image description here WMS的圖像是完全與地圖對齊,你可以看看東海岸清楚地看到它。我正在尋找一種方法來使用Google Maps API在視口上顯示該圖像。

回答

0

Ground overlays解決了我的問題。據我所知,他們在地圖上的指定座標處顯示圖像。

不用創建google.maps.ImageMapType的,我創建了一個新的地面覆蓋層:

var overlay = new google.maps.GroundOverlay(
    url, 
    imageBounds 
); 

overlay.setMap(gmap); 

url是我的WMS請求的URL和imageBounds是描述圖像的每個邊的座標的對象。

每當我平移或放大地圖時,通過生成一個新的請求url,其中邊界框參數(BBOX)是地圖的視口,我刪除了前一個覆蓋圖並將其替換爲新的覆蓋圖。

爲了達到這個目的,我必須在處理地圖平移事件的函數中存儲覆蓋層和生成我的WMS url的函數。

我仍然有一些小的投影問題需要解決,但這看起來像是一種有效的方法。

編輯:我實際上最終做出了一個自定義覆蓋,以解決我的投影問題。這裏有一個教程:https://developers.google.com/maps/documentation/javascript/customoverlays