“Zed, you are so excellent.”

为什么要写这句英文?容我卖个关子稍后再解释。

相信大多数人都体验过Google Earth(简称GE),我对GE最初的印象是在大学宿舍,当时Google刚刚推出GE时,舍友们喜欢在上面找自己的家,惊讶于它的精细程度,并担心是否对中国有一定的安全隐患。

坦白说,当时我对GE上找家没一点兴趣,但不能否认写到这时,我停下笔,打开了GE,花了很长时间找到了我在成都和泰安的家。我想中国80后的一代对家的概念或多或少有一定的困扰吧。比如我,生在泰山脚下,十八岁那年离开故乡,在北京学习工作了九年,莫名其妙的在成都安家,掐指一算四年有余。这让我不禁纳闷,尽管国家的全部土地都归公民所有,貌似没有任何一寸土地属于我个人,何处是我的家?故土还是户口?如那久未谋面的故人还是隔窗对望的路人。好了,带上耳机听上一曲《鹿港小镇》,我们还是进入正题。

GoogleEarth的影像确实可以说是全球最佳影像数据,数据完整,更新及时,无IP限制,最重要的一点,没有偏移。这么宝贵的影像数据能这么大方的开放给大家,Google自然对自己的加密算法自信慢慢。可惜,就算是巨人般的Google,也会在程序员面前露出破绽。好戏开始了。

类似上一篇解析百词斩的过程,首先我们先要想办法能获取这些数据,然后才能解析它。Google的技术自然毋庸置疑,直接放弃人肉搜索,一点技术含量都没有。这里我用的是HttpDebugger软件,可以查看本地应用程序的请求。这里打开GE随意浏览,你就可以捕获到如下的请求队列:

数据请求的url终于得到了,如鱼在哽的感觉。这url到底是什么规范,行列号在哪里?flatfile又是什么东东?这些-i,-t,-q又是干什么用的?下面的数字685又是什么意思?光归纳问题就得花不少时间来消化,仿佛一拳被KO的节奏。

我想这个时候,你应该和我一样,默默的把url下载下来,尝试看一下里面的内容,或许这是唯一能做的事情了吧。于是乎,我切切的,怯怯的下载下来,以16进制打开该文件,瞬间泪崩的既视感:

无从下手啊。明明是一部不错的岛国爱情动作片,非要全屏马赛克,急死宝宝了。于是我Google了很久,作为一名程序员,FQ技术就不普及了。找了半天都没任何进展,真的是将近一整天没有一丝想法。不小心的找到一个俄文网站,里面提到了影像数据的解析算法,编码解析后,发现果然可以。这里要说明一下,应该是白俄罗斯的网站,顿时对战斗民族的破解技术有了新的认识。

总算有了一点头绪,原来该数据进行了一次加密,所以需要解密。密钥一共是1024个字节,如下的一串没道理的数字:

而这时候,你需要的是对下载下来的影像数据的所有字节依次解码,代码如下:


如上,解码的过程就是对读取的每一个字节和密钥做一次异或。解码后就可以得到原始的jpg影像。当然,如果你在GE中选择压缩,则获取的影像是DXT格式。但我个人测试发现,在我本机无论选不选压缩,都是jpg格式的,这个就不追究了。

影像的解析搞定后,这只是有了一点点曙光,离胜利还有很远。为什么这么说呢?第一Google提供历史影像,而url的规范又是如何,这段密钥是怎么获取到的,真的是才下眉头又上心头啊。

比如这样一个url:https://khmdb.google.com/flatfile?db=tm&f1-02000123-i.19-f859f,我们怎么获取里面的信息,或者我想下载某一个瓦片,其对应的url又是如何?首先解释一下02000123这串数字的意思,截取Zed博客的图片,最直观明了:


原来这串数字就是一个四叉树的信息,依次递归可以找到对应的瓦片位置,每一位都是0~3之间的一个数字,代表在该级别下对应的四叉树的索引。对此我实现了如何根据这串数字获取对应的经纬度:

后面的f859f需要转为二进制,如下: fa99b == 11111010100110011011== 11111010100 | 11001 | 1011== 2004 | 25 | 11不难看出来,这表示该历史影像的拍摄日期。

另外对应的-i.**对应的是其版本号信息。这个版本号又是如何获取?原来GE中每一个瓦片对应一个q2-xxx-q.yyy这样的qtree文件,里面会存储这些tile的时间和版本信息,包括历史数据等内容。

这样就有了两个问题:第一,qtree文件也是有版本号的,这个是如何获取?第二,qtree文件该如何解析?

原来在GE启动时,会更新一个dbRoot.v5文件,把该文件下载下来,16进制打开后你会发现,第七个字节和第八个字节分别是0XF4和0XBD,这时用0XBDF4和0x4200做一次异或,对应的结果就是qtree的版本号,这样你就可以请求每一个瓦片对应的qtree文件了。同时,上面所说的密钥,也保存在该文件中,而且从来都没有变过。

这趟GE数据解析之旅,和我平时的工作相关性不大,所以收获很多,大开眼界,偷窥了一点点GE这种级别的数据处理方式。当然,竟然有人能够破解这种复杂度的数据,我非常非常的钦佩。上面所说的所有内容,都是我在Zed的指点下了解的,或者简介通过他的博客。我并没有问他地形数据如何解析,因为我知道他基本不会告诉我,但他跟我说里面是三角形。

当然,这里只是介绍了一个头,qtree文件如何解析?这个坦白说,我也只是一知半解,只是知道大概方法,但还没有彻底搞清楚。因为时间精力的原因,需要话一些时间,成本超过了我的兴趣程度,所以作罢。

这些工作都是两年前做的,今天整理一下,也算对这个小小的遗憾做一次整理,和Zed聊了两三个小时,受益匪浅,于是也就有了文章开头的那句话。今后不再研究GE的数据解析部分了,毕竟术业有专攻。这部分我不专业,希望如果你知道的话,请悄悄的告诉我。

最后,作为一名GIS行业的码农,作为一名三维技术人员,我非常尊重Google Earth。

转载于:https://www.cnblogs.com/fuckgiser/p/6424207.html

Google Earth影像数据破解之旅相关推荐

  1. Google Earth Engine(GEE)——MODIS 影像LST地表温度随时间变化的趋势案例分析

    该实验室的目标是使用 Google Earth Engine 深入研究气候变量.在本实验结束时,您将能够探索特定感兴趣区域的温度数据的长期趋势. MODIS LST 数据集 MOD11A2 V6 产品 ...

  2. 奥维互动地图加载地球引擎Google Earth Engine(GEE)1984-2022 地球卫星资源 亲测有效,路亚 钓鱼 露营 水下结构 水文 温湿度 地貌变化 大数据AI分析 神器

    Google Earth Engine是一个专门处理卫星图像和其他地球观测数据云端运算平台. 此平台能够存取卫星图像和其他地球观测数据数据库中的资料并提供足够的运算能力来处理这些数据. [1] 平台的 ...

  3. (一)Google Earth Engine概述

    Google Earth Engine (GEE) 是由谷歌公司开发的众多应用之一.借助谷歌公司超强的服务器运算能力以及与 NASA 的合作关系,GEE 平台将Landsat.MODIS. Senti ...

  4. Google Earth Engine——概述

    概述 GEE(Google Earth Engine)平台是一个集科学分析及地理信息数据可视化的综合性平台,该平台提供丰富的API,以及工具帮助方便查看.计算.处理和分析大范围的各种影像等GIS数据. ...

  5. Google Earth Engine(GEE)简单介绍及注册

    Google Earth Engine(GEE)是由谷歌.卡内基梅隆大学.美国地质调查局(USGS)共同开发的用以处理卫星遥感影像数据和其他地球观测数据的云端运算平台.GEE平台融合了谷歌服务器提供的 ...

  6. Google Earth Engine谷歌地球引擎GEE地理坐标系与投影坐标系变换与重投影

      本文主要对GEE中地理坐标系与投影坐标系转换.重投影等操作加以介绍.本文是谷歌地球引擎(Google Earth Engine,GEE)系列教学文章的第十三篇,更多GEE文章请参考专栏:GEE学习 ...

  7. Google Earth Engine 下载遥感影像——以Landsat 8数据为例

    目录 1.Google Earth Engine(GEE)简介 1.1 开发环境 1.2 说明书 2.GEE账号注册 3.GEE 查询库内卫星影像以及调用 3.1 数据集Datasets 3.2 加载 ...

  8. Google Earth Engine

    1.GEE是什么? GEE(全称Google Earth Engine)是大谷歌下属的一个可以批量处理卫星影像数据的工具,属于Google Earth一系列的工具.相比于ENVI等传统的处理影像工具, ...

  9. Google Earth 常用操作

    您的点赞和关注是我创作的最大动力~~ 历史影像查看 Google Earth Pro 点击工具栏上的 "show historical imagery" 按钮或者点击 " ...

  10. Google Earth Engine批量下载Sentinel、Landsat、MODIS遥感影像代码

    Google Earth Engine批量下载Sentinel.Landsat.MODIS遥感影像代码 一.创建下载任务 二.运行下载任务 一.创建下载任务 Google Earth Engine(G ...

最新文章

  1. 管理中应避免“妇人之仁”
  2. Java程序员月薪20k的涨薪秘籍:培训班java找不到工作
  3. pycharm提示:PEP 8: E127 continuation line over-indented for visual indent
  4. Linux内存初始化(C语言部分)
  5. 大数系列三——斐波那契数列——高效万进制,亿进制
  6. oracle votedisk ocr,Oracle RAC 重建OCR和Votedisk
  7. Servlet 数据库访问
  8. 人人都能够做深度学习应用:入门篇
  9. python通讯录文件读取_python通用读取vcf文件的类(可以直接复制粘贴使用)
  10. Fireworks免费下载
  11. python语言是编程还是脚本_编程语言和脚本语言有什么区别?
  12. 基于智能手机的物流管理系统
  13. keil的终极配色方案(提供配置文件)
  14. 三角形中重心、内心、外心、垂心向量计算公式
  15. cad多段线画圆弧方向_cad弧形多线(cad多段线怎么画弧线)
  16. 诞生11年,入华9年,今年的智慧城市会更好吗?
  17. ESP车身电子稳定系统
  18. 计算机科学第三讲——布尔逻辑和逻辑门
  19. 【Python】绘制GPX轨迹图并定位特定时间点
  20. Android 手机上获取手机当前上网IP地址(手机网关给手机号分配的IP)

热门文章

  1. IDEA配置Android-SDK
  2. 软件定义存储正当时 厂商纷纷争抢一杯羹
  3. Pytorch 情感分类进阶
  4. HENKAKU!PSV(Vita)编程小白探索笔记(一)信息收集篇
  5. win7蓝屏0x0000003b解决教程
  6. 测度论与概率论基础学习笔记8——3.2积分的性质
  7. Xposed模拟位置
  8. 华为linux输入法,华为默认手机输入法原来还能这么玩??涨知识了
  9. 设计一个家庭记账管理系统(Java)
  10. Language Models are Unsupervised Multitask Learners翻译