我想使用 Google Maps API 浏览单个图像,为此我定义了自己的投影。我想使用 GroundOverlay 而不是几个图像图块,因为我只有一个小分辨率图像,但我希望它仍然是可缩放的。但是,在尝试使用此投影时,我会遇到一些不稳定的行为:
- 在缩放级别 0 处根本不显示任何叠加层。
- 在缩放级别 1 和更高级别时,标记会显示,但 GroundOverlays 仍然没有。
- 但是,如果我从任何级别缩小,我可以让 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
最后一个链接还显示 LatLng(0, 0) 处的标记出现在缩放级别 1(或更高),但不在级别 0。
有什么我只是缺少的东西,或者一些错误的代码,还是这实际上是 API 中的问题?