我想使用Google Maps API浏览单个图片,我已经定义了自己的投影。我想使用GroundOverlay而不是几个图像图块,因为我只有一个小分辨率图像,但我希望它仍然是可缩放的。但是,在尝试使用此预测时,我会遇到一些不稳定的行为:
我对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中的一个问题?
答案 0 :(得分:1)
我发现我的错误在于地面叠加的定义。我处于缩放级别0,这意味着我将叠加的边界设置为(-90,-180)到(90,180),但是API似乎有这些级别的问题,因为它们包装了经度,因此我很奇怪错误。我将其调整为1级以进行最小缩放,并将叠加层设置为(-45,-90)到(45,90),现在一切正常。