有没有办法根据图像的可用性设置Google静态地图的缩放级别?

时间:2011-07-15 18:05:25

标签: javascript html google-maps static zoom

我在工作环境中为客户使用静态地图。我喜欢17的缩放级别,(整个地球为0,最近的缩放可能为21)但是根据图像位置的来源,谷歌可能没有17的缩放级别可用的图像。是一种方式,告诉Maps API,动态选择最高可能的缩放,最多17个?我还没有看到这样做的方法,但我确实感谢任何建议。

2 个答案:

答案 0 :(得分:4)

据我所知,静态地图必须在网址的查询字符串中设置缩放,例如

&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. 不要对网址查询设置缩放,让Google地图确定“最佳”缩放级别。
  2. 将缩放设置为17或更小的缩放(14或15),然后允许用户使用链接刷新,该链接使用不同的URL字符串刷新地图。 (您需要使用javascript执行此操作)
  3. 修改

    这是实现缩放的js的一种方法。 (我很感兴趣并且一起黑了。我相信有更好/更优雅的方式)

    <强> HTML

    <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/

答案 1 :(得分:2)

首先,我要感谢Jason Gennaro用他的JS替代品获得一个惊人的想法!不幸的是,这个想法假定您在每张地图上都设置了“缩放”级别。如果在我的情况下,我让google(原文如此)调整地图大小本身,我想出了对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);

P.S。将$ td2添加到原始地图字符串的末尾。请原谅变量名称。有时他们有意义:)这是PHP。