Skip to main content

Python tool to extract large-amounts of OpenStreetMap data

Project description

earth-osm

One-command to extract infrastructure data from OpenStreetMap

📚 Overview

earth-osm downloads, filters, cleans and exports infrastructure data from OpenStreetMap (OSM). It provides a Python API and a CLI interface to extract data for various infrastructure types, such as power lines, substations, and more.

🌟 Key Features

  • 🔌 Extracts infrastructure data from OSM
  • 📅 Historical data support (specify target dates)
  • 🧹 Cleans and standardizes the data (coming soon)
  • 🚀 No API rate limits (data served from GeoFabrik)
  • 🐍 Provides a Python API
  • 🖥️ Supports multiprocessing for faster extraction
  • 📊 Outputs data in .csv and .geojson formats
  • 🌍 Supports planetary data extraction
  • 🖱️ Easy-to-use CLI interface
  • 🌐 Dual data sources: GeoFabrik (default) and live Overpass API

🚀 Getting Started

Installation

Install earth-osm using pip (recommended):

pip install earth-osm

Or with conda:

conda install --channel=conda-forge earth-osm

Basic Usage

Extract OSM data using the CLI:

earth_osm extract power --regions benin monaco --features substation line

This command extracts power infrastructure data for Benin and Monaco, focusing on substations and power lines. By default, the resulting .csv and .geojson files are stored in ./earth_data/out.

Load the extracted data using pandas:

import pandas as pd
import geopandas as gpd

# For Pandas
df_substations = pd.read_csv('./earth_data/out/BJ_raw_substations.csv')

# For GeoPandas
gdf_substations = gpd.read_file('./earth_data/out/BJ_raw_substations.geojson')

Optional: Speed up downloads with aria2c

Install aria2c (for example brew install aria2, sudo apt-get install aria2, or choco install aria2) and set EO_PARALLEL_DOWNLOADS greater than 1; earth-osm will then use multiple connections for .osm.pbf downloads and otherwise falls back automatically.

export EO_PARALLEL_DOWNLOADS=8    # fish: set -x EO_PARALLEL_DOWNLOADS 8
earth_osm extract power --regions germany --features line

🛠️ CLI Reference

Extract Command

earth_osm extract <primary> --regions <region1> <region2> ... [options]

Arguments:

  • <primary>: Primary feature to extract (e.g power)

Required Options:

  • --regions: Specify one or more regions using ISO 3166-1 alpha-2, ISO 3166-2 codes, or full names

Tip: A list of regions is available at regions.md

Optional Arguments:

Argument Description Default
--features Specify sub-features of the primary feature All features
--update Update existing data False
--no_mp Disable multiprocessing False (MP enabled)
--data_dir Path to data directory './earth_data'
--out_dir Path to output directory Same as data_dir
--out_format Export format(s): csv and/or geojson ['csv', 'geojson']
--agg_feature Aggregate outputs by feature False
--agg_region Aggregate outputs by region False
--source Data source: geofabrik (default) or overpass geofabrik

ℹ️ When using the Overpass backend, wildcard feature selections such as ALL_power are not supported. Specify concrete feature values instead, or switch to the Geofabrik source for wildcard exports.

Planet-wide extractions

Use the special earth region to export the full OpenStreetMap planet snapshot.

earth_osm extract power --regions earth --features line 

🐍 Python API

For more advanced usage, you can use the Python API:

import earth_osm as eo

eo.save_osm_data(
    primary_name='power',
    region_list=['benin', 'monaco'],
    feature_list=['substation', 'line'],
    update=False,
    mp=True,
    data_dir='./earth_data',
    out_format=['csv', 'geojson'],
    out_aggregate=False,
    data_source='geofabrik'  # or 'overpass'
)

For historical data, add the target_date parameter:

from datetime import datetime

# Download historical data for a specific date
eo.get_osm_data(
    region_str='malta',
    primary_name='power',
    feature_name='line',
    target_date=datetime(2020, 1, 1)  # Jan 1, 2020
)

🛠️ Development

To contribute to earth-osm, follow these steps:

  1. (Optional) Install a specific version of earth_osm:

    pip install git+https://github.com/pypsa-meets-earth/earth-osm.git@<required-commit-hash>
    
  2. (Optional) Create a virtual environment for Python >=3.10:

    python3 -m venv .venv
    source .venv/bin/activate
    
  3. Install the development dependencies:

    pip install git+https://github.com/pypsa-meets-earth/earth-osm.git
    pip install -e .[dev]
    
  4. Read the CONTRIBUTING.md file for more detailed information on how to contribute to the project.

🤝 Community

Join our Discord community to connect with other users and contributors, ask questions, and get support.

📚 Documentation

For more detailed information, check out our full documentation.


Made with ❤️ by the PyPSA meets Earth team

earth-osm logo

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

earth_osm-3.0.2.tar.gz (179.1 kB view details)

Uploaded Source

Built Distribution

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

earth_osm-3.0.2-py3-none-any.whl (179.6 kB view details)

Uploaded Python 3

File details

Details for the file earth_osm-3.0.2.tar.gz.

File metadata

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

File hashes

Hashes for earth_osm-3.0.2.tar.gz
Algorithm Hash digest
SHA256 b50f265615cb1f29b7a5f4165968426852f2060c500ef7ac710876699df4a72e
MD5 40e05d7af5c66736fd01da7abe58c253
BLAKE2b-256 1c9e195c44f82c489e80c4f8660bb0c7bc7e7d0e10d048b1859a565e2f0c7d49

See more details on using hashes here.

Provenance

The following attestation bundles were made for earth_osm-3.0.2.tar.gz:

Publisher: release.yml on pypsa-meets-earth/earth-osm

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

File details

Details for the file earth_osm-3.0.2-py3-none-any.whl.

File metadata

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

File hashes

Hashes for earth_osm-3.0.2-py3-none-any.whl
Algorithm Hash digest
SHA256 dde9156ceb7b5fdb9d8a785e559dd8958ee53756514f9ced7fd1312e201ed681
MD5 9399e7b510c77ed188a9000b721a9751
BLAKE2b-256 693b825ce9b698011f22d8488586a26091436e35819f1bb767c8d23e876261b2

See more details on using hashes here.

Provenance

The following attestation bundles were made for earth_osm-3.0.2-py3-none-any.whl:

Publisher: release.yml on pypsa-meets-earth/earth-osm

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