0

我正在研究将 OpenLayers 用于 Web 应用程序。基本上 OpenStreetMap 或谷歌地图放大不够,所以我想要实现的是,当您放大到最大级别并再次单击缩放时,会加载自定义地图图像。

如果这是不可能的,那么替代方法是做一个只出现在最大缩放级别上的叠加层,一旦点击,他们就会进入另一个地图,可能是基于 SVG 的。

其中哪一个更可行?欢迎任何反馈!

4

1 回答 1

0

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

您可以使用 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"
})
于 2012-11-19T09:03:29.957 回答