Пример #1
0
 def lonlat_minmax(self):
     """
     Get lat and lon min and max values
     :return: latmin, latmax, lonmin, lonmax of the current sites
     """
     ul_lonlat = ImageIO.transform_point(self.ul, self.epsg, new_epsg=4326)
     lr_lonlat = ImageIO.transform_point(self.lr, self.epsg, new_epsg=4326)
     return ul_lonlat, lr_lonlat
Пример #2
0
 def test_transform_point_lat_lon(self):
     center = (653095.355, 5071879.228)
     lon_lat_expected = (4.9694934619557145, 45.78349724618419)
     lon_lat_calc = ImageIO.transform_point(center,
                                            old_epsg=32631,
                                            new_epsg=4326)
     np.testing.assert_almost_equal(lon_lat_calc, lon_lat_expected)
Пример #3
0
    def get_eudem_codes(site):
        """
        Get the list of EuDEM files for a given site.
        :return: The list of filenames needed in order to cover to whole site.
        """
        grid_step = 10
        from Common import ImageIO
        ur_etrs89 = ImageIO.transform_point(
            (site.lr_lonlat[0], site.ul_lonlat[1]),
            old_epsg=4326,
            new_epsg=3035)
        ll_etrs89 = ImageIO.transform_point(
            (site.ul_lonlat[0], site.lr_lonlat[1]),
            old_epsg=4326,
            new_epsg=3035)

        def myfloor(val, base=grid_step):
            return base * math.floor(val / base)

        lon_min = myfloor(ll_etrs89[0] / 100000)
        lon_max = myfloor(ur_etrs89[0] / 100000)
        lat_min = myfloor(ll_etrs89[1] / 100000)
        lat_max = myfloor(ur_etrs89[1] / 100000)
        lat_codes = list(range(lat_min, lat_max + grid_step, grid_step))
        lon_codes = list(range(lon_min, lon_max + grid_step, grid_step))
        eudem_granules = []
        for x in lon_codes:
            for y in lat_codes:
                code_lat = "S" if y < 0 else "N"
                code_lon = "W" if x < 0 else "E"
                eudem_code = "eu_dem_v11_%s%s%s%s" % (code_lon, x, code_lat, y)
                if eudem_code not in eudem_archives:
                    raise ValueError(
                        "Cannot process this product with EuDEM."
                        "(Partially) out of region:"
                        "%s -> [%s, %s]" %
                        (eudem_code, site.lr_lonlat, site.ul_lonlat))
                eudem_granules.append(eudem_code)
        return eudem_granules
Пример #4
0
    def s2_epsg_code(self):
        """
        Get the Sentinel-2 EPSG Code for the current dataset
        The codes range from 32601..60 and 32701..60

        :return: The EPSG-Code as int. E.g. '32630'
        :rtype: int
        """
        ul, lr = self.ul_lr
        epsg_old = self.epsg
        if epsg_old != 4326:
            lon, lat = ImageIO.transform_point(ul, epsg_old)
        else:
            lat, lon = ul
        lon_mod = int(lon / 6)

        lon_code = str(30 + lon_mod if lon < 0 else 31 - lon_mod).zfill(2)
        epsg = "327" if lat < 0 else "326"
        return int(epsg + lon_code)