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 相关文章推荐
excel操作之Add Data to a Spreadsheet Cell
Jun 12 Javascript
JavaScript 动态将数字金额转化为中文大写金额
May 14 Javascript
ListBox实现上移,下移,左移,右移的简单实例
Feb 13 Javascript
使用mini-define实现前端代码的模块化管理
Dec 25 Javascript
Spring mvc 接收json对象
Dec 10 Javascript
JavaScript仿flash遮罩动画效果
Jun 15 Javascript
js时间控件只显示年月
Jan 08 Javascript
JS实现DOM删除节点操作示例
Apr 04 Javascript
使用node.js实现微信小程序实时聊天功能
Aug 13 Javascript
详解django模板与vue.js冲突问题
Jul 07 Javascript
nodemon实现Typescript项目热更新的示例代码
Nov 19 Javascript
微信小程序实现单个卡片左滑显示按钮并防止上下滑动干扰功能
Dec 06 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
火车头采集器3.0采集图文教程
2007/03/17 PHP
ThinkPHP令牌验证实例
2014/06/18 PHP
php Imagick获取图片RGB颜色值
2014/07/28 PHP
Yii实现多数据库主从读写分离的方法
2014/12/29 PHP
PHP查看SSL证书信息的方法
2016/09/22 PHP
PHP中使用OpenSSL生成证书及加密解密
2017/02/05 PHP
php和asp语法上的区别总结
2019/05/12 PHP
javascript 自定义事件初探
2009/08/21 Javascript
JavaScript DOM 学习第五章 表单简介
2010/02/19 Javascript
javascript preload&amp;lazy load
2010/05/13 Javascript
ajax处理php返回json数据的实例代码
2013/01/24 Javascript
js计算字符串长度包含的中文是utf8格式
2013/10/15 Javascript
js与C#进行时间戳转换
2014/11/14 Javascript
原生JS实现仿淘宝网左侧商品分类菜单效果代码
2015/09/10 Javascript
BootStrap table表格插件自适应固定表头(超好用)
2016/08/24 Javascript
jQuery实现输入框邮箱内容自动补全与上下翻动显示效果【附demo源码下载】
2016/09/20 Javascript
Jquery Easyui选项卡组件Tab使用详解(10)
2016/12/18 Javascript
nodejs模块nodemailer基本使用-邮件发送示例(支持附件)
2017/03/28 NodeJs
Vue 兄弟组件通信的方法(不使用Vuex)
2017/10/26 Javascript
JS实现访问DOM对象指定节点的方法示例
2018/04/04 Javascript
javascript深拷贝、浅拷贝和循环引用深入理解
2018/05/27 Javascript
vue组件化中slot的基本使用方法
2019/05/01 Javascript
Vue实现日历小插件
2019/06/26 Javascript
移动端JS实现拖拽两种方法解析
2020/10/12 Javascript
python实现百度语音识别api
2018/04/10 Python
pyspark 读取csv文件创建DataFrame的两种方法
2018/06/07 Python
ML神器:sklearn的快速使用及入门
2019/07/11 Python
聊聊python中的异常嵌套
2020/09/01 Python
新加坡网上花店:FlowerAdvisor新加坡
2018/10/05 全球购物
本科毕业生自我鉴定
2013/11/02 职场文书
积极贯彻学习两会精神总结
2014/03/17 职场文书
班级出游活动计划书
2014/08/15 职场文书
2015年优质护理服务工作总结
2015/04/08 职场文书
运动会200米广播稿
2015/08/19 职场文书
我们认为中短波广播场强仪的最佳组合
2022/04/05 无线电
Python可视化动图组件ipyvizzu绘制惊艳的可视化动图
2022/04/21 Python