Source code for sicor.sensors.S2MSI.GranuleInfo.GranuleInfo

import json
from pkg_resources import resource_filename, Requirement, DistributionNotFound
from os.path import dirname, join, isfile

__author__ = "Niklas Bohn, Andre Hollstein"


# noinspection PyMissingConstructor
[docs] class GranuleInfo(dict): def __init__(self, version="lite"): """Dict like object with basic information's about Sentinel2-MSI granules. :param version: should be either "lite" or "full" :type version: string with granule name, see keys() method for available names :return: dict like object, keys are S2 granule names (e.g. '32UVX'), data can be accessed via () and [] methods :Example >>> S2gi = GranuleInfo(version="full") >>> S2gi["32UPV"] {u'country': [u'Germany'], u'epsg': 32632, u'name': u'32UPV', u'pos': {u'll': {u'lat': 48.6570271781, u'lon': 10.3579107698, u'x': 599999.9999970878, u'y': 5390220.000326163}, u'lr': {u'lat': 48.6298215752, u'lon': 11.8474784519, u'x': 709800.0000132157, u'y': 5390220.000321694}, u'tl': {u'lat': 49.644436702, u'lon': 10.3851737332, u'x': 600000.0000025682, u'y': 5500020.000361709}, u'tr': {u'lat': 49.6162737214, u'lon': 11.9045727629, u'x': 709800.0000165974, u'y': 5500020.000351718}}, u'region': [u'Europe'], u'zone': 32} """ files = {"lite": "data/S2_tile_data_lite.json", "full": "data/S2_tile_data_full.json"} try: fn_base = files[version] except KeyError: raise ValueError("Version should be: %s" % str(list(files.keys()))) try: fn = resource_filename(Requirement.parse("sicor"), fn_base) except DistributionNotFound: fn = join(dirname(__file__), fn_base) if isfile(fn) is False: raise FileNotFoundError(files[version]) else: if isfile(fn) is False: fn = join(dirname(__file__), fn_base) if isfile(fn) is False: raise FileNotFoundError(files[version]) with open(fn, 'r') as fl: s2_tile_data = json.load(fl) self.update(s2_tile_data) @staticmethod def __test__(pp): if "pos" in pp: for aa in ["ll", "lr", "tl", "tr"]: if aa in pp["pos"]: if "lon" not in pp["pos"][aa] or "lat" not in pp["pos"][aa]: return False else: return True else: return False else: return False
[docs] def get_tile_data(self): return {key: pp for key, pp in self.items() if self.__test__(pp) is True}
def __call__(self, arg): return self[arg]