我计划为游戏的标记(图钉)构建一个在线地图,但我无法设置标记的正确纬度。
原始地图是 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
}
但是对于纬度它不起作用,因为那些引擎使用的是墨卡托投影而我没有。
如果某人有正确的配方,我们将不胜感激:(
答案 0 :(得分:1)
欢迎来到SO!
如果您使用的是Leaflet,则应指定地图选项crs
并使用L.CRS.Simple
:
一种简单的CRS,可将经度和纬度直接映射到
x
和y
。可用于平面地图(例如游戏地图)。请注意,y
轴仍应倒置(从下到上)。
这将避免Web Mercator投影,特别是纬度,这是你想出的特殊计算(参见链接的维基百科文章中的等式)。
然后,您可以正确地将x
和y
坐标映射到您的需要,特别是与您的地图图像相关。
例如,假设您将地图图像设置为:
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.
}