是否有一种方法可以设置谷歌静态地图的缩放级别,基于图像的可用性

Is there a way to set the zoom level of Google Static Maps, based on the availability of imagery?

本文关键字:缩放 于图像 可用性 图像 地图 谷歌 一种 方法 是否 设置 静态      更新时间:2023-09-26

我在工作环境中为客户使用静态映射。我喜欢17的缩放级别(0表示整个地球,21表示最接近的缩放),但根据图像位置的不同,谷歌可能无法提供17的缩放级别的图像。有没有办法告诉Maps API,动态地选择可能的最高缩放,比如17?

据我所知,静态地图必须在url的查询字符串中具有缩放集,例如

&zoom=17&z=17

如果你使用的是非静态地图,你可以很容易地找到和/或设置最大缩放:

V2:http://googlegeodevelopers.blogspot.com/2009/06/how-low-can-you-go-introducing.html

v3:http://code.google.com/apis/maps/documentation/javascript/services.html MaxZoom

考虑到你正在使用静态,我认为你有两个选择:

  1. 不设置缩放url查询,让谷歌地图确定"最佳"缩放级别。
  2. 将缩放设置为17或更小的缩放(14或15),然后允许用户使用一个链接放大,该链接使用不同的URL字符串刷新地图。(你需要用javascript做这个)

编辑

这是实现缩放的一种方法。(我很感兴趣,把它拼凑在一起。我肯定有更好/更优雅的方法)

<img src="http://maps.googleapis.com/maps/api/staticmap?center=55.516192,-87.39624&size=400x400&maptype=satellite&sensor=false&zoom=12" />
<input type="submit" id="in" value="Zoom in" />
<input type="submit" id="out" value="Zoom out" />

确保缩放级别位于查询字符串的末尾。

JS

$('#in').click(function(){
    var map = $('img').attr('src');
    var zoomPat = /(.+)(zoom=)(['d]*)/;
    var zoomLevel = map.match(zoomPat);
    var zoomLevelNum = Number(zoomLevel[3]); 
    if(zoomLevelNum == 21){
       alert('Maximum level reached');
    } 
    else{    
    var newZoom = zoomLevel[1] + zoomLevel[2] + (zoomLevelNum + 1);
    $('img').attr('src', newZoom);           
    } 
});
$('#out').click(function(){
    var map = $('img').attr('src');
    var zoomPat = /(.+)(zoom=)(['d]*)/;
    var zoomLevel = map.match(zoomPat);
    var zoomLevelNum = Number(zoomLevel[3]); 
    if(zoomLevelNum == 0){
       alert('Minimum level reached');
    } 
    else{    
    var newZoom = zoomLevel[1] + zoomLevel[2] + (zoomLevelNum - 1);
    $('img').attr('src', newZoom);           
    } 
});
http://jsfiddle.net/jasongennaro/FFTKG/2/

首先我要感谢Jason Gennaro,他的JS替代方案有一个惊人的想法!不幸的是,这个想法假设你在每个地图上都设置了"缩放"级别。如果,在我的情况下,我让谷歌(原文如此)调整地图大小,我想出了一个修改/添加到Jason的代码。如果你想使用他的想法,但又想让地图的大小在2个位置左右,使用每个位置的纬度/长度,使用下面的代码来计算距离,你可以估计一个缩放级别添加到字符串中。这些距离在一定程度上是通过大量测试估计出来的。我已经安装并测试了这个代码。完美的工作。享受。

function tom_distance2($lat1, $lng1, $lat2, $lng2, $miles = true)
{
  $pi80 = M_PI / 180;
  $lat1 *= $pi80;
  $lng1 *= $pi80;
  $lat2 *= $pi80;
  $lng2 *= $pi80;
  $r = 6372.797; // mean radius of Earth in km
  $dlat = $lat2 - $lat1;
  $dlng = $lng2 - $lng1;
  $a = sin($dlat / 2) * sin($dlat / 2) + cos($lat1) * cos($lat2) * sin($dlng / 2) * sin($dlng / 2);
  $c = 2 * atan2(sqrt($a), sqrt(1 - $a));
  $km = $r * $c;
  $di9 = round(($km * 0.621371192));
  if ($di9 >= "5000") {$tom98 = "1"; // zoom level
  } else if ($di9 >= "4000") {$tom98 = "2";
  } else if ($di9 >= "1500") {$tom98 = "3";
  } else if ($di9 >= "800") {$tom98 = "4";
  } else if ($di9 >= "400") {$tom98 = "5";
  } else if ($di9 >= "180") {$tom98 = "6";
  } else if ($di9 >= "100") {$tom98 = "7";
  } else if ($di9 >= "0") {$tom98 = "10";
  } else {$tom98 = "8";} // just in case :)
  return $tom98;
}

用…调用这个函数

$td2 = "&amp;zoom=" . tom_distance2($tlat1, $tlong1, $tlat2, $tlong2, 1);

注。将$td2添加到原始映射字符串的末尾。请原谅变量名。这就是PHP。