Skip to content

feat(geo): add native LineString, MultiPoint, MultiLineString types#8679

Open
HarukiMoriarty wants to merge 1 commit into
developfrom
nemo/geo-simple-feature-types
Open

feat(geo): add native LineString, MultiPoint, MultiLineString types#8679
HarukiMoriarty wants to merge 1 commit into
developfrom
nemo/geo-simple-feature-types

Conversation

@HarukiMoriarty

Copy link
Copy Markdown
Contributor

Complete the set of OGC simple-feature geometries alongside the existing Point/Polygon/MultiPolygon:

  • vortex.geo.linestring - List<Struct<x, y[, z][, m]>>
  • vortex.geo.multipoint - List<Struct<x, y[, z][, m]>>
  • vortex.geo.multilinestring - List<List<Struct<x, y[, z][, m]>>>

Each mirrors the existing Polygon/MultiPolygon extension types.

Wire them through the DuckDB integration so they surface as GEOMETRY like the existing native types: the dtype -> GEOMETRY mapping, per-type WKB exporters, and native-geometry-column recognition for predicate pushdown.

Tests cover dtype validation across all four dimensions, Arrow field import/export (including that the shape-identical types resolve by name), and WKB-literal decode round-trips.

Complete the set of OGC simple-feature geometries alongside the existing
Point/Polygon/MultiPolygon:

- vortex.geo.linestring       - List<Struct<x, y[, z][, m]>>
- vortex.geo.multipoint       - List<Struct<x, y[, z][, m]>>
- vortex.geo.multilinestring  - List<List<Struct<x, y[, z][, m]>>>

Each mirrors the existing Polygon/MultiPolygon extension types: GeoArrow
import/export with separated (struct) coordinates, WKB literal decoding,
geo_types conversion for the geo scalar functions, and registration in
initialize(). LineString/MultiPoint share a storage shape (as do
MultiLineString/Polygon); they are disambiguated by their GeoArrow extension
name and Vortex extension id, not by shape.

Wire them through the DuckDB integration so they surface as GEOMETRY like the
existing native types: the dtype -> GEOMETRY mapping, per-type WKB exporters,
and native-geometry-column recognition for predicate pushdown.

Tests cover dtype validation across all four dimensions, Arrow field
import/export (including that the shape-identical types resolve by name), and
WKB-literal decode round-trips.

Signed-off-by: Nemo Yu <zyu379@wisc.edu>
@HarukiMoriarty HarukiMoriarty added the changelog/feature A new feature label Jul 7, 2026
@codspeed-hq

codspeed-hq Bot commented Jul 7, 2026

Copy link
Copy Markdown

Merging this PR will not alter performance

⚡ 1 improved benchmark
❌ 2 regressed benchmarks
✅ 1604 untouched benchmarks
⏩ 42 skipped benchmarks1

Warning

Please fix the performance issues or acknowledge them on CodSpeed.

Performance Changes

Mode Benchmark BASE HEAD Efficiency
Simulation bitwise_not_vortex_buffer_mut[128] 244.4 ns 273.6 ns -10.66%
Simulation chunked_varbinview_opt_canonical_into[(100, 100)] 305.2 µs 340.4 µs -10.34%
Simulation chunked_varbinview_canonical_into[(1000, 10)] 190.9 µs 154.6 µs +23.46%

Tip

Investigate this regression by commenting @codspeedbot fix this regression on this PR, or directly use the CodSpeed MCP with your agent.


Comparing nemo/geo-simple-feature-types (c09aa3a) with develop (1e91494)

Open in CodSpeed

Footnotes

  1. 42 benchmarks were skipped, so the baseline results were used instead. If they were deleted from the codebase, click here and archive them to remove them from the performance reports.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

changelog/feature A new feature

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant