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 labelgeometry— 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)
| File | Size | Uploaded | |
|---|---|---|---|
| raster2poly-0.1.0.tar.gz | 23.2 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| 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 logRelease 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