def filter_temporal( self, *args, start_date: Union[str, datetime, date] = None, end_date: Union[str, datetime, date] = None, extent: Union[list, tuple] = None) -> 'ImageCollection': """ Limit the ImageCollection to a certain date range, which can be specified in several ways: >>> im.filter_temporal("2019-07-01", "2019-08-01") >>> im.filter_temporal(["2019-07-01", "2019-08-01"]) >>> im.filter_temporal(extent=["2019-07-01", "2019-08-01"]) >>> im.filter_temporal(start_date="2019-07-01", end_date="2019-08-01"]) :param start_date: start date of the filter (inclusive), as a string or date object :param end_date: end date of the filter (exclusive), as a string or date object :param extent: two element list/tuple start and end date of the filter :return: An ImageCollection filtered by date. Subclasses are recommended to implement `_filter_temporal', which has simpler API. https://open-eo.github.io/openeo-api/processreference/#filter_temporal """ start, end = get_temporal_extent(*args, start_date=start_date, end_date=end_date, extent=extent) return self._filter_temporal(start, end)
def load_collection(cls, collection_id: str, session: 'Connection' = None, spatial_extent: Union[Dict[str, float], None] = None, temporal_extent: Union[List[Union[str, datetime.datetime, datetime.date]], None] = None, bands: Union[List[str], None] = None, fetch_metadata=True): """ Create a new Image Collection/Raster Data cube. :param collection_id: A collection id, should exist in the backend. :param session: The session to use to connect with the backend. :param spatial_extent: limit data to specified bounding box or polygons :param temporal_extent: limit data to specified temporal interval :param bands: only add the specified bands :return: """ # TODO: rename function to load_collection for better similarity with corresponding process id? builder = GraphBuilder() process_id = 'load_collection' normalized_temporal_extent = list( get_temporal_extent(extent=temporal_extent) ) if temporal_extent is not None else None arguments = { 'id': collection_id, 'spatial_extent': spatial_extent, 'temporal_extent': normalized_temporal_extent, } metadata = session.collection_metadata( collection_id) if fetch_metadata else None if bands: if isinstance(bands, str): bands = [bands] if metadata: bands = [ metadata.band_dimension.band_name(b, allow_common=False) for b in bands ] arguments['bands'] = bands node_id = builder.process(process_id, arguments) if bands: metadata = metadata.filter_bands(bands) return cls(node_id, builder, session, metadata=metadata)
def load_collection( cls, collection_id: str, connection: 'Connection' = None, spatial_extent: Union[Dict[str, float], None] = None, temporal_extent: Union[List[Union[str, datetime.datetime, datetime.date]], None] = None, bands: Union[List[str], None] = None, fetch_metadata=True, properties: Dict[str, PGNode] = None ): """ Create a new Raster Data cube. :param collection_id: A collection id, should exist in the backend. :param connection: The connection to use to connect with the backend. :param spatial_extent: limit data to specified bounding box or polygons :param temporal_extent: limit data to specified temporal interval :param bands: only add the specified bands :param properties: limit data by metadata property predicates :return: """ normalized_temporal_extent = list( get_temporal_extent(extent=temporal_extent)) if temporal_extent is not None else None arguments = { 'id': collection_id, 'spatial_extent': spatial_extent, 'temporal_extent': normalized_temporal_extent, } metadata = connection.collection_metadata(collection_id) if fetch_metadata else None if bands: if isinstance(bands, str): bands = [bands] if metadata: bands = [metadata.band_dimension.band_name(b) for b in bands] arguments['bands'] = bands if properties: arguments['properties'] = { prop: PGNode.to_process_graph_argument(pred) for prop, pred in properties.items() } pg = PGNode( process_id='load_collection', arguments=arguments ) if bands: metadata = metadata.filter_bands(bands) return cls(graph=pg, connection=connection, metadata=metadata)
def test_get_temporal_extent(): assert get_temporal_extent("2019-03-15") == ("2019-03-15", None) assert get_temporal_extent("2019-03-15", "2019-10-11") == ("2019-03-15", "2019-10-11") assert get_temporal_extent(["2019-03-15", "2019-10-11"]) == ("2019-03-15", "2019-10-11") assert get_temporal_extent(("2019-03-15", "2019-10-11")) == ("2019-03-15", "2019-10-11") assert get_temporal_extent(extent=["2019-03-15", "2019-10-11"]) == ("2019-03-15", "2019-10-11") assert get_temporal_extent(extent=("2019-03-15", "2019-10-11")) == ("2019-03-15", "2019-10-11") assert get_temporal_extent(extent=(None, "2019-10-11")) == (None, "2019-10-11") assert get_temporal_extent(extent=("2019-03-15", None)) == ("2019-03-15", None) assert get_temporal_extent(start_date="2019-03-15", end_date="2019-10-11") == ("2019-03-15", "2019-10-11") assert get_temporal_extent(start_date="2019-03-15") == ("2019-03-15", None) assert get_temporal_extent(end_date="2019-10-11") == (None, "2019-10-11")