You're Invited:Meet the Socket Team at BlackHat and DEF CON in Las Vegas, Aug 4-6.RSVP
Socket
Book a DemoInstallSign in
Socket

geojson-validator

Package Overview
Dependencies
Maintainers
1
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

geojson-validator

Validates and fixes GeoJSON

0.6.0
pipPyPI
Maintainers
1

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.

Keywords

geojson

FAQs

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts