Add client-side GeoParquet map source type (stacked on GeoPackage #175) - #4
Open
JakeGimenes wants to merge 1 commit into
Open
Add client-side GeoParquet map source type (stacked on GeoPackage #175)#4JakeGimenes wants to merge 1 commit into
JakeGimenes wants to merge 1 commit into
Conversation
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>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Adds a GeoParquet map source type rendered entirely in the browser — no backend conversion endpoint and no
geopandas/pyarrow. Reads the file withhyparquet+hyparquet-compressors(geoparquet: truedecodes the WKB geometry column straight to GeoJSON), reprojects withproj4, 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
feature/geopackage-upstreambranch so the diff shows only the GeoParquet delta. It reuses the shareds3UrlToHttps+registerUTMProjectionshelpers introduced by tethysplatform#175 (this PR generalizesregisterGeoPackageProjections→registerUTMProjections). Retarget tomainonce tethysplatform#175 merges.Changes
ModuleLoader.js—loadGeoParquet(): fetch via hyparquet, read thegeometadata for the geometry column + CRS, reproject to the map projection. Generalizes the projection helper toregisterUTMProjections(shared with GeoPackage); reusess3UrlToHttps. No WASM.utilities.js— registersGeoParquetas a client vector source + config (url).geo-metadata parsing, and the loader (reprojection, BigInt coercion, empty geometry,s3://, missing url, routing).Testing
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