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 控制弹出窗口
Apr 10 Javascript
JavaScript 捕获窗口关闭事件
Jul 26 Javascript
火狐下table中创建form导致两个table之间出现空白
Sep 02 Javascript
父元素与子iframe相互获取变量和元素对象的具体实现
Oct 15 Javascript
javascript中sort()的用法实例分析
Jan 30 Javascript
javascript编写实用的省市选择器
Feb 12 Javascript
jQuery的load()方法及其回调函数用法实例
Mar 25 Javascript
JavaScript利用HTML DOM进行文档操作的方法
Mar 28 Javascript
jQuery Validate 数组 全部验证问题
Jan 12 Javascript
浅谈React的最大亮点之虚拟DOM
May 29 Javascript
vue+egg+jwt实现登录验证的示例代码
May 18 Javascript
vue移动端弹起蒙层滑动禁止底部滑动操作
Jul 22 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
MySQL连接数超过限制的解决方法
2011/07/17 PHP
PHP修改session_id示例代码
2014/01/08 PHP
Yii调试查看执行SQL语句的方法
2016/07/15 PHP
微信公众号开发之语音消息识别php代码
2016/08/08 PHP
Javascript 调试利器 Firebug使用详解六
2009/07/05 Javascript
利用onresize使得div可以随着屏幕大小而自适应的代码
2010/01/15 Javascript
jQuery autocomplate 自扩展插件、自动完成示例代码
2011/03/28 Javascript
一个基于jquery的文本框记数器
2012/09/19 Javascript
jquery实现弹出层登录和全屏层注册特效
2015/08/28 Javascript
JS作为值的函数用法示例
2016/06/20 Javascript
js学习总结_基于数据类型检测的四种方式(必看)
2017/07/04 Javascript
AngularJS实现页面跳转后自动弹出对话框实例代码
2017/08/02 Javascript
Vue.js 2.0和Cordova开发webApp环境搭建方法
2018/02/26 Javascript
ajax与jsonp的区别及用法
2018/10/16 Javascript
vue slot与传参实例代码讲解
2019/04/28 Javascript
深入学习JavaScript中的bom
2019/05/27 Javascript
Javascript实现秒表计时游戏
2020/05/27 Javascript
JS 数组和对象的深拷贝操作示例
2020/06/06 Javascript
vue下拉刷新组件的开发及slot的使用详解
2020/12/23 Vue.js
[03:27]《辉夜杯》线下训练营 导师CU和海涛指点迷津
2015/10/23 DOTA
Python实现比较两个列表(list)范围
2015/06/12 Python
Python基于回溯法子集树模板解决取物搭配问题实例
2017/09/02 Python
TensorFlow安装及jupyter notebook配置方法
2017/09/08 Python
使用python 爬虫抓站的一些技巧总结
2018/01/10 Python
python argparser的具体使用
2019/11/10 Python
python如何实现不可变字典inmutabledict
2020/01/08 Python
Python3如何判断三角形的类型
2020/04/12 Python
用opencv给图片换背景色的示例代码
2020/07/08 Python
python软件测试Jmeter性能测试JDBC Request(结合数据库)的使用详解
2021/01/26 Python
微信小程序“圣诞帽”的实现思路详解
2017/12/28 HTML / CSS
西班牙宠物用品和食品网上商店:Tiendanimal
2019/06/06 全球购物
药学专业大学生自荐信
2013/09/28 职场文书
商务英语专业自荐信
2013/10/14 职场文书
网络书店创业计划书
2014/02/07 职场文书
2014年纪检监察工作总结
2014/11/11 职场文书
Python数据分析之pandas读取数据
2021/06/02 Python