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 相关文章推荐
关于COOKIE个数与大小的问题
Jan 17 Javascript
JS实现跟随鼠标闪烁转动色块的方法
Feb 26 Javascript
JS实现兼容性较好的随屏滚动效果
Nov 09 Javascript
漂亮! js实现颜色渐变效果
Aug 12 Javascript
JQuery实现DIV其他动画效果的简单实例
Sep 18 Javascript
Jquery Easyui对话框组件Dialog使用详解(14)
Dec 19 Javascript
Bootstrap源码解读导航(6)
Dec 23 Javascript
JavaScript数组排序reverse()和sort()方法详解
Dec 24 Javascript
Vue-Router的使用方法
Sep 05 Javascript
JavaScript常用数组操作方法,包含ES6方法
May 10 Javascript
解决Vue的项目使用Element ui 走马灯无法实现的问题
Aug 03 Javascript
详解nginx配置vue h5 history去除#号
Nov 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 excel类 phpExcel使用方法介绍
2010/08/21 PHP
PHP实现的简易版图片相似度比较
2015/01/07 PHP
Symfony数据校验方法实例分析
2015/01/26 PHP
laravel批量生成假数据的方法
2019/10/09 PHP
JQUERY获取form表单值的代码
2010/07/17 Javascript
Jquery增加鼠标中间功能mousewheel的实例代码
2013/09/05 Javascript
JavaScript中object和Object的区别(详解)
2017/02/27 Javascript
JavaScript正则表达式校验与递归函数实际应用实例解析
2017/08/04 Javascript
利用SpringMVC过滤器解决vue跨域请求的问题
2018/02/10 Javascript
Angular @HostBinding()和@HostListener()用法
2018/03/05 Javascript
vue通过指令(directives)实现点击空白处收起下拉框
2018/12/06 Javascript
JS实现二维数组元素的排列组合运算简单示例
2019/01/28 Javascript
JavaScript实现网页下拉菜单效果
2020/11/20 Javascript
nodejs中的异步编程知识点详解
2021/01/17 NodeJs
[01:08]2014DOTA2展望TI 剑指西雅图LGD战队专访
2014/06/30 DOTA
在Django中创建第一个静态视图
2015/07/15 Python
基于Python实现通过微信搜索功能查看谁把你删除了
2016/01/27 Python
Python列表list解析操作示例【整数操作、字符操作、矩阵操作】
2017/07/25 Python
浅析python3字符串格式化format()函数的简单用法
2018/12/07 Python
Python实用工具FuckIt.py介绍
2019/07/02 Python
Django框架之登录后自定义跳转页面的实现方法
2019/07/18 Python
django数据关系一对多、多对多模型、自关联的建立
2019/07/24 Python
python安装scipy的步骤解析
2019/09/28 Python
初学者学习Python好还是Java好
2020/05/26 Python
pyqt5实现井字棋的示例代码
2020/12/07 Python
基于pycharm 项目和项目文件命名规则的介绍
2021/01/15 Python
如何让IE9以下版本(ie6/7/8)认识html5元素
2013/04/01 HTML / CSS
英国广泛的照明产品网站:Lights4living
2018/01/28 全球购物
卡骆驰新加坡官网:Crocs新加坡
2018/06/12 全球购物
白血病捐款倡议书
2014/05/14 职场文书
2014年敬老院工作总结
2014/12/08 职场文书
家长高考寄语
2015/02/27 职场文书
2016年离婚协议书范文
2016/03/18 职场文书
详解MySQL中的pid与socket
2021/06/15 MySQL
Python IO文件管理的具体使用
2022/03/20 Python
python APScheduler执行定时任务介绍
2022/04/19 Python