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 相关文章推荐
制作高质量的JQuery Plugin 插件的方法
Apr 20 Javascript
JavaScript Chart 插件整理
Jun 18 Javascript
jQuery函数的等价原生函数代码示例
May 27 Javascript
ExtJs中gridpanel分组后组名排序实例代码
Dec 02 Javascript
如何编写高质量JS代码
Dec 28 Javascript
使用jquery实现仿百度自动补全特效
Jul 23 Javascript
JavaScript中的操作符类型转换示例总结
May 30 Javascript
浅谈Javascript数据属性与访问器属性
Jul 26 Javascript
浅谈angularjs module返回对象的坑(推荐)
Oct 21 Javascript
微信小程序 tabs选项卡效果的实现
Jan 05 Javascript
微信小程序 详解页面跳转与返回并回传数据
Feb 13 Javascript
Vue中v-for的数据分组实例
Mar 07 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操作mysql数据库的基本类代码
2014/02/25 PHP
ThinkPHP采用实现三级循环代码实例
2014/07/18 PHP
PHP实现获取并生成数据库字典的方法
2016/05/04 PHP
ExtJS 学习专题(一) 如何应用ExtJS(附实例)
2010/03/11 Javascript
jquery中使用循环下拉菜单示例代码
2014/09/24 Javascript
使用JS获取当前地理位置方法汇总
2014/12/18 Javascript
jQuery检测返回值的数据类型
2015/07/13 Javascript
JavaScript检测并限制复选框选中个数的方法
2015/08/12 Javascript
jQuery基于cookie实现的购物车实例分析
2015/12/24 Javascript
javascript中神奇的 Date对象小结
2017/10/12 Javascript
Vue+Mock.js模拟登录和表格的增删改查功能
2018/07/26 Javascript
前端axios下载excel文件(二进制)的处理方法
2018/07/31 Javascript
Vue 组件封装 并使用 NPM 发布的教程
2018/09/30 Javascript
vue中使用cookies和crypto-js实现记住密码和加密的方法
2018/10/18 Javascript
在Node.js中将SVG图像转换为PNG,JPEG,TIFF,WEBP和HEIF格式的方法
2019/08/22 Javascript
layui表格 列自动适应大小失效的解决方法
2019/09/06 Javascript
layui table单元格事件修改值的方法
2019/09/24 Javascript
如何使用JavaScript实现无缝滚动自动播放轮播图效果
2020/08/20 Javascript
收集的几个Python小技巧分享
2014/11/22 Python
Python实现求两个csv文件交集的方法
2017/09/06 Python
python numpy格式化打印的实例
2018/05/14 Python
使用pycharm生成代码模板的实例
2018/05/23 Python
numpy matrix和array的乘和加实例
2018/06/28 Python
Python基于多线程实现ping扫描功能示例
2018/07/23 Python
python爬取微信公众号文章
2018/08/31 Python
pandas取出重复数据的方法
2019/07/04 Python
python将字母转化为数字实例方法
2019/10/04 Python
python绘制BA无标度网络示例代码
2019/11/21 Python
opencv之颜色过滤只留下图片中的红色区域操作
2020/06/05 Python
详解HTML5 录音的踩坑之旅
2017/12/26 HTML / CSS
linux面试题参考答案(10)
2016/10/26 面试题
幼儿园五一活动方案
2014/02/07 职场文书
文明倡议书
2015/01/19 职场文书
颐和园的导游词
2015/01/30 职场文书
公文写作:教你写“建议书”
2019/05/07 职场文书
Python爬虫基础讲解之请求
2021/05/13 Python