qgis中有一个timemanager的插件可以对矢量或栅格图层进行动画制作,不过该插件需要有一列时间字段或者连续序列的字段,同时它生成的动画,底图是不能变动的,当然了利用它还是能做一些很漂亮的动画的,具体感兴趣的可以去自行查看。其实在qgis中可以利用它的atlas(图集)功能来制作动画,下面将简单介绍一下制作的步骤。qgis 软件版本3.6,想看效果的可直接跳到文章最后看视频
一、数据准备
数据很简单,就是一条公交线路,同时需要配一个底图,建议底图最好不要用在线,可以在布局空间里存成带坐标信息的图片,再加载到软件中,这样可以保证到时图集生成的速度会快很多。如下,我们的基本数据。
对公交线路图,利用extract vertices算法(直接在左下角的方框中输入extract vertices即可打开该算法界面),生成节点层,我将它保存为nodes层,共有480个节点,生成的节点属性表中两列字段vertex_ind、angle,分别表示节点的序号、方位角(这两个字段很重要!!)。
二、布局设置
接下来新建一个打印布局空间,设置成a4大小即可,并设置生成atlas,其中page name选择vertex_ind字段,输出的图片文件名称为@atlas_pagename。并在Item properties选择勾选controlled by atals(这里很重要,相当于底图随着每个元素的位置变化而进行动态调整来适应所显示的元素)。这时如果导出图集的话,你会发现所有的点都会出现。
三、nodes层样式设置
nodes层的样式设置很关键。首先在右键属性中,选择symbology,并选择rule-based,这里设置两个规则,第一个表述式为"vertex_ind" = @atlas_pagename,并设置其样式为svg marker,选择一个小飞机图标,设置成你想要的颜色就可以,另外在rotation中选择最右边的反3符号,点进去后选择edit,选择我们前面所说的方位角字段angle(这个可以保证飞机头是和线路走向一样的)。第二个规则条件设置成ELSE即可,它的symbology就不需要勾选了。(以上的设置逻辑就是当你生成一个图集序列时,它每张图有一个对应的图集号,而这个图集号与你的"vertex_ind"是相同的,所以软件只会显示与图集号相同的元素,我们案例中就是每张图只显示一个元素)
四、图集导出
一切设置就绪后,回到打印布局空间中,点图集生成(下图中1所示)或者菜单栏中Atlas-preview atlas,并利用箭头查看前后图集的生成,可以看到对应的图集号(其实就是vertex_ind的属性值)所生成的图所在的位置,选择(下图中2所示)中的export atlas as images,选择一个空白文件夹,同时设置导出图集的分辨率,我这里设置150 dpi,太高了的分辨率不利于后续操作。慢慢得待一会就会生成480张连续的PNG图。
五、动画生成
接下来就是如何利用480张连续的png图生成动画了,这里推荐gimp软件,据说是开源界的photoshop,这里就简单说下步骤了:打开gimp软件,在文件—-作为图层打开,选择整个文件下的图片(慢慢等几分钟),当全部导入后,在文件—导出为选择生成gif图即可,在参数设置中勾选生成动画,每张图相隔50毫秒。然后耐心的等几分钟,就会成一个GIF动画了。生成的GIF动画很大了,我的案例差不多300m 左右,推荐利用视频转换器之类的软件把GIF动画转成avi、mp4等格式。
六、效果查看
这是两个效果视频,一个是底图会变化的,另一个是底图不会变化的(类似于timemanager插件制作的效果)。
七、小结
总的来说,qgis功能还是很强大的,慢慢的摸索,你会发现在它能解决很多实际问题。后面有机会,再讲讲atlas和其他一些功能的运用。