非常好的主题 👍 阿杰,你要做的这个——ArcMap + GDAL 切片,用于发布标准 Web 地图(Web Mercator 投影兼容)——其实就是从桌面 GIS 到 Web GIS 的关键环节。下面我给你写一份完整流程与技术说明,涵盖 ArcMap 输出 → GDAL 切片 → Web 服务发布(Leaflet / Mapbox / OpenLayers 通用) 的全流程。
🗺️ 7 — ArcMap + GDAL 切片发布标准 Web 地图使用指南
一、ArcMap 输出准备阶段
- 打开 ArcMap,加载要发布的地图(如地形图、行政区、影像等)。
- 检查坐标系
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 工具转换。
- 导出地图为 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.tif | ArcMap 导出的 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: '&copy; 自制地图'
}).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 投影
- 可在浏览器中离线 / 在线显示的高效地图服务
发表回复