Реверс-инжиниринг Flyover (3D-режим спутника) из Apple Maps. Аналогичная работа проделана для Google Earth здесь.
Примерно вот эти части были выяснены:
Мы можем аутентифицировать URL-адреса и получать текстурированные 3D-модели по заданным координатам (широта, долгота).
Данные хранятся в фрагментах карты. Эти пять стилей плиток используются для Flyover:
Тип | Цель | Структура URL |
---|---|---|
C3M | Текстура, Сетка, Трансформация(, Анимация) | ?(?|&)style=15&v=⓿®ion=❶&x=❷&y=❸&z=❹&h=❺ |
С3ММ 1 | Метаданные | ?(?|&)style=14&v=⓿&part=❻®ion=❶ |
С3ММ 2 | Метаданные | ?(?|&)style=52&v=⓿®ion=❶&x=❷&y=❸&z=❹&h=❺ |
ДТМ 1 | Рельеф/Поверхность/Высота | ?(?|&)style=16&v=⓿®ion=❶&x=❷&y=❸&z=❹ |
ДТМ 2 | Рельеф/Поверхность/Высота | ?(?|&)style=17&v=⓿&size=❼&scale=❽&x=❷&y=❸&z=❹ |
ResourceManifest
└─ AltitudeManifest
├─ C3MM
│ └─ C3M
└─ DTM?
На данный момент сосредоточено на C3M(M). DTM — это изображения с нижним колонтитулом, которые, вероятно, используются для сетки, отображаемой при загрузке Карт.
Этот репозиторий структурирован следующим образом:
Каталог | Описание |
---|---|
cmd | программы командной строки |
упаковка | большая часть фактического кода |
прото | файлы протобуфа |
сценарии | дополнительные скрипты |
продавец | зависимости |
Установите Go 1.15.x и запустите:
go get -d github.com/retroplasma/flyover-reverse-engineering/...
cd " $( go env GOPATH ) /src/github.com/retroplasma/flyover-reverse-engineering "
Затем отредактируйте config.json:
./scripts/get_config.sh > config.json
./scripts/get_config_macos.sh > config.json
resourceManifestURL
: из GEOConfigStore.db/com.apple.GEO.plist или двоичного файла GeoServices.tokenP1
: из двоичного файла GeoServices (функция: GEOURLAuthenticationGenerateURL
) Вот несколько программ командной строки, которые используют код из pkg:
Использование:
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
Это экспортирует пирс Санта-Моники в ./downloaded_files/obj/...
:
go run cmd/export-obj/main.go 34.007603 -118.499741 20 3 40
Необязательно: OBJ в центральном масштабе с использованием скрипта node.js:
node scripts/center_scale_obj.js
В Blender (совместимый учебник здесь):
Это аутентифицирует URL-адрес, используя параметры из config.json
:
go run cmd/auth/main.go [url]
Он анализирует файл C3M v3, распаковывает сетки, считывает текстуры JPEG и создает структуру, содержащую текстурированную 3D-модель:
go run cmd/parse-c3m/main.go [file]
Это анализирует файл C3MM v1. Файлы C3MM в регионе охватывают окта-деревья, корни которых индексируются в первом файле.
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
в манифесте ресурса~/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
ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ПРЕДОСТАВЛЯЕТСЯ «КАК ЕСТЬ», БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ, ЯВНЫХ ИЛИ ПОДРАЗУМЕВАЕМЫХ, ВКЛЮЧАЯ, НО НЕ ОГРАНИЧИВАЯСЬ, ГАРАНТИЯМИ ТОВАРНОЙ ЦЕННОСТИ, ПРИГОДНОСТИ ДЛЯ ОПРЕДЕЛЕННОЙ ЦЕЛИ И НЕНАРУШЕНИЯ ПРАВ. АВТОРЫ ИЛИ ОБЛАДАТЕЛИ АВТОРСКИХ ПРАВ НИ ПРИ КАКИХ ОБСТОЯТЕЛЬСТВАХ НЕ НЕСУТ ОТВЕТСТВЕННОСТИ ЗА ЛЮБЫЕ ПРЕТЕНЗИИ, УБЫТКИ ИЛИ ДРУГУЮ ОТВЕТСТВЕННОСТЬ, БУДЬ В ДЕЙСТВИЯХ ПО КОНТРАКТУ, ПРАВОНАРУШЕНИЮ ИЛИ ДРУГИМ ОБРАЗОМ, ВОЗНИКАЮЩИЕ ОТ, ИЗ ИЛИ В СВЯЗИ С ПРОГРАММНЫМ ОБЕСПЕЧЕНИЕМ ИЛИ ИСПОЛЬЗОВАНИЕМ ИЛИ ДРУГИМИ СДЕЛКАМИ, ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ.