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 相关文章推荐
Gird组件 Part-3:范例RSSFeed Viewer
Mar 10 Javascript
javascript 动态添加事件代码
Nov 30 Javascript
js时钟翻牌效果实现代码分享
Jul 31 Javascript
jQuery实现的多级下拉菜单效果代码
Aug 24 Javascript
js弹出对话框方式小结
Nov 17 Javascript
Bootstrap 3的box-sizing样式导致UEditor控件的图片无法正常缩放的解决方案
Sep 15 Javascript
微信js-sdk分享功能接口常用逻辑封装示例
Oct 13 Javascript
js实时获取窗口大小变化的实例代码
Nov 18 Javascript
如何快速上手Vuex
Feb 14 Javascript
ajax实现加载页面、删除、查看详细信息 bootstrap美化页面!
Mar 14 Javascript
Vue实现表格批量审核功能实例代码
May 28 Javascript
解决Vue @submit 提交后不刷新页面问题
Jul 18 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
thinkphp学习笔记之多表查询
2014/07/28 PHP
Zend Framework入门教程之Zend_Mail用法示例
2016/12/08 PHP
js右键菜单效果代码
2007/07/21 Javascript
jQuery 技巧大全(新手入门篇)
2009/05/12 Javascript
JavaScript高级程序设计阅读笔记(六) ECMAScript中的运算符(二)
2012/02/27 Javascript
js新闻滚动 js如何实现新闻滚动效果
2013/01/07 Javascript
如何通过javascript操作web控件的自定义属性
2013/11/25 Javascript
jquery实现当滑动到一定位置时固定效果
2014/06/17 Javascript
Node.js实现批量去除BOM文件头
2014/12/20 Javascript
JavaScript实现身份证验证代码
2016/02/17 Javascript
js获取浏览器高度 窗口高度 元素尺寸 偏移属性的方法
2016/11/21 Javascript
Vue数据驱动模拟实现3
2017/01/11 Javascript
Angular X中使用ngrx的方法详解(附源码)
2017/07/10 Javascript
JavaScript实现各种排序的代码详解
2017/08/28 Javascript
从零开始最小实现react服务器渲染详解
2018/01/26 Javascript
Angular6 用户自定义标签开发的实现方法
2019/01/08 Javascript
[03:54]DOTA2英雄梦之声_第06期_昆卡
2014/06/23 DOTA
[02:17]DOTA2亚洲邀请赛 RAVE战队出场宣传片
2015/02/07 DOTA
Python3实现从文件中读取指定行的方法
2015/05/22 Python
Python使用面向对象方式创建线程实现12306售票系统
2015/12/24 Python
浅析Python中else语句块的使用技巧
2016/06/16 Python
Python常用库大全及简要说明
2020/01/17 Python
python实现一个简单RPC框架的示例
2020/10/28 Python
你可能不熟练的十个前端HTML5经典面试题
2018/07/03 HTML / CSS
罗德与泰勒百货官网:Lord & Taylor
2016/08/12 全球购物
阿迪达斯丹麦官网:adidas丹麦
2016/10/01 全球购物
.NET面试问题集
2015/12/08 面试题
Linux的文件类型
2012/03/07 面试题
Java中的类包括什么内容?设计时要注意哪些方面
2012/05/23 面试题
高三历史教学反思
2014/01/09 职场文书
读书之星事迹材料
2014/05/12 职场文书
小学生倡议书范文
2014/05/13 职场文书
求职自我推荐信
2014/06/25 职场文书
幼儿园校车安全责任书
2015/05/08 职场文书
三八妇女节主持词
2015/07/04 职场文书
唱歌比赛拉拉队口号
2015/12/25 职场文书