Skip to main content

Recipe-driven spatial data downloader for Dutch geo-data

Project description

GISKit

Recipe-driven spatial data downloader for Netherlands geo-data

Python 3.10-3.12 License: MIT Tests


What is GISKit?

GISKit is a Python tool for downloading Dutch spatial data using simple JSON "recipes". Define what data you need and where you need it - GISKit handles the downloads and combines everything into a single GeoPackage.

Perfect for:

  • Creating project underlays for construction/infrastructure projects
  • Downloading base maps for GIS analysis
  • Collecting spatial context data for locations
  • Automating repetitive spatial data downloads

Key Features

  • Recipe-Driven: Define your data needs in simple JSON
  • PDOK Integration: Access to 50+ Dutch government spatial datasets
  • Smart Downloads: Automatic bbox calculation from addresses
  • Single Output: Everything combined in one GeoPackage
  • CRS Handling: Automatic coordinate transformation
  • Export Options: GeoPackage, GeoJSON, CityJSON, optional IFC/GLB

Quick Start

Installation

From PyPI (recommended):

pip install pygiskit

# With IFC export support (Python 3.10-3.12 only)
pip install pygiskit[ifc]

From source:

git clone https://github.com/sanderboer/py-giskit.git
cd py-giskit
pip install -e .

Your First Recipe

Create dam_square.json:

{
  "name": "Dam Square Buildings",
  "location": {
    "type": "address",
    "value": "Dam 1, Amsterdam",
    "radius": 500
  },
  "datasets": [
    {
      "provider": "pdok",
      "service": "bgt",
      "layers": ["pand", "wegdeel"]
    }
  ],
  "output": {
    "path": "./dam_square.gpkg",
    "crs": "EPSG:28992"
  }
}

Run it:

giskit run dam_square.json

Result: dam_square.gpkg with buildings and roads around Dam Square!

Recipe Examples

All examples are in the recipes/ directory. Try them out:

# Download buildings and infrastructure around Curieweg, Spijkenisse
giskit run recipes/curieweg_multi_service.json

# Amsterdam Dam Square with buildings
giskit run recipes/amsterdam_dam_square.json

# Simple bbox example
giskit run recipes/bbox_simple.json

Urban Planning Dataset

Comprehensive data for a project location:

{
  "name": "Curieweg Project Underlay",
  "location": {
    "type": "address",
    "value": "Curieweg 7a, Spijkenisse",
    "radius": 1000
  },
  "datasets": [
    {"provider": "pdok", "service": "bgt", "layers": ["pand", "wegdeel", "waterdeel"]},
    {"provider": "pdok", "service": "bag", "layers": ["pand", "verblijfsobject"]},
    {"provider": "pdok", "service": "cbs-wijken-buurten-2024", "layers": ["buurten"]},
    {"provider": "pdok", "service": "bestuurlijkegebieden", "layers": ["gemeenten"]}
  ],
  "output": {
    "path": "./curieweg.gpkg",
    "crs": "EPSG:28992"
  }
}

Location Types

Address with buffer:

{
  "location": {
    "type": "address",
    "value": "Curieweg 7a, Spijkenisse",
    "radius": 1000
  }
}

Point coordinates:

{
  "location": {
    "type": "point",
    "value": [4.89, 52.37],
    "crs": "EPSG:4326",
    "radius": 500
  }
}

Bounding box:

{
  "location": {
    "type": "bbox",
    "value": [120700, 487000, 120950, 487250],
    "crs": "EPSG:28992"
  }
}

Available Data Sources

PDOK (Platform Digitale Overheid - Netherlands)

GISKit provides access to 50+ Dutch government datasets via PDOK's OGC API Features:

Base Registries (Basisregistraties):

  • BGT - Large Scale Topography (54 layers: buildings, roads, water, terrain, etc.)
  • BAG - Buildings and Addresses (buildings, addresses, residence objects)
  • BAG3D - 3D Building Models (LoD 1.2, 1.3, 2.2 in CityJSON format)
  • BRK - Cadastral Parcels

Infrastructure:

  • NWB Roads - National Road Database (road segments, junctions)
  • NWB Waterways - Waterway network

Statistics & Administration:

  • CBS Neighborhoods 2024 - Statistical areas (neighborhoods, districts, municipalities)
  • Administrative Boundaries - Municipalities, provinces, water boards

Environment:

  • Protected Areas - Nature reserves, Natura 2000
  • Soil Data - Soil types, contamination

See docs/PDOK_SERVICES.md for complete catalog with all layers.

Planned Providers

  • OpenStreetMap - Global POI, buildings, roads via Overpass API
  • AHN Elevation - Dutch elevation data via WCS
  • Aerial Imagery - Luchtfoto via WMTS

CLI Commands

Run recipes:

# Execute a recipe
giskit run recipe.json

# Validate recipe syntax
giskit recipe validate recipe.json

Explore providers:

# List available providers and services
giskit providers list

# Show PDOK service details
giskit providers info pdok

# Search for specific data
giskit search "buildings"

Monitor API quirks:

# Show known API quirks for providers
giskit quirks list

# Show details for specific provider
giskit quirks show pdok ogc-features

# Monitor which quirks are being applied
giskit quirks monitor

Export Formats

Built-in formats:

  • GeoPackage (.gpkg) - default, recommended
  • GeoJSON (.geojson)
  • Shapefile (.shp)
  • CityJSON (.json) - for 3D data

Optional IFC/GLB export:

Requires pip install giskit[ifc] (Python 3.10-3.12 only)

# Export GeoPackage to IFC
giskit export ifc data.gpkg output.ifc

# Convert IFC to GLB (for web viewers)
giskit export glb data.ifc output.glb

See notes/EXPORT_GUIDE.md for details.

How It Works

  1. Define - Write a JSON recipe with location and datasets
  2. Geocode - GISKit converts addresses to coordinates
  3. Download - Fetches data from PDOK OGC API Features
  4. Transform - Converts to target CRS if needed
  5. Combine - Merges all layers into single GeoPackage
┌──────────────┐
│ JSON Recipe  │
└──────┬───────┘
       │
       ▼
┌──────────────┐      ┌─────────────┐
│  Geocoding   │─────▶│ PDOK Lookup │
└──────┬───────┘      └─────────────┘
       │
       ▼
┌──────────────┐
│   Download   │──────┬────────────────┐
└──────┬───────┘      │                │
       │         ┌────▼────┐      ┌────▼────┐
       │         │  BGT    │      │   BAG   │
       │         │ (54 lyr)│      │ (3 lyr) │
       │         └────┬────┘      └────┬────┘
       ▼              │                │
┌──────────────┐      │                │
│  Transform   │◀─────┴────────────────┘
└──────┬───────┘
       │
       ▼
┌──────────────┐
│ GeoPackage   │
│ (.gpkg)      │
└──────────────┘

Project Structure

giskit/
├── cli/              # Command-line interface
├── core/             # Recipe parsing, geocoding, spatial ops
├── protocols/        # OGC Features, WMTS, WCS protocols
├── providers/        # PDOK, OSM provider implementations
├── exporters/        # IFC/GLB export (optional)
└── config/           # YAML configurations for services

recipes/              # Example recipes ready to use
tests/                # 110+ unit and integration tests

Development

Running Tests

# All tests (110 passing)
pytest

# With coverage report
pytest --cov=giskit --cov-report=html

# Specific test suites
pytest tests/unit/
pytest tests/integration/

Code Quality

# Lint code
ruff check .

# Format code
ruff format .

Documentation

For Contributors

Use Cases

Urban Planning:

  • Project site context data (buildings, infrastructure, parcels)
  • Statistical area boundaries for reports
  • Base maps for presentations

Construction:

  • Site underlay generation
  • Existing infrastructure mapping
  • Environmental constraints (protected areas, water)

GIS Analysis:

  • Batch download base data for multiple locations
  • Standardized data collection workflows
  • Automated updates of project data

Research:

  • Reproducible spatial data downloads
  • Consistent data collection methodology
  • Share data requirements via recipes

Contributing

Contributions welcome! This project is in active development.

  1. Check PLAN.md for current priorities
  2. Create an issue for discussion
  3. Submit a pull request

Credits

Built with:

Data sources:

  • PDOK - Dutch government spatial data platform
  • Nominatim - OpenStreetMap geocoding

License

MIT License - See LICENSE


Made by A190

Simple recipes for Dutch spatial data

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

pygiskit-0.1.1.tar.gz (83.7 kB view details)

Uploaded Source

Built Distribution

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

pygiskit-0.1.1-py3-none-any.whl (102.4 kB view details)

Uploaded Python 3

File details

Details for the file pygiskit-0.1.1.tar.gz.

File metadata

  • Download URL: pygiskit-0.1.1.tar.gz
  • Upload date:
  • Size: 83.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for pygiskit-0.1.1.tar.gz
Algorithm Hash digest
SHA256 954b2d6b09420642cf538943e3ab45db677d1b7d59a9066ae492e019eca3c2fa
MD5 ea5aa1e8ebe4099c00ec9285dc6d594f
BLAKE2b-256 ad33808e16d4a3e7fbb3995bbf06010e917aaa76b40dbaf664d4fb1a5ebf8239

See more details on using hashes here.

Provenance

The following attestation bundles were made for pygiskit-0.1.1.tar.gz:

Publisher: publish-pypi.yml on sanderboer/py-giskit

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pygiskit-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: pygiskit-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 102.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for pygiskit-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 612c81c1def3768e4e1f46edcbe07bf7090b1cc5ff5bcad7c30a813dd62af760
MD5 f56f99861a13912c3ce4e86a5eb84e9b
BLAKE2b-256 484aab8e4b6b93f91acac4931aaec727cf0933a316eae5928ebbd8d6ef6be570

See more details on using hashes here.

Provenance

The following attestation bundles were made for pygiskit-0.1.1-py3-none-any.whl:

Publisher: publish-pypi.yml on sanderboer/py-giskit

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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