我正在调查使用OpenLayers的Web应用程序。基本上OpenStreetMap或谷歌地图没有足够的放大,所以我想实现的是,当你放大到最大的水平,再次点击缩放自定义地图图像加载。Openlayers放大到自定义地图
如果这是不可能的,那么替代方法是做一个覆盖图,它只会出现在最大缩放级别上,一旦点击它们就会转到另一个地图,可能是基于SVG的。
哪一个更可行?任何反馈欢迎!
我正在调查使用OpenLayers的Web应用程序。基本上OpenStreetMap或谷歌地图没有足够的放大,所以我想实现的是,当你放大到最大的水平,再次点击缩放自定义地图图像加载。Openlayers放大到自定义地图
如果这是不可能的,那么替代方法是做一个覆盖图,它只会出现在最大缩放级别上,一旦点击它们就会转到另一个地图,可能是基于SVG的。
哪一个更可行?任何反馈欢迎!
我确信它可以完成,但配置起来很棘手。
您可以使用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"
})