cesium之地形数据

2,049 阅读2分钟

之前在研究cesium时,没来得及记录下些,总觉得念着念着,于是又去翻了一下笔记,总结一下。

cesium

  1. 加载地图数据: createTileMapServiceImageryProvider——需有服务器

地形数据

  1. Terrain 效果:cesium 地形数据显示, 需要转化方可适用,网上数据转换多为ArcGIS Toolbox工具转换格式,本实践使用CesiumLab工具:Cesiumlab是一款专为Cesium开源数字地球平台打造的免费数据处理工具集。目前包含 地形数据处理、影像数据处理、点云数据处理、数据下载、建筑物矢量面处理、倾斜数据处理、三维场景(max,maya)处理、BIM数据(revit,ifc)处理等工具。 参考:liubf.com/2018/11/03/…

  2. 数据引入: 使用UrlTemplateImageryProvider,

3维数据显示

前提:

条件:

  1. 底层图像作为影像(全能地图下载器),
  2. 处理好的高程数据.terrain 转换工具:gdal2srtmtiles

工具gdal2srtmtiles的安装使用

cesium 接入地图存在的问题

  1. cesium内部不允许跨域,所以需要通过代理获取外部数据
  2. 瓦片生成后,在获取离线地图,需要有自己的地图服务器 在搭建测试用的本地地图服务器时,遇到的问题: 设置请求响应,confweb.xml文件添加如下代码:
    <mime-mapping>
      <extension>terrain</extension>
      <mime-type>application/octet-stream</mime-type>
    </mime-mapping>
    <mime-mapping>
          <extension>terrain</extension>
          <mime-type>application/vnd.quantized-mesh</mime-type>
    </mime-mapping>
    
  3. 地形更新后, 接入的瓦片未能正确更新到地图上 处理: 1. imageryProvider+初始化 2. viewer实例的TerrainProvider, 重新 new this.Cesium.EllipsoidTerrainProvider(), 以达到初始状态

图层控制研究

  1. cesium之地图切换展示效果篇
  • 配置不同类型地图服务:
  • 如何获取ImageryLayerCollection
    • 可以通过viewer.imageryLayers获取。
    • 可以通过viewer.scene.imageryLayers获取。
  1. 通过瓦片计算地形数据 可以通过createWorldTerrainCesium 官方提供的地形数据,只需要正确加载地形瓦片,Cesium可以自动算出高程设色瓦片、坡度设色瓦片以及等高线。其实也不难理解,地形瓦片中包含了空三等信息,根据这些信息自然能够计算出高度图、坡度图以及等高线,

事件

  1. 建立viewModel 对象, 绑定到Cesium中
const addEventListener = (elm, model) => {
	Cesium.knockout.track(model); // 建立监听数据
	Cesium.knockout.applyBindings(model, elm.$el); // 绑定
}

// 获取事件的值
const vm = this
 vm.Cesium.knockout.getObservable(vm.viewModel, 'srtm').subscribe(function(value) {
        vm.viewModel.srtm = value;
        vm.viewModel.selectedType = value;
        //  更新视图
      })