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|地震数据动画效果实战(二)动画设置篇相关推荐

  1. QGIS 3.14|地震数据动画效果实战(三)进度条设置

    在之前的版本中,QGIS对时间的处理是通过Time Manager插件实现的,QGIS 3.14将Temporal Controller引入软件整体框架之中,以原生的方式支持各类数据集对时间维度的处理 ...

  2. 西门子界面官方精美触摸屏+WINCC程序模板 西门子官方触摸屏程序模板,炫酷的扁平式动画效果,脚本动画,自动生成二维码,可仿真,堪比智能手机,有精简,精致,wincc,无线面板等包含了所有西门子人机界

    西门子界面官方精美触摸屏+WINCC程序模板 西门子官方触摸屏程序模板,炫酷的扁平式动画效果,脚本动画,自动生成二维码,可仿真,堪比智能手机,有精简,精致,wincc,无线面板等包含了所有西门子人机界 ...

  3. SQL Server 大数据群集 部署(二)工具篇

    SQL Server 大数据群集 部署(二)工具篇 在进行部署大数据群集之前,先要安装一系列的工具,下表列出了常用的大数据群集工具以及如何安装它们: 工具 Required Description 安 ...

  4. Android App开发动画特效之实现百叶窗动画和马赛克动画效果实战演示(附源码和演示视频 可直接使用)

    需要图片集和源码请点赞关注收藏后评论区留言~~~ 一.实现百叶窗动画 合理运用图层规则可以实现酷炫的动画效果,比如把图片分割成一条一条,接着每条都逐渐展开,这便产生了百叶窗动画,把图片等分为若干小方格 ...

  5. 旋转360 css 动画效果,使用CSS3动画属性实现360°无限循环旋转【代码片段】

    使用CSS3的animation动画属性实现360°无限循环旋转. 代码片段:   //图片路径自定义 CSS样式书写如下: #change{ position:absolute; right:200 ...

  6. iOS实现“下雨下雪”动画效果和“烟花”动画效果

    "下雨"的动画效果 一.效果展示 二.实现流程 设置背景 func setupUI() {self.imageView = UIImageView.init()self.image ...

  7. html怎么帮图片占位,css+html实现Skeleton Screen 加载占位图动画效果(带动画)

    效果 自上而下渐隐渐现 源码 html,用的angular语法,只要做简单的修改就可以成为你需要的语法 css .skeletonItem { padding: 16px; border-bottom ...

  8. Flutter进阶—实现动画效果(二)

    在上一篇文章:Flutter进阶-实现动画效果(一)的最后,我们说到需要一个处理程序混乱的概念.在这一篇文章中,我们会引入补间,它是构建动画代码的一个非常简单的概念,主要作用是用面向对象的方法替代之前 ...

  9. Swing实现动画效果(实现Loding动画)【转载】

    申明: 以下代码非本人原创,原创地址:原创链接 本人只是在原作者博客的基础上进行理解.修改.添加注释 思路说明: 概览: 利用Timer(计时器)更改变量X的值和重写paintComponent方法实 ...

最新文章

  1. Python 可视化近 90 天的百度搜索指数 + 词云图
  2. 安装 Windows8 后值得做的十多项简单优化,让Win8速度快上加快!
  3. 遗传算法介绍和遗传算法的python实现
  4. Android Telephony分析(四) ---- TelephonyManager详解
  5. vue实现实时监听文本框内容的变化(最后一种为原生js)
  6. ASP.NET页面之间传值Application(5)
  7. mysql主库从库在同一台服务器_MySQL数据库的主从配置(多主对一从)
  8. 实战 | Element UI 父子组件传值与事件绑定(正向)
  9. JDBC的DML增删改查的代码重构设计(下)
  10. 封杀抖音,微博在紧张什么?
  11. jq禁用html标签
  12. 更改eclipse字体
  13. Flash 3D之旋转文字
  14. 数据库网页搭建教程(一)——数据准备
  15. 最强大脑-星际迷航-JQuery 版本
  16. 以自动化为“遮羞布”,亚马逊掩盖了惊人的工伤记录
  17. 已解决 There are unfinished transactions remaining. You might consider running yum-complete-transaction
  18. python for循环求1到100的和_python如何计算1到100的和(用for循环)
  19. 作为一个渗透测试学习者必知必读的好书推荐
  20. 如何在Cisco Packet Tracer中创建多个路由器虚拟局域网(方法一)

热门文章

  1. 这是我见过描写天津女孩中最真实的
  2. 怎么做抖音故障艺术风格人物照片效果
  3. CDLinux U盘制作教程
  4. Java面向对象 ----多态
  5. 03 CoCos Creator 偏好设置中ndk配置
  6. C游戏编程入门第一讲心得
  7. AndLua加密解密
  8. R语言中dim函数_R语言 常见函数知识点梳理与解析 | 精选分析
  9. 微信小程序电商首页开发基本思路
  10. 通过python添加ad域账号_基于python LDAP3的AD域账号注册系统