Javascript 从球面投影地图上的纬度获取Y位置

Javascript 从球面投影地图上的纬度获取Y位置,javascript,maps,latitude-longitude,Javascript,Maps,Latitude Longitude,在Javascript中 我有一张1024x1024px的世界地图,它是一个球形墨卡托投影 我想把这张地图的长/纬度转换成x,y。我有一堆坐标需要叠加在上面 计算经度非常简单,我就是这样做的: pos.x = ((long + 180)/ 360) * 1024; 我只需要为lat-->y设置相同的值 我环顾四周,看到了很多对openlayers的引用,但没有看到这样的转换。你可以在这篇维基百科文章中找到相应的公式:。简单来说: var mercator = function(lat, lng

在Javascript中

我有一张1024x1024px的世界地图,它是一个球形墨卡托投影

我想把这张地图的长/纬度转换成x,y。我有一堆坐标需要叠加在上面

计算经度非常简单,我就是这样做的:

pos.x = ((long + 180)/ 360) * 1024;
我只需要为lat-->y设置相同的值


我环顾四周,看到了很多对openlayers的引用,但没有看到这样的转换。

你可以在这篇维基百科文章中找到相应的公式:。

简单来说:

var mercator = function(lat, lng) {
  return [lng, Math.log( (Math.sin(lat) + 1.0) / Math.cos(lat)) ] ;
};

Lat和long当然必须用弧度表示。

所以我尝试了这个。。。但这似乎不起作用。我得到的未定义值高于/低于60º
pos.y=Math.log(Math.tan((Math.PI/4)+(lat/2))
tan()
要求参数以弧度为单位。请将你的角度乘以PI/180来进行相应的转换。以前不这样做会让你觉得有点愚蠢,但它仍然不起作用-90是一个无限的测量。90给出了37.33
pos.y=Math.log(Math.tan((Math.PI/4)+(lat*(Math.PI/180))/2)@Adam是的,这是墨卡托的不幸财产之一。谢谢!如果有人需要它,这里就是
pos.y=((Math.log((Math.sin(lat)+1.0)/Math.cos(lat))+(Math.PI))/(2*Math.PI)*1024
上面需要的是弧度而不是度