Openlayers缩放到自定义地图

Openlayers缩放到自定义地图,openlayers,Openlayers,我正在研究将OpenLayers用于web应用程序。基本上OpenStreetMap或Google Maps的放大不够,所以我想实现的是,当您放大到最大级别并再次单击“缩放”时,将加载自定义地图图像 如果这是不可能的,那么另一种选择是做一个覆盖,它只会出现在最大的缩放级别上,一旦单击,它们就会进入另一个地图,可能是基于SVG的 其中哪一个更可行?欢迎任何反馈 我相信这是可以做到的,但配置起来很棘手 您可以使用Mapnik渲染自己的openstreetmap分幅。因为它基于矢量源,所以可以进一步放

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

如果这是不可能的,那么另一种选择是做一个覆盖,它只会出现在最大的缩放级别上,一旦单击,它们就会进入另一个地图,可能是基于SVG的


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

我相信这是可以做到的,但配置起来很棘手

您可以使用Mapnik渲染自己的openstreetmap分幅。因为它基于矢量源,所以可以进一步放大

或者,您可以添加向量层(这将成为SVG或VML)或静态图像层,并仅在足够高的缩放级别上使其可见。但是,由于您的基础层是OSM或Google Maps,因此地图的放大范围不能超过基础层的最大缩放级别

您可以做的是覆盖默认的OpenLayers.Layer.OSM层,将最大缩放级别设置得更高(),停止以更高的缩放级别获取OSM磁贴图像,并添加自定义行为(从您自己的服务器加载磁贴,或使用矢量层选项)。您必须覆盖类层次结构中某个位置的正确方法(
OpenLayers.Layer.OSM
extends
OpenLayers.Layer.XYZ
extends
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"
})