Bing Maps - 使用REST图像API确定静态航空地图的最大缩放级别

时间:2012-10-08 19:32:50

标签: bing-maps

我正在通过REST图像API从Bing地图中检索静态航空地图。某些地理区域似乎比其他区域支持更大的缩放级别。

例如,此位置支持最高为21的缩放级别:http://dev.virtualearth.net/REST/v1/Imagery/Map/Aerial/33.049101,-96.822731/21?key=someKey

但这个位置似乎最大值为19:http://dev.virtualearth.net/REST/v1/Imagery/Map/Aerial/38.82716,-97.6352/19?key=someKey

如果超出了19的缩放级别,则会返回一个图像,但图像只包含一个带有斜杠的摄像头,表示已超出最大缩放级别。

有没有办法调用API来确定返回有效航拍图像的最大变焦?

谢谢, 跳过

2 个答案:

答案 0 :(得分:2)

令人惊讶的是,Bing似乎没有直接提供此功能。我原本期望Imagery元数据响应包含一个字段,该字段指示将在该位置返回有效图像的最高缩放级别。但是,zoomMin和zoomMax似乎基本没用。通常你会注意到zoomMax上的图像会返回"破坏"图像和实际图像仅在较低的缩放级别可用。

我创建了一个似乎运行良好的解决方法。当图像实际存在于您在图像元数据请求网址中指定的缩放级别时,似乎vintageStart(和vintageEnd)字段填充了值(例如" 2006年1月31日GMT")。当真实图像不可用时,vintageStart和vintageEnd似乎设置为null。 (我想知道这绝对可靠吗?)

您可以从21级开始并缩小缩放级别。可以假设已填充vintageStart的第一个级别是具有有效图像的最佳可用缩放级别。

深度21:vintageStart为空 http://dev.virtualearth.net/REST/V1/Imagery/Metadata/Aerial/40.714550167322159,-74.007124900817871?zl=21&key=BING_API_KEY

请注意,maxZoom显示21,但您会看到这没有有效的图像。

深度21:图像破碎 http://dev.virtualearth.net/REST/V1/Imagery/Map/aerial/40.714550167322159,-74.007124900817871/21?key=BING_API_KEY

深度20:vintageStart已填充 http://dev.virtualearth.net/REST/V1/Imagery/Metadata/Aerial/40.714550167322159,-74.007124900817871?zl=20&key=BING_API_KEY

深度20:有效图片 :-) http://dev.virtualearth.net/REST/V1/Imagery/Map/aerial/40.714550167322159,-74.007124900817871/20?key=BING_API_KEY

PHP中的示例代码......

function getHighestZoomAtLocation($lon, $lat){

    //Add extra zoom levels to check if necessary
    foreach(array(21, 20, 19, 18) as $zoom){

        $url = "http://dev.virtualearth.net/REST/v1/Imagery/Metadata/Aerial/{$lat},{$lon}?&zoomLevel={$zoom}&key=BING_API_KEY";

        $imagery_meta_data_raw = file_get_contents($url);

        $imagery_meta_data = json_decode($imagery_meta_data_raw, true);

        if(!empty($imagery_meta_data['resourceSets'][0]['resources'][0]['imageUrl']) && !empty($imagery_meta_data['resourceSets'][0]['resources'][0]['vintageStart'])){
            return $zoom;
        }

    }

    return false;

}

(请注意,如果广泛使用,此方法可能会烧毁您的交易配额)

答案 1 :(得分:1)

如Nicolas所述,您可以使用Bing Maps Imagery Metadata REST服务获取地图区域的缩放范围:http://msdn.microsoft.com/en-us/library/ff701716.aspx