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.9-cp314-cp314-win_amd64.whl (26.5 MB view details)

Uploaded CPython 3.14Windows x86-64

sgspy-1.0.9-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.9-cp313-cp313-win_amd64.whl (25.8 MB view details)

Uploaded CPython 3.13Windows x86-64

sgspy-1.0.9-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.9-cp312-cp312-win_amd64.whl (25.8 MB view details)

Uploaded CPython 3.12Windows x86-64

sgspy-1.0.9-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.9-cp311-cp311-win_amd64.whl (25.8 MB view details)

Uploaded CPython 3.11Windows x86-64

sgspy-1.0.9-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.9-cp310-cp310-win_amd64.whl (25.8 MB view details)

Uploaded CPython 3.10Windows x86-64

sgspy-1.0.9-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.9-cp314-cp314-win_amd64.whl.

File metadata

  • Download URL: sgspy-1.0.9-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.9-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 b8aa9604673f18ad3e15847ffa35de74f7218a3b0886de6ca33734c3f2da4a07
MD5 2f599fa9f68416106c4914d37a0d9c4d
BLAKE2b-256 d06fcdad51e6fe9f0f525ef0b265c49da13938a5ff487587b80f640ba233dff6

See more details on using hashes here.

Provenance

The following attestation bundles were made for sgspy-1.0.9-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.9-cp314-cp314-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for sgspy-1.0.9-cp314-cp314-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 f10ba438aa2d7fb24a29c362044c63dbcb977f425ce8f6ce44303480313204bd
MD5 cd68774281c39ab9acbbc45fdc9cdb2d
BLAKE2b-256 1fad6b09e34893fda95073e8f118c80cb12924d7662cc075a562b04b2f3e69d1

See more details on using hashes here.

Provenance

The following attestation bundles were made for sgspy-1.0.9-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.9-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: sgspy-1.0.9-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.9-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 8d5d89ca04d2d4c75ab6fdf52faac8c4a7aef0431c40c1b676418d067a796b7d
MD5 0311da3b15a8092f808e0392203454cc
BLAKE2b-256 1e21b77228911519ca0acc6f66bdc8fba82a8d11dd4c607a65c7720fa2bbfc0d

See more details on using hashes here.

Provenance

The following attestation bundles were made for sgspy-1.0.9-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.9-cp313-cp313-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for sgspy-1.0.9-cp313-cp313-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 bb4a9155825987edf5c2673572723721c7f2ee60425303249653e77599fcd55c
MD5 e8b600d28f1c678ff2cc615ae9051196
BLAKE2b-256 bfec479017ce3bf365b192f8db8dda066c9a7d42973377d23c6834b37b07bdee

See more details on using hashes here.

Provenance

The following attestation bundles were made for sgspy-1.0.9-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.9-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: sgspy-1.0.9-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.9-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 b56acffe8ca4206fa22a529fe34fa3b6af79309adcd695de2a81651dd7974373
MD5 af8eaa3b278fc97e9d25aa014a10f58e
BLAKE2b-256 902d824fbc6bcb9964fbcef33d6fdb9f2c06144ba27c287c032e5598903df1a9

See more details on using hashes here.

Provenance

The following attestation bundles were made for sgspy-1.0.9-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.9-cp312-cp312-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for sgspy-1.0.9-cp312-cp312-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 481f9a403aa0124044d649182590e364efa42d1e5aeca6da81848b4a19895fb9
MD5 70657c400467c5150508a5cdff67db60
BLAKE2b-256 bd92475f8d9c178d6c6f14dd9460d8a77d1890d6fe8902258c4c075ee858d94c

See more details on using hashes here.

Provenance

The following attestation bundles were made for sgspy-1.0.9-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.9-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: sgspy-1.0.9-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.9-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 a829a18c6e3de52cfac123488315d4dc97470ad6bf3ec4d2dab0fb94b09c1f81
MD5 b8842a252731e6212ebdf4fb0e2e1ed2
BLAKE2b-256 be6fdc012d13ede34184a80e950fdf5e4b96ddef78e53002215c5337fe1b272d

See more details on using hashes here.

Provenance

The following attestation bundles were made for sgspy-1.0.9-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.9-cp311-cp311-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for sgspy-1.0.9-cp311-cp311-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 332378ea55f3b7546b0c87a843f02d815d40d25fc04f15443f2d7c52af918d7f
MD5 3ca985b25d037e9ab26075a51da473bc
BLAKE2b-256 96350d8f575b6b1644cc3d22d179f8b11feba64d4a76eeba71827fcb356e0da7

See more details on using hashes here.

Provenance

The following attestation bundles were made for sgspy-1.0.9-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.9-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: sgspy-1.0.9-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.9-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 cab7ba863a8402ccc7db83fdfeafd1911a38fe13c97032306f9d1112046f8e69
MD5 f3e4749f153167bccdc8ee8f25fece61
BLAKE2b-256 c5f06fce45c65ac9a22166bc58129af322d04f90302a445184b4b654a45be2dc

See more details on using hashes here.

Provenance

The following attestation bundles were made for sgspy-1.0.9-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.9-cp310-cp310-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for sgspy-1.0.9-cp310-cp310-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 9013cef10fbf40b544827c2525441e3c217a757580f11866513768028f5561b3
MD5 cc9f01ce866f8394bc1153fd2c7c168e
BLAKE2b-256 148f99581225b7d089c5b0e19c94d96c69d91e02f0179c960617a3ed7ae87258

See more details on using hashes here.

Provenance

The following attestation bundles were made for sgspy-1.0.9-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