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。