Skip to main content

GeoJSON parsing and validation using Pydantic

Project description

geodantic

pypi versions

Lightweight, type-safe and spec-conforming GeoJSON parsing and validation using Pydantic.

Installation

pip install geodantic

Examples

Parse and validate GeoJSON features with custom properties:

import pydantic
from geodantic import Feature, Point

# Use your own properties Pydantic models
@pydantic.dataclasses.dataclass
class MyProperties:
    foo: str

data = {
    "type": "Feature",
    "geometry": {"type": "Point", "coordinates": [1, 2]},
    "properties": {"foo": "abc"},
}

# Parse and validate data into spec-conforming objects
parsed = Feature[Point, MyProperties](**data)
"""
Feature[Point, MyProperties](
    type=<GeoJSONObjectType.FEATURE: 'Feature'>, 
    bbox=None, 
    geometry=Point(
        type=<GeoJSONObjectType.POINT: 'Point'>, 
        bbox=None, 
        coordinates=(1.0, 2.0)
    ), 
    properties=MyProperties(foo='abc'), 
    id=None
)
"""

# Dump back into JSON using standard Pydantic methods
parsed.model_dump_json(exclude_unset=True, indent=2)
"""
{
  "type": "Feature",
  "geometry": {
    "type": "Point",
    "coordinates": [
      1.0,
      2.0
    ]
  },
  "properties": {
    "foo": "abc"
  }
}
"""

Parse objects of arbitrary types:

from geodantic import GeometryCollection

data = {
    "type": "GeometryCollection",
    "geometries": [
        {
            "type": "Polygon",
            "coordinates": [[[1, 2], [3, 4], [5, 6], [1, 2]]],
            "bbox": [1, 2, 3, 4],
        },
        {
            "type": "GeometryCollection",
            "geometries": [{"type": "Point", "coordinates": [1, 2]}],
        },
    ],
}

# Parse any geometry type
parsed = GeometryCollection(**data)
"""
GeometryCollection(
    type=<GeoJSONObjectType.GEOMETRY_COLLECTION: 'GeometryCollection'>, 
    bbox=None, 
    geometries=[
        Polygon(
            type=<GeoJSONObjectType.POLYGON: 'Polygon'>, 
            bbox=(1.0, 2.0, 3.0, 4.0), 
            coordinates=[[(1.0, 2.0), (3.0, 4.0), (5.0, 6.0), (1.0, 2.0)]]
        ), 
        GeometryCollection(
            type=<GeoJSONObjectType.GEOMETRY_COLLECTION: 'GeometryCollection'>, 
            bbox=None, 
            geometries=[
                Point(
                    type=<GeoJSONObjectType.POINT: 'Point'>, 
                    bbox=None, 
                    coordinates=(1.0, 2.0)
                )
            ]
        )
    ]
)
"""

Contributing

Set up the project using Poetry:

poetry install

Format the code:

make lint

Run tests:

make test

Check for typing and format issues:

make check

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

geodantic-0.4.0.tar.gz (4.9 kB view details)

Uploaded Source

Built Distribution

geodantic-0.4.0-py3-none-any.whl (5.8 kB view details)

Uploaded Python 3

File details

Details for the file geodantic-0.4.0.tar.gz.

File metadata

  • Download URL: geodantic-0.4.0.tar.gz
  • Upload date:
  • Size: 4.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.2.2 CPython/3.12.1 Linux/6.2.0-1018-azure

File hashes

Hashes for geodantic-0.4.0.tar.gz
Algorithm Hash digest
SHA256 ef53322467f610317994493a58b31ffa48336ff99b2ad1b20474e20c01d9d669
MD5 ca4b24c0bbddb699c6b99d440e5e181b
BLAKE2b-256 1625a0942657dc817dc2ba91dd3c1f90a6a7f735a3a8dae026ea7ecde06fb5c4

See more details on using hashes here.

File details

Details for the file geodantic-0.4.0-py3-none-any.whl.

File metadata

  • Download URL: geodantic-0.4.0-py3-none-any.whl
  • Upload date:
  • Size: 5.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.2.2 CPython/3.12.1 Linux/6.2.0-1018-azure

File hashes

Hashes for geodantic-0.4.0-py3-none-any.whl
Algorithm Hash digest
SHA256 0fffc3f1430bbdb9c516a4df7cc03c30021e95d03e891b5ecf3308bade864f97
MD5 46a84f1027238445ee838ded04734038
BLAKE2b-256 78619fcb2c9c05320145d57ba8e287ae59009a33b7044518e42ea90a3cb9eef8

See more details on using hashes here.

Supported by

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