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 相关文章推荐
AJAX 网页保留浏览器前进后退等功能
Feb 12 Javascript
利用js判断浏览器类型(是否为IE,Firefox,Opera浏览器)
Nov 22 Javascript
jQuery中removeProp()方法用法实例
Jan 05 Javascript
JavaScript模块规范之AMD规范和CMD规范
Oct 27 Javascript
[原创]JQuery 在表单提交之前修改 提交的值
Apr 14 Javascript
JavaScript中数组slice和splice的对比小结
Sep 22 Javascript
js 转json格式的字符串为对象或数组(前后台)的方法
Nov 02 Javascript
AngularJS实现在ng-Options加上index的解决方法
Nov 03 Javascript
使用grunt合并压缩js和css文件的方法
Mar 02 Javascript
JS基于正则实现数字千分位用逗号分隔的方法
Jun 16 Javascript
vue 组件高级用法实例详解
Apr 11 Javascript
axios异步提交表单数据的几种方法
Aug 11 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
收音机发烧友应当熟知的100条知识
2021/03/02 无线电
php中通过虚代理实现延迟加载的实现代码
2011/06/10 PHP
php银联网页支付实现方法
2015/03/04 PHP
PHP判断IP并转跳到相应城市分站的方法
2015/03/25 PHP
PHP超牛逼无限极分类生成树方法
2015/05/11 PHP
CodeIgniter 完美解决URL含有中文字符串
2016/05/13 PHP
JavaScript 模仿vbs中的 DateAdd() 函数的代码
2007/08/13 Javascript
比较详细的关于javascript 解析json的代码
2009/12/16 Javascript
JavaScript下通过的XMLHttpRequest发送请求的代码
2011/06/28 Javascript
JQuery打造省市下拉框联动效果
2014/05/18 Javascript
简介JavaScript中的setDate()方法的使用
2015/06/11 Javascript
jquery实现点击展开列表同时隐藏其他列表
2015/08/10 Javascript
解析Node.js异常处理中domain模块的使用方法
2016/02/16 Javascript
Bootstrap中的Panel和Table全面解析
2016/06/13 Javascript
jQuery扩展_动力节点Java学院整理
2017/07/05 jQuery
nodejs判断文件、文件夹是否存在及删除的方法
2017/11/10 NodeJs
利用canvas中toDataURL()将图片转为dataURL(base64)的方法详解
2017/11/20 Javascript
详解在React里使用"Vuex"
2018/04/02 Javascript
实例讲解v-if和v-show的区别
2019/01/31 Javascript
微信小程序基于picker实现级联菜单
2019/02/15 Javascript
vue使用localStorage保存登录信息 适用于移动端、PC端
2019/05/27 Javascript
Vue的状态管理vuex使用方法详解
2020/02/05 Javascript
jQuery HTML设置内容和属性操作实例分析
2020/05/20 jQuery
python网络编程学习笔记(九):数据库客户端 DB-API
2014/06/09 Python
scrapy spider的几种爬取方式实例代码
2018/01/25 Python
python os.listdir按文件存取时间顺序列出目录的实例
2018/10/21 Python
Python发送邮件测试报告操作实例详解
2018/12/08 Python
详解python编译器和解释器的区别
2019/06/24 Python
python 实现二维字典的键值合并等函数
2019/12/06 Python
澳大利亚连衣裙和女装在线:Esther
2017/11/11 全球购物
英国拳击装备购物网站:RDX Sports
2018/01/23 全球购物
Ralph Lauren意大利官方网站:时尚界最负盛名的品牌之一
2018/10/18 全球购物
Hanro官网:奢华男士和女士内衣、睡衣和家居服
2018/10/25 全球购物
SportsDirect.com新加坡:英国第一体育零售商
2019/03/30 全球购物
安全教育的主题班会
2015/08/13 职场文书
人生哲理妙语30条:淡写流年,笑过人生
2019/09/04 职场文书