我正在研究将 OpenLayers 用于 Web 应用程序。基本上 OpenStreetMap 或谷歌地图放大不够,所以我想要实现的是,当您放大到最大级别并再次单击缩放时,会加载自定义地图图像。
如果这是不可能的,那么替代方法是做一个只出现在最大缩放级别上的叠加层,一旦点击,他们就会进入另一个地图,可能是基于 SVG 的。
其中哪一个更可行?欢迎任何反馈!
我正在研究将 OpenLayers 用于 Web 应用程序。基本上 OpenStreetMap 或谷歌地图放大不够,所以我想要实现的是,当您放大到最大级别并再次单击缩放时,会加载自定义地图图像。
如果这是不可能的,那么替代方法是做一个只出现在最大缩放级别上的叠加层,一旦点击,他们就会进入另一个地图,可能是基于 SVG 的。
其中哪一个更可行?欢迎任何反馈!
我确信它可以完成,但配置起来很棘手。
您可以使用 Mapnik 渲染您自己的 openstreetmap 图块。由于它基于矢量源,您可以进一步放大。
或者,您可以添加矢量图层(这将成为 SVG 或 VML)或静态图像层,并且仅在足够高的缩放级别下使其可见。但是,因为您的基础层是 OSM 或 Google 地图,所以地图的放大不能超过基础层的最大缩放级别。
您可以做的是覆盖默认的 OpenLayers.Layer.OSM 图层,将最大缩放级别设置得更高(尽管这不是好的做法)并停止以更高的缩放级别获取 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"
})