Skip to content

Commit a8d5df2

Browse files
committed
Add 3DGS ArcGIS Cesium ingestion plan
1 parent 95b4229 commit a8d5df2

1 file changed

Lines changed: 164 additions & 0 deletions

File tree

Lines changed: 164 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,164 @@
1+
# 3DGS ArcGIS and Cesium Ingestion Plan — lance-graph
2+
3+
## Goal
4+
5+
Define how `lance-graph` ingests external geospatial sources into the 3DGS runtime model.
6+
7+
This plan focuses on source acquisition and normalization, not rendering.
8+
9+
## Source classes
10+
11+
### 1. 3D Tiles / Cesium-compatible packages
12+
13+
Inputs:
14+
15+
- `tileset.json`
16+
- subtree files
17+
- glTF / GLB payloads
18+
- SPZ / Gaussian splat glTF extensions where available
19+
- metadata and batch/property tables
20+
21+
Outputs:
22+
23+
- `tiles` table
24+
- `contents` table
25+
- `subtrees` table
26+
- `features` table where metadata exists
27+
- raw content resource references
28+
29+
### 2. ArcGIS REST services
30+
31+
Inputs:
32+
33+
- FeatureServer metadata and query output
34+
- MapServer metadata and query output
35+
- VectorTileServer metadata, styles, and tiles
36+
- Scene/3D layer references where available
37+
- service directory JSON / PJSON
38+
39+
Outputs:
40+
41+
- vector overlays
42+
- semantic features
43+
- basemap/vector-tile references
44+
- optional source provenance rows
45+
46+
### 3. glTF / GLB content
47+
48+
Inputs:
49+
50+
- mesh payloads
51+
- splat-related extensions
52+
- metadata extensions
53+
54+
Outputs:
55+
56+
- content refs
57+
- derived bounds
58+
- feature metadata where available
59+
- optional conversion to 3DGS blocks if supported
60+
61+
### 4. GeoJSON / MVT overlays
62+
63+
Inputs:
64+
65+
- GeoJSON feature collections
66+
- Mapbox Vector Tile payloads
67+
- ArcGIS query output converted to GeoJSON
68+
69+
Outputs:
70+
71+
- `features` table
72+
- overlay content refs
73+
- queryable geometry metadata
74+
75+
### 5. Native 3DGS payloads
76+
77+
Inputs:
78+
79+
- splat point records
80+
- SPZ-like compressed payloads
81+
- custom columnar splat blocks
82+
83+
Outputs:
84+
85+
- `contents` rows with kind `GaussianSplat3d`
86+
- `splat_blocks` rows
87+
- optional raw payload files or Lance column chunks
88+
89+
## Normalization stages
90+
91+
```text
92+
source fetch/read
93+
-> source manifest
94+
-> bounds and CRS detection
95+
-> content kind classification
96+
-> normalized tile/content rows
97+
-> optional feature extraction
98+
-> optional certificate preflight
99+
-> Lance/Arrow write
100+
```
101+
102+
## Coordinate policy
103+
104+
Every ingest path must record coordinate assumptions:
105+
106+
- CRS / spatial reference if known
107+
- local origin if converted
108+
- ECEF / ENU / projected frame where applicable
109+
- transform applied
110+
- uncertainty if unknown
111+
112+
Do not silently treat unknown coordinates as WGS84.
113+
114+
## Provenance
115+
116+
Add a provenance row/table or metadata object:
117+
118+
```text
119+
source_id
120+
source_kind
121+
source_uri
122+
retrieved_at
123+
source_version
124+
license_hint
125+
crs_hint
126+
conversion_notes
127+
```
128+
129+
This matters for debugging and for later ArcGIS/Cesium export.
130+
131+
## Ingestion crate layout
132+
133+
```text
134+
crates/ada-geo-ingest
135+
mod.rs
136+
source_manifest.rs
137+
arcgis.rs
138+
cesium_3dtiles.rs
139+
gltf.rs
140+
geojson.rs
141+
mvt.rs
142+
native_3dgs.rs
143+
provenance.rs
144+
```
145+
146+
## ArcGIS-first test endpoints
147+
148+
Use public/sample services for tests that do not require credentials:
149+
150+
- sample service directory root
151+
- FeatureServer query result
152+
- MapServer layer query result
153+
- VectorTile metadata if available without secrets
154+
155+
Credentialed services should be integration-test optional and skipped by default.
156+
157+
## Acceptance criteria
158+
159+
- A 3D Tiles tileset can be ingested into tile/content tables without loading all payload bytes.
160+
- ArcGIS FeatureServer query output can become features/overlay rows.
161+
- GeoJSON can become features rows.
162+
- Every ingested source records provenance.
163+
- Unknown CRS is explicit, not guessed.
164+
- 3DGS payloads become first-class content rows.

0 commit comments

Comments
 (0)