Skip to main content

Validates and fixes GeoJSON

Project description

GeoJSON Validator

Validate GeoJSON and automatically fix invalid geometries. Like geojsonhint, but with geometry checks & fixes!

  • 🔴 Detects invalid geometries & 🟢 fixes them : Unclosed, wrong winding order etc.
  • 🟨 Problematic geometries (for many tools & APIs): Self-intersection, crossing anti-meridian etc.
  • Checks 🧬 structure according to GeoJSON specification
  • Use Website or Python package

🎈 geojson-validator.streamlit.app in the Browser 🎈


Quickstart Python

# Installation
pip install geojson-validator

Data input can be any type of GeoJSON object, a filepath/url, and anything with a __geo_interface__ (shapely, geopandas etc.).

import geojson_validator

geojson_input = {'type': 'FeatureCollection',
                 'features': [{'type': 'Feature', 'geometry':
                     {'type': 'Point', 'coordinates': [-59.758285, 8.367035]}}]}

geojson_validator.validate_structure(geojson_input)
geojson_validator.validate_geometries(geojson_input)
geojson_validator.fix_geometries(geojson_input)

1. Validate GeoJSON structure 🧬

Checks the structure & formatting of the GeoJSON, e.g. required elements, data & geometry types, coordinate array depth etc.

geojson_validator.validate_structure(geojson_input, check_crs=False)

Returns the reasons why the input does not conform to the GeoJSON specification. Also gives the line location and feature index to more quickly localize the issues. Example: {"Missing 'type' member": {"line": [4], "feature": [0]}.

2. Validate geometries 🟥

Checks the GeoJSON geometry objects for inconsistencies and geometric issues. See geojson-invalid-geometry for a detailed description of all invalid and problematic criteria. You can choose to validate only specific criteria, by default all are selected.

# Invalid according to the GeoJSON specification
criteria_invalid = ["unclosed", "less_three_unique_nodes", "exterior_not_ccw",
                    "interior_not_cw", "inner_and_exterior_ring_intersect"]

# Problematic with some tools & APIs
criteria_problematic = ["holes", "self_intersection", "duplicate_nodes", 
                        "excessive_coordinate_precision", "excessive_vertices", 
                        "3d_coordinates", "outside_lat_lon_boundaries", "crosses_antimeridian"]

geojson_validator.validate_geometries(geojson, criteria_invalid, criteria_problematic)

Returns the reasons (example below) and positional indices of the invalid geometries, e.g. features [0, 3]. Also indicates if a sub-geometry of a MultiType geometry make it invalid e.g. {2:[0, 5]}.

{"invalid": 
      {"unclosed": [0, 3],
       "exterior_not_ccw":  [{2:[0, 5]}],  
 "problematic":
      {"crosses_antimeridian": [1]},
 "count_geometry_types": 
      {"Polygon": 3,
       "MultiPolygon": 1}}

3. Fix GeoJSON geometries 🟩

Automatically repairs some of the most common categories of invalid geometries. Always fixes ["unclosed", "exterior_not_ccw", "interior_not_cw"]. Select additional, non-essential fixes with the parameter optional. More fixes and helper-functions (for issues that require user descisions) coming soon!

geojson_validator.fix_geometries(geojson_input, optional=["duplicate_nodes"])

The result is a GeoJSON FeatureCollection with the fixed geometries.

FAQ:

  • Why not use geojson-pydantic for the schema validation? pydantic error messages a bit convulted (if one coordinate is missing error 4 times), very schema like, not custom, not easy to understand for no nprogrammers. often would need to be translated.
  • Too many logging messages, can I disable them? You can disable or configure the logging behavior via geojson_validator.configure_logger(enabled=True, level="DEBUG") which also returns the logger instance.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

geojson_validator-0.6.0.tar.gz (19.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

geojson_validator-0.6.0-py3-none-any.whl (14.9 kB view details)

Uploaded Python 3

File details

Details for the file geojson_validator-0.6.0.tar.gz.

File metadata

  • Download URL: geojson_validator-0.6.0.tar.gz
  • Upload date:
  • Size: 19.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.4.27

File hashes

Hashes for geojson_validator-0.6.0.tar.gz
Algorithm Hash digest
SHA256 3b7ecc696db2c0b74d7b1dcc9af2d98ea1f1900985e7eff1ea143bc0f9d9c382
MD5 c2ef716093bd32da33db2462f80b6a2b
BLAKE2b-256 b9087439f2d6c4bbd5a5576fb1322bcd9e3beb5b75eb41961f9a489c19f95307

See more details on using hashes here.

File details

Details for the file geojson_validator-0.6.0-py3-none-any.whl.

File metadata

File hashes

Hashes for geojson_validator-0.6.0-py3-none-any.whl
Algorithm Hash digest
SHA256 c6590ba006034c3f907a896381c3ec3dd7929cc31a5385b5c2d7c175b83a4e9f
MD5 7691698d9a4faef3b019c11c4d9e3248
BLAKE2b-256 cfc67151fabbbe7939300808e8d2360fd92f3472c2f00a88b1516da86dd56a70

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page