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 相关文章推荐
javascript 支持链式调用的异步调用框架Async.Operation
Aug 04 Javascript
json的定义、标准格式及json字符串检验
May 11 Javascript
JS封装cookie操作函数实例(设置、读取、删除)
Nov 17 Javascript
JS碰撞运动实现方法详解
Dec 15 Javascript
微信小程序 增、删、改、查操作实例详解
Jan 13 Javascript
bootstrapvalidator之API学习教程
Jun 29 Javascript
原生js封装运动框架的示例讲解
Oct 01 Javascript
JavaScript数据结构之双向链表定义与使用方法示例
Oct 27 Javascript
vue 2.8.2版本配置刚进入时候的默认页面方法
Sep 21 Javascript
JavaScript变速动画函数封装添加任意多个属性
Apr 03 Javascript
浅谈对于react-thunk中间件的简单理解
May 01 Javascript
vue实现抖音时间转盘
Sep 08 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
一个PHP二维数组排序的函数分享
2014/01/17 PHP
PHP+MYSQL实现用户的增删改查
2015/03/24 PHP
Zend Framework框架路由机制代码分析
2016/03/22 PHP
PHP模糊查询的实现方法(推荐)
2016/09/06 PHP
php实现的SSO单点登录系统接入功能示例分析
2016/10/12 PHP
PHP上传图片、删除图片简单实例
2016/11/12 PHP
thinkPHP框架对接支付宝即时到账接口回调操作示例
2016/11/14 PHP
laravel5.2实现区分前后台用户登录的方法
2017/01/11 PHP
扩展easyui.datagrid,添加数据loading遮罩效果代码
2010/11/02 Javascript
页面按钮禁用与解除禁用的方法
2014/02/19 Javascript
JQuery插件iScroll实现下拉刷新,滚动翻页特效
2014/06/22 Javascript
Javascript实现Web颜色值转换
2015/02/05 Javascript
ajax+jQuery实现级联显示地址的方法
2015/05/06 Javascript
JavaScript检测上传文件大小的方法
2015/07/22 Javascript
jquery对Json的各种遍历方法总结(必看篇)
2016/09/29 Javascript
javascript 正则表达式去空行方法
2017/01/24 Javascript
nodeJS服务器的创建和重新启动的实现方法
2018/05/12 NodeJs
vue接入腾讯防水墙代码
2019/05/07 Javascript
vue.js购物车添加商品组件的方法
2019/09/17 Javascript
[43:35]TI4 循环赛第二日Liquid vs Fnatic
2014/07/11 DOTA
在Django的模板中使用认证数据的方法
2015/07/23 Python
Python文件与文件夹常见基本操作总结
2016/09/19 Python
Python实现繁体中文与简体中文相互转换的方法示例
2018/12/18 Python
20行python代码的入门级小游戏的详解
2019/05/05 Python
pyhton中__pycache__文件夹的产生与作用详解
2019/11/24 Python
np.random.seed() 的使用详解
2020/01/14 Python
Python数组拼接np.concatenate实现过程
2020/04/18 Python
python爬虫使用requests发送post请求示例详解
2020/08/05 Python
matplotlib bar()实现百分比堆积柱状图
2021/02/24 Python
Betsey Johnson官网:妖娆可爱的连衣裙及鞋子、手袋和配件
2016/12/30 全球购物
新年晚会主持词
2014/03/24 职场文书
小学五年级学生评语
2014/04/22 职场文书
解除劳动合同证明书模板
2014/11/20 职场文书
教师党员自我评价2015
2015/03/04 职场文书
涨价通知怎么写
2015/04/23 职场文书
Android 中的类文件和类加载器详情
2022/06/05 Java/Android