OpenLayers学习笔记高级篇(三、地图动画)

openlayers 雷达回波的实现 前言:本文不包含html 跟css代码 ,相关的样式调整自行编写并且处理,主要是实现一个完整的流程:点击播放,地图上响应得显示贴好的图片。首先给部分截图说明。 这里稍微解释下为啥默认是最后一个,因为公司领导这么说,我也不知道就照着来呗,要改也不是什么难题。 相关实现 观察一下相关要素,有active-class , 动态生成的时间,上一个回波,下一个回波,开始播放。我们一个个介绍。 首先该注意interval的处理,在interval 期间禁止再次点击避免过程中因为函数依赖于组件中的状态而导致出现bug。 阅读详情

在OpenLayers 3中,动画是随处可见的,比如平移地图时,地图移动会有惯性,停止移动后,还会继续沿着之前的方向移动一会。 比如下面这个demo地图具有回到原始点的功能,一个是有动画效果的,一个是没有动画效果的。我们先写出来然后做一个直接的视觉对比:

1、地图有无动画的对比:

<!doctype html>
<html xmlns=http://www.w3.org/1999/xhtml>
<head>                  
    <meta http-equiv=Content-Type content="text/html;charset=utf-8">
    <meta http-equiv=X-UA-Compatible content="IE=edge,chrome=1">
    <meta content=always name=referrer>
    <title>地图动画</title>
    <link href="css/ol.css" rel="stylesheet" type="text/css" />
    <script type="text/javascript" src="js/ol.js" charset="utf-8"></script>
    <script type="text/javascript" src="js/jquery.js" charset="utf-8"></script>
   
</head>

<body>
    <div id="map" style="width: 100%"></div>
	<!--增加两个按钮,一个演示不带动画,一个演示带动画-->
	<input type="button" value="回到原点-不带动画" onclick="backNoAnim()">
	<input type="button" value="回到原点-带动画" onclick="backWithAnim()">
<script type="text/javascript">
    var map = new ol.Map({
        layers: [
          new ol.layer.Tile({
            source: new ol.source.OSM()
          })
        ],
        target: 'map',
        view: new ol.View({
          center: ol.proj.transform(
              [120.374798,36.07316], 'EPSG:4326', 'EPSG:3857'),
          zoom: 12
        })
    });

    // 不带动画的实现
    function backNoAnim() {
    map.getView().setCenter(ol.proj.transform([120.374798,36.07316], 'EPSG:4326', 'EPSG:3857'));
    }

    // 带动画的实现
    function backWithAnim() {
        // 这是openlayers5的动画加载方式
        map.getView().animate({
        	center: ol.proj.transform(
              [120.374798,36.07316], 'EPSG:4326', 'EPSG:3857'),
          	zoom: 12
        })
        //这是openlayers3的动画加载方式
//      var pan = ol.view.animate.pan({
//	      	duration: 2000,
//	      	source: (map.getView().getCenter())
//  	});
//  	// 注意: 使用beforeRender来添加
//  	map.beforeRender(pan);
//  	// 然后才是重新设置地图中心点到原来的位置
//  	map.getView().setCenter(ol.proj.transform([120.374798,36.07316], 'EPSG:4326', 'EPSG:3857'));
    }

</script>
</body>

</html>




大家可以运行代码体验一下!

2、利用postcompose事件做动画

ol.Map的postcompose事件,这个事件在地图渲染时都会触发,而我们只要改变地图上的某个feature或者layer或者其他任何东西,就会触发重新渲染。 如果利用这个原理,我们不断的改变feature的样式,就会触发postcompose,在这个事件的监听器里再改变feature的样式,就又会触发postcompose,从而一只循环下去,出现动画效果。

<!doctype html>
<html xmlns=http://www.w3.org/1999/xhtml>
<head>                  
    <meta http-equiv=Content-Type content="text/html;charset=utf-8">
    <meta http-equiv=X-UA-Compatible content="IE=edge,chrome=1">
    <meta content=always name=referrer>
    <title>postcompose动画</title>
    <link href="css/ol.css" rel="stylesheet" type="text/css" />
    <script type="text/javascript" src="js/ol.js" charset="utf-8"></script>
    <script type="text/javascript" src="js/jquery.js" charset="utf-8"></script>
   
</head>

<body>
    <div id="map" style="width: 100%"></div>
<script type="text/javascript">
    var layer = new ol.layer.Vector({
        source: new ol.source.Vector()
    })
    var map = new ol.Map({
        layers: [
          new ol.layer.Tile({
            source: new ol.source.OSM()
          }),
          layer
        ],
        target: 'map',
        view: new ol.View({
          center: ol.proj.transform(
              [120.374798,36.07316], 'EPSG:4326', 'EPSG:3857'),
          zoom: 10
        })
    });

    var circle = new ol.Feature({
        geometry: new ol.geom.Point(ol.proj.transform(
              [120.374798,36.07316], 'EPSG:4326', 'EPSG:3857'))
    });
    circle.setStyle(new ol.style.Style({
        image: new ol.style.Circle({
            radius: 0,
            stroke: new ol.style.Stroke({
                color: 'red',
                size: 1
            })
        })
    }));
    layer.getSource().addFeature(circle);

    // 关键的地方在此:监听postcompose事件,在里面重新设置circle的样式
    var radius = 0;
    map.on('postcompose', function(){
        // 增大半径,最大20
        radius++;
        radius = radius % 20;
        // 设置样式
        circle.setStyle(new ol.style.Style({
            image: new ol.style.Circle({
                radius: radius,
                stroke: new ol.style.Stroke({
                    color: 'red',
                    size: 1
                })
            })
        }));
    })
</script>
</body>

</html>




运行看一下效果:

大家运行以后会发现有一个feature是一直闪动的。

好了,关于动画就给大家讲解到这儿了,其实API中还有很多动画效果,大家可以去查阅API然后多动手试试!

下一节我们将进行实际项目中Geoserver发布服务和一些地图的增删改查操作的讲解,大家加油!

OpenLayers 3 之加载地图 摘要          一个加载地图的小例子,分析原理,并解析源码! 正文 例程如下: .map { height: 400px; width: 100%; } OpenLayers 3 example My Map 阅读详情

相关推荐

OpenLayers6实战,OpenLayers实现动态的雷达扫描图动画效果

本章使用OpenLayers6实现动态的雷达扫描图动画效果。使用一个灰色遮罩其他区域,留白中间的圆形,扇形自动旋转扫描整个圆形范围。注意:本章代码未使用任何第三方插件,只使用OpenLayers实现。

GIS技术方向,GIS地图技术分享(GIS入门、Openlayers教程、Leaflet教程),做最好的GIS地图开发教程。关注博主公众号:eguid 1289

基于openlayers雷达图的叠加显示

本文介绍雷达拼图在 OpenLayers 上的叠加显示,雷达拼图是由中国气象局气象探测中心在《天气雷达拼图v3.0》系统中发布的,每个观测时次一幅 PNG 透明图片。对于静态图片加载,OpenLayers 提供了 ol.source.ImageStatic 来支持,可以参考官方的 demo Image Reprojection,demo 演示了图片叠加以及投影调整的具体实现。在具体实现雷达拼图的过...

pdw521的专栏 4953

OpenLayers入门,OpenLayers实现多个轨迹运动动画效果,也可以实现二维地图迁徙图效果

上一章中,我们已经实现了单个轨迹运动动画效果。如果可以创建多个轨迹运动动画,那我们就可以使用OpenLayers实现类似echarts相同的迁徙图飞行效果。

GIS技术方向,GIS地图技术分享(GIS入门、Openlayers教程、Leaflet教程),做最好的GIS地图开发教程。关注博主公众号:eguid 3360

openlayers 入门教程(十三):动画

OpenLayers 是一款流行的JavaScript库,提供了丰富的功能来实现各种地图动画效果,包括但不限于轨迹动画、图标动画(如GIF动画)、地图平移与缩放动画、以及自定义的几何形状动画等。

大剑师兰特的GIS世界 3943

openlayers面层实时动态闪烁

openlayers 加载面要素对象,map渲染,动态闪烁效果,望有帮助

基于Visual C++和OpenGL的雷达显示系统实现

根据现代雷达装备虚拟教学、训练与科研的需要,设计并实现了一种基于Visual C-H-~,OpenGL 的光栅雷达显示系统,提出了以固定扇形画线实现扫描线余辉和雷达目标模拟的新方法.该系统操作方便、 效果逼真、运行速度快、可扩展性强.

OpenLayers学习笔记初级篇(一、地图加载)

开源的地图包做的比较优秀比较好的就是OpenLayers了,下面我将用我的学习笔记带领一些没接触过OpenLayers的同学进行学习,目前初步将学习笔记分为初级基础篇,中级进阶篇和高级应用篇,我将通过一个个小的demo进行学习,比较有助于大家加深记忆和动手编码能力,下面我们进行初级基础的学习! 1、OpenLayers 3简介 OpenLayers 3简称ol3,它是一个开源的Web GIS引...

MagicMHD的博客 3205

雷达扫描效果三维地图GIS大数据可视化

随着大数据、云计算、物联网的诞生、大量的设备数据、传感器数据、行为数据、日志数据、基础画像数据、运行数据等等都对传统的数据展现提出了新的要求 。随着前端技术的不断成熟,客户对业务系统的要求也由原来的简单实现功能上升到,漂亮、直观、易用、有科技未来感。因此系统的可视化难度加大,我们大多数客户的业务系统都需要可视化大屏的统计分析,甚至部分管理系统也被要求做成图表、地图、三维可视化,VR、AR,三维仿真、地理信息系统等等被要求深度结合业务,这在设计上有一定的难度,而且设计完成了大部分开发难度非常大,不过好在得益于技术的日渐进步,已经有大部分优秀的开源项目和插件可以实现和满足部分可视化的要求。数据分析的需求猛增,那么我们分析后的数据展示也成为目前比较热门的方向。数据可视化,我们常见的有表格、图标、图表、柱状图、折线图、雷达图、漏斗图、等值面图、等值线图、GIS地图、蜂窝图、格点数据、热力图、柱状图、饼图、散点图、地理坐标/地图、K 线图、雷达图、盒须图、热力图、关系图、路径图、树图、矩形树图、旭日图、平行坐标系、桑基图、漏斗图,三维模型可视化等等展现方式。 本节课我们主要以百度地图结合map

OpenLayers基础教程——地图的动画效果

1、前言 为了提升人机交互的体验,OpenLayers提供了一系列的地图动画效果,它们主要由ol.animation类提供,动画效果可以单独使用,也可以组合使用,下面开始介绍。 2、主要类和参数 在ol.animation中,最常用到的四个类如下所示,它们分别对应平移、弹跳、旋转、缩放。 ol.animation.pan ol.animation.bounce ol.animation.rotate ol.animation.zoom 要创建一个动画效果的步骤如下所示: // 第一步:获取当前视图 va

HerryDong的博客 3806

当迁移学习遇见室内定位:基于UJIIndoorLoc的跨场景适配实践

本文探讨了迁移学习在跨建筑室内定位中的应用,重点解析了UJIIndoorLoc数据集的特性及其在解决设备差异和环境变化中的关键作用。通过特征工程、迁移学习策略和小样本微调技术,显著提升了定位模型的跨场景适配能力,为实际部署提供了有效解决方案。

weixin_29038155的博客 394

STC15W204S最小系统开发指南:从串口通讯到自动热加载全流程

本文详细介绍了STC15W204S最小系统的完整开发流程。从芯片资源解析、最小系统搭建、串口通讯驱动编写(使用Timer2生成波特率),到实现基于魔术值触发的自动热加载功能,并最终集成Keil与STC-ISP软件,构建高效的自动化开发工作流,显著提升嵌入式调试效率。

a1b2c的博客 391

OpenLayers3, 航线动画实现

本文基于OpenLayers3,实现航线动画的功能。

我哎GIS博客 1815

01_MySQL下载、安装与配置(以MySQL8.0.31版本为例)

1.点击下载好的mysql安装包 进入到mysql installer界面。2.选择MySQL Servers选项 一直下拉。

4819

OpenLayers 动画效果实现教程:让地图动起来的技巧

你是否曾想过让网页地图不再静止,而是能流畅地平移、缩放甚至旋转?OpenLayers 提供了强大的视图动画 API,只需几行代码就能实现专业级地图动画效果。本文将通过实际案例,带你掌握平移、缩放、旋转等核心动画技巧,以及弹性、弹跳等高级缓动效果的实现方法。 ## 基础动画实现:view.animate() 方法 OpenLayers 的动画核心来自 `view.animate()` 方法,它支...

gitblog_01096的博客 1115

Holtek BS45F3833芯片深度剖析:如何用高集成MCU重塑超声波雾化市场格局?

本文深度剖析Holtek BS45F3833芯片如何通过高集成MCU技术重塑超声波雾化市场。该芯片集成了PWM直驱、电容检水、触摸控制等核心功能,显著提升雾化精度和效率,同时降低BOM成本和开发难度。文章通过实测数据和实战案例,展示了其在香薰机、车载设备及工业加湿器等场景的创新应用,为开发者提供了一站式解决方案。

weixin_29192211的博客 413

头歌操作系统 课堂练习4.2:页式内存管理 答案 无解析

头歌操作系统 课堂练习4.2:页式内存管理 答案 无解析

kercii的博客 1万+

OpenLayers教程07_为地图添加平滑过渡

openlayers 实现的地图过渡动画,让地图过渡更加平滑

w131552的博客 1785

基于AXI PCIE IP的FPGA PCIE卡示意图

如果在上图中的AXI互联IP上再连接一个带AXI Slave接口的BRAM控制器,这个BRAM控制器连接一个BRAM,Host PC在系统主存中分配了一些不连续的内存,Host PC可以将这些内存段的起始地址(当然要先转为PCIE总线地址)写到AXI总线上的BRAM中,这样AXI CDMA读取BRAM,将读取到的PCIE总线基地址写到AXIPCIE寄存器块中的AXIBAR2PCIEBAR_n寄存器中,这样就实现了SG DMA。通过动态改变AXIBAR2PCIEBAR_n寄存器的值,可以实现多通道DMA。

csdn_gddf102384398的博客 1624

OpenLayers3, 设置地图背景

本文基于OpenLayers3,实现地图加入背景图的功能。以上为基于openlayer3 实现设置地图背景图的简单案例,希望对您有帮助~

我哎GIS博客 1803

092、Python在芯片验证中的应用:从脚本小子到验证架构师

Python在芯片验证中的高效应用 本文通过实际案例展示了Python在芯片验证中的关键作用。凌晨三点的调试场景揭示了传统方法的局限,Python脚本能在20分钟内分析80GB波形数据定位FIFO指针问题。文章重点介绍了两个核心工具: 智能日志分析系统:通过正则表达式和上下文分析,自动分类百万行验证日志中的错误,生成可视化报告,效率远超传统grep方法。 寄存器模型生成器:将Excel表格自动转换为UVM寄存器模型代码,将原本需要两周的手工工作缩短至两小时,同时保证零错误。 文章还展示了Python与Sys

z534437748的博客 72

基于非接触式微波雷达设计的跌倒检测预警系统【短信报警】

本项目选择基于非接触式微波雷达的跌倒检测预警装置作为技术核心,采用云帆瑞达的R60AFD1跌倒检测模组。这一模组能够根据人体的运动变化,如速度、距离和姿态等特征,判断是否发生跌倒,并可以持续监控老年人是否处于危险状态。此外,本项目还结合4G通信技术,通过Air724UG模块实现短信报警功能,一旦检测到跌倒事故,系统将自动通过4G网络向紧急联系人发送短信报警,及时通知亲属或医护人员进行救援。

1754

Openlayers中的动画

Openlayers中的动画

Jinuss的博客 1470

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

OpenLayers学习笔记中级篇(一、各种地图的加载)

学习了前面的初级篇,相信大家对OplenLayers已经有了一个初步的认识,下面我们再继续深入学习OpenLayers的相关功能! 我们这节主要是加载各种各样的地图,包括在线服务的地图,比如天地图、高德、OSM等,还有一些我们自己使用地图服务器发布的地图,比如使用Geoserver发布的wms地图服务,最后还介绍了常用矢量地图数据的加载,好了,让我们开始吧! 首先我们再来深入学习一下Sourc...

MagicMHD的博客 4590

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

OpenLayers学习笔记高级篇(四、地图开发实战之地图要素的增删改查)

一切都准备好了,现在终于可以通过ol3加载配置好的数据了。上一节中最后的预览结果,大家已经看到了,此处我们自己通过ol来实现这个预览页面,直接上代码如下: 1、加载Geoserver发布的wfs地图服务,直接上代码如下: <!doctype html> <html lang="en"> <head> <meta charset="UTF...

MagicMHD的博客 3602

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

OpenLayers:构建现代Web地图应用

OpenLayers 是一个用于绘制地图的开源 JavaScript 库。它提供了丰富的 API 和工具集,允许开发者创建高性能的地图应用,并且支持多种图层源,如矢量数据、瓦片服务等。OpenLayers 基于 HTML5、CSS3 和 WebGL 构建,能够兼容最新的 Web 技术标准。对于希望利用最新技术创建地图应用程序的开发者来说,OpenLayers 是一个非常有吸引力的选择。

qq_36287830的博客 1949

OpenLayers学习笔记高级篇(一、openlayers画点线面)

话不多说直接上代码: <!doctype html> <html xmlns=http://www.w3.org/1999/xhtml> <head> <meta http-equiv=Content-Type content="text/html;charset=utf-8"> <met...

MagicMHD的博客 4715
上一篇: OpenLayers学习笔记高级篇(二、地图控件)
下一篇: OpenLayers学习笔记高级篇(四、地图开发实战之Geoserver配置与发布地图服务)
MagicMHD
博客等级 码龄9年 503粉丝 78原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值