Reverse Engineering Flyover (3D-Satellitenmodus) von Apple Maps. Ähnliche Arbeiten werden hier für Google Earth durchgeführt.
Diese Teile wurden grob herausgefunden:
Wir können URLs authentifizieren und texturierte 3D-Modelle aus gegebenen Koordinaten (Breitengrad, Längengrad) abrufen.
Daten werden in Kartenkacheln gespeichert. Diese fünf Kachelstile werden für Flyover verwendet:
Typ | Zweck | URL-Struktur |
---|---|---|
C3M | Textur, Netz, Transformation (, Animation) | ?(?|&)style=15&v=⓿®ion=❶&x=❷&y=❸&z=❹&h=❺ |
C3MM 1 | Metadaten | ?(?|&)style=14&v=⓿&part=❻®ion=❶ |
C3MM 2 | Metadaten | ?(?|&)style=52&v=⓿®ion=❶&x=❷&y=❸&z=❹&h=❺ |
DTM 1 | Gelände/Oberfläche/Höhe | ?(?|&)style=16&v=⓿®ion=❶&x=❷&y=❸&z=❹ |
DTM 2 | Gelände/Oberfläche/Höhe | ?(?|&)style=17&v=⓿&size=❼&scale=❽&x=❷&y=❸&z=❹ |
ResourceManifest
└─ AltitudeManifest
├─ C3MM
│ └─ C3M
└─ DTM?
Ich konzentriere mich vorerst auf C3M(M). DTMs sind Bilder mit einer Fußzeile und werden wahrscheinlich für das Raster verwendet, das beim Laden von Maps angezeigt wird.
Dieses Repository ist wie folgt aufgebaut:
Verzeichnis | Beschreibung |
---|---|
cmd | Befehlszeilenprogramme |
Pkg | der größte Teil des eigentlichen Codes |
Proto | Protobuf-Dateien |
Skripte | zusätzliche Skripte |
Verkäufer | Abhängigkeiten |
Installieren Sie Go 1.15.x und führen Sie Folgendes aus:
go get -d github.com/retroplasma/flyover-reverse-engineering/...
cd " $( go env GOPATH ) /src/github.com/retroplasma/flyover-reverse-engineering "
Bearbeiten Sie dann config.json:
./scripts/get_config.sh > config.json
./scripts/get_config_macos.sh > config.json
resourceManifestURL
: aus GEOConfigStore.db/com.apple.GEO.plist oder GeoServices-BinärdateitokenP1
: aus GeoServices-Binärdatei (Funktion: GEOURLAuthenticationGenerateURL
) Hier sind einige Befehlszeilenprogramme, die Code von pkg verwenden:
Verwendung:
go run cmd/export-obj/main.go [lat] [lon] [zoom] [tryXY] [tryH]
Parameter Description Example
--------------------------------------
lat Latitude 34.007603
lon Longitude -118.499741
zoom Zoom (~ 13-20) 20
tryXY Area scan 3
tryH Altitude scan 40
Dadurch wird der Santa Monica Pier nach ./downloaded_files/obj/...
exportiert:
go run cmd/export-obj/main.go 34.007603 -118.499741 20 3 40
Optional: OBJ mittig skalieren mithilfe des node.js-Skripts:
node scripts/center_scale_obj.js
In Blender (kompatibles Tutorial hier):
Dies authentifiziert eine URL mithilfe von Parametern aus config.json
:
go run cmd/auth/main.go [url]
Dies analysiert eine C3M v3-Datei, dekomprimiert Netze, liest JPEG-Texturen und erzeugt eine Struktur, die ein texturiertes 3D-Modell enthält:
go run cmd/parse-c3m/main.go [file]
Dadurch wird eine C3MM v1-Datei analysiert. Die C3MM-Dateien in einer Region umfassen Octrees, deren Wurzeln in der ersten Datei indiziert sind.
go run cmd/parse-c3mm/main.go [file] [[file_number]]
~/Library/Containers/com.apple.geod/Data/Library/Caches/com.apple.geod/GEOConfigStore.db
~/Library/Preferences/com.apple.GEO.plist
~/Library/Caches/GeoServices/Resources/altitude-*.xml
altitude-*.xml
URL im Ressourcenmanifest~/Library/Containers/com.apple.geod/Data/Library/Caches/com.apple.geod/MapTiles/MapTiles.sqlitedb
/System/Library/PrivateFrameworks/GeoServices.framework/GeoServices
/System/Library/PrivateFrameworks/VectorKit.framework/VectorKit
/System/Library/PrivateFrameworks/GeoServices.framework/XPCServices/com.apple.geod.xpc
GeoServices
/Applications/Maps.app/Contents/MacOS/Maps
VectorKit
DIE SOFTWARE WIRD „WIE BESEHEN“ ZUR VERFÜGUNG GESTELLT, OHNE JEGLICHE AUSDRÜCKLICHE ODER STILLSCHWEIGENDE GEWÄHRLEISTUNG, EINSCHLIESSLICH, ABER NICHT BESCHRÄNKT AUF DIE GEWÄHRLEISTUNG DER MARKTGÄNGIGKEIT, EIGNUNG FÜR EINEN BESTIMMTEN ZWECK UND NICHTVERLETZUNG. IN KEINEM FALL SIND DIE AUTOREN ODER COPYRIGHT-INHABER HAFTBAR FÜR JEGLICHE ANSPRÜCHE, SCHÄDEN ODER ANDERE HAFTUNG, WEDER AUS EINER VERTRAGLICHEN HANDLUNG, AUS unerlaubter Handlung ODER ANDERWEITIG, DIE SICH AUS, AUS ODER IN ZUSAMMENHANG MIT DER SOFTWARE ODER DER NUTZUNG ODER ANDEREN HANDELN IN DER SOFTWARE ERGEBEN SOFTWARE.