QGIS 3.14|地震数据动画效果实战(二)动画设置篇
01 设置图层Temporal属性
在QGIS 3.14中,图层的属性对话框首次加入了 Temporal标签页,提供图层的时间设置。
右键点击【图层】面板中的“quake2020”图层,弹出菜单中选择【属性…】,打开图层属性对话框。
勾选【Temporal】复选框,表示该图层接受 Temporal Controller控制。
点击【Configuration】下拉框,可以看到有多种形式时间设置:
Fix Time Range:固定时间范围,即用时间常数设置开始时间和结束时间,图层在该时间范围将处于可见状态。
Single Field With Date/Time:通常图层包含了一系列事件点,如地震事件,属性表中保存了事件发生的时间,图层根据时间字段过滤要素。
Separate Fields for Start and End Date/Time:图层包含两个时间字段,一个表示事件的发生时间,另一个表示事件的结束时间。从事件发生时间开始,该事件点将显示在地图上,一直到事件结束时间,该点在地图上消失。
Separate Fields for Start and Event Duration:与上一条类似,图层含两个时间字段:事件发生的时间和事件持续时间。实际上,在地图渲染时,将开始时间加上持续时间得到事件的结束时间,以判断该事件点是否应该绘制到当前地图窗口中。
Start and End Date/Time from Expression:用表达式计算出开始时间和结束时间,特别适合于原始数据提供的时间字段不符合 Temporal Controller输入要求时,用表达式进行数据类型转换。
Redraw Layer Only:仅重绘该图层。适用于用表达式建立了与时间变量相关的符号化效果,随着时间的变化需要刷新地图。
在本文中,时间属性选择“Single Field with Date/Time”,【Field】选择《QGIS 3.14|地震数据动画效果实战(一)数据准备篇》合成的时间字段“time”,其他选项保持默认,点击【OK】按钮,完成图层属性设置。
返回QGIS主窗口,可以看到“quake2020”图层的右侧出现了图标,表示该图层受到Temporal Controller控制,在地图时间发生变化时,图层会根据时间范围过滤要素,并重新绘制。
02 设置动画参数
点击【地图浏览】工具栏上的【Temporal Controller Panel】,显示Temporal Controller面板。
第一次打开Temporal Controller时,默认情况下动画播放处于关闭状态,即Temporal navigation disable。面板上方提供三个按钮: Turn off temporal navigation、Fix range temporal navigation、Animated temporal navigation。
:将Temporal Controller面板的操作按钮收起,不再根据时间对要素进行过滤。
:设置动画时间范围,点击右侧的【刷新】按钮,可自动填入当前图层的时间取值。
:打开动画播放工具条,点击相关按钮可控制动画播放。
点击,打开动画相关设置界面。
点击时间范围【range】右侧的【刷新】按钮,设置动画时间为当前图层时间范围。
【Step】设置为1 months,即步长为1个月。表示地图切换时,用当前地图(Frame)的结束时间作为下一帧的开始时间,加一个月得到下一帧的结束时间。例如,当前地图时间为2018年1月1日 到2018年2月1日,那么下一帧的时间范围为2018年2月1日到2018年3月1日。
经过设置,现在可以点击按钮看一下动画效果了。
效果不是很好,地震点很快出现又消失,像电影的快进镜头一样,让人眼花缭乱,很难看出地震分布规律。
如何把播放度放慢?
最简单的方法是在Temporal Controller中设置帧速(Frame Rate),即每秒钟播放多少幅地图,一幅地图相当于动画里的一帧。
点击Temporal Controller面板右侧的【Temporal Settings】按钮,将【Frame rate(frames per second)】设置为1,表示1秒播放一幅地图。点击返回。
点击查看动画效果。
由于设置步长(Step)参数为1 months,地图以一个月为时间单位切换,所以在动画中可以看到,同一个月内发生的地震同时出现,1秒钟后切换到下一个月地震图,时间尺度太粗,难以看出一个月内不同日期地震发生的前后顺序。
如果以天为单位绘制地图,展示的时间尺度将会更精确。
本文中,地震数据的时间范围是:2018年1月1日到2020年8月18日,共960天,如果以1天为步长播放,需要绘制960幅地图,用动画的术语来说,共有960帧画面。如果帧速为1 FPS,即1秒钟播放一帧,那么,观看两年地震数据需要16分钟(960帧/1FPS/60秒),显然,时间太长了。
有没有既能缩短总播放时间,又能以Step为1观看动画的办法呢?这就需要Event duration、Frame rate、Step三个参数的配合。
在Temporal Controller面板中,设置【step】为“1days”。如下图:
点击【Temporal Settings】按钮,设置【Frame rate(frames per second)】为20 FPS,使得960帧画面只需要48秒(960/20)即可播放完成。
打开“quake2020”图层的属性窗口,切换到Temporal标签页,找到【Event duration】,设置为“30 days”,表示Step为1天时,地震点将会在地图上显示30天,即停留30帧。当帧速为20 FPS时,每个点在地图上显示1.5秒(30帧/20 FPS)。
点击查看动画效果。
经过上述设置过程,地震点以比较舒适的播放速度显示和消失,以天为单位的时间尺度和适当的滞留时间,可以观察到一段时间范围内每天地震事件的变化规律。
03 设置符号
地震的破坏程度,不仅跟地震发生的频率有关,更取决于地震等级的大小,因此在地震专题图中,地震等级是必须考虑的重要因素。下面以地震等级和地图时间、地震发生时间构建表达式,使地震点依据等级和滞留时间,呈现从小变大、最后消失的动画效果。
点击【图层】面板上方的【打开图层样式面板】按钮,在窗口右侧打开【图层样式】面板。
渲染样式选择单一符号,选中【标记】下面的【简单标记】,点击【大小】右侧的【由数据定义覆盖】按钮,在下拉菜单中选择【助理】,打开【符号大小】助理设置面板。
点击【输入】->【源】右侧的【Ɛ】表达式按钮,在表达式代码编辑区输入:
"EQ_PRIMARY" *day( @map_start_time - "time" )
上述表达式中:
"EQ_PRIMARY"为地震等级字段,取值0-9。
@map_start_time:变量,表示当前地图(Frame)的开始时间。
"time":地震发生的时间。
Day:时间函数,以天为单位计算时间间隔。
由于图层属性中设置了Event duration为30天,所以表达式:day( @map_start_time - "time" )的取值范围是[0,30],"EQ_PRIMARY"的取值范围是[0,9],因此,表达式"EQ_PRIMARY" *day( @map_start_time - "time" )的范围是[0,270],即符号大小的输入数值范围。
下方的【输出】参数组,表示符号绘制大小,最小值设为0,其他保持默认即可。
点击查看动画效果。
地震点根据等级从小变大、最后消失,使地图画面生动起来。
除了从小变大的效果之外,使用【应用变换曲线】功能,可以设计出更多的符号变化效果。
勾选【应用变换曲线】复选框,打开变换曲线。
“变换曲线”定义了【输入】->【输出】之间的对应关系,横坐标是【输入】,即表达式的取值,纵坐标是【输出】,即符号在地图上的绘制大小。
默认的变换曲线是从坐标0点到最大值点的直线,即线性变换,表示随着表达式取值增大,地震点慢慢变大。
按住鼠标左键,任意拖动曲线,可以在下方看到对应的输出效果。例如,下图中曲线表示地震点在地图上从0开始慢慢变大,表达式取值约50时,点最大,随后慢慢变小,直至消失。
点击查看动画效果
这样的动画是不是更有趣了?
关于动画参数的设置就介绍到这里,下一篇将介绍 给地图添加进度条。
吴建玲
2020年8月27日
版权声明
本文欢迎转载,转载时请注明出处。
本文是参考了Nyall Dawson的视频整理。Nyall Dawson是QGIS开发团队成员,有10年的QGIS开发经验,他的直播条理清楚、思路新颖,感兴趣的朋友可以去观看相关视频,地址为:
https://www.youtube.com/watch?v=vgDg5cRwPRw。
QGIS 3.14|地震数据动画效果实战(二)动画设置篇相关推荐
- QGIS 3.14|地震数据动画效果实战(三)进度条设置
在之前的版本中,QGIS对时间的处理是通过Time Manager插件实现的,QGIS 3.14将Temporal Controller引入软件整体框架之中,以原生的方式支持各类数据集对时间维度的处理 ...
- 西门子界面官方精美触摸屏+WINCC程序模板 西门子官方触摸屏程序模板,炫酷的扁平式动画效果,脚本动画,自动生成二维码,可仿真,堪比智能手机,有精简,精致,wincc,无线面板等包含了所有西门子人机界
西门子界面官方精美触摸屏+WINCC程序模板 西门子官方触摸屏程序模板,炫酷的扁平式动画效果,脚本动画,自动生成二维码,可仿真,堪比智能手机,有精简,精致,wincc,无线面板等包含了所有西门子人机界 ...
- SQL Server 大数据群集 部署(二)工具篇
SQL Server 大数据群集 部署(二)工具篇 在进行部署大数据群集之前,先要安装一系列的工具,下表列出了常用的大数据群集工具以及如何安装它们: 工具 Required Description 安 ...
- Android App开发动画特效之实现百叶窗动画和马赛克动画效果实战演示(附源码和演示视频 可直接使用)
需要图片集和源码请点赞关注收藏后评论区留言~~~ 一.实现百叶窗动画 合理运用图层规则可以实现酷炫的动画效果,比如把图片分割成一条一条,接着每条都逐渐展开,这便产生了百叶窗动画,把图片等分为若干小方格 ...
- 旋转360 css 动画效果,使用CSS3动画属性实现360°无限循环旋转【代码片段】
使用CSS3的animation动画属性实现360°无限循环旋转. 代码片段: //图片路径自定义 CSS样式书写如下: #change{ position:absolute; right:200 ...
- iOS实现“下雨下雪”动画效果和“烟花”动画效果
"下雨"的动画效果 一.效果展示 二.实现流程 设置背景 func setupUI() {self.imageView = UIImageView.init()self.image ...
- html怎么帮图片占位,css+html实现Skeleton Screen 加载占位图动画效果(带动画)
效果 自上而下渐隐渐现 源码 html,用的angular语法,只要做简单的修改就可以成为你需要的语法 css .skeletonItem { padding: 16px; border-bottom ...
- Flutter进阶—实现动画效果(二)
在上一篇文章:Flutter进阶-实现动画效果(一)的最后,我们说到需要一个处理程序混乱的概念.在这一篇文章中,我们会引入补间,它是构建动画代码的一个非常简单的概念,主要作用是用面向对象的方法替代之前 ...
- Swing实现动画效果(实现Loding动画)【转载】
申明: 以下代码非本人原创,原创地址:原创链接 本人只是在原作者博客的基础上进行理解.修改.添加注释 思路说明: 概览: 利用Timer(计时器)更改变量X的值和重写paintComponent方法实 ...
最新文章
- Python 可视化近 90 天的百度搜索指数 + 词云图
- 安装 Windows8 后值得做的十多项简单优化,让Win8速度快上加快!
- 遗传算法介绍和遗传算法的python实现
- Android Telephony分析(四) ---- TelephonyManager详解
- vue实现实时监听文本框内容的变化(最后一种为原生js)
- ASP.NET页面之间传值Application(5)
- mysql主库从库在同一台服务器_MySQL数据库的主从配置(多主对一从)
- 实战 | Element UI 父子组件传值与事件绑定(正向)
- JDBC的DML增删改查的代码重构设计(下)
- 封杀抖音,微博在紧张什么?
- jq禁用html标签
- 更改eclipse字体
- Flash 3D之旋转文字
- 数据库网页搭建教程(一)——数据准备
- 最强大脑-星际迷航-JQuery 版本
- 以自动化为“遮羞布”,亚马逊掩盖了惊人的工伤记录
- 已解决 There are unfinished transactions remaining. You might consider running yum-complete-transaction
- python for循环求1到100的和_python如何计算1到100的和(用for循环)
- 作为一个渗透测试学习者必知必读的好书推荐
- 如何在Cisco Packet Tracer中创建多个路由器虚拟局域网(方法一)