Skip to main content

Native Python interface for the RMBL Spatial Data Platform

Project description

pySDP

PyPI Python versions CI Docs License: MIT

Native Python interface for the RMBL Spatial Data Platform — curated, high-resolution geospatial datasets covering Western Colorado (USA) around Rocky Mountain Biological Laboratory.

Lazy cloud access. Standard scientific-Python types. Feature-parity port of the rSDP R package.

  • 🌐 No downloads needed — open 1 GB COGs from S3 and extract point samples without a local copy. GDAL VSICURL handles the range reads.
  • 🔄 Composable return typesxarray.Dataset, geopandas.GeoDataFrame, pandas.DataFrame. No custom classes to learn; everything plugs into the PyData ecosystem.
  • 📅 Time-series aware — uniform pandas.DatetimeIndex across Daily / Monthly / Yearly products. ds.sel(time="2019"), .resample, .groupby("time.year") all work.
  • 🚀 Dask-ready — lazy chunked reads via chunks="auto" (requires pysdp[dask]) let you scale to stacks that don't fit in memory.

📘 Full documentation: https://rmbl-sdp.github.io/pySDP/ 📖 Getting startedUser guidesAPI reference

Install

pip install pysdp                 # core: catalog, raster, extraction, download
pip install "pysdp[dask]"         # + lazy chunked reads via Dask
pip install "pysdp[stac]"         # + pystac-client + odc-stac for STAC
pip install "pysdp[hub]"          # + dask-gateway for JupyterHub clusters
pip install "pysdp[all]"          # everything

Requires Python 3.11+. All core deps (rasterio, rioxarray, xarray, geopandas, pystac, scipy, ...) have wheels on PyPI for Linux, macOS (Intel + Apple Silicon), and Windows — no system GDAL install needed.

30-second tour

import pysdp
import geopandas as gpd

# Discover what's in the catalog
cat = pysdp.get_catalog(domains=["UG"], types=["Vegetation"])
cat[["CatalogID", "Product", "Resolution"]].head()

# Open a raster lazily — the 1 GB landcover COG stays on S3
landcover = pysdp.open_raster("R3D018")

# Sample at field sites (auto-reprojects to the raster's CRS)
sites = gpd.GeoDataFrame(
    {"site": ["Roaring Judy", "Gothic", "Galena Lake"]},
    geometry=gpd.points_from_xy(
        [-106.853186, -106.988934, -107.072569],
        [38.716995, 38.958446, 39.021644],
    ),
    crs="EPSG:4326",
)
samples = pysdp.extract_points(landcover, sites)
samples

See the user guides for deeper walkthroughs — catalog discovery, raster wrangling, field-site sampling, and making publication-quality maps.

Public API

Seven functions cover the whole surface:

Function Purpose
get_catalog() Discover SDP datasets (packaged snapshot, live, or STAC)
get_metadata() Per-dataset XML metadata as dict or lxml Element
open_raster() Lazy xarray.Dataset from an SDP cloud COG
open_stack() Multi-product lazy stack (shared grid)
extract_points() Sample values at point geometries
extract_polygons() Zonal summaries over polygon geometries
download() Bulk-fetch COGs to local disk

Full signatures and examples: https://rmbl-sdp.github.io/pySDP/api/.

Coming from rSDP?

pySDP is a direct port with the same catalog, same vocabulary, and feature parity. The rSDP → pySDP mapping in SPEC §5 is the authoritative reference; the short version:

rSDP (R) pySDP (Python)
sdp_get_catalog() pysdp.get_catalog()
sdp_get_metadata() pysdp.get_metadata()
sdp_get_raster() pysdp.open_raster() / pysdp.open_stack()
sdp_extract_data(points) pysdp.extract_points()
sdp_extract_data(polygons) pysdp.extract_polygons()
download_data() pysdp.download()
SpatRaster xarray.Dataset
SpatVector / sf::sf geopandas.GeoDataFrame

Status & roadmap

v0.1 (current): feature-complete port of rSDP v0.2. Catalog discovery, metadata, lazy raster access, point/polygon extraction, bulk download — all with tests and CI across Python 3.11 / 3.12 / 3.13 × Linux / macOS / Windows.

Upcoming (see ROADMAP.md for details):

  • Phase 7 — JupyterHub + Dask Gateway integration (pysdp.hub), GDAL cloud-tuning defaults
  • Phase 8a — Distributed extraction partition helpers + at-scale recipes
  • Phase 8b — Polygon zonal stats + benchmark harness

Project documents

License

MIT — see LICENSE.

Citation

pySDP is part of the infrastructure around the RMBL Spatial Data Platform. If it supports your research, please cite the SDP (citation guidance at https://www.rmbl.org/scientists/resources/spatial-data-platform/). A formal citation for pySDP itself will be added at the 0.1.0 stable release.

Acknowledgements

pySDP is developed by Ian Breckheimer and collaborators at Rocky Mountain Biological Laboratory. Built on the shoulders of giants: xarray, rioxarray, rasterio, geopandas, pystac, xvec, and odc-stac.

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

pysdp-0.1.1.tar.gz (79.8 kB view details)

Uploaded Source

Built Distribution

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

pysdp-0.1.1-py3-none-any.whl (46.8 kB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for pysdp-0.1.1.tar.gz
Algorithm Hash digest
SHA256 6ec9a487d6a85932bf7ab52280b78038fa50474a68a6c81cbc108e6d7d230fce
MD5 1ae8cbc3d1e8d468965947b057b393ac
BLAKE2b-256 637b78a3775452e09c589c49d53ca3056dc6313e956d9208eacc4220356e2290

See more details on using hashes here.

Provenance

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

Publisher: release.yml on rmbl-sdp/pySDP

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

File details

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

File metadata

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

File hashes

Hashes for pysdp-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 0e6a4b1a399d9ac1c6e85e8ff99b52cbdc998010834838afb50a4813cfe4843d
MD5 7d935d8cae2235af937fae8f924f86f9
BLAKE2b-256 cc9d24d7ba85fc4bf5c527919f2d59d504f1554c41e996bedf041be9c7d9b3d1

See more details on using hashes here.

Provenance

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

Publisher: release.yml on rmbl-sdp/pySDP

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