1

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

  1. 在缩放级别 0 处根本不显示任何叠加层。
  2. 在缩放级别 1 和更高级别时,标记会显示,但 GroundOverlays 仍然没有。
  3. 但是,如果我从任何级别缩小,我可以让 GroundOverlays 非常短暂地显示出来。它只会在缩小时显示并立即再次消失。此外,虽然它确实很快出现,但它并没有出现在正确的坐标上,但标记却出现了。

我对 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

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

有什么我只是缺少的东西,或者一些错误的代码,还是这实际上是 API 中的问题?

4

1 回答 1

1

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

于 2013-02-28T19:47:13.263 回答