geomermaids · GeoPQ Workbench

Open, inspect, fix and query GeoParquet. A fast native desktop app: no server, no GDAL, no accounts. Free and open source.

Download: prebuilt binaries for macOS, Windows and Linux. The macOS DMGs are signed and notarized: drag to Applications and go. Source and issues on GitHub (MIT / Apache-2.0).

Two minutes, one real dataset: the 3.5 GB MassGIS statewide parcels: two dropped shapefiles imported and merged, optimized into a single 536 MB GeoParquet file, published to S3 and reopened in place.

Why it exists

Most GeoParquet in the wild is a raw database export that performs far below what the format allows: no spatial ordering, no bbox covering column, oversized row groups. The file opens, but nothing can be read incrementally, so every viewer chokes on it.

GeoPQ Workbench is built around this. Every file you open is graded against the levers that actually matter, the scorecard explains each miss in plain language, and one click rewrites the file into a best-practice one. It doubles as a hands-on guide to the format: the same material as my GeoParquet writing cookbook, but live, against your own data.

Open and see

Anything from a local file to a partitioned dataset on the other side of the world, drawn at native speed.

Native speed

Pure Rust with GPU pipelines (egui + wgpu): 3.75M points load in about 180 ms and pan and zoom at vsync. Memory follows what is on screen, not the size of the file.

Every flavour of GeoParquet

1.0, 1.1 (WKB and GeoArrow) and 2.0 native GEOMETRY and GEOGRAPHY, untagged parquet with a guessable geometry column, even a CSV with coordinate columns: the values decide the CRS, so a national grid in metres asks for its EPSG code instead of landing a continent away.

Remote files, in place

https:// and s3:// over range requests: a 304 MB file opens in about 1.3 s and only the row groups under the viewport are downloaded. A hive-partitioned prefix or a STAC collection opens as one layer, and the status bar shows what each layer costs in bytes.

Datasets too heavy to draw

CORINE Land Cover is 2.4M polygons and 7.7 GB of geometry. With a bbox covering column, every feature is first drawn from its box: all of Europe in about a second. Zoom in and the real geometry loads for what you are looking at.

Data ready to open

File → Repositories lists ready-made datasets: OpenStreetMap for North America, GMWID world infrastructures, FAO GAUL, CORINE, FEMA flood zones and Overture Maps. Pick a country or a state and its layers load. File → Data catalogs browses the open-data portals of ArcGIS Hub, Socrata and CKAN; seventeen US cities come built in.

Credits where they are due

Attribution is read from the parquet metadata or an ATTRIBUTION.txt beside the data, and shown in the map corner and in File info. For a STAC collection it is built from the licence the catalog declares, so nothing is credited to a source it did not come from.

Fix and publish

Every file you open is graded, and a slow one becomes a fast one in a click.

Quality scorecard

Seven checks from the footer alone: spatial index, spatial ordering, row groups, encoding, page index, compression, metadata. Each miss is explained in plain language.

One-click Optimize

Hilbert sort, tuned row groups, bbox covering, zstd and page indexes, written as 1.1 WKB, 1.1 GeoArrow or 2.0 native, optionally partitioned by attribute or H3. It streams, so memory follows the row count, not the file size.

Import and merge

Pure-Rust importers for GeoPackage, Shapefile and GeoJSON: drop a file and conversion starts. Compatible layers merge into one file on export, reprojected onto a common CRS.

Attribute tables and joins

A CSV or parquet without geometry opens for its columns, then joins onto a layer on a shared key; the join builder reports the match count before you commit. The import dialog shows the sampled values and proposed type of each column, and handles semicolons and decimal commas.

Publish to S3 or R2

Upload the optimized file, or a partitioned tree, to your bucket with your AWS profiles. A STAC collection.json goes up beside it, so anyone can reopen the dataset by its URL.

Analyse and present

Query, summarise and style what is loaded, then export the figure.

SQL console

DataFusion with 28 ST_* functions, st_transform, set operations and spatial aggregates, over every loaded layer, local or remote, with spatial predicate pushdown. Results highlight on the map or become new layers.

Grid summaries

Aggregate any numeric column onto square, H3 or A5 cells, with areal apportionment: mean, median, sum, count or density, smoothing, hillshade and contours. 2.56M parcels to a 1 km grid in about 0.7 s.

Styling that explains itself

Seven classification methods including Jenks and head/tail breaks, and a legend where a click hides a class. Official palettes (CORINE) and QGIS colour-map exports apply by themselves; point symbols and dash patterns for print-quality maps.

Basemaps that follow the projection

In any projection, Web Mercator tiles are reprojected as meshes, with no seams and coastlines that line up. Carto, OpenStreetMap, OpenTopoMap and Esri imagery, plus a Natural Earth coastline for world views.

Figures, not screenshots

File → Export map view (SVG) writes the map as real vector paths, with strokes, symbols, graticule and credits, ready to edit in Inkscape or Illustrator.

No GDAL anywhere in the stack, and an in-app cookbook covers the format's versions, encodings and performance levers.

One hard dataset, start to finish: CORINE Land Cover 2018 opened straight from the catalog over HTTP, 2.4M polygons and 7.7 GB of geometry. Every feature drawn from its covering box in the official palette, zoomed until the real geometry loads, then exported to a single file with only what the viewport holds. About three and a half minutes of real time, accelerated here through the download and export steps.

Try it in two minutes

  1. Download your platform's build from the releases page and launch it. Nothing to configure.
  2. Load data. Drag and drop a .parquet file, pick a dataset in File → Repositories…, or paste a URL, for instance any file of the free GeoParquet datasets.
  3. Open the file info to see the scorecard, then hit Export on a raw file and watch the before/after report.

Links

Found a bug, or a file it grades unfairly? Open an issue: real-world files are exactly what it is built for. And if you want help getting your organization's GeoParquet pipeline into shape, get in touch.