<!--
Docs for making Markdown slide deck on HackMD using Revealjs
https://hackmd.io/s/how-to-create-slide-deck
https://hackmd.io/c/codimd-documentation/%2F%40codimd%2Fmarkdown-syntax
https://revealjs.com
-->
## Spatial web delivery trends
<small>Presentation at Queensland government <br> Tuesday 5 Aug 2025, 11:00–12:00 (AEST)</small>
_by **[Wei Ji Leong](https://github.com/weiji14)** @ [Development Seed](https://developmentseed.org/team/weiji-leong)_
<!-- Put the link to this slide here so people can follow -->
<small>P.S. Slides are at https://hackmd.io/@weiji14/spatialwebtrends</small>
---
### History in terms of OGC standards
- 2000 - WMS v1.0.0
- 2002 - WFS v1.0.0
- ...
- 2019 - GeoTIFF v1.1
- 2019 - OGC API - Features v1.0
- 2023 - STAC API v1.0
- 2023 - Cloud-optimized GeoTIFF standard v1.0
- 2023 - GeoParquet Standards Working Group formed
- 2024 Geoparquet v1.1.0 specification
----
### Overview of today's talk
> <small> In general, DevSeed has been working with the community on the forefront of cloud-native geospatial solutions (that hopefully become standards at some point) </small>
As of mid-2025:
- What's stable :rock: - "eoAPI" - (pgstac, titiler, etc)
- What's fresh :seedling: - stac-geoparquet
- What's coming :eyes: - more Rust, 3D mapping
---
### What's stable
<small>eoAPI - A battle-tested cloud-native Earth Observation infrastructure</small>

<small>https://eoapi.dev/intro/</small>
----
### eoAPI components
- pgstac - STAC Metadata Store -
- titiler - Raster tiling service - 
- tipg - Vector tiling service - 
- stac-fastapi - STAC Metadata API - 
<small>All open source under MIT license at https://github.com/developmentseed/eoAPI</small>
----
### Users of eoAPI
- European Space Agency (ESA) - https://business.esa.int/projects/whis
- Planetary Computer - https://planetarycomputer.microsoft.com
- NASA IMPACT
- <small>Visualization, Exploration, & Data
Analysis (VEDA) <br> https://www.earthdata.nasa.gov/dashboard/</small>
- <small>Multi-Mission Algorithm and Analysis
Platform (MAAP) <br> https://www.earthdata.nasa.gov/maap-biomass/</small>
- <small>Commercial Smallsat Data
Acquisition (CSDA) Program <br> https://www.earthdata.nasa.gov/esds/csda</small>
----
### Smallsat Data Explorer Demo
<!-- <video data-autoplay src="https://developmentseed.org/static/csdac-5e9d14c0176536704293eebc4d3e838d.mp4"></video> -->

<small>https://csdap.earthdata.nasa.gov/explore/</small>
---
## What's fresh
stac-geoparquet
 + Geo-
No-database and serverless STAC API queries
<small>(via clear separation of storage and compute)</small>
----
### STAC API from static files?
Original STAC specifications:
[JSON (static)](https://github.com/radiantearth/stac-spec/) & [API (dynamic)](https://github.com/radiantearth/stac-api-spec)
Can we do both with
[stac-geoparquet](https://github.com/stac-utils/stac-geoparquet/blob/0.7.0/spec/stac-geoparquet-spec.md)?
<small>Implement queryable (dynamic) API on top of (static) GeoParquet files</small>
----

<small>https://github.com/stac-utils/stac-geoparquet/blob/0.7.0/spec/stac-geoparquet-spec.md</small>
----
### Option 1: stac-geoparquet + serverless fastapi function

----
### Benchmarks: stac-fastapi-geoparquet vs stac-fastapi-pgstac

<small>Key point: traditional db (pgstac) still better for single/targetted queries, stac-fastapi-geoparquet works reasonably for broad searches (under 100k items)</small>
----
### Option 2: query stac-geoparquet directly with `rustac`

----
### rustac duckdb client
<small>Do an API search directly on the parquet file!</small>
```python
from rustac import DuckdbClient
client = DuckdbClient()
# Configure AWS credentials
client.execute("CREATE SECRET (TYPE S3, PROVIDER CREDENTIAL_CHAIN)")
items = client.search(
"s3://stac-fastapi-geoparquet-labs-375/naip.parquet",
intersects={"type": "Point", "coordinates": [-105.1019, 40.1672]},
)
```
----
### Comparison of STAC API tools
| Method | pystac-client compatible | level of effort (setup + maintain) | good for how many STAC items |
|--|--|--|--|
| pgstac | ✅ | high | >100,000 |
| stac-fastapi-geoparquet | ✅ | medium | <100,000 |
| rustac | ❌ | low | <100,000 |
---
## What's next
More Rust :crab: and more 3D :globe_with_meridians:
----
### 'Rewriting' geospatial stack in Rust
| | Javascript / Python / C(++) | Rust :crab: |
|--|--|--|
| Slippy maps | leaflet/folium | lonboard |
| STAC API | pystac-client | rustac |
| s3/azure/gcp access | fsspec | obstore |
| GeoTIFF | GDAL/rasterio | async-tiff |
++ more, e.g cql2-rs, las-rs, etc
----
### Rust core + Python (or other) bindings

<small> Write core lib once, bind to Python, WASM, etc </small>
----
### Titiler-multidim
Tiling NetCDF/Zarr formats (e.g. climate/ocean data)

<small> https://github.com/developmentseed/titiler-multidim </small>
---
### More reading
- lonboard - https://developmentseed.org/projects/lonboard/
- stac-geoparquet - https://www.gadom.ski/talks/
- eoAPI - https://developmentseed.org/projects/eoapi/
- obstore - https://developmentseed.org/blog/2025-08-01-obstore/
Thanks for your attention!
{"title":"Spatial Web Delivery trends","description":"DevSeed Team Week 2024 deep dive session","slideOptions":"{\"theme\":\"beige\",\"width\":\"70%\"}","lang":"en-NZ","contributors":"[{\"id\":\"c1f3f3d8-2cb7-4635-9d54-f8f7487d0956\",\"add\":13355,\"del\":6909,\"latestUpdatedAt\":1754347996315}]"}