• cesium+mapv之热力图地球背面隐藏效果


    cesium+mapv之热力图地球背面隐藏效果

    当mapv加载在cesium地球上时,会出现地球背面的热力图未隐藏,影响显示效果

    解决方法:

    在cesium场景改变时,更新mapv的dataset,只传入当前地球正面的数据

    地球正面数据获取办法:

    获取当前摄像机查看地球的点,然后获取地球正面范围,然后用经纬度过滤掉地球背面的点(本篇中过滤方法较粗,如需要使用可细化算法)

    代码:

    /* 热力图 */
    export default {
        data() {
            return {
                dataSet: {},
                getHeatMapUpdate: {} // 热力图数据更新事件
            }
        },
        methods: {
            // mapV 热力图
            addHeatmap(data, options) {
                let viewer = this._earth.czm.viewer
                var dataSet = new mapv.DataSet([]);
                this.dataSet = dataSet
                // 更新dataSet
                dataSet.set(this.getData(data))
                this.getHeatMapUpdate = setInterval(()=>{
                    dataSet.set(this.getData(data))
                },200)
                var optionsDeaf = {
                    fillStyle: 'rgba(255, 250, 50, 1)', // 填充颜色
                    globalCompositeOperation: 'lighter', // 颜色叠加方式
                    maxSize: 10, // 显示的圆最大半径大小
                    max: 10, // 数值最大值范围
                    shadowBlur: 30, // 投影模糊级数
                    shadowColor: 'rgba(255, 250, 50, 1)', // 投影颜色viewer
                    gradient: {
                        0.25: 'rgb(0,201,255)',
                        0.55: 'rgb(0,255,0)',
                        0.6: 'yellow',
                        0.7: 'rgb(255,0,0)'
                    }, // 渐变色
                    draw: 'heatmap' // 用不同大小的圆来展示
                }
                if (options) {
                    optionsDeaf = options
                }
                let heatMapLayer = XE.mixins.mapVLayer(viewer, dataSet, optionsDeaf)
            },
            // 获取当前视角的热力图数据
            getData(data) {
                let viewer = this._earth.czm.viewer
                // 获取摄像机位置世界坐标
                var cartesian3=viewer.camera.position
                var ellipsoid=viewer.scene.globe.ellipsoid;
                var cartographic=ellipsoid.cartesianToCartographic(cartesian3);
                // 经度:
                var lng=Cesium.Math.toDegrees(cartographic.longitude);
                // 纬度:
                var lat=Cesium.Math.toDegrees(cartographic.latitude);
                // 过滤获取地球正面的点
                let heatMapData = data.filter(e => {
                    return e.geometry.coordinates[0] > lng - 90 && e.geometry.coordinates[0] < lng + 90 && e.geometry.coordinates[1] > lat - 90 && e.geometry.coordinates[1] < lat + 90
                })
                return heatMapData
            },
            // 删除热力图
            clearHeatmap () {
                clearInterval(this.getHeatMapUpdate)
                this.dataSet.set([])
            },
        }
    }

    混入后调用:

    this.$refs.emap.addHeatmap(features)
    

    features参数:

    "features":[{
            "geometry":{"coordinates":[4.591792,51.938049],"type":"Point"},
            "type":"Feature",
            "properties":{}
    }]

    钻研不易,转载请注明出处。。。。。。

  • 相关阅读:
    LeetCode 712. Minimum ASCII Delete Sum for Two Strings
    LeetCode 1143. Longest Common Subsequence
    LeetCode 334. Increasing Triplet Subsequence
    Atom支持Markdown和Latex
    使用pudb调试python
    Caffe学习笔记2--Ubuntu 14.04 64bit 安装Caffe(GPU版本)
    Window7下安装Ubuntu 14.04 64bit
    Cnblogs支持Latex及测试
    Caffe学习笔记1--Ubuntu 14.04 64bit caffe安装
    g++编译流程
  • 原文地址:https://www.cnblogs.com/s313139232/p/13548782.html
Copyright © 2020-2023  润新知