diff --git a/README.md b/README.md index 0b8c97b5..51502300 100644 --- a/README.md +++ b/README.md @@ -124,6 +124,35 @@ Within the shell, load MobilityDuck by calling ```LOAD``` and the path to the ex
+#### 3.2.1. DuckDB version alignment for GeoArrow 1.1 / GeoParquet 1.1 + +The v1.4.4 LTS target above is also the ecosystem alignment target +for [GeoArrow 1.1](https://geoarrow.org/) and +[GeoParquet 1.1](https://geoparquet.org/releases/v1.1.0/). DuckDB +v1.4.4's bundled `spatial` extension exposes the full set of spatial +functions (`ST_Intersects`, `ST_MakeEnvelope`, `ST_Point`, `ST_Within`, +`ST_Contains`, …) needed to exploit GeoParquet's `covering.bbox` and +GeoArrow's native-coordinate encodings. + +Adopters running DuckDB v1.5.x may observe that the *bundled* `spatial` +extension on v1.5.2 ships a reduced surface (missing `ST_Intersects`, +`ST_MakeEnvelope`, and the related spatial functions). Until +[`duckdb/duckdb-spatial`](https://github.com/duckdb/duckdb-spatial)'s +in-progress `v1.5-variegata` port ships into the bundled extension, +bbox-based row-group pruning on GeoParquet 1.1 still works on v1.5.x +via a **scalar-AND-chain on the `covering.bbox` struct fields** — no +spatial extension required: + +```sql +WHERE "covering.bbox".xmax >= :x_min AND "covering.bbox".xmin <= :x_max + AND "covering.bbox".ymax >= :y_min AND "covering.bbox".ymin <= :y_max +``` + +The scalar path prunes row-groups identically to the spatial-aware +path and runs faster on a synthetic bbox-pruning workload (no per-row +geometry construction). Reach for the bundled spatial extension only +for richer geometry-aware queries that go beyond bbox pruning. + ### 3.3. Python API The extension binary can be helpful if you want to use MobilityDuck in Python via DuckDB’s [Python API](https://duckdb.org/docs/stable/clients/python/overview). **Prerequisite**: the version of the DuckDB Python client and the DuckDB version of the build must be identical.