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中的onkeyup和onkeydown区别介绍
Apr 28 Javascript
javacript使用break内层跳出外层循环分析
Jan 12 Javascript
javascript框架设计之类工厂
Jun 23 Javascript
jQuery实现动态添加和删除一个div
Aug 12 Javascript
js实现的简单radio背景颜色选择器代码
Aug 18 Javascript
AngularJS利用Controller完成URL跳转
Aug 09 Javascript
使用node.js中的Buffer类处理二进制数据的方法
Nov 26 Javascript
JavaScript创建对象的七种方式(推荐)
Jun 26 Javascript
基于axios封装fetch方法及调用实例
Feb 05 Javascript
JS实现换肤功能的方法实例详解
Jan 30 Javascript
vue项目中在可编辑div光标位置插入内容的实现代码
Jan 07 Javascript
Vue组件生命周期运行原理解析
Nov 25 Vue.js
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
超神学院:鹤熙已踏入神圣领域,实力不比凯莎弱
2020/03/02 国漫
PHP实现图片不变型裁剪及图片按比例裁剪的方法
2016/01/14 PHP
php reset() 函数指针指向数组中的第一个元素并输出实例代码
2016/11/21 PHP
php 运算符与表达式详细介绍
2016/11/30 PHP
js判断一个元素是否为另一个元素的子元素的代码
2012/03/21 Javascript
js不完美解决click和dblclick事件冲突问题
2012/07/16 Javascript
js/jquery获取浏览器窗口可视区域高度和宽度以及滚动条高度实现代码
2012/12/17 Javascript
javascript中处理时间戳为日期格式的方法
2014/01/02 Javascript
浅析jquery的js图表组件highcharts
2014/03/06 Javascript
JQuery鼠标移到小图显示大图效果的方法
2015/06/10 Javascript
js控制多图左右滚动切换效果代码分享
2015/08/26 Javascript
判断数组的最佳方法(推荐)
2016/10/11 Javascript
jquery配合.NET实现点击指定绑定数据并且能够一键下载
2016/10/28 Javascript
浅谈js函数三种定义方式 & 四种调用方式 & 调用顺序
2017/02/19 Javascript
jquery.rotate.js实现可选抽奖次数和中奖内容的转盘抽奖代码
2017/08/23 jQuery
jQuery实现简单复制json对象和json对象集合操作示例
2018/07/09 jQuery
Vue使用vue-recoure + http-proxy-middleware + vuex配合promise实现基本的跨域请求封装
2019/10/21 Javascript
JavaScript装饰者模式原理与用法实例详解
2020/03/09 Javascript
[52:20]VP vs VG Supermajor小组赛 B组胜者组决赛 BO3 第一场 6.2
2018/06/03 DOTA
python网络编程学习笔记(七):HTML和XHTML解析(HTMLParser、BeautifulSoup)
2014/06/09 Python
Python的加密模块md5、sha、crypt使用实例
2014/09/28 Python
Python 爬虫图片简单实现
2017/06/01 Python
django-allauth入门学习和使用详解
2019/07/03 Python
带你彻底搞懂python操作mysql数据库(cursor游标讲解)
2020/01/06 Python
pycharm工具连接mysql数据库失败问题
2020/04/01 Python
基于plt.title无法显示中文的快速解决
2020/05/16 Python
python numpy矩阵信息说明,shape,size,dtype
2020/05/22 Python
HTML5 script元素async、defer异步加载使用介绍
2013/08/23 HTML / CSS
优衣库台湾官网:UNIQLO台湾
2019/02/01 全球购物
意大利领先的奢侈品在线时装零售商:MCLABELS
2020/10/13 全球购物
婚礼司仪主持词
2014/03/14 职场文书
教学改革实施方案
2014/03/31 职场文书
商业融资计划书
2014/04/29 职场文书
如何制定销售人员薪酬制度?
2019/07/09 职场文书
Go 语言结构实例分析
2021/07/04 Golang
PC版《死亡搁浅导剪版》现已发售 展开全新的探险
2022/04/03 其他游戏