本文主要介绍了 基于 Cesium 实现水淹没计算的方法介绍。
水淹没效果图
本工具实现的鼠标选取区域并进行水淹没计算功能。
代码实现
根据选取区域进行水淹没计算核心代码 `代码片`.
```javascript
/**
* 淹没分析
*/
function WaterAnalysis(options) {
this.map = options.map;
this.globe = options.map.scene.globe;
//装载鼠标点迹集合
this.dataSource = new Cesium.CustomDataSource("volumeEntity");
this.map.dataSources.add(this.dataSource);
this.shape = undefined;
this.init();
}
WaterAnalysis.prototype.init = function () {
this.drawingMode = 'polygon';
this.activeShapePoints = [];
this.lonlats = [];
this.floatingPoint = undefined;
this.drawing = false;
this.createControl();
//提示控件
TooltipControl.initTool(this.map);
this._tooltip = TooltipControl;
};
//创建控制器
WaterAnalysis.prototype.createControl = function () {
var self = this;
//鼠标左键事件
var handler = new Cesium.ScreenSpaceEventHandler(this.map.canvas);
handler.setInputAction(function (event) {
if (!Cesium.Entity.supportsPolylinesOnTerrain(self.map.scene)) {
console.log('This browser does not support polylines on terrain.');
return;
}
if (self.drawing) {
var earthPosition = self.map.scene.pickPosition(event.position);
if (Cesium.defined(earthPosition)) {
if (self.activeShapePoints.length === 0) {
//绘制点图形
self.floatingPoint = self.drawPoint(earthPosition);
self.activeShapePoints.push(earthPosition);
var dynamicPositions = new Cesium.CallbackProperty(function () {
return self.activeShapePoints;
}, false);
//绘制图形对象
self.shape = self.drawShape(dynamicPositions);
}
self.activeShapePoints.push(earthPosition);
self.drawPoint(earthPosition);
//组织经纬度坐标集合
self.pushLonlat(earthPosition);
}
}
}, Cesium.ScreenSpaceEventType.LEFT_CLICK);
//鼠标移动事件
handler.setInputAction(function (event) {
if (self.drawing) {
if (Cesium.defined(self.floatingPoint)) {
var newPosition = self.map.scene.pickPosition(event.endPosition);