You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Leaflet中经纬度(lat、lng)转游戏坐标的实现求助

经纬度转游戏坐标的反向实现方案

原转换函数采用线性映射逻辑,通过拆解原公式并反向推导,即可实现经纬度到游戏坐标的转换。

原函数核心逻辑拆解

convertToMap的本质是两组独立的线性转换:

  • 游戏X坐标 → 经度(lng)
  • 游戏Y坐标 → 纬度(lat)

整理后的核心公式(变量完全对应原函数):

lng = r.lng + (gameX - game_1_x) * (r.lng - o.lng) / (game_1_x - game_2_x)
lat = r.lat + (gameY - game_1_y) * (r.lat - o.lat) / (game_1_y - game_2_y)

其中:

  • r = Map.unproject([0, 0], 0)
  • o = Map.unproject([i/2, n - tileSize], 0)(i=2*tileSize,n=3*tileSize)

反向转换公式推导

对上述公式变形,解出gameX和gameY:

gameX = game_1_x + (lng - r.lng) * (game_1_x - game_2_x) / (r.lng - o.lng)
gameY = game_1_y + (lat - r.lat) * (game_1_y - game_2_y) / (r.lat - o.lat)

最终实现代码

基于推导结果写出反向转换函数:

game_1_x = -4230,
game_1_y = 8420,
game_2_x = 370,
game_2_y = -640;
CurrentLayer.options.tileSize = 1024

function convertToGame(lat, lng) {
    const tileSize = CurrentLayer.options.tileSize;
    const n = 3 * tileSize;
    const i = 2 * tileSize;
    const r = Map.unproject([0, 0], 0);
    const o = Map.unproject([i / 2, n - tileSize], 0);
    
    // 计算游戏X坐标
    const gameX = game_1_x + (lng - r.lng) * (game_1_x - game_2_x) / (r.lng - o.lng);
    // 计算游戏Y坐标
    const gameY = game_1_y + (lat - r.lat) * (game_1_y - game_2_y) / (r.lat - o.lat);
    
    return { x: gameX, y: gameY };
}

// 验证:代入原函数输出值,应得到输入(0,0)
convertToGame(-1903.3289183222957, 941.6347826086957); // 预期输出接近{x: 0, y: 0}(浮点数精度误差可忽略)

内容的提问来源于stack exchange,提问作者Staffan Löwgren

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 21:15:47