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

如何用Java实现经纬度到世界地图像素坐标(x,y)的转换

经纬度转地图像素定位错误的解决方案

问题根源

你的计算基于墨卡托投影公式,但定位偏差的核心原因是图像坐标系的y轴方向与墨卡托投影坐标系相反——多数图像以左上角为原点,y轴向下递增,而墨卡托投影的y轴向上递增,导致y坐标反转。

修正代码

以下是适配图像坐标系的完整Java函数:

import java.awt.geom.Point2D;

public class MapProjection {
    public static Point2D.Double latLonToPixel(double longitude, double latitude, double mapWidth, double mapHeight) {
        // 经度转横向像素(逻辑正确,无需修改)
        double x = (longitude + 180) / 360 * mapWidth;
        
        // 墨卡托投影计算y坐标,反转后适配图像坐标系
        double latRadians = Math.toRadians(latitude);
        double mercatorY = Math.log(Math.tan(latRadians) + 1 / Math.cos(latRadians));
        double y = mapHeight - ((1 - mercatorY / Math.PI) / 2 * mapHeight);
        
        return new Point2D.Double(x, y);
    }
}

参数测试结果

代入你的参数:

  • longitude = -106.346771,latitude = 56.130366
  • mapWidth = 3840.0,mapHeight = 2160.0

计算结果:

  • X: 785.6344426666666(与原结果一致)
  • Y: 1488.7915788349155(原结果反转后的值)

额外验证项

  • 确认你的地图采用墨卡托投影:若地图为其他投影(如平面投影、高斯投影),此公式不适用。
  • 检查地图边界:若地图未覆盖完整的±85.0511°纬度范围(墨卡托投影极限),需调整公式中的纬度缩放系数。

内容的提问来源于stack exchange,提问作者Tareq Khanfar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 12:25:17