2012-11-18 85 views
0

我正在調查使用OpenLayers的Web應用程序。基本上OpenStreetMap或谷歌地圖沒有足夠的放大,所以我想實現的是,當你放大到最大的水平,再次點擊縮放自定義地圖圖像加載。Openlayers放大到自定義地圖

如果這是不可能的,那麼替代方法是做一個覆蓋圖,它只會出現在最大縮放級別上,一旦點擊它們就會轉到另一個地圖,可能是基於SVG的。

哪一個更可行?任何反饋歡迎!

回答

0

我確信它可以完成,但配置起來很棘手。

您可以使用Mapnik渲染自己的openstreetmap圖塊。由於它基於矢量源,因此可以進一步放大。

或者,您可以添加矢量圖層(這將成爲SVG或VML)或靜態圖像圖層,並且只能在足夠高的縮放級別上顯示此圖層。但是,因爲您的基礎層是OSM或Google地圖,所以地圖無法進一步縮放基礎圖層的最大縮放級別。

你可以做的是覆蓋默認的OpenLayers.Layer.OSM層,設置最大縮放級別更高(although this is not good practice)並停止在更高縮放級別獲取OSM瓦片圖像,並添加自定義行爲(從你自己的加載瓦片服務器,或使用矢量圖層選項)。你必須從某個地方覆蓋的類層次結構的正確方法(OpenLayers.Layer.OSM延伸OpenLayers.Layer.XYZ延伸OpenLayers.Layer.Grid等)

OpenLayers.Layer.MyOSMLayer = OpenLayers.Class(OpenLayers.Layer.OSM, { 
    initialize: function(name, options) { 
     options = OpenLayers.Util.extend({ 
      numZoomLevels: 19 + 4, 
     }, options); 
     var newArguments = [name, url, options]; 
     OpenLayers.Layer.OSM.prototype.initialize.apply(this, newArguments); 
    }, 

    // @override from XYZ 
    getURL: function (bounds) { 
     var xyz = this.getXYZ(bounds); 
     if (xyz.z > 19) { // override url on higher zoomlevel 
      return "http://myserver/white.png"; 
     } 
     // else default behaviour: super.getUrl() 
     return OpenLayers.Layer.OSM.prototype.getURL.apply(this, [bounds]); 
    }, 

    CLASS_NAME: "OpenLayers.Layer.MyOSMLayer" 
})