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

Uploaded CPython 3.14Windows x86-64

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

Uploaded CPython 3.13Windows x86-64

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

Uploaded CPython 3.12Windows x86-64

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

Uploaded CPython 3.11Windows x86-64

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

Uploaded CPython 3.10Windows x86-64

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

File metadata

  • Download URL: sgspy-1.0.7-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.7-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 13cc3e4dca0e2c5bdc44178be40596729144e3b843e0662661bd255ce7480ac2
MD5 f9897808f932c1d42717158a0530b18e
BLAKE2b-256 f575596d401abbfea8c071903f0bb857718bd24489197dfe50d27ce013ebfee5

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for sgspy-1.0.7-cp314-cp314-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 992b5ffe46c79cb93255ddd5de4b77f85111eb6e070154290cd6de0f2301c503
MD5 d40238446422e36b3013e07b7b6eba51
BLAKE2b-256 ed7d7d734c821a6423710f4d1a05ca0e46c8366718998f37c20b638427cce580

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: sgspy-1.0.7-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.7-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 df713fa8ccf6ed442d85591b63fc4a2152399d55d5b93db6f1dd68a3f3d87888
MD5 f40b092475c459b6b210c70658de8c18
BLAKE2b-256 58e1360a1b90e098204be3dd16dcab583f0033eaee13d70c4d9ae66f3350dea7

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for sgspy-1.0.7-cp313-cp313-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 30199eb387c43640c6d008631a1123abcd198db0a39d7ee1806cbf0c003cc101
MD5 af10a501eb839366305f1819ce070b20
BLAKE2b-256 8e9efafeee7b34876abb447cd0825df17b3a6786cb64472da21f89654a42a8a0

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: sgspy-1.0.7-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.7-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 1636812fdc4c6a1e7bc6303b72180b7563789c9578f56ceeaf07199d6b69b72d
MD5 6b2b4ab65b4e72e12f2ad3b4d478456f
BLAKE2b-256 96c78c6ae2ccf88338cb8bd9a536b4053c1c5229ef0f5bc0e34680006426654d

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for sgspy-1.0.7-cp312-cp312-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 87a8b6eb0bc3346bffcb3951517e6a89add793a8077db685202a1d5477c9e1d7
MD5 6a5f74c9ea0ad0aa1b9c10f7403f60e3
BLAKE2b-256 ef429308e4044c49348a431bb5b9e347c4405bea7bc495bb6172da9db5fca09b

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: sgspy-1.0.7-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.7-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 5193ceb691ac40914f839f8c0106e6a09eecd4a9cbdd2bd79b033fc90879954d
MD5 dd69cb4d381792026f9eeb5efe78c7c6
BLAKE2b-256 c5a3f23c5f27a3a7a9cebe419b7db9274dda88b532169a3ea5c5dd00a0863ed8

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for sgspy-1.0.7-cp311-cp311-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 12a010878f0505b8059e90904276f34f95869e3228311f8e2109096d725ec7bf
MD5 ccab6af37510591faecf672909bdc270
BLAKE2b-256 d9c0d4f3893910cf71490e3657318b8ab57f875e732e25ea71fc0c86d06db9b4

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: sgspy-1.0.7-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.7-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 acc68657d67bfb42336d34f5b0e4df53335801f07fea424a544552d6a998ee2c
MD5 95d4c8179025950ab955710a2f2c9f5e
BLAKE2b-256 49947689e596fe56596e77f2f05e72783d853d8c9b8500d9b609914f277250af

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for sgspy-1.0.7-cp310-cp310-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 84c2cc3772b0738a667549a4d8c2c5c92c124f393c10c19aaabcaec9bdac33b1
MD5 ad415814fdd3aea8d2e32ae8ce895b32
BLAKE2b-256 a538ffff8b9455ab40704808e4e83a25161213c0c80819d6b48a4f8d8d6a2f38

See more details on using hashes here.

Provenance

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