是否可以检测可见地图是否显示超过地球的一倍
例如,如果澳大利亚在 zoom = 0 中可见两次或更多
问候
因此,谷歌地图显示的纹理分辨率为 256 x 256。因此,在缩放级别 0 时,您需要一个 256+1 像素宽或更大的地图画布才能包裹(或重复)纹理。在缩放级别 1 时,这会加倍到 512+1,在缩放级别 2 时,会加倍为 1024+1,等等。
这个编码示例在地图下放了一个小文本来说明世界的原始宽度(256 * 2 ^ 缩放级别)是否根据画布的宽度进行换行。如果您的画布宽度为 800 像素,那么在缩放级别 0 和 1 时,您的地图将包裹,在缩放级别 2(需要最小画布宽度为 1024+1)时,您的地图不会包裹。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<script src='http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js' type='text/javascript'></script>
<script type="text/javascript"></script>
</head>
<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script>
<script type="text/javascript">
var map;
var mapWidth;
var mapTextureSize = 256;
function initialize()
{
var latlng = new google.maps.LatLng(0, 0);
map = new google.maps.Map(document.getElementById('map'), {
zoom:0,
center:latlng,
mapTypeId:google.maps.MapTypeId.SATELLITE
});
google.maps.event.addListener(map, 'zoom_changed', checkZoom);
mapWidth = document.getElementById('map').style.width;
mapWidth = parseInt(mapWidth.substr(0, mapWidth.length-2));
checkZoom();
}
function checkZoom()
{
var result = mapTextureSize * Math.pow(2,map.zoom);
if (result + 1 > mapWidth)
{
document.getElementById('feedback').innerText = "no wrapping";
}
else
{
document.getElementById('feedback').innerText = "wrapping";
}
}
</script>
<body onLoad="initialize()">
<div id="map" style="width: 800px; height: 350px;"></div>
<div id="feedback" style="width: 800px;"></div>
</body>
</html>