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 22 Javascript
javascript搜索框效果实现方法
May 14 Javascript
jQuery实现瀑布流布局详解(PC和移动端)
Sep 01 Javascript
confirm确认对话框的实现方法总结
Jun 17 Javascript
高效Web开发的10个jQuery代码片段
Jul 22 Javascript
微信小程序 图片宽度自适应的实现
Apr 06 Javascript
微信小程序获取微信运动步数的实例代码
Jul 20 Javascript
vue实现单选和多选功能
Aug 11 Javascript
微信小程序wx.request实现后台数据交互功能分析
Nov 25 Javascript
angular6.x中ngTemplateOutlet指令的使用示例
Aug 09 Javascript
用js简单提供增删改查接口
May 12 Javascript
js+css实现全屏侧边栏
Jun 16 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实现在服务器上创建目录的方法
2015/03/16 PHP
Ajax请求PHP后台接口返回信息的实例代码
2018/08/21 PHP
[转]JS宝典学习笔记
2007/02/07 Javascript
jquery表格内容筛选实现思路及代码
2013/04/16 Javascript
jQuery中校验时间格式的正则表达式小结
2013/09/22 Javascript
javascript的创建多行字符串的7种方法
2014/04/29 Javascript
用Jquery选择器计算table中的某一列某一行的合计
2014/08/13 Javascript
控制台报错object is not a function的解决方法
2014/08/24 Javascript
JavaScript中使用typeof运算符需要注意的几个坑
2014/11/08 Javascript
Javascript 拖拽雏形中的一些问题(逐行分析代码,让你轻松了拖拽的原理)
2015/01/23 Javascript
jquery实现用户打分评分特效
2015/05/28 Javascript
JQuery Mobile实现导航栏和页脚
2016/03/09 Javascript
基于BootStrap Metronic开发框架经验小结【九】实现Web页面内容的打印预览和保存操作
2016/05/12 Javascript
浅谈layer的iframe弹窗给里面的标签赋值的问题
2016/11/10 Javascript
Bootstrap popover用法详解
2016/12/22 Javascript
网页中的图片查看器viewjs使用方法
2017/07/11 Javascript
js实现图片懒加载效果
2017/07/17 Javascript
vue 右键菜单插件 简单、可扩展、样式自定义的右键菜单
2018/11/29 Javascript
OpenLayers3实现图层控件功能
2020/09/25 Javascript
解决iView Table组件宽度只变大不变小的问题
2020/11/13 Javascript
jenkins自动构建发布vue项目的方法步骤
2021/01/04 Vue.js
[00:27]DOTA2次级职业联赛 - Lilith战队宣传片
2014/12/01 DOTA
python使用htmllib分析网页内容的方法
2015/05/08 Python
Python中字符串对齐方法介绍
2015/05/21 Python
Python一个简单的通信程序(客户端 服务器)
2019/03/06 Python
python获取地震信息 微信实时推送
2019/06/18 Python
解决python对齐错误的方法
2020/07/16 Python
python爬虫调度器用法及实例代码
2020/11/30 Python
video下autoplay属性无效的解决方法(添加muted属性)
2020/05/19 HTML / CSS
大学生应聘自荐信
2013/10/11 职场文书
播音主持专业个人自我评价
2014/01/09 职场文书
工会主席岗位责任制
2014/02/11 职场文书
教师纪念9.18事件演讲稿范文
2014/09/14 职场文书
公积金贷款承诺书
2015/04/30 职场文书
信息简报范文
2015/07/21 职场文书
mysql优化
2021/04/06 MySQL