我想使用 Google Maps API 浏览单个图像,我已为其定义了自己的投影。我想使用 GroundOverlay 而不是多个图像图 block ,因为我只有一张小分辨率图像,但我希望它仍然可以缩放。但是,在尝试使用此投影时,我遇到了一些不稳定的行为:
- 在缩放级别 0 时根本不显示叠加层。
- 在缩放级别 1 及更高级别时,标记会显示,但 GroundOverlay 仍然不会显示。
- 但是,如果我从任何级别缩小,我都可以让 GroundOverlays 显示非常短暂。它只会在缩小时显示并立即再次消失。另外,虽然它确实很快就会出现,但它不会出现在正确的坐标处,但标记会出现。
我对 API 相当陌生,所以如果这是我的一个简单疏忽,我不会感到惊讶,但我只是看不出是什么导致了这种情况。这是我的投影的代码,它只是将纬度/经度线性映射到 map 坐标:
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 中的问题?
最佳答案
我刚刚发现我的错误在于地面覆盖层的定义。我当时处于缩放级别 0,这意味着我将覆盖范围设置为从 (-90,-180) 到 (90,180),但 API 似乎对这些级别有问题,因为它们包含经度,因此我感到很奇怪错误。我将其调整为最小缩放级别 1,并将叠加层从 (-45,-90) 设置为 (45,90),现在一切正常。
关于javascript - 自定义投影的不稳定叠加行为,Google Maps API v3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15052324/