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

如何使用PostGIS函数将MVT几何转换回4326经纬度

将MVT瓦片几何坐标转换回WGS84(EPSG:4326)坐标系

要把MVT瓦片内的像素坐标(如POINT(1591 890))结合瓦片级别、行列号(8, 75, 96)转换回WGS84坐标系,需要反向还原ST_AsMvtGeom的转换逻辑,具体实现如下:

核心逻辑

  1. 获取目标瓦片在Web墨卡托(EPSG:3857)下的边界范围
  2. 将瓦片内的像素坐标映射到该边界范围内的实际3857坐标(注意MVT的Y轴向下递增,与3857的Y轴方向相反)
  3. 将3857坐标转换为WGS84(EPSG:4326)坐标

实现SQL

提供两种等价的实现方式:

方式一:直接计算坐标偏移

SELECT ST_AsText(
  ST_Transform(
    ST_SetSRID(
      ST_MakePoint(
        -- 计算X:瓦片左边界 + 像素X占extent的比例 × 瓦片宽度
        ST_X(ST_TileEnvelope(8, 75, 96)) + (1591 / 4096.0) * (ST_XMax(ST_TileEnvelope(8, 75, 96)) - ST_XMin(ST_TileEnvelope(8, 75, 96))),
        -- 计算Y:瓦片上边界 - 像素Y占extent的比例 × 瓦片高度(反转Y轴)
        ST_YMax(ST_TileEnvelope(8, 75, 96)) - (890 / 4096.0) * (ST_YMax(ST_TileEnvelope(8, 75, 96)) - ST_YMin(ST_TileEnvelope(8, 75, 96)))
      ),
      3857
    ),
    4326
  )
);

方式二:用ST_Scale和ST_Translate简化计算

SELECT ST_AsText(
  ST_Transform(
    ST_SetSRID(
      ST_Translate(
        ST_Scale(
          ST_GeomFromText('POINT(1591 890)'),
          (ST_XMax(env) - ST_XMin(env)) / 4096.0, -- X方向缩放比例
          -(ST_YMax(env) - ST_YMin(env)) / 4096.0 -- Y方向缩放并反转轴
        ),
        ST_XMin(env), -- X方向平移至瓦片左边界
        ST_YMax(env)  -- Y方向平移至瓦片上边界
      ),
      3857
    ),
    4326
  )
)
FROM (SELECT ST_TileEnvelope(8, 75, 96) AS env) AS tile_env;

注意事项

  • 执行结果会与原始值POINT(-73.985130 40.748817)存在细微差异,原因是原始转换为整数像素坐标时丢失了精度
  • 代码中的4096是ST_AsMvtGeom默认的extent值,若你转换时使用了自定义extent,需替换为对应数值

内容的提问来源于stack exchange,提问作者Yuri Astrakhan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 03:45:47