09067faae66bb366158d91924038e514
Cesium专栏-通视分析(附源码下载)

Cesium 是一款面向三维地球和地图的,世界级的JavaScript开源产品。它提供了基于JavaScript语言的开发包,方便用户快速搭建一款零插件的虚拟地球Web应用,并在性能,精度,渲染质量以及多平台,易用性上都有高质量的保证。

通视分析


通视分析是指以某一点为观察点,研究某一区域通视情况的地形分析。利用DEM判断地形上任意两点之间是否可以互相可见的技术方法,分为视线通视分析和可视域分析,前者判断任意两点之间或者多点之间能否通视,后者对于给定的观察点,分析观察所覆盖的区域。

其中可视域是从一个或者多个观察的可以看见的地表范围。可视域分析是在栅格数据数据集上,对于给定的一个观察点,基于一定的相对高度,查找给定的范围内观察点所能通视覆盖的区域,也就是给定点的通视区域范围,分析结果是得到一个栅格数据集。在确定发射塔的位置、雷达扫描的区域、以及建立森林防火瞭望塔的时候,都会用到可视域分析。可视域分析在航海、航空以及军事方面有较为广泛的应用。

本章节首先处理这两种分析中的较为简单的通视分析,即给定的任意两点之间是否可见。

效果图

具体做法


原理:采用射线法来判别两点之间是否有其他物体所遮挡(比如Entity、Primitive、Terrain、3DTiles等)

接口API

  • Cesium.Cesium3DTileset
  • Cesium.Cartesian3
  • Cesium.Ray
  • Cesium.Scene

具体步骤
1.设置你自己的AccessToken,如果不用Ion上的网络资源可省略这步

Cesium.Ion.defaultAccessToken = 'xxxx';

2.初始化容器

var viewer = new Cesium.Viewer('cesiumContainer', {
    imageryProvider: new Cesium.UrlTemplateImageryProvider({
        url: 'http://www.google.cn/maps/vt?lyrs=s@716&x={x}&y={y}&z={z}'
    })
});

3.加载3dtiles模型,作为通视的模型

var tileset = new Cesium.Cesium3DTileset({
    url: 'http://localhost/demo/tileset.json',
});
viewer.scene.primitives.add(tileset);
tileset.readyPromise.then(function (argument) {
    viewer.camera.flyToBoundingSphere(tileset.boundingSphere);
});

4.指定观察点

// 视域点 设置观察点所在的视点高度为100m
var viewPoint = Cesium.Cartesian3.fromDegrees(x, y, 100);

5.计算目标点

本例计算距离观察点距离1km外 45°至135°之间每间隔1°共计90个点的通视情况
```
// 目标点集合

top Created with Sketch.