如何制作阿尔伯斯/等距圆锥投影栅格瓦片?QGIS尝试失败求方案
制作非墨卡托投影瓦片并在Leaflet中通过Proj4Leaflet展示的方法
一、QGIS生成非墨卡托瓦片的正确流程
之前用QGIS失败大概率是关键步骤没踩对,按下面的流程来:
- 先转换数据源投影:如果你的数据源是其他投影(比如WGS84),用QGIS的「重新投影图层」工具(菜单栏
矢量/栅格 → 投影 → 重新投影图层)转成你需要的非墨卡托投影(比如UTM、高斯-克吕格等)。 - 打开瓦片导出工具:菜单栏选
项目 → 导出 → 导出瓦片。 - 核心配置项:
- 瓦片坐标系:必须选择目标非墨卡托投影,别用默认的Web墨卡托(EPSG:3857)。
- 缩放级别:根据数据范围和精度设置,小范围高精度可以多设几级,大范围则减少级别避免生成时间过长。
- 输出目录:选一个空文件夹,QGIS会按
z/x/y层级生成瓦片(少数投影可能是z/y/x结构,记好这个规则)。 - 勾选「覆盖现有瓦片」,防止旧瓦片干扰新导出结果。
- 导出后检查文件夹结构,确认每个缩放级的瓦片都生成完整。
二、用Proj4Leaflet加载瓦片到Leaflet
1. 准备依赖
确保页面本地引入三个库:Leaflet、Proj4.js、Proj4Leaflet(直接用本地文件,无需CDN)。
2. 定义自定义投影
用Proj4字符串定义目标投影,以UTM 50N(EPSG:32650)为例:
// 替换成你需要的投影参数 var customCRS = new L.Proj.CRS('EPSG:32650', '+proj=utm +zone=50 +datum=WGS84 +units=m +no_defs', { // 分辨率数组:单位米/像素,必须和QGIS导出时的分辨率一一对应 resolutions: [8192, 4096, 2048, 1024, 512, 256, 128, 64, 32, 16, 8, 4, 2, 1], // 投影原点:可先使用Web墨卡托原点测试,再根据实际范围调整 origin: [-20037508.342789244, 20037508.342789244] } );
注:投影参数需对应EPSG代码的官方定义,确保字符串完全正确。
3. 创建地图实例
初始化Leaflet地图时指定自定义CRS:
var map = L.map('map', { crs: customCRS, continuousWorld: true, // 非墨卡托投影必须开启,避免地图重复显示 worldCopyJump: false }).setView([30, 120], 5); // 替换成你的数据中心坐标和初始缩放级
4. 添加瓦片图层
根据QGIS导出的瓦片结构设置路径:
L.tileLayer('tiles/{z}/{x}/{y}.png', { // 若为z/y/x结构则改成{z}/{y}/{x}.png maxZoom: 13, // 和QGIS导出的最大缩放级保持一致 minZoom: 0, attribution: '自定义瓦片' }).addTo(map);
常见问题排查
- 瓦片偏移:检查数据源是否正确转成目标投影,或分辨率数组与QGIS导出的不匹配。
- 地图不显示:检查瓦片路径是否正确、投影参数是否写错,或缩放级超出了导出范围。
内容的提问来源于stack exchange,提问作者Nikolay Zolotov
相关产品推荐
相关产品推荐

