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 相关文章推荐
网页常用特效代码整理
Jun 23 Javascript
js+CSS 图片等比缩小并垂直居中实现代码
Dec 01 Javascript
JavaScript Cookie 直接浏览网站分网址
Dec 08 Javascript
jquery改变tr背景色的示例代码
Dec 28 Javascript
ExtJS4如何给同一个formpanel不同的url
May 02 Javascript
再分享70+免费的jquery 图片滑块效果插件和教程
Dec 15 Javascript
JavaScript实现时间倒计时跳转(推荐)
Jun 28 Javascript
AngularJs 指令详解及示例代码
Sep 01 Javascript
javascript表单正则应用
Feb 04 Javascript
基于Vue实现关键词实时搜索高亮显示关键词
Jul 21 Javascript
JS隐藏号码中间4位代码实例
Apr 09 Javascript
vue之组件内监控$store中定义变量的变化详解
Nov 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中防止SQL注入最好的方法是什么
2013/06/10 PHP
在PHP程序中使用Rust扩展的方法
2015/07/03 PHP
php验证身份证号码正确性的函数
2016/07/20 PHP
Laravel框架FormRequest中重写错误处理的方法
2019/02/18 PHP
在laravel中使用with实现动态添加where条件
2019/10/10 PHP
一款js和css代码压缩工具[附JAVA环境配置方法]
2010/04/16 Javascript
IE6不能修改NAME问题的解决方法
2010/09/03 Javascript
JS getAttribute和setAttribute(取得和设置属性)的使用介绍
2013/07/10 Javascript
浅析JQuery UI Dialog的样式设置问题
2013/12/18 Javascript
IE中鼠标经过option触发mouseout的解决方法
2015/01/29 Javascript
浅谈jquery中delegate()与live()
2015/06/22 Javascript
jQuery Easyui使用(一)之可折叠面板的布局手风琴菜单
2016/08/17 Javascript
javascript实现复选框全选或反选
2017/02/04 Javascript
jQuery插件form-validation-engine正则表达式操作示例
2017/02/09 Javascript
微信小程序 两种为对象属性赋值的方式详解
2017/02/23 Javascript
基于Vue框架vux组件库实现上拉刷新功能
2017/11/28 Javascript
layui form表单提交之后重新加载数据表格的方法
2019/09/11 Javascript
layer.confirm()右边按钮实现href的例子
2019/09/27 Javascript
js实现删除json中指定的元素
2020/09/22 Javascript
[00:32]10月24、25日 辉夜杯外卡赛附加赛开赛!
2015/10/23 DOTA
python调用cmd命令行制作刷博器
2014/01/13 Python
Python实现k-means算法
2018/02/23 Python
在python中利用KNN实现对iris进行分类的方法
2018/12/11 Python
在Python中如何传递任意数量的实参的示例代码
2019/03/21 Python
python基于SMTP协议发送邮件
2019/05/31 Python
Python 使用folium绘制leaflet地图的实现方法
2019/07/05 Python
django使用haystack调用Elasticsearch实现索引搜索
2019/07/24 Python
Python线上环境使用日志的及配置文件
2019/07/28 Python
使用html5 canvas创建太空游戏的示例
2014/05/08 HTML / CSS
电脑销售顾问自荐信
2014/01/29 职场文书
大二法学专业职业生涯规划范文
2014/02/12 职场文书
黄金搭档广告词
2014/03/21 职场文书
领导班子整改方案和个人整改措施
2014/10/25 职场文书
家属慰问信
2015/02/14 职场文书
劳动者解除劳动合同通知书
2015/04/16 职场文书
Vite + React从零开始搭建一个开源组件库
2022/06/25 Javascript