我正在通过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来确定返回有效航拍图像的最大变焦?
谢谢, 跳过
答案 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,但您会看到这没有有效的图像。
深度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
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