QGIS 3.14|地震数据动画效果实战(一)数据准备篇
前段时间找QGIS相关资料,无意中发现QGIS开发团队成员、Temporal Controller插件的作者Nyall Dawson发布了一期直播视频,以地震数据为例,演示了QGIS 3.14 时间控制和地图动画,看完后深受启发,于是产生了整理出来的想法。
先看一下最终的动画效果:
达到上图效果需要比较复杂的操作过程,我将其拆解为三个章节:数据准备篇、动画设置篇、进度条设置篇,通过详细的步骤,再现Nyall Dawson直播中的地震数据动画效果。本文为系列文章第一篇,即数据准备篇。
01 获取示范数据
示范数据采用美国国家海洋和大气局(NOAA)提供的地震数据,下载地址为:
http://www.ngdc.noaa.gov/nndc/struts/results?type_0=Exact&query_0=$ID&t=101650&s=13&d=189&dfn=signif.txt
02 打开底图,导入数据
- 打开OpenStreetMap 底图
从【浏览】面板中,展开【XYZ Tiles】节点,双击【OpenStreetMap】,将OpenStreetMap基础底图添加到地图窗口中。
- 导入地震数据
1、点击【图层管理】工具栏的【添加文本数据图层】按钮,打开【数据源管理器】对话框。
2、点击【文件名称】右侧【…】按钮,浏览到地震数据TXT文本文件,将其填入文本框。
3、【图层名称】可以设置为任意字符,此处填写“signif”作为图层名,该名称将会显示在【图层】面板中。
4、【文件格式】选择“自定义分隔符”,勾选右侧的“制表符”。
5、在【几何图形定义】中,【横坐标字段】选择"LONGITUDE" ,【纵坐标字段】选择 “LATITUDE” 。
6、最后,点击下方的【添加】按钮,将数据添加到地图窗口中。
QGIS将为新添加的图层随机选择渲染颜色,如果对默认颜色不满意,可以点击【图层】面板上方的【打开图层样式面板】按钮,在【图层样式】面板中设置自己喜欢的颜色。
03 数据抽取
- 观察地震数据的属性表
在【图层】面板,右键点击“signif”图层,从弹出菜单中选择【打开属性表】。
可以看到,图层共包含6207个地震事件点,“YEAR”、“MONTH”、“DAY”、“HOUR”,“MINUTE”,“SECOND”六个字段组成地震的时间属性。由于时间跨度较大、要素较多,可以选择感兴趣的时间段作为研究区间。本文将使用2018年1月1日至今的地震点作为演示数据。
- 提取数据子集
点击属性表窗口上方工具栏的【使用表达式选择要素】按钮,调出【表达式字符串构建器】对话框。
在表达式代码编辑区中输入下面表达式:
if ( to_int("year") >= 2018,1,0 )
该表达式用if条件语句判断“year”字段是否大于2018,如果是则返回1,否则返回0。"to_int"为转换函数,用于将字符串类型的“year”字段转换为数值类型,便于比较大小。
点击右下角的【选择要素】按钮,地图窗口上方弹出气泡显示选中了151个要素,并用黄色点高亮在地图画布中。
- 导出选择集
接下来导出选中的要素为单独的图层。关闭表达式构造器对话框,在【图层】面板中右键点击“signif”图层,弹出菜单依次选择【导出】->【另存选中的要素为…】,打开【矢量图层另存为…】对话框。
保存格式可以选择Shapefile、SpatiaLite、Geojson、GML、MIF、GeoPackage等,本文选择GeoPackage格式保存。点击【文件名称】右侧的【…】按钮,打开【保存图层为】对话框,设置文件名为“quake2020”,点击【保存】按钮,关闭对话框。
返回【矢量图层另存为…】对话框,其他保持默认选项,确保勾选下方的【将已保存的文件添加到地图中】,点击【OK】,完成选择集导出。
可以看到导出图层“quake2020”添加到了地图窗口中。取消勾选“signif”图层,地图窗口中保留OpenStreetMap底图和“quake2020”图层。
04 时间数据转换
QGIS 3.14使用内置的Temporal Controller插件替代了TimeManager实现时间序列动画,由于动画实现的方式不同,目前Temporal Controller的时间字段仅支持日期/时间日期型(Date/DateTime),而地震数据中的时间属性是由“YEAR”、“MONTH”、“DAY”、“HOUR”,“MINUTE”,“SECOND”六个字符串型字段组成,因此需要将这六个字段合成并转换为Date或者DateTime类型。
(关于Temporal Controller对时间属性的支持,请参考:https://qgis.org/en/site/forusers/visualchangelog314/#feature-cumulative-temporal-range-setting-in-temporal-controller 。)
- 处理异常数据
在【图层】面板右键点击“quake2020”图层,从弹出菜单选择【打开属性表】,打开该图层的属性表窗口。
为了检查是否存在异常数据,依次单击“YEAR”、“MONTH”、“DAY”、“HOUR”,“MINUTE”,“SECOND”列名,对其进行升序排列。很明显看到,“HOUR”、“MINUTE”和“SECOND”字段存在空值(NULL),“SECOND”字段存在空格,这些都是异常数据。由表达式相关知识得知,异常数据参与表达式运算有可能导致表达式出错。
在本文中,如果地震发生的小时、分钟和秒未知(NULL值),时间精确到天是可以接受的,因此可以将“HOUR”、“MINUTE”和“SECOND”的异常数据提前处理为0,即对于未知“HOUR”、“MINUTE”和“SECOND”的地震事件,默认发生在当天的00:00:00。
点击属性表窗口工具栏上的【打开字段计算器】按钮,弹出【Field Calculator】对话框。
勾选【更新现有的字段】,在下拉框中选择字段“HOUR”,表达式代码编辑区输入如下表达式:
if (NOT "HOUR" IS NULL , "HOUR" ,0)
该表达式用if条件语句判断“HOUR”字段是否为NULL,如果“HOUR”为NULL,则“HOUR”赋值0,否则,仍然保留原值。
注意,在对图层做任何更新操作前,应将图层设为可编辑状态,否则表达式构造器下方将出现提示信息:您正在编辑该图层中的信息,但是该图层目前处于非编辑模式。
单击【OK】按钮,关闭【Field Calculator】对话框。可以看到,属性表窗口工具栏的【切换编辑模式】处于选择状态,表示自动打开了当前图层可编辑。再次单击“HOUR”字段名,确保NULL已经更新为0。
重复上一步骤,将更新的字段改为“MINUTE”,处理“MINUTE”字段中NULL情况。
if (NOT "MINUTE" IS NULL , "MINUTE" ,0)
“SECOND”字段存在空格的异常数据,因此表达式中除了需要判断是否为NULL之外,增加了判断字符串是否由空格组成。具体的实现逻辑是:先用trim函数将“SECOND”字段取值的前后空格去掉,再用length函数判断去掉空格后字符串的长度,如果长度为0,说明当前要素的“SECOND”字段全部由空格组成,将该取值更新‘0’,否则保留原“SECOND”值。
if( "SECOND" is NULL OR length( trim("SECOND" ))=0,0,"SECOND")
- 生成时间字段
再次检查属性数据表,确保相关字段无异常数据后,点击工具栏的【打开字段计算器】按钮,构建表达式生成时间字段。
在【Field Calculator】对话框中,勾选【新建字段】,【输出字段名称】填写“time”,【输出字段类型】选择“日期和时间”,在表达式代码编辑区输入:
make_datetime( "YEAR" , "MONTH" , "DAY" , "HOUR" , "MINUTE" , "SECOND" )
上述表达式用make_datetime函数,将“YEAR”、“MONTH”、“DAY”、“HOUR”,“MINUTE”,“SECOND”六个字段合并为时间字段。点击【OK】按钮,返回属性表窗口。
可以看到,属性表中增加了名为“time”的日期和时间类型字段,且时间与“YEAR”、“MONTH”、“DAY”、“HOUR”,“MINUTE”,“SECOND”对应。
至此,地震数据的准备工作完毕,下一篇将讲解地震数据的动画设置。
吴建玲
2020年8月25日
版权声明
本文欢迎转载,转载时请注明出处。
本文参考了Nyall Dawson的视频整理而成。Nyall Dawson是QGIS开发团队成员,有10年的QGIS开发经验,他的直播条理清楚、思路新颖,感兴趣的朋友可以去观看相关视频,地址为: https://www.youtube.com/watch?v=vgDg5cRwPRw。
QGIS 3.14|地震数据动画效果实战(一)数据准备篇相关推荐
- QGIS 3.14|地震数据动画效果实战(二)动画设置篇
01 设置图层Temporal属性 在QGIS 3.14中,图层的属性对话框首次加入了 Temporal标签页,提供图层的时间设置. 右键点击[图层]面板中的"quake2020" ...
- QGIS 3.14|地震数据动画效果实战(三)进度条设置
在之前的版本中,QGIS对时间的处理是通过Time Manager插件实现的,QGIS 3.14将Temporal Controller引入软件整体框架之中,以原生的方式支持各类数据集对时间维度的处理 ...
- echarts 动态数据动画效果
在做项目时,当我们用到echarts图表时,大部分产品经理都会要求我们给图表加上一些动画效果,让页面看起来更加炫酷.其实给图表加上动画效果不难,如果数据是实时数据这样做动画效果会更简单点,就怕数据不是 ...
- VTK:数据动画用法实战
VTK:数据动画用法实战 程序输出 程序完整源代码 程序输出 程序完整源代码 #include <vtkActor.h> #include <vtkCallbackCommand.h ...
- Android App开发动画特效之实现百叶窗动画和马赛克动画效果实战演示(附源码和演示视频 可直接使用)
需要图片集和源码请点赞关注收藏后评论区留言~~~ 一.实现百叶窗动画 合理运用图层规则可以实现酷炫的动画效果,比如把图片分割成一条一条,接着每条都逐渐展开,这便产生了百叶窗动画,把图片等分为若干小方格 ...
- python可视化编程实战代码_Python数据可视化编程实战——导入数据
1.从csv文件导入数据 原理:with语句打开文件并绑定到对象f.不必担心在操作完资源后去关闭数据文件,with的上下文管理器会帮助处理.然后,csv.reader()方法返回reader对象,通过 ...
- DataGear 制作支持全国、省、市三级数据钻取效果的地图数据可视化看板
通过DataGear的参数化数据集.图表联动和看板API功能,可以很方便地制作支持数据钻取效果的数据可视化看板. 首先,以上级地区名为参数,新建一个参数化SQL数据集: SELECTCOL_NAME, ...
- P75-前端基础动画效果-过渡效果
P75-前端基础动画效果-过渡效果 1.概述 这篇文章介绍动画效果其中的一个类型过渡效果. 2.过渡效果 2.1.过渡效果基础内容 <!DOCTYPE html> <html> ...
- 数据挖掘综合应用:数据预处理代码实战
数据挖掘综合应用:数据预处理代码实战 在数据预处理的过程中主要包括两个部分:数据清洗和特征预处理. 数据清洗: 缺失值处理:一般包括去除或者填补两种方式. 填补方式主要有:均值.中位数.众数.回归分析 ...
- 前端每日实战:140# 视频演示如何用纯 CSS 创作文本的淡入动画效果
效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/ZMwgqK 可交互视频 此视频是可 ...
最新文章
- 利用dsamain.exe挂载快照(活动目录快照配置管理系列四)
- Python协程:从yield/send到async/await
- java处理oom_java处理OOM和SOF
- c++ 连续图片显示_计算整数的和并显示结果
- 2019.01.29【NOIP普及组】模拟赛C组总结
- Java斗地主算法的设计与实现_斗地主算法的设计与实现–洗牌和发牌
- mysql存储过程 try_mysql存储过程之异常处理篇
- 2021年qs世界大学计算机科学排名,2015年QS世界大学计算机专业排名
- jQuery第一个孩子“这个”
- matlab subplot(figure)如何设置使得图像最终显示出来不一样大小
- ubuntu 投影仪设置
- PHP + ORACLE 远程连接数据库环境配置
- php简历掌握技能,php简历技能怎么写
- 数据结构期末复习速成
- qq对计算机程序的更改,解决电脑总弹出“是否允许程序对计算机进行更改”
- 【面经】TP-LINK 图像算法工程师(提前批)
- linux文件名小写变大写命令,通过Ubuntu命令行将文件名转换为小写
- 两种三角形的打印方法
- 如何使用PTGUI全景合成软件进行照片拼接
- linux deploy连接ssh失败,ubuntu – Jenkins发布ssh成功连接服务器但是put文件失败
热门文章
- 微信小程序实现当前页面多个视频文件只能播放一个视频,其他视频暂停,点击当前暂停当前
- AV1代码学习:解码端aomdec.c的main函数
- c++::举例_举例说明:网络
- 陈茁20172260数据结构笔记
- Java开发-应届生面试常常涉及到的问题
- 人工智能正在重塑人力资源的7种方式
- Focal Loss 安装与使用 TensorFlow2.x版本
- [HNOI2007] 紧急疏散EVACUATE
- windows7下安装sharex视频截图报错,需要下载ffmpeg——Unknown input or output format: gdigrab
- python与大数据分析实验报告_Python与大数据分析.pptx