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 相关文章推荐
JMenuTab简单使用说明
Mar 13 Javascript
超简单的jquery的AJAX用法
May 10 Javascript
node.js中的emitter.emit方法使用说明
Dec 10 Javascript
使用JavaScript开发IE浏览器本地插件实例
Feb 18 Javascript
jQuery往textarea中光标所在位置插入文本的方法
Jun 26 Javascript
jQuery中serializeArray()与serialize()的区别实例分析
Dec 09 Javascript
JavaScript中的函数(二)
Dec 23 Javascript
微信小程序 支付功能开发错误总结
Feb 21 Javascript
node.js+jQuery实现用户登录注册AJAX交互
Apr 28 jQuery
微信小程序组件之srcoll-view的详解
Oct 19 Javascript
es5 类与es6中class的区别小结
Nov 09 Javascript
一篇文章了解正则表达式的替换技巧
Feb 24 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
丧钟首部独立剧集《丧钟:骑士与龙》北美正式开播,场面血腥
2020/04/09 欧美动漫
PHP 小心urldecode引发的SQL注入漏洞
2011/10/27 PHP
php 命名空间(namespace)原理与用法实例小结
2019/11/13 PHP
jquery 1.4.2发布!主要是性能与API
2010/02/25 Javascript
js客户端快捷键管理类的较完整实现和应用
2010/06/08 Javascript
Jquery实现三层遍历删除功能代码
2013/04/23 Javascript
javascript获取select的当前值示例代码(兼容IE/Firefox/Opera/Chrome)
2013/12/17 Javascript
基于jQuery的图片不完全按比例自动缩小
2014/07/11 Javascript
基于jQuery实现仿百度首页换肤背景图片切换代码
2015/08/25 Javascript
JS获取及验证开始结束日期的方法
2016/08/20 Javascript
详解webpack es6 to es5支持配置
2017/05/04 Javascript
Windows安装Node.js报错:2503、2502的解决方法
2017/10/25 Javascript
Vue实现购物车场景下的应用
2017/11/27 Javascript
微信小程序中使用自定义图标(阿里icon)的方法
2018/08/20 Javascript
Vuex的基本概念、项目搭建以及入坑点
2018/11/04 Javascript
vue从一个页面跳转到另一个页面并携带参数的解决方法
2019/08/12 Javascript
原生JS实现拖拽功能
2020/12/16 Javascript
在Django的上下文中设置变量的方法
2015/07/20 Python
python 删除大文件中的某一行(最有效率的方法)
2017/08/19 Python
Python通过matplotlib绘制动画简单实例
2017/12/13 Python
分析python请求数据
2018/08/19 Python
selenium 安装与chromedriver安装的方法步骤
2019/06/12 Python
用Python识别人脸,人种等各种信息
2019/07/15 Python
python中的线程threading.Thread()使用详解
2019/12/17 Python
css3气泡 css3关键帧动画创建的动态通知气泡
2013/02/26 HTML / CSS
AmazeUI 按钮交互的实现示例
2020/08/24 HTML / CSS
法国时尚童装网站:Melijoe
2016/08/10 全球购物
印度在线杂货店:bigbasket
2018/08/23 全球购物
汉语专业应届生求职信
2013/10/01 职场文书
广告设计专业自荐信范文
2013/11/14 职场文书
教师申诉制度
2014/01/29 职场文书
个人四风对照检查材料
2014/09/26 职场文书
教师批评与自我批评(群众路线)
2014/10/15 职场文书
nginx配置ssl实现https的方法示例
2021/03/31 Servers
python3 hdf5文件 遍历代码
2021/05/19 Python
解决mysql:ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO/YES)
2021/06/26 MySQL