之前在研究cesium时,没来得及记录下些,总觉得念着念着,于是又去翻了一下笔记,总结一下。
cesium
- 加载地图数据: createTileMapServiceImageryProvider——需有服务器
地形数据
-
Terrain 效果:cesium 地形数据显示, 需要转化方可适用,网上数据转换多为ArcGIS Toolbox工具转换格式,本实践使用CesiumLab工具:Cesiumlab是一款专为Cesium开源数字地球平台打造的免费数据处理工具集。目前包含 地形数据处理、影像数据处理、点云数据处理、数据下载、建筑物矢量面处理、倾斜数据处理、三维场景(max,maya)处理、BIM数据(revit,ifc)处理等工具。 参考:liubf.com/2018/11/03/…
-
数据引入: 使用UrlTemplateImageryProvider,
3维数据显示
前提:

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

cesium 接入地图存在的问题
- cesium内部不允许跨域,所以需要通过代理获取外部数据
- 瓦片生成后,在获取离线地图,需要有自己的地图服务器
在搭建测试用的本地地图服务器时,遇到的问题:
设置请求响应,
conf
下web.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>
- 地形更新后, 接入的瓦片未能正确更新到地图上 处理: 1. imageryProvider+初始化 2. viewer实例的TerrainProvider, 重新 new this.Cesium.EllipsoidTerrainProvider(), 以达到初始状态
图层控制研究
- cesium之地图切换展示效果篇
- 配置不同类型地图服务:
- 如何获取ImageryLayerCollection
- 可以通过viewer.imageryLayers获取。
- 可以通过viewer.scene.imageryLayers获取。
- 通过瓦片计算地形数据
可以通过
createWorldTerrain
Cesium 官方提供的地形数据,只需要正确加载地形瓦片,Cesium可以自动算出高程设色瓦片、坡度设色瓦片以及等高线。其实也不难理解,地形瓦片中包含了空三等信息,根据这些信息自然能够计算出高度图、坡度图以及等高线,
事件
- 建立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;
// 更新视图
})