非常好的主题 👍 阿杰,你要做的这个——ArcMap + GDAL 切片,用于发布标准 Web 地图(Web Mercator 投影兼容)——其实就是从桌面 GIS 到 Web GIS 的关键环节。下面我给你写一份完整流程与技术说明,涵盖 ArcMap 输出 → GDAL 切片 → Web 服务发布(Leaflet / Mapbox / OpenLayers 通用) 的全流程。


🗺️ 7 — ArcMap + GDAL 切片发布标准 Web 地图使用指南

一、ArcMap 输出准备阶段

  1. 打开 ArcMap,加载要发布的地图(如地形图、行政区、影像等)。
  2. 检查坐标系
    Web 地图(Google、OpenStreetMap、Mapbox、ArcGIS Online)使用的坐标系为: WGS_1984_Web_Mercator_Auxiliary_Sphere (EPSG:3857) 在 ArcMap 中:
    • 右键图层 → Properties → Coordinate System → 选择 “Projected Coordinate Systems → World → WGS_1984_Web_Mercator_Auxiliary_Sphere”。
    • 若原数据为经纬度(EPSG:4326),可使用 Project 工具转换。
  3. 导出地图为 GeoTIFF
    • 菜单栏 → File → Export Map → 格式选 “TIFF”。
    • 勾选 “Write World File” 以生成 .tfw
    • 或直接在 Data Frame Properties → Export 中选择高分辨率输出。
    • 推荐设置:DPI 300~600。

二、使用 GDAL 切片(gdal2tiles.py)

GDAL 自带的 gdal2tiles.py 是标准的 Web 地图切片工具,兼容所有主流前端地图框架。

1️⃣ 安装 GDAL(Windows / Linux)

pip install GDAL
# 或在conda环境中
conda install -c conda-forge gdal

验证:

gdalinfo --version

2️⃣ 生成切片命令

gdal2tiles.py -z 0-18 -r bilinear -w none \
  -s EPSG:3857 \
  input_map.tif output_tiles/

参数说明:

参数含义
-z 0-18缩放级别(0~18 对应世界到街道级)
-r bilinear重采样算法(bilinear 推荐)
-w none不生成 Google Earth KML,只输出 Web tiles
-s EPSG:3857坐标系
input_map.tifArcMap 导出的 GeoTIFF
output_tiles/输出的切片文件夹

输出目录结构为标准 XYZ 瓦片形式:

output_tiles/
 ├── 0/
 ├── 1/
 ├── ...
 └── 18/
     ├── 234/
     │    └── 567.png


三、前端地图加载(Leaflet / OpenLayers / Mapbox)

🌿 Leaflet 示例

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8" />
  <title>GDAL 切片地图</title>
  <link rel="stylesheet" href="https://unpkg.com/leaflet/dist/leaflet.css"/>
  <script src="https://unpkg.com/leaflet/dist/leaflet.js"></script>
</head>
<body>
  <div id="map" style="width:100%;height:100vh;"></div>
  <script>
    var map = L.map('map', {
      center: [30.5, 114.3], // 初始中心点
      zoom: 8
    });

    // 加载切片
    L.tileLayer('./output_tiles/{z}/{x}/{y}.png', {
      minZoom: 0,
      maxZoom: 18,
      tms: false,   // 若 gdal2tiles 用了 --tms-compatible,则此处设为 true
      attribution: '© 自制地图'
    }).addTo(map);
  </script>
</body>
</html>

打开本地 index.html 即可看到地图。


四、Web 服务器发布方式

将切片目录上传到任意 Web 服务器(如 Nginx、Apache、或 GitHub Pages),即可通过 URL 访问。

例如 Nginx 配置:

location /tiles/ {
    alias /var/www/html/output_tiles/;
    autoindex on;
}

然后在前端使用:

L.tileLayer('http://yourserver.com/tiles/{z}/{x}/{y}.png')


五、进阶建议

目标方法
生成更高效的在线服务使用 gdal2tiles_parallel.py(并行切片)
合并多个图层先在 ArcMap 中使用 Data Frame → Export as Raster
发布为 WMTS 服务可用 GeoServer 读取该切片目录
自动投影转换gdalwarp -t_srs EPSG:3857 input.tif output_3857.tif
若需 GeoJSON 覆盖可配合 ogr2ogr 转换矢量数据

✅ 最终效果

你将获得一个:

  • 兼容所有 Web 地图框架的标准 XYZ 瓦片集
  • 支持 Web Mercator 投影
  • 可在浏览器中离线 / 在线显示的高效地图服务