我正在使用等式将地球上的地理点转换为像素坐标,如Daniel Shiffman的教程中所述:https://gist.github.com/shiffman/a0d2fde31f571163c730ba0da4a01c82
那是:
function webMercX(lon, zoom) {
lon = radians(lon);
var w = 256; //width / 2;
var a = (w / PI) * pow(2, zoom);
var b = (lon + PI);
var x = a * b;
return x;
}
function webMercY(lat, zoom) {
lat = radians(lat);
var w = 256; //height / 2;
var a = (w / PI) * pow(2, zoom);
var c = tan(PI / 4 + lat / 2);
var b = PI - log(c);
var y = a * b;
return y;
}
基于:https://en.wikipedia.org/wiki/Web_Mercator
现在,为了实现准确的鼠标互动,我试图做相反的事情;将像素转换为Lat和Lon。我设法颠倒了第一个等式,所以x到lon效果很好:
function inverseWebMercX(x,zoom) {
var w = 256; //width / 2;
var a = (w / PI) * pow(2, zoom);
var b = x/a;
var lon = b-PI;
lon = degrees(lon);
return lon;
}
可以通过
进行测试inverseWebMercX(webMercX(10,2),2);
但到目前为止我还没有将y转换为lat,可能是因为我没有解决var c和var lat右边的偏微分方程:
function inverseWebMercY(y,zoom) {
var w = 256; //width / 2;
var a = (w / PI) * pow(2, zoom);
var b = y/a;
var c = -(exp(b) + PI);
var lat = (atan2(c) - (PI / 4))*2;
lat = degrees(lat);
return lat;
}
所以,简单地说,也许有更好数学背景的人知道如何分别为lat和c解决这些方程:
var c = tan(PI / 4 + lat / 2);
var b = PI - log(c);
赞赏