2011-06-21 32 views
0

我遵循代碼http://www.gisdoctor.com/v3/mapserver.html將WMS作爲圖像疊加在使用API​​ v3的Google地圖上。在上面的鏈接JS代碼如下所示WMS作爲谷歌地圖v3中的單個平鋪圖像

"WMSGetTileUrl" : function(tile, zoom) { 
    var projection = map.getProjection(); 
    var zpow = Math.pow(2, zoom); 
    var ul = new google.maps.Point(
     tile.x * 256.0/zpow, 
     (tile.y + 1) * 256.0/zpow 
    ); 
    var lr = new google.maps.Point(
     (tile.x + 1) * 256.0/zpow, 
     tile.y * 256.0/zpow 
    ); 
    var ulw = projection.fromPointToLatLng(ul); 
    var lrw = projection.fromPointToLatLng(lr); 

    var bbox = ulw.lng() + "," + ulw.lat() + "," + lrw.lng() + "," + lrw.lat(); 

    return url = "http://url/to/mapserver?" + 
     "version=1.1.1&" + 
     "request=GetMap&" + 
     "Styles=default&" + 
     "SRS=EPSG:4326&" + 
     "Layers=wmsLayers&" + 
     "BBOX=" + bbox + "&" + 
     "width=256&" + 
     "height=256&" + 
     "format=image/png&" + 
     "TRANSPARENT=TRUE"; 
}, 

"addWmsLayer" : function() { 

    /* 
    Creating the WMS layer options. This code creates the Google 
    imagemaptype options for each wms layer. In the options the function 
    that calls the individual wms layer is set 
    */ 
    var wmsOptions = { 
     alt: "MapServer Layers", 
     getTileUrl: WMSGetTileUrl, 
     isPng: false, 
     maxZoom: 17, 
     minZoom: 1, 
     name: "MapServer Layer", 
     tileSize: new google.maps.Size(256, 256) 
    }; 

    /* 
    Creating the object to create the ImageMapType that will call the WMS 
    Layer Options. 
    */ 
    wmsMapType = new google.maps.ImageMapType(wmsOptions); 
    map.overlayMapTypes.insertAt(0, wmsMapType); 
}, 

一切工作正常,但是,當然,WMS返回爲256×256的瓷磚。沒有驚喜,因爲這就是我所要求的。然而,在http://groups.google.com/group/google-maps-js-api-v3/browse_thread/thread/c22837333f9a1812/d410a2a453025b38的討論之後,似乎我可能會更好地向mapserver請求一個untiled(單個)映像。這會減少我的服務器。無論如何,我想嘗試一個單一的圖像,但我無法正確構建一個請求。

具體來說,我把瓷磚的大小改成了很大的東西;例如,我嘗試了1024 x 1024的圖塊。我確實獲得了較少的圖塊,但返回的圖像與Google Maps基本圖層邊界不匹配。

我想是根本不指定瓷磚大小。相反,我應該動態地確定圖塊的大小,例如比當前地圖大小大256個像素。這樣,無論地圖大小如何,都會返回單個圖像。此外,無縫平底鍋將在地圖邊緣附加256px的幫助下實施。

對此提出建議?

+0

您是否曾經找到過解決方案?它看到Weather Underground的好人們使用這種方法進行映射:http://www.wunderground.com/wundermap/。也許其中一個會看到這個並跳進:) – malonso

回答

0

1)它適用於我 - 512和1024也適用。您只需在所有適當位置進行更改(角點座標計算,平鋪尺寸設置,WMS參數寬度&高度設置)。任何平鋪設置應該是可能的,如果你只是在代碼中的所有地方正確處理它。

2)我認爲你正試圖在錯誤的地方進行優化。 256x256的瓷磚已經建立了一個原因。請記住,谷歌正在緩存瓷磚,所以更大的瓷磚整個解決方案可能會慢得多。此外,地圖將爲用戶加載速度更快。

3)瓷磚的概念是正確的,應該保留。像接收整個地圖這樣的東西是行不通的 - 然後想象地圖平移。不要試圖重新發明車輪並堅持使用當前的谷歌拼貼概念 - 它針對這種類型的應用進行了優化。如果您需要將地圖作爲單個圖像接收,則可以使用靜態谷歌地圖api

0

看到這個same question我剛剛爲其他人回答。這很可能是你的預測。 EPSG:4326不是Google地圖的正確投影。改變投影意味着你需要改變計算和引用座標的方式。