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

如何匹配经纬度与Google Maps瓦片x/y坐标以正确叠加图片

问题根源

你遇到的坐标不匹配问题核心是没有将目标经纬度转换为Google Maps规范的Web墨卡托瓦片坐标,或是瓦片切割时用了和Google Maps不兼容的坐标规范。

解决步骤

1. 先计算目标位置对应的瓦片坐标

首先确认你要叠加的图片的边界经纬度:左上角经纬度(lng1, lat1)、右下角经纬度(lng2, lat2),再按下方公式计算指定缩放级别z下的瓦片坐标范围:

// 经纬度转Google Maps瓦片坐标公式
function lngLatToTile(lng, lat, z) {
  const tileCount = 2 ** z;
  const x = Math.floor((lng + 180) / 360 * tileCount);
  const latRad = lat * Math.PI / 180;
  const y = Math.floor((1 - Math.log(Math.tan(latRad) + 1 / Math.cos(latRad)) / Math.PI) / 2 * tileCount);
  return {x, y};
}

以你用的z=18为例,调用该方法得到左上角瓦片坐标(x1, y1)、右下角瓦片坐标(x2, y2),你切割原始图片生成瓦片时,就需要按这个x、y范围来命名文件,才能和Google Maps请求的coord.x、coord.y对应。

2. 检查Y坐标是否需要反转

如果你是用GDAL、gdal2tiles等开源工具切割的瓦片,默认生成的是TMS规范的瓦片,它的Y坐标和Google Maps的Y坐标是反向的,需要在请求时做转换,修改你的代码如下:

const TILE_URL = 'xyz.com/orthoImage_{z}_{x}_{y}.png';

const imageMapType = new google.maps.ImageMapType({
    getTileUrl: function (coord, zoom) {
        // 如果是TMS规范瓦片,反转Y坐标
        const tmsY = (2 ** zoom - 1) - coord.y;
        return TILE_URL
            .replace('{z}', zoom)
            .replace('{x}', coord.x)
            .replace('{y}', tmsY);
    },
    tileSize: new google.maps.Size(256, 256),
    minZoom: 1,
    maxZoom: 20
});

可选简化方案:单张图片无需切瓦片

如果你的叠加图片不需要支持多缩放级别的瓦片加载,直接用GroundOverlay方案更简单,不需要做坐标转换,直接传入图片的边界经纬度即可:

const imageBounds = {
  north: 你的图片最北端纬度,
  south: 你的图片最南端纬度,
  east: 你的图片最东端经度,
  west: 你的图片最西端经度
};
new google.maps.GroundOverlay(
  '你的单张图片完整url',
  imageBounds,
  {map: map}
);

内容的提问来源于stack exchange,提问作者Aakash Govardhane

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 18:15:04