“足迹”用户可以参考手动录入飞航路线
免费获取方式
免费获取方式有一个最大的问题,就是你最好赶在本航线下一班飞机排班之前获取到你搭乘的航班的飞航信息(防止忘了)
不过倒也不是没有挽救机会
之前有限航班还是可以看的,但是如果时间比较长了那就寄了(超过三个月),不过飞航路线一般是比较稳定的,如果你不追求100%的对应,两年前坐过的航班你拿今天的数据也大差不差
还有一个问题就是由于Excel并不是专业处理.csv文件的软件,所以对csv文件编辑有上限,达到上限会这样
所以推荐去网上找几个专门编辑.csv的编辑器
我们先来看足迹的导出数据(怎么导出数据就不用我教了吧)
看似这么多数据,最关键的只有三个,dataTime(时间)、longitude(经度)、latitude(纬度),有了这仨就构成了最基本的定位数据
其他的数据也介绍一下locType(location type大概这个意思)、heading(航向、方向)、accuracy(定位精度)、speed(速度)、distance(距离,大概是定位点之间的距离)、isBackForeground(这个我也不明白)、stepType(微软说是:指定要为控件中的 Wizard 步骤显示的导航按钮的类型)、altitude(高度)
那么怎么获取这些数据?
获取数据
免费的就不要想直接给你CSV/XML了,没有人这么闲,要自己来
首先搜索FlightAware
在网站中搜索你搭乘的航班,这里以日照山字河飞往北京大兴的联航KN5936为例
在右下角找到航班图表,这是本航线最新一班的航线(永远都是最新的一班,所以知道为什么要在下一班起飞之前就获取图表了吧)
获取的图表是这样的
可以看到,我们需要的数据有:时间、纬度、经度、航向、公里/小时、米,分别对应dataTime、latitude、longitude、heading、speed、altitude(注意经纬度顺序,一定注意)
如果你使用的是edge浏览器,可以使用内建工具进行网页截屏然后把图表剪出来,其他浏览器比如Chrome也可以找插件
为什么把图表剪出来?因为我们要做OCR识别,手动录入累死人,如果整个截图都放上去是很难输出准确的图表的
关于OCR识别,可以使用手机上的扫描王什么的,不过当时我用的是在线工具
但是这个在线工具有个问题就是你多了它识别不了,所以我为了准确度,每次截取一列数据的一半识别(如果航线短可以整列试试,但是一定要一列一列的来)
如果嫌累的话只识别 时间 经纬度 三个基本数据也行,比如我
其实也是很累的,导出的图表也是要自己微调,微调我就不教了,这属于Excel范畴
下面就是重点了,如果细心的话你能发现,足迹导出的文件的dataTime好像不是正常看的时间,对了,这个时间是timestemp时间戳,数据库会用这种时间戳来存储时间
下面我就教你们怎么转换时间
转换时间
FlightAware上的时间格式是“星期X HH:mm:ss AM/PM”(实际上AM不显示),首先要做的就是把HH:mm:ss提取出来
这里需要使用RIGHT函数,函数参考:“=RIGHT(A2,8)”,A2是目标的位置,8的意思是是提取从右边数八位(为什么提取八位,我也不知道,而因为我的数据后面都带了一个空格,空格也算位数,所以去了一个零),提取八位正好相当于去掉了星期几
如果你的数据有的有空格有的没有空格,那你可以参考这篇教程,怎样快速删除excel中的空格(多种解决方法)
如果你转换过来发现没了秒(我就遇到了),这不是你或者excel的问题,是Windows的锅,去控制面板找到“更改日期、时间或数字格式”,改成如下这样,总之就是让“长时间”能显示秒
转换完成后把鼠标移动到转换了的时间的单元格的右下角,鼠标会变成一个实心黑色十字,双击它,excel会自动填充
假如说你的数据结尾有PM,那么可以用MID函数进行提取,MID函数教程
提取出来HH:mm:ss后要注意,FlightAware上面的时间都是EST时间,即 北美东部夏令时间 (UTC-4) ,与北京时间的换算是加上十三个小时
所以需要使用时间加法:“=B2+TIME(13,0,0)”,B2是之前提取的八位时间的单元格,加上TIME函数,excel会自动对时间进行加法运算
而后同样的方法填充整列
现在的时间就变成北京时间了
但是时间戳是包含日期的,现在只有时间,所以要加上日期,加日期的第一步是创建一整列当天的时间
先写一个当天的日期,如果不符合“YY-mm-ss”格式,右键去单元格格式里调整,然后填充整列并选择复制单元格而不是填充序列
这样就得到了一列整日期
创建了一整列日期之后就可以合并了,合并使用的函数是CONCATENATE,这一步比较麻烦
由于各种原因需要去查看年月日的格式代码,具体教程可以参照excel Concatenate函数 实现连接过的日期数值能保持原有日期格式
依照我这种方法的函数写法为:“=CONCATENATE(TEXT(D2,”yyyy-mm-dd;@”),” “,TEXT(C2,”hh:mm:ss”))”
现在你的数据应该是“YY-mm-ss HH:mm:ss”的格式(注意日期和时间中间有个空格),如果不是,去单元格格式调一下
实际上最终的转换反而是最简单的
“=INT((E2-70*365-19)*86400-8*3600)”
这样就得到了十位时间戳,最麻烦的时间算是完成了
locType
全部填充1
longitude & latitude
填充经度和纬度(注意不要搞反了)
heading
填充0
accuracy
填个65就差不多,实际上在飞机上即使能定位到,误差1000也很正常
speed
speed这个如果你有闲工夫的话也能录上
distance
填100就行
isBackForeground
填1
stepType
填0
altitude
和speed同理,有闲工夫就整,没闲工夫也无所谓,不影响显示
要钱的玩法
要钱那就容易多了,打开Flightradar24,买一个Silver或者Gold方案,可以直接下载CSV/XML文件
时间人家转换好了十位时间戳,Position可以以逗号为分隔分别提取前后的经纬度
然后我跟你说说价格,Silver一年1150日元(我是iOS日区,约合人民币58元),Gold一年3900日元(约合人民币195元),看起来也没那么贵,不差钱可以试试
局限性
如图所示,过了北京之后数据少了很多,这就牵扯到这类飞航数据的来源了
一般来说,配备ADS-B的飞机可发射其精确位置,而配备Mode S的飞机则可在其信号被三个或更多接收器收到时通过多点定位(MLAT)进行跟踪,这些信号需要地面进行接收,无论是FlightAware还是Flightradar24,都比较依赖于网络ADS-B接收器,一种可以接收ADS-B数据并通过任何可用互联网连接将数据馈送至服务器的设备
而因为众所周知的原因,这些玩意在大陆是容易被当做间谍设备被查处的,所以在中国这些设备少之又少
所以很多飞航数据是缺失的,根据FlightAware ADS-B 数据统计,偌大的中国只有83个站点,对比美国的14,942,少得可怜
但是没有这些设备也不会影响基本数据,毕竟应答机每时每刻都要汇报自己的位置,不然大洋上就没法定位了
不过如果你人在国外或者乘坐跨国班机,这种情况会好很多