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 jQuery $.post $.ajax用法
Jul 09 Javascript
extjs form textfield的隐藏方法
Dec 29 Javascript
JavaScript调用Activex控件的事件的实现方法
Apr 11 Javascript
filters.revealTrans.Transition使用方法小结
Aug 19 Javascript
js实现网页标题栏闪烁提示效果实例分析
Nov 20 Javascript
jquery实现可自动收缩的TAB网页选项卡代码
Sep 06 Javascript
JavaScript代码实现左右上下自动晃动自动移动
Apr 08 Javascript
AngularJS基础 ng-keypress 指令简单示例
Aug 02 Javascript
浅谈JSON.stringify()和JOSN.parse()方法的不同
Aug 29 Javascript
js实现一个简易计算器
Mar 30 Javascript
JS实现横向跑马灯效果代码
Apr 20 Javascript
JavaScript进阶(四)原型与原型链用法实例分析
May 09 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
PHP 事件机制(2)
2011/03/23 PHP
Yii2简单实现多语言配置的方法
2016/07/23 PHP
PHP操作MySQL中BLOB字段的方法示例【存储文本与图片】
2017/09/15 PHP
PHP获取链表中倒数第K个节点的方法
2018/01/18 PHP
asp.net 30分钟掌握无刷新 Repeater
2011/09/16 Javascript
你需要知道的10个最佳javascript开发实践小结
2012/04/15 Javascript
JavaScript中Null与Undefined的区别解析
2015/06/30 Javascript
JS访问SWF的函数用法实例
2015/07/01 Javascript
javascript实现超炫的向上滑行菜单实例
2015/08/03 Javascript
jquery+ajax请求且带返回值的代码
2015/08/12 Javascript
jQuery向父辈遍历的简单方法
2016/09/18 Javascript
node.js中debug模块的简单介绍与使用
2017/04/25 Javascript
BootStrap点击保存后实现模态框自动关闭的思路(模态框)
2017/09/26 Javascript
在vue中安装使用vux的教程详解
2018/09/16 Javascript
JS将时间秒转换成天小时分钟秒的字符串
2019/07/10 Javascript
vue.js基于v-for实现批量渲染 Json数组对象列表数据示例
2019/08/03 Javascript
Vue中fragment.js使用方法小结
2020/02/17 Javascript
详细分析React 表单与事件
2020/07/08 Javascript
用python写asp详细讲解
2013/12/16 Python
python Matplotlib画图之调整字体大小的示例
2017/11/20 Python
python3 中的字符串(单引号、双引号、三引号)以及字符串与数字的运算
2019/07/18 Python
Django之模板层的实现代码
2019/09/09 Python
Python hashlib和hmac模块使用方法解析
2020/12/08 Python
python 检测nginx服务邮件报警的脚本
2020/12/31 Python
anaconda升级sklearn版本的实现方法
2021/02/22 Python
New Balance澳大利亚官网:运动鞋和健身服装
2019/02/23 全球购物
澳大利亚礼品篮网站:Macarthur Baskets
2019/10/14 全球购物
英国运动服、设备及配件网站:DW Sports
2019/12/04 全球购物
澳大利亚体育和露营装备在线/实体零售商:Find Sports
2020/06/03 全球购物
幼儿园国庆节活动方案
2014/02/01 职场文书
四年大学自我鉴定
2014/02/17 职场文书
3.15消费者权益日活动总结
2015/02/09 职场文书
物业保洁员管理制度
2015/08/05 职场文书
2016年党建工作简报
2015/11/26 职场文书
创业计划书之外语培训班
2019/11/02 职场文书
python turtle绘图命令及案例
2021/11/23 Python