Openlayers实现扩散的动态点(水纹效果)


Posted in Javascript onAugust 17, 2020

本文实例为大家分享了Openlayers实现扩散的动态点的具体代码,供大家参考,具体内容如下

在openlayers中制作危险源标识可以需要动态扩散的点(有很多种方法 可以加入jpg动图,也可以写css动画) 这里提供一种思路用openlayer自带的方法写 并给予详细的方法注释供初学者学习 (所有jar包都是在线的代码可以复制过去直接用)

<!DOCTYPE html>
<html>
 <head>
  <title>Icon Symbolizer</title>
  <link rel="stylesheet" href="https://openlayers.org/en/v3.20.1/css/ol.css" rel="external nofollow" type="text/css">
  <script src="https://cdn.polyfill.io/v2/polyfill.min.js?features=requestAnimationFrame,Element.prototype.classList,URL"></script>
  <script src="https://openlayers.org/en/v3.20.1/build/ol.js"></script>
  <script src="https://code.jquery.com/jquery-2.2.3.min.js"></script>
  <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" rel="external nofollow" >
  <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"></script>
  <style>
   #map {
    position: relative;
   }
   #popup {
    cursor: pointer;
   }
  </style>
 </head>
 <body>
  <div id="map" class="map"></div>
 <div id="styleType">
  
 </div>
  <script>
    //水纹扩散
 var bingMap = new ol.layer.Tile({
   source :new ol.source.XYZ({
   crossOrigin: 'anonymous',
    url:'http://www.google.cn/maps/vt?lyrs=m@189&gl=cn&x={x}&y={y}&z={z}'
    })
 });
 var map = new ol.Map({
    layers: [bingMap],
    target: 'map',
    view: new ol.View({
     center: ol.proj.transform([112.91, 28.21], 'EPSG:4326', 'EPSG:3857'),
     zoom: 5
    })
   });

   var source = new ol.source.Vector({
    wrapX: false
   });
   var vector = new ol.layer.Vector({
    source: source
   });
   map.addLayer(vector);

   function addRandomFeature() {
    var geom = new ol.geom.Point(ol.proj.fromLonLat([112.91, 28.21]));
    var feature = new ol.Feature(geom);
    source.addFeature(feature);
   }

   var duration = 1000;


   function flash(feature) {
    var start = new Date().getTime();
 //进行地图水波渲染
    var listenerKey = map.on('postcompose', animate);
    
    function animate(event) {
  //获取几何图形
     var vectorContext = event.vectorContext;
  //获取当前渲染帧状态
     var frameState = event.frameState;
  //添加一个OpenLayers.Geometry几何对象
     var flashGeom = feature.getGeometry().clone();
  //渲染帧状已占时间
     var elapsed = frameState.time - start;
  //已占比率
     var elapsedRatio = elapsed / duration;
     // radius半径为5结束为30
     var radius = ol.easing.easeOut(elapsedRatio) * 25 + 5;
  //不透渐变消失
     var opacity = ol.easing.easeOut(1 - elapsedRatio);
     //Circle样式
     var style = new ol.style.Style({
      image: new ol.style.Circle({
       radius: radius,
       stroke: new ol.style.Stroke({
        color: 'rgba(255, 0, 0, ' + opacity + ')',
        width: 1 + opacity
       })
      })
     });
     //给几何图形添加样式
     vectorContext.setStyle(style);
  //将几何体渲染到画布中
     vectorContext.drawGeometry(flashGeom);
     if (elapsed > duration) {
      start = frameState.time ;
      ;
     }
     //请求地图渲染(在下一个动画帧处)
     map.render();
    }
   }
   //数据源添加图层
   source.on('addfeature', function(e) {
    flash(e.feature);
   });

  addRandomFeature() 
   </script>
 </body>
</html>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jQuery 连续列表实现代码
Dec 21 Javascript
一个很简单的jquery+xml+ajax的无刷新树结构(无css,后台是c#)
Jun 02 Javascript
js控制滚动条缓慢滚动到顶部实现代码
Mar 20 Javascript
JavaScript使用slice函数获取数组部分元素的方法
Apr 06 Javascript
JavaScript正则表达式小结(test|match|search|replace|split|exec)
Dec 08 Javascript
Vue路由切换时的左滑和右滑效果示例
May 29 Javascript
vue2.x集成百度UEditor富文本编辑器的方法
Sep 21 Javascript
eslint 的三大通用规则详解
May 16 Javascript
微信小程序 调用微信授权窗口相关问题解决
Jul 25 Javascript
浅入深出Vue之自动化路由
Aug 06 Javascript
element-ui如何防止重复提交的方法步骤
Dec 09 Javascript
使用 UniApp 实现小程序的微信登录功能
Jun 09 Javascript
openLayer4实现动态改变标注图标
Aug 17 #Javascript
openlayers4实现点动态扩散
Aug 17 #Javascript
Vue实现计算器计算效果
Aug 17 #Javascript
vue-model实现简易计算器
Aug 17 #Javascript
Vue实现手机计算器
Aug 17 #Javascript
Vuex实现购物车小功能
Aug 17 #Javascript
jquery+ajax实现异步上传文件显示进度条
Aug 17 #jQuery
You might like
Smarty foreach控制循环次数的实现详解
2013/07/03 PHP
php Imagick获取图片RGB颜色值
2014/07/28 PHP
Windows下的PHP安装pear教程
2014/10/24 PHP
使用PHP如何实现高效安全的ftp服务器(一)
2015/12/20 PHP
Symfony2安装的方法(2种方法)
2016/02/04 PHP
Jquery实现图片放大镜效果的思路及代码(自写)
2013/10/18 Javascript
JavaScript中检测变量是否存在遇到的一些问题
2013/11/11 Javascript
浅谈JavaScript函数参数的可修改性问题
2013/12/05 Javascript
javascript实现倒计时N秒后网页自动跳转代码
2014/12/11 Javascript
Node.js开源应用框架HapiJS介绍
2015/01/14 Javascript
jQuery实现带滚动导航效果的全屏滚动相册实例
2015/06/19 Javascript
jquery实现点击弹出带标题栏的弹出层(从右上角飞入)效果
2015/09/19 Javascript
AngularJS使用ngMessages进行表单验证
2015/12/27 Javascript
AngularJS初始化静态模板详解
2016/01/14 Javascript
node.js cookie-parser 中间件介绍
2016/06/06 Javascript
JavaScript类的继承方法小结【组合继承分析】
2018/07/11 Javascript
解决vue.js 数据渲染成功仍报错的问题
2018/08/25 Javascript
vue计算属性computed、事件、监听器watch的使用讲解
2019/01/21 Javascript
微信小程序网络层封装的实现(promise, 登录锁)
2019/05/08 Javascript
用Python程序抓取网页的HTML信息的一个小实例
2015/05/02 Python
深入浅析python中的多进程、多线程、协程
2016/06/22 Python
Python中asyncore异步模块的用法及实现httpclient的实例
2016/06/28 Python
在numpy矩阵中令小于0的元素改为0的实例
2019/01/26 Python
python实现简单聊天室功能 可以私聊
2019/07/12 Python
python中property和setter装饰器用法
2019/12/19 Python
PyTorch中torch.tensor与torch.Tensor的区别详解
2020/05/18 Python
Python3中的tuple函数知识点讲解
2021/01/03 Python
关于HTML5的22个初级技巧(图文教程)
2012/06/21 HTML / CSS
任意存:BOXFUL
2018/05/21 全球购物
俄罗斯购买剧院和演唱会门票网站:Parter.ru
2019/11/09 全球购物
测试工程师岗位职责
2013/11/28 职场文书
计算机专业职业规划
2014/02/28 职场文书
2015年财务科工作总结范文
2015/05/13 职场文书
幼儿园六一主持词开场白
2015/05/28 职场文书
.Net Core导入千万级数据至Mysql的步骤
2021/05/24 MySQL
redis 存储对象的方法对比分析
2021/08/02 Redis