Skip to main content

raster2poly

Classify rasters and vectorise the result to clean polygons — in three lines of code.

Supports unsupervised clustering (KMeans), supervised classification (Random Forest from ROI shapefiles), and rule-based DN thresholds. Outputs are dissolved, filtered GeoDataFrames ready for GIS.

Installation

pip install raster2poly

Quick start

Unsupervised (KMeans)

from raster2poly import RasterClassifier

clf = RasterClassifier("satellite_image.tif")
gdf = clf.unsupervised(n_clusters=6, algorithm="mini_batch_kmeans")
clf.save(gdf, "classes.gpkg")

Supervised (ROI shapefile)

gdf = clf.supervised("training_rois.shp", class_col="class_id")
clf.save(gdf, "supervised.shp")

The ROI file can contain Points or Polygons (or both). For polygons, every pixel inside the geometry is used as a training sample — far more robust than a single zonal mean.

Rule-based (DN ranges)

rules = {
    1: [(4, 0.15, 1.0), (5, 0.0, 0.10)],  # high Red, low NIR → built-up
    2: [(5, 0.25, 1.0)],                     # high NIR → vegetation
}
gdf = clf.from_dn_ranges(rules)

Band numbers are 1-based. A pixel must satisfy all conditions in the list to be assigned that class.

Key improvements over the original script

Issue in original Fix
point_query returns wrong shape for multi-band Replaced with per-pixel rasterised extraction
Only zonal mean used for polygon ROIs Every pixel inside the polygon is a training sample
Hardcoded 'class' column name Configurable class_col parameter
No polygon dissolve — millions of tiny fragments dissolve=True by default, plus min_area filter
rasterstats dependency for simple ops Replaced with rasterio.features.geometry_mask
No CRS check on ROI shapefile Auto-reprojects vector → raster CRS
Output always Shapefile Auto-detects .shp / .gpkg / .geojson
No nodata → NaN conversion Nodata replaced with NaN on load, masked throughout

Output format

The returned GeoDataFrame has two columns:

  • class_id (int) — the class label
  • geometry — dissolved polygons

Save to any format: .shp, .gpkg, .geojson.

License

MIT

Release files for raster2poly 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for raster2poly 0.1.0
File Size Uploaded
raster2poly-0.1.0.tar.gz 23.2 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for raster2poly 0.1.0
File Interpreter ABI Platform
raster2poly-0.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 32.4 kB

Release files / raster2poly-0.1.0.tar.gz

Download URL raster2poly-0.1.0.tar.gz
Size 23.2 kB
Tags Source
SHA-256 checksum
How to use checksums
380d4186de92bc57fed582e76901b56b53f03ed24a4c47233485d12c42fbe06e
BLAKE2b-256 checksum
How to use checksums
2f1dd2f829813c9c26df312e84c1aad23cad1fd7eff2ebac5368b7b72220ca62
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Apr 10, 2026.

Transparency log

Release files / raster2poly-0.1.0-py3-none-any.whl

Download URL raster2poly-0.1.0-py3-none-any.whl
Size 9.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
3988bee97829d774c19a0160c3c518376eb6121d6ff4c3860be09dabe35ef247
BLAKE2b-256 checksum
How to use checksums
3f9c26f95c4ffa920d53afe80f3a21c0310e497cb0f0d06124f652374cf8853f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Apr 10, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page