
Реверс-инжиниринг 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.jsonresourceManifestURL : из 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-*.xmlaltitude-*.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.xpcGeoServices/Applications/Maps.app/Contents/MacOS/MapsVectorKit ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ПРЕДОСТАВЛЯЕТСЯ «КАК ЕСТЬ», БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ, ЯВНЫХ ИЛИ ПОДРАЗУМЕВАЕМЫХ, ВКЛЮЧАЯ, НО НЕ ОГРАНИЧИВАЯСЬ, ГАРАНТИЯМИ ТОВАРНОЙ ЦЕННОСТИ, ПРИГОДНОСТИ ДЛЯ ОПРЕДЕЛЕННОЙ ЦЕЛИ И НЕНАРУШЕНИЯ ПРАВ. АВТОРЫ ИЛИ ОБЛАДАТЕЛИ АВТОРСКИХ ПРАВ НИ ПРИ КАКИХ ОБСТОЯТЕЛЬСТВАХ НЕ НЕСУТ ОТВЕТСТВЕННОСТИ ЗА ЛЮБЫЕ ПРЕТЕНЗИИ, УБЫТКИ ИЛИ ДРУГУЮ ОТВЕТСТВЕННОСТЬ, БУДЬ В ДЕЙСТВИЯХ ПО КОНТРАКТУ, ПРАВОНАРУШЕНИЮ ИЛИ ДРУГИМ ОБРАЗОМ, ВОЗНИКАЮЩИЕ ОТ, ИЗ ИЛИ В СВЯЗИ С ПРОГРАММНЫМ ОБЕСПЕЧЕНИЕМ ИЛИ ИСПОЛЬЗОВАНИЕМ ИЛИ ДРУГИМИ СДЕЛКАМИ, ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ.