Apple Maps からのFlyover (3D 衛星モード) のリバース エンジニアリング。ここでは Google Earth についても同様の作業が行われています。
大まかに、次の部分が理解されました。
URL を認証し、指定された座標 (緯度、経度) からテクスチャ付き 3D モデルを取得できます。
データはマップ タイルに保存されます。次の 5 つのタイル スタイルは Flyover に使用されます。
タイプ | 目的 | URL構造 |
---|---|---|
C3M | テクスチャ、メッシュ、変形(、アニメーション) | ?(?|&)style=15&v=⓿®ion=❶&x=❷&y=❸&z=❹&h=❺ |
C3MM1 | メタデータ | ?(?|&)style=14&v=⓿&part=❻®ion=❶ |
C3MM2 | メタデータ | ?(?|&)style=52&v=⓿®ion=❶&x=❷&y=❸&z=❹&h=❺ |
DTM1 | 地形/地表/標高 | ?(?|&)style=16&v=⓿®ion=❶&x=❷&y=❸&z=❹ |
DTM2 | 地形/地表/標高 | ?(?|&)style=17&v=⓿&size=❼&scale=❽&x=❷&y=❸&z=❹ |
ResourceManifest
└─ AltitudeManifest
├─ C3MM
│ └─ C3M
└─ DTM?
当面はC3M(M)に注目。 DTM はフッター付きの画像で、おそらくマップの読み込み時に表示されるグリッドに使用されます。
このリポジトリは次のように構成されています。
ディレクトリ | 説明 |
---|---|
cmd | コマンドラインプログラム |
パッケージ | 実際のコードの大部分 |
プロト | protobuf ファイル |
スクリプト | 追加のスクリプト |
ベンダー | 依存関係 |
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
これにより、Santa Monica Pier が./downloaded_files/obj/...
にエクスポートされます。
go run cmd/export-obj/main.go 34.007603 -118.499741 20 3 40
オプション:node.js スクリプトを使用したセンタースケール OBJ:
node scripts/center_scale_obj.js
Blender の場合 (互換性のあるチュートリアルはこちら):
これは、 config.json
のパラメーターを使用して URL を認証します。
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
URL~/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
をロードしますソフトウェアは「現状のまま」提供され、明示的か黙示的かを問わず、商品性、特定目的への適合性、および非侵害の保証を含むがこれらに限定されない、いかなる種類の保証も行われません。いかなる場合においても、作者または著作権所有者は、契約行為、不法行為、またはその他の行為であるかどうかにかかわらず、ソフトウェアまたはソフトウェアの使用またはその他の取引に起因または関連して生じる、いかなる請求、損害、またはその他の責任に対しても責任を負わないものとします。ソフトウェア。