def _deriveFromEnviDomainMetadata(cls, metadata): def toArray(s, dtype=str): if s is None: return None else: return [ dtype(v.strip()) for v in s.replace('{', '').replace('}', '').split(',') ] if metadata.get('wavelength') is None: return None else: units = metadata.get('wavelength_units', 'decimal years') if units.lower() == 'decimal years': dyears = toArray(metadata['wavelength'], dtype=float) leap = lambda dy: QDate.isLeapYear(int(dy)) dyearToDate = lambda dy: QDate(int(dy), 1, 1).addDays( round((dy - int(dy)) * 366) - (0 if leap(dy) else 1)) dates = [dyearToDate(dy) for dy in dyears] else: return None if metadata.get('band_names') is None: return None else: names = toArray(metadata['band_names']) # strip date and wavelength # names = [name.split('(')[0].strip() for name in names] # names = [name.split('(')[0].strip() for name in names] wavelengths = metadata.get('center_wavelength') if wavelengths is None: wavelengths = [None] * len(names) else: wavelengths = toArray(wavelengths, float) unit = metadata.get('center_wavelength_units') units = [unit] * len(names) return dates, names, wavelengths, units
def convertToDecimalYear(date): assert isinstance(date, QDate) year = date.year() daysInYear = 365 + (1 if QDate.isLeapYear(year) else 0) decimal = QDate(year, 1, 1).daysTo(date) / (daysInYear) return year + decimal