Leaflet.js 用户脚本,无法从坐标转换为经纬度
Leaflet.js userscript, trouble converting from coords to lat-long
我正在尝试创建一个用户脚本来扩展 Leaflet.js
在线游戏应用的功能:https://dayz.ginfo.gg/chernarusplus/#c=-12;-156;1
我在创建将坐标转换为 leaflet.js
使用的 lat/long 值的函数时遇到问题。
地图本身为 15,360 x 15,360 米(从游戏角度来看)。我已经使用 leaflet.js
lat/long 值通过实验确定了地图的 width/height。
下面的代码在所有 4 个角和中心创建一个圆。
// Top right corner: [83.81, 167.2]
// Bottom left corner: [-88.81, -180]
// Lat/long "height/width" of the map
var b = {x: 86.31, y: 173.6};
// Centre of the map (lat/long)
var h = {x: -2.5, y: -6.4};
L.circleMarker([h.x + b.x, h.y + b.y], {radius: 10}).addTo(iZurvive._map);
L.circleMarker([h.x + b.x, h.y - b.y], {radius: 10}).addTo(iZurvive._map);
L.circleMarker([h.x - b.x, h.y + b.y], {radius: 10}).addTo(iZurvive._map);
L.circleMarker([h.x - b.x, h.y - b.y], {radius: 10}).addTo(iZurvive._map);
L.circleMarker([h.x, h.y], {radius: 10}).addTo(iZurvive._map);
当我尝试创建一个函数将游戏位置(x/y 坐标以米为单位)转换为 leaflet.js
使用的 lat/long 值时,我没有得到正确的位置.我通过尝试在中心和左下角之间的中间画一个圆来进一步测试它,但这也被抵消了;下面的代码
// Should be halfway between centre and bottom left corner, but it isn't
L.circleMarker([h.x - (b.x / 2), h.y - (b.y / 2)], {radius: 10}).addTo(iZurvive._map);
此图显示了中圈的位置(红色标记):
我的游戏坐标和 leaflet.js
lat/long 之间的转换函数如下,尽管测试它产生的结果有相当大的偏移:
const MAP_SIZE = 15360;
function circle(_x, _y) {
var scale = {x: MAP_SIZE / (b.x * 2), y: MAP_SIZE / (b.y * 2)};
var coords = {x: _x / scale.y, y: _y / scale.y};
L.circleMarker([h.x - b.x + coords.x, h.y - b.y + coords.y], {radius: 10}).addTo(iZurvive._map);
}
// Should be bottom left of the map but is moreso left centre
circle(4420, 2840);
已使用 L.LocUtil.pointToCoords
函数和存储在 leaflet.js
应用程序的全局变量中的缩放值进行了修复。
以下代码正确地将标记放置在提供的 x、y(例如 1000、1000)坐标处:
var t = L.LocUtil.pointToCoords({x: 1000, y: 1000}, iZurvive._locSearch.options.scalingParams)
L.circleMarker(t, {radius: 10}).addTo(iZurvive._map);
我正在尝试创建一个用户脚本来扩展 Leaflet.js
在线游戏应用的功能:https://dayz.ginfo.gg/chernarusplus/#c=-12;-156;1
我在创建将坐标转换为 leaflet.js
使用的 lat/long 值的函数时遇到问题。
地图本身为 15,360 x 15,360 米(从游戏角度来看)。我已经使用 leaflet.js
lat/long 值通过实验确定了地图的 width/height。
下面的代码在所有 4 个角和中心创建一个圆。
// Top right corner: [83.81, 167.2]
// Bottom left corner: [-88.81, -180]
// Lat/long "height/width" of the map
var b = {x: 86.31, y: 173.6};
// Centre of the map (lat/long)
var h = {x: -2.5, y: -6.4};
L.circleMarker([h.x + b.x, h.y + b.y], {radius: 10}).addTo(iZurvive._map);
L.circleMarker([h.x + b.x, h.y - b.y], {radius: 10}).addTo(iZurvive._map);
L.circleMarker([h.x - b.x, h.y + b.y], {radius: 10}).addTo(iZurvive._map);
L.circleMarker([h.x - b.x, h.y - b.y], {radius: 10}).addTo(iZurvive._map);
L.circleMarker([h.x, h.y], {radius: 10}).addTo(iZurvive._map);
当我尝试创建一个函数将游戏位置(x/y 坐标以米为单位)转换为 leaflet.js
使用的 lat/long 值时,我没有得到正确的位置.我通过尝试在中心和左下角之间的中间画一个圆来进一步测试它,但这也被抵消了;下面的代码
// Should be halfway between centre and bottom left corner, but it isn't
L.circleMarker([h.x - (b.x / 2), h.y - (b.y / 2)], {radius: 10}).addTo(iZurvive._map);
此图显示了中圈的位置(红色标记):
我的游戏坐标和 leaflet.js
lat/long 之间的转换函数如下,尽管测试它产生的结果有相当大的偏移:
const MAP_SIZE = 15360;
function circle(_x, _y) {
var scale = {x: MAP_SIZE / (b.x * 2), y: MAP_SIZE / (b.y * 2)};
var coords = {x: _x / scale.y, y: _y / scale.y};
L.circleMarker([h.x - b.x + coords.x, h.y - b.y + coords.y], {radius: 10}).addTo(iZurvive._map);
}
// Should be bottom left of the map but is moreso left centre
circle(4420, 2840);
已使用 L.LocUtil.pointToCoords
函数和存储在 leaflet.js
应用程序的全局变量中的缩放值进行了修复。
以下代码正确地将标记放置在提供的 x、y(例如 1000、1000)坐标处:
var t = L.LocUtil.pointToCoords({x: 1000, y: 1000}, iZurvive._locSearch.options.scalingParams)
L.circleMarker(t, {radius: 10}).addTo(iZurvive._map);