GeoLintGeometry Inspector

About

How GeoLint checks geometry, handles your files, and uses open-source components.

Method

Engine and interpretation

The pinned geos-wasm package is 3.1.1, containing GEOS 3.13.0 (C API 1.19.0). Checks use validity flags 0. Coordinates are interpreted in a 2D plane; no reprojection or spherical interpretation is performed.

All seven nonempty, structurally supported 2D GeoJSON geometry types reach GEOS, including nested GeometryCollections. Points require two finite coordinates, lines at least two positions, and polygon rings at least four positions with explicit closure. Collections retain one result per source record. The tool does not change or repair input.

Validation approach

Sixteen self-authored fixtures cover points, repeated multipoints, lines, MultiLineStrings, nested GeometryCollections, valid polygons, self-intersection, hole errors, repeated vertices, degeneration and MultiPolygons. Real WASM tests and same-version native GEOS parity tests compare validity and allowed error locations with a 1e-9 tolerance; reason strings need not match verbatim.

Current evidence and limits

Core, real-engine and native parity checks are reproducible from the repository. Browser interaction, network privacy, desktop browser compatibility and performance have separate acceptance checks. A successful build alone does not establish those results. The current build is a development preview pending full browser and distribution review.

Only the first validity reason is returned for each geometry or collection. GEOS validity is separate from simplicity: crossing lines and repeated points can be valid. Collapsed lines with fewer than two distinct positions are invalid. A valid result does not establish business correctness, CRS correctness or topology between features.

Duplicate geometry rule

The optional duplicate geometry check compares valid planar 2D points, lines and polygons within one file using topological equality. Vertex order, extra collinear vertices, attributes and feature IDs do not determine equality. MultiPoint, MultiLineString and MultiPolygon participate; GeometryCollection is excluded. No tolerance, snapping or repair is applied. Each unordered pair of duplicate source records produces one topology problem. With three equal records there are three pairs. Downloads contain all pairs and the run configuration; the record table shows each record's related pairs. Skipped comparisons and partial coverage are reported explicitly. Overlaps, gaps, line simplicity and network connectivity are not covered by this rule.

Optional single-layer checks

GEOS validity (Rule-011) is always enabled when applicable. Independently select duplicates (Rule-012), multipart geometries (Rule-013), line dangles (Rule-014), pseudo nodes (Rule-015), polygon overlaps (Rule-016), and enclosed polygon gaps (Rule-017). No tolerance, snapping or repair is applied. Collections are excluded from topology checks.

Line connections count exact part endpoints, including closed lines; interior touches do not connect endpoints. Polygon overlap checks exclude equality and containment. Gap regions exclude covered islands and the exterior. Review unified results and check coverage; a gap may have no source participants. GeoJSON problem regions are included in JSON and CSV exports.

Validation uses independent PyQGIS geometry algorithms, not GUI plugin error rows. Non-valid inputs are excluded from relationship rules; multipart counts still run on supported normalized invalid geometries.

Privacy

File processing

The application passes the selected File to a browser Worker for reading, parsing and checking. Its implementation contains no upload API, analytics, telemetry, external fonts or third-party scripts. Static assets and the public sample are fetched from the site origin.

Storage and reports

The application does not write user files or results to localStorage, IndexedDB or a service-worker cache. Results remain in memory until replaced or the page closes. Cancel terminates the inspection Worker. The application releases download Blob URLs after use.

Downloaded reports can contain the local file name, feature IDs, issue descriptions and error coordinates. Treat those reports as your own potentially sensitive data. Raw geometry, properties and field values are excluded. Reports include the rule configuration used for the run. Previewed attribute values are processed locally.

Hosting and verification

Your browser contacts the host to retrieve pages and assets. Hosting access logs can record ordinary request metadata; hosting configuration is separate from this application. Production network acceptance remains required before release. Browser extensions and files you share yourself are outside this application’s control.

Limits

Supported input

GeoJSON FeatureCollection, Feature, or any of the seven GeoJSON geometry types (Point, MultiPoint, LineString, MultiLineString, Polygon, MultiPolygon and GeometryCollection); standalone .shp or a .zip containing exactly one .shp layer. Positions must contain exactly two finite numbers. No product file-size limit is imposed.

Only stored or deflated ordinary ZIPs are supported. Matching DBF attributes and CPG are read from ZIPs; SHX, PRJ and DBF-derived feature IDs are not interpreted. 2D Point, MultiPoint, PolyLine and Polygon SHP records are checked. Multipart lines and polygons retain their parts. Original x/y coordinates and record order are retained. Malformed records are parse failures; ambiguous shell/hole relationships are not repaired. Invalid file headers, record framing or archives reject the entire run.

Skipped or rejected

GeometryCollection members are validated recursively and checked as one source record. Nesting beyond 64 levels is a parse failure. Null geometry, empty top-level coordinate arrays and empty collections are skipped. A collection containing any empty geometry is skipped as a whole; no members are silently dropped. Z/M dimensions and Shapefile MultiPatch records are skipped; mixed dimensions, malformed positions, lines with fewer than two positions and malformed rings are parse failures. Legacy crs declarations are accepted as metadata; original coordinates are checked without reprojection.

Outside scope

No automatic repair, CRS validation, cross-layer topology rules, map editing, GeoPackage import, multi-layer archives, URL import, accounts or cloud storage. Input is never automatically closed, simplified or reprojected.

Browser and performance status

Use a modern desktop browser and a secure origin (HTTPS or local loopback). Chrome, Edge, Firefox and Safari each require recorded acceptance before support is claimed. Mobile devices and older browsers are not validated. Large-file benchmarks are isolated experiments and do not increase the public size limit.

Third-party notices

GEOS and geos-wasm

This build distributes geos-wasm 3.1.1 containing GEOS 3.13.0 as an unmodified, separately loaded ES module at vendor/geos/geos.esm.js.

fflate

Shapefile ZIP decompression uses fflate 0.8.3, distributed as a same-origin browser ES module under the MIT license. License and copyright notice · Upstream source.

Distribution review pending

The npm package metadata declares LGPL-3.0-or-later, while its bundled license text is LGPL 2.1. This discrepancy must be resolved before public release. Upstream source links alone are not recorded as completion of corresponding-source or redistribution obligations. A release must verify applicable licenses, required source/build materials and notices for all bundled components.

The module can be replaced in a local build at vendor/geos/geos.esm.js. A replacement must preserve the loader interface; changing GEOS requires a matching native baseline and renewed parity tests.

Return to the inspector

QGIS single-layer coverage

The catalog contains 40 rules; 34 are available in the browser, including 11 required and 23 optional checks. Six attribute checks remain available to API/batch callers. Rule-024 through Rule-040 cover the single-layer Geometry Checker options and allowed geometry types, classified independently of their execution group.

58 hand-authored cases exercise real WASM output and independent PyQGIS algorithms. Source semantics reference QGIS 3.44.0 (5d9ba037df1); local execution records QGIS 3.40.3 / GEOS 3.13.0. This is algorithm-level evidence, with GUI/plugin error-row parity and browser acceptance recorded separately.

New rule details