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 Hack
Jul 24 Javascript
div+css+js实现无缝滚动类似marquee无缝滚动兼容firefox
Aug 29 Javascript
javascript实现原生ajax的几种方法介绍
Sep 21 Javascript
js统计录入文本框中字符的个数并加以限制不超过多少
May 23 Javascript
JS动态加载脚本并执行回调操作
Aug 24 Javascript
AngularJS入门教程之数据绑定原理详解
Nov 02 Javascript
JS对象深度克隆实例分析
Mar 16 Javascript
深入理解React高阶组件
Sep 28 Javascript
webpack项目调试以及独立打包配置文件的方法
Feb 28 Javascript
bootstrap table合并行数据并居中对齐效果
Oct 17 Javascript
微信小程序如何使用canvas二维码保存至手机相册
Jul 15 Javascript
weui上传多图片,压缩,base64编码的示例代码
Jun 22 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正则过滤html标签、空格、换行符的代码(附说明)
2010/10/25 PHP
PHP header()函数使用详细(301、404等错误设置)
2013/04/17 PHP
php对数组内元素进行随机调换的方法
2015/05/12 PHP
php抓取网站图片并保存的实现方法
2015/10/29 PHP
JavaScript Event学习补遗 addEventSimple
2010/02/11 Javascript
jQuery学习笔记(3)--用jquery(插件)实现多选项卡功能
2013/04/08 Javascript
如何让页面加载完成后执行js
2013/06/26 Javascript
js兼容火狐获取图片宽和高的方法
2015/05/21 Javascript
JavaScript的Ext JS框架中的GridPanel组件使用指南
2016/05/21 Javascript
JavaScript对象引用与赋值实例详解
2017/03/15 Javascript
微信小程序实现打开内置地图功能【附源码下载】
2017/12/07 Javascript
Vue render深入开发讲解
2018/04/13 Javascript
你不知道的SpringBoot与Vue部署解决方案
2020/11/09 Javascript
[02:05]2014DOTA2西雅图邀请赛 老队长全明星大猜想谁不服就按进显示器
2014/07/08 DOTA
Python和Ruby中each循环引用变量问题(一个隐秘BUG?)
2014/06/04 Python
python进阶教程之异常处理
2014/08/30 Python
Python实现购物车购物小程序
2018/04/18 Python
python生成九宫格图片
2018/11/19 Python
解决python3中的requests解析中文页面出现乱码问题
2019/04/19 Python
Python实现Singleton模式的方式详解
2019/08/08 Python
python 递归调用返回None的问题及解决方法
2020/03/16 Python
浅析Python 条件控制语句
2020/07/15 Python
python3.8动态人脸识别的实现示例
2020/09/21 Python
scrapy头部修改的方法详解
2020/12/06 Python
.NET里面如何取得当前的屏幕分辨率
2012/12/06 面试题
资产经营总监岗位职责
2013/12/04 职场文书
毕业生自荐书模版
2014/01/04 职场文书
《小松树和大松树》教学反思
2014/02/20 职场文书
项目建议书怎么写
2014/05/15 职场文书
法院四风对照检查材料思想汇报
2014/10/06 职场文书
工作检讨书怎么写
2014/10/10 职场文书
2014年政府采购工作总结
2014/12/09 职场文书
给老师的保证书怎么写
2015/05/09 职场文书
2015年学校办公室主任工作总结
2015/07/20 职场文书
解析高可用Redis服务架构分析与搭建方案
2021/06/20 Redis
德生BCL3000抢先使用感受和评价
2022/04/07 无线电