以下为译文:
我喜欢跟踪位置这个主题,因为感觉像是我有第六感一样。尽管看不到物体,却可以知道物体怎样移动。那么怎样才能获得第六感呢?通常人类只有五种感官。
我认为,既然我们生活在数字时代,那么科技就是我们的第六感。这篇文章将介绍的航班跟踪就是如此。现在已有很多航班跟踪应用,如flightradar24、FlightAware、flightview等,我们能够通过它们监控飞机在地球上的位置。本文不打算讨论这些应用,而是要探讨如何用Python制作自己的航班跟踪应用。
之前我发表过两篇用python跟踪航班的教程。一篇是使用python创建简单的航班跟踪应用,另一篇是使用pandas和bokeh创建航班跟踪应用。那么那两篇文章跟本文有什么区别?主要的区别是数据源。那两篇文章我使用了ADS-B Exchange,而这篇文章将使用Opensky Network。另一个区别就是模块的版本。本文将使用最新的python库,特别是绘图库。所以代码会略有不同。
闲话少说,现在开始介绍怎样通过python使用开放航空交通数据构建航班跟踪应用。本文由几个主题组成,包括:获取数据,导入依赖库,加载基础地图,绘制飞机位置,还有制作“实时”的航班跟踪应用。我们将依次讨论每个部分,在本文结束时,我们将会得到一个在浏览器中运行的航班跟踪应用,如图1所示。
图1 航班跟踪应用
获取航班交通数据
前面说过,本文将使用OpenSky Network提供的开放航空交通数据。OpenSky Network是一个非营利组织,它面向公众提供了开放的航空交通数据,用于研究和非商业用途。这些数据可以通过REST API、Python API和Java API访问。本文我们使用REST API来获取实时的航空交通数据。
使用REST API获取数据,可以通过发送请求来完成。可以使用两种类型的请求。第一种就是根据UNIX时间戳格式的时间,或者ICAO24地址来请求指定的航班。第二种就是使用WGS84坐标系统指定的地区,获取地区内的所有飞机数据。而且,数据访问可以匿名进行,也可以通过注册用户进行。匿名用户的数据分辨率为10秒,注册用户为5秒。
本文我们使用第二种方式。我们使用最小和最大坐标定义一个地区,然后发送查询,获取该地区内的所有飞机数据。例如,如果我们要获取美国上空的所有飞机,那么最小坐标为-125.974,30.038,最大坐标为-68.748,52.214。匿名用户和注册用户使用的查询分别如下所示。
# 匿名用户查询
https://opensky-network.org/api/states/all?lamin=30.038&lomin=-125.974&
lamax=52.214&lomax=-68.748
# 注册用户查询
https://username:password@opensky-network.org/api/states/all?lamin=30.038&lomin=-125.974&
lamax=52.214&lomax=-68.748
在继续阅读之前,我们先来尝试一下这两个请求,确保它们是正确的。将匿名查询复制粘贴到浏览器中。如果能获得如图2所示的响应,就说明是正确的。
图2 航空交通数据响应
图2中的响应的格式为JSON,包含两个键。第一个是time,第二个是states,它是一个列表数组,其中包含每架飞机的数据。该列表数组中有许多数据,如ICAO24地址、飞机的呼号、所属国家、时间位置、最后联系、经度、纬度、气压计高度等等。关于数据相应的完整解释和有关OpenSky Network API的进一步说明,请参见OpenSky Network API文档。