2012-11-18 61 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" 
})