Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
time=(datetime.date(year=2017, month=1, day=5),
datetime.date(year=2017, month=12, day=16)),
service_type=ServiceType.WMS, time_difference=datetime.timedelta(days=10)),
result_len=14, img_min=0.0, img_max=1.5964, img_mean=0.1810, img_median=0.1140, tile_num=29,
save_data=True, data_filter=[0, -2, 0]),
cls.OgcTestCase('generalWcsTest',
OgcRequest(data_folder=cls.OUTPUT_FOLDER, image_format=MimeType.TIFF_d32f, bbox=wgs84_bbox,
layer='BANDS-S2-L1C', maxcc=0.6, size_x=resx, size_y=resy,
time=(datetime.datetime(year=2017, month=10, day=7, hour=1),
datetime.datetime(year=2017, month=12, day=11)),
service_type=ServiceType.WCS, time_difference=datetime.timedelta(hours=1)),
result_len=4, img_min=0.0002, img_max=0.5266, img_mean=0.1038, img_median=0.0948,
tile_num=6, date_check=expected_date, save_data=True, data_filter=[0, -1]),
# CustomUrlParam tests:
cls.OgcTestCase('customUrlAtmcorQualitySampling',
WmsRequest(data_folder=cls.OUTPUT_FOLDER, image_format=MimeType.PNG,
layer='TRUE-COLOR-S2-L1C', width=img_width, bbox=wgs84_bbox,
time=('2017-10-01', '2017-10-02'),
custom_url_params={CustomUrlParam.SHOWLOGO: True,
CustomUrlParam.ATMFILTER: 'ATMCOR',
CustomUrlParam.QUALITY: 100,
CustomUrlParam.DOWNSAMPLING: 'BICUBIC',
CustomUrlParam.UPSAMPLING: 'BICUBIC'}),
result_len=1, img_min=12, img_max=255, img_mean=194.247556, img_median=206, tile_num=2,
data_filter=[0, -1]),
cls.OgcTestCase('customUrlPreview',
WmsRequest(data_folder=cls.OUTPUT_FOLDER, image_format=MimeType.PNG,
layer='TRUE-COLOR-S2-L1C', height=img_height, bbox=wgs84_bbox,
time=('2017-10-01', '2017-10-02'),
custom_url_params={CustomUrlParam.SHOWLOGO: True,
CustomUrlParam.PREVIEW: 2}),
result_len=1, img_min=27, img_max=253, img_mean=177.17819, img_median=178, tile_num=2),
cls.OgcTestCase('S2 L2A Test',
WmsRequest(data_source=DataSource.SENTINEL2_L2A, data_folder=cls.OUTPUT_FOLDER,
image_format=MimeType.TIFF, layer='BANDS-S2-L2A',
width=img_width, height=img_height, bbox=wgs84_bbox,
time=('2017-10-01', '2017-10-02')),
result_len=1, img_min=0.0, img_max=MimeType.TIFF.get_expected_max_value(),
img_mean=22744.01498, img_median=21391.0, tile_num=2),
cls.OgcTestCase('L8 Test',
WmsRequest(data_source=DataSource.LANDSAT8, data_folder=cls.OUTPUT_FOLDER,
image_format=MimeType.TIFF_d32f, layer='BANDS-L8',
width=img_width, height=img_height, bbox=wgs84_bbox,
time=('2017-10-05', '2017-10-10'), time_difference=datetime.timedelta(hours=1)),
result_len=1, img_min=0.0011, img_max=285.72415, img_mean=52.06075, img_median=0.5192,
tile_num=2),
cls.OgcTestCase('DEM Test',
WmsRequest(data_source=DataSource.DEM, data_folder=cls.OUTPUT_FOLDER,
image_format=MimeType.TIFF_d32f, layer='DEM',
width=img_width, height=img_height, bbox=wgs84_bbox),
result_len=1, img_min=-108.0, img_max=-18.0, img_mean=-72.2097, img_median=-72.0),
cls.OgcTestCase('MODIS Test',
WmsRequest(data_source=DataSource.MODIS, data_folder=cls.OUTPUT_FOLDER,
image_format=MimeType.TIFF_d32f, layer='BANDS-MODIS',
width=img_width, height=img_height, bbox=wgs84_bbox, time='2017-10-01'),
result_len=1, img_min=0.0, img_max=3.2767, img_mean=0.136548, img_median=0.00240,
tile_num=1),
cls.OgcTestCase('S1 IW Test',
WmsRequest(data_source=DataSource.SENTINEL1_IW, data_folder=cls.OUTPUT_FOLDER,
image_format=MimeType.TIFF_d32f, layer='BANDS-S1-IW',
width=img_width, height=img_height, bbox=wgs84_bbox,
time=('2017-10-01', '2017-10-02'),
time_difference=datetime.timedelta(hours=1)),
result_len=1, img_min=0.0013400, img_max=MimeType.TIFF_d32f.get_expected_max_value(),
CustomUrlParam.EVALSCRIPTURL:
'https://raw.githubusercontent.com/sentinel-hub/'
'customScripts/master/sentinel-2/false_color_infrared/'
'script.js'}),
result_len=1, img_min=42, img_max=255, img_mean=230.7199, img_median=255, tile_num=3),
cls.OgcTestCase('customUrlEvalscript,Transparent,Geometry',
WcsRequest(data_folder=cls.OUTPUT_FOLDER, image_format=MimeType.PNG,
layer='TRUE-COLOR-S2-L1C', resx=resx, resy=resy, bbox=wgs84_bbox,
time=('2017-10-01', '2017-10-02'),
custom_url_params={CustomUrlParam.SHOWLOGO: True,
CustomUrlParam.TRANSPARENT: True,
CustomUrlParam.EVALSCRIPT: 'return [B10,B8A, B03 ]',
CustomUrlParam.GEOMETRY: geometry_wkt_wgs84}),
result_len=1, img_min=0, img_max=255, img_mean=54.3482, img_median=1.0, tile_num=2),
cls.OgcTestCase('FalseLogo,BgColor,Geometry',
WmsRequest(data_folder=cls.OUTPUT_FOLDER, image_format=MimeType.PNG,
layer='TRUE-COLOR-S2-L1C', width=img_width, height=img_height, bbox=pop_web_bbox,
time=('2017-10-01', '2017-10-02'),
custom_url_params={CustomUrlParam.SHOWLOGO: False,
CustomUrlParam.BGCOLOR: "F4F86A",
CustomUrlParam.GEOMETRY: geometry_wkt_pop_web}),
result_len=1, img_min=64, img_max=MimeType.PNG.get_expected_max_value(), img_mean=213.6124,
img_median=242.0, tile_num=3),
# DataSource tests:
cls.OgcTestCase('S2 L1C Test',
WmsRequest(data_source=DataSource.SENTINEL2_L1C, data_folder=cls.OUTPUT_FOLDER,
image_format=MimeType.TIFF_d8, layer='BANDS-S2-L1C',
width=img_width, height=img_height, bbox=wgs84_bbox,
time=('2017-10-01', '2017-10-02')),
result_len=1, img_min=0, img_max=160, img_mean=60.50514, img_median=63.0,
tile_num=2),
cls.OgcTestCase('S2 L2A Test',
time=('2017-10-01', '2017-10-02'),
custom_url_params={CustomUrlParam.SHOWLOGO: False,
CustomUrlParam.BGCOLOR: "F4F86A",
CustomUrlParam.GEOMETRY: geometry_wkt_pop_web}),
result_len=1, img_min=64, img_max=MimeType.PNG.get_expected_max_value(), img_mean=213.6124,
img_median=242.0, tile_num=3),
# DataSource tests:
cls.OgcTestCase('S2 L1C Test',
WmsRequest(data_source=DataSource.SENTINEL2_L1C, data_folder=cls.OUTPUT_FOLDER,
image_format=MimeType.TIFF_d8, layer='BANDS-S2-L1C',
width=img_width, height=img_height, bbox=wgs84_bbox,
time=('2017-10-01', '2017-10-02')),
result_len=1, img_min=0, img_max=160, img_mean=60.50514, img_median=63.0,
tile_num=2),
cls.OgcTestCase('S2 L2A Test',
WmsRequest(data_source=DataSource.SENTINEL2_L2A, data_folder=cls.OUTPUT_FOLDER,
image_format=MimeType.TIFF, layer='BANDS-S2-L2A',
width=img_width, height=img_height, bbox=wgs84_bbox,
time=('2017-10-01', '2017-10-02')),
result_len=1, img_min=0.0, img_max=MimeType.TIFF.get_expected_max_value(),
img_mean=22744.01498, img_median=21391.0, tile_num=2),
cls.OgcTestCase('L8 Test',
WmsRequest(data_source=DataSource.LANDSAT8, data_folder=cls.OUTPUT_FOLDER,
image_format=MimeType.TIFF_d32f, layer='BANDS-L8',
width=img_width, height=img_height, bbox=wgs84_bbox,
time=('2017-10-05', '2017-10-10'), time_difference=datetime.timedelta(hours=1)),
result_len=1, img_min=0.0011, img_max=285.72415, img_mean=52.06075, img_median=0.5192,
tile_num=2),
cls.OgcTestCase('DEM Test',
WmsRequest(data_source=DataSource.DEM, data_folder=cls.OUTPUT_FOLDER,
image_format=MimeType.TIFF_d32f, layer='DEM',
width=img_width, height=img_height, bbox=wgs84_bbox),
WmsRequest(data_source=DataSource.SENTINEL1_IW, data_folder=cls.OUTPUT_FOLDER,
image_format=MimeType.TIFF_d32f, layer='BANDS-S1-IW',
width=img_width, height=img_height, bbox=wgs84_bbox,
time=('2017-10-01', '2017-10-02'),
time_difference=datetime.timedelta(hours=1)),
result_len=1, img_min=0.0013400, img_max=MimeType.TIFF_d32f.get_expected_max_value(),
img_mean=0.1135815, img_median=0.0620000, tile_num=2),
cls.OgcTestCase('S1 EW Test',
WmsRequest(data_source=DataSource.SENTINEL1_EW, data_folder=cls.OUTPUT_FOLDER,
image_format=MimeType.TIFF_d32f, layer='BANDS-S1-EW',
width=img_width, height=img_height, bbox=wgs84_bbox_2,
time=('2018-2-7', '2018-2-8'),
time_difference=datetime.timedelta(hours=1)),
result_len=2, img_min=0.0003, img_max=1.0, img_mean=0.53118, img_median=1.0, tile_num=3),
cls.OgcTestCase('S1 EW SH Test',
WmsRequest(data_source=DataSource.SENTINEL1_EW_SH,
data_folder=cls.OUTPUT_FOLDER,
image_format=MimeType.TIFF_d16, layer='BANDS-S1-EW-SH',
width=img_width, height=img_height, bbox=wgs84_bbox_3,
custom_url_params={CustomUrlParam.SHOWLOGO: True}, time=('2018-2-6', '2018-2-8'),
time_difference=datetime.timedelta(hours=1)),
result_len=1, img_min=465, img_max=59287, img_mean=5321.8241, img_median=937.0,
tile_num=1),
cls.OgcTestCase('S1 IW ASC Test',
WmsRequest(data_source=DataSource.SENTINEL1_IW_ASC, data_folder=cls.OUTPUT_FOLDER,
image_format=MimeType.TIFF_d32f, layer='BANDS-S1-IW',
width=img_width, height=img_height, bbox=wgs84_bbox,
time=('2017-10-01', '2017-10-03'),
time_difference=datetime.timedelta(hours=1)),
result_len=1, img_min=0.0013400, img_max=MimeType.TIFF_d32f.get_expected_max_value(),
img_mean=0.1135815, img_median=0.0620000, tile_num=2),
cls.OgcTestCase('S1 EW ASC Test',
the specified coordinate reference system. Required.
:type bbox: BBox
:param time_interval: time or time range for which to return the results, in ISO8601 format
(year-month-date, for example: ``2016-01-01``, or year-month-dateThours:minutes:seconds
format, i.e. ``2016-01-01T16:31:21``). When a single time is specified the request will
return data for that specific date, if it exists. If a time range is specified the result
is a list of all scenes between the specified dates conforming to the cloud coverage
criteria. Most recent acquisition being first in the list. For the latest acquisition use
``latest``. Examples: ``latest``, ``'2016-01-01'``, or ``('2016-01-01', ' 2016-01-31')``
:type time_interval: datetime.datetime, str, or tuple of datetime.datetime/str
"""
if eopatch is None:
eopatch = EOPatch()
request_params, service_type = self._prepare_request_data(eopatch, bbox, time_interval)
request = {ServiceType.WMS: WmsRequest,
ServiceType.WCS: WcsRequest}[service_type](**request_params)
request_dates = request.get_dates()
if not eopatch.timestamp:
eopatch.timestamp = request_dates
download_frames = None
if self.feature_type.is_time_dependent():
download_frames = get_common_timestamps(request_dates, eopatch.timestamp)
images = request.get_data(raise_download_errors=self.raise_download_errors, data_filter=download_frames)
if not self.raise_download_errors:
bad_data = [idx for idx, value in enumerate(images) if value is None]
for idx in reversed(bad_data):
def _get_wms_request(self, bbox, time_interval, size_x, size_y, maxcc, time_difference):
"""
Returns WMS request.
"""
return WmsRequest(layer=self.layer,
bbox=bbox,
time=time_interval,
width=size_x,
height=size_y,
maxcc=maxcc,
image_format=self.image_format,
custom_url_params=self.custom_url_params,
time_difference=time_difference,
data_source=self.data_source,
instance_id=self.instance_id)
def _get_wms_request(self, bbox, time_interval):
"""
Returns WMS request with given BBOX and time_interval.
"""
return WmsRequest(layer=self.layer,
bbox=bbox,
time=time_interval,
width=self.size_x, height=self.size_y,
maxcc=self.maxcc,
image_format=self.image_format,
custom_url_params=self.custom_url_params,
time_difference=self.time_difference,
data_source=self.data_source,
instance_id=self.instance_id)
def get_images(self, tiles: List[Tile]) -> Iterator[Tuple[Tile, bytes]]:
for tile in tiles:
# convert the tile index to a BBox with a buffer
x, y, z = tile
bbox = BBox(bounds((x, y, z)), crs=CRS.WGS84)
# request the data from SentinelHub
request = WmsRequest(**dict(bbox=bbox, **self.sentinel_wms_kwargs))
image_array = request.get_data(data_filter=[0])[0]
img = Image.fromarray(image_array)
img_bytes = BytesIO()
img.save(img_bytes, format='png')
yield (tile, img_bytes.getvalue())
def _get_wms_request(self, bbox, time_interval, size_x, size_y, maxcc, time_difference, custom_url_params):
"""
Returns WMS request.
"""
return WmsRequest(layer=self.data_feature,
bbox=bbox,
time=time_interval,
width=size_x,
height=size_y,
maxcc=maxcc,
custom_url_params=custom_url_params,
time_difference=time_difference,
image_format=self.image_format,
data_source=self.data_source,
instance_id=self.instance_id)