自定义投影,Google Maps API v3的不稳定叠加行为

时间:2013-02-24 13:44:19

标签: javascript google-maps google-maps-api-3

我想使用Google Maps API浏览单个图片,我已经定义了自己的投影。我想使用GroundOverlay而不是几个图像图块,因为我只有一个小分辨率图像,但我希望它仍然是可缩放的。但是,在尝试使用此预测时,我会遇到一些不稳定的行为:

  1. 在缩放级别0处根本没有显示叠加。
  2. 在缩放级别1及更高级别时,Markers会显示,但GroundOverlays仍然没有显示。
  3. 但是,如果我从任何级别缩小,我可以非常短暂地显示GroundOverlays。它只会在缩小时显示并立即消失。此外,虽然很快就会出现,但它并没有显示在正确的坐标上,而是显示在标记上。
  4. 我对API很陌生,所以如果我这是一个简单的疏忽,我不会感到惊讶,但我看不出是什么原因造成的。这是我投影的代码,它只是将lat / lng线性映射到地图坐标:

    function EvenMapProjection() {
        var xPerLng = 512/360;
        var yPerLat = 512/180;
        this.fromLatLngToPoint = function(latlng) {
            var x = (latlng.lng()+180)*xPerLng;
            var y = (latlng.lat()+90)*yPerLat;
            console.log('Lng', latlng.lng(), 'Lat', latlng.lat(), '-> Point', x, y);
            return new google.maps.Point(x, y);
        };
        this.fromPointToLatLng = function(point) {
            var lat = point.y/yPerLat-90;
            var lng = point.x/xPerLng-180;
            console.log('Point', point.x, point.y, '-> Lng', lng, lat);
            return new google.maps.LatLng(lat, lng);
        };
    }
    

    我在没有投影的情况下尝试做的一个例子(使用默认的墨卡托投影):

    http://95.156.209.71/tmp/a.html

    与上面定义的投影相同的例子:

    http://95.156.209.71/tmp/b.html

    最后一个使用投影但没有GroundOverlay的例子,而只是使用平铺图像(总是相同的图像):

    http://95.156.209.71/tmp/c.html

    最后一个链接还显示LatLng(0,0)处的标记出现在缩放级别1(或更高),但不是0级。

    我是否只是缺少一些东西,或者是一些有缺陷的代码,或者这实际上是API中的一个问题?

1 个答案:

答案 0 :(得分:1)

我发现我的错误在于地面叠加的定义。我处于缩放级别0,这意味着我将叠加的边界设置为(-90,-180)到(90,180),但是API似乎有这些级别的问题,因为它们包装了经度,因此我很奇怪错误。我将其调整为1级以进行最小缩放,并将叠加层设置为(-45,-90)到(45,90),现在一切正常。