1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243
|
# stactools

[](https://stactools.readthedocs.io/en/latest/)
[](https://pypi.org/project/stactools/)
[](https://anaconda.org/conda-forge/stactools)
[](https://opensource.org/licenses/Apache-2.0)
`stactools` is a high-level command line tool and Python library for working with [STAC](https://stacspec.org).
It is based on [PySTAC](https://github.com/stac-utils/pystac).
This is the core `stactools` repository, which provides a basic command line interface (CLI) and API for working with STAC catalogs.
There are a suite of packages available in other repositories for working with a variety of datasets and for doing more complicated operations on STAC data.
See [packages](#packages) for more information.
## Table of Contents
- [Installation](#installation)
- [Running](#running)
- [Documentation](#documentation)
- [Packages](#packages)
- [Developing](#developing)
## Installation
To install the latest version via pip:
```sh
pip install stactools
```
To install the latest version with [conda](https://docs.conda.io/en/latest/):
```sh
conda install -c conda-forge stactools
```
To install the latest development version from the source repository:
```sh
git clone https://github.com/stac-utils/stactools.git
cd stactools
pip install .
```
**NOTE:** In order to read and write Cloud Optimized Geotiffs, GDAL version 3.1 or greater is required.
If your system GDAL is older than version 3.1, consider using [Docker](#using-docker) or [Conda](#using-conda) to get a modern GDAL.
### Optional dependencies
`stactools` includes two optional dependency:
- `s3`: Enables s3 hrefs via `fsspec` and `s3fs`
- `validate`: Enables `stac validate` and `stac lint`
To install optional dependencies:
```sh
pip install 'stactools[s3]'
pip install 'stactools[validate]'
```
### Docker
To download the Docker image from the registry:
```sh
docker pull ghcr.io/stac-utils/stactools:latest
```
## Running
```sh
stac --help
```
### Running from docker
```sh
docker run --rm ghcr.io/stac-utils/stactools:latest --help
```
## Documentation
See the [documentation page](https://stactools.readthedocs.io/) for the latest docs.
## Packages
`stactools` is comprised of many other sub-packages that provide library and CLI functionality.
Officially supported packages are hosted in the Github [`stactools-packages` organization](https://github.com/stactools-packages/stactools-packages.github.io), and other subpackages may be available from other sources.
There are over 25 packages that translate specific types of data into STAC,
including imagery sources like
[aster](https://github.com/stactools-packages/aster),
[landsat](https://github.com/stactools-packages/landsat),
[modis](https://github.com/stactools-packages/modis),
[naip](https://github.com/stactools-packages/naip),
[planet](https://github.com/stactools-packages/planet),
[sentinel1](https://github.com/stactools-packages/sentinel1),
[sentinel1-grd](https://github.com/stactools-packages/sentinel1-grd),
[sentinel2](https://github.com/stactools-packages/sentinel2),
[sentinel3](https://github.com/stactools-packages/sentinel3), landuse/landcover
data ([corine](https://github.com/stactools-packages/corine),
[cgls_lc100](https://github.com/stactools-packages/cgls_lc100),
[aafc-landuse](https://github.com/stactools-packages/aafc-landuse)), Digital
Elevation Models (DEMs)
([cop-dem](https://github.com/stactools-packages/cop-dem),
[alos-dem](https://github.com/stactools-packages/alos-dem)), population data
([gpw](https://github.com/stactools-packages/gpw),
[worldpop](https://github.com/stactools-packages/worldpop)),
[pointclouds](https://github.com/stactools-packages/pointcloud) and many more.
There are also cool tools like [stactools-browse](https://github.com/stactools-packages/stactools-browse) which makes it super easy to deploy a
[STAC Browser](https://github.com/radiantearth/stac-browser) from the command line to browse any local data.
For the list of officially supported packages see the [list of STAC packages](https://github.com/stactools-packages/stactools-packages.github.io#list-of-stac-packages)
on the [stactools-packages GitHub organization](https://github.com/stactools-packages).
Each package can be installed via `pip install stactools-{package}`, e.g. `pip install stactools-landsat`.
Third-party packages can be installed in the same way, or, if they are not on PyPI, directly from the source repository, e.g. `pip install /path/to/my/code/stactools-greatdata`.
## Developing
Clone the repository and install it in editable mode with the `dev` optional dependencies:
```sh
git clone https://github.com/stac-utils/stactools.git
cd stactools
pip install -e '.[dev]'
```
Linting and formatting are handled with [pre-commit](https://pre-commit.com/).
You will need to install pre-commit before committing any changes:
```sh
pre-commit install
```
Tests are handled with [pytest](https://docs.pytest.org/en/7.1.x/):
```sh
pytest
```
Run a Juypter notebook:
```sh
scripts/notebook
```
### Using docker
You can also develop in a Docker container.
Build the container with:
```sh
docker/build
```
Once the container is built, you can run the `scripts/` scripts inside a docker console by running:
```sh
docker/console
```
A complete build and test can be run with:
```sh
docker/cibuild
```
In scenarios where you want to run scripts in `docker/` but don't want to run the build, images can be downloaded via the `pull` script:
```sh
docker/pull
```
Run a [Juypter](https://jupyter.org/) notebook:
```sh
docker/notebook
```
You can run the CLI through docker by running:
```sh
docker/stac --help
```
### Using conda
[conda](https://docs.conda.io/en/latest/) is a useful tool for managing dependencies, both binary and Python-based.
If you have conda installed, you can create a new environment for `stactools` development by running the following command from the top-level directory in this repo:
```sh
conda env create -f environment.yml
```
Then activate the `stactools` environment:
```sh
conda activate stactools
```
Finally, install `stactools` in editable mode and all development requirements:
```sh
pip install -e '.[dev]'
```
### Developing the docs
To build and serve the docs, the development requirements must be installed with `pip install -e '.[docs]'`.
To build the docs, you can use `make html` from inside of the docs directory, and to build the docs and start a server that watches for changes, use `make livehtml`:
```sh
cd docs
make html
make livehtml
```
If using `make livehtml`, once the server starts, navigate to [http://localhost:8000](http://localhost:8000/) to see the docs.
Use 'make' without arguments to see a list of available commands.
You can also run the previous commands in the docker container using:
```sh
docker/console
```
### Code owners and repository maintainer(s)
This repository uses a [code owners file](https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/about-code-owners) to automatically request reviews for new pull requests.
The current primary maintainer(s) of this repository are listed under the `*` rule in the [CODEOWNERS](./CODEOWNERS) file.
### Adding a new package
To create a new `stactools` package, use the [`stactools` package template](https://github.com/stactools-packages/template).
`stactools` utilizes Python's [namespace packages](https://packaging.python.org/guides/packaging-namespace-packages/) to provide a suite of tools all under the `stactools` namespace.
If you would like your package to be considered for inclusion as a core `stactools` package, please open an issue on this repository with a link to your package repository.
### Releasing
See [RELEASING.md](./RELEASING.md) for the steps to create a new release.
|