├── tests
├── __init__.py
├── samples
│ ├── B01_full.jp2
│ ├── B01_left.jp2
│ ├── B01_multi.jp2
│ ├── B01_right.jp2
│ ├── B01_geometry.json
│ ├── tileInfo.json
│ ├── finalmeta.json
│ ├── metadata_new.xml
│ └── metadata.xml
├── test_main.py
├── test_crawler.py
└── test_converter.py
├── MANIFEST.in
├── sentinel_s3
├── __init__.py
├── crawler.py
├── main.py
└── converter.py
├── setup.cfg
├── requirements.txt
├── .gitignore
├── example.py
├── .travis.yml
├── setup.py
├── README.rst
└── LICENSE
/tests/__init__.py:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/MANIFEST.in:
--------------------------------------------------------------------------------
1 | include README.md
2 | include requirements.txt
3 |
--------------------------------------------------------------------------------
/sentinel_s3/__init__.py:
--------------------------------------------------------------------------------
1 | from .main import daily_metadata, range_metadata, file_writer, s3_writer, single_metadata
2 |
--------------------------------------------------------------------------------
/tests/samples/B01_full.jp2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/developmentseed/sentinel-s3/HEAD/tests/samples/B01_full.jp2
--------------------------------------------------------------------------------
/tests/samples/B01_left.jp2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/developmentseed/sentinel-s3/HEAD/tests/samples/B01_left.jp2
--------------------------------------------------------------------------------
/tests/samples/B01_multi.jp2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/developmentseed/sentinel-s3/HEAD/tests/samples/B01_multi.jp2
--------------------------------------------------------------------------------
/tests/samples/B01_right.jp2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/developmentseed/sentinel-s3/HEAD/tests/samples/B01_right.jp2
--------------------------------------------------------------------------------
/setup.cfg:
--------------------------------------------------------------------------------
1 | [bdist_wheel]
2 | universal=1
3 |
4 | [metadata]
5 | description-file=README.md
6 |
7 | [aliases]
8 | test=pytest
9 |
--------------------------------------------------------------------------------
/requirements.txt:
--------------------------------------------------------------------------------
1 | pytest==2.9.0
2 | six==1.10.0
3 | boto3==1.3.0
4 | requests==2.9.1
5 | pyproj==1.9.5
6 | rasterio==0.34.0
7 | shapely==1.5.15
8 | wordpad==0.1.0
9 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | *.pyc
2 | .*.swp
3 | *.log
4 | *~
5 | *.egg-info
6 | build/
7 | dist/
8 | *.eggs
9 | MANIFEST
10 | .DS_Store
11 | .idea
12 | .tox
13 | .coverage
14 | .cache
15 |
--------------------------------------------------------------------------------
/example.py:
--------------------------------------------------------------------------------
1 | import logging
2 | from datetime import date
3 | from sentinel_s3 import range_metadata, s3_writer
4 |
5 |
6 | def main():
7 |
8 | start_date = date(2015, 9, 2)
9 | end_date = date(2015, 9, 2)
10 |
11 | return range_metadata(start_date, end_date, '.', 0, [s3_writer])
12 |
13 |
14 | if __name__ == '__main__':
15 | logger = logging.getLogger('sentinel.meta.s3')
16 | logger.setLevel(logging.DEBUG)
17 |
18 | ch = logging.StreamHandler()
19 | ch.setLevel(logging.INFO)
20 | formatter = logging.Formatter('%(message)s')
21 | ch.setFormatter(formatter)
22 | logger.addHandler(ch)
23 |
24 | result = main()
25 |
26 | print(result)
27 |
--------------------------------------------------------------------------------
/tests/samples/B01_geometry.json:
--------------------------------------------------------------------------------
1 | {
2 | "type": "FeatureCollection",
3 | "features": [
4 | {
5 | "type": "Feature",
6 | "properties": {},
7 | "geometry": {"type": "Polygon", "coordinates": [[[-75.37225617498574, 36.95837934788912], [-74.89238848748697, 36.95891407427507], [-74.89167572347567, 37.459196344771016], [-75.37472174662845, 37.45865189706822], [-75.37225617498574, 36.95837934788912]]]}
8 | },
9 | {
10 | "type": "Feature",
11 | "properties": {},
12 | "geometry": { "type": "Polygon", "coordinates": [[[-74.89236578861907, 37.45108461725361], [-74.89238848748697, 36.95891407427507], [-75.05549072910433, 36.95894986875474], [-74.89236578861907, 37.45108461725361]]]}
13 | }
14 | ]
15 | }
16 |
--------------------------------------------------------------------------------
/.travis.yml:
--------------------------------------------------------------------------------
1 | language: python
2 | python:
3 | - '2.7'
4 | - '3.4'
5 | - '3.5'
6 | addons:
7 | apt:
8 | packages:
9 | - libgdal1h
10 | - gdal-bin
11 | - libgdal-dev
12 | - libgeos-dev
13 | - python-numpy
14 | script:
15 | - python setup.py test
16 | deploy:
17 | provider: pypi
18 | user: devseed
19 | password:
20 | secure: GH1pYO11lqxM3uuo/n1ll5d6oHEXZI7Ok3YwSfd3WFVeBZj1WWxfnAqBYUjzcoyQJeWbkVXhw1UIYjqkqxsqRXIVll6rgDlDFSZa8rRC4xJfK9Dv1XZxK79OAQM4IDV+NQe+l/xLzwM6cxjhPxYXsO8UMxefPvroqglObQEFXl+JisaPVYjL8qv0i63MU0w+TqpVuhtbqzl17Y1sYRCyPcntBN2pWUQdTdTPwnmHC/W+9nzBIO0t4LeZ8tvCC5OziU3kl9VFaNsUpTAiu6qDIJFgyKIN1NOTssSwmnfOuF70sXxr45SF0os1BwdKMAaE36CNCGMpmsAW9HknsvOAdgRfWM1EhKxBfBXj90hJ0rY91Rp4sCH6xn7zlspsT5xk7OrpPL9jZtbnC6oPgffVyBLu8q3xpYdzZwMyjIA00Zt9om3OPRlfCDUF3D7iodFwHLqn1qccF0CG1T7K4VsqMSosOoUpTT+LkSr/QciY2wh8J2MinWSZ+WtGWqGyJibEG29V8Qm5vklDcYswRiLp5t243UxVgI/L446gM5cew3cbrPPYSkJmbdSCTtkhJp/HtSG2SKczswW4A4/Ut4jQ+6rjSYarZHU6YNJxYcovMefIAwHmSMBWO3F7Uyrt59XIkrRCGiTRZkpBz5AP8N9dmK+WAxfHV++TH9NOyKEAWWk=
21 | on:
22 | distributions: sdist bdist_wheel
23 | repo: developmentseed/sentinel-s3
24 | branch: master
25 |
--------------------------------------------------------------------------------
/tests/test_main.py:
--------------------------------------------------------------------------------
1 | import os
2 | import errno
3 | import shutil
4 | import unittest
5 | from tempfile import mkdtemp
6 | from sentinel_s3 import daily_metadata, single_metadata, file_writer
7 |
8 |
9 | class Test(unittest.TestCase):
10 |
11 | def setUp(self):
12 | self.tmp_folder = mkdtemp()
13 |
14 | def tearDown(self):
15 | try:
16 | shutil.rmtree(self.tmp_folder)
17 | except OSError as exc:
18 | if exc.errno != errno.ENOENT:
19 | raise
20 |
21 | def test_daily_metadata_with_no_results(self):
22 | # run with a date that doesn't exist
23 | daily_metadata(2015, 4, 1, '.')
24 |
25 | def test_single_metadata(self):
26 | product = 'S2A_OPER_PRD_MSIL1C_PDMC_20160311T194734_R031_V20160311T011614_20160311T011614'
27 | metas = []
28 |
29 | def retainer(d, meta):
30 | metas.append(meta)
31 |
32 | counter = single_metadata(product, self.tmp_folder, writers=[file_writer, retainer])
33 |
34 | self.assertEqual(len(os.listdir(self.tmp_folder)), 2)
35 | self.assertEqual(counter['saved_tiles'], 2)
36 | self.assertEqual(counter['products'], 1)
37 |
38 | self.assertTrue(isinstance(metas[0], dict))
39 | self.assertEqual(metas[0]['product_name'], product)
40 |
--------------------------------------------------------------------------------
/sentinel_s3/crawler.py:
--------------------------------------------------------------------------------
1 | import json
2 | import datetime
3 |
4 | import boto3
5 |
6 | bucket_name = 'sentinel-s2-l1c'
7 | s3 = boto3.resource('s3', region_name='eu-central-1')
8 | bucket = s3.Bucket(bucket_name)
9 |
10 |
11 | def get_tile_metadata_path(path):
12 |
13 | meta_obj = s3.Object(bucket_name, path)
14 |
15 | meta = json.loads(meta_obj.get()['Body'].read().decode())
16 |
17 | paths = []
18 | for tile in meta['tiles']:
19 | paths.append(tile['path'] + '/tileInfo.json')
20 |
21 | return paths
22 |
23 |
24 | def get_product_metadata_path(product_name):
25 | """ gets a single products metadata """
26 |
27 | string_date = product_name.split('_')[-1]
28 | date = datetime.datetime.strptime(string_date, '%Y%m%dT%H%M%S')
29 | path = 'products/{0}/{1}/{2}/{3}'.format(date.year, date.month, date.day, product_name)
30 |
31 | return {
32 | product_name: {
33 | 'metadata': '{0}/{1}'.format(path, 'metadata.xml'),
34 | 'tiles': get_tile_metadata_path('{0}/{1}'.format(path, 'productInfo.json'))
35 | }
36 | }
37 |
38 |
39 | def get_products_metadata_path(year, month, day):
40 | """ Get paths to multiple products metadata """
41 |
42 | products = {}
43 | path = 'products/{0}/{1}/{2}/'.format(year, month, day)
44 | for key in bucket.objects.filter(Prefix=path):
45 | product_path = key.key.replace(path, '').split('/')
46 | name = product_path[0]
47 | if name not in products:
48 | products[name] = {}
49 |
50 | if product_path[1] == 'metadata.xml':
51 | products[name]['metadata'] = key.key
52 |
53 | if product_path[1] == 'productInfo.json':
54 | products[name]['tiles'] = get_tile_metadata_path(key.key)
55 |
56 | return products
57 |
--------------------------------------------------------------------------------
/setup.py:
--------------------------------------------------------------------------------
1 | from setuptools import setup, find_packages
2 | from codecs import open
3 | from os import path
4 |
5 | __version__ = '0.8.0'
6 |
7 | here = path.abspath(path.dirname(__file__))
8 |
9 | # Get the long description from the README file
10 | with open(path.join(here, 'README.rst'), encoding='utf-8') as f:
11 | long_description = f.read()
12 |
13 | # get the dependencies and installs
14 | with open(path.join(here, 'requirements.txt'), encoding='utf-8') as f:
15 | all_reqs = f.read().split('\n')
16 |
17 | install_requires = [x.strip() for x in all_reqs if 'git+' not in x]
18 | dependency_links = [x.strip().replace('git+', '') for x in all_reqs if 'git+' not in x]
19 |
20 | setup(
21 | name='sentinel-s3',
22 | version=__version__,
23 | description='Python libraries for extracting Sentinel-2\'s metadata from Amazon S3',
24 | long_description=long_description,
25 | url='https://github.com/developmentseed/sentinel-s3',
26 | download_url='https://github.com/developmentseed/sentinel-s3/tarball/' + __version__,
27 | license='CC0',
28 | classifiers=[
29 | 'Framework :: Pytest',
30 | 'Topic :: Scientific/Engineering :: GIS',
31 | 'Topic :: Scientific/Engineering',
32 | 'Intended Audience :: Developers',
33 | 'Intended Audience :: Science/Research',
34 | 'License :: Freeware',
35 | 'Programming Language :: Python :: 2.7',
36 | 'Programming Language :: Python :: 3.3',
37 | 'Programming Language :: Python :: 3.4',
38 | 'Programming Language :: Python :: 3.5',
39 | ],
40 | keywords='',
41 | packages=find_packages(exclude=['docs', 'tests*']),
42 | include_package_data=True,
43 | author='Alireza J (scisco)',
44 | install_requires=install_requires,
45 | dependency_links=dependency_links,
46 | author_email='alireza@developmentseed.org',
47 | setup_requires=['pytest-runner'],
48 | tests_require=['pytest'],
49 | )
50 |
--------------------------------------------------------------------------------
/tests/test_crawler.py:
--------------------------------------------------------------------------------
1 | import unittest
2 | from six import iterkeys
3 | from sentinel_s3.crawler import get_product_metadata_path, get_products_metadata_path
4 |
5 |
6 | class Test(unittest.TestCase):
7 |
8 | def test_get_product_metadata_path(self):
9 |
10 | product = 'S2A_OPER_PRD_MSIL1C_PDMC_20160311T194734_R031_V20160311T011614_20160311T011614'
11 | v = get_product_metadata_path(product)
12 |
13 | keys = list(iterkeys(v))
14 | assert len(keys) == 1
15 | assert 'tiles' in v[keys[0]]
16 | assert 'metadata' in v[keys[0]]
17 | assert keys[0] == product
18 |
19 | metadata = v[keys[0]]['metadata'].split('/')
20 | tiles = v[keys[0]]['tiles'][0].split('/')
21 |
22 | self.assertEqual(metadata[-1], 'metadata.xml')
23 | self.assertEqual(tiles[-1], 'tileInfo.json')
24 | self.assertEqual(len(v[product]['tiles']), 2)
25 |
26 | def test_get_product_metadata_path_new_format(self):
27 | product = 'S2A_MSIL1C_20161211T190342_N0204_R113_T10SDG_20161211T190344'
28 | v = get_product_metadata_path(product)
29 |
30 | keys = list(iterkeys(v))
31 | assert len(keys) == 1
32 | assert 'tiles' in v[keys[0]]
33 | assert 'metadata' in v[keys[0]]
34 | assert keys[0] == product
35 |
36 | metadata = v[keys[0]]['metadata'].split('/')
37 | tiles = v[keys[0]]['tiles'][0].split('/')
38 |
39 | self.assertEqual(metadata[-1], 'metadata.xml')
40 | self.assertEqual(tiles[-1], 'tileInfo.json')
41 | self.assertEqual(len(v[product]['tiles']), 1)
42 |
43 | def test_get_products_metadata_path(self):
44 |
45 | v = get_products_metadata_path(2015, 9, 2)
46 |
47 | keys = list(iterkeys(v))
48 | self.assertTrue(len(keys) > 69)
49 | self.assertTrue('tiles' in v[keys[0]])
50 | self.assertTrue('metadata' in v[keys[0]])
51 |
52 | metadata = v[keys[0]]['metadata'].split('/')
53 | tiles = v[keys[0]]['tiles'][0].split('/')
54 |
55 | self.assertEqual(metadata[-1], 'metadata.xml')
56 | self.assertEqual(tiles[-1], 'tileInfo.json')
57 |
--------------------------------------------------------------------------------
/README.rst:
--------------------------------------------------------------------------------
1 | sentinel-s3
2 | -----------
3 |
4 | |Build Status|
5 |
6 | This packages includes a few functions that facilitates extraction of
7 | Sentinel-2's metadata from Amazon S3.
8 |
9 | Installation
10 | ~~~~~~~~~~~~
11 |
12 | ::
13 |
14 | $ pip install sentinel-s3
15 |
16 | or
17 |
18 | ::
19 |
20 | $ python setup.py install
21 |
22 | Tests
23 | ~~~~~
24 |
25 | ::
26 |
27 | $ python setup.py test
28 |
29 | Example
30 | ~~~~~~~
31 |
32 | Generating metadata for a date range
33 |
34 | .. code:: python
35 |
36 | import logging
37 | from datetime import date
38 | from sentinel_s3 import range_metadata
39 |
40 |
41 | def main():
42 |
43 | start_date = date(2016, 2, 1)
44 | end_date = date(2016, 3, 22)
45 |
46 | return range_metadata(start_date, end_date, '.', 20)
47 |
48 |
49 | if __name__ == '__main__':
50 | logger = logging.getLogger('sentinel.meta.s3')
51 | logger.setLevel(logging.DEBUG)
52 |
53 | ch = logging.StreamHandler()
54 | ch.setLevel(logging.INFO)
55 | formatter = logging.Formatter('%(message)s')
56 | ch.setFormatter(formatter)
57 | logger.addHandler(ch)
58 |
59 | result = main()
60 |
61 | print(result)
62 |
63 |
64 | Generating metadata for a single product
65 |
66 | .. code:: python
67 |
68 | import logging
69 | from datetime import date
70 | from sentinel_s3 import single_metadata
71 |
72 |
73 | def main():
74 |
75 | product = 'S2A_OPER_PRD_MSIL1C_PDMC_20160311T194734_R031_V20160311T011614_20160311T011614'
76 | return single_metadata(product, '.')
77 |
78 |
79 | if __name__ == '__main__':
80 | logger = logging.getLogger('sentinel.meta.s3')
81 | logger.setLevel(logging.DEBUG)
82 |
83 | ch = logging.StreamHandler()
84 | ch.setLevel(logging.INFO)
85 | formatter = logging.Formatter('%(message)s')
86 | ch.setFormatter(formatter)
87 | logger.addHandler(ch)
88 |
89 | result = main()
90 |
91 | print(result)
92 |
93 | .. |Build Status| image:: https://travis-ci.org/developmentseed/sentinel-s3.svg?branch=master
94 | :target: https://travis-ci.org/developmentseed/sentinel-s3
95 |
--------------------------------------------------------------------------------
/tests/samples/tileInfo.json:
--------------------------------------------------------------------------------
1 | {
2 | "path" : "tiles/56/X/NF/2016/3/16/0",
3 | "timestamp" : "2016-03-16T02:06:40.455Z",
4 | "utmZone" : 56,
5 | "latitudeBand" : "X",
6 | "gridSquare" : "NF",
7 | "datastrip" : {
8 | "id" : "S2A_OPER_MSI_L1C_DS_SGS__20160316T054120_S20160316T020640_N02.01",
9 | "path" : "products/2016/3/16/S2A_OPER_PRD_MSIL1C_PDMC_20160316T064416_R103_V20160316T020640_20160316T020640/datastrip/0"
10 | },
11 | "tileGeometry" : {
12 | "type" : "Polygon",
13 | "crs" : {
14 | "type" : "name",
15 | "properties" : {
16 | "name" : "urn:ogc:def:crs:EPSG:8.8.1:32656"
17 | }
18 | },
19 | "coordinates" : [ [ [ 499980.0, 8100000.0 ], [ 609780.0, 8100000.0 ], [ 609780.0, 7990200.0 ], [ 499980.0, 7990200.0 ], [ 499980.0, 8100000.0 ] ] ]
20 | },
21 | "tileDataGeometry" : {
22 | "type" : "Polygon",
23 | "crs" : {
24 | "type" : "name",
25 | "properties" : {
26 | "name" : "urn:ogc:def:crs:EPSG:8.8.1:32656"
27 | }
28 | },
29 | "coordinates" : [ [ [ 523427.854194367, 8080148.952465224 ], [ 530596.09144086, 8076212.912273364 ], [ 530460.708328477, 8075969.169718796 ], [ 550214.395155883, 8064965.858105348 ], [ 550220.322038512, 8064974.355047386 ], [ 550428.541503783, 8064859.462755492 ], [ 550547.485077357, 8065070.715685412 ], [ 572473.638233002, 8052586.078112776 ], [ 572349.774349867, 8052364.126224988 ], [ 591961.294499871, 8040933.448727178 ], [ 591977.054213038, 8040957.306193342 ], [ 592165.682730694, 8040848.60002782 ], [ 592272.706809608, 8041028.657328702 ], [ 609779.0, 8030701.39618724 ], [ 609779.0, 7990201.0 ], [ 499981.0, 7990201.0 ], [ 499981.0, 8092615.258833338 ], [ 508066.192804798, 8088319.379767454 ], [ 508083.463953343, 8088348.068348922 ], [ 508309.182097202, 8088227.92151282 ], [ 508402.467500382, 8088391.640839598 ], [ 523427.854194367, 8080148.952465224 ] ] ]
30 | },
31 | "tileOrigin" : {
32 | "type" : "Point",
33 | "crs" : {
34 | "type" : "name",
35 | "properties" : {
36 | "name" : "urn:ogc:def:crs:EPSG:8.8.1:32656"
37 | }
38 | },
39 | "coordinates" : [ 499980.0, 8100000.0 ]
40 | },
41 | "dataCoveragePercentage" : 65.58,
42 | "cloudyPixelPercentage" : 41.31,
43 | "productName" : "S2A_OPER_PRD_MSIL1C_PDMC_20160316T064416_R103_V20160316T020640_20160316T020640",
44 | "productPath" : "products/2016/3/16/S2A_OPER_PRD_MSIL1C_PDMC_20160316T064416_R103_V20160316T020640_20160316T020640"
45 | }
--------------------------------------------------------------------------------
/tests/samples/finalmeta.json:
--------------------------------------------------------------------------------
1 | {"tile_name": "S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T56XNF_N02.01", "date": "2016-03-16", "thumbnail": "http://sentinel-s2-l1c.s3.amazonaws.com/tiles/56/X/NF/2016/3/16/0/preview.jp2", "path": "tiles/56/X/NF/2016/3/16/0", "timestamp": "2016-03-16T02:06:40.455Z", "utm_zone": 56, "latitude_band": "X", "grid_square": "NF", "tile_geometry": {"type": "Polygon", "crs": {"type": "name", "properties": {"name": "urn:ogc:def:crs:EPSG:8.9:4326"}}, "coordinates": [[[152.99938728692726, 72.9956989100914], [156.35949189158055, 72.96810378951403], [156.1817359597695, 71.98536775660044], [152.99941977513924, 72.01136343668333], [152.99938728692726, 72.9956989100914]]]}, "tile_data_geometry": {"type": "Polygon", "crs": {"type": "name", "properties": {"name": "urn:ogc:def:crs:EPSG:8.9:4326"}}, "coordinates": [[[153.71048432631537, 72.81650133264148], [153.92599697774142, 72.7803434835539], [153.9217869055133, 72.77817741629634], [154.51096599505496, 72.67596860186093], [154.5111506937434, 72.67604340991574], [154.51732593024104, 72.67496671256232], [154.52106423034792, 72.67683286787366], [155.16679537847472, 72.5589323267554], [155.16285661972196, 72.55698401948564], [155.73283586517778, 72.44744110658297], [155.73333574774614, 72.44764831876101], [155.73878606354745, 72.44659793200975], [155.74220573750767, 72.44816653503923], [156.24493298300607, 72.34789686144914], [156.18170856277195, 71.98537718126394], [152.99944878611683, 72.01137240202127], [152.99942011182188, 72.92949920472087], [153.24564493470317, 72.890840921175], [153.24617448550458, 72.89109746118757], [153.25303299662008, 72.89001199574696], [153.25589498907385, 72.891476086107], [153.71048432631537, 72.81650133264148]]]}, "tile_origin": {"type": "Point", "crs": {"type": "name", "properties": {"name": "urn:ogc:def:crs:EPSG:8.9:4326"}}, "coordinates": [152.99938728692726, 72.9956989100914]}, "data_coverage_percentage": 65.58, "cloudy_pixel_percentage": 41.31, "product_name": "S2A_OPER_PRD_MSIL1C_PDMC_20160316T064416_R103_V20160316T020640_20160316T020640", "product_path": "products/2016/3/16/S2A_OPER_PRD_MSIL1C_PDMC_20160316T064416_R103_V20160316T020640_20160316T020640", "spacecraft_name": "Sentinel-2A", "product_stop_time": "2016-03-16T02:06:40.455Z", "processing_level": "Level-1C", "product_type": "S2MSI1C", "processing_baseline": "02.01", "sensing_orbit_number": 103, "sensing_orbit_direction": "DESCENDING", "product_format": "SAFE", "product_cloud_coverage_assessment": 55.76177, "download_links": {"aws_s3": ["http://sentinel-s2-l1c.s3.amazonaws.com/tiles/56/X/NF/2016/3/16/0/B1.jp2", "http://sentinel-s2-l1c.s3.amazonaws.com/tiles/56/X/NF/2016/3/16/0/B2.jp2", "http://sentinel-s2-l1c.s3.amazonaws.com/tiles/56/X/NF/2016/3/16/0/B3.jp2", "http://sentinel-s2-l1c.s3.amazonaws.com/tiles/56/X/NF/2016/3/16/0/B4.jp2", "http://sentinel-s2-l1c.s3.amazonaws.com/tiles/56/X/NF/2016/3/16/0/B5.jp2", "http://sentinel-s2-l1c.s3.amazonaws.com/tiles/56/X/NF/2016/3/16/0/B6.jp2", "http://sentinel-s2-l1c.s3.amazonaws.com/tiles/56/X/NF/2016/3/16/0/B7.jp2", "http://sentinel-s2-l1c.s3.amazonaws.com/tiles/56/X/NF/2016/3/16/0/B8.jp2", "http://sentinel-s2-l1c.s3.amazonaws.com/tiles/56/X/NF/2016/3/16/0/B9.jp2", "http://sentinel-s2-l1c.s3.amazonaws.com/tiles/56/X/NF/2016/3/16/0/B10.jp2", "http://sentinel-s2-l1c.s3.amazonaws.com/tiles/56/X/NF/2016/3/16/0/B11.jp2", "http://sentinel-s2-l1c.s3.amazonaws.com/tiles/56/X/NF/2016/3/16/0/B12.jp2", "http://sentinel-s2-l1c.s3.amazonaws.com/tiles/56/X/NF/2016/3/16/0/B8A.jp2"]}}
2 |
--------------------------------------------------------------------------------
/sentinel_s3/main.py:
--------------------------------------------------------------------------------
1 | import os
2 | import sys
3 | import json
4 | import logging
5 | import threading
6 | from copy import copy
7 | from datetime import date, timedelta
8 |
9 | import boto3
10 | import requests
11 | from six.moves.queue import Queue
12 | from six import iteritems, iterkeys
13 | from sentinel_s3.crawler import get_products_metadata_path, get_product_metadata_path
14 | from sentinel_s3.converter import metadata_to_dict, tile_metadata
15 |
16 | # Python 2 comptability
17 | try:
18 | JSONDecodeError = json.JSONDecodeError
19 | except AttributeError:
20 | JSONDecodeError = ValueError
21 |
22 |
23 | logger = logging.getLogger('sentinel.meta.s3')
24 |
25 | bucket_name = os.getenv('BUCKETNAME', 'sentinel-metadata')
26 | s3 = boto3.resource('s3')
27 | bucket = s3.Bucket(bucket_name)
28 |
29 |
30 | def mkdirp(path):
31 |
32 | if not os.path.exists(path):
33 | os.makedirs(path)
34 |
35 |
36 | def file_writer(product_dir, metadata):
37 | mkdirp(product_dir)
38 |
39 | f = open(os.path.join(product_dir, metadata['tile_name'] + '.json'), 'w')
40 | f.write(json.dumps(metadata))
41 | f.close()
42 |
43 |
44 | def s3_writer(product_dir, metadata):
45 | # make sure product_dir doesn't start with slash (/) or dot (.)
46 | if product_dir.startswith('.'):
47 | product_dir = product_dir[1:]
48 |
49 | if product_dir.startswith('/'):
50 | product_dir = product_dir[1:]
51 |
52 | key = os.path.join(product_dir, metadata['tile_name'] + '.json')
53 | s3.Object(bucket_name, key).put(json.dumps(metadata))
54 | object_acl = s3.ObjectAcl(bucket_name, key)
55 | object_acl.put(ACL='public-read')
56 |
57 |
58 | def product_metadata(product, dst_folder, counter=None, writers=[file_writer], geometry_check=None):
59 | """ Extract metadata for a specific product """
60 |
61 | if not counter:
62 | counter = {
63 | 'products': 0,
64 | 'saved_tiles': 0,
65 | 'skipped_tiles': 0,
66 | 'skipped_tiles_paths': []
67 | }
68 |
69 | s3_url = 'http://sentinel-s2-l1c.s3.amazonaws.com'
70 |
71 | product_meta_link = '{0}/{1}'.format(s3_url, product['metadata'])
72 | product_info = requests.get(product_meta_link, stream=True)
73 | product_metadata = metadata_to_dict(product_info.raw)
74 | product_metadata['product_meta_link'] = product_meta_link
75 |
76 | counter['products'] += 1
77 |
78 | for tile in product['tiles']:
79 | tile_info = requests.get('{0}/{1}'.format(s3_url, tile))
80 | try:
81 | metadata = tile_metadata(tile_info.json(), copy(product_metadata), geometry_check)
82 |
83 | for w in writers:
84 | w(dst_folder, metadata)
85 |
86 | logger.info('Saving to disk: %s' % metadata['tile_name'])
87 | counter['saved_tiles'] += 1
88 | except JSONDecodeError:
89 | logger.warning('Tile: %s was not found and skipped' % tile)
90 | counter['skipped_tiles'] += 1
91 | counter['skipped_tiles_paths'].append(tile)
92 |
93 | return counter
94 |
95 |
96 | def single_metadata(product_name, dst_folder, writers=[file_writer], geometry_check=None):
97 |
98 | product_list = get_product_metadata_path(product_name)
99 | return product_metadata(product_list[product_name], dst_folder, writers=writers, geometry_check=geometry_check)
100 |
101 |
102 | def daily_metadata(year, month, day, dst_folder, writers=[file_writer], geometry_check=None,
103 | num_worker_threads=1):
104 | """ Extra metadata for all products in a specific date """
105 |
106 | threaded = False
107 |
108 | counter = {
109 | 'products': 0,
110 | 'saved_tiles': 0,
111 | 'skipped_tiles': 0,
112 | 'skipped_tiles_paths': []
113 | }
114 |
115 | if num_worker_threads > 1:
116 | threaded = True
117 | queue = Queue()
118 |
119 | # create folders
120 | year_dir = os.path.join(dst_folder, str(year))
121 | month_dir = os.path.join(year_dir, str(month))
122 | day_dir = os.path.join(month_dir, str(day))
123 |
124 | product_list = get_products_metadata_path(year, month, day)
125 |
126 | logger.info('There are %s products in %s-%s-%s' % (len(list(iterkeys(product_list))),
127 | year, month, day))
128 |
129 | for name, product in iteritems(product_list):
130 | product_dir = os.path.join(day_dir, name)
131 |
132 | if threaded:
133 | queue.put([product, product_dir, counter, writers, geometry_check])
134 | else:
135 | counter = product_metadata(product, product_dir, counter, writers, geometry_check)
136 |
137 | if threaded:
138 | def worker():
139 | while not queue.empty():
140 | args = queue.get()
141 | try:
142 | product_metadata(*args)
143 | except Exception:
144 | exc = sys.exc_info()
145 | logger.error('%s tile skipped due to error: %s' % (threading.current_thread().name,
146 | exc[1].__str__()))
147 | args[2]['skipped_tiles'] += 1
148 | queue.task_done()
149 |
150 | threads = []
151 | for i in range(num_worker_threads):
152 | t = threading.Thread(target=worker)
153 | t.start()
154 | threads.append(t)
155 |
156 | queue.join()
157 |
158 | return counter
159 |
160 |
161 | def range_metadata(start, end, dst_folder, num_worker_threads=0, writers=[file_writer], geometry_check=None):
162 | """ Extra metadata for all products in a date range """
163 |
164 | assert isinstance(start, date)
165 | assert isinstance(end, date)
166 |
167 | delta = end - start
168 |
169 | dates = []
170 |
171 | for i in range(delta.days + 1):
172 | dates.append(start + timedelta(days=i))
173 |
174 | days = len(dates)
175 |
176 | total_counter = {
177 | 'days': days,
178 | 'products': 0,
179 | 'saved_tiles': 0,
180 | 'skipped_tiles': 0,
181 | 'skipped_tiles_paths': []
182 | }
183 |
184 | def update_counter(counter):
185 | for key in iterkeys(total_counter):
186 | if key in counter:
187 | total_counter[key] += counter[key]
188 |
189 | for d in dates:
190 | logger.info('Getting metadata of {0}-{1}-{2}'.format(d.year, d.month, d.day))
191 | update_counter(daily_metadata(d.year, d.month, d.day, dst_folder, writers, geometry_check,
192 | num_worker_threads))
193 |
194 | return total_counter
195 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | CC0 1.0 Universal
2 |
3 | Statement of Purpose
4 |
5 | The laws of most jurisdictions throughout the world automatically confer
6 | exclusive Copyright and Related Rights (defined below) upon the creator and
7 | subsequent owner(s) (each and all, an "owner") of an original work of
8 | authorship and/or a database (each, a "Work").
9 |
10 | Certain owners wish to permanently relinquish those rights to a Work for the
11 | purpose of contributing to a commons of creative, cultural and scientific
12 | works ("Commons") that the public can reliably and without fear of later
13 | claims of infringement build upon, modify, incorporate in other works, reuse
14 | and redistribute as freely as possible in any form whatsoever and for any
15 | purposes, including without limitation commercial purposes. These owners may
16 | contribute to the Commons to promote the ideal of a free culture and the
17 | further production of creative, cultural and scientific works, or to gain
18 | reputation or greater distribution for their Work in part through the use and
19 | efforts of others.
20 |
21 | For these and/or other purposes and motivations, and without any expectation
22 | of additional consideration or compensation, the person associating CC0 with a
23 | Work (the "Affirmer"), to the extent that he or she is an owner of Copyright
24 | and Related Rights in the Work, voluntarily elects to apply CC0 to the Work
25 | and publicly distribute the Work under its terms, with knowledge of his or her
26 | Copyright and Related Rights in the Work and the meaning and intended legal
27 | effect of CC0 on those rights.
28 |
29 | 1. Copyright and Related Rights. A Work made available under CC0 may be
30 | protected by copyright and related or neighboring rights ("Copyright and
31 | Related Rights"). Copyright and Related Rights include, but are not limited
32 | to, the following:
33 |
34 | i. the right to reproduce, adapt, distribute, perform, display, communicate,
35 | and translate a Work;
36 |
37 | ii. moral rights retained by the original author(s) and/or performer(s);
38 |
39 | iii. publicity and privacy rights pertaining to a person's image or likeness
40 | depicted in a Work;
41 |
42 | iv. rights protecting against unfair competition in regards to a Work,
43 | subject to the limitations in paragraph 4(a), below;
44 |
45 | v. rights protecting the extraction, dissemination, use and reuse of data in
46 | a Work;
47 |
48 | vi. database rights (such as those arising under Directive 96/9/EC of the
49 | European Parliament and of the Council of 11 March 1996 on the legal
50 | protection of databases, and under any national implementation thereof,
51 | including any amended or successor version of such directive); and
52 |
53 | vii. other similar, equivalent or corresponding rights throughout the world
54 | based on applicable law or treaty, and any national implementations thereof.
55 |
56 | 2. Waiver. To the greatest extent permitted by, but not in contravention of,
57 | applicable law, Affirmer hereby overtly, fully, permanently, irrevocably and
58 | unconditionally waives, abandons, and surrenders all of Affirmer's Copyright
59 | and Related Rights and associated claims and causes of action, whether now
60 | known or unknown (including existing as well as future claims and causes of
61 | action), in the Work (i) in all territories worldwide, (ii) for the maximum
62 | duration provided by applicable law or treaty (including future time
63 | extensions), (iii) in any current or future medium and for any number of
64 | copies, and (iv) for any purpose whatsoever, including without limitation
65 | commercial, advertising or promotional purposes (the "Waiver"). Affirmer makes
66 | the Waiver for the benefit of each member of the public at large and to the
67 | detriment of Affirmer's heirs and successors, fully intending that such Waiver
68 | shall not be subject to revocation, rescission, cancellation, termination, or
69 | any other legal or equitable action to disrupt the quiet enjoyment of the Work
70 | by the public as contemplated by Affirmer's express Statement of Purpose.
71 |
72 | 3. Public License Fallback. Should any part of the Waiver for any reason be
73 | judged legally invalid or ineffective under applicable law, then the Waiver
74 | shall be preserved to the maximum extent permitted taking into account
75 | Affirmer's express Statement of Purpose. In addition, to the extent the Waiver
76 | is so judged Affirmer hereby grants to each affected person a royalty-free,
77 | non transferable, non sublicensable, non exclusive, irrevocable and
78 | unconditional license to exercise Affirmer's Copyright and Related Rights in
79 | the Work (i) in all territories worldwide, (ii) for the maximum duration
80 | provided by applicable law or treaty (including future time extensions), (iii)
81 | in any current or future medium and for any number of copies, and (iv) for any
82 | purpose whatsoever, including without limitation commercial, advertising or
83 | promotional purposes (the "License"). The License shall be deemed effective as
84 | of the date CC0 was applied by Affirmer to the Work. Should any part of the
85 | License for any reason be judged legally invalid or ineffective under
86 | applicable law, such partial invalidity or ineffectiveness shall not
87 | invalidate the remainder of the License, and in such case Affirmer hereby
88 | affirms that he or she will not (i) exercise any of his or her remaining
89 | Copyright and Related Rights in the Work or (ii) assert any associated claims
90 | and causes of action with respect to the Work, in either case contrary to
91 | Affirmer's express Statement of Purpose.
92 |
93 | 4. Limitations and Disclaimers.
94 |
95 | a. No trademark or patent rights held by Affirmer are waived, abandoned,
96 | surrendered, licensed or otherwise affected by this document.
97 |
98 | b. Affirmer offers the Work as-is and makes no representations or warranties
99 | of any kind concerning the Work, express, implied, statutory or otherwise,
100 | including without limitation warranties of title, merchantability, fitness
101 | for a particular purpose, non infringement, or the absence of latent or
102 | other defects, accuracy, or the present or absence of errors, whether or not
103 | discoverable, all to the greatest extent permissible under applicable law.
104 |
105 | c. Affirmer disclaims responsibility for clearing rights of other persons
106 | that may apply to the Work or any use thereof, including without limitation
107 | any person's Copyright and Related Rights in the Work. Further, Affirmer
108 | disclaims responsibility for obtaining any necessary consents, permissions
109 | or other rights required for any use of the Work.
110 |
111 | d. Affirmer understands and acknowledges that Creative Commons is not a
112 | party to this document and has no duty or obligation with respect to this
113 | CC0 or use of the Work.
114 |
115 | For more information, please see
116 |
117 |
--------------------------------------------------------------------------------
/tests/test_converter.py:
--------------------------------------------------------------------------------
1 | import json
2 | import unittest
3 | from copy import copy
4 | from collections import OrderedDict
5 |
6 | from six import iterkeys
7 | from sentinel_s3.converter import (camelcase_underscore, metadata_to_dict, tile_metadata, to_latlon,
8 | get_tile_geometry, convert_coordinates)
9 |
10 |
11 | class Test(unittest.TestCase):
12 |
13 | def test_camelcase_underscore(self):
14 |
15 | assert camelcase_underscore('productName') == 'product_name'
16 | assert camelcase_underscore('ProductName') == 'product_name'
17 | assert camelcase_underscore('productname') == 'productname'
18 | assert camelcase_underscore('product1Name') == 'product1_name'
19 |
20 | def test_metadata_to_dict(self):
21 |
22 | xml = open('tests/samples/metadata.xml')
23 | product = metadata_to_dict(xml)
24 |
25 | assert isinstance(product, OrderedDict)
26 | assert 'band_list' in product
27 | assert 'tiles' in product
28 | assert product['spacecraft_name'] == 'Sentinel-2A'
29 | assert len(product['band_list']) == 13
30 |
31 | tiles = list(iterkeys(product['tiles']))
32 | assert len(tiles) == 20
33 |
34 | def test_metadata_to_dict_new_format(self):
35 |
36 | xml = open('tests/samples/metadata_new.xml')
37 | product = metadata_to_dict(xml)
38 |
39 | assert isinstance(product, OrderedDict)
40 | assert 'band_list' in product
41 | assert 'tiles' in product
42 | assert product['spacecraft_name'] == 'Sentinel-2A'
43 | assert len(product['band_list']) == 13
44 |
45 | tiles = list(iterkeys(product['tiles']))
46 | assert len(tiles) == 1
47 |
48 | def test_tile_metadata(self):
49 |
50 | f = open('tests/samples/tileInfo.json', 'rb')
51 | tile_info = json.loads(f.read().decode(), object_pairs_hook=OrderedDict)
52 |
53 | tile = tile_metadata(tile_info, metadata_to_dict('tests/samples/metadata.xml'))
54 |
55 | assert isinstance(tile, OrderedDict)
56 | assert tile['thumbnail'] == 'http://sentinel-s2-l1c.s3.amazonaws.com/tiles/56/X/NF/2016/3/16/0/preview.jp2'
57 | assert tile['tile_name'] == 'S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T56XNF_N02.01'
58 | assert tile['utm_zone'] == 56
59 | assert tile['data_coverage_percentage'] == 65.58
60 | assert tile['sensing_orbit_direction'] == 'DESCENDING'
61 | assert len(tile['download_links']['aws_s3']) == 13
62 |
63 | # Make sure bands urls are left padded
64 | d_link = tile['download_links']['aws_s3'][0].split('.')[-2].split('/')
65 | assert d_link[-1] == 'B01'
66 |
67 | def test_tile_metadata_with_geometry_check(self):
68 |
69 | def geometry_check(meta):
70 | if meta['latitude_band'] == 'N':
71 | return False
72 |
73 | return True
74 |
75 | f = open('tests/samples/tileInfo.json', 'rb')
76 | tile_info = json.loads(f.read().decode(), object_pairs_hook=OrderedDict)
77 |
78 | tile = tile_metadata(tile_info, metadata_to_dict('tests/samples/metadata.xml'), geometry_check)
79 |
80 | assert isinstance(tile, OrderedDict)
81 | assert tile['thumbnail'] == 'http://sentinel-s2-l1c.s3.amazonaws.com/tiles/56/X/NF/2016/3/16/0/preview.jp2'
82 | assert tile['tile_name'] == 'S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T56XNF_N02.01'
83 | assert tile['utm_zone'] == 56
84 | assert tile['data_coverage_percentage'] == 65.58
85 | assert tile['sensing_orbit_direction'] == 'DESCENDING'
86 | assert len(tile['download_links']['aws_s3']) == 13
87 |
88 | # Make sure bands urls are left padded
89 | d_link = tile['download_links']['aws_s3'][0].split('.')[-2].split('/')
90 | assert d_link[-1] == 'B01'
91 |
92 | def test_to_latlon_edge_of_coordinate_system(self):
93 |
94 | geojson = {
95 | "type": "Polygon",
96 | "crs": {
97 | "type": "name",
98 | "properties": {
99 | "name": "urn:ogc:def:crs:EPSG:8.8.1:32601"
100 | }
101 | },
102 | "coordinates": [
103 | [
104 | [
105 | 336706.875271381,
106 | 7799999.0
107 | ],
108 | [
109 | 409799.0,
110 | 7799999.0
111 | ],
112 | [
113 | 409799.0,
114 | 7690201.0
115 | ],
116 | [
117 | 300001.0,
118 | 7690201.0
119 | ],
120 | [
121 | 300001.0,
122 | 7728957.392986406
123 | ],
124 | [
125 | 315164.079827873,
126 | 7758207.990416902
127 | ],
128 | [
129 | 330501.865974295,
130 | 7787926.032465892
131 | ],
132 | [
133 | 336706.875271381,
134 | 7799999.0
135 | ]
136 | ]
137 | ]
138 | }
139 |
140 | gj = to_latlon(copy(geojson))
141 | self.assertNotEqual(gj['coordinates'][0][0], geojson['coordinates'][0][0])
142 | self.assertAlmostEqual(gj['coordinates'][0][1][0], 180.60306, 4)
143 |
144 | def test_to_latlon(self):
145 |
146 | geojson = {
147 | 'type': 'Polygon',
148 | 'coordinates': [
149 | [
150 | [448938.374906865, 2500019.0],
151 | [509759.0, 2500019.0],
152 | [509759.0, 2390221.0],
153 | [424439.204990156, 2390221.0],
154 | [430306.260834363, 2416547.808440298],
155 | [444965.351229892, 2482150.64898733],
156 | [448938.374906865, 2500019.0]
157 | ]
158 | ],
159 | 'crs': {'type': 'name', 'properties': {'name': 'urn:ogc:def:crs:EPSG:8.8.1:32632'}}
160 | }
161 |
162 | gj = to_latlon(copy(geojson))
163 | assert gj['coordinates'][0][0] != geojson['coordinates'][0][0]
164 |
165 | def test_get_tile_geometry(self):
166 |
167 | tiles = {
168 | 'partial_right': {
169 | 'path': 'tests/samples/B01_right.jp2',
170 | 'tile': [-75.3723, -74.8924],
171 | 'data': [-75.0555, -75.3723],
172 | 'epsg': 32618
173 | },
174 | 'partial_left': {
175 | 'path': 'tests/samples/B01_left.jp2',
176 | 'tile': [-62.1004, -61.113],
177 | 'data': [-62.1002, -62.0978],
178 | 'epsg': 32620
179 | },
180 | 'full': {
181 | 'path': 'tests/samples/B01_full.jp2',
182 | 'tile': [-67.4893, -67.4893],
183 | 'data': [-67.4893, -67.4893],
184 | 'epsg': 32620
185 | },
186 | 'edge_case': {
187 | 'path': 'tests/samples/B01_multi.jp2',
188 | 'tile': [-69.0002, -68.8339],
189 | 'data': [-68.9683, -68.8339],
190 | 'epsg': 32619
191 | },
192 | }
193 |
194 | for t in iterkeys(tiles):
195 | print(t)
196 | (tile, data) = get_tile_geometry(tiles[t]['path'], tiles[t]['epsg'])
197 |
198 | fc = {
199 | 'type': 'FeatureCollection',
200 | 'features': []
201 | }
202 |
203 | for g in [data]:
204 | f = {
205 | 'type': 'Feature',
206 | 'properties': {},
207 | 'geometry': g
208 | }
209 | fc['features'].append(f)
210 |
211 | # # uncommen to write the results to disk for testing
212 | # f = open('test_%s.geojson' % t, 'w')
213 | # f.write(json.dumps(fc))
214 |
215 | for i in range(0, 2):
216 | self.assertEqual(tiles[t]['tile'][i], round(tile['coordinates'][0][i][0], 4))
217 | self.assertEqual(tiles[t]['data'][i], round(data['coordinates'][0][i][0], 4))
218 |
--------------------------------------------------------------------------------
/sentinel_s3/converter.py:
--------------------------------------------------------------------------------
1 | import re
2 | import os
3 | import errno
4 | import shutil
5 | import logging
6 | import threading
7 | from tempfile import mkdtemp
8 | from collections import OrderedDict
9 | import xml.etree.cElementTree as etree
10 |
11 | import rasterio
12 | import requests
13 | from wordpad import pad
14 | from six import iteritems
15 | from pyproj import Proj, transform
16 | from rasterio.features import shapes
17 | from shapely.ops import cascaded_union
18 | from shapely.geometry import mapping, Polygon
19 |
20 | logger = logging.getLogger('sentinel.meta.s3')
21 | s3_url = 'http://sentinel-s2-l1c.s3.amazonaws.com'
22 |
23 |
24 | def epsg_code(geojson):
25 | """ get the espg code from the crs system """
26 |
27 | if isinstance(geojson, dict):
28 | if 'crs' in geojson:
29 | urn = geojson['crs']['properties']['name'].split(':')
30 | if 'EPSG' in urn:
31 | try:
32 | return int(urn[-1])
33 | except (TypeError, ValueError):
34 | return None
35 |
36 | return None
37 |
38 |
39 | def test_wrap_coordinates(coords, origin, wgs84):
40 | """ Test whether coordinates wrap around the antimeridian in wgs84 """
41 | lon_under_minus_170 = False
42 | lon_over_plus_170 = False
43 | if isinstance(coords[0], list):
44 | for c in coords[0]:
45 | c = list(transform(origin, wgs84, *c))
46 | if c[0] < -170:
47 | lon_under_minus_170 = True
48 | elif c[0] > 170:
49 | lon_over_plus_170 = True
50 | else:
51 | return False
52 |
53 | return lon_under_minus_170 and lon_over_plus_170
54 |
55 |
56 | def convert_coordinates(coords, origin, wgs84, wrapped):
57 | """ Convert coordinates from one crs to another """
58 | if isinstance(coords, list) or isinstance(coords, tuple):
59 | try:
60 | if isinstance(coords[0], list) or isinstance(coords[0], tuple):
61 | return [convert_coordinates(list(c), origin, wgs84, wrapped) for c in coords]
62 | elif isinstance(coords[0], float):
63 | c = list(transform(origin, wgs84, *coords))
64 | if wrapped and c[0] < -170:
65 | c[0] = c[0] + 360
66 | return c
67 |
68 | except IndexError:
69 | pass
70 |
71 | return None
72 |
73 |
74 | def to_latlon(geojson, origin_espg=None):
75 | """
76 | Convert a given geojson to wgs84. The original epsg must be included insde the crs
77 | tag of geojson
78 | """
79 |
80 | if isinstance(geojson, dict):
81 |
82 | # get epsg code:
83 | if origin_espg:
84 | code = origin_espg
85 | else:
86 | code = epsg_code(geojson)
87 | if code:
88 | origin = Proj(init='epsg:%s' % code)
89 | wgs84 = Proj(init='epsg:4326')
90 | wrapped = test_wrap_coordinates(geojson['coordinates'], origin, wgs84)
91 | new_coords = convert_coordinates(geojson['coordinates'], origin, wgs84, wrapped)
92 | if new_coords:
93 | geojson['coordinates'] = new_coords
94 | try:
95 | del geojson['crs']
96 | except KeyError:
97 | pass
98 |
99 | return geojson
100 |
101 |
102 | def camelcase_underscore(name):
103 | """ Convert camelcase names to underscore """
104 | s1 = re.sub('(.)([A-Z][a-z]+)', r'\1_\2', name)
105 | return re.sub('([a-z0-9])([A-Z])', r'\1_\2', s1).lower()
106 |
107 |
108 | def get_tiles_list(element):
109 | """
110 | Returns the list of all tile names from Product_Organisation element
111 | in metadata.xml
112 | """
113 |
114 | tiles = {}
115 |
116 | for el in element:
117 | g = (el.findall('.//Granules') or el.findall('.//Granule'))[0]
118 | name = g.attrib['granuleIdentifier']
119 |
120 | name_parts = name.split('_')
121 | mgs = name_parts[-2]
122 | tiles[mgs] = name
123 |
124 | return tiles
125 |
126 |
127 | def metadata_to_dict(metadata):
128 | """ Looks at metadata.xml file of sentinel product and extract useful keys
129 | Returns a python dict """
130 |
131 | tree = etree.parse(metadata)
132 | root = tree.getroot()
133 |
134 | meta = OrderedDict()
135 |
136 | keys = [
137 | 'SPACECRAFT_NAME',
138 | 'PRODUCT_STOP_TIME',
139 | 'Cloud_Coverage_Assessment',
140 | 'PROCESSING_LEVEL',
141 | 'PRODUCT_TYPE',
142 | 'PROCESSING_BASELINE',
143 | 'SENSING_ORBIT_NUMBER',
144 | 'SENSING_ORBIT_DIRECTION',
145 | 'PRODUCT_FORMAT',
146 | ]
147 |
148 | # grab important keys from the file
149 | for key in keys:
150 | try:
151 | meta[key.lower()] = root.findall('.//' + key)[0].text
152 | except IndexError:
153 | meta[key.lower()] = None
154 |
155 | meta['product_cloud_coverage_assessment'] = float(meta.pop('cloud_coverage_assessment'))
156 |
157 | meta['sensing_orbit_number'] = int(meta['sensing_orbit_number'])
158 |
159 | # get tile list
160 | meta['tiles'] = get_tiles_list(root.findall('.//Product_Organisation')[0])
161 |
162 | # get available bands
163 | if root.findall('.//Band_List'):
164 | bands = root.findall('.//Band_List')[0]
165 | meta['band_list'] = []
166 | for b in bands:
167 | band = b.text.replace('B', '')
168 | if len(band) == 1:
169 | band = 'B' + pad(band, 2)
170 | else:
171 | band = b.text
172 | meta['band_list'].append(band)
173 | else:
174 | bands = root.findall('.//Spectral_Information_List')[0]
175 | meta['band_list'] = []
176 | for b in bands:
177 | band = b.attrib['physicalBand'].replace('B', '')
178 | if len(band) == 1:
179 | band = 'B' + pad(band, 2)
180 | else:
181 | band = b.attrib['physicalBand']
182 | meta['band_list'].append(band)
183 |
184 | return meta
185 |
186 |
187 | def get_tile_geometry(path, origin_espg, tolerance=500):
188 | """ Calculate the data and tile geometry for sentinel-2 tiles """
189 |
190 | with rasterio.open(path) as src:
191 |
192 | # Get tile geometry
193 | b = src.bounds
194 | tile_shape = Polygon([(b[0], b[1]), (b[2], b[1]), (b[2], b[3]), (b[0], b[3]), (b[0], b[1])])
195 | tile_geojson = mapping(tile_shape)
196 |
197 | # read first band of the image
198 | image = src.read(1)
199 |
200 | # create a mask of zero values
201 | mask = image == 0.
202 |
203 | # generate shapes of the mask
204 | novalue_shape = shapes(image, mask=mask, transform=src.affine)
205 |
206 | # generate polygons using shapely
207 | novalue_shape = [Polygon(s['coordinates'][0]) for (s, v) in novalue_shape]
208 |
209 | if novalue_shape:
210 |
211 | # Make sure polygons are united
212 | # also simplify the resulting polygon
213 | union = cascaded_union(novalue_shape)
214 |
215 | # generates a geojson
216 | data_shape = tile_shape.difference(union)
217 |
218 | # If there are multipolygons, select the largest one
219 | if data_shape.geom_type == 'MultiPolygon':
220 | areas = {p.area: i for i, p in enumerate(data_shape)}
221 | largest = max(areas.keys())
222 | data_shape = data_shape[areas[largest]]
223 |
224 | # if the polygon has interior rings, remove them
225 | if list(data_shape.interiors):
226 | data_shape = Polygon(data_shape.exterior.coords)
227 |
228 | data_shape = data_shape.simplify(tolerance, preserve_topology=False)
229 | data_geojson = mapping(data_shape)
230 |
231 | else:
232 | data_geojson = tile_geojson
233 |
234 | # convert cooridnates to degrees
235 | return (to_latlon(tile_geojson, origin_espg), to_latlon(data_geojson, origin_espg))
236 |
237 |
238 | def get_tile_geometry_from_s3(meta):
239 |
240 | # create a temp folder
241 | tmp_folder = mkdtemp()
242 | f = os.path.join(tmp_folder, 'B01.jp2')
243 |
244 | # donwload B01
245 | r = requests.get('{0}/{1}/B01.jp2'.format(s3_url, meta['path']), stream=True)
246 | chunk_size = 1024
247 |
248 | with open(f, 'wb') as fd:
249 | for chunk in r.iter_content(chunk_size):
250 | fd.write(chunk)
251 |
252 | (meta['tile_geometry'],
253 | meta['tile_data_geometry']) = get_tile_geometry(f, epsg_code(meta['tile_geometry']))
254 | meta['tile_origin'] = to_latlon(meta['tile_origin'])
255 |
256 | # remove temp folder
257 | try:
258 | shutil.rmtree(tmp_folder)
259 | except OSError as exc:
260 | if exc.errno != errno.ENOENT:
261 | raise
262 |
263 | return meta
264 |
265 |
266 | def tile_metadata(tile, product, geometry_check=None):
267 | """ Generate metadata for a given tile
268 |
269 | - geometry_check is a function the determines whether to calculate the geometry by downloading
270 | B01 and override provided geometry in tilejson. The meta object is passed to this function.
271 | The function return a True or False response.
272 | """
273 |
274 | grid = 'T{0}{1}{2}'.format(pad(tile['utmZone'], 2), tile['latitudeBand'], tile['gridSquare'])
275 |
276 | meta = OrderedDict({
277 | 'tile_name': product['tiles'][grid]
278 | })
279 |
280 | logger.info('%s Processing tile %s' % (threading.current_thread().name, tile['path']))
281 |
282 | meta['date'] = tile['timestamp'].split('T')[0]
283 |
284 | meta['thumbnail'] = '{1}/{0}/preview.jp2'.format(tile['path'], s3_url)
285 |
286 | # remove unnecessary keys
287 | product.pop('tiles')
288 | tile.pop('datastrip')
289 | bands = product.pop('band_list')
290 |
291 | for k, v in iteritems(tile):
292 | meta[camelcase_underscore(k)] = v
293 |
294 | meta.update(product)
295 |
296 | # construct download links
297 | links = ['{2}/{0}/{1}.jp2'.format(meta['path'], b, s3_url) for b in bands]
298 |
299 | meta['download_links'] = {
300 | 'aws_s3': links
301 | }
302 |
303 | meta['original_tile_meta'] = '{0}/{1}/tileInfo.json'.format(s3_url, meta['path'])
304 |
305 | def internal_latlon(meta):
306 | keys = ['tile_origin', 'tile_geometry', 'tile_data_geometry']
307 | for key in keys:
308 | if key in meta:
309 | meta[key] = to_latlon(meta[key])
310 | return meta
311 |
312 | # change coordinates to wsg4 degrees
313 | if geometry_check:
314 | if geometry_check(meta):
315 | meta = get_tile_geometry_from_s3(meta)
316 | else:
317 | meta = internal_latlon(meta)
318 | else:
319 | meta = internal_latlon(meta)
320 |
321 | # rename path key to aws_path
322 | meta['aws_path'] = meta.pop('path')
323 |
324 | return meta
325 |
--------------------------------------------------------------------------------
/tests/samples/metadata_new.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | 2016-12-11T19:03:42.026Z
5 | 2016-12-11T19:03:42.026Z
6 |
7 | S2A_MSIL1C_20161211T190342_N0204_R113_T10SDG_20161211T190344.SAFE
8 |
9 | Level-1C
10 | S2MSI1C
11 | 02.04
12 | 2016-12-11T19:03:44.000000Z
13 | Not applicable
14 | Not applicable
15 |
16 | Sentinel-2A
17 | INS-NOBS
18 | 2016-12-11T19:03:42.026Z
19 | 113
20 | DESCENDING
21 |
22 |
23 | SAFE_COMPACT
24 |
25 |
26 |
27 |
28 |
29 | GRANULE/L1C_T10SDG_A007689_20161211T190344/IMG_DATA/T10SDG_20161211T190342_B01
30 |
31 |
32 | GRANULE/L1C_T10SDG_A007689_20161211T190344/IMG_DATA/T10SDG_20161211T190342_B02
33 |
34 |
35 | GRANULE/L1C_T10SDG_A007689_20161211T190344/IMG_DATA/T10SDG_20161211T190342_B05
36 |
37 |
38 | GRANULE/L1C_T10SDG_A007689_20161211T190344/IMG_DATA/T10SDG_20161211T190342_B03
39 |
40 |
41 | GRANULE/L1C_T10SDG_A007689_20161211T190344/IMG_DATA/T10SDG_20161211T190342_B09
42 |
43 |
44 | GRANULE/L1C_T10SDG_A007689_20161211T190344/IMG_DATA/T10SDG_20161211T190342_B07
45 |
46 |
47 | GRANULE/L1C_T10SDG_A007689_20161211T190344/IMG_DATA/T10SDG_20161211T190342_B8A
48 |
49 |
50 | GRANULE/L1C_T10SDG_A007689_20161211T190344/IMG_DATA/T10SDG_20161211T190342_B10
51 |
52 |
53 | GRANULE/L1C_T10SDG_A007689_20161211T190344/IMG_DATA/T10SDG_20161211T190342_B06
54 |
55 |
56 | GRANULE/L1C_T10SDG_A007689_20161211T190344/IMG_DATA/T10SDG_20161211T190342_TCI
57 |
58 |
59 | GRANULE/L1C_T10SDG_A007689_20161211T190344/IMG_DATA/T10SDG_20161211T190342_B11
60 |
61 |
62 | GRANULE/L1C_T10SDG_A007689_20161211T190344/IMG_DATA/T10SDG_20161211T190342_B08
63 |
64 |
65 | GRANULE/L1C_T10SDG_A007689_20161211T190344/IMG_DATA/T10SDG_20161211T190342_B12
66 |
67 |
68 | GRANULE/L1C_T10SDG_A007689_20161211T190344/IMG_DATA/T10SDG_20161211T190342_B04
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 | NODATA
77 | 0
78 |
79 |
80 | SATURATED
81 | 65535
82 |
83 |
84 | 3
85 | 2
86 | 1
87 |
88 | 10000
89 |
90 | 1.03089111499558
91 |
92 | 1913.57
93 | 1941.63
94 | 1822.61
95 | 1512.79
96 | 1425.56
97 | 1288.32
98 | 1163.19
99 | 1036.39
100 | 955.19
101 | 813.04
102 | 367.15
103 | 245.59
104 | 85.25
105 |
106 |
107 |
108 |
109 | 60
110 |
111 | 430
112 | 457
113 | 443.9
114 |
115 |
116 | 1
117 |
118 | 0.01522444 0.06669758 0.19425897 0.35395736 0.45648857 0.50759455 0.54750739 0.58419244 0.61012868 0.64603585 0.69458246 0.74037505 0.78703023 0.85862712 0.94458791 0.9928916 1 0.99055275 0.97282606 0.95596914 0.95429069 0.91888272 0.72055356 0.38639386 0.14531035 0.05161255 0.01738704 0.00029585
119 |
120 |
121 |
122 |
123 | 10
124 |
125 | 440
126 | 538
127 | 496.6
128 |
129 |
130 | 1
131 |
132 | 0.00119988 0.00201397 0.00258793 0.00271734 0.00271858 0.002053 0.00324912 0.0021993 0.00277292 0.00311194 0.00234723 0.00374245 0.0028408 0.00304821 0.00604983 0.00894596 0.01953246 0.03875845 0.08374839 0.17565347 0.29129289 0.36347223 0.3811347 0.38419864 0.39176673 0.39862405 0.40894049 0.42354641 0.4485657 0.4811418 0.50498541 0.52293008 0.52892822 0.53366 0.53242234 0.53311303 0.53655971 0.54232711 0.55667534 0.57791322 0.60145975 0.6156357 0.62060573 0.61270938 0.59482968 0.57420278 0.55609253 0.5440646 0.54004284 0.5517318 0.56998769 0.59684728 0.63205242 0.67244298 0.71093613 0.73748447 0.75709994 0.76697185 0.77176039 0.77883444 0.78683055 0.79421954 0.80824012 0.82348832 0.83743831 0.84485726 0.84716089 0.83974417 0.82502148 0.8036499 0.78544282 0.76973497 0.7598602 0.76337273 0.77981251 0.80847605 0.84947272 0.90112566 0.95456662 0.98736039 1 0.98609155 0.90770989 0.72315884 0.47814326 0.28641509 0.16955089 0.10257285 0.06498784 0.04106167 0.02503855 0.01307564 0.00257814 0.00108051 0.00030609 0.00043924 0.00044121
133 |
134 |
135 |
136 |
137 | 10
138 |
139 | 537
140 | 582
141 | 560
142 |
143 |
144 | 1
145 |
146 | 0.00080152 0.01631966 0.03749604 0.08021834 0.16857673 0.33961135 0.57045802 0.74395167 0.8255379 0.86623109 0.88713486 0.89063153 0.87743881 0.85952176 0.84272738 0.83271245 0.83091319 0.8429466 0.86557037 0.89523547 0.93204973 0.96550034 0.99001699 1 0.99850933 0.98241577 0.94879561 0.90893224 0.87016848 0.83868631 0.8133992 0.79225145 0.7842798 0.78830002 0.80532973 0.82861237 0.84453213 0.85667749 0.85654311 0.79885992 0.62453426 0.38688244 0.20018537 0.09831467 0.04284073 0.01651146
147 |
148 |
149 |
150 |
151 | 10
152 |
153 | 646
154 | 684
155 | 664.5
156 |
157 |
158 | 1
159 |
160 | 0.00261427 0.03462832 0.15030251 0.46548409 0.81834707 0.96554871 0.98388489 0.99687187 1 0.9955785 0.99164257 0.97772062 0.93750282 0.87465366 0.81520176 0.77787363 0.7662682 0.77666981 0.80308737 0.83262125 0.8589057 0.88527593 0.91047688 0.93604508 0.95692399 0.96878538 0.9736139 0.97172876 0.96901499 0.96568155 0.96045441 0.94488073 0.88430524 0.70624874 0.42290429 0.18976191 0.06313289 0.02061386 0.0020257
161 |
162 |
163 |
164 |
165 | 20
166 |
167 | 694
168 | 713
169 | 703.9
170 |
171 |
172 | 1
173 |
174 | 0.00118221 0.04128719 0.16781115 0.47867704 0.83408915 0.98555238 1 0.99917704 0.99301208 0.98202139 0.96500594 0.94523647 0.92390813 0.90154471 0.88461764 0.86012379 0.75605334 0.52042972 0.19640628 0.03678278
175 |
176 |
177 |
178 |
179 | 20
180 |
181 | 731
182 | 749
183 | 740.2
184 |
185 |
186 | 1
187 |
188 | 0.00528628 0.08491265 0.34549055 0.75026111 0.91998424 0.91774468 0.93414364 0.95786657 0.97589351 0.98201154 0.98159765 0.99345282 1 0.98250656 0.96245634 0.85475636 0.50661225 0.13533181 0.0134302
189 |
190 |
191 |
192 |
193 | 20
194 |
195 | 769
196 | 797
197 | 782.5
198 |
199 |
200 | 1
201 |
202 | 0.00158775 0.01471955 0.06700855 0.19944036 0.42271848 0.69391142 0.89840316 0.98314165 0.99479749 1 0.99483279 0.96447136 0.90781386 0.8464478 0.80150314 0.77808053 0.77627582 0.78832546 0.79959911 0.80136031 0.79006668 0.75603297 0.67647373 0.53577608 0.36341065 0.19325756 0.07716074 0.01971336 0.00315275
203 |
204 |
205 |
206 |
207 | 10
208 |
209 | 760
210 | 908
211 | 835.1
212 |
213 |
214 | 1
215 |
216 | 0.00135242 0.00391616 0.00044871 0.00759275 0.01905313 0.03349108 0.05649128 0.0870686 0.13235321 0.20327639 0.31387542 0.44988941 0.58726605 0.71436889 0.8181812 0.90284514 0.96067672 0.99369744 1 0.98524291 0.95844788 0.93666123 0.92594982 0.93050611 0.94139304 0.95341007 0.96218307 0.9655653 0.96296703 0.95877093 0.95087228 0.94471788 0.94260088 0.94521458 0.94468494 0.94302291 0.9363001 0.92707231 0.91511356 0.90021968 0.88081425 0.86148256 0.84257439 0.82215879 0.80140132 0.7765823 0.75539136 0.73775889 0.72215744 0.70870534 0.69854507 0.6903735 0.68251717 0.68178973 0.68302899 0.67891416 0.67639408 0.67176564 0.66600791 0.66127505 0.65915263 0.65868891 0.66436872 0.67295613 0.68563017 0.7011901 0.72062162 0.74210801 0.75925571 0.77620597 0.7835688 0.78713055 0.78702403 0.7828085 0.77539043 0.7675732 0.75848677 0.74517599 0.73227212 0.71988842 0.70601879 0.69027923 0.67538468 0.66109671 0.6489481 0.63768298 0.62716971 0.61876397 0.61082755 0.60427772 0.59741976 0.59177741 0.5870773 0.58292462 0.58141689 0.57973476 0.58049471 0.58280279 0.58561492 0.58979099 0.59310853 0.59700109 0.60157219 0.60336097 0.60555331 0.60896068 0.61337866 0.61852465 0.62655929 0.63707128 0.6483534 0.6587092 0.66674618 0.66798851 0.65925168 0.64099533 0.61519263 0.5829609 0.55150764 0.52589593 0.50665129 0.49612167 0.49873702 0.5117356 0.52875232 0.54241942 0.53768022 0.49573105 0.41916397 0.32670548 0.23104246 0.14852103 0.08967661 0.05496955 0.03325212 0.01976446 0.00783771 0.00128398
217 |
218 |
219 |
220 |
221 | 20
222 |
223 | 848
224 | 881
225 | 864.8
226 |
227 |
228 | 1
229 |
230 | 0.0016587 0.01322143 0.02469164 0.05133023 0.10485306 0.21639327 0.38460415 0.58535033 0.77394613 0.87784514 0.91437737 0.92209877 0.92564458 0.9293724 0.93569013 0.94639017 0.95565571 0.96536061 0.97439721 0.97984594 0.98330113 0.98288901 0.98846942 1 0.99957999 0.92089575 0.72838861 0.47188018 0.23786107 0.10682374 0.04603695 0.02219884 0.00879487 0.00046171
231 |
232 |
233 |
234 |
235 | 60
236 |
237 | 932
238 | 958
239 | 945
240 |
241 |
242 | 1
243 |
244 | 0.01805614 0.06583501 0.18513673 0.40896107 0.6807859 0.87492845 0.93105831 0.96430107 0.98449689 0.99148444 0.99741262 0.97773458 0.9794157 0.99836495 0.98976032 1 0.98740831 0.98535381 0.95618373 0.96549887 0.93078391 0.86340691 0.70418342 0.44996198 0.20134116 0.05969267 0.0138846
245 |
246 |
247 |
248 |
249 | 60
250 |
251 | 1337
252 | 1412
253 | 1373.5
254 |
255 |
256 | 1
257 |
258 | 0.00024052 5.404e-05 3.052e-05 2.872e-05 7.632e-05 0.00010949 8.804e-05 0.00012356 0.00017424 0.0003317 0.00036891 0.0004467 0.00065919 0.0010913 0.00196903 0.00373668 0.00801754 0.01884719 0.04466732 0.10165546 0.20111776 0.34284841 0.50710992 0.6632068 0.78377143 0.86153862 0.91000261 0.94193255 0.96182259 0.97365119 0.98169786 0.98795826 0.99283342 0.99649788 0.99906011 1 0.99907734 0.99601604 0.9909083 0.98479854 0.97802142 0.97030114 0.96080954 0.94849765 0.93314108 0.91482336 0.8937997 0.86825426 0.83023193 0.76384193 0.65440009 0.50671604 0.35014737 0.21799972 0.12643091 0.06768988 0.0322709 0.013544 0.00544557 0.00237642 0.00111267 0.00053796 0.0003457 0.00017488 0.00021619 0.00019479 0.00010421 5.919e-05 5.109e-05 6.115e-05 5.527e-05 3.856e-05 3.147e-05 0.00012289 0.0001089 2.502e-05
259 |
260 |
261 |
262 |
263 | 20
264 |
265 | 1539
266 | 1682
267 | 1613.7
268 |
269 |
270 | 1
271 |
272 | 6.79e-06 6.66e-06 8e-06 2.734e-05 3.685e-05 8.851e-05 0.00014522 0.00024812 0.00047627 0.00056335 0.00065326 0.00089835 0.00114664 0.00165604 0.00241611 0.00350246 0.00524274 0.0081538 0.01237062 0.0186097 0.02721853 0.03879155 0.05379167 0.07353187 0.09932758 0.1334178 0.18029249 0.24484994 0.32834511 0.42749961 0.53576798 0.64570396 0.74245998 0.81447017 0.85866596 0.87924777 0.88665266 0.888727 0.89105732 0.89725046 0.90632982 0.91627527 0.9263751 0.93515828 0.94226446 0.94739906 0.95131987 0.95416808 0.95635128 0.95813297 0.96062738 0.96344083 0.96577764 0.96818134 0.97104025 0.97343195 0.97597444 0.97865413 0.97994672 0.98064126 0.98094979 0.98143338 0.98123856 0.98068083 0.98033995 0.98101894 0.98268503 0.98507875 0.98777658 0.9903608 0.99202087 0.9933069 0.99256744 0.99044883 0.98717314 0.98353656 0.9800432 0.97617287 0.97253451 0.96977033 0.96762556 0.9662626 0.96572411 0.96592079 0.96729798 0.96975438 0.97337748 0.97862858 0.98345358 0.98765317 0.9919238 0.99554959 0.99767411 0.99866451 0.99941783 0.99930984 0.99885298 0.99913515 0.99973164 0.99973592 1 0.9998438 0.9967639 0.99175576 0.9859206 0.97887302 0.97029262 0.96135891 0.95379752 0.94709017 0.94228614 0.93919512 0.93616637 0.92889205 0.9129921 0.88158383 0.82602164 0.74412949 0.64281662 0.53483955 0.42772166 0.32439525 0.23488131 0.16445229 0.11056237 0.07271886 0.04634859 0.02949618 0.01941871 0.0133487 0.00934594 0.00654231 0.00487921 0.00341903 0.00249864 0.00196431 0.00142754 0.00105878 0.00049978 0.00022833 0.00015999 3.415e-05 4.517e-05 1.313e-05
273 |
274 |
275 |
276 |
277 | 20
278 |
279 | 2078
280 | 2320
281 | 2202.4
282 |
283 |
284 | 1
285 |
286 | 0.00063835 0.00102286 0.00288712 0.00399879 0.00658916 0.00765458 0.00799918 0.00853524 0.00929493 0.00999614 0.01096645 0.01208363 0.01335837 0.01501119 0.01711931 0.01977307 0.02332743 0.02765779 0.03320435 0.04020464 0.04886709 0.0596238 0.07315348 0.09050885 0.11143964 0.13686671 0.16776886 0.20341457 0.24281992 0.28484195 0.32711894 0.36834301 0.40794043 0.4447145 0.47647207 0.50303896 0.52524762 0.54328057 0.55717994 0.5685619 0.57895708 0.58860881 0.59881758 0.60990899 0.62128986 0.63421311 0.64847648 0.66363778 0.67997936 0.69609688 0.71189957 0.7269499 0.74124079 0.75734734 0.77201504 0.78552587 0.79818641 0.80962939 0.81965718 0.82855741 0.83668178 0.84440292 0.85106862 0.85321701 0.85471321 0.8561428 0.85778963 0.8594989 0.86142876 0.86322831 0.86511218 0.8672932 0.86967076 0.87427502 0.87856212 0.88241466 0.88590611 0.8894516 0.89320419 0.8966738 0.89987484 0.90257636 0.90481219 0.90550545 0.90564491 0.90548208 0.90513822 0.90476379 0.90406427 0.90332978 0.90274309 0.90235795 0.90196488 0.90340528 0.90429478 0.90529761 0.90642862 0.90807348 0.91010493 0.91293181 0.91556686 0.91842631 0.92128288 0.92431702 0.92719913 0.92972159 0.93190455 0.93412538 0.93588954 0.93707083 0.93762594 0.93828534 0.93763643 0.94042634 0.94250397 0.94324531 0.94301861 0.94210283 0.94061808 0.93841726 0.93665003 0.93524569 0.93301102 0.92686708 0.92104485 0.91547175 0.91100989 0.90828339 0.9072733 0.90817907 0.91115631 0.91617845 0.92284525 0.92059829 0.91947472 0.91947973 0.92126575 0.92451632 0.92772589 0.93196884 0.93676408 0.94147739 0.94679545 0.95119533 0.95443018 0.95704142 0.95972628 0.9625372 0.96485326 0.96603599 0.96664138 0.96630455 0.96545713 0.96484036 0.96365512 0.96169531 0.95944859 0.95732078 0.95513625 0.95355574 0.95273072 0.95217795 0.95172542 0.9521403 0.95263595 0.95405248 0.95707559 0.96063594 0.96421772 0.96830187 0.97268597 0.97741944 0.98289489 0.9871429 0.99073348 0.99398244 0.99678431 0.99875181 1 0.9999284 0.9991523 0.99712951 0.99388228 0.98968273 0.98373274 0.97621057 0.96780985 0.95833495 0.94842856 0.93818752 0.9277078 0.91702104 0.90597951 0.89384371 0.88165575 0.86861704 0.85460324 0.84058628 0.82598123 0.80948042 0.79182917 0.7724052 0.74907137 0.72031195 0.68815487 0.65125598 0.6100244 0.56600904 0.52095058 0.47464344 0.42924778 0.38584718 0.34208462 0.30067509 0.26317221 0.22770037 0.19571781 0.16808736 0.14467686 0.12482737 0.10823403 0.09439655 0.08235799 0.07149445 0.0626855 0.05498009 0.04818852 0.04285814 0.03859244 0.03494044 0.03199172 0.02958044 0.02741084 0.02556884 0.02395058 0.02166741 0.0191457 0.01632139 0.0109837 0.00736032 0.00649061 0.00469736 0.00205874
287 |
288 |
289 |
290 |
291 | 4.06350423
292 | 3.80272099
293 | 4.19419032
294 | 4.52153681
295 | 5.21064379
296 | 4.87648891
297 | 4.5417877
298 | 6.20706988
299 | 5.1425727
300 | 8.54635329
301 | 54.92017221
302 | 35.14920093
303 | 106.11097854
304 | 0
305 |
306 |
307 |
308 |
309 |
310 |
311 |
312 | 37.064327886131274 -122.89021164281505 37.1093977351388 -123.16017547372144 37.11090961928888 -123.15973470746324 37.1113682347847 -123.16279284552608 37.11146321255431 -123.16276529012988 37.11148080386271 -123.16288277498096 37.11197187339491 -123.16273945336445 37.150526256741486 -123.42102598841075 37.14938013965063 -123.42135721414769 37.193083542367255 -123.71493739591047 37.308448253137655 -123.68220942935916 37.45584866916195 -123.64005738115064 37.6032673529438 -123.59798491501584 37.75070904688775 -123.55572337260764 37.89811038572427 -123.5131291711159 37.94487083914931 -123.49956441582113 37.94753713280259 -122.88891399416782 37.064327886131274 -122.89021164281505 37.064327886131274 -122.89021164281505
313 |
314 |
315 |
316 | POINT
317 | 1
318 |
319 |
320 | EPSG
321 | GEOGRAPHIC
322 |
323 |
324 |
325 |
326 |
327 | S2A_OPER_GIP_ATMIMA_MPC__20150605T094744_V20150622T000000_21000101T000000_B00
328 |
329 |
330 | S2A_OPER_GIP_ATMSAD_MPC__20160729T000005_V20150703T000000_21000101T000000_B00
331 |
332 |
333 | S2A_OPER_GIP_LREXTR_MPC__20150605T094736_V20150622T000000_21000101T000000_B00
334 |
335 |
336 | S2A_OPER_GIP_INVLOC_MPC__20150731T092205_V20150703T000000_21000101T000000_B00
337 |
338 |
339 | S2A_OPER_GIP_BLINDP_MPC__20150605T094736_V20150622T000000_21000101T000000_B00
340 |
341 |
342 | S2A_OPER_GIP_CLOINV_MPC__20151021T225159_V20150701T225159_21000101T000000_B00
343 |
344 |
345 | S2A_OPER_GIP_CONVER_MPC__20150710T131444_V20150627T000000_21000101T000000_B00
346 |
347 |
348 | S2A_OPER_GIP_DATATI_MPC__20151117T131048_V20150703T000000_21000101T000000_B00
349 |
350 |
351 | S2A_OPER_GIP_DECOMP_MPC__20121031T075922_V19830101T000000_21000101T000000_B00
352 |
353 |
354 | S2__OPER_GIP_EARMOD_MPC__20150605T094736_V20150622T000000_21000101T000000_B00
355 |
356 |
357 | S2A_OPER_GIP_ECMWFP_MPC__20121031T075922_V19830101T000000_21000101T000000_B00
358 |
359 |
360 | S2A_OPER_GIP_G2PARA_MPC__20150605T094736_V20150622T000000_21000101T000000_B00
361 |
362 |
363 | S2A_OPER_GIP_G2PARE_MPC__20150605T094736_V20150622T000000_21000101T000000_B00
364 |
365 |
366 | S2A_OPER_GIP_GEOPAR_MPC__20150605T094741_V20150622T000000_21000101T000000_B00
367 |
368 |
369 | S2A_OPER_GIP_INTDET_MPC__20150731T092205_V20150703T000000_21000101T000000_B00
370 |
371 |
372 | S2A_OPER_GIP_JP2KPA_MPC__20160222T110000_V20150622T000000_21000101T000000_B00
373 |
374 |
375 | S2A_OPER_GIP_MASPAR_MPC__20161104T000000_V20161121T235900_21000101T000000_B00
376 |
377 |
378 | S2A_OPER_GIP_OLQCPA_MPC__20161118T000009_V20161121T235900_21000101T000000_B00
379 |
380 |
381 | S2A_OPER_GIP_PRDLOC_MPC__20151125T152205_V20150703T000000_21000101T000000_B00
382 |
383 |
384 | S2A_OPER_GIP_PROBAS_MPC__20160930T000204_V20161003T015000_20200101T000000_B00
385 |
386 |
387 | S2A_OPER_GIP_R2ABCA_MPC__20161110T114140_V20161107T054810_99999999T999999_B00
388 |
389 |
390 | S2A_OPER_GIP_R2BINN_MPC__20150605T094803_V20150622T000000_21000101T000000_B00
391 |
392 |
393 | S2A_OPER_GIP_R2CRCO_MPC__20151023T224715_V20150622T224715_21000101T000000_B00
394 |
395 |
396 | S2A_OPER_GIP_R2DECT_MPC__20150605T094741_V20150622T000000_21000101T000000_B01
397 |
398 |
399 | S2A_OPER_GIP_R2DECT_MPC__20150605T094741_V20150622T000000_21000101T000000_B02
400 |
401 |
402 | S2A_OPER_GIP_R2DECT_MPC__20150605T094741_V20150622T000000_21000101T000000_B03
403 |
404 |
405 | S2A_OPER_GIP_R2DECT_MPC__20150605T094741_V20150622T000000_21000101T000000_B04
406 |
407 |
408 | S2A_OPER_GIP_R2DECT_MPC__20150605T094741_V20150622T000000_21000101T000000_B05
409 |
410 |
411 | S2A_OPER_GIP_R2DECT_MPC__20150605T094741_V20150622T000000_21000101T000000_B06
412 |
413 |
414 | S2A_OPER_GIP_R2DECT_MPC__20150605T094741_V20150622T000000_21000101T000000_B07
415 |
416 |
417 | S2A_OPER_GIP_R2DECT_MPC__20150605T094741_V20150622T000000_21000101T000000_B08
418 |
419 |
420 | S2A_OPER_GIP_R2DECT_MPC__20150605T094741_V20150622T000000_21000101T000000_B8A
421 |
422 |
423 | S2A_OPER_GIP_R2DECT_MPC__20150605T094742_V20150622T000000_21000101T000000_B09
424 |
425 |
426 | S2A_OPER_GIP_R2DECT_MPC__20150605T094742_V20150622T000000_21000101T000000_B10
427 |
428 |
429 | S2A_OPER_GIP_R2DECT_MPC__20150605T094742_V20150622T000000_21000101T000000_B11
430 |
431 |
432 | S2A_OPER_GIP_R2DECT_MPC__20150605T094742_V20150622T000000_21000101T000000_B12
433 |
434 |
435 | S2A_OPER_GIP_R2DEFI_MPC__20150605T094742_V20150622T000000_21000101T000000_B01
436 |
437 |
438 | S2A_OPER_GIP_R2DEFI_MPC__20150605T094741_V20150622T000000_21000101T000000_B02
439 |
440 |
441 | S2A_OPER_GIP_R2DEFI_MPC__20150605T094741_V20150622T000000_21000101T000000_B03
442 |
443 |
444 | S2A_OPER_GIP_R2DEFI_MPC__20150605T094741_V20150622T000000_21000101T000000_B04
445 |
446 |
447 | S2A_OPER_GIP_R2DEFI_MPC__20150605T094741_V20150622T000000_21000101T000000_B05
448 |
449 |
450 | S2A_OPER_GIP_R2DEFI_MPC__20150605T094741_V20150622T000000_21000101T000000_B06
451 |
452 |
453 | S2A_OPER_GIP_R2DEFI_MPC__20150605T094741_V20150622T000000_21000101T000000_B07
454 |
455 |
456 | S2A_OPER_GIP_R2DEFI_MPC__20150605T094741_V20150622T000000_21000101T000000_B08
457 |
458 |
459 | S2A_OPER_GIP_R2DEFI_MPC__20150605T094741_V20150622T000000_21000101T000000_B8A
460 |
461 |
462 | S2A_OPER_GIP_R2DEFI_MPC__20150605T094741_V20150622T000000_21000101T000000_B09
463 |
464 |
465 | S2A_OPER_GIP_R2DEFI_MPC__20150605T094741_V20150622T000000_21000101T000000_B10
466 |
467 |
468 | S2A_OPER_GIP_R2DEFI_MPC__20150605T094741_V20150622T000000_21000101T000000_B11
469 |
470 |
471 | S2A_OPER_GIP_R2DEFI_MPC__20150605T094741_V20150622T000000_21000101T000000_B12
472 |
473 |
474 | S2A_OPER_GIP_R2DENT_MPC__20150605T094741_V20150622T000000_21000101T000000_B01
475 |
476 |
477 | S2A_OPER_GIP_R2DENT_MPC__20150605T094742_V20150622T000000_21000101T000000_B02
478 |
479 |
480 | S2A_OPER_GIP_R2DENT_MPC__20150605T094742_V20150622T000000_21000101T000000_B03
481 |
482 |
483 | S2A_OPER_GIP_R2DENT_MPC__20150605T094742_V20150622T000000_21000101T000000_B04
484 |
485 |
486 | S2A_OPER_GIP_R2DENT_MPC__20150605T094742_V20150622T000000_21000101T000000_B05
487 |
488 |
489 | S2A_OPER_GIP_R2DENT_MPC__20150605T094742_V20150622T000000_21000101T000000_B06
490 |
491 |
492 | S2A_OPER_GIP_R2DENT_MPC__20150605T094742_V20150622T000000_21000101T000000_B07
493 |
494 |
495 | S2A_OPER_GIP_R2DENT_MPC__20150605T094742_V20150622T000000_21000101T000000_B08
496 |
497 |
498 | S2A_OPER_GIP_R2DENT_MPC__20150605T094742_V20150622T000000_21000101T000000_B8A
499 |
500 |
501 | S2A_OPER_GIP_R2DENT_MPC__20150605T094742_V20150622T000000_21000101T000000_B09
502 |
503 |
504 | S2A_OPER_GIP_R2DENT_MPC__20150605T094742_V20150622T000000_21000101T000000_B10
505 |
506 |
507 | S2A_OPER_GIP_R2DENT_MPC__20150605T094742_V20150622T000000_21000101T000000_B11
508 |
509 |
510 | S2A_OPER_GIP_R2DENT_MPC__20150605T094742_V20150622T000000_21000101T000000_B12
511 |
512 |
513 | S2A_OPER_GIP_R2DEPI_MPC__20160310T155952_V20160223T220345_21000101T000000_B00
514 |
515 |
516 | S2A_OPER_GIP_R2EOB2_MPC__20150827T165847_V20150819T000000_99999999T999999_B01
517 |
518 |
519 | S2A_OPER_GIP_R2EOB2_MPC__20150827T165847_V20150819T000000_99999999T999999_B02
520 |
521 |
522 | S2A_OPER_GIP_R2EOB2_MPC__20150827T165847_V20150819T000000_99999999T999999_B03
523 |
524 |
525 | S2A_OPER_GIP_R2EOB2_MPC__20150827T165847_V20150819T000000_99999999T999999_B04
526 |
527 |
528 | S2A_OPER_GIP_R2EOB2_MPC__20150827T165847_V20150819T000000_99999999T999999_B05
529 |
530 |
531 | S2A_OPER_GIP_R2EOB2_MPC__20150827T165847_V20150819T000000_99999999T999999_B06
532 |
533 |
534 | S2A_OPER_GIP_R2EOB2_MPC__20150827T165847_V20150819T000000_99999999T999999_B07
535 |
536 |
537 | S2A_OPER_GIP_R2EOB2_MPC__20150827T165847_V20150819T000000_99999999T999999_B08
538 |
539 |
540 | S2A_OPER_GIP_R2EOB2_MPC__20150827T165847_V20150819T000000_99999999T999999_B8A
541 |
542 |
543 | S2A_OPER_GIP_R2EOB2_MPC__20150827T165847_V20150819T000000_99999999T999999_B09
544 |
545 |
546 | S2A_OPER_GIP_R2EOB2_MPC__20150827T165847_V20150819T000000_99999999T999999_B10
547 |
548 |
549 | S2A_OPER_GIP_R2EOB2_MPC__20150827T165847_V20150819T000000_99999999T999999_B11
550 |
551 |
552 | S2A_OPER_GIP_R2EOB2_MPC__20150827T165847_V20150819T000000_99999999T999999_B12
553 |
554 |
555 | S2A_OPER_GIP_R2EQOG_MPC__20161110T114140_V20161107T054810_99999999T999999_B01
556 |
557 |
558 | S2A_OPER_GIP_R2EQOG_MPC__20161110T114140_V20161107T054810_99999999T999999_B02
559 |
560 |
561 | S2A_OPER_GIP_R2EQOG_MPC__20161110T114140_V20161107T054810_99999999T999999_B03
562 |
563 |
564 | S2A_OPER_GIP_R2EQOG_MPC__20161110T114140_V20161107T054810_99999999T999999_B04
565 |
566 |
567 | S2A_OPER_GIP_R2EQOG_MPC__20161110T114140_V20161107T054810_99999999T999999_B05
568 |
569 |
570 | S2A_OPER_GIP_R2EQOG_MPC__20161110T114140_V20161107T054810_99999999T999999_B06
571 |
572 |
573 | S2A_OPER_GIP_R2EQOG_MPC__20161110T114140_V20161107T054810_99999999T999999_B07
574 |
575 |
576 | S2A_OPER_GIP_R2EQOG_MPC__20161110T114140_V20161107T054810_99999999T999999_B08
577 |
578 |
579 | S2A_OPER_GIP_R2EQOG_MPC__20161110T114140_V20161107T054810_99999999T999999_B8A
580 |
581 |
582 | S2A_OPER_GIP_R2EQOG_MPC__20161110T114140_V20161107T054810_99999999T999999_B09
583 |
584 |
585 | S2A_OPER_GIP_R2EQOG_MPC__20161110T114140_V20161107T054810_99999999T999999_B10
586 |
587 |
588 | S2A_OPER_GIP_R2EQOG_MPC__20161110T114140_V20161107T054810_99999999T999999_B11
589 |
590 |
591 | S2A_OPER_GIP_R2EQOG_MPC__20161110T114140_V20161107T054810_99999999T999999_B12
592 |
593 |
594 | S2A_OPER_GIP_R2L2NC_MPC__20150605T094742_V20150622T000000_21000101T000000_B01
595 |
596 |
597 | S2A_OPER_GIP_R2L2NC_MPC__20150605T094742_V20150622T000000_21000101T000000_B02
598 |
599 |
600 | S2A_OPER_GIP_R2L2NC_MPC__20150605T094741_V20150622T000000_21000101T000000_B03
601 |
602 |
603 | S2A_OPER_GIP_R2L2NC_MPC__20150605T094742_V20150622T000000_21000101T000000_B04
604 |
605 |
606 | S2A_OPER_GIP_R2L2NC_MPC__20150605T094742_V20150622T000000_21000101T000000_B05
607 |
608 |
609 | S2A_OPER_GIP_R2L2NC_MPC__20150605T094742_V20150622T000000_21000101T000000_B06
610 |
611 |
612 | S2A_OPER_GIP_R2L2NC_MPC__20150605T094742_V20150622T000000_21000101T000000_B07
613 |
614 |
615 | S2A_OPER_GIP_R2L2NC_MPC__20150605T094742_V20150622T000000_21000101T000000_B08
616 |
617 |
618 | S2A_OPER_GIP_R2L2NC_MPC__20150605T094742_V20150622T000000_21000101T000000_B8A
619 |
620 |
621 | S2A_OPER_GIP_R2L2NC_MPC__20150605T094742_V20150622T000000_21000101T000000_B09
622 |
623 |
624 | S2A_OPER_GIP_R2L2NC_MPC__20150605T094742_V20150622T000000_21000101T000000_B10
625 |
626 |
627 | S2A_OPER_GIP_R2L2NC_MPC__20150605T094742_V20150622T000000_21000101T000000_B11
628 |
629 |
630 | S2A_OPER_GIP_R2L2NC_MPC__20150605T094742_V20150622T000000_21000101T000000_B12
631 |
632 |
633 | S2A_OPER_GIP_R2NOMO_MPC__20150605T094803_V20150622T000000_21000101T000000_B00
634 |
635 |
636 | S2A_OPER_GIP_R2PARA_MPC__20151023T224307_V20150622T224307_21000101T000000_B00
637 |
638 |
639 | S2A_OPER_GIP_R2SWIR_MPC__20160304T100014_V20160223T230345_21000101T000000_B00
640 |
641 |
642 | S2A_OPER_GIP_R2WAFI_MPC__20150605T094742_V20150622T000000_21000101T000000_B01
643 |
644 |
645 | S2A_OPER_GIP_R2WAFI_MPC__20150605T094742_V20150622T000000_21000101T000000_B02
646 |
647 |
648 | S2A_OPER_GIP_R2WAFI_MPC__20150605T094742_V20150622T000000_21000101T000000_B03
649 |
650 |
651 | S2A_OPER_GIP_R2WAFI_MPC__20150605T094742_V20150622T000000_21000101T000000_B04
652 |
653 |
654 | S2A_OPER_GIP_R2WAFI_MPC__20150605T094742_V20150622T000000_21000101T000000_B05
655 |
656 |
657 | S2A_OPER_GIP_R2WAFI_MPC__20150605T094742_V20150622T000000_21000101T000000_B06
658 |
659 |
660 | S2A_OPER_GIP_R2WAFI_MPC__20150605T094742_V20150622T000000_21000101T000000_B07
661 |
662 |
663 | S2A_OPER_GIP_R2WAFI_MPC__20150605T094742_V20150622T000000_21000101T000000_B08
664 |
665 |
666 | S2A_OPER_GIP_R2WAFI_MPC__20150605T094742_V20150622T000000_21000101T000000_B8A
667 |
668 |
669 | S2A_OPER_GIP_R2WAFI_MPC__20150605T094742_V20150622T000000_21000101T000000_B09
670 |
671 |
672 | S2A_OPER_GIP_R2WAFI_MPC__20150605T094742_V20150622T000000_21000101T000000_B10
673 |
674 |
675 | S2A_OPER_GIP_R2WAFI_MPC__20150605T094742_V20150622T000000_21000101T000000_B11
676 |
677 |
678 | S2A_OPER_GIP_R2WAFI_MPC__20150605T094742_V20150622T000000_21000101T000000_B12
679 |
680 |
681 | S2A_OPER_GIP_RESPAR_MPC__20150605T094736_V20150622T000000_21000101T000000_B00
682 |
683 |
684 | S2A_OPER_GIP_SPAMOD_MPC__20161011T073954_V20161017T000000_21000101T000000_B00
685 |
686 |
687 | S2A_OPER_GIP_TILPAR_MPC__20151209T095117_V20150622T000000_21000101T000000_B00
688 |
689 |
690 | S2A_OPER_GIP_VIEDIR_MPC__20151117T131048_V20150703T000000_21000101T000000_B01
691 |
692 |
693 | S2A_OPER_GIP_VIEDIR_MPC__20151117T131049_V20150703T000000_21000101T000000_B02
694 |
695 |
696 | S2A_OPER_GIP_VIEDIR_MPC__20151117T131049_V20150703T000000_21000101T000000_B03
697 |
698 |
699 | S2A_OPER_GIP_VIEDIR_MPC__20151117T131049_V20150703T000000_21000101T000000_B04
700 |
701 |
702 | S2A_OPER_GIP_VIEDIR_MPC__20151117T131050_V20150703T000000_21000101T000000_B05
703 |
704 |
705 | S2A_OPER_GIP_VIEDIR_MPC__20151117T131050_V20150703T000000_21000101T000000_B06
706 |
707 |
708 | S2A_OPER_GIP_VIEDIR_MPC__20151117T131050_V20150703T000000_21000101T000000_B07
709 |
710 |
711 | S2A_OPER_GIP_VIEDIR_MPC__20151117T131050_V20150703T000000_21000101T000000_B08
712 |
713 |
714 | S2A_OPER_GIP_VIEDIR_MPC__20151117T131050_V20150703T000000_21000101T000000_B8A
715 |
716 |
717 | S2A_OPER_GIP_VIEDIR_MPC__20151117T131050_V20150703T000000_21000101T000000_B09
718 |
719 |
720 | S2A_OPER_GIP_VIEDIR_MPC__20151117T131050_V20150703T000000_21000101T000000_B10
721 |
722 |
723 | S2A_OPER_GIP_VIEDIR_MPC__20151117T131050_V20150703T000000_21000101T000000_B11
724 |
725 |
726 | S2A_OPER_GIP_VIEDIR_MPC__20151117T131051_V20150703T000000_21000101T000000_B12
727 |
728 |
729 |
730 | S2__OPER_DEM_GLOBEF_PDMC_19800101T000000_S19800101T000000
731 |
732 |
733 | S2__OPER_AUX_UT1UTC_PDMC_20161208T000000_V20161209T000000_20171208T000000
734 |
735 |
736 | S2A_OPER_AUX_GRI065_PDMC_20130621T120000_S20130101T000000
737 |
738 |
739 | S2__OPER_AUX_ECMWFD_PDMC_20161211T000000_V20161211T180000_20161212T060000
740 |
741 |
742 |
743 | 92.5404
744 |
745 | 0
746 | 0
747 |
748 |
749 |
750 | PASSED
751 | PASSED
752 | PASSED
753 | PASSED
754 | PASSED
755 |
756 |
757 |
758 |
759 |
760 |
--------------------------------------------------------------------------------
/tests/samples/metadata.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | 2016-03-16T02:06:40.455Z
5 | 2016-03-16T02:06:40.455Z
6 | 393_2016-03-16T06_40
7 | Level-1C
8 | S2MSI1C
9 | 02.01
10 | 2016-03-16T06:44:16.000853Z
11 | https://pdmcdam2.sentinel2.eo.esa.int/s2pdgs_geoserver/geo_service.php?service=WMS&version=1.1.0&request=GetMap&layers=S2A_A003818_N0201:S2A_A003818_N0201&styles=&bbox=143.6457116281654,70.1327293123605,159.40173910976236,72.99569891051942&width=5846&height=1062&srs=EPSG:4326&format=image/png
12 | BrowseImageFootprint
13 |
14 | Sentinel-2A
15 | INS-NOBS
16 | 2016-03-16T02:06:42.031Z
17 | 103
18 | DESCENDING
19 |
20 |
21 |
22 |
23 | 70.657 -180.0000
24 | 72.457 180.0000
25 |
26 |
27 | false
28 | true
29 |
30 | B1
31 | B2
32 | B3
33 | B4
34 | B5
35 | B6
36 | B7
37 | B8
38 | B9
39 | B10
40 | B11
41 | B12
42 | B8A
43 |
44 | Expertise
45 |
46 |
47 | NO
48 |
49 |
50 | NO
51 |
52 |
53 | SAFE
54 | false
55 |
56 |
57 |
58 |
59 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T54WXD_B08
60 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T54WXD_B8A
61 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T54WXD_B07
62 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T54WXD_B01
63 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T54WXD_B05
64 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T54WXD_B09
65 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T54WXD_B10
66 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T54WXD_B06
67 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T54WXD_B02
68 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T54WXD_B12
69 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T54WXD_B11
70 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T54WXD_B03
71 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T54WXD_B04
72 |
73 |
74 |
75 |
76 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T55WDU_B08
77 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T55WDU_B06
78 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T55WDU_B09
79 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T55WDU_B02
80 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T55WDU_B05
81 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T55WDU_B11
82 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T55WDU_B10
83 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T55WDU_B12
84 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T55WDU_B01
85 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T55WDU_B8A
86 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T55WDU_B04
87 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T55WDU_B03
88 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T55WDU_B07
89 |
90 |
91 |
92 |
93 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T55WEU_B08
94 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T55WEU_B01
95 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T55WEU_B03
96 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T55WEU_B11
97 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T55WEU_B05
98 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T55WEU_B10
99 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T55WEU_B12
100 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T55WEU_B09
101 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T55WEU_B8A
102 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T55WEU_B02
103 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T55WEU_B04
104 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T55WEU_B07
105 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T55WEU_B06
106 |
107 |
108 |
109 |
110 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T55WEV_B04
111 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T55WEV_B01
112 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T55WEV_B07
113 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T55WEV_B03
114 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T55WEV_B08
115 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T55WEV_B06
116 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T55WEV_B09
117 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T55WEV_B11
118 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T55WEV_B10
119 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T55WEV_B05
120 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T55WEV_B8A
121 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T55WEV_B02
122 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T55WEV_B12
123 |
124 |
125 |
126 |
127 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T55WFU_B06
128 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T55WFU_B01
129 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T55WFU_B07
130 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T55WFU_B8A
131 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T55WFU_B05
132 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T55WFU_B12
133 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T55WFU_B04
134 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T55WFU_B11
135 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T55WFU_B03
136 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T55WFU_B08
137 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T55WFU_B02
138 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T55WFU_B10
139 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T55WFU_B09
140 |
141 |
142 |
143 |
144 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T55WFV_B08
145 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T55WFV_B06
146 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T55WFV_B11
147 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T55WFV_B8A
148 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T55WFV_B10
149 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T55WFV_B03
150 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T55WFV_B02
151 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T55WFV_B12
152 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T55WFV_B01
153 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T55WFV_B05
154 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T55WFV_B07
155 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T55WFV_B04
156 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T55WFV_B09
157 |
158 |
159 |
160 |
161 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T55XEA_B8A
162 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T55XEA_B09
163 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T55XEA_B10
164 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T55XEA_B08
165 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T55XEA_B05
166 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T55XEA_B12
167 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T55XEA_B03
168 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T55XEA_B02
169 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T55XEA_B06
170 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T55XEA_B11
171 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T55XEA_B07
172 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T55XEA_B01
173 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T55XEA_B04
174 |
175 |
176 |
177 |
178 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T55XFA_B08
179 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T55XFA_B03
180 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T55XFA_B10
181 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T55XFA_B01
182 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T55XFA_B8A
183 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T55XFA_B12
184 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T55XFA_B06
185 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T55XFA_B09
186 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T55XFA_B11
187 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T55XFA_B02
188 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T55XFA_B04
189 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T55XFA_B07
190 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T55XFA_B05
191 |
192 |
193 |
194 |
195 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T56WMD_B02
196 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T56WMD_B06
197 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T56WMD_B04
198 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T56WMD_B03
199 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T56WMD_B05
200 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T56WMD_B10
201 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T56WMD_B08
202 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T56WMD_B8A
203 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T56WMD_B11
204 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T56WMD_B12
205 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T56WMD_B01
206 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T56WMD_B07
207 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T56WMD_B09
208 |
209 |
210 |
211 |
212 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T56WME_B06
213 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T56WME_B07
214 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T56WME_B03
215 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T56WME_B02
216 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T56WME_B08
217 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T56WME_B8A
218 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T56WME_B12
219 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T56WME_B05
220 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T56WME_B10
221 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T56WME_B09
222 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T56WME_B11
223 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T56WME_B01
224 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T56WME_B04
225 |
226 |
227 |
228 |
229 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T56WND_B05
230 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T56WND_B11
231 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T56WND_B12
232 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T56WND_B8A
233 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T56WND_B01
234 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T56WND_B10
235 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T56WND_B02
236 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T56WND_B03
237 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T56WND_B06
238 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T56WND_B04
239 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T56WND_B09
240 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T56WND_B07
241 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T56WND_B08
242 |
243 |
244 |
245 |
246 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T56WNE_B12
247 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T56WNE_B09
248 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T56WNE_B04
249 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T56WNE_B01
250 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T56WNE_B10
251 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T56WNE_B07
252 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T56WNE_B06
253 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T56WNE_B08
254 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T56WNE_B8A
255 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T56WNE_B05
256 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T56WNE_B02
257 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T56WNE_B03
258 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T56WNE_B11
259 |
260 |
261 |
262 |
263 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T56WPD_B03
264 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T56WPD_B02
265 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T56WPD_B06
266 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T56WPD_B08
267 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T56WPD_B01
268 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T56WPD_B09
269 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T56WPD_B12
270 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T56WPD_B05
271 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T56WPD_B8A
272 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T56WPD_B04
273 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T56WPD_B07
274 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T56WPD_B11
275 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T56WPD_B10
276 |
277 |
278 |
279 |
280 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T56WPE_B12
281 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T56WPE_B02
282 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T56WPE_B09
283 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T56WPE_B07
284 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T56WPE_B06
285 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T56WPE_B10
286 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T56WPE_B08
287 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T56WPE_B11
288 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T56WPE_B03
289 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T56WPE_B01
290 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T56WPE_B8A
291 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T56WPE_B04
292 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T56WPE_B05
293 |
294 |
295 |
296 |
297 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T56XMF_B08
298 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T56XMF_B05
299 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T56XMF_B01
300 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T56XMF_B8A
301 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T56XMF_B03
302 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T56XMF_B04
303 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T56XMF_B09
304 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T56XMF_B06
305 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T56XMF_B12
306 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T56XMF_B11
307 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T56XMF_B10
308 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T56XMF_B02
309 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T56XMF_B07
310 |
311 |
312 |
313 |
314 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T56XNF_B07
315 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T56XNF_B08
316 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T56XNF_B05
317 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T56XNF_B10
318 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T56XNF_B12
319 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T56XNF_B06
320 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T56XNF_B8A
321 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T56XNF_B11
322 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T56XNF_B09
323 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T56XNF_B04
324 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T56XNF_B02
325 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T56XNF_B01
326 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T56XNF_B03
327 |
328 |
329 |
330 |
331 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T56XPF_B05
332 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T56XPF_B11
333 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T56XPF_B8A
334 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T56XPF_B10
335 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T56XPF_B06
336 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T56XPF_B03
337 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T56XPF_B04
338 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T56XPF_B02
339 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T56XPF_B09
340 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T56XPF_B12
341 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T56XPF_B07
342 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T56XPF_B01
343 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T56XPF_B08
344 |
345 |
346 |
347 |
348 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T57WVU_B03
349 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T57WVU_B04
350 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T57WVU_B11
351 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T57WVU_B10
352 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T57WVU_B06
353 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T57WVU_B07
354 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T57WVU_B01
355 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T57WVU_B05
356 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T57WVU_B12
357 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T57WVU_B8A
358 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T57WVU_B08
359 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T57WVU_B09
360 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T57WVU_B02
361 |
362 |
363 |
364 |
365 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T57WVV_B10
366 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T57WVV_B01
367 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T57WVV_B8A
368 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T57WVV_B05
369 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T57WVV_B08
370 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T57WVV_B04
371 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T57WVV_B02
372 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T57WVV_B11
373 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T57WVV_B09
374 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T57WVV_B12
375 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T57WVV_B03
376 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T57WVV_B06
377 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T57WVV_B07
378 |
379 |
380 |
381 |
382 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T57XVA_B10
383 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T57XVA_B06
384 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T57XVA_B8A
385 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T57XVA_B04
386 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T57XVA_B09
387 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T57XVA_B01
388 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T57XVA_B11
389 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T57XVA_B08
390 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T57XVA_B02
391 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T57XVA_B12
392 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T57XVA_B05
393 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T57XVA_B07
394 | S2A_OPER_MSI_L1C_TL_SGS__20160316T054120_A003818_T57XVA_B03
395 |
396 |
397 |
398 |
399 |
400 |
401 | NODATA
402 | 0
403 |
404 |
405 | SATURATED
406 | 65535
407 |
408 |
409 | 3
410 | 2
411 | 1
412 |
413 | 10000
414 |
415 | 1.01282184463556
416 |
417 | 1913.57
418 | 1941.63
419 | 1822.61
420 | 1512.79
421 | 1425.56
422 | 1288.32
423 | 1163.19
424 | 1036.39
425 | 955.19
426 | 813.04
427 | 367.15
428 | 245.59
429 | 85.25
430 |
431 |
432 | 4.05905872991808
433 | 3.79832030050307
434 | 4.19072427967476
435 | 4.51719715484605
436 | 5.20468055577817
437 | 4.87420783504962
438 | 4.54014964560928
439 | 6.20139364736951
440 | 5.14186096818299
441 | 8.54591670370095
442 | 55.0614207479959
443 | 35.2832828551041
444 | 0
445 |
446 |
447 |
448 |
449 |
450 |
451 | 71.18225922301176 143.77857511249624 70.19883742790859 143.6457116281654 70.1327293123605 146.53810921603315 70.2134983315834 146.56091911035293 70.21727437976578 147.1289253485503 70.19588812047054 149.77475130277935 70.1327293123605 152.53810921603312 70.21349833158341 152.5609191103529 70.21727437976578 153.1289253485502 70.19588812047054 155.77475130277938 70.1327293123605 158.53810921603315 70.2134983315834 158.56091911035293 70.21813506743955 159.25839296766586 71.15661835405452 159.27078116639032 72.05295893876409 159.28382080055226 72.57712735057714 159.29226323872626 72.89515510727976 159.40173910976236 72.89757934280551 159.29742454961635 72.99548059987063 159.29900138120578 72.97277968087197 155.93800268329463 72.97156365631429 155.93820317511245 72.99323860301097 153.29896527082704 72.99548059987063 153.29900138120578 72.99446869731338 153.14918351799386 72.99569891051942 152.99938728692726 72.99345694136416 152.99938736092395 72.97277968087197 149.93800268329463 72.97156365631429 149.93820317511245 72.99569891051942 146.99938728692726 72.05316503500357 146.99941839546815 71.20082777660429 146.99944380454758 71.1822427633901 144.22031510980838 71.17206891417852 144.22169017855745 71.18225922301176 143.77857511249624
452 |
453 |
454 | POINT
455 | 1
456 |
457 |
458 | EPSG
459 | GEOGRAPHIC
460 |
461 |
462 |
463 |
464 | S2A_OPER_GIP_BLINDP_MPC__20150605T094736_V20150622T000000_21000101T000000_B00
465 | S2A_OPER_GIP_CLOINV_MPC__20151021T225159_V20150701T225159_21000101T000000_B00
466 | S2A_OPER_GIP_DATATI_MPC__20151117T131048_V20150703T000000_21000101T000000_B00
467 | S2A_OPER_GIP_DECOMP_MPC__20121031T075922_V19830101T000000_21000101T000000_B00
468 | S2__OPER_GIP_EARMOD_MPC__20150605T094736_V20150622T000000_21000101T000000_B00
469 | S2A_OPER_GIP_ECMWFP_MPC__20121031T075922_V19830101T000000_21000101T000000_B00
470 | S2A_OPER_GIP_G2PARA_MPC__20150605T094736_V20150622T000000_21000101T000000_B00
471 | S2A_OPER_GIP_G2PARE_MPC__20150605T094736_V20150622T000000_21000101T000000_B00
472 | S2A_OPER_GIP_GEOPAR_MPC__20150605T094741_V20150622T000000_21000101T000000_B00
473 | S2A_OPER_GIP_INTDET_MPC__20150731T092205_V20150703T000000_21000101T000000_B00
474 | S2A_OPER_GIP_JP2KPA_MPC__20160222T110000_V20150622T000000_21000101T000000_B00
475 | S2A_OPER_GIP_MASPAR_MPC__20160203T150846_V20150622T000000_21000101T000000_B00
476 | S2A_OPER_GIP_OLQCPA_MPC__20151127T150000_V20000506T000000_21000101T000000_B00
477 | S2A_OPER_GIP_PRDLOC_MPC__20151125T152205_V20150703T000000_21000101T000000_B00
478 | S2__OPER_GIP_PROBAS_MPC__20160121T111510_V20151215T111510_20200101T000000_B00
479 | S2A_OPER_GIP_R2ABCA_MPC__20160310T155959_V20160229T000000_21000101T000000_B00
480 | S2A_OPER_GIP_R2BINN_MPC__20150605T094803_V20150622T000000_21000101T000000_B00
481 | S2A_OPER_GIP_R2CRCO_MPC__20151023T224715_V20150622T224715_21000101T000000_B00
482 | S2A_OPER_GIP_R2DECT_MPC__20150605T094741_V20150622T000000_21000101T000000_B01
483 | S2A_OPER_GIP_R2DECT_MPC__20150605T094741_V20150622T000000_21000101T000000_B02
484 | S2A_OPER_GIP_R2DECT_MPC__20150605T094741_V20150622T000000_21000101T000000_B03
485 | S2A_OPER_GIP_R2DECT_MPC__20150605T094741_V20150622T000000_21000101T000000_B04
486 | S2A_OPER_GIP_R2DECT_MPC__20150605T094741_V20150622T000000_21000101T000000_B05
487 | S2A_OPER_GIP_R2DECT_MPC__20150605T094741_V20150622T000000_21000101T000000_B06
488 | S2A_OPER_GIP_R2DECT_MPC__20150605T094741_V20150622T000000_21000101T000000_B07
489 | S2A_OPER_GIP_R2DECT_MPC__20150605T094741_V20150622T000000_21000101T000000_B08
490 | S2A_OPER_GIP_R2DECT_MPC__20150605T094741_V20150622T000000_21000101T000000_B8A
491 | S2A_OPER_GIP_R2DECT_MPC__20150605T094742_V20150622T000000_21000101T000000_B09
492 | S2A_OPER_GIP_R2DECT_MPC__20150605T094742_V20150622T000000_21000101T000000_B10
493 | S2A_OPER_GIP_R2DECT_MPC__20150605T094742_V20150622T000000_21000101T000000_B11
494 | S2A_OPER_GIP_R2DECT_MPC__20150605T094742_V20150622T000000_21000101T000000_B12
495 | S2A_OPER_GIP_R2DEFI_MPC__20150605T094742_V20150622T000000_21000101T000000_B01
496 | S2A_OPER_GIP_R2DEFI_MPC__20150605T094741_V20150622T000000_21000101T000000_B02
497 | S2A_OPER_GIP_R2DEFI_MPC__20150605T094741_V20150622T000000_21000101T000000_B03
498 | S2A_OPER_GIP_R2DEFI_MPC__20150605T094741_V20150622T000000_21000101T000000_B04
499 | S2A_OPER_GIP_R2DEFI_MPC__20150605T094741_V20150622T000000_21000101T000000_B05
500 | S2A_OPER_GIP_R2DEFI_MPC__20150605T094741_V20150622T000000_21000101T000000_B06
501 | S2A_OPER_GIP_R2DEFI_MPC__20150605T094741_V20150622T000000_21000101T000000_B07
502 | S2A_OPER_GIP_R2DEFI_MPC__20150605T094741_V20150622T000000_21000101T000000_B08
503 | S2A_OPER_GIP_R2DEFI_MPC__20150605T094741_V20150622T000000_21000101T000000_B8A
504 | S2A_OPER_GIP_R2DEFI_MPC__20150605T094741_V20150622T000000_21000101T000000_B09
505 | S2A_OPER_GIP_R2DEFI_MPC__20150605T094741_V20150622T000000_21000101T000000_B10
506 | S2A_OPER_GIP_R2DEFI_MPC__20150605T094741_V20150622T000000_21000101T000000_B11
507 | S2A_OPER_GIP_R2DEFI_MPC__20150605T094741_V20150622T000000_21000101T000000_B12
508 | S2A_OPER_GIP_R2DENT_MPC__20150605T094741_V20150622T000000_21000101T000000_B01
509 | S2A_OPER_GIP_R2DENT_MPC__20150605T094742_V20150622T000000_21000101T000000_B02
510 | S2A_OPER_GIP_R2DENT_MPC__20150605T094742_V20150622T000000_21000101T000000_B03
511 | S2A_OPER_GIP_R2DENT_MPC__20150605T094742_V20150622T000000_21000101T000000_B04
512 | S2A_OPER_GIP_R2DENT_MPC__20150605T094742_V20150622T000000_21000101T000000_B05
513 | S2A_OPER_GIP_R2DENT_MPC__20150605T094742_V20150622T000000_21000101T000000_B06
514 | S2A_OPER_GIP_R2DENT_MPC__20150605T094742_V20150622T000000_21000101T000000_B07
515 | S2A_OPER_GIP_R2DENT_MPC__20150605T094742_V20150622T000000_21000101T000000_B08
516 | S2A_OPER_GIP_R2DENT_MPC__20150605T094742_V20150622T000000_21000101T000000_B8A
517 | S2A_OPER_GIP_R2DENT_MPC__20150605T094742_V20150622T000000_21000101T000000_B09
518 | S2A_OPER_GIP_R2DENT_MPC__20150605T094742_V20150622T000000_21000101T000000_B10
519 | S2A_OPER_GIP_R2DENT_MPC__20150605T094742_V20150622T000000_21000101T000000_B11
520 | S2A_OPER_GIP_R2DENT_MPC__20150605T094742_V20150622T000000_21000101T000000_B12
521 | S2A_OPER_GIP_R2DEPI_MPC__20160310T155952_V20160223T220345_21000101T000000_B00
522 | S2A_OPER_GIP_R2EOB2_MPC__20150827T165847_V20150819T000000_99999999T999999_B01
523 | S2A_OPER_GIP_R2EOB2_MPC__20150827T165847_V20150819T000000_99999999T999999_B02
524 | S2A_OPER_GIP_R2EOB2_MPC__20150827T165847_V20150819T000000_99999999T999999_B03
525 | S2A_OPER_GIP_R2EOB2_MPC__20150827T165847_V20150819T000000_99999999T999999_B04
526 | S2A_OPER_GIP_R2EOB2_MPC__20150827T165847_V20150819T000000_99999999T999999_B05
527 | S2A_OPER_GIP_R2EOB2_MPC__20150827T165847_V20150819T000000_99999999T999999_B06
528 | S2A_OPER_GIP_R2EOB2_MPC__20150827T165847_V20150819T000000_99999999T999999_B07
529 | S2A_OPER_GIP_R2EOB2_MPC__20150827T165847_V20150819T000000_99999999T999999_B08
530 | S2A_OPER_GIP_R2EOB2_MPC__20150827T165847_V20150819T000000_99999999T999999_B8A
531 | S2A_OPER_GIP_R2EOB2_MPC__20150827T165847_V20150819T000000_99999999T999999_B09
532 | S2A_OPER_GIP_R2EOB2_MPC__20150827T165847_V20150819T000000_99999999T999999_B10
533 | S2A_OPER_GIP_R2EOB2_MPC__20150827T165847_V20150819T000000_99999999T999999_B11
534 | S2A_OPER_GIP_R2EOB2_MPC__20150827T165847_V20150819T000000_99999999T999999_B12
535 | S2A_OPER_GIP_R2EQOG_MPC__20160310T155952_V20160229T000000_21000101T000000_B01
536 | S2A_OPER_GIP_R2EQOG_MPC__20160310T155952_V20160229T000000_21000101T000000_B02
537 | S2A_OPER_GIP_R2EQOG_MPC__20160310T155953_V20160229T000000_21000101T000000_B03
538 | S2A_OPER_GIP_R2EQOG_MPC__20160310T155954_V20160229T000000_21000101T000000_B04
539 | S2A_OPER_GIP_R2EQOG_MPC__20160310T155955_V20160229T000000_21000101T000000_B05
540 | S2A_OPER_GIP_R2EQOG_MPC__20160310T155955_V20160229T000000_21000101T000000_B06
541 | S2A_OPER_GIP_R2EQOG_MPC__20160310T155956_V20160229T000000_21000101T000000_B07
542 | S2A_OPER_GIP_R2EQOG_MPC__20160310T155956_V20160229T000000_21000101T000000_B08
543 | S2A_OPER_GIP_R2EQOG_MPC__20160310T155957_V20160229T000000_21000101T000000_B8A
544 | S2A_OPER_GIP_R2EQOG_MPC__20160310T155957_V20160229T000000_21000101T000000_B09
545 | S2A_OPER_GIP_R2EQOG_MPC__20160310T155958_V20160229T000000_21000101T000000_B10
546 | S2A_OPER_GIP_R2EQOG_MPC__20160310T155958_V20160229T000000_21000101T000000_B11
547 | S2A_OPER_GIP_R2EQOG_MPC__20160310T155958_V20160229T000000_21000101T000000_B12
548 | S2A_OPER_GIP_R2L2NC_MPC__20150605T094742_V20150622T000000_21000101T000000_B01
549 | S2A_OPER_GIP_R2L2NC_MPC__20150605T094742_V20150622T000000_21000101T000000_B02
550 | S2A_OPER_GIP_R2L2NC_MPC__20150605T094741_V20150622T000000_21000101T000000_B03
551 | S2A_OPER_GIP_R2L2NC_MPC__20150605T094742_V20150622T000000_21000101T000000_B04
552 | S2A_OPER_GIP_R2L2NC_MPC__20150605T094742_V20150622T000000_21000101T000000_B05
553 | S2A_OPER_GIP_R2L2NC_MPC__20150605T094742_V20150622T000000_21000101T000000_B06
554 | S2A_OPER_GIP_R2L2NC_MPC__20150605T094742_V20150622T000000_21000101T000000_B07
555 | S2A_OPER_GIP_R2L2NC_MPC__20150605T094742_V20150622T000000_21000101T000000_B08
556 | S2A_OPER_GIP_R2L2NC_MPC__20150605T094742_V20150622T000000_21000101T000000_B8A
557 | S2A_OPER_GIP_R2L2NC_MPC__20150605T094742_V20150622T000000_21000101T000000_B09
558 | S2A_OPER_GIP_R2L2NC_MPC__20150605T094742_V20150622T000000_21000101T000000_B10
559 | S2A_OPER_GIP_R2L2NC_MPC__20150605T094742_V20150622T000000_21000101T000000_B11
560 | S2A_OPER_GIP_R2L2NC_MPC__20150605T094742_V20150622T000000_21000101T000000_B12
561 | S2A_OPER_GIP_R2NOMO_MPC__20150605T094803_V20150622T000000_21000101T000000_B00
562 | S2A_OPER_GIP_R2PARA_MPC__20151023T224307_V20150622T224307_21000101T000000_B00
563 | S2A_OPER_GIP_R2SWIR_MPC__20160304T100014_V20160223T230345_21000101T000000_B00
564 | S2A_OPER_GIP_R2WAFI_MPC__20150605T094742_V20150622T000000_21000101T000000_B01
565 | S2A_OPER_GIP_R2WAFI_MPC__20150605T094742_V20150622T000000_21000101T000000_B02
566 | S2A_OPER_GIP_R2WAFI_MPC__20150605T094742_V20150622T000000_21000101T000000_B03
567 | S2A_OPER_GIP_R2WAFI_MPC__20150605T094742_V20150622T000000_21000101T000000_B04
568 | S2A_OPER_GIP_R2WAFI_MPC__20150605T094742_V20150622T000000_21000101T000000_B05
569 | S2A_OPER_GIP_R2WAFI_MPC__20150605T094742_V20150622T000000_21000101T000000_B06
570 | S2A_OPER_GIP_R2WAFI_MPC__20150605T094742_V20150622T000000_21000101T000000_B07
571 | S2A_OPER_GIP_R2WAFI_MPC__20150605T094742_V20150622T000000_21000101T000000_B08
572 | S2A_OPER_GIP_R2WAFI_MPC__20150605T094742_V20150622T000000_21000101T000000_B8A
573 | S2A_OPER_GIP_R2WAFI_MPC__20150605T094742_V20150622T000000_21000101T000000_B09
574 | S2A_OPER_GIP_R2WAFI_MPC__20150605T094742_V20150622T000000_21000101T000000_B10
575 | S2A_OPER_GIP_R2WAFI_MPC__20150605T094742_V20150622T000000_21000101T000000_B11
576 | S2A_OPER_GIP_R2WAFI_MPC__20150605T094742_V20150622T000000_21000101T000000_B12
577 | S2A_OPER_GIP_RESPAR_MPC__20150605T094736_V20150622T000000_21000101T000000_B00
578 | S2A_OPER_GIP_SPAMOD_MPC__20160203T145800_V20151115T000000_21000101T000000_B00
579 | S2A_OPER_GIP_TILPAR_MPC__20151209T095117_V20150622T000000_21000101T000000_B00
580 | S2A_OPER_GIP_VIEDIR_MPC__20151117T131048_V20150703T000000_21000101T000000_B01
581 | S2A_OPER_GIP_VIEDIR_MPC__20151117T131049_V20150703T000000_21000101T000000_B02
582 | S2A_OPER_GIP_VIEDIR_MPC__20151117T131049_V20150703T000000_21000101T000000_B03
583 | S2A_OPER_GIP_VIEDIR_MPC__20151117T131049_V20150703T000000_21000101T000000_B04
584 | S2A_OPER_GIP_VIEDIR_MPC__20151117T131050_V20150703T000000_21000101T000000_B05
585 | S2A_OPER_GIP_VIEDIR_MPC__20151117T131050_V20150703T000000_21000101T000000_B06
586 | S2A_OPER_GIP_VIEDIR_MPC__20151117T131050_V20150703T000000_21000101T000000_B07
587 | S2A_OPER_GIP_VIEDIR_MPC__20151117T131050_V20150703T000000_21000101T000000_B08
588 | S2A_OPER_GIP_VIEDIR_MPC__20151117T131050_V20150703T000000_21000101T000000_B8A
589 | S2A_OPER_GIP_VIEDIR_MPC__20151117T131050_V20150703T000000_21000101T000000_B09
590 | S2A_OPER_GIP_VIEDIR_MPC__20151117T131050_V20150703T000000_21000101T000000_B10
591 | S2A_OPER_GIP_VIEDIR_MPC__20151117T131050_V20150703T000000_21000101T000000_B11
592 | S2A_OPER_GIP_VIEDIR_MPC__20151117T131051_V20150703T000000_21000101T000000_B12
593 |
594 | S2__OPER_DEM_GLOBEF_PDMC_19800101T000000_S19800101T000000
595 | S2__OPER_AUX_UT1UTC_PDMC_20160310T000000_V20160311T000000_20170310T000000
596 | S2A_OPER_AUX_GRI065_PDMC_20130621T120000_S20130101T000000
597 | S2__OPER_AUX_ECMWFD_PDMC_20160315T120000_V20160315T210000_20160316T090000
598 |
599 |
600 | 55.76177
601 |
602 | 0
603 | 0
604 |
605 |
606 |
607 | PASSED
608 | FAILED
609 | PASSED
610 | PASSED
611 | PASSED
612 |
613 |
614 |
615 | S2A_OPER_MSI_L1C_DS_SGS__20160316T054120_S20160316T020640_GEOMETRIC_QUALITY_report.xml
616 |
617 |
618 |
619 |
620 |
621 |
--------------------------------------------------------------------------------