2011-07-15 43 views
3

我在工作中爲客戶使用靜態地圖。我喜歡17的縮放級別(整個地球爲0,最近的縮放可能爲21),但取決於圖像位置的來源,Google可能沒有縮放級別爲17的圖像。 ,告訴Maps API,動態選擇可能的最高縮放比例,最多可以說17?我還沒有看到這樣做的方式,但我很欣賞任何建議。有沒有方法根據圖像的可用性來設置Google靜態地圖的縮放級別?

+0

請提供您到目前爲止的代碼。 –

+0

我爲縮放功能添加了一些代碼。 –

回答

4

據我所知,靜態地圖必須具備變焦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來做到這一點)

編輯

下面就來實施變焦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

首先,我要感謝傑森加圖索與他的JS替代一個驚人的想法!不幸的是,這個想法假定你在每張地圖上設置了「縮放」級別。如果和我一樣,我讓谷歌(原文如此)自己調整地圖大小,我想出了一個對Jason的代碼進行修改/添加的方法。如果您想使用他的想法,但希望地圖在兩個位置的正確大小,使用每個位置的緯度/經度,使用下面的代碼來計算距離,您可以估計要添加到字符串的縮放級別。這些距離通過大量測試進行估計。我已經安裝並測試了這段代碼。完美的作品。請享用。

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。

相關問題