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 相关文章推荐
checkbox全选/取消全选以及checkbox遍历jQuery实现代码
Dec 02 Javascript
javascript中的变量作用域以及变量提升详细介绍
Oct 24 Javascript
解析URI与URL之间的区别与联系
Nov 22 Javascript
jquery限定文本框只能输入数字(整数和小数)
Jan 08 Javascript
基于jquery实现图片上传本地预览功能
Jan 08 Javascript
angularjs+bootstrap实现自定义分页的实例代码
Jun 19 Javascript
浅谈Node异步编程的机制
Oct 18 Javascript
分析javascript原型及原型链
Mar 18 Javascript
JavaScript实现选项卡效果的分析及步骤
Apr 16 Javascript
JS算法题之查找数字在数组中的索引位置
May 15 Javascript
详解Vue的七种传值方式
Feb 08 Vue.js
JS+CSS实现动态时钟
Feb 19 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
第五节--克隆
2006/11/16 PHP
Zend的Registry机制的使用说明
2013/05/02 PHP
PHP unlink与rmdir删除目录及目录下所有文件实例代码
2018/02/07 PHP
PHP实现的超长文本分页显示功能示例
2018/06/04 PHP
js 获取子节点函数 (兼容FF与IE)
2010/04/18 Javascript
jquery操作下拉列表、文本框、复选框、单选框集合(收藏)
2014/01/08 Javascript
js实现背景图片感应鼠标变化的方法
2015/02/28 Javascript
js 获取元素在页面上的偏移量的方法汇总
2015/04/13 Javascript
动态加载jQuery的方法
2015/06/16 Javascript
JavaScript实现把数字转换成中文
2015/06/29 Javascript
关于JavaScript作用域你想知道的一切
2016/02/04 Javascript
javascript验证手机号和实现星号(*)代替实例
2016/08/16 Javascript
javascript实现鼠标点击页面 移动DIV
2016/12/02 Javascript
jquery Form轻松实现文件上传
2017/05/24 jQuery
Angular 4 指令快速入门教程
2017/06/07 Javascript
nodejs搭建本地服务器轻松解决跨域问题
2018/03/21 NodeJs
vue中使用heatmapjs的示例代码(结合百度地图)
2018/09/05 Javascript
微信小程序后台持续定位功能使用详解
2019/08/23 Javascript
Vue实例的对象参数options的几个常用选项详解
2019/11/08 Javascript
vscode 插件开发 + vue的操作方法
2020/06/05 Javascript
完美解决通过IP地址访问VUE项目的问题
2020/07/18 Javascript
[02:02]DOTA2英雄基础教程 斯拉达
2013/12/11 DOTA
[59:08]Ti4 冒泡赛第二天 NEWBEE vs Titan 2
2014/07/15 DOTA
python基本语法练习实例
2017/09/19 Python
Python字典数据对象拆分的简单实现方法
2017/12/05 Python
python中文乱码不着急,先看懂字节和字符
2017/12/20 Python
python操作oracle的完整教程分享
2018/01/30 Python
django admin组件使用方法详解
2019/07/19 Python
python deque模块简单使用代码实例
2020/03/12 Python
C,C++的几个面试题小集
2013/07/13 面试题
初中生三年学习生活的自我评价
2013/11/03 职场文书
汽车维修工岗位职责
2014/02/12 职场文书
停车场管理协议书范本
2014/10/08 职场文书
2014法制宣传日活动总结范文
2014/11/01 职场文书
四风之害观后感
2015/06/09 职场文书
Python基于百度API识别并提取图片中文字
2021/06/27 Python