unity 文本实时刷新_QGIS中航班实时数据可视化(Almost Realtime Live Data Visualization in QGIS)...

暑假的想法终于实现了,虽然是别人的成果58a8181088d443a69bfb68c730c71326.png

一起来看看吧!

我自己录了一段视频

(B站上看更方便一点,搜Darcy_Ocean应该能找到,):

谷歌翻译版:

在使用QGIS之类的GIS软件进行工作时,大多数情况下,我们正在处理静态数据,例如街道,建筑物,土地覆盖物等。或者可能是具有时间信息的数据,因此我们可以可视化时间变化。几乎实时可视化实时数据呢?我们需要GIS服务器,云或地图服务吗?我认为这是一个有趣的话题,在这篇文章中,我将通过实时空中交通数据用例进行讨论。

在上一篇文章中,我制作了一个教程, 介绍了如何使用Python中的露天交通数据构建飞行跟踪应用程序。该应用程序正在Web浏览器中运行,并且航班数据将在指定的时间间隔内更新。在本教程中,我们将在QGIS中执行相同的操作。我们将在QGIS地图画布上可视化空中交通实时数据,并每隔五到十秒获取更新数据。在本教程的最后,我们将获得一个区域内几乎实时的飞机位置,如下图1所示。

154cd4ca22c0e793b8772936fefa9eb4.gif

图1. QGIS中的空中交通实时数据。飞机正排队在圣弗朗西斯科国际机场降落

图2是显示系统工作原理的架构。从该模式可以看出,Python在请求数据,获取响应,处理响应并将数据存储到CSV纯文本中扮演着重要角色。另一方面,QGIS将根据数据渲染飞机的位置,并在一定间隔内对其进行刷新以获取最新信息。为了实现它,我们不需要任何GIS服务器,云或地图服务。只要机器上安装的Python和QGIS可以与Internet连接,任何人都可以这样做。

8e643a23ceec74487a01fe3262e91c65.png

 图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文档。

13262b339da14ae141274d08c8b57bd8.png

图3.实时空中交通数据响应

发送请求并处理实时数据响应

在这一步中,我们将编写Python代码来请求实时空中交通数据并处理响应。完整的代码可以在本节末尾找到。

我们从导入一些库开始,即:请求,json,csv和时间。然后用最小和最大坐标定义坐标范围。接下来在第16行,指定了将存储响应数据的输出路径,因此请确保随您的路径进行更改。如果你是一个注册的开放天空网络用户,送礼者你的用户名,并在密码 USER_NAME密码在19-20行变量。该代码的最后一部分用于使用请求发送查询,以JSON格式获取响应并将其保存到CSV文件中。对于匿名请求,此过程将在10秒的间隔内循环执行;对于注册用户,此过程将在5秒的间隔内完成。 

 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
'''LIVE AIR DATA TRAFFIC REQUESTby ideagora geomatics | www.geodose.com | @ideageo'''#IMPORTING LIBRARIESimport requestsimport jsonimport csvimport time#AREA EXTENT COORDINATE GCS WGS84lon_min,lat_min=-125.974,30.038lon_max,lat_max=-68.748,52.214#CSV OUPUT PATHcsv_data='/home/data.csv'#REST API QUERYuser_name=''password=''url_data='https://'+user_name+':'+password+'@opensky-network.org/api/states/all?'+'lamin='+str(lat_min)+'&lomin='+str(lon_min)+'&lamax='+str(lat_max)+'&lomax='+str(lon_max)col_name=['icao24','callsign','origin_country','time_position','last_contact','long','lat','baro_altitude','on_ground','velocity',       'true_track','vertical_rate','sensors','geo_altitude','squawk','spi','position_source']#REQUEST INTERVALif user_name !='' and password !='':sleep_time=5else:sleep_time=10#GET DATA AND STORE INTO CSVwhile col_name !='':with open(csv_data,'w') as csv_file:csv_writer=csv.writer(csv_file,delimiter=',',quotechar='"',quoting=csv.QUOTE_ALL)csv_writer.writerow(col_name)response=requests.get(url_data).json()try:n_response=len(response['states'])except Exception:passelse:for i in range(n_response):info=response['states'][i]csv_writer.writerow(info)time.sleep(sleep_time)print('Get',len(response['states']),'data')

保存带有Python扩展名(.py)的代码,然后从命令提示符或终端运行它。如果使用python 3,然后输入文件名,则键入pythonpython3。该代码将如下图4所示运行。 

不要关闭终端,因为它将持续工作以从OpenSky Network获取最新的空中交通数据,我们将在QGIS中使用它。

a628ba4bdcc8d53cfd6884f9515c8991.png

图4.飞行数据请求

在QGIS中可视化实时空中交通数据

我们已经获得了实时数据流,现在让我们通过以下步骤在QGIS中对其进行可视化处理。

将CSV数据添加到QGIS中。在“ 数据源管理器”中,在左侧菜单中选择“定界 文本 ”。然后在右侧,选择“ 文件名”。几何定义部分选择 X字段纬度列 Y字段。确保正确获取样本数据。如果不是,请尝试使用“ 自定义分隔符”选项更改“ 文件格式”部分中 的分隔符属性。    

bf794a9b4d0881359d88165e29f340b6.png

图5.将空中交通数据添加到QGIS

按下数据源管理器中的“ 添加”按钮后,将在QGIS地图画布上绘制飞机在请求区域内的位置。要使其在地理空间范围内更有意义,请添加底图。为了添加底图,我使用了 Tile + 插件,该插件提供了一些流行的底图。对于这种情况,我使用了STAMEN TERRAIN底图。图6用STAMEN TERRAIN底图显示了所有飞机在美国的位置。

882b7cfe0e44925ac88ffda0dedc54a9.png

图6. QGIS地图画布中的飞机位置

到目前为止,我们已经以静态方式获得了飞机的位置。飞机的位置不会改变,因为它不会获取任何更新的数据。因此,在最后一步中,我们将使其动态化。飞机的位置将每5或10秒更新一次。然后,我们将使用飞机图标更改点标记,并分别沿航迹方向旋转它。

首先,让我们将点标记更改为飞机图标。右键单击数据层,然后选择“ 属性”。在左侧菜单上,选择 Symbology,然后选择topo airport图标,如图7所示。

f589b4d9b80bf17347f69f551a0dc69a.png

图7.更改符号体系

要设置标记的旋转角度,请选择“ 旋转”参数右侧的菜单, 然后选择“ 字段类型:....”,然后选择“ true_track”列(见图8)。

82c61ca0185843bec7d7c7cd53245daf.png

图8.设置旋转角度

在继续下一步之前,单击“ 应用”或“ 确定”按钮。您应该看到飞机标记,它沿飞行方向角旋转,如图9所示。

8bbf3bb07e5538ddbf9491095d100ed7.png

图9.飞机标记及其旋转角度

最后,让我们在一个时间间隔内更新数据。选择数据层,然后再次选择属性。在左侧菜单中选择“ 渲染”。在右侧窗口中,选中“按间隔(秒)刷新层”选项,并将其设置为5或10,如图10所示。这意味着该层将每5或10秒刷新一次。如果在刷新后发生任何数据更改,飞机的位置将被更新,我们将获得几乎实时的空中交通实时数据,该数据在QGIS中可视化,如图1所示。

651ddb2a30c39d795b748834ce0e289d.png

图10.设置刷新层间隔时间

以上就是本教程中如何在QGIS中可视化几乎实时的实时数据的全部内容。我认为这种方法可用于其他情况,例如可视化传感器数据,在水位,温度,湿度等领域进行测量。希望这篇文章能激发您的灵感,并感谢您的阅读!

我自己录了一段视频:

欢迎扫码关注

8339fd8050d86cc44c1aea60bc375e16.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值