我正在使用方程将地球上的地理点转换为像素坐标,如 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
现在,为了实现精确的鼠标交互,我正在尝试做相反的事情;将像素转换为纬度和经度。我已经设法反转第一个方程,因此 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 right 的偏方程:
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);
赞赏
最佳答案
@user3290797 找到了 cuplrit,我不得不将 atan2() 更改为 atan()。到目前为止,这效果很好:(顺便说一下,我在 P5js 中使用了它,所以这就是为什么数学函数看起来比应有的更简单)
function inverseWebMercX(x,zoom) {
var w = height / 2;
var a = (w / PI) * pow(2, zoom);
var b = x/a;
var lon = b-PI;
lon = degrees(lon);
return lon;
}
function inverseWebMercY(y,zoom) {
var w = height / 2;
var a = (w / PI) * pow(2, zoom);
var b = (y/a);
var c = exp(PI-b);
var lat = (atan(c) - (PI / 4))*2;
lat = degrees(lat);
return lat;
}
关于javascript - 反转 Web 墨卡托方程以将像素转换为纬度经度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47498309/