來自 Apple 地圖的逆向工程Flyover (3D 衛星模式)。此處對 Google Earth 進行了類似的工作。
大致上已經弄清楚了這些部分:
我們可以驗證 URL 並從給定座標(緯度、經度)檢索紋理 3D 模型。
資料儲存在地圖圖塊中。這五種圖塊樣式用於天橋:
類型 | 目的 | 網址結構 |
---|---|---|
C3M | 紋理、網格、變換(、動畫) | ?(?|&)樣式=15&v=⓿&區域=❶&x=❷&y=❸&z=❹&h=❺ |
C3MM 1 | 元數據 | ?(?|&)樣式=14&v=⓿&部分=❻&區域=❶ |
C3MM 2 | 元數據 | ?(?|&)樣式=52&v=⓿&區域=❶&x=❷&y=❸&z=❹&h=❺ |
數字TM 1 | 地形/地表/高程 | ?(?|&)樣式=16&v=⓿&區域=❶&x=❷&y=❸&z=❹ |
數字TM 2 | 地形/地表/高程 | ?(?|&)樣式=17&v=⓿&尺寸=❼&比例=❽&x=❷&y=❸&z=❹ |
ResourceManifest
└─ AltitudeManifest
├─ C3MM
│ └─ C3M
└─ DTM?
目前專注於 C3M(M)。 DTM 是帶有頁腳的圖像,可能用於載入地圖時顯示的網格。
此儲存庫的結構如下:
目錄 | 描述 |
---|---|
指令 | 命令列程式 |
包裝 | 大部分實際程式碼 |
原型 | 原始緩衝區文件 |
腳本 | 附加腳本 |
小販 | 依賴關係 |
安裝 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
可選:使用 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
本軟體以「現況」提供,不提供任何明示或暗示的保證,包括但不限於適銷性、特定用途的適用性和不侵權的保證。 IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE軟體.