1

目に見える地図が地球を複数回表示しているかどうかを検出することは可能ですか?

たとえば、ズーム = 0 のようにオーストラリアが 2 回以上表示されている場合

よろしく

4

1 に答える 1

2

そのため、Google マップは 256 x 256 の解像度でテクスチャを表示します。したがって、ズーム レベル 0 では、テクスチャをラップ (または繰り返す) するには、幅が 256+1 ピクセル以上のマップ キャンバスが必要です。ズーム レベル 1 では 2 倍の 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>
于 2012-06-21T19:11:21.783 に答える