是否可以检测可见地图是否多次显示地球
例如,如果澳大利亚在zoom = 0
中可见两次或更多次此致
答案 0 :(得分:2)
因此,Google地图会显示分辨率为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>