Welcome to UKIS-pysat’s documentation!¶
The UKIS-pysat package provides generic classes and functions to query, access and process multi-spectral and SAR satellite images.
data¶
Download satellites data from different sources (currently Earth Explorer, SciHub, STAC), deal with and structure metadata.
file¶
Work with you local satellite data files and read information out of file names and metadata files. Currently, focusing on Sentinel-1.
raster¶
Reading satellite data and performing simple, but cumbersome tasks. This is just a layer on top of rasterio for stuff we often need. It can very well be that using rasterio directly is often the better choice.
Example¶
Here’s an example about some basic features:
from ukis_pysat.data import Source
from ukis_pysat.file import get_sentinel_scene_from_dir
from ukis_pysat.members import Datahub, Platform
from ukis_pysat.raster import Image
# connect to Copernicus Open Access Hub and query metadata
src = Source(Datahub.Scihub)
meta = src.query_metadata(
platform=Platform.Sentinel2,
date=("20200101", "NOW"),
aoi=(11.90, 51.46, 11.94, 51.50),
cloud_cover=(0, 50),
)
for item in meta: # item is now a PySTAC item
print(item.id)
uuid = item.properties["srcuuid"]
# download geocoded quicklook and image
src.download_quicklook(product_uuid=uuid, target_dir="/users/username/tmp")
src.download_image(product_uuid=uuid, target_dir="/users/username/tmp")
break
# get sentinel scene from directory
with get_sentinel_scene_from_dir("/users/username/tmp") as (full_path, ident):
with Image(full_path.join("pre_nrcs.tif")) as img:
# scale the image array, having one band
img.arr = img.arr * 0.3
Dimension order¶
The dimension order can be set upon initialization and you have to choose between first (bands, rows, columns), being raster shape needed for rasterio, or last (rows, columns, bands), being image shape used by most image processing libraries. Default is first.
Compare with the documentation of rasterio. UKIS-pysat uses rasterio internally and the dimension order is always reshaped to first (bands, rows, columns) if the dimension order has been set as last.
If the image was initialized with dimension order last, the result will be reshaped to last (rows, columns, bands) when calling img.arr
.
Altering the array replaces all bands. If it is intended to alter a particular band, the remaining bands should be copied.
STAC API Item IO Concept¶
To enable reading from different types of file systems (similar to PySTAC), it is recommended that in the __init__.py
of the client module, or at the beginning of the script using ukis_pysat.data
, you overwrite the STACAPI_IO.read_item_method
with function that read and write however you need. The following is an example for a on premise S3 environment:
from pystac import Item
from ukis_pysat.stacapi_io import STACAPI_IO
def on_premise_s3_url_method(feature, root_bucket="dem"):
"""the href is build like /collections/*collection_prefix*/items/*item_prefix*
At some environments we will need to give back the href according to this method.
"""
item = Item.from_dict(feature)
href = item.get_self_href()
stripped_href = href.replace(r"collections/", "").replace(r"items/", "")
return Item.from_file(f"s3://{root_bucket}{stripped_href}/{item.id}.json")
STACAPI_IO.read_item_method = on_premise_s3_url_method
Environment variables¶
To use ukis_pysat.data
and to download from the respective Datahub you need to set the credentials as environment variables.
- For EarthExplorer that’s:
EARTHEXPLORER_USER=your_username
EARTHEXPLORER_PW=your_password
- For SciHub that’s:
SCIHUB_USER=your_username
SCIHUB_PW=your_password
Installation¶
Installation with pip¶
Most users will want to do this:
pip install ukis-pysat[complete] # install everything
There’s also some lighter versions with less dependencies:
pip install ukis-pysat # only install core dependencies (ukis_pysat.file can be used)
pip install ukis-pysat[data] # also install dependencies for ukis_pysat.data
pip install ukis-pysat[raster] # also install dependencies for ukis_pysat.raster
Some helper functions might need additional dependencies like pandas, dask[array] or utm. If this is the case you will receive an ImportError.
GDAL¶
If you’re having troubles installing GDAL and Rasterio use conda and/or follow these instructions.
Tests¶
To run the tests set the Environment variables and then:
git clone https://github.com/dlr-eoc/ukis-pysat
cd ukis-pysat
pip install -e .[dev]
python -m unittest discover tests
If you set the environment variables with the credentials to the hubs, you can uncomment @unittest.skip() for these tests.
Python API Reference¶
ukis_pysat.data¶
-
class
ukis_pysat.data.
Source
(datahub, catalog=None)¶ Bases:
object
Provides methods to query data sources for metadata and download images and quicklooks (APIs only). Remote APIs and local data directories that hold metadata files are supported.
Parameters: - datahub – Data source (<enum ‘Datahub’>).
- catalog – Only applicable if datahub is ‘STAC_local’. Can be one of the following types: Path to STAC Catalog file catalog.json (String, Path). Pystac Catalog or Collection object (pystac.catalog.Catalog, pystac.collection.Collection). None initializes an empty catalog. (default: None)
-
add_items_from_directory
(item_dir, item_glob='*.json')¶ Adds STAC items from a directory to a STAC Catalog.
Parameters: - item_dir – Path to directory that holds the STAC items (String).
- item_glob – Optional glob pattern to identify STAC items in directory (String), (default: ‘*.json’).
-
close
()¶ Closes connection to or logs out of Datahub.
-
construct_metadata
(meta, platform)¶ Constructs a STAC item that is harmonized across the different satellite image sources.
Parameters: - meta – Source metadata (GeoJSON-like mapping)
- platform – Image platform (<enum ‘Platform’>).
Returns: PySTAC item
-
download_image
(product_uuid, target_dir)¶ Downloads satellite image data to a target directory for a specific product_id. Incomplete downloads are continued and complete files are skipped.
Parameters: - product_uuid – UUID of the satellite image product (String).
- target_dir – Target directory that holds the downloaded images (String, Path)
-
download_quicklook
(product_uuid, target_dir)¶ Downloads a quicklook of the satellite image to a target directory for a specific product_id. It performs a very rough geocoding of the quicklooks by shifting the image to the location of the footprint.
Parameters: - product_uuid – UUID of the satellite image product (String).
- target_dir – Target directory that holds the downloaded images (String, Path)
-
query_metadata
(platform, date, aoi, cloud_cover=None, kwargs=None)¶ Queries metadata from data source.
Parameters: - platform – Image platform (<enum ‘Platform’>).
- date – Date from - to in format yyyyMMdd (String or Datetime tuple).
- aoi – Area of interest as GeoJson file or bounding box tuple with lat lon coordinates (String, Tuple).
- cloud_cover – Percent cloud cover scene from - to (Integer tuple) (default: None).
- kwargs – Dictionary of the additional requirements for the hub used (default: None).
Generates: Metadata item of products that match query criteria (PySTAC item).
-
query_metadata_srcid
(platform, srcid)¶ Queries metadata from data source by srcid.
Parameters: - platform – Image platform (<enum ‘Platform’>).
- srcid – Srcid of a specific product (String).
Generates: Metadata of product that matches srcid (PySTAC item).
-
stream_image
(product_uuid)¶ Parameters: product_uuid – UUID of the satellite image product (String). Returns: response
ukis_pysat.stacapi¶
ukis_pysat.file¶
-
ukis_pysat.file.
env_get
(key: str, boolean: bool = False) → Union[str, bool]¶ get an environment variable or fail with a meaningful error message
Parameters: - key – name of environment variable
- boolean – bool (default: False), optional. Returns true if key in [“true”, “y”, “yes”, “1”].
Returns: str or boolean
-
ukis_pysat.file.
get_footprint_from_manifest
(xml_path: Union[str, pathlib.Path]) → Any¶ Return a shapely polygon with footprint of scene, tested for Sentinel-1.
Parameters: xml_path – path to manifest.safe Returns: shapely polygon >>> get_footprint_from_manifest(Path(__file__).parents[1] / "tests/testfiles/manifest.safe").wkt 'POLYGON ((149.766922 -24.439564, 153.728622 -23.51771, 154.075058 -24.737713, 150.077042 -25.668921, 149.766922 -24.439564))'
-
ukis_pysat.file.
get_ipf_from_manifest
(xml_path: Union[str, pathlib.Path]) → float¶ Get IPF version from manifest file, tested for Sentinel-1.
Parameters: xml_path – path to manifest.safe Returns: ipf version (float) >>> get_ipf_from_manifest(Path(__file__).parents[1] / "tests/testfiles/manifest.safe") 2.82
-
ukis_pysat.file.
get_origin_from_manifest
(xml_path: Union[str, pathlib.Path]) → str¶ Get origin from manifest file, tested for Sentinel-1.
Parameters: xml_path – path to manifest.safe Returns: country of origin >>> get_origin_from_manifest(Path(__file__).parents[1] / "tests/testfiles/manifest.safe") 'United Kingdom'
-
ukis_pysat.file.
get_pixel_spacing
(scenedir: Union[str, pathlib.Path], polarization: str = 'HH') → Tuple[float, float]¶ Get pixel spacing, tested for Sentinel-1.
Parameters: - scenedir – path to unzipped SAFE-directory of scene
- polarization – str (default: ‘HH’)
Returns: tuple with pixel spacing in meters and degrees as floats
>>> get_pixel_spacing(Path(__file__).parents[1] / "tests/testfiles") (40.0, 0.0003593261136478086)
-
ukis_pysat.file.
get_polarization_from_s1_filename
(filename: str, dual: bool = False) → str¶ Get polarization from the filename of a Sentinel-1 scene. https://sentinel.esa.int/web/sentinel/user-guides/sentinel-1-sar/naming-conventions.
Parameters: - filename – top-level SENTINEL-1 product folder name
- dual – boolean (default: True), optional
Returns: str
>>> get_polarization_from_s1_filename("MMM_BB_TTTR_1SDH_YYYYMMDDTHHMMSS_YYYYMMDDTHHMMSS_OOOOOO_DDDDDD_CCCC.SAFE.zip") 'HH' >>> get_polarization_from_s1_filename("MMM_BB_TTTR_1SSH_YYYYMMDDTHHMMSS_YYYYMMDDTHHMMSS_OOOOOO_DDDDDD_CCCC.SAFE.zip") 'HH' >>> get_polarization_from_s1_filename("MMM_BB_TTTR_2SSV_YYYYMMDDTHHMMSS_YYYYMMDDTHHMMSS_OOOOOO_DDDDDD_CCCC.SAFE.zip") 'VV' >>> get_polarization_from_s1_filename("MMM_BB_TTTR_1SDV_YYYYMMDDTHHMMSS_YYYYMMDDTHHMMSS_OOOOOO_DDDDDD_CCCC.SAFE.zip", True) 'VV,VH'
-
ukis_pysat.file.
get_proj_string
(footprint: Any) → str¶ Get UTM projection string the centroid of footprint is located in. Footprint itself might cover multiple UTM zones.
Parameters: footprint – shapely polygon Returns: string with information about projection >>> get_proj_string(get_footprint_from_manifest(Path(__file__).parents[1] / "tests/testfiles/manifest.safe")) '+proj=utm +zone=56J, +ellps=WGS84 +datum=WGS84 +units=m +no_defs'
-
ukis_pysat.file.
get_sat_ts_from_datetime
(dt: datetime.datetime, dformat: str = '%Y%m%dT%H%M%S') → str¶ Get ESA timestamp string (used in their filenames) from datetime object.
Parameters: - dt – datetime.datetime object
- dformat – : str, (default: %Y%m%dT%H%M%S)
Returns: ESA timestamp as string
>>> get_sat_ts_from_datetime(datetime(2020, 1, 13, 7, 46, 19, tzinfo=timezone.utc) '20200113T074619'
-
ukis_pysat.file.
get_sentinel_scene_from_dir
(indir: Union[str, pathlib.Path]) → Iterator[Tuple[pathlib.Path, str]]¶ Scan directory for s1 scenes, unzips them if necessary. Tested with Sentinel-1, -2 & -3.
Parameters: indir – path to zipped S1 scene or directory with S1 scene Yields: full_path (directory with scene, str), ident (filename of scene, str) >>> with get_sentinel_scene_from_dir(Path(__file__).parents[1] / "tests/testfiles") as (fp, name): ... print(name) S1M_hello_from_inside
-
ukis_pysat.file.
get_ts_from_sentinel_filename
(filename: str, start_date: bool = True, dformat: str = '%Y%m%dT%H%M%S') → datetime.datetime¶ Get timestamp from the filename of a Sentinel scene, according to naming conventions. Currently works for S1, S2 & S3.
Parameters: - filename – top-level SENTINEL product folder or file name
- start_date – boolean (default: True), False is Stop Date, optional
- dformat – str, (default: %Y%m%dT%H%M%S)
Returns: datetime.datetime object with timezone information
>>> get_ts_from_sentinel_filename("S1M_BB_TTTR_LFPP_20200113T074619_YYYYMMDDTHHMMSS_OOOOOO_DDDDDD_CCCC.SAFE.zip") datetime.datetime(2020, 1, 13, 7, 46, 19, tzinfo=datetime.timezone.utc) >>> get_ts_from_sentinel_filename("S1M_BB_TTTR_LFPP_YYYYMMDDTHHMMSS_20200113T002219_OOOOOO_DDDDDD_CCCC.SAFE.zip", False) datetime.datetime(2020, 1, 13, 0, 22, 19, tzinfo=datetime.timezone.utc) >>> get_ts_from_sentinel_filename("S3M_OL_L_TTT____20200113T074619_YYYYMMDDTHHMMSS_YYYYMMDDTHHMMSS_i_GGG_c.SEN3") datetime.datetime(2020, 1, 13, 7, 46, 19, tzinfo=datetime.timezone.utc) >>> get_ts_from_sentinel_filename("S3M_OL_L_TTTTTT_yyyymmddThhmmss_20200113T074619_YYYYMMDDTHHMMSS_i_GGG_c.SEN3", False) datetime.datetime(2020, 1, 13, 7, 46, 19, tzinfo=datetime.timezone.utc) >>> get_ts_from_sentinel_filename("S2AM_MSIXXX_20200113T074619_Nxxyy_ROOO_Txxxxx_<Product Discriminator>.SAFE") datetime.datetime(2020, 1, 13, 7, 46, 19, tzinfo=datetime.timezone.utc)
ukis_pysat.raster¶
-
class
ukis_pysat.raster.
Image
(data, dimorder='first', crs=None, transform=None, nodata=None)¶ Bases:
object
Parameters: - data – rasterio.io.DatasetReader or path to raster or np.ndarray of shape (bands, rows, columns)
- dimorder – Order of channels or bands ‘first’ or ‘last’ (default: ‘first’)
- crs – Coordinate reference system used when creating form array. If ‘data’ is np.ndarray this is required (default: None)
- transform – Affine transformation mapping the pixel space to geographic space. If ‘data’ is np.ndarray this is required (default: None)
- nodata – nodata value only used when creating from np.ndarray, otherwise this has no effects, optional (default: None)
-
arr
¶ array property
-
close
()¶ closes Image
-
da_arr
= None¶
-
dn2toa
(platform, mtl_file=None, wavelengths=None)¶ This method converts digital numbers to top of atmosphere reflectance, like described here: https://www.usgs.gov/land-resources/nli/landsat/using-usgs-landsat-level-1-data-product
Parameters: - platform – image platform, possible Platform.Landsat[5, 7, 8] or Platform.Sentinel2 (<enum ‘Platform’>).
- mtl_file – path to Landsat MTL file that holds the band specific rescale factors (str).
- wavelengths – like [“Blue”, “Green”, “Red”, “NIR”, “SWIR1”, “TIRS”, “SWIR2”] for Landsat-5 (list of str).
-
get_subset
(tile, band=0)¶ Get slice of array.
Parameters: - tile – rasterio.windows.Window tile from get_tiles().
- band – Band number (default: 0).
Returns: Sliced numpy array, bounding box of array slice.
-
get_tiles
(width=256, height=256, overlap=0)¶ Calculates rasterio.windows.Window, idea from https://stackoverflow.com/a/54525931
Parameters: - width – int, optional (default: 256). Tile size in pixels.
- height – int, optional (default: 256). Tile size in pixels.
- overlap – int, optional (default: 0). Overlap in pixels.
Yields: window of tile
-
get_valid_data_bbox
(nodata=0)¶ bounding box covering the input array’s valid data pixels.
Parameters: nodata – nodata value, optional (default: 0) Returns: tuple with valid data bounds
-
mask
(bbox, crop=True, fill=False, mode='constant', constant_values=0)¶ Mask raster to bbox.
Parameters: - bbox – bounding box of type tuple or Shapely Polygon
- crop – bool, see rasterio.mask. Optional, (default: True)
- fill – enforce raster to cover bbox. if raster extent is smaller than bbox it will be filled according to mode and constant_values parameters. Optional (default: False)
- mode – str, how to fill, see rasterio.pad. Optional (default: ‘constant’)
- constant_values – nodata value, padding should be filled with, optional (default: 0)
-
pad
(pad_width, mode='constant', constant_values=0)¶ Pad raster in all directions.
Parameters: - pad_width – pad width in pixels, int.
- mode – str, how to pad, see rasterio.pad. Optional (default: ‘constant’)
- constant_values – nodata value, padding should be filled with, optional (default: 0)
Returns: closed, buffered dataset in memory
-
to_dask_array
(chunk_size=(1, 6000, 6000))¶ transforms numpy to dask array
Parameters: chunk_size – tuple, size of chunk, optional (default: (1, 6000, 6000)) Returns: dask array
-
warp
(dst_crs, resampling_method=0, num_threads=4, resolution=None, nodata=None, target_align=None)¶ Reproject a source raster to a destination raster.
Parameters: - dst_crs – CRS or dict, Target coordinate reference system.
- resampling_method – Resampling algorithm, int, defaults to 0 (Nearest) numbers: https://github.com/mapbox/rasterio/blob/master/rasterio/enums.py#L28
- num_threads – int, number of workers, optional (default: 4)
- resolution – tuple (x resolution, y resolution) or float, optional. Target resolution, in units of target coordinate reference system.
- target_align – raster to which to align resolution, extent and gridspacing, optional (Image).
- nodata – nodata value of source, int or float, optional.
-
write_to_file
(path_to_file, dtype, driver='GTiff', nodata=None, compress=None, kwargs=None)¶ Write a dataset to file. :param path_to_file: str, path to new file :param dtype: datatype, like np.uint16, ‘float32’ or ‘min’ to use the minimum type to represent values
Parameters: - driver – str, optional (default: ‘GTiff’)
- nodata – nodata value, e.g. 255 (default: None, means nodata value of dataset will be used)
- compress – compression, e.g. ‘lzw’ (default: None)
- kwargs – driver specific keyword arguments, e.g. {‘nbits’: 1, ‘tiled’: True} for GTiff (default: None) for more keyword arguments see gdal driver specifications, e.g. https://gdal.org/drivers/raster/gtiff.html
ukis_pysat.members¶
Possible members of enums Datahub and Platform.
-
class
ukis_pysat.members.
Bands
¶ Bases:
pydantic.main.BaseModel
Create a new model by parsing and validating input data from keyword arguments.
Raises ValidationError if the input data cannot be parsed to form a valid model.
Changelog¶
[] ()¶
Deleted¶
- removed own stac api client (pystac-client should be used from now on)
- deleted the StacApi reference in data.py
[1.3.4] (2022-01-11)¶
Added¶
- added deprecation warnings in stacapi.py and stacapi_io.py
Changed¶
- changed NotImplementedErrors in data.py
[1.3.0] (2021-07-27)¶
Changed¶
-requirements
: Pystac version updated to 1.0.0, STAC version 1.0.0 #147
- data
: Removed pylandsat dependency and added methods for downloading landsat products from GCS in data module #106
Fixed¶
data
: Consistency for Landsat & Sentinel #151
Added¶
data
: Streaming for Scihub #138
[1.2.1] (2021-05-05)¶
Fixed¶
data
: Copernicus Open Access Hub Url changed #142data
: fixed download error from EarthExplorer #140
[1.2.0]] (2021-04-07)¶
Changed¶
data
: added option for additional parameter for query_metadata #27data
: generator instead of catalog return for query_metadata and query_metadata_srcid #127data
: platform removed from download_image and download_quicklook #130
[1.1.0] (2021-03-29)¶
Changed¶
data
: prep_aoi() is not private and supports __geo_interface__ #113data
: change default scihup endpoint /dhus to /apihub #110data
: mocked all interaction with Hubs for unit testing #116data
: EarthExplorer changed to new M2M API due to dependency update #120data
: removed hard dependency for landsatxplore & pylandsat #104data
: acquisitiondate and ingestiondate have been removed #124- split unit tests #110
Fixed¶
data
: datetime is now the searchable time of the assets, start_datetime and end_datetime are introduced #124
Added¶
- Github Action for black #111
[1.0.2] (2020-01-22)¶
Changed¶
raster
: documentation clarification for Image initialization with nodata #105
Fixed¶
data
: bugfix stacapi, bbox did not work because it has to be post like intersection
[1.0.1] (2020-01-20)¶
Changed¶
data
: make fiona and pyproj optional #104data
: refactored stacapi_io for nicer imports
[1.0.0] (2020-01-20)¶
Added¶
data
: new stac api #101
Changed¶
data
: metadata as STAC items and collections #98members
: Datahab.file refactored to Datahub.STAC_local, breaking! #99
[0.7.0] (2020-10-30)¶
Added¶
file
: read and return booleans from env #90raster
: possibility to init with 2D array #88data
: query_metadata_srcid() method and related test #96
Changed¶
get_polarization_from_s1_filename()
: return type is now onlystr
instead ofUnion[str, List[str]] #92
data
: download_image check if file exists #95
[0.6.2] (2020-09-02)¶
Added¶
file
: usage of type hints #76
Fixed¶
raster.get_valid_data_bbox()
: was using the wrong transform #84
[0.6.1] (2020-08-31)¶
Added¶
file
: added to_ESA_date() function #80file.get_ts_from_sentinel_filename()
: possibility to choose date formatraster
: added nodata value upon dataset creation with numpy arrays #82
[0.6.0] (2020-08-28)¶
Added¶
raster.Image()
: With Statement Context Manager for Image #45raster.Image()
: Alter image array #67raster.Image()
: Target align option for warp() #60raster.Image()
: Pass driver specific kwargs to write_to_file() #74
Fixed¶
data.Source()
: Fixed query metadata return for new EarthExplorer API #71raster.Image()
: Consider all image bands in pad() #59raster.Image()
: Memory leak caused by __update_dataset() #62
Changed¶
data.Metadata()
: Corrected field types #58data.MetadataCollection()
: Improved plotting of MetadataCollection to_pandas method #56data.MetadataCollection()
: Made filter method more flexible with list and fuzzy filter options #55raster.Image()
: Split _pad_to_bbox() into pad() and _get_pad_width(), updated mask() #59- replaced os.path with Pathlib #78
Removed¶
file
: removed pack() and unpack() #57
[0.5.0] (2020-07-03)¶
Added¶
raster.Image()
: optional nodata value for writing #32
Fixed¶
file.get_ts_from_sentinel_filename()
: Return datetime.datetime objects instead of timestamp strings #42raster.Image()
: in-memory dataset could not be updated if not GTiff and other improvements #48 #52
Changed¶
raster.Image()
: renamed mask_image() to mask()raster.Image()
: update of init signature to be less confusing #41 #50raster.Image()
: in-memory dataset now always with “GTiff” driver #53
[0.4.0] (2020-06-05)¶
Added¶
raster.Image()
: expanded test_arr to test AttributeError #31raster.Image()
: optional dimorder for arr and according test #31dn2toa()
tests and testfiles #17data.source()
: accept WKT string as AOI #26data.source()
: check if an AOI string is a file or a WKT string #26
Fixed¶
raster.Image()
: bug indn2toa()
related to wrong array shape #17
Changed¶
raster.Image()
: changeddn2toa(platform, metadata, wavelengths)
todn2toa(platform, mtl_file, wavelengths)
#17raster.Image()
:dn2toa
now raises an error (instead of logging a warning) if Platform is not supported.raster.Image()
: explicit dtype when writing, optional compression #32raster.Image()
: auto-update of in-memory dataset #35- removed logger
[0.3.0] (2020-05-26)¶
Added¶
download.Source()
: support for local metadata queries #6
Changed¶
- split PyPI package into subsets to not require all dependencies for every installation #16
download.Source()
: removedtraceback
#6download.Source()
: changedSource(source, source_dir=None)
toSource(datahub, datadir=None, datadir_substr=None)
#6members.Datahub()
: changedfile
toFile
#6- updated README #6 #16
[0.2.0] (2020-05-13)¶
Added¶
download.Source()
: ClassesMetadata
andMetadataCollection
for metadata handling #13- expanded metadata part in README #13 - requirements: pyfields
download.Source()
:prep_aoi()
for on the fly preparation of aoi for queries #1data.Image()
: methodget_subset()
to retrieve subset array and bounding box of image tile #12download.Source()
:query()
accepts now aoi in forms of geojson file with varying CRS or bounding box coordinates in Lat Lon #1- requirements: pyproj #1
download.Source()
: added methods to filter and download metadata #4- Sentinel3 test #10
Fixed¶
download.Source()
: Improved geocoding quicklooks #5- fixed #7
Changed¶
- renamed
ukis_pysat.data
toukis_pysat.raster
andukis_pysat.download
toukis_pysat.data
, breaking compatibility with version 0.1.0 #18 download.Source()
: Moveddownload_metadata()
andfilter_metadata()
toMetadata
class #13download.Source()
: Moved all metadata mapping fromquery()
toconstruct_metadata()
#1download.Source()
: Changed_construct_metadata()
toconstruct_metadata()
and removed static #1download.Source()
: Simplified api queries inquery()
#1download.Source()
: removedget_metadata()
#4- requirements: Removed matplotlib, pandas and dask optional #9
[0.1.0] (2020-04-29)¶
- first release
About¶
Contributors¶
The UKIS team creates and adapts libraries which simplify the usage of satellite data. Our team includes (in alphabetical order):
- Boehnke, Christian
- Fichtner, Florian
- Mandery, Nico
- Martinis, Sandro
- Riedlinger, Torsten
- Wieland, Marc
German Aerospace Center (DLR)
Licenses¶
This software is licensed under the Apache 2.0 License.
Copyright (c) 2020 German Aerospace Center (DLR) * German Remote Sensing Data Center * Department: Geo-Risks and Civil Security
Contributing¶
The UKIS team welcomes contributions from the community. For more detailed information, see our guide on CONTRIBUTING in the repository if you’re interested in getting involved.
What is UKIS?¶
The DLR project Environmental and Crisis Information System (the German abbreviation is UKIS, standing for Umwelt- und Kriseninformationssysteme) aims at harmonizing the development of information systems at the German Remote Sensing Data Center (DFD) and setting up a framework of modularized and generalized software components.
UKIS is intended to ease and standardize the process of setting up specific information systems and thus bridging the gap from EO product generation and information fusion to the delivery of products and information to end users.
Furthermore the intention is to save and broaden know-how that was and is invested and earned in the development of information systems and components in several ongoing and future DFD projects.