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选择子控件"大于号"和" "区别介绍及使用示例
Jun 25 Javascript
js 实现 input type="file" 文件上传示例代码
Aug 07 Javascript
文本框只能选择数据到文本框禁止手动输入
Nov 22 Javascript
PhantomJS快速入门教程(服务器端的 JavaScript API 的 WebKit)
Aug 06 Javascript
谈谈对offsetleft兼容性的理解
Nov 11 Javascript
jQuery元素属性操作实例(设置、获取及删除元素属性)
Sep 08 Javascript
js实现右键自定义菜单
Dec 03 Javascript
基于iScroll实现内容滚动效果
Mar 21 Javascript
js删除对象/数组中null、undefined、空对象及空数组方法示例
Nov 14 Javascript
vsCode安装使用教程和插件安装方法
Aug 24 Javascript
Javascript的this详解
Mar 23 Javascript
vue 父组件中调用子组件函数的方法
Jun 06 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数据库的查询统计速度 select 索引应用
2007/04/11 PHP
PHPMailer发送HTML内容、带附件的邮件实例
2014/07/01 PHP
Laravel获取所有的数据库表及结构的方法
2019/10/10 PHP
JScript中的undefined和"undefined"的区别
2007/03/08 Javascript
JavaScript 三种创建对象的方法
2009/10/16 Javascript
JavaScript 直接操作本地文件的实现代码
2009/12/01 Javascript
JavaScript制作的可折叠弹出式菜单示例
2014/04/04 Javascript
JS实现跟随鼠标闪烁转动色块的方法
2015/02/26 Javascript
分享Javascript实用方法二
2015/12/13 Javascript
JavaScript学习笔记之数组去重
2016/03/23 Javascript
js阻止默认浏览器行为与冒泡行为的实现代码
2016/05/15 Javascript
js 定位到某个锚点的方法
2016/11/19 Javascript
webpack配置文件和常用配置项介绍
2017/04/28 Javascript
jquery点赞功能实现代码 点个赞吧!
2020/05/29 jQuery
Vue通过input筛选数据
2020/10/26 Javascript
Vue数组更新及过滤排序功能
2017/08/10 Javascript
AngularJS 打开新的标签页实现代码
2017/09/07 Javascript
使用jQuery实现两个div中按钮互换位置的实例代码
2017/09/21 jQuery
深入浅析Vue.js 中的 v-for 列表渲染指令
2018/11/19 Javascript
vue ssr 实现方式(学习笔记)
2019/01/18 Javascript
node基于async/await对mysql进行封装
2019/06/20 Javascript
使用原生JS实现滚轮翻页效果的示例代码
2020/05/31 Javascript
[04:29]DOTA2亚洲邀请赛小组赛第一日 TOP10精彩集锦
2015/02/01 DOTA
Python标准库使用OrderedDict类的实例讲解
2019/02/14 Python
Python统计一个字符串中每个字符出现了多少次的方法【字符串转换为列表再统计】
2019/05/05 Python
Application Cache未缓存文件无法访问无法加载问题
2014/05/31 HTML / CSS
SportsDirect.com新加坡:英国第一体育零售商
2019/03/30 全球购物
消防先进事迹材料
2014/02/10 职场文书
刚毕业大学生自荐信范文
2014/02/20 职场文书
神龙架导游词
2015/02/11 职场文书
教师学期末个人总结
2015/02/13 职场文书
雷锋的观后感
2015/06/10 职场文书
学校安全管理制度
2015/08/06 职场文书
法制教育讲座心得体会
2016/01/14 职场文书
土木工程生产实习心得体会
2016/01/22 职场文书
Python实现8种常用抽样方法
2021/06/27 Python