Web上的Equirectangular地图

时间:2016-08-17 15:59:52

标签: javascript dictionary leaflet formula mercator

我计划为游戏的标记(图钉)构建一个在线地图,但我无法设置标记的正确纬度。

原始地图是 2048 * 2048px的平方

然后我得到了标记(数千)

使用0到100的x,y表示法设置地图坐标。 0,0是左上角角,100,100是地图的右下角角。 x = 50,y = 50是lat = 0°,lng = 0°(图片的中心)。

要从我的符号转换为经度我使用这个JS函数,它运作良好:

        function longitude(x)
        {
            var lng = 0
            if (x < 50) // Negative Longitude (West)
            {
                lng = (x - 50) / 50 * 180;
            }
            else // Positive Longitude (East)
            {
                lng = (50 - x) / 50 * 180;
            }
            return lng
        }

但是对于纬度它不起作用,因为那些引擎使用的是墨卡托投影而我没有。

如果某人有正确的配方,我们将不胜感激:(

1 个答案:

答案 0 :(得分:1)

欢迎来到SO!

如果您使用的是Leaflet,则应指定地图选项crs并使用L.CRS.Simple

  

一种简单的CRS,可将经度和纬度直接映射到xy。可用于平面地图(例如游戏地图)。请注意,y轴仍应倒置(从下到上)。

这将避免Web Mercator投影,特别是纬度,这是你想出的特殊计算(参见链接的维基百科文章中的等式)。

然后,您可以正确地将xy坐标映射到您的需要,特别是与您的地图图像相关。

例如,假设您将地图图像设置为:

L.imageOverlay("imageUrl", [[0, 0], [256, 256]]).addTo(map);

(因此它适合相当于缩放级别0的1个图块)

然后你可以进行如下转换:

function longitude(x) {
  return x / 100 * 256;
}

function latitude(y) {
  return 256 - y / 100 * 256; // Still need to revert y.
}