Validates and fixes GeoJSON
Project description
Validate and automatically fix invalid GeoJSON. 🌎 Webapp and 🐍 Python package.
The only tool that reliably addresses all issues:
- Detects invalid geometries (GeoJSON specification): duplicate nodes, wrong winding order, ...
- Detects problematic geometries (for some tools & APIs): self-intersection, crossing anti-meridian, ...
- Checks against GeoJSON schema if all required JSON elements exist
- Automatically fixes invalid geometry issues
🎈 Try it out: geojson-validator webapp 🎈
Quickstart
# Installation
pip install geojson-validator
See the three main functions below. Data input can be any type of GeoJSON dictionary, a filepath/url to a GeoJSON, shapely geometries and anything with a __geo_interface__ (e.g. Geopandas GeoDataFrame).
import geojson_validator
geojson_input = {'type': 'FeatureCollection',
'features': [{'type': 'Feature', 'geometry':
{'type': 'Polygon', 'coordinates': [[[-59.758285, 8.367035], ...]]}}]}
geojson_validator.validate_schema(geojson_input)
geojson_validator.validate_geometries(geojson_input)
geojson_validator.fix_geometries(geojson_input)
1. Validate GeoJSON schema 📚
Checks the structure & formatting of the GeoJSON, e.g. if all required elements exist.
errors = geojson_validator.validate_schema(geojson_input)
If the input conforms to the GeoJSON schema returns an empty list, otherwise all the reasons and respective
line/feature position where it is invalid: e.g. {"Missing 'type'": {"lines": [4], "features": [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.
result = geojson_validator.validate_geometries(geojson_input)
The result gives the reason and positional indices of the invalid geometries e.g. [0, 3].
It also shows which of the sub-geometries within a MultiType geometry make it invalid e.g. {2:[0, 5]}.
{"invalid":
{"duplicate_nodes": [0, 3],
"exterior_not_ccw": [{2:[0, 5]}],
"problematic":
{"crosses_antimeridian": [1]},
"count_geometry_types":
{"Polygon": 3,
"MultiPolygon": 1}}
You can choose to validate only selected criteria, by default all are checked.
# Invalid according to the GeoJSON specification
criteria_invalid = ["unclosed", "duplicate_nodes", "less_three_unique_nodes", "exterior_not_ccw",
"interior_not_cw", "inner_and_exterior_ring_intersect", "crs_defined",
"outside_lat_lon_boundaries"]
# Problematic with some tools & APIs
criteria_problematic = ["holes", "self_intersection", "excessive_coordinate_precision",
"3d_coordinates", "crosses_antimeridian"]
geojson_validator.validate_geometries(geojson, criteria_invalid, criteria_problematic)
3. Fix GeoJSON geometries 🟩
Fixes 6 of the most common categories of invalid geometries. All other criteria can not be fixed in a programmatic way, they require user decisions (e.g. which part of a self-intersecting geometry should be dropped). More helper-functions for this coming soon!
# Fixes "unclosed", "duplicate_nodes", "exterior_not_ccw", "interior_not_cw"
fixed_fc = geojson_validator.fix_geometries(geojson_input)
The result is a FeatureCollection with the fixed geometries. The check_crs parameter is False by default, the test is optional.
TODO
- additional reasons invalidaity
- advanced fix (e.g. coordinate preicisoon)
High:
- Improve app & gif.
- jsondecode
- Map?
- Checkboxes?
- Options?
- just one button for validation.
- What was fixed & validate after again.
- https://geojson.yanzi.dev/
- infos re file
Medium:
-
more fixes?
-
fc bbox order, feature bbox, geometry bbox order and other criteria
-
Low:
- Multihtreading?
- versioning?
- fastapi as connector, not hosted just in package for others to run.
Notes:
- Does not require a feature id, and it doesnt need to be unique
Don't:
- jsondecodeerror
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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file geojson-validator-0.4.0.tar.gz.
File metadata
- Download URL: geojson-validator-0.4.0.tar.gz
- Upload date:
- Size: 17.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.11.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0d881fe3958fa0cbfad0f3082cf10cb5c109f2795fc7bd892576e35e5ef92971
|
|
| MD5 |
18f3869b8c2f175e933f4a3d819b5dd5
|
|
| BLAKE2b-256 |
02026e5fd260a5e3b69f67f92b016ce8e27da3b23a32e55f1ddc2678c39a1c2f
|
File details
Details for the file geojson_validator-0.4.0-py3-none-any.whl.
File metadata
- Download URL: geojson_validator-0.4.0-py3-none-any.whl
- Upload date:
- Size: 17.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.11.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
31c198dd33a2e41c0eb567407b7538a9c308d6f806a939bb59091a783954785a
|
|
| MD5 |
d83f249fc97b5b80e154c89ae363aab2
|
|
| BLAKE2b-256 |
dbffe52aa97e97ed9f3881f46386085ed357b7719af41f7b1c7bc48371e0a033
|