Apple Maps의 리버스 엔지니어링 Flyover (3D 위성 모드). 여기에서 Google Earth에 대해서도 유사한 작업이 수행됩니다.
대략적으로 다음과 같은 부분이 파악되었습니다.
URL을 인증하고 주어진 좌표(위도, 경도)에서 질감이 있는 3D 모델을 검색할 수 있습니다.
데이터는 지도 타일에 저장됩니다. Flyover에는 다음 5가지 타일 스타일이 사용됩니다.
유형 | 목적 | URL 구조 |
---|---|---|
C3M | 텍스처, 메쉬, 변환(, 애니메이션) | ?(?|&)style=15&v=⓿®ion=❶&x=❷&y=❸&z=❹&h=❺ |
C3MM 1 | 메타데이터 | ?(?|&)style=14&v=⓿&part=❻®ion=❶ |
C3MM 2 | 메타데이터 | ?(?|&)style=52&v=⓿®ion=❶&x=❷&y=❸&z=❹&h=❺ |
DTM 1 | 지형/표면/고도 | ?(?|&)style=16&v=⓿®ion=❶&x=❷&y=❸&z=❹ |
DTM 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
그러면 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
로드합니다. 소프트웨어는 상품성, 특정 목적에의 적합성 및 비침해에 대한 보증을 포함하되 이에 국한되지 않고 명시적이거나 묵시적인 어떠한 종류의 보증도 없이 "있는 그대로" 제공됩니다. 어떠한 경우에도 작성자나 저작권 보유자는 계약, 불법 행위 또는 기타 행위로 인해 소프트웨어나 사용 또는 기타 거래와 관련하여 발생하는 모든 청구, 손해 또는 기타 책임에 대해 책임을 지지 않습니다. 소프트웨어.