Python tool to extract large-amounts of OpenStreetMap data
Project description
📚 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_powerare 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:
-
(Optional) Install a specific version of earth_osm:
pip install git+https://github.com/pypsa-meets-earth/earth-osm.git@<required-commit-hash>
-
(Optional) Create a virtual environment for Python >=3.10:
python3 -m venv .venv source .venv/bin/activate
-
Install the development dependencies:
pip install git+https://github.com/pypsa-meets-earth/earth-osm.git pip install -e .[dev]
-
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
Project details
Release history Release notifications | RSS feed
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 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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b50f265615cb1f29b7a5f4165968426852f2060c500ef7ac710876699df4a72e
|
|
| MD5 |
40e05d7af5c66736fd01da7abe58c253
|
|
| BLAKE2b-256 |
1c9e195c44f82c489e80c4f8660bb0c7bc7e7d0e10d048b1859a565e2f0c7d49
|
Provenance
The following attestation bundles were made for earth_osm-3.0.2.tar.gz:
Publisher:
release.yml on pypsa-meets-earth/earth-osm
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
earth_osm-3.0.2.tar.gz -
Subject digest:
b50f265615cb1f29b7a5f4165968426852f2060c500ef7ac710876699df4a72e - Sigstore transparency entry: 677701356
- Sigstore integration time:
-
Permalink:
pypsa-meets-earth/earth-osm@2b7d46bb76dce7a8b629e12b91652654ee8e9781 -
Branch / Tag:
refs/tags/3.0.2 - Owner: https://github.com/pypsa-meets-earth
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@2b7d46bb76dce7a8b629e12b91652654ee8e9781 -
Trigger Event:
push
-
Statement type:
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
dde9156ceb7b5fdb9d8a785e559dd8958ee53756514f9ced7fd1312e201ed681
|
|
| MD5 |
9399e7b510c77ed188a9000b721a9751
|
|
| BLAKE2b-256 |
693b825ce9b698011f22d8488586a26091436e35819f1bb767c8d23e876261b2
|
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
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
earth_osm-3.0.2-py3-none-any.whl -
Subject digest:
dde9156ceb7b5fdb9d8a785e559dd8958ee53756514f9ced7fd1312e201ed681 - Sigstore transparency entry: 677701422
- Sigstore integration time:
-
Permalink:
pypsa-meets-earth/earth-osm@2b7d46bb76dce7a8b629e12b91652654ee8e9781 -
Branch / Tag:
refs/tags/3.0.2 - Owner: https://github.com/pypsa-meets-earth
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@2b7d46bb76dce7a8b629e12b91652654ee8e9781 -
Trigger Event:
push
-
Statement type: