在二维开发中,openlayers4 入门开发系列结合 echarts4 实现散点图,下图是GIS之家的效果图,那么在三维中,则可借助Entity来变相构造下图的效果。

思路:

构造实体ellipse,造一个用作实心中心区域的表征位置,再造两个圆,控制他们的半径动态变化,然后轮回播放,这其中涉及的是

Cesium.CallbackProperty

Cesium.ImageMaterialProperty

具体实现步骤:

1、数据准备

我构造一个北京各区的中心作为测试数据

[
{"name":"北京A", "value":100,"coordinates":[116.47202, 40.291]},
{"name":"北京B", "value":500,"coordinates":[116.606235, 40.698838]},
{"name":"北京C", "value":30,"coordinates":[115.895015, 40.143259]},
{"name":"北京D", "value":40,"coordinates":[116.259491, 39.593590]},
{"name":"北京E", "value":10,"coordinates":[117.264262, 40.184631]}
]

2、读取Json文件,建议不要用eval或者AJAX

//解析JSON文件
//_url的路径例如:"assets/data/configSites.json"
function analyseJSON(_url,_callback) {
let url=_url;
let request = new XMLHttpRequest();
request.open("get",url);
request.send(null);
request.onload = function () {
if (request.status == 200) {/*返回状态为200,即为数据获取成功*/
var json = JSON.parse(request.responseText);
_callback(json);
}
}
}

3。遍历Json文件中每个特征点的属性,构造外部涟漪的效果

 //构造动的扩散涟漪  实际上就是把图片圆形按时间改变半径
addCircleRipple({
json:_JsonData[i],
deviationR:50,//差值 差值也大 速度越快
eachInterval:2000,//两个圈的时间间隔
imageUrl:"assets/home/redCircle2.png",
maxR:(_JsonData[i].value)*20
});
/**
*两个圆扩散纹理
* */
function addCircleRipple(data){
var r1=0,r2=0; var r3=0,r4=0;
function changeR1() { //这是callback,参数不能内传
r1=r1+data.deviationR;
if(r1>=data.maxR){
r1=0;
}
return r1;
}
function changeR2() {
r2=r2+data.deviationR;
if(r2>=data.maxR){
r2=0;
}
return r2;
}
//第一个圆先跑
viewer.entities.add({
description:"LIGHT_POINTS",
position:Cesium.Cartesian3.fromDegrees(data.json.coordinates[0],data.json.coordinates[1],0),
show:true,
ellipse:{
semiMinorAxis :new Cesium.CallbackProperty(changeR1,false),
semiMajorAxis :new Cesium.CallbackProperty(changeR2,false),
height:10,
material:new Cesium.ImageMaterialProperty({
image:data.imageUrl,
repeat:Cesium.Cartesian2(1.0, 1.0), //指定图像在每个方向上重复的次数,默认为Cesium.Cartesian2(1.0, 1.0),{Cartesian2}类型
transparent:true,// 默认为false,当图像具有透明性时设置为true(例如,当png具有透明部分时)
color:new Cesium.CallbackProperty(function () {
var alp=1-r1/data.maxR;
return Cesium.Color.WHITE.withAlpha(alp)
//entity的颜色透明 并不影响材质,并且 entity也会透明
},false)
})
}
});
//第二个圆开始跑
setTimeout(function () {
function changeR11() { //这是callback,参数不能内传
r3=r3+data.deviationR;
if(r3>=data.maxR){
r3=0;
}
return r3;
}
function changeR12() {
r4=r4+data.deviationR;
if(r4>=data.maxR){
r4=0;
}
return r4;
}
viewer.entities.add({
description:"LIGHT_POINTS",
position:Cesium.Cartesian3.fromDegrees(data.json.coordinates[0],data.json.coordinates[1],0),
show:true,
ellipse:{
semiMinorAxis :new Cesium.CallbackProperty(changeR11,false),
semiMajorAxis :new Cesium.CallbackProperty(changeR12,false),
height:10,
material:new Cesium.ImageMaterialProperty({
image:data.imageUrl,
repeat:Cesium.Cartesian2(1.0, 1.0),
transparent:true,
color:new Cesium.CallbackProperty(function () {
var alp=1-r1/data.maxR;
return Cesium.Color.WHITE.withAlpha(alp)
//entity的颜色透明 并不影响材质,并且 entity也会透明
},false)
})
}
});
},data.eachInterval)
}

使用的波纹圆是类似于这种的:

4、构造中心圆实体:

  viewer.entities.add({
description:"LIGHT_POINTS",
position:Cesium.Cartesian3.fromDegrees(data.json.coordinates[0],data.json.coordinates[1],0),
show:true,
ellipse:{
semiMinorAxis :(_JsonData[i].value)*5,
semiMajorAxis :(_JsonData[i].value)*5,
height:10,
material:new Cesium.Color(1,0,0,1)
}
});

最后的实现效果:

Supermap/Cesium 开发心得----动态散点图(波纹点/涟漪点)的更多相关文章

  1. Supermap/Cesium 开发心得----定位

    SuperMap的WebGL是基于开源JS库Cesium做的修改而形成的产品,理论上用起来大同小异,如果在有不一样的地方再看,基本上还是与Cesium的接口名称和结构是一样的. 定位方法有基于Cesi ...

  2. Supermap/Cesium 开发心得----飞天动线的实现

    在实际开发中,我遇到这样的问题,只给了两地点的坐标,要求会出从A地到B地的在天上飞的那种动态线 本质上动线的效果就是构造实体Entity中的polyline来实现,设置好材质,颜色和运动频率 具体实现 ...

  3. Supermap/Cesium 开发心得----本地视频接入播放

    在三维中,为了增加现实感.给人一种带入感,我们会采取接入视频的方式来实现,那么如何接入视频呢? 由于没有截至写文章为止,我没有视频流数据,所以只能采取本地视频文件的方式来做. 本文介绍结束视频的其中一 ...

  4. Supermap/Cesium 开发心得----获取三维视角的四至范围

    网上目前有两种获取当前Camera的四至范围的方法 方法一    这种方法是最通用的,即使在哥伦布视角(2.5D下依旧能准确获取值) function getCurrentExtent() { // ...

  5. AEAI Portlet开发心得

    1 背景概述 Portlet是AEAI Portal组件API,是基于Java的Web组件,由Portlet容器管理,并由容器处理请求,生产动态内容.AEAI Portal中已经预置了许多Portle ...

  6. Cesium学习2:如何从零开始在Eclipse IDE,Java语言搭建cesium开发环境

    废话不多说,今天就先在Eclipse上搭建Cesium开发环境吧~ 零.Cesium简介 Cesiumjs 是一套javascript库,用来渲染3D地球,2D区域地图,和多种GIS要素.不需要安装任 ...

  7. 安卓版App开发心得

    从2016年4月到6月主要做的工作是网站的开发,而6月到现在2016年8月初,主要做的工作是Android和IOS两种App的开发,又以Android为主. 将这段时间的Android开发心得记录如下 ...

  8. ios 开发中 动态库 与静态库的区别

    使用静态库的好处 1,模块化,分工合作 2,避免少量改动经常导致大量的重复编译连接 3,也可以重用,注意不是共享使用 动态库使用有如下好处: 1使用动态库,可以将最终可执行文件体积缩小 2使用动态库, ...

  9. 分享:写了一个 java 调用 C语言 开发的动态库的范例

    分享:写了一个 java 调用 C语言 开发的动态库的范例 cfunction.h   代码#pragma once#ifdef __cplusplusextern "C" {#e ...

随机推荐

  1. Shell - 长 ping 脚本监控网络时延

    生产环境中, 网络时延是一个很重要的指标. 为了方便检查网络时延的大小, 我们可以通过ping命令实现长时间的网络监控. 1 ping 命令的使用 1.1 常用参数 -i: 每次执行ping操作的间隔 ...

  2. PHP基于Redis实现轻量级延迟队列

    延迟队列,顾名思义它是一种带有延迟功能的消息队列. 那么,是在什么场景下我才需要这样的队列呢? 一.背景 先看看一下业务场景: 1.会员过期前3天发送召回通知 2.订单支付成功后,5分钟后检测下游环节 ...

  3. 《手把手教你》系列练习篇之3-python+ selenium自动化测试(详细教程)

    1.  简介 前面介绍了,XPath, id , class , link text, partial link text, tag name, name 七大元素定位方法,本文介绍webdriver ...

  4. Django总结目录

    Django总结目录 1. django框架简介及自定义简易版框架 2. 路由层 3. 视图层 4. 模板层 5. 模型层 5.1 基本操作 5.2 多表操作 5.3 进阶相关 6. 组件 6.1 a ...

  5. VS2019提示scanf不安全问题

    VS2019提示scanf不安全问题 我们现在学的就是使用scanf()语句进行输入,但是vs2019中却报错显示不安全 首先我先来说一下scanf和scanf-s的区别 scanf()函数是标准C中 ...

  6. css4——浮动

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  7. 全面认识 RUST -- 掌控未来的雷电

    文章目录 RUST 简介 如何衡量语言的好坏? 静态语言 编译器 语言定位 代表性项目 Hello World RUST 前景 RUST 简介 Rust 是一种兼顾内存安全.高并发和稳定运行的编程语言 ...

  8. windows系统安装git

    一.下载git的安装包 git官网的下载地址:https://git-scm.com/download/win 选择自己的机型进行安装. 二.安装配置 一直点下一步就可以 安装完毕之后,打开电脑命令窗 ...

  9. CapSupport 的使用

    CapSupport 是在CAP的操作上做了一些封装 目的是让事务同时执行或者同时回滚 startup services.AddCapSupport((optaion) => { optaion ...

  10. linux—chmod

    chmod -options -c 只输出被改变的文件信息      -f , --silent, --quite   当chmod不能改变文件模式时,不通知用户      -R   递归       ...