Flyover de engenharia reversa (modo satélite 3D) do Apple Maps. Trabalho semelhante é feito para o Google Earth aqui.
Aproximadamente, essas partes foram descobertas:
Podemos autenticar URLs e recuperar modelos 3D texturizados a partir de determinadas coordenadas (latitude, longitude).
Os dados são armazenados em blocos de mapas. Estes cinco estilos de bloco são usados para Flyover:
Tipo | Propósito | Estrutura de URL |
---|---|---|
C3M | Textura, Malha, Transformação (, Animação) | ?(?|&)style=15&v=⓿®ion=❶&x=❷&y=❸&z=❹&h=❺ |
C3MM1 | Metadados | ?(?|&)style=14&v=⓿&part=❻®ion=❶ |
C3MM2 | Metadados | ?(?|&)style=52&v=⓿®ion=❶&x=❷&y=❸&z=❹&h=❺ |
DTM 1 | Terreno/Superfície/Elevação | ?(?|&)style=16&v=⓿®ion=❶&x=❷&y=❸&z=❹ |
DTM 2 | Terreno/Superfície/Elevação | ?(?|&)style=17&v=⓿&size=❼&scale=❽&x=❷&y=❸&z=❹ |
ResourceManifest
└─ AltitudeManifest
├─ C3MM
│ └─ C3M
└─ DTM?
Focando em C3M(M) por enquanto. DTMs são imagens com rodapé e provavelmente são usadas para a grade exibida quando o Maps está sendo carregado.
Este repositório está estruturado da seguinte forma:
Diretório | Descrição |
---|---|
cmd | programas de linha de comando |
pacote | a maior parte do código real |
proto | arquivos protobuf |
roteiros | scripts adicionais |
fornecedor | dependências |
Instale o Go 1.15.x e execute:
go get -d github.com/retroplasma/flyover-reverse-engineering/...
cd " $( go env GOPATH ) /src/github.com/retroplasma/flyover-reverse-engineering "
Em seguida, edite config.json:
./scripts/get_config.sh > config.json
./scripts/get_config_macos.sh > config.json
resourceManifestURL
: de GEOConfigStore.db/com.apple.GEO.plist ou binário GeoServicestokenP1
: do binário GeoServices (função: GEOURLAuthenticationGenerateURL
) Aqui estão alguns programas de linha de comando que usam o código do 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
Isso exporta o Píer de Santa Monica para ./downloaded_files/obj/...
:
go run cmd/export-obj/main.go 34.007603 -118.499741 20 3 40
Opcional: OBJ de escala central usando script node.js:
node scripts/center_scale_obj.js
No Blender (tutorial compatível aqui):
Isso autentica uma URL usando parâmetros de config.json
:
go run cmd/auth/main.go [url]
Isso analisa um arquivo C3M v3, descompacta malhas, lê texturas JPEG e produz uma estrutura que contém um modelo 3D texturizado:
go run cmd/parse-c3m/main.go [file]
Isso analisa um arquivo C3MM v1. Os arquivos C3MM em uma região abrangem octrees cujas raízes são indexadas no primeiro arquivo.
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
no manifesto do recurso~/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
O SOFTWARE É FORNECIDO "COMO ESTÁ", SEM GARANTIA DE QUALQUER TIPO, EXPRESSA OU IMPLÍCITA, INCLUINDO, MAS NÃO SE LIMITANDO ÀS GARANTIAS DE COMERCIALIZAÇÃO, ADEQUAÇÃO A UM DETERMINADO FIM E NÃO VIOLAÇÃO. EM HIPÓTESE ALGUMA OS AUTORES OU DETENTORES DE DIREITOS AUTORAIS SERÃO RESPONSÁVEIS POR QUALQUER RECLAMAÇÃO, DANOS OU OUTRA RESPONSABILIDADE, SEJA EM UMA AÇÃO DE CONTRATO, ATO ILÍCITO OU DE OUTRA FORMA, DECORRENTE DE, OU EM CONEXÃO COM O SOFTWARE OU O USO OU OUTRAS NEGOCIAÇÕES NO SOFTWARE.