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
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)
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
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)