如何让gdal2tiles切片时Y轴从图像顶部起始适配Leaflet?
解决Leaflet与gdal2Tiles切片Y轴方向不一致的问题
方案1:预处理图片(最直观,适合新手)
先把你的9000*6000 PNG垂直翻转,再用gdal2Tiles切片:
- 用ImageMagick的话,执行命令:
convert test2.png -flip test2_flipped.png - 或者用Photoshop:打开图片,选择「图像」→「图像旋转」→「垂直翻转画布」,保存成新的PNG
然后用翻转后的图片重新执行你的切片命令:gdal2Tiles.py -p raster -z 3-7 -w none test2_flipped.png
这样生成的切片Y轴起始方向就和Leaflet一致,加载后地图显示正常。
方案2:用gdal2Tiles参数直接调整(不用改图片)
不用翻转图片,给gdal2Tiles加坐标系参数强制翻转Y轴,执行这条命令:gdal2Tiles.py -p raster -z 3-7 -w none -s_SRS EPSG:4326 -t_SRS "+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs +axis=enu" test2.png
原理是通过自定义目标坐标系(+axis=enu)把Y轴方向反转,让切片的Y轴从顶部开始,和Leaflet匹配。
方案3:修改Leaflet代码适配现有切片(不用重新生成切片)
如果不想重新切片,可以在Leaflet里自定义CRS,翻转Y轴:
var flippedCRS = L.CRS.Simple.extend({ transformation: new L.Transformation(1, 0, -1, 6000) }); var map = L.map('map', { crs: flippedCRS, minZoom: 3, maxZoom: 7 }); L.tileLayer('tiles/{z}/{x}/{y}.png').addTo(map); map.setView([0, 0], 3);
这里的6000是你原图的高度,修改成你的实际图片高度即可。这个方法让Leaflet加载原有切片时自动翻转Y轴,显示正确的地图。
内容的提问来源于stack exchange,提问作者sanyanl
相关产品推荐
相关产品推荐

