示例#1
0
    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
示例#2
0
 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