Skip to content

Add client-side GeoParquet map source type (stacked on GeoPackage #175) - #4

Open
JakeGimenes wants to merge 1 commit into
feature/geopackage-upstreamfrom
feature/geoparquet-upstream
Open

Add client-side GeoParquet map source type (stacked on GeoPackage #175)#4
JakeGimenes wants to merge 1 commit into
feature/geopackage-upstreamfrom
feature/geoparquet-upstream

Conversation

@JakeGimenes

Copy link
Copy Markdown
Owner

Summary

Adds a GeoParquet map source type rendered entirely in the browser — no backend conversion endpoint and no geopandas/pyarrow. Reads the file with hyparquet + hyparquet-compressors (geoparquet: true decodes the WKB geometry column straight to GeoJSON), reprojects with proj4, and hands features to the existing client-vector path so styling, click-query, and snapping work unchanged.

This supersedes the backend GeoParquet PR (upstream tethysplatform#167), which will be closed.

Stacking

⚠️ Stacked on GeoPackage #175 — this PR targets the feature/geopackage-upstream branch so the diff shows only the GeoParquet delta. It reuses the shared s3UrlToHttps + registerUTMProjections helpers introduced by tethysplatform#175 (this PR generalizes registerGeoPackageProjectionsregisterUTMProjections). Retarget to main once tethysplatform#175 merges.

Changes

  • ModuleLoader.jsloadGeoParquet(): fetch via hyparquet, read the geo metadata for the geometry column + CRS, reproject to the map projection. Generalizes the projection helper to registerUTMProjections (shared with GeoPackage); reuses s3UrlToHttps. No WASM.
  • utilities.js — registers GeoParquet as a client vector source + config (url).
  • Tests — CRS mapping, geo-metadata parsing, and the loader (reprojection, BigInt coercion, empty geometry, s3://, missing url, routing).
  • Docs — GeoParquet source section.

Testing

  • eslint + prettier clean; full Jest suite green (2544 passed); production build clean.
  • Manual: read a real EPSG:32615 (UTM 15N) GeoParquet in-browser and confirmed correct reprojection.

Note

There is a pre-existing, scheduling-dependent test-isolation flake in the repo's integration suites (NewDashboard / VisualizationPane) — it reproduces on the base branch with zero GeoParquet changes, passes in isolation, and has no single-file cause (cumulative cross-suite state). It occasionally trips CI regardless of this PR. Tracked separately; not introduced here.

🤖 Generated with Claude Code

Render GeoParquet files entirely in the browser via hyparquet +
hyparquet-compressors (geoparquet:true decodes WKB geometry to GeoJSON),
reprojected with proj4 — no backend conversion endpoint or geopandas.
GeoParquet joins the existing client-vector source path, so styling,
click-query, and snapping work unchanged.

- ModuleLoader.js: loadGeoParquet() reads the file over HTTP(S) via
  hyparquet, reads the "geo" metadata for the geometry column + CRS, and
  reprojects features to the map projection. Generalizes the shared
  registerGeoPackageProjections helper to registerUTMProjections (now used
  by both GeoPackage and GeoParquet); reuses s3UrlToHttps.
- utilities.js: register GeoParquet as a client vector source + config.
- Tests for CRS mapping, geo-metadata parsing, and the loader
  (reprojection, BigInt coercion, empty-geometry, s3, routing).
- Docs section for the source.

Supersedes the backend GeoParquet implementation (upstream PR tethysplatform#167).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant