暑假的想法终于实现了,虽然是别人的成果
一起来看看吧!
我自己录了一段视频
(B站上看更方便一点,搜Darcy_Ocean应该能找到,):
谷歌翻译版:
在使用QGIS之类的GIS软件进行工作时,大多数情况下,我们正在处理静态数据,例如街道,建筑物,土地覆盖物等。或者可能是具有时间信息的数据,因此我们可以可视化时间变化。几乎实时可视化实时数据呢?我们需要GIS服务器,云或地图服务吗?我认为这是一个有趣的话题,在这篇文章中,我将通过实时空中交通数据用例进行讨论。
在上一篇文章中,我制作了一个教程, 介绍了如何使用Python中的露天交通数据构建飞行跟踪应用程序。该应用程序正在Web浏览器中运行,并且航班数据将在指定的时间间隔内更新。在本教程中,我们将在QGIS中执行相同的操作。我们将在QGIS地图画布上可视化空中交通实时数据,并每隔五到十秒获取更新数据。在本教程的最后,我们将获得一个区域内几乎实时的飞机位置,如下图1所示。
图1. QGIS中的空中交通实时数据。飞机正排队在圣弗朗西斯科国际机场降落 |
图2是显示系统工作原理的架构。从该模式可以看出,Python在请求数据,获取响应,处理响应并将数据存储到CSV纯文本中扮演着重要角色。另一方面,QGIS将根据数据渲染飞机的位置,并在一定间隔内对其进行刷新以获取最新信息。为了实现它,我们不需要任何GIS服务器,云或地图服务。只要机器上安装的Python和QGIS可以与Internet连接,任何人都可以这样做。
图2。模式说明系统如何工作 |
基于该架构,本教程包含几个子主题,例如:获取数据(发送请求并处理响应),在QGIS地图画布上绘制数据并在一定时间间隔内进行渲染。让我们开始吧!
获取空中交通实时数据
本教程的数据来自 OpenSky Network ,后者是一个提供全球空中交通数据的协会。有一些API可用于从OpenskyNetwork检索数据,例如:Python API,Java API和REST API。在本教程中,我们将使用REST API检索指定边界区域内的数据。
要检索某个区域内的空中交通数据,我们需要在地理坐标系中定义最小和最大坐标。例如,我想以最小和最大坐标分别获取-125.974,30.038和-68.748,52.214在美国上的所有飞机。用于匿名请求数据的REST API查询将如下所示:
https://opensky-network.org/api/states/all?lamin=30.038&lomin=-125.974&lamax = 52.214&lomax = -68.748
匿名请求的解析时间为10秒,这意味着我们可以每10秒发送一次请求。另一方面,如果您是注册用户,则分辨率会更快,大约5秒。要以注册用户的身份发出请求,用户名和密码必须包含在查询中。然后查询将是:
https:// 用户名:密码 @ opensky-network.org / api / states / all?lamin = 30.038lomin = -125.974&lamax = 52.214&lomax = -68.748
要尝试查询,只需将其复制并粘贴到浏览器中即可。如果您收到如图3所示的响应,则表明它可以正常工作,我们准备继续进行下一步。此外,如果您想更详细地了解来自OpenSky Network的空中交通数据响应,请访问 REST API文档。
图3.实时空中交通数据响应 |
发送请求并处理实时数据响应
在这一步中,我们将编写Python代码来请求实时空中交通数据并处理响应。完整的代码可以在本节末尾找到。
我们从导入一些库开始,即:请求,json,csv和时间。然后用最小和最大坐标定义坐标范围。接下来在第16行,指定了将存储响应数据的输出路径,因此请确保随您的路径进行更改。如果你是一个注册的开放天空网络用户,送礼者你的用户名,并在密码 USER_NAME和密码在19-20行变量。该代码的最后一部分用于使用请求发送查询,以JSON格式获取响应并将其保存到CSV文件中。对于匿名请求,此过程将在10秒的间隔内循环执行;对于注册用户,此过程将在5秒的间隔内完成。
|
|
保存带有Python扩展名(.py)的代码,然后从命令提示符或终端运行它。如果使用python 3,然后输入文件名,则键入python或python3。该代码将如下图4所示运行。
不要关闭终端,因为它将持续工作以从OpenSky Network获取最新的空中交通数据,我们将在QGIS中使用它。
图4.飞行数据请求 |
在QGIS中可视化实时空中交通数据
我们已经获得了实时数据流,现在让我们通过以下步骤在QGIS中对其进行可视化处理。
将CSV数据添加到QGIS中。在“ 数据源管理器”中,在左侧菜单中选择“定界 文本 ”。然后在右侧,选择“ 文件名”。在几何定义部分选择 长列X字段和纬度列 Y字段。确保正确获取样本数据。如果不是,请尝试使用“ 自定义分隔符”选项更改“ 文件格式”部分中 的分隔符属性。
图5.将空中交通数据添加到QGIS |
按下数据源管理器中的“ 添加”按钮后,将在QGIS地图画布上绘制飞机在请求区域内的位置。要使其在地理空间范围内更有意义,请添加底图。为了添加底图,我使用了 Tile + 插件,该插件提供了一些流行的底图。对于这种情况,我使用了STAMEN TERRAIN底图。图6用STAMEN TERRAIN底图显示了所有飞机在美国的位置。
图6. QGIS地图画布中的飞机位置 |
到目前为止,我们已经以静态方式获得了飞机的位置。飞机的位置不会改变,因为它不会获取任何更新的数据。因此,在最后一步中,我们将使其动态化。飞机的位置将每5或10秒更新一次。然后,我们将使用飞机图标更改点标记,并分别沿航迹方向旋转它。
首先,让我们将点标记更改为飞机图标。右键单击数据层,然后选择“ 属性”。在左侧菜单上,选择 Symbology,然后选择topo airport图标,如图7所示。
图7.更改符号体系 |
要设置标记的旋转角度,请选择“ 旋转”参数右侧的菜单, 然后选择“ 字段类型:....”,然后选择“ true_track”列(见图8)。
图8.设置旋转角度 |
在继续下一步之前,单击“ 应用”或“ 确定”按钮。您应该看到飞机标记,它沿飞行方向角旋转,如图9所示。
图9.飞机标记及其旋转角度 |
最后,让我们在一个时间间隔内更新数据。选择数据层,然后再次选择属性。在左侧菜单中选择“ 渲染”。在右侧窗口中,选中“按间隔(秒)刷新层”选项,并将其设置为5或10,如图10所示。这意味着该层将每5或10秒刷新一次。如果在刷新后发生任何数据更改,飞机的位置将被更新,我们将获得几乎实时的空中交通实时数据,该数据在QGIS中可视化,如图1所示。
图10.设置刷新层间隔时间 |
以上就是本教程中如何在QGIS中可视化几乎实时的实时数据的全部内容。我认为这种方法可用于其他情况,例如可视化传感器数据,在水位,温度,湿度等领域进行测量。希望这篇文章能激发您的灵感,并感谢您的阅读!
我自己录了一段视频:
欢迎扫码关注