openlayers4实现点动态扩散


Posted in Javascript onAugust 17, 2020

本文实例为大家分享了openlayers4实现的点动态扩散的具体代码,供大家参考,具体内容如下

原理:连续刷新地图,并且刷新时,修过点样式的半径大小,来实现扩散效果;

//定义底图
var baseLayer = new ol.layer.Vector({
 renderMode: 'image',
 source: new ol.source.Vector({
  url:'/data/shengjie.geojson',
  format: new ol.format.GeoJSON()
 }),
 style: new ol.style.Style({
  fill: new ol.style.Fill({
   color: '#0A122A'
  }),
  stroke: new ol.style.Stroke({
   color: '#6E6E6E',
   width: 1
  })
 })
})

var view = new ol.View({
 center: [108.7,34.8],
 zoom: 4,
 projection: "EPSG:4326"
});

var map = new ol.Map({
 target: 'map',
 view: view,
 layers: [baseLayer]
})


//定义一个矢量图层,用于打点
var pointAnimationLayer = new ol.layer.Vector({
 source: new ol.source.Vector(),
 style: new ol.style.Style({
  image: new ol.style.Circle({
   fill: new ol.style.Fill({
    color: '#E6E6E6'
   }),
   radius: 4
  })
 })
})
map.addLayer(pointAnimationLayer);

//随机写的点坐标
var points=[]
points.push([112.4,33.5]);
points.push([103.8,23.7]);
points.push([89.7,41.6]);

//将点添加到图层
points.forEach(element => {
 var ft = new ol.Feature({
  geometry: new ol.geom.Point(element)
 });
 pointAnimationLayer.getSource().addFeature(ft);
});

//map渲染事件,回调动画
map.on('postcompose',animation);

//样式中的半径变量,通过不断刷新点样式的半径来实现点动态扩散
var radius = 1;

//动画
function animation(event){
 if(radius >= 20){
  radius = 0
 }
 var opacity = (20 - radius) * (1 / 20) ;//不透明度
 var pointStyle = new ol.style.Style({
  image: new ol.style.Circle({
   radius:radius,
   stroke: new ol.style.Stroke({
    color: 'rgba(255,255,0' + opacity + ')',
    width: 2 - radius / 10
   })
  })
 })

 var features = pointAnimationLayer.getSource().getFeatures();
 
 var vectorContext = event.vectorContext;
 vectorContext.setStyle(pointStyle);
 features.forEach(element => {
  var geom = element.getGeometry();
  vectorContext.drawGeometry(geom);
 });
 radius = radius + 0.3;
 
 //触发map的postcompose事件
 map.render();
}

实现

利用map的渲染事件:postcompose来连续刷新
之前实现地图动画都是用window.setInterval()方法来实现,这次拓展下视野,采用Openlayers内部的方法。主要有两步操作:

1、事件注册

map.on('postcompose',animation);

2、在事件的回调函数中去触发postcompose事件

map.render();

postcompose事件第一次触发是在地图初始化时,后续的触发都由animation方法中的map.render()来完成。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript数组的扩展实现代码集合
Jun 01 Javascript
js replace 与replaceall实例用法详解
Aug 03 Javascript
JavaScript的setAttribute兼容性问题解决方法
Nov 11 Javascript
js replace替换所有匹配的字符串
Feb 13 Javascript
javascript异步编程的4种方法
Feb 19 Javascript
js解决select下拉选不中问题
Oct 14 Javascript
js简单实现图片延迟加载的方法
Jul 19 Javascript
PhotoSwipe异步动态加载图片方法
Aug 25 Javascript
jQuery实现鼠标滑过图片移动特效
Dec 08 Javascript
微信小程序导航栏跟随滑动效果的实现代码
May 14 Javascript
JS使用for in有序获取对象数据
May 19 Javascript
openlayers 3实现车辆轨迹回放
Sep 24 Javascript
Vue实现计算器计算效果
Aug 17 #Javascript
vue-model实现简易计算器
Aug 17 #Javascript
Vue实现手机计算器
Aug 17 #Javascript
Vuex实现购物车小功能
Aug 17 #Javascript
jquery+ajax实现异步上传文件显示进度条
Aug 17 #jQuery
jQuery实现异步上传一个或多个文件
Aug 17 #jQuery
vue项目里面引用svg文件并给svg里面的元素赋值
Aug 17 #Javascript
You might like
Zend Framework基本页面布局分析
2016/03/19 PHP
php生成二维码不保存服务器还有下载功能的实现代码
2018/08/09 PHP
Laravel5.5 视图 - 创建视图和数据传递示例
2019/10/21 PHP
js/jquery解析json和数组格式的方法详解
2014/01/09 Javascript
jquery中$.post()方法的简单实例
2014/02/04 Javascript
JS实现兼容性好,自动置顶的淘宝悬浮工具栏效果
2015/09/18 Javascript
angularJS 如何读写缓冲的方法(推荐)
2016/08/06 Javascript
微信小程序学习(4)-系统配置app.json详解
2017/01/12 Javascript
深入浅析AngularJS中的一次性数据绑定 (bindonce)
2017/05/11 Javascript
Vue2.0 从零开始_环境搭建操作步骤
2017/06/14 Javascript
Angular2整合其他插件的方法
2018/01/20 Javascript
Angular通过指令动态添加组件问题
2018/07/09 Javascript
nodejs之koa2请求示例(GET,POST)
2018/08/07 NodeJs
JS/jQuery实现超简单的Table表格添加,删除行功能示例
2019/07/31 jQuery
解决layui动态添加的元素click等事件触发不了的问题
2019/09/20 Javascript
jquery.validate自定义验证用法实例分析【成功提示与择要提示】
2020/06/06 jQuery
js实现从右往左匀速显示图片(无缝轮播)
2020/06/29 Javascript
antd配置config-overrides.js文件的操作
2020/10/31 Javascript
[01:09]DOTAPLUS——DOTA2的新时代
2018/04/04 DOTA
python实现将excel文件转化成CSV格式
2018/03/22 Python
Python代码块批量添加Tab缩进的方法
2018/06/25 Python
python绘制圆柱体的方法
2018/07/02 Python
python接口自动化测试之接口数据依赖的实现方法
2019/04/26 Python
python GUI编程(Tkinter) 创建子窗口及在窗口上用图片绘图实例
2020/03/04 Python
Python如何省略括号方法详解
2020/03/21 Python
Pandas对每个分组应用apply函数的实现
2020/12/13 Python
HTML5 input新增type属性color颜色拾取器的实例代码
2018/08/27 HTML / CSS
您熟悉ORM(Object-Relation Mapping)吗?请谈谈您所理解的ORM
2016/02/08 面试题
酒店公关部经理岗位职责
2013/11/24 职场文书
课改先进个人汇报材料
2014/01/26 职场文书
优秀志愿者事迹材料
2014/02/03 职场文书
教育技术学专业职业规划书
2014/03/03 职场文书
陈欧的广告词
2014/03/18 职场文书
资产运营委托书范本
2014/10/16 职场文书
十月围城观后感
2015/06/08 职场文书
如何写观后感
2015/06/19 职场文书