3

我正在通过 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 来确定将返回有效航拍图像的最大缩放?

谢谢,跳过

4

2 回答 2

2

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

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

您可以从级别 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;

}

(请注意,如果广泛使用这种方法可能会耗尽您的交易配额)

于 2015-08-05T07:02:15.793 回答
1

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

于 2014-09-18T12:14:10.243 回答