cesium加载.tif格式文件

文章介绍了如何在项目中利用geotiff库从URL加载tif文件,获取地理坐标信息,然后将图像数据渲染到canvas,并集成到Cesium地图中,实现地图上的显示。
摘要由CSDN通过智能技术生成

最近项目中有需要直接加载三方给的后缀名tif格式的文件


    <script src="https://cdn.jsdelivr.net/npm/geotiff"></script>
或者
yarn add geotiff
npm install geotiff

新建tifs.js

import GeoTIFF, { fromBlob, fromUrl, fromArrayBuffer } from 'geotiff';
import GeoTIFFImage from 'geotiff/dist-node/geotiffimage';
var tiff;
var image;
var rectangle;
class GeoTiffUtil {
  constructor() {
  }
   async init(){
     this.tiff = await fromUrl('http://xxxx.tif');
    this.image = await this.tiff.getImage();
    let [west, south, east, north] = this.image.getBoundingBox();
    const code =
      this.image.geoKeys.ProjectedCSTypeGeoKey ||
      this.image.geoKeys.GeographicTypeGeoKey;

        let { x: w, y: n } = await (
       await fetch(
         `//epsgIo/trans?x=${west}&y=${north}&s_srs=${code}&t_srs=4326`
       )
     ).json();
     let { x: e, y: s } = await (
       await fetch(
         `//epsgIo/trans?x=${east}&y=${south}&s_srs=${code}&t_srs=4326`
       )
      ).json();
      const [red = [], green = [], blue = []] = await this.image.readRasters();
      // 将像素信息写入canvas
      const canvas = document.createElement("canvas");
      let width = this.image.getWidth();
      let height = this.image.getHeight();
      canvas.width = width;
      canvas.height = height;
      let ctx = canvas.getContext("2d");
      let imageData = ctx.createImageData(width, height);
      for (var i = 0; i < imageData.data.length / 4; i += 1) {
          imageData.data[i * 4 + 0] = red[i];
          imageData.data[i * 4 + 1] = green[i] || 0;
          imageData.data[i * 4 + 2] = blue[i] || 0;
          imageData.data[i * 4 + 3] = red[i] === 0 ? 0 : 255;
      }

      ctx.putImageData(imageData, 0, 0);

      return {canvas:canvas,rectangle:[w, s, e, n]};
  }
}
export default new GeoTiffUtil();

index.vue

 import GeoTiffUtil from '@/utils/tifs.js';     
 GeoTiffUtil.init().then((res)=>{
      let rectangle = Cesium.Rectangle.fromDegrees(res.rectangle[0], res.rectangle[1],             
      res.rectangle[2],res.rectangle[3]);
        let du = res.canvas.toDataURL();
        viewer.imageryLayers.addImageryProvider(
          new Cesium.SingleTileImageryProvider({
            url: du,
            rectangle,
          })
        );

        viewer.camera.setView({
          destination: rectangle,
        });
  })

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
要在Cesium加载.ige格式的影像数据,需要进行以下步骤: 1. 安装 IgeFormatTerrainProvider 插件 需要先安装 IgeFormatTerrainProvider 插件才能加载.ige格式的影像数据。可以在Cesium的GitHub页面下载该插件,也可以使用npm进行安装: ``` npm install cesium-ige-format-terrain-provider ``` 2. 加载.ige格式的影像数据 加载.ige格式的影像数据需要使用 IgeFormatTerrainProvider 提供的接口。示例代码如下: ```javascript var viewer = new Cesium.Viewer('cesiumContainer'); var igeUrl = 'path/to/your.ige'; // ige文件路径 var terrainProvider = new Cesium.IgeFormatTerrainProvider({ url: igeUrl }); viewer.terrainProvider = terrainProvider; ``` 3. 设置地形高度范围 由于.ige格式的影像数据不包含地形的高度信息,因此需要手动设置地形高度范围。可以使用 `viewer.scene.globe.depthTestAgainstTerrain = true` 来开启地形深度测试,以确保模型显示在地形之上。 ```javascript viewer.scene.globe.depthTestAgainstTerrain = true; viewer.scene.globe.maximumScreenSpaceError = 1; viewer.scene.globe.tileCacheSize = 1000; viewer.scene.globe.tileCacheSizeMax = 2000; ``` 4. 调整地形细节 可以通过调整 `maximumScreenSpaceError` 和 `tileCacheSize` 参数来控制地形的细节和性能。其中 `maximumScreenSpaceError` 控制地形细节的大小,值越小地形细节越高,但性能也会降低。`tileCacheSize` 控制地形缓存的大小,可以根据需求进行调整。 ```javascript viewer.scene.globe.maximumScreenSpaceError = 1; viewer.scene.globe.tileCacheSize = 1000; viewer.scene.globe.tileCacheSizeMax = 2000; ``` 以上就是在Cesium加载.ige格式的影像数据的步骤。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值