查看原文
其他

堪比 007 电影!通过一张照片找到拍照者的精确位置

(给程序员的那些事加星标

视频来源:EyeOpener

文章整理:程序员极客实验室


这是一张发表在国外论坛上的旅行照片,发出照片的博主还附了三条简短的信息。


  1. 天空中的那道白线是一架波音747-8F此时,它正伦敦飞往香港

  2. 照片的拍摄时间是2019年10月30日

  3. 拍摄者此时在旅馆里


问:这家旅馆的名字是?

注:下面是这个视频,不方便看视频的朋友,请往下看文字版。如果觉得这个问题解答很有意思,不妨推荐给你的朋友。


也许你会对这个莫名其妙的问题感到一脸茫然。这其实是网友发起了一项侦探挑战赛。相信我既然能够通过网络看到这段视频,那你也拥有解答这个问题的能力。

不过问题在于你该如何去使用它?最通用的思路是用图片搜索,但是目前的搜索引擎只会给出一堆无关信息。也许在看到视频的当天,你已经可以通过这种方式找到类似的分享攻略,进而找到答案。

但是请相信我接着看下去,你会对自己拥有的能力有更深入的理解。这照片发布的当天图片搜索是无效的,因为其中找不到任何有关城市的地标建筑照片中的那栋大楼也没有什么鲜明的设计风格。

所以我们需要回过头来想一想,我们到底知道哪些信息?照片的拍摄时间是2019年10月30日,天气很晴朗,拍摄者背对着太阳,天空中飞过一架从伦敦飞往香港的波音747。


前三个条件在地球上任何地点都可以实现。所以解密的关键在于那架从伦敦飞往香港的飞机,要知道商业飞机的航线基本是固定的。既然航线是固定的,从伦敦到香港,而我们又知道照片拍摄的日期。


所以只要在相关的航空咨询网站(www.flightradar24.com)查找一下在2019年10月30日这一天从伦敦飞往香港的飞机,再结合他的型号波音747-8F我们就可以得知照片中这架飞机航班号是N617UP找到这次航班之后,我们就可以在对所有人公开的网站上得到航班对应的KML文件。


KML是一种特殊的文件格式,它可以在地图软件中显示特定的地理数据。比如一家飞机从起飞到降落所经过的所有的经纬度位置,还有他在每个具体点的飞行高度。将这架飞机的KML文件上传到谷歌地球之后,我们就可以准确的再现它在2019年10月30日的活动轨迹。


比如他是如何从伦敦起飞,又是如何从香港降落而照片的拍摄者就在这条狭长的飞行轨迹附近。现在我们的搜索范围从整个地球一下子缩到了这条狭长的轨迹上。所以接下来的问题就变成了在他按下快门的那一瞬间,这架飞机的这条线的哪个点?


要知道KML文件不仅仅记录了飞机的轨迹,他同时还对应着飞机在每个点的时间信息,比如根据左上角解析出来的信息,我们可以知道这架飞机是在当天上午6点多出发的。不过需要注意的是,这是UTC时间,也叫协调时间时,它基本和格林威治标准时间相当。我国采用东八区时间,所以我们经常看到我们的时间是UTC+8。通过使用UTC时间,跨国飞机可以避免,因为短时间穿过多个时区而让自己产生混乱。


因此,我们明确了飞机位置和时间的对应关系。实际上通过具体的位置和时间,我们就可以得知飞机在航线不同位置时的天气情况。具体操作方式我们一会儿再讲。而照片中飞机所在的天空晴空万里,所以我们首先可以排除那些在航线上处于黑夜的地段。


这里我们用到的是一家名叫SunCalc(http://www.suncalc.org/)的天文观测网站,将坐标定位到伦敦。然后在左侧将时间拨回到2019年10月30日,UTC时间6点12分,此时的伦敦很明显还是在黎明到来之前的黑夜当中,因此伦敦可以直接排除。考虑到飞机抵达目的地的时间是UTC 17点30分,此时的香港是凌晨一点半。根据这个信息再结合原始照片和飞机航线图,照片里的飞机不可能在已经入夜的中国,所以大概可以先排除航线的后半程。


而当我们的目光聚焦到飞机的前半程后,会发现此时的飞机航线大体朝向正东。所以原先这张几乎一清二白的照片里面又多了一个重要的信息,飞机指向正东,拍摄者面朝西侧,看着这条航线你会不会感到奇怪?印象中的飞机都是平着飞,为什么这里的航线似乎要一飞冲天离开地球呢?这其实属于一种视错觉。在地图软件上模拟一下就可以明白。航线之所以这么陡,是因为拍摄者离他太近。既然飞机向东前进,那拍摄者应该在航线的北侧。否则的话,这条线看起来会和原图完全相反。


不过光知道这一点还是不足以让我们推测出问题的答案。好在这张照片里还隐藏着一个不起眼,但是同样关键的信息。拍摄者面前的这栋建筑至少也有五六层高,而照在这栋楼上的影子几乎快要没过它本身。考虑到欧洲地广人稀的局面,这应该是一座比较繁华的大城市。


所以我们现在的筛查点是:
  • 一、航线的前半部分,也就是欧洲。

  • 二、距离航线非常近的城市。

  • 三、拍摄是在航线以北,所以这座城市也靠北。




至少它不可能完全位于航线的南侧,让我们从西向东开始寻找。

阿姆斯特丹是一个很有诱惑力的选项,但是飞机经过这里的时间是UTC上午6点半左右。此时的阿姆斯特丹天也还没有亮。经过反复的对比和筛查,我们排除了沿途的大部分城市。


随着航线的东移,一座条件几乎完美的城市来到了我们的眼前——柏林。航线穿城而过,而且柏林的大部分城区都在它的北部。此时的时间是UTC上午7点14分左右,柏林阳光正好。接下来我们需要借助3D视角的帮助,才能够确定旅馆最终的位置。不过直到近距离观察我才发现,想在柏林这么一座大城市里面,找到这么一栋毫无特色的建筑,简直是天方夜谭。


即便把范围划定在了城市的北半区也还是无济于事,借助从网络上搜集到的资料,我只能够走到这里,最终还是网络大神的耐心让我叹服。


他们把从不同地点看到的航线的角度和原图做对比,划定了一个和原图视角大致一致的区域。然后开始了摸网式的排查,最终经过大量的对比,那座熟悉的大楼终于出现在了我们的眼前。


顺着大神的指引,我在软件里还原了照片,而这家旅馆的名字是:Hotel H+ Mitte Berlin。他们甚至还根据照片中的位置关系,推测出了拍摄者当时所在的房间。还根据此处的KML数据推测照片拍摄于柏林当地时间8点13到14分之间。从一条浅浅的痕迹推测出拍摄者具体的酒店房间,这本是007电影才会出现的剧情,却可以通过对网络工具的合理使用成为真切的现实。


全程我们需要使用的工具和知识包括:
  • UTC时间

  • KML文件

  • 飞行航程查询网站(Flightradar24)

  • 免费的谷歌地球(Google Earth Pro)

  • 天空观测网站(Suncalc)


实际上大神们推导出这个结果,花费了长达几周的时间,我们在这里不过是简单的按图索骥。也许我们无法真的借此拥有和他们一样的超能力,但我想你肯定已经明白逻辑的力量能够有多强大。



- EOF -


推荐阅读  点击标题可跳转

1、用苹果 M1 电脑,打 Windows 游戏是种什么体验?

2、雷军 1994 年写的诗一样的代码,我把它运行起来了!

3、为什么程序员怕改需求?看完这些神解释我笑了


推荐关注「程序员的那些事」,不错过圈内事

点赞和在看就是最大的支持❤️

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存