Flyover de ingeniería inversa (modo satélite 3D) de Apple Maps. Aquí se realiza un trabajo similar para Google Earth.
A grandes rasgos, se han resuelto estas partes:
Podemos autenticar URL y recuperar modelos 3D texturizados a partir de coordenadas determinadas (latitud, longitud).
Los datos se almacenan en mosaicos de mapas. Estos cinco estilos de mosaicos se utilizan para Flyover:
Tipo | Objetivo | estructura de URL |
---|---|---|
C3M | Textura, Malla, Transformación(, Animación) | ?(?|&)estilo=15&v=⓿®ion=❶&x=❷&y=❸&z=❹&h=❺ |
C3MM 1 | Metadatos | ?(?|&)estilo=14&v=⓿&part=❻®ion=❶ |
C3MM 2 | Metadatos | ?(?|&)estilo=52&v=⓿®ion=❶&x=❷&y=❸&z=❹&h=❺ |
MDT 1 | Terreno/Superficie/Elevación | ?(?|&)estilo=16&v=⓿®ion=❶&x=❷&y=❸&z=❹ |
MDT 2 | Terreno/Superficie/Elevación | ?(?|&)estilo=17&v=⓿&tamaño=❼&escala=❽&x=❷&y=❸&z=❹ |
ResourceManifest
└─ AltitudeManifest
├─ C3MM
│ └─ C3M
└─ DTM?
Centrándonos en C3M(M) por ahora. Los DTM son imágenes con un pie de página y probablemente se usan para la cuadrícula que se muestra cuando se carga Maps.
Este repositorio está estructurado de la siguiente manera:
Directorio | Descripción |
---|---|
cmd | programas de línea de comando |
paquete | la mayor parte del código real |
prototipo | archivos protobuf |
guiones | guiones adicionales |
proveedor | dependencias |
Instale Go 1.15.x y ejecute:
go get -d github.com/retroplasma/flyover-reverse-engineering/...
cd " $( go env GOPATH ) /src/github.com/retroplasma/flyover-reverse-engineering "
Luego edite config.json:
./scripts/get_config.sh > config.json
./scripts/get_config_macos.sh > config.json
resourceManifestURL
: de GEOConfigStore.db/com.apple.GEO.plist o binario GeoServicestokenP1
: del binario GeoServices (función: GEOURLAuthenticationGenerateURL
) Aquí hay algunos programas de línea de comando que usan código de pkg:
Uso:
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
Esto exporta el muelle de Santa Mónica a ./downloaded_files/obj/...
:
go run cmd/export-obj/main.go 34.007603 -118.499741 20 3 40
Opcional: OBJ de escala central usando el script node.js:
node scripts/center_scale_obj.js
En Blender (tutorial compatible aquí):
Esto autentica una URL usando parámetros de config.json
:
go run cmd/auth/main.go [url]
Esto analiza un archivo C3M v3, descomprime mallas, lee texturas JPEG y produce una estructura que contiene un modelo 3D texturizado:
go run cmd/parse-c3m/main.go [file]
Esto analiza un archivo C3MM v1. Los archivos C3MM en una región abarcan octárboles cuyas raíces están indexadas en el primer archivo.
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
en el manifiesto de recursos~/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
EL SOFTWARE SE PROPORCIONA "TAL CUAL", SIN GARANTÍA DE NINGÚN TIPO, EXPRESA O IMPLÍCITA, INCLUYENDO, PERO NO LIMITADO A, LAS GARANTÍAS DE COMERCIABILIDAD, IDONEIDAD PARA UN PROPÓSITO PARTICULAR Y NO INFRACCIÓN. EN NINGÚN CASO LOS AUTORES O TITULARES DE DERECHOS DE AUTOR SERÁN RESPONSABLES DE NINGÚN RECLAMO, DAÑO U OTRA RESPONSABILIDAD, YA SEA EN UNA ACCIÓN CONTRACTUAL, AGRAVIO O DE OTRA MANERA, QUE SURJA DE, FUERA DE O EN RELACIÓN CON EL SOFTWARE O EL USO U OTRAS NEGOCIOS EN EL SOFTWARE.