Source code for rastervision.core.data.raster_source.stac_config

from typing import TYPE_CHECKING, List, Optional

from rastervision.pipeline.config import (Config, Field, register_config)
from rastervision.pipeline.file_system.utils import file_to_json

if TYPE_CHECKING:
    from pystac import Item, ItemCollection


[docs]@register_config('stac_item') class STACItemConfig(Config): """Specify a raster via a STAC Item.""" uri: str = Field(..., description='URI to a JSON-serialized STAC Item.') assets: Optional[List[str]] = Field( None, description= 'Subset of assets to use. This should be a list of asset keys')
[docs] def build(self) -> 'Item': from pystac import Item item = Item.from_dict(file_to_json(self.uri)) if self.assets is not None: item = subset_assets(item, self.assets) return item
[docs]@register_config('stac_item_collection') class STACItemCollectionConfig(Config): """Specify a raster via a STAC ItemCollection.""" uri: str = Field( ..., description='URI to a JSON-serialized STAC ItemCollection.') assets: Optional[List[str]] = Field( None, description= 'Subset of assets to use. This should be a list of asset keys')
[docs] def build(self) -> 'ItemCollection': from pystac import ItemCollection items = ItemCollection.from_dict(file_to_json(self.uri)) if self.assets is not None: items = [subset_assets(item, self.assets) for item in items] items = ItemCollection(items) return items
[docs]def subset_assets(item: 'Item', assets: List[str]) -> 'Item': """Return a copy of the Item with assets subsetted.""" item = item.clone() src_assets = item.assets item.assets = {k: src_assets[k] for k in assets} return item