Google maps api 3 以非常高的缩放比例显示平铺层

Google maps api 3 以非常高的缩放比例显示平铺层,google-maps-api-3,zooming,openlayers,tiles,Google Maps Api 3,Zooming,Openlayers,Tiles,我正在尝试显示来自GIBS图像服务器的每日MODIS卫星图像。 瓷砖在WMTS协议中提供。下面是我使用Google maps API的代码示例: var getTileUrl = function(tile, zoom) { return "http://map1.vis.earthdata.nasa.gov/wmts-webmerc/" + "MODIS_Terra_CorrectedReflectance_TrueColor/default/"

我正在尝试显示来自GIBS图像服务器的每日MODIS卫星图像。 瓷砖在WMTS协议中提供。下面是我使用Google maps API的代码示例:

var getTileUrl = function(tile, zoom) {
        return "http://map1.vis.earthdata.nasa.gov/wmts-webmerc/" +
               "MODIS_Terra_CorrectedReflectance_TrueColor/default/" + 
               get_date() + "/" +
               "GoogleMapsCompatible_Level9/" +
                zoom + "/" + tile.y + "/" +
                tile.x + ".jpeg";
    };

    var layerOptions = {
        alt: "MODIS_Terra_TrueColor",
        getTileUrl: getTileUrl,
        maxZoom: 9,
        minZoom: 1,
        name: "MODIS_Terra_TrueColor",
        tileSize: new google.maps.Size(256, 256),
        opacity: 0.8
    };
    var modisOverlay = new google.maps.ImageMapType(layerOptions);
    map.overlayMapTypes.insertAt(0, modisOverlay);
当我将贴图缩放到比“缩放级别9”更详细的位置时,平铺将消失。所以我把maxZoom增加到了10,现在我收到了如下信息:

Failed to load resource: the server responded with a status of 400 (Bad Request) http://map1.vis.earthdata.nasa.gov/wmts-webmerc/MODIS_Terra_CorrectedReflectance_TrueColor/default/2013-03-07/GoogleMapsCompatible_Level9/10/291/587.jpeg
据我所知,服务器的缩放级别不高于9


当我缩放到更高的缩放级别时,是否有方法显示WMTS分幅?我需要的是在用户放大到大于9的缩放级别时“拉伸”平铺图像。我目前正在使用Google maps API V3,但如果更容易使用它们来解决我的问题,我可以改为使用传单或OpenLayers。

我不确定Google maps,但对于OpenLayers,简短的回答是没有内置方式。WMTS资源与其URL之间存在一对一映射。因此,存在已知数量的具有固定分辨率的缩放级别,并且从视图端口范围和缩放级别,将基于/zoom/y/x.jpeg返回正确的分幅。因此,一旦达到最大缩放,就必须扩展WMTS代码以重新缩放现有backbuffer图像,而不是从服务器请求新层。所以,这是可行的,如果有点混乱

如果查看源代码,您将看到一个方法applyBackBuffer,它执行平铺重缩放,并由缩放事件调用,假设在WMS/WMTS源上设置了transitionEffect:resize(这是默认设置)。您需要使用此逻辑,并在达到WMT的最大缩放后,防止在[OpenLayers.Layer.WMTS]中调用
getURL
。实际上,
getURL
函数是由调用的,它是表示单个平铺WMS或WMT的类

因此,这是一个较长的答案,可行,但混乱,因为您正在混合两种不同的瓷砖方法


同样值得一提的是,即使你这样做了,它也会很快看起来很糟糕。当你从4到2的分辨率缩放时,你在x和y维度上都进行了重采样,因此实际上只有25%的原始像素,从4到1,你看到的是原始平铺像素的1/16,因为每个新像素在x和y方向上都是4像素的重采样。

我不确定谷歌地图,但是对于OpenLayers来说,简单的答案是没有内置的方式。WMTS资源与其URL之间存在一对一映射。因此,存在已知数量的具有固定分辨率的缩放级别,并且从视图端口范围和缩放级别,将基于/zoom/y/x.jpeg返回正确的分幅。因此,一旦达到最大缩放,就必须扩展WMTS代码以重新缩放现有backbuffer图像,而不是从服务器请求新层。所以,这是可行的,如果有点混乱

如果查看源代码,您将看到一个方法applyBackBuffer,它执行平铺重缩放,并由缩放事件调用,假设在WMS/WMTS源上设置了transitionEffect:resize(这是默认设置)。您需要使用此逻辑,并在达到WMT的最大缩放后,防止在[OpenLayers.Layer.WMTS]中调用
getURL
。实际上,
getURL
函数是由调用的,它是表示单个平铺WMS或WMT的类

因此,这是一个较长的答案,可行,但混乱,因为您正在混合两种不同的瓷砖方法


值得一提的是,即使你这样做,它看起来也会很快。当您从4到2的分辨率缩放时,您将在x和y维度上重新采样,因此实际上只有25%的原始像素,从4到1,您将看到原始平铺像素的1/16,因为每个新像素将在x和y方向上重新采样4个像素。

我使用传单找到了一个简单的解决方案。 在传单tileLayer中,我可以设置maxNativeZoom和maxZoom

maxNativeZoom是平铺数据提供程序支持的最大缩放级别

maxZoom是在地图中显示拉伸平铺的最大缩放级别

答案如下:


当我在maxNativeZoom的基础上放大几个级别时,它可以工作并且看起来很好。缺点是图像被重新采样。

我用传单找到了一个简单的解决方案。 在传单tileLayer中,我可以设置maxNativeZoom和maxZoom

maxNativeZoom是平铺数据提供程序支持的最大缩放级别

maxZoom是在地图中显示拉伸平铺的最大缩放级别

答案如下:

当我在maxNativeZoom的基础上放大几个级别时,它可以工作并且看起来很好。缺点是图像被重新采样