如何检测地图可见是否超过地球宽度的一倍

时间:2012-06-21 08:51:33

标签: google-maps-api-3

是否可以检测可见地图是否多次显示地球

例如,如果澳大利亚在zoom = 0

中可见两次或更多次

此致

1 个答案:

答案 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>