Rétro-ingénierie de parties non documentées de Google Earth. Un travail similaire est effectué ici pour Apple Maps.
L'accent a été mis sur le mode satellite 3D, ce qui a nécessité de creuser :
Le code a été écrit et testé dans diverses régions et villes :
Structure des URL :
"https://kh.google.com/rt/?/?"
- ?: planet
- "earth"
- "mars"
- ...
- ?: resource
- "PlanetoidMetadata"
- "BulkMetadata/pb=!1m2!1s❶!2u❷"
- ❶: octant path
- ❷: epoch
- "NodeData/pb=!1m2!1s❸!2u❹!2e❺(!3u❻)!4b0"
- ❸: octant path
- ❹: epoch
- ❺: texture format
- ❻: imagery epoch (sometimes)
Divers :
General info:
- Everything is stored in an octree.
Roles of resources:
- PlanetoidMetadata points to first BulkMetaData.
- BulkMetaData points to other BulkMetaData and to NodeData.
- NodeData contains actual meshes and textures.
Versioning:
- BulkMetaData and NodeData are versioned using epoch numbers.
- PlanetoidMetadata provides epoch of first BulkMetaData.
- BulkMetaData provides epochs of underlying resources.
- Current version of a resource can be determined recursively.
NodeData:
- Mesh: packed XYZ, UV, octant mask, normals
- Texture: JPG, CRN-DXT1
- Raw format: see rocktree.proto and rocktree_decoder.h
- Other optimizations: BVH
BulkMetaData:
- Oriented Bounding Box
- Dump OBB to obj: https://gist.github.com/retroplasma/5698808bfaa63ffd03f751a84fa6ce14
- Latlong to octant using OBB (unstable): https://github.com/retroplasma/earth-reverse-engineering/blob/443a3622ce9cb12cd4460cc6dc7999cc703ae67f/experimental_latlong_to_octant.js
Idées associées : Jeu de course, Client minimal. WebGL + CORS devrait fonctionner (test).
LE LOGICIEL EST FOURNI « EN L'ÉTAT », SANS GARANTIE D'AUCUNE SORTE, EXPRESSE OU IMPLICITE, Y COMPRIS MAIS SANS LIMITATION LES GARANTIES DE QUALITÉ MARCHANDE, D'ADAPTATION À UN USAGE PARTICULIER ET DE NON-VIOLATION. EN AUCUN CAS LES AUTEURS OU LES TITULAIRES DES DROITS D'AUTEUR NE SERONT RESPONSABLES DE TOUTE RÉCLAMATION, DOMMAGES OU AUTRE RESPONSABILITÉ, QUE CE SOIT DANS UNE ACTION CONTRACTUELLE, DÉLIT OU AUTRE, DÉCOULANT DE, DE OU EN RELATION AVEC LE LOGICIEL OU L'UTILISATION OU D'AUTRES TRANSACTIONS DANS LE LOGICIEL.