Cesium加载.tif文件(记录一次失败的尝试)

325 阅读2分钟

我拿到了一个.tif文件,据说是底质数据,是一个图层,要在Cesium中展示出来。搜了一下,找到了一个库:TIFFImageryProvider,它能在Cesium中加载tif文件并将其作为影像图层(imageryLayers)加载到Cesium中。

于是我按照这个库的文档说明去做,运行时报错说我这个tif文件的坐标系是EPSG:4490,与Cesium三维坐标系(EPSG:4326)不一致,这个库的文档中也提了一下坐标系不一致的解决方案:

image.png

文档中提到可以用proj4这个库来转换坐标系,我了解了一下,proj4是可以转换坐标系,但是更多的是针对“点”的转换,我的tif文件大约有65MB,这应该处理不了吧(没有进一步了解)。

所以我觉得应该先将原文件(假设是4490.tif),经坐标转换,输出目标文件(假设是4326.tif),然后再由TIFFImageryProvider加载到Cesium中。问了一下AI,说是 gdal 可以做这个转换。

一提到gdal我就有点烦,之前遇到的需求(编译CTB:Cesium Terrain Builder)要用到gdal,当时尝试安装它,涉及到安装CMake、MinGW、OSGeo4W等等乱七八糟的,最后耽误了很长时间也没成功。做Web开发很少接触这些,所以不懂。后来直接在docker里用CTB,就不用编译了,也就用不到gdal这些工具库了。

但是现在确实要用gdal实现文件中坐标系的转换,那么有没有docker版的gdal呢?有的,兄弟,像这样的镜像有9个

image.png

  1. 拉取镜像:docker pull ghcr.io/osgeo/gdal:alpine-small-latest
  2. 运行容器并挂载tif文件:docker run -it --name gdal -v C:/path/to/4490.tif:/data/4490.tif ghcr.io/osgeo/gdal:alpine-small-latest /bin/bash
  3. 进入data目录,使用gdal进行坐标转换:gdalwarp -s_srs EPSG:4490 -t_srs EPSG:4326 4490.tif 4326.tif
  4. 退出docker容器:exit
  5. 将输出的文件(即4326.tif)复制到本地:docker cp gdal:/data/4326.tif .

这时候我在本地查看这个4326.tif,显示文件已损坏,将其加载到Cesium中:

image.png

失去了色彩,源文件是彩色的,可能是gdal转换得不对。