Skip to main content

Structurally Guided Sampling

Project description

sgsPy - Structurally Guided Sampling

sgsPy is a toolbox package of stratification and sampling methods for use on ALS metrics, designed to be fast and efficient on very large raster images.

Installation

sgsPy can be downloaded on either Windows or Linux from the Python Package Index (PyPI) with the following command:

pip install sgspy

At the moment, the import import sgspy may fail if you are using a package manager other than PyPi (pip).

Overview

sgsPy is based on the widely-used sgsR package, intended originally to help develop representative ground sample networks using auxiliary information like ALS data. sgsPy takes much of the existing functionality of the R package and improves upon its performance, allowing Python users to integrate structurally guided sampling approaches to their workflows.

While the original intention for the package was to be used with ALS metrics, any form of raster data can be used in lieu of ALS metrics.

If you encounter any bugs, unclear documentation, or have any feature ideas then please contribute by posting an issue. https://github.com/jbmeyer2001/sgsPy/issues

The currently implemented functionality includes:

Quickstart guide

files

Some helpful files to get started with can be found in the https://github.com/jbmeyer2001/sgsPy/tree/main/tests/files folder. Specifically mraster.tif, inventory_polygons.shp along with its associated .dbf, .prj, and .shx files, access.shp along with its associated .dbf, .prj, and .shx files, existing.shp along with its associated .dbf, .prj, and .shx files.

raster and vector data

The two classes used by the stratification, sampling, and calculating methods are the sgspy.SpatialRaster [SpatialRaster documentation] and sgspy.SpatialVector [SpatialVector documentation]. The beginning of any process using the sgspy package will involve creating an instance of one or more of these classes. This can be done by providing a file path. It can also be done by converting an object from a popular geospatial package.

import sgspy

#creating SpatialRaster and SpatialVector using file paths
rast = sgspy.SpatialRaster("mraster.tif")
vect = sgspy.SpatialVector("access.shp")

#plotting
rast.plot(band=0)
rast.plot(band="pzabove2")

#accessing underlying data as a numpy array
zq90_arr = rast.band("zq90")
first_band_arr = rast.band(0)

#to/from GDAL raster dataset
ds = gdal.Open("mraster.tif")
rast = sgspy.SpatialRaster.from_gdal(ds)
new_ds = rast.to_gdal()

#to/from rasterio dataset
ds = rasterio.open("mraster.tif")
rast = sgspy.SpatialRaster.from_rasterio(ds)
new_ds = rast.to_rasterio()

#to/from geopandas
gdf = gpd.read_file("inventory_polygons.shp")
vect = sgspy.SpatialVector.from_geopandas(gdf)
new_gdf = gpd.to_geopandas(vect)

example

More extensive examples on how to use each method is available in the user documentation. The following shows how one might use three of the different methods available in sgspy to create a new sampling network.

import sgspy

# create SpatialRaster object from desired tif file
rast = sgspy.SpatialRaster("mraster.tif")

# use principal component analysis for dimensionality reduction (to two components or raster layers)
pca = sgspy.calculate.pca(rast, num_comp=2)

# stratifiy the two components into 5 equally sized quantiles, and map the two layers into a single mapped output
srast = sgspy.stratify.quantiles(pca, quantiles={"comp_1":5, "comp2":5}, map=True)

# use stratified random sampling to sample each (of the 25 total) mapped strata proportional to it's number of pixels in the raster band
# additionaly, plot the output and write it to samples.shp
samples = sgspy.sample.strat(srast, band="map_strat", num_samples=200, num_strata=25, allocation="prop", plot=True, filename="samples.shp")

Funding

The development of the sgsPy package was funded by the Ontario Future Forests (KTTD 2B-2024) grant.

Developer information

This section includes installation steps for both Windows and Linux, in addition to notes on running the code. See the Developer Documentation for information on the underlying C++ implementations.

Linux installation:

  1. Ensure you have Python with pip installed, and git.
  2. clone the repository with the following command:
git clone https://github.com/jbmeyer2001/sgsPy.git
  1. create and activate a python virtual environment (highly recommended)
python -m venv .venv
source ./.venv/bin/activate
  1. install dependency requirements. If you do not already have these, the dependency installation will fail.
  • build-essential (if you don't already have a C++ compiler)
  • pkg-config
  • auto-conf
  • libtool
  • bison
  • flex
  • patchelf
sudo apt install build-essential
sudo apt install pkg-config
sudo apt install auto-conf
sudo apt install libtool
sudo apt install bison
sudo apt install flex
sudo apt install patchelf
  1. Run the following command to install and build project C++ dependencies.
bash scripts/install.sh
  1. Run the following command to build the project
bash scripts/build.sh
  1. If you intend to run the tests (using pytest), both pytest and geopandas are required and can be installed as follows:
pip install pytest
pip install geopandas

Windows installation:

NOTE: The commands given are for a Windows Powershell command prompt.

  1. ensure you have Python with pip, git, and a C++ compiler.

  2. If you do not already have a C++ compiler, one can installed by installing the Microsoft Visual Studio IDE with C++ build tools.

  3. clone the repository with the following command.

git clone https://github.com/jbmeyer2001/sgsPy.git
  1. create and activate a Python virtual environment (highly recommended).
python -m venv .venv
./.venv/Scripts/activate
  1. Run the following command to install and build project C++ dependencies. remaining dependencies
./scripts/install
  1. Run the following command to build the project
./scripts/build
  1. If you intend to run the tests (using pytest), both pytest and geopandas are required and can be installed as follow:
pip install pytest
pip install geopandas

How to run sgsPy:

Tests may be ran by running the following command from within the folder containing this file. Both pytest and geopandas must be installed to run the tests.

pytest

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

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

sgspy-1.0.10-cp314-cp314-win_amd64.whl (26.5 MB view details)

Uploaded CPython 3.14Windows x86-64

sgspy-1.0.10-cp314-cp314-manylinux_2_28_x86_64.whl (35.7 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.28+ x86-64

sgspy-1.0.10-cp313-cp313-win_amd64.whl (25.8 MB view details)

Uploaded CPython 3.13Windows x86-64

sgspy-1.0.10-cp313-cp313-manylinux_2_28_x86_64.whl (35.7 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.28+ x86-64

sgspy-1.0.10-cp312-cp312-win_amd64.whl (25.8 MB view details)

Uploaded CPython 3.12Windows x86-64

sgspy-1.0.10-cp312-cp312-manylinux_2_28_x86_64.whl (35.7 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.28+ x86-64

sgspy-1.0.10-cp311-cp311-win_amd64.whl (25.8 MB view details)

Uploaded CPython 3.11Windows x86-64

sgspy-1.0.10-cp311-cp311-manylinux_2_28_x86_64.whl (35.7 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.28+ x86-64

sgspy-1.0.10-cp310-cp310-win_amd64.whl (25.8 MB view details)

Uploaded CPython 3.10Windows x86-64

sgspy-1.0.10-cp310-cp310-manylinux_2_28_x86_64.whl (35.7 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.28+ x86-64

File details

Details for the file sgspy-1.0.10-cp314-cp314-win_amd64.whl.

File metadata

  • Download URL: sgspy-1.0.10-cp314-cp314-win_amd64.whl
  • Upload date:
  • Size: 26.5 MB
  • Tags: CPython 3.14, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for sgspy-1.0.10-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 27d227dea739af40c56276d512cd7440692ff5025765d19413f775a242e8cbcf
MD5 a87b55266a1bdf894af83b8eefdf09f4
BLAKE2b-256 49a2ba37c107a8f4d85bcea6d8f2240ee42160b4bf3c8dd34d7fb40aa8b1c55a

See more details on using hashes here.

Provenance

The following attestation bundles were made for sgspy-1.0.10-cp314-cp314-win_amd64.whl:

Publisher: deploy.yml on jbmeyer2001/sgsPy

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

File details

Details for the file sgspy-1.0.10-cp314-cp314-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for sgspy-1.0.10-cp314-cp314-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 c743e37c8b7d121b7b3834061e92d65aa0f55880eb13c314fabb0cb7b0708e9d
MD5 51ee367969d22b7457921276c6b2c96b
BLAKE2b-256 68dda2b4cb08c7b257de7cb903f5ce275dd7e65cde3e9bd95288c8666fa87b33

See more details on using hashes here.

Provenance

The following attestation bundles were made for sgspy-1.0.10-cp314-cp314-manylinux_2_28_x86_64.whl:

Publisher: deploy.yml on jbmeyer2001/sgsPy

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

File details

Details for the file sgspy-1.0.10-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: sgspy-1.0.10-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 25.8 MB
  • Tags: CPython 3.13, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for sgspy-1.0.10-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 5c1e0c2fabacd2f464f7eba21dcd0e55f2a605c9ed319b9f167f001ea69159bb
MD5 d36a4d0763788e8fcf02fbf881c753b2
BLAKE2b-256 e5fbac65b72bd52d7a04a1cfb467daf7265915becc10d3c7437e97b3d14ce3be

See more details on using hashes here.

Provenance

The following attestation bundles were made for sgspy-1.0.10-cp313-cp313-win_amd64.whl:

Publisher: deploy.yml on jbmeyer2001/sgsPy

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

File details

Details for the file sgspy-1.0.10-cp313-cp313-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for sgspy-1.0.10-cp313-cp313-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 2fae3f85d6d1fb30587429073692bf0703c515c15166c22d0a770b1b6f0b1c98
MD5 8dec38cbd69d75e51424a2ca23a29556
BLAKE2b-256 e8b7f0e567a8d2b53c810b7fb7c71c0a13a91bcdc063585b16e6a636d37e5439

See more details on using hashes here.

Provenance

The following attestation bundles were made for sgspy-1.0.10-cp313-cp313-manylinux_2_28_x86_64.whl:

Publisher: deploy.yml on jbmeyer2001/sgsPy

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

File details

Details for the file sgspy-1.0.10-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: sgspy-1.0.10-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 25.8 MB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for sgspy-1.0.10-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 260c8fbb13e114ecd6882759c403c058cd3b88dc6231abb64618cd6c07d3f71a
MD5 777d008d56581be82680c0f04d185a4c
BLAKE2b-256 30f82e4ec92d301c3fd12a3cb958169128102e42e58bc4bb4f890c61b37270de

See more details on using hashes here.

Provenance

The following attestation bundles were made for sgspy-1.0.10-cp312-cp312-win_amd64.whl:

Publisher: deploy.yml on jbmeyer2001/sgsPy

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

File details

Details for the file sgspy-1.0.10-cp312-cp312-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for sgspy-1.0.10-cp312-cp312-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 03d550d8c6912b254067b1f11586c217e2e23943784724d1adbbff836cfd1f3d
MD5 a6f0d1cbe1e7a76280d8f95808336b9e
BLAKE2b-256 01d661f596317ce58771f4e19e42dedb572ce37dd6d0c4feb150069b3bada75d

See more details on using hashes here.

Provenance

The following attestation bundles were made for sgspy-1.0.10-cp312-cp312-manylinux_2_28_x86_64.whl:

Publisher: deploy.yml on jbmeyer2001/sgsPy

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

File details

Details for the file sgspy-1.0.10-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: sgspy-1.0.10-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 25.8 MB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for sgspy-1.0.10-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 04793d74275586bdca1089c0c1cf1b38b2bb2d39d734069719b0df88d8d1150f
MD5 9b6518b23e009ceada92b29fcf7dfd97
BLAKE2b-256 3aea4c383562b02124e99aca69c7a51db546f13625bb6e32a63ba3d4d232b56b

See more details on using hashes here.

Provenance

The following attestation bundles were made for sgspy-1.0.10-cp311-cp311-win_amd64.whl:

Publisher: deploy.yml on jbmeyer2001/sgsPy

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

File details

Details for the file sgspy-1.0.10-cp311-cp311-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for sgspy-1.0.10-cp311-cp311-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 92147b271f8ebc6e4e68810711419bee9c9952527c851ab4d087a384ddb31fcb
MD5 5393622ddc70706cf9360e3cf47b7b6c
BLAKE2b-256 bdc33b178809dc70b355cf3a2d35aecd2727ef815bcec47b33eceb3268ce12e5

See more details on using hashes here.

Provenance

The following attestation bundles were made for sgspy-1.0.10-cp311-cp311-manylinux_2_28_x86_64.whl:

Publisher: deploy.yml on jbmeyer2001/sgsPy

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

File details

Details for the file sgspy-1.0.10-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: sgspy-1.0.10-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 25.8 MB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for sgspy-1.0.10-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 2bbaed0cc17c5f832e6e753694e95edc730d89064dc05019743da59cbf63e0f2
MD5 38ed5e292f2c1b856962252f0f74bd16
BLAKE2b-256 00de3880370c8cfab477d41c543cfbdf1db8a84d6691602332f7b9ae2e89f06f

See more details on using hashes here.

Provenance

The following attestation bundles were made for sgspy-1.0.10-cp310-cp310-win_amd64.whl:

Publisher: deploy.yml on jbmeyer2001/sgsPy

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

File details

Details for the file sgspy-1.0.10-cp310-cp310-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for sgspy-1.0.10-cp310-cp310-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 a669cfc1e6eb033546da334bf12b2b7a7ece032f8df86d456246de8ab5320cdc
MD5 ef3b712c9d36ad1d5d9332c8e7b4fb7b
BLAKE2b-256 7e9ef3b764adae56b5eecc5967d4ea15e610cd9430a8baf6100800945f8bbb50

See more details on using hashes here.

Provenance

The following attestation bundles were made for sgspy-1.0.10-cp310-cp310-manylinux_2_28_x86_64.whl:

Publisher: deploy.yml on jbmeyer2001/sgsPy

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