156c2110084bf25efd352523cdfa6818
Cesium专栏-剖面分析(附源码下载)

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

剖面分析


剖面分析从网上找不到比较合理的定义说明,最初是一种犯罪调差方法。

Geographic profiling is a criminal investigative methodology that analyzes the locations of a connected series of crimes to determine the most probable area of offender residence. By incorporating both qualitative and quantitative methods, it assists in understanding spatial behaviour of an offender and focusing the investigation to a smaller area of the community.

谷歌给的翻译是:

地理概况分析是一种刑事调查方法,分析一系列相关犯罪的位置,以确定最可能的犯罪者居住区域。 通过结合定性和定量方法,它有助于理解罪犯的空间行为,并将调查重点放在社区的较小区域。

简单的说,地理学上的剖面分析,是从其中一个维度去比较、衡量、分析一组样本的区别,然后定性、定量给出结论的一种分析方法,比如科学家们研究人类,从年龄这个维度可以把人归纳成幼儿、成人、老人等。

我们这里说的剖面分析更具体点,是从地形表面的高程这个维度去研究分析,比如环法自行车赛中每段比赛前展示的爬坡高度图。

效果图

具体做法


原理:采用采样法法来获取指定位置的地形高度

接口API

  • ScreenSpaceEventHandler
  • CallbackProperty
  • sampleTerrainMostDetailed
  • ClassificationType

具体步骤

1.初始化cesium地球,并设置地形服务

var terrainProvider = Cesium.createWorldTerrain();
var viewer = new Cesium.Viewer('cesiumContainer', {
    terrainProvider: terrainProvider
});

2.指定要研究的区域

viewer.camera.setView({
    destination: new Cesium.Cartesian3(-548184.7982559408, 5512367.059463563, 3173625.2210259973),
    orientation: {
        heading: 5.683499859605618,
        pitch: -0.3430291183891061,
        roll: 6.281444671468591
    }
});

3.绘制剖面分析的起始点

viewer.screenSpaceEventHandler.setInputAction(function (clickEvent) {
    if (start == null) {
        start = viewer.scene.pickPosition(clickEvent.position);
        drawPoint(start);
        viewer.screenSpaceEventHandler.setInputAction(function (moveEvent) {
            end = viewer.scene.pickPosition(moveEvent.endPosition);
            drawLine();
        }, Cesium.ScreenSpaceEventType.MOUSE_MOVE);
    } else {
        end = viewer.scene.pickPosition(clickEvent.position);
        drawPoint(end);
        viewer.screenSpaceEventHandler.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_CLICK);
        viewer.screenSpaceEventHandler.removeInputAction(Cesium.ScreenSpaceEventType.MOUSE_MOVE);
        profileAnalyse();
    }
}, Cesium.ScreenSpaceEventType.LEFT_CLICK);

4.根据起始点进行剖面分析
```
function profileAnalyse() {
var positions = [Cesium.Cartographic.fromCartesian(start)];
// 插值100个点,点越多模拟越精确,但是效率会低
var count = 100;
for (var i = 1; i < count; i++) {
var cart = Cesium.Cartesian3.lerp(start, end, i / count, new Cesium.Cartesian3());
positions.push(Cesium.Cartographic.fromCartesian(cart));
}
positions.push(Cesium.Cartographic.fromCartesian(end));

// 异步使用最精确的地形采样获取地形高度
top Created with Sketch.