WEBGL 水淹没分析

WEBGL 水淹没计算方法

本文主要介绍了 基于 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);
  
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值