Crates.io | stac |
lib.rs | stac |
version | 0.7.0 |
source | src |
created_at | 2022-02-15 02:58:17.047122 |
updated_at | 2024-04-29 20:14:33.177971 |
description | Rust library for the SpatioTemporal Asset Catalog (STAC) specification |
homepage | https://github.com/stac-utils/stac-rs |
repository | https://github.com/stac-utils/stac-rs |
max_upload_size | |
id | 532500 |
size | 1,587,501 |
Rust implementation of the SpatioTemporal Asset Catalog (STAC) specification.
To use the library in your project:
[dependencies]
stac = "0.7"
use stac::Item;
// Creates an item from scratch.
let item = Item::new("an-id");
// Reads an item from the filesystem.
let item: Item = stac::read("data/simple-item.json").unwrap();
Please see the documentation for more usage examples.
There are a few opt-in features.
reqwest
enables blocking remote reads:
[dependencies]
stac = { version = "0.7", features = ["reqwest"]}
Then:
let href = "https://raw.githubusercontent.com/radiantearth/stac-spec/master/examples/simple-item.json";
#[cfg(feature = "reqwest")]
let item: stac::Item = stac::read(href).unwrap();
If reqwest
is not enabled, stac::read
will throw an error if you try to read from a url.
let href = "https://raw.githubusercontent.com/radiantearth/stac-spec/master/examples/simple-item.json";
#[cfg(not(feature = "reqwest"))]
let err = stac::read::<stac::Item>(href).unwrap_err();
For non-blocking IO, use the stac-async crate.
To use GDAL to create items with projection and raster band information, you'll need GDAL installed on your system:
[dependencies]
stac = { version = "0.7", features = ["gdal"] }
Then, items created from rasters will include the projection and raster extensions:
#[cfg(feature = "gdal")]
{
use stac::{extensions::{Raster, Projection}, Extensions, item::Builder};
let item = Builder::new("an-id").asset("data", "assets/dataset_geo.tif").into_item().unwrap();
assert!(item.has_extension::<Projection>());
assert!(item.has_extension::<Raster>());
}
To use geojson and geo to add some extra geo-enabled methods:
[dependencies]
stac = { version = "0.7", features = ["geo"] }
Then, you can set an item's geometry and bounding box at the same time:
#[cfg(feature = "geo")]
{
use stac::Item;
use geojson::{Geometry, Value};
let geometry = Geometry::new(Value::Point(vec![
-105.1, 41.1,
]));
let mut item = Item::new("an-id");
item.set_geometry(geometry).unwrap();
assert!(item.bbox.is_some());
}
This crate is part of the stac-rs monorepo, see its README for contributing and license information.