我在工作中爲客戶使用靜態地圖。我喜歡17的縮放級別(整個地球爲0,最近的縮放可能爲21),但取決於圖像位置的來源,Google可能沒有縮放級別爲17的圖像。 ,告訴Maps API,動態選擇可能的最高縮放比例,最多可以說17?我還沒有看到這樣做的方式,但我很欣賞任何建議。有沒有方法根據圖像的可用性來設置Google靜態地圖的縮放級別?
3
A
回答
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
既然你是雖然使用靜態,我認爲你有兩個選擇:
- 沒有設置URL查詢變焦,讓谷歌地圖確定的「最好的」縮放級別。
- 將縮放比例設置爲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);
}
});
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 = "&zoom=" . tom_distance2($tlat1, $tlong1, $tlat2, $tlong2, 1);
p.s.將$ td2添加到原始地圖字符串的末尾。請原諒變數名稱。有時他們是有道理的:)這是PHP。
相關問題
- 1. 根據顯示分辨率設置Google地圖縮放級別
- 2. 有沒有辦法根據縮放級別更改圖標圖像? (leaflet.js)
- 3. Google Maps V3:根據地圖縮放級別縮放折線?
- 4. 根據縮放級別縮放自定義標記Google地圖
- 5. 如何根據標記位置設置Google地圖的縮放級別
- 6. 如何動態設置Google地圖自定義縮放級別?
- 7. Google靜態地圖API如何指定最大縮放級別
- 8. 如何確定靜態Google地圖縮放級別
- 9. 設置縮放級別在Google地圖上不起作用
- 10. Google靜態地圖半徑要縮放
- 11. 如何根據所有經緯度的值設置地圖的縮放級別,以便我可以在地圖iPhone中看到所有的地方?
- 12. OpenLayers每個縮放級別的不同靜態圖像
- 13. 來自「我的地點」地圖的靜態Google地圖圖像?
- 14. 如何根據地點控制Google地圖中的縮放級別
- 15. 在谷歌地圖android中動態設置縮放級別
- 16. 根據縮放級別更改圖標
- 17. 有沒有辦法將縮放動畫設置爲google地圖api 2標記
- 18. 有沒有一種方法可以僅用CSS來自動縮放圖像?
- 19. 無法設置圖像縮放級別並修復圖像視圖
- 20. 根據設備的Android圖像縮放
- 21. 根據縮放級別限制地圖疊加層的數量
- 22. 有沒有辦法設置使用System.IO.Compression.GZipStream時的壓縮級別
- 23. 如何使用圖像作爲具有縮放級別的地圖android
- 24. 如何爲地圖視圖設置縮放級別?
- 25. 如何設置地圖視圖的縮放級別,使三個針腳可見?
- 26. 縮放級別屬性在Google地圖上無效(Wordpress函數)
- 27. 設置世界風地圖的縮放級別
- 28. iPhone:設置基於距離的地圖縮放級別
- 29. 在谷歌地圖上設置適當的縮放級別
- 30. C++ 11有沒有一種方法來靜態測試方法訪問級別?
請提供您到目前爲止的代碼。 –
我爲縮放功能添加了一些代碼。 –