Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/retroplasma/earth-reverse-engineering
Reversing Google's 3D satellite mode
https://github.com/retroplasma/earth-reverse-engineering
3d-models client exporter extract gis google-earth google-maps reverse-engineering
Last synced: about 1 month ago
JSON representation
Reversing Google's 3D satellite mode
- Host: GitHub
- URL: https://github.com/retroplasma/earth-reverse-engineering
- Owner: retroplasma
- Archived: true
- Created: 2019-01-12T06:10:07.000Z (almost 6 years ago)
- Default Branch: master
- Last Pushed: 2020-12-23T00:03:53.000Z (almost 4 years ago)
- Last Synced: 2024-09-20T21:30:41.761Z (about 2 months ago)
- Topics: 3d-models, client, exporter, extract, gis, google-earth, google-maps, reverse-engineering
- Language: C
- Homepage:
- Size: 1.76 MB
- Stars: 2,235
- Watchers: 71
- Forks: 214
- Open Issues: 17
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
- jimsghstars - retroplasma/earth-reverse-engineering - Reversing Google's 3D satellite mode (C)
README
![header](header.png "Header image: 37.793647, -122.398938")
Reverse-engineering undocumented parts of Google Earth. Similar work is done for Apple Maps [here](https://github.com/retroplasma/flyover-reverse-engineering).
#### Status
The focus has been on the 3D satellite mode, which required digging into:
- URL structures
- octrees and conversion from geo coordinates
- Protobuf formats of assets and metadata
- postprocessing steps (e.g. unpacking of meshes and textures)Code was written and tested with various regions and cities:
- [Flycam client](./client/) (C++, native + WebAssembly)
- [Model exporter](./exporter/) (JS, works without photogrammetry or graphics debuggers)#### Info
URL structure:
```
"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)
```Misc:
```
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
```Related ideas: [Racing game](https://www.reddit.com/r/Showerthoughts/comments/aex25s/race_car_video_games_could_be_amazing_if_they/) , [Minimal client](https://github.com/kaylathedev/google-maps-3d-client). WebGL + CORS should work ([test](https://retroplasma.github.io/get_planetoid_metadata.html)).
#### Important
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.