diff --git a/city_metrix/layers/__init__.py b/city_metrix/layers/__init__.py index ea7fa8a..669e727 100644 --- a/city_metrix/layers/__init__.py +++ b/city_metrix/layers/__init__.py @@ -1,4 +1,5 @@ from .albedo import Albedo +from .ndvi_sentinel2_gee import NdviSentinel2 from .esa_world_cover import EsaWorldCover, EsaWorldCoverClass from .land_surface_temperature import LandSurfaceTemperature from .tree_cover import TreeCover diff --git a/city_metrix/layers/landsat_collection_2.py b/city_metrix/layers/landsat_collection_2.py index d82180d..1739fa1 100644 --- a/city_metrix/layers/landsat_collection_2.py +++ b/city_metrix/layers/landsat_collection_2.py @@ -1,9 +1,10 @@ import odc.stac import pystac_client +from jupyterlab.utils import deprecated from .layer import Layer - +@deprecated class LandsatCollection2(Layer): def __init__(self, bands, start_date="2013-01-01", end_date="2023-01-01", **kwargs): super().__init__(**kwargs) @@ -29,8 +30,7 @@ def get_data(self, bbox): fail_on_error=False, ) + # TODO: Determine how to output xarray + qa_lst = lc2.where((lc2.qa_pixel & 24) == 0) return qa_lst.drop_vars("qa_pixel") - - - diff --git a/city_metrix/layers/layer.py b/city_metrix/layers/layer.py index 299b0a1..f3e2174 100644 --- a/city_metrix/layers/layer.py +++ b/city_metrix/layers/layer.py @@ -18,10 +18,8 @@ import shapely.geometry as geometry import pandas as pd - MAX_TILE_SIZE = 0.5 - class Layer: def __init__(self, aggregate=None, masks=[]): self.aggregate = aggregate @@ -39,6 +37,15 @@ def get_data(self, bbox: Tuple[float]) -> Union[xr.DataArray, gpd.GeoDataFrame]: """ ... + @abstractmethod + def post_processing_adjustment(self, data, **kwargs) -> Union[xr.DataArray, gpd.GeoDataFrame]: + """ + Applies the standard post-processing adjustment used for rendering of the layer + :param are specific to the layer + :return: A rioxarray-format DataArray or a GeoPandas DataFrame + """ + return data + def mask(self, *layers): """ Apply layers as masks @@ -56,7 +63,7 @@ def groupby(self, zones, layer=None): """ return LayerGroupBy(self.aggregate, zones, layer, self.masks) - def write(self, bbox, output_path, tile_degrees=None): + def write(self, bbox, output_path, tile_degrees=None, **kwargs): """ Write the layer to a path. Does not apply masks. @@ -76,6 +83,7 @@ def write(self, bbox, output_path, tile_degrees=None): file_names = [] for tile in tiles["geometry"]: data = self.aggregate.get_data(tile.bounds) + data = self.post_processing_adjustment(data, **kwargs) file_name = f"{output_path}/{uuid4()}.tif" file_names.append(file_name) @@ -83,6 +91,7 @@ def write(self, bbox, output_path, tile_degrees=None): write_layer(file_name, data) else: data = self.aggregate.get_data(bbox) + data = self.post_processing_adjustment(data, **kwargs) write_layer(output_path, data) @@ -301,21 +310,23 @@ def get_image_collection( return data - def write_layer(path, data): if isinstance(data, xr.DataArray): - # for rasters, need to write to locally first then copy to cloud storage - if path.startswith("s3://"): - tmp_path = f"{uuid4()}.tif" - data.rio.to_raster(raster_path=tmp_path, driver="COG") - - s3 = boto3.client('s3') - s3.upload_file(tmp_path, path.split('/')[2], '/'.join(path.split('/')[3:])) - - os.remove(tmp_path) - else: - data.rio.to_raster(raster_path=path, driver="COG") + write_dataarray(path, data) elif isinstance(data, gpd.GeoDataFrame): data.to_file(path, driver="GeoJSON") else: - raise NotImplementedError("Can only write DataArray or GeoDataFrame") + raise NotImplementedError("Can only write DataArray, Dataset, or GeoDataFrame") + +def write_dataarray(path, data): + # for rasters, need to write to locally first then copy to cloud storage + if path.startswith("s3://"): + tmp_path = f"{uuid4()}.tif" + data.rio.to_raster(raster_path=tmp_path, driver="COG") + + s3 = boto3.client('s3') + s3.upload_file(tmp_path, path.split('/')[2], '/'.join(path.split('/')[3:])) + + os.remove(tmp_path) + else: + data.rio.to_raster(raster_path=path, driver="COG") diff --git a/city_metrix/layers/ndvi_sentinel2_gee.py b/city_metrix/layers/ndvi_sentinel2_gee.py new file mode 100644 index 0000000..3ab36c0 --- /dev/null +++ b/city_metrix/layers/ndvi_sentinel2_gee.py @@ -0,0 +1,65 @@ +import ee +from tools.xarray_tools import convert_ratio_to_percentage +from .layer import Layer, get_image_collection + +class NdviSentinel2(Layer): + """" + NDVI = Sentinel-2 Normalized Difference Vegetation Index + param: year: The satellite imaging year. + return: a rioxarray-format DataArray + Author of associated Jupyter notebook: Ted.Wong@wri.org + Notebook: https://github.com/wri/cities-cities4forests-indicators/blob/dev-eric/scripts/extract-VegetationCover.ipynb + Reference: https://en.wikipedia.org/wiki/Normalized_difference_vegetation_index + """ + def __init__(self, year=None, **kwargs): + super().__init__(**kwargs) + self.year = year + + def get_data(self, bbox): + if self.year is None: + raise Exception('NdviSentinel2.get_data() requires a year value') + + start_date = "%s-01-01" % self.year + end_date = "%s-12-31" % self.year + + # Compute NDVI for each image + def calculate_ndvi(image): + ndvi = (image + .normalizedDifference(['B8', 'B4']) + .rename('NDVI')) + return image.addBands(ndvi) + + s2 = ee.ImageCollection("COPERNICUS/S2_HARMONIZED") + ndvi = (s2 + .filterBounds(ee.Geometry.BBox(*bbox)) + .filterDate(start_date, end_date) + .map(calculate_ndvi) + .select('NDVI') + ) + + ndvi_mosaic = ndvi.qualityMosaic('NDVI') + + ic = ee.ImageCollection(ndvi_mosaic) + ndvi_data = get_image_collection(ic, bbox, 10, "NDVI") + + xdata = ndvi_data.to_dataarray() + + return xdata + + def post_processing_adjustment(self, data, ndvi_threshold=0.4, convert_to_percentage=True, **kwargs): + """ + Applies the standard post-processing adjustment used for rendering of NDVI including masking + to a threshold and conversion to percentage values. + :param ndvi_threshold: (float) minimum threshold for keeping values + :param convert_to_percentage: (bool) controls whether NDVI values are converted to a percentage + :return: A rioxarray-format DataArray + """ + # Remove values less than the specified threshold + if ndvi_threshold is not None: + data = data.where(data >= ndvi_threshold) + + # Convert to percentage in byte data_type + if convert_to_percentage is True: + data = convert_ratio_to_percentage(data) + + return data diff --git a/city_metrix/layers/open_street_map.py b/city_metrix/layers/open_street_map.py index 8a32936..a56ff6b 100644 --- a/city_metrix/layers/open_street_map.py +++ b/city_metrix/layers/open_street_map.py @@ -54,3 +54,10 @@ def get_data(self, bbox): osm_feature = osm_feature.reset_index()[keep_col] return osm_feature + + def write(self, output_path): + self.data['bbox'] = str(self.data.total_bounds) + self.data['osm_class'] = str(self.osm_class.value) + + # Write to a GeoJSON file + self.data.to_file(output_path, driver='GeoJSON') diff --git a/city_metrix/layers/sentinel_2_level_2.py b/city_metrix/layers/sentinel_2_level_2.py index a7ae944..bc17d6e 100644 --- a/city_metrix/layers/sentinel_2_level_2.py +++ b/city_metrix/layers/sentinel_2_level_2.py @@ -1,9 +1,10 @@ import odc.stac import pystac_client +from jupyterlab.utils import deprecated from .layer import Layer - +@deprecated class Sentinel2Level2(Layer): def __init__(self, bands, start_date="2013-01-01", end_date="2023-01-01", **kwargs): super().__init__(**kwargs) @@ -50,4 +51,6 @@ def get_data(self, bbox): cloud_masked = s2.where(s2 != 0).where(s2.scl != 3).where(s2.scl != 8).where(s2.scl != 9).where( s2.scl != 10) + # TODO: Determine how to output as an xarray + return cloud_masked.drop_vars("scl") diff --git a/tests/resources/bbox_constants.py b/tests/resources/bbox_constants.py index 9f20f53..9aaf8ad 100644 --- a/tests/resources/bbox_constants.py +++ b/tests/resources/bbox_constants.py @@ -1,9 +1,22 @@ # File defines bboxes using in the test code -BBOX_BR_LAURO_DE_FREITAS_1 = ( +BBOX_BRA_LAURO_DE_FREITAS_1 = ( -38.35530428121955, -12.821710300686393, -38.33813814352424, -12.80363249765361, -) \ No newline at end of file +) + +BBOX_BRA_SALVADOR_ADM4 = ( + -38.647320153390055, + -13.01748678217598787, + -38.3041637148564007, + -12.75607703449720631 +) + +BBOX_SMALL_TEST = ( + -38.43864,-12.97987, + -38.39993,-12.93239 +) + diff --git a/tests/resources/layer_dumps_for_br_lauro_de_freitas/conftest.py b/tests/resources/layer_dumps_for_br_lauro_de_freitas/conftest.py new file mode 100644 index 0000000..c288548 --- /dev/null +++ b/tests/resources/layer_dumps_for_br_lauro_de_freitas/conftest.py @@ -0,0 +1,67 @@ +import tempfile +import pytest +import os +import shutil +from collections import namedtuple + +from tests.resources.bbox_constants import BBOX_BRA_LAURO_DE_FREITAS_1 +from tools.general_tools import create_target_folder, is_valid_path + +# RUN_DUMPS is the master control for whether the writes and tests are executed +# Setting RUN_DUMPS to True turns on code execution. +# Values should normally be set to False in order to avoid unnecessary execution. +RUN_DUMPS = True + +# Specify None to write to a temporary default folder otherwise specify a valid custom target path. +CUSTOM_DUMP_DIRECTORY = None + +# Both the tests and QGIS file are implemented for the same bounding box in Brazil. +COUNTRY_CODE_FOR_BBOX = 'BRA' +BBOX = BBOX_BRA_LAURO_DE_FREITAS_1 + +def pytest_configure(config): + qgis_project_file = 'layers_for_br_lauro_de_freitas.qgz' + + source_folder = os.path.dirname(__file__) + target_folder = get_target_folder_path() + create_target_folder(target_folder, True) + + source_qgis_file = os.path.join(source_folder, qgis_project_file) + target_qgis_file = os.path.join(target_folder, qgis_project_file) + shutil.copyfile(source_qgis_file, target_qgis_file) + + print("\n\033[93m QGIS project file and layer files written to folder %s.\033[0m\n" % target_folder) + +@pytest.fixture +def target_folder(): + return get_target_folder_path() + +@pytest.fixture +def bbox_info(): + bbox = namedtuple('bbox', ['bounds', 'country']) + bbox_instance = bbox(bounds=BBOX, country=COUNTRY_CODE_FOR_BBOX) + return bbox_instance + +def get_target_folder_path(): + if CUSTOM_DUMP_DIRECTORY is not None: + if is_valid_path(CUSTOM_DUMP_DIRECTORY) is False: + raise ValueError(f"The custom path '%s' is not valid. Stopping." % CUSTOM_DUMP_DIRECTORY) + else: + output_dir = CUSTOM_DUMP_DIRECTORY + else: + sub_directory_name = 'test_result_tif_files' + scratch_dir_name = tempfile.TemporaryDirectory(ignore_cleanup_errors=True).name + dir_path = os.path.dirname(scratch_dir_name) + output_dir = os.path.join(dir_path, sub_directory_name) + + return output_dir + +def prep_output_path(output_folder, file_name): + file_path = os.path.join(output_folder, file_name) + if os.path.isfile(file_path): + os.remove(file_path) + return file_path + +def verify_file_is_populated(file_path): + is_populated = True if os.path.getsize(file_path) > 0 else False + return is_populated diff --git a/tests/resources/layer_dumps_for_br_lauro_de_freitas/layers_for_br_lauro_de_freitas.qgs b/tests/resources/layer_dumps_for_br_lauro_de_freitas/layers_for_br_lauro_de_freitas.qgs deleted file mode 100644 index 999bd52..0000000 --- a/tests/resources/layer_dumps_for_br_lauro_de_freitas/layers_for_br_lauro_de_freitas.qgs +++ /dev/null @@ -1,5175 +0,0 @@ - - - - - - - - - PROJCRS["WGS 84 / UTM zone 24S",BASEGEOGCRS["WGS 84",ENSEMBLE["World Geodetic System 1984 ensemble",MEMBER["World Geodetic System 1984 (Transit)"],MEMBER["World Geodetic System 1984 (G730)"],MEMBER["World Geodetic System 1984 (G873)"],MEMBER["World Geodetic System 1984 (G1150)"],MEMBER["World Geodetic System 1984 (G1674)"],MEMBER["World Geodetic System 1984 (G1762)"],MEMBER["World Geodetic System 1984 (G2139)"],ELLIPSOID["WGS 84",6378137,298.257223563,LENGTHUNIT["metre",1]],ENSEMBLEACCURACY[2.0]],PRIMEM["Greenwich",0,ANGLEUNIT["degree",0.0174532925199433]],ID["EPSG",4326]],CONVERSION["UTM zone 24S",METHOD["Transverse Mercator",ID["EPSG",9807]],PARAMETER["Latitude of natural origin",0,ANGLEUNIT["degree",0.0174532925199433],ID["EPSG",8801]],PARAMETER["Longitude of natural origin",-39,ANGLEUNIT["degree",0.0174532925199433],ID["EPSG",8802]],PARAMETER["Scale factor at natural origin",0.9996,SCALEUNIT["unity",1],ID["EPSG",8805]],PARAMETER["False easting",500000,LENGTHUNIT["metre",1],ID["EPSG",8806]],PARAMETER["False northing",10000000,LENGTHUNIT["metre",1],ID["EPSG",8807]]],CS[Cartesian,2],AXIS["(E)",east,ORDER[1],LENGTHUNIT["metre",1]],AXIS["(N)",north,ORDER[2],LENGTHUNIT["metre",1]],USAGE[SCOPE["Navigation and medium accuracy spatial referencing."],AREA["Between 42°W and 36°W, southern hemisphere between 80°S and equator, onshore and offshore. Brazil. South Georgia and the South Sandwich Islands."],BBOX[-80,-42,0,-36]],ID["EPSG",32724]] - +proj=utm +zone=24 +south +datum=WGS84 +units=m +no_defs - 3174 - 32724 - EPSG:32724 - WGS 84 / UTM zone 24S - utm - EPSG:7030 - false - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - land_surface_temperature_e26fbad7_3504_4b45_ad36_9231bc6ede9e - Google_Maps_814dce96_1bde_4a2c_aaff_51c3cf786817 - average_net_building_height_cb2fbeee_22a5_4862_a170_b5b97d8c2359 - esa_world_cover_913f3cfa_418a_4705_9ed8_cb4d0042455b - high_land_surface_temperature_b6aba51a_6624_45f4_a804_8947316deabd - albedo_63933ce5_ee3b_4891_bba3_3e6f2b632a65 - alos_dsm_afabef96_7acf_4ba8_9326_3fe0c486e868 - smart_surface_lulc_3c04a4e2_2352_49bc_9c1a_d8c9b22055ce - tree_canopy_height_7902b00d_e052_4c25_86e2_f465a978f4fc - tree_cover_1ccee586_17ee_4e1b_aef7_5cfa559b5b05 - urban_land_use_2b9d2c0b_7689_489d_ad0d_7317d9d15faa - world_pop_65d76980_e93c_4f74_84cb_3a2594b36255 - nasa_dem_68846b24_ab9e_4975_a548_9ea4c03bfe8d - natural_areas_fd87fec5_4965_46d4_9f49_3a87327de975 - open_buildings_0d3930fb_7530_4657_bde1_bf40431f46a7 - overture_buildings_36036eef_d21e_4838_8914_f2ebad1d5c68 - Google_Satellite_d2a2ce31_6540_4c56_998b_61c1ed81cf7f - - - - - - - - - - - - meters - - 569483.20351014251355082 - 8582439.30899122543632984 - 572298.77636430819984525 - 8584530.33974483050405979 - - 0 - - - PROJCRS["WGS 84 / UTM zone 24S",BASEGEOGCRS["WGS 84",ENSEMBLE["World Geodetic System 1984 ensemble",MEMBER["World Geodetic System 1984 (Transit)"],MEMBER["World Geodetic System 1984 (G730)"],MEMBER["World Geodetic System 1984 (G873)"],MEMBER["World Geodetic System 1984 (G1150)"],MEMBER["World Geodetic System 1984 (G1674)"],MEMBER["World Geodetic System 1984 (G1762)"],MEMBER["World Geodetic System 1984 (G2139)"],ELLIPSOID["WGS 84",6378137,298.257223563,LENGTHUNIT["metre",1]],ENSEMBLEACCURACY[2.0]],PRIMEM["Greenwich",0,ANGLEUNIT["degree",0.0174532925199433]],ID["EPSG",4326]],CONVERSION["UTM zone 24S",METHOD["Transverse Mercator",ID["EPSG",9807]],PARAMETER["Latitude of natural origin",0,ANGLEUNIT["degree",0.0174532925199433],ID["EPSG",8801]],PARAMETER["Longitude of natural origin",-39,ANGLEUNIT["degree",0.0174532925199433],ID["EPSG",8802]],PARAMETER["Scale factor at natural origin",0.9996,SCALEUNIT["unity",1],ID["EPSG",8805]],PARAMETER["False easting",500000,LENGTHUNIT["metre",1],ID["EPSG",8806]],PARAMETER["False northing",10000000,LENGTHUNIT["metre",1],ID["EPSG",8807]]],CS[Cartesian,2],AXIS["(E)",east,ORDER[1],LENGTHUNIT["metre",1]],AXIS["(N)",north,ORDER[2],LENGTHUNIT["metre",1]],USAGE[SCOPE["Navigation and medium accuracy spatial referencing."],AREA["Between 42°W and 36°W, southern hemisphere between 80°S and equator, onshore and offshore. Brazil. South Georgia and the South Sandwich Islands."],BBOX[-80,-42,0,-36]],ID["EPSG",32724]] - +proj=utm +zone=24 +south +datum=WGS84 +units=m +no_defs - 3174 - 32724 - EPSG:32724 - WGS 84 / UTM zone 24S - utm - EPSG:7030 - false - - - 0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Annotations_fcde2ed1_e785_4cb5_af26_e512b670ceae - - - - - Annotations - - - PROJCRS["WGS 84 / UTM zone 24S",BASEGEOGCRS["WGS 84",ENSEMBLE["World Geodetic System 1984 ensemble",MEMBER["World Geodetic System 1984 (Transit)"],MEMBER["World Geodetic System 1984 (G730)"],MEMBER["World Geodetic System 1984 (G873)"],MEMBER["World Geodetic System 1984 (G1150)"],MEMBER["World Geodetic System 1984 (G1674)"],MEMBER["World Geodetic System 1984 (G1762)"],MEMBER["World Geodetic System 1984 (G2139)"],ELLIPSOID["WGS 84",6378137,298.257223563,LENGTHUNIT["metre",1]],ENSEMBLEACCURACY[2.0]],PRIMEM["Greenwich",0,ANGLEUNIT["degree",0.0174532925199433]],ID["EPSG",4326]],CONVERSION["UTM zone 24S",METHOD["Transverse Mercator",ID["EPSG",9807]],PARAMETER["Latitude of natural origin",0,ANGLEUNIT["degree",0.0174532925199433],ID["EPSG",8801]],PARAMETER["Longitude of natural origin",-39,ANGLEUNIT["degree",0.0174532925199433],ID["EPSG",8802]],PARAMETER["Scale factor at natural origin",0.9996,SCALEUNIT["unity",1],ID["EPSG",8805]],PARAMETER["False easting",500000,LENGTHUNIT["metre",1],ID["EPSG",8806]],PARAMETER["False northing",10000000,LENGTHUNIT["metre",1],ID["EPSG",8807]]],CS[Cartesian,2],AXIS["(E)",east,ORDER[1],LENGTHUNIT["metre",1]],AXIS["(N)",north,ORDER[2],LENGTHUNIT["metre",1]],USAGE[SCOPE["Navigation and medium accuracy spatial referencing."],AREA["Between 42°W and 36°W, southern hemisphere between 80°S and equator, onshore and offshore. Brazil. South Georgia and the South Sandwich Islands."],BBOX[-80,-42,0,-36]],ID["EPSG",32724]] - +proj=utm +zone=24 +south +datum=WGS84 +units=m +no_defs - 3174 - 32724 - EPSG:32724 - WGS 84 / UTM zone 24S - utm - EPSG:7030 - false - - - - - - - - - - - - - - - - - - 0 - 0 - - - - - false - - - - - - - 1 - 1 - 1 - 0 - - - - 1 - 0 - - - - - - -20037508.34278924390673637 - -20037508.34278924763202667 - 20037508.34278924390673637 - 20037508.34278924763202667 - - - -180 - -85.05112877980660357 - 179.99999999999997158 - 85.05112877980660357 - - Google_Maps_814dce96_1bde_4a2c_aaff_51c3cf786817 - crs=EPSG:3857&format&type=xyz&url=https://mt1.google.com/vt/lyrs%3Dm%26x%3D%7Bx%7D%26y%3D%7By%7D%26z%3D%7Bz%7D&zmax=19&zmin=0 - - - - Google Maps - - - PROJCRS["WGS 84 / Pseudo-Mercator",BASEGEOGCRS["WGS 84",ENSEMBLE["World Geodetic System 1984 ensemble",MEMBER["World Geodetic System 1984 (Transit)"],MEMBER["World Geodetic System 1984 (G730)"],MEMBER["World Geodetic System 1984 (G873)"],MEMBER["World Geodetic System 1984 (G1150)"],MEMBER["World Geodetic System 1984 (G1674)"],MEMBER["World Geodetic System 1984 (G1762)"],MEMBER["World Geodetic System 1984 (G2139)"],ELLIPSOID["WGS 84",6378137,298.257223563,LENGTHUNIT["metre",1]],ENSEMBLEACCURACY[2.0]],PRIMEM["Greenwich",0,ANGLEUNIT["degree",0.0174532925199433]],ID["EPSG",4326]],CONVERSION["Popular Visualisation Pseudo-Mercator",METHOD["Popular Visualisation Pseudo Mercator",ID["EPSG",1024]],PARAMETER["Latitude of natural origin",0,ANGLEUNIT["degree",0.0174532925199433],ID["EPSG",8801]],PARAMETER["Longitude of natural origin",0,ANGLEUNIT["degree",0.0174532925199433],ID["EPSG",8802]],PARAMETER["False easting",0,LENGTHUNIT["metre",1],ID["EPSG",8806]],PARAMETER["False northing",0,LENGTHUNIT["metre",1],ID["EPSG",8807]]],CS[Cartesian,2],AXIS["easting (X)",east,ORDER[1],LENGTHUNIT["metre",1]],AXIS["northing (Y)",north,ORDER[2],LENGTHUNIT["metre",1]],USAGE[SCOPE["Web mapping and visualisation."],AREA["World between 85.06°S and 85.06°N."],BBOX[-85.06,-180,85.06,180]],ID["EPSG",3857]] - +proj=merc +a=6378137 +b=6378137 +lat_ts=0 +lon_0=0 +x_0=0 +y_0=0 +k=1 +units=m +nadgrids=@null +wktext +no_defs - 3857 - 3857 - EPSG:3857 - WGS 84 / Pseudo-Mercator - merc - EPSG:7030 - false - - - - - - - dataset - - - - - - - - - - - 0 - 0 - - - - - false - - - - - wms - - - - - - - - - 1 - 1 - 1 - 0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - None - WholeRaster - Estimated - 0.02 - 0.98 - 2 - - - - - - resamplingFilter - - 0 - - - - -20037508.34278924390673637 - -20037508.34278924763202667 - 20037508.34278924390673637 - 20037508.34278924763202667 - - - -180 - -85.05112877980660357 - 179.99999999999997158 - 85.05112877980660357 - - Google_Satellite_d2a2ce31_6540_4c56_998b_61c1ed81cf7f - crs=EPSG:3857&format&type=xyz&url=https://mt1.google.com/vt/lyrs%3Ds%26x%3D%7Bx%7D%26y%3D%7By%7D%26z%3D%7Bz%7D&zmax=19&zmin=0 - - - - Google Satellite - - - PROJCRS["WGS 84 / Pseudo-Mercator",BASEGEOGCRS["WGS 84",ENSEMBLE["World Geodetic System 1984 ensemble",MEMBER["World Geodetic System 1984 (Transit)"],MEMBER["World Geodetic System 1984 (G730)"],MEMBER["World Geodetic System 1984 (G873)"],MEMBER["World Geodetic System 1984 (G1150)"],MEMBER["World Geodetic System 1984 (G1674)"],MEMBER["World Geodetic System 1984 (G1762)"],MEMBER["World Geodetic System 1984 (G2139)"],ELLIPSOID["WGS 84",6378137,298.257223563,LENGTHUNIT["metre",1]],ENSEMBLEACCURACY[2.0]],PRIMEM["Greenwich",0,ANGLEUNIT["degree",0.0174532925199433]],ID["EPSG",4326]],CONVERSION["Popular Visualisation Pseudo-Mercator",METHOD["Popular Visualisation Pseudo Mercator",ID["EPSG",1024]],PARAMETER["Latitude of natural origin",0,ANGLEUNIT["degree",0.0174532925199433],ID["EPSG",8801]],PARAMETER["Longitude of natural origin",0,ANGLEUNIT["degree",0.0174532925199433],ID["EPSG",8802]],PARAMETER["False easting",0,LENGTHUNIT["metre",1],ID["EPSG",8806]],PARAMETER["False northing",0,LENGTHUNIT["metre",1],ID["EPSG",8807]]],CS[Cartesian,2],AXIS["easting (X)",east,ORDER[1],LENGTHUNIT["metre",1]],AXIS["northing (Y)",north,ORDER[2],LENGTHUNIT["metre",1]],USAGE[SCOPE["Web mapping and visualisation."],AREA["World between 85.06°S and 85.06°N."],BBOX[-85.06,-180,85.06,180]],ID["EPSG",3857]] - +proj=merc +a=6378137 +b=6378137 +lat_ts=0 +lon_0=0 +x_0=0 +y_0=0 +k=1 +units=m +nadgrids=@null +wktext +no_defs - 3857 - 3857 - EPSG:3857 - WGS 84 / Pseudo-Mercator - merc - EPSG:7030 - false - - - - - - - dataset - - - - - - - - - - - 0 - 0 - - - - - false - - - - - wms - - - - - - - - - 1 - 1 - 1 - 0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - None - WholeRaster - Estimated - 0.02 - 0.98 - 2 - - - - - - resamplingFilter - - 0 - - - - 569962.59035570570267737 - 8582493.1620953194797039 - 571832.59035570570267737 - 8584483.1620953194797039 - - - -38.35535003588469039 - -12.82171043979659331 - -38.33807328503521461 - -12.80367359560521656 - - albedo_63933ce5_ee3b_4891_bba3_3e6f2b632a65 - ./albedo.tif - - - - albedo - - - PROJCRS["WGS 84 / UTM zone 24S",BASEGEOGCRS["WGS 84",ENSEMBLE["World Geodetic System 1984 ensemble",MEMBER["World Geodetic System 1984 (Transit)"],MEMBER["World Geodetic System 1984 (G730)"],MEMBER["World Geodetic System 1984 (G873)"],MEMBER["World Geodetic System 1984 (G1150)"],MEMBER["World Geodetic System 1984 (G1674)"],MEMBER["World Geodetic System 1984 (G1762)"],MEMBER["World Geodetic System 1984 (G2139)"],ELLIPSOID["WGS 84",6378137,298.257223563,LENGTHUNIT["metre",1]],ENSEMBLEACCURACY[2.0]],PRIMEM["Greenwich",0,ANGLEUNIT["degree",0.0174532925199433]],ID["EPSG",4326]],CONVERSION["UTM zone 24S",METHOD["Transverse Mercator",ID["EPSG",9807]],PARAMETER["Latitude of natural origin",0,ANGLEUNIT["degree",0.0174532925199433],ID["EPSG",8801]],PARAMETER["Longitude of natural origin",-39,ANGLEUNIT["degree",0.0174532925199433],ID["EPSG",8802]],PARAMETER["Scale factor at natural origin",0.9996,SCALEUNIT["unity",1],ID["EPSG",8805]],PARAMETER["False easting",500000,LENGTHUNIT["metre",1],ID["EPSG",8806]],PARAMETER["False northing",10000000,LENGTHUNIT["metre",1],ID["EPSG",8807]]],CS[Cartesian,2],AXIS["(E)",east,ORDER[1],LENGTHUNIT["metre",1]],AXIS["(N)",north,ORDER[2],LENGTHUNIT["metre",1]],USAGE[SCOPE["Navigation and medium accuracy spatial referencing."],AREA["Between 42°W and 36°W, southern hemisphere between 80°S and equator, onshore and offshore. Brazil. South Georgia and the South Sandwich Islands."],BBOX[-80,-42,0,-36]],ID["EPSG",32724]] - +proj=utm +zone=24 +south +datum=WGS84 +units=m +no_defs - 3174 - 32724 - EPSG:32724 - WGS 84 / UTM zone 24S - utm - EPSG:7030 - false - - - - - - - dataset - - - - - - - - - - - - - - - - - - PROJCRS["WGS 84 / UTM zone 24S",BASEGEOGCRS["WGS 84",ENSEMBLE["World Geodetic System 1984 ensemble",MEMBER["World Geodetic System 1984 (Transit)"],MEMBER["World Geodetic System 1984 (G730)"],MEMBER["World Geodetic System 1984 (G873)"],MEMBER["World Geodetic System 1984 (G1150)"],MEMBER["World Geodetic System 1984 (G1674)"],MEMBER["World Geodetic System 1984 (G1762)"],MEMBER["World Geodetic System 1984 (G2139)"],ELLIPSOID["WGS 84",6378137,298.257223563,LENGTHUNIT["metre",1]],ENSEMBLEACCURACY[2.0]],PRIMEM["Greenwich",0,ANGLEUNIT["degree",0.0174532925199433]],ID["EPSG",4326]],CONVERSION["UTM zone 24S",METHOD["Transverse Mercator",ID["EPSG",9807]],PARAMETER["Latitude of natural origin",0,ANGLEUNIT["degree",0.0174532925199433],ID["EPSG",8801]],PARAMETER["Longitude of natural origin",-39,ANGLEUNIT["degree",0.0174532925199433],ID["EPSG",8802]],PARAMETER["Scale factor at natural origin",0.9996,SCALEUNIT["unity",1],ID["EPSG",8805]],PARAMETER["False easting",500000,LENGTHUNIT["metre",1],ID["EPSG",8806]],PARAMETER["False northing",10000000,LENGTHUNIT["metre",1],ID["EPSG",8807]]],CS[Cartesian,2],AXIS["(E)",east,ORDER[1],LENGTHUNIT["metre",1]],AXIS["(N)",north,ORDER[2],LENGTHUNIT["metre",1]],USAGE[SCOPE["Navigation and medium accuracy spatial referencing."],AREA["Between 42°W and 36°W, southern hemisphere between 80°S and equator, onshore and offshore. Brazil. South Georgia and the South Sandwich Islands."],BBOX[-80,-42,0,-36]],ID["EPSG",32724]] - +proj=utm +zone=24 +south +datum=WGS84 +units=m +no_defs - 3174 - 32724 - EPSG:32724 - WGS 84 / UTM zone 24S - utm - EPSG:7030 - false - - - - - - - - - - - - - gdal - - - - - - - - - 1 - 1 - 1 - 0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - MinMax - WholeRaster - Estimated - 0.02 - 0.98 - 2 - - - - - - - - - - - - - - - - - - - - - - - - - - - - resamplingFilter - - 0 - - - - 569962.59035570570267737 - 8582493.1620953194797039 - 571822.59035570570267737 - 8584473.1620953194797039 - - - -38.35534980613592637 - -12.82171043979659331 - -38.3381654292332712 - -12.80376424953941772 - - alos_dsm_afabef96_7acf_4ba8_9326_3fe0c486e868 - ./alos_dsm.tif - - - - alos_dsm - - - PROJCRS["WGS 84 / UTM zone 24S",BASEGEOGCRS["WGS 84",ENSEMBLE["World Geodetic System 1984 ensemble",MEMBER["World Geodetic System 1984 (Transit)"],MEMBER["World Geodetic System 1984 (G730)"],MEMBER["World Geodetic System 1984 (G873)"],MEMBER["World Geodetic System 1984 (G1150)"],MEMBER["World Geodetic System 1984 (G1674)"],MEMBER["World Geodetic System 1984 (G1762)"],MEMBER["World Geodetic System 1984 (G2139)"],ELLIPSOID["WGS 84",6378137,298.257223563,LENGTHUNIT["metre",1]],ENSEMBLEACCURACY[2.0]],PRIMEM["Greenwich",0,ANGLEUNIT["degree",0.0174532925199433]],ID["EPSG",4326]],CONVERSION["UTM zone 24S",METHOD["Transverse Mercator",ID["EPSG",9807]],PARAMETER["Latitude of natural origin",0,ANGLEUNIT["degree",0.0174532925199433],ID["EPSG",8801]],PARAMETER["Longitude of natural origin",-39,ANGLEUNIT["degree",0.0174532925199433],ID["EPSG",8802]],PARAMETER["Scale factor at natural origin",0.9996,SCALEUNIT["unity",1],ID["EPSG",8805]],PARAMETER["False easting",500000,LENGTHUNIT["metre",1],ID["EPSG",8806]],PARAMETER["False northing",10000000,LENGTHUNIT["metre",1],ID["EPSG",8807]]],CS[Cartesian,2],AXIS["(E)",east,ORDER[1],LENGTHUNIT["metre",1]],AXIS["(N)",north,ORDER[2],LENGTHUNIT["metre",1]],USAGE[SCOPE["Navigation and medium accuracy spatial referencing."],AREA["Between 42°W and 36°W, southern hemisphere between 80°S and equator, onshore and offshore. Brazil. South Georgia and the South Sandwich Islands."],BBOX[-80,-42,0,-36]],ID["EPSG",32724]] - +proj=utm +zone=24 +south +datum=WGS84 +units=m +no_defs - 3174 - 32724 - EPSG:32724 - WGS 84 / UTM zone 24S - utm - EPSG:7030 - false - - - - - - - dataset - - - - - - - - - - - - - - - - - - PROJCRS["WGS 84 / UTM zone 24S",BASEGEOGCRS["WGS 84",ENSEMBLE["World Geodetic System 1984 ensemble",MEMBER["World Geodetic System 1984 (Transit)"],MEMBER["World Geodetic System 1984 (G730)"],MEMBER["World Geodetic System 1984 (G873)"],MEMBER["World Geodetic System 1984 (G1150)"],MEMBER["World Geodetic System 1984 (G1674)"],MEMBER["World Geodetic System 1984 (G1762)"],MEMBER["World Geodetic System 1984 (G2139)"],ELLIPSOID["WGS 84",6378137,298.257223563,LENGTHUNIT["metre",1]],ENSEMBLEACCURACY[2.0]],PRIMEM["Greenwich",0,ANGLEUNIT["degree",0.0174532925199433]],ID["EPSG",4326]],CONVERSION["UTM zone 24S",METHOD["Transverse Mercator",ID["EPSG",9807]],PARAMETER["Latitude of natural origin",0,ANGLEUNIT["degree",0.0174532925199433],ID["EPSG",8801]],PARAMETER["Longitude of natural origin",-39,ANGLEUNIT["degree",0.0174532925199433],ID["EPSG",8802]],PARAMETER["Scale factor at natural origin",0.9996,SCALEUNIT["unity",1],ID["EPSG",8805]],PARAMETER["False easting",500000,LENGTHUNIT["metre",1],ID["EPSG",8806]],PARAMETER["False northing",10000000,LENGTHUNIT["metre",1],ID["EPSG",8807]]],CS[Cartesian,2],AXIS["(E)",east,ORDER[1],LENGTHUNIT["metre",1]],AXIS["(N)",north,ORDER[2],LENGTHUNIT["metre",1]],USAGE[SCOPE["Navigation and medium accuracy spatial referencing."],AREA["Between 42°W and 36°W, southern hemisphere between 80°S and equator, onshore and offshore. Brazil. South Georgia and the South Sandwich Islands."],BBOX[-80,-42,0,-36]],ID["EPSG",32724]] - +proj=utm +zone=24 +south +datum=WGS84 +units=m +no_defs - 3174 - 32724 - EPSG:32724 - WGS 84 / UTM zone 24S - utm - EPSG:7030 - false - - - - - - - - - - - - - gdal - - - - - - - - - 1 - 1 - 1 - 0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - MinMax - WholeRaster - Estimated - 0.02 - 0.98 - 2 - - - - - - - - - - - - - - - - - - - - - - - - - - - - resamplingFilter - - 0 - - - - 569962.59035570570267737 - 8582493.1620953194797039 - 571862.59035570570267737 - 8584493.1620953194797039 - - - -38.35535026563169225 - -12.82171043979659331 - -38.33779685245188773 - -12.80358247852375619 - - average_net_building_height_cb2fbeee_22a5_4862_a170_b5b97d8c2359 - ./average_net_building_height.tif - - - - average_net_building_height - - - PROJCRS["WGS 84 / UTM zone 24S",BASEGEOGCRS["WGS 84",ENSEMBLE["World Geodetic System 1984 ensemble",MEMBER["World Geodetic System 1984 (Transit)"],MEMBER["World Geodetic System 1984 (G730)"],MEMBER["World Geodetic System 1984 (G873)"],MEMBER["World Geodetic System 1984 (G1150)"],MEMBER["World Geodetic System 1984 (G1674)"],MEMBER["World Geodetic System 1984 (G1762)"],MEMBER["World Geodetic System 1984 (G2139)"],ELLIPSOID["WGS 84",6378137,298.257223563,LENGTHUNIT["metre",1]],ENSEMBLEACCURACY[2.0]],PRIMEM["Greenwich",0,ANGLEUNIT["degree",0.0174532925199433]],ID["EPSG",4326]],CONVERSION["UTM zone 24S",METHOD["Transverse Mercator",ID["EPSG",9807]],PARAMETER["Latitude of natural origin",0,ANGLEUNIT["degree",0.0174532925199433],ID["EPSG",8801]],PARAMETER["Longitude of natural origin",-39,ANGLEUNIT["degree",0.0174532925199433],ID["EPSG",8802]],PARAMETER["Scale factor at natural origin",0.9996,SCALEUNIT["unity",1],ID["EPSG",8805]],PARAMETER["False easting",500000,LENGTHUNIT["metre",1],ID["EPSG",8806]],PARAMETER["False northing",10000000,LENGTHUNIT["metre",1],ID["EPSG",8807]]],CS[Cartesian,2],AXIS["(E)",east,ORDER[1],LENGTHUNIT["metre",1]],AXIS["(N)",north,ORDER[2],LENGTHUNIT["metre",1]],USAGE[SCOPE["Navigation and medium accuracy spatial referencing."],AREA["Between 42°W and 36°W, southern hemisphere between 80°S and equator, onshore and offshore. Brazil. South Georgia and the South Sandwich Islands."],BBOX[-80,-42,0,-36]],ID["EPSG",32724]] - +proj=utm +zone=24 +south +datum=WGS84 +units=m +no_defs - 3174 - 32724 - EPSG:32724 - WGS 84 / UTM zone 24S - utm - EPSG:7030 - false - - - - - - - dataset - - - - - - - - - - - - - - - - - - PROJCRS["WGS 84 / UTM zone 24S",BASEGEOGCRS["WGS 84",ENSEMBLE["World Geodetic System 1984 ensemble",MEMBER["World Geodetic System 1984 (Transit)"],MEMBER["World Geodetic System 1984 (G730)"],MEMBER["World Geodetic System 1984 (G873)"],MEMBER["World Geodetic System 1984 (G1150)"],MEMBER["World Geodetic System 1984 (G1674)"],MEMBER["World Geodetic System 1984 (G1762)"],MEMBER["World Geodetic System 1984 (G2139)"],ELLIPSOID["WGS 84",6378137,298.257223563,LENGTHUNIT["metre",1]],ENSEMBLEACCURACY[2.0]],PRIMEM["Greenwich",0,ANGLEUNIT["degree",0.0174532925199433]],ID["EPSG",4326]],CONVERSION["UTM zone 24S",METHOD["Transverse Mercator",ID["EPSG",9807]],PARAMETER["Latitude of natural origin",0,ANGLEUNIT["degree",0.0174532925199433],ID["EPSG",8801]],PARAMETER["Longitude of natural origin",-39,ANGLEUNIT["degree",0.0174532925199433],ID["EPSG",8802]],PARAMETER["Scale factor at natural origin",0.9996,SCALEUNIT["unity",1],ID["EPSG",8805]],PARAMETER["False easting",500000,LENGTHUNIT["metre",1],ID["EPSG",8806]],PARAMETER["False northing",10000000,LENGTHUNIT["metre",1],ID["EPSG",8807]]],CS[Cartesian,2],AXIS["(E)",east,ORDER[1],LENGTHUNIT["metre",1]],AXIS["(N)",north,ORDER[2],LENGTHUNIT["metre",1]],USAGE[SCOPE["Navigation and medium accuracy spatial referencing."],AREA["Between 42°W and 36°W, southern hemisphere between 80°S and equator, onshore and offshore. Brazil. South Georgia and the South Sandwich Islands."],BBOX[-80,-42,0,-36]],ID["EPSG",32724]] - +proj=utm +zone=24 +south +datum=WGS84 +units=m +no_defs - 3174 - 32724 - EPSG:32724 - WGS 84 / UTM zone 24S - utm - EPSG:7030 - false - - - - - - - - - - - - - gdal - - - - - - - - - 1 - 1 - 1 - 0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - MinMax - WholeRaster - Estimated - 0.02 - 0.98 - 2 - - - - - - - - - - - - - - - - - - - - - - - - - - - - resamplingFilter - - 0 - - - - 569962.59035570570267737 - 8582493.1620953194797039 - 571832.59035570570267737 - 8584483.1620953194797039 - - - -38.35535003588469039 - -12.82171043979659331 - -38.33807328503521461 - -12.80367359560521656 - - esa_world_cover_913f3cfa_418a_4705_9ed8_cb4d0042455b - ./esa_world_cover.tif - - - - esa_world_cover - - - PROJCRS["WGS 84 / UTM zone 24S",BASEGEOGCRS["WGS 84",ENSEMBLE["World Geodetic System 1984 ensemble",MEMBER["World Geodetic System 1984 (Transit)"],MEMBER["World Geodetic System 1984 (G730)"],MEMBER["World Geodetic System 1984 (G873)"],MEMBER["World Geodetic System 1984 (G1150)"],MEMBER["World Geodetic System 1984 (G1674)"],MEMBER["World Geodetic System 1984 (G1762)"],MEMBER["World Geodetic System 1984 (G2139)"],ELLIPSOID["WGS 84",6378137,298.257223563,LENGTHUNIT["metre",1]],ENSEMBLEACCURACY[2.0]],PRIMEM["Greenwich",0,ANGLEUNIT["degree",0.0174532925199433]],ID["EPSG",4326]],CONVERSION["UTM zone 24S",METHOD["Transverse Mercator",ID["EPSG",9807]],PARAMETER["Latitude of natural origin",0,ANGLEUNIT["degree",0.0174532925199433],ID["EPSG",8801]],PARAMETER["Longitude of natural origin",-39,ANGLEUNIT["degree",0.0174532925199433],ID["EPSG",8802]],PARAMETER["Scale factor at natural origin",0.9996,SCALEUNIT["unity",1],ID["EPSG",8805]],PARAMETER["False easting",500000,LENGTHUNIT["metre",1],ID["EPSG",8806]],PARAMETER["False northing",10000000,LENGTHUNIT["metre",1],ID["EPSG",8807]]],CS[Cartesian,2],AXIS["(E)",east,ORDER[1],LENGTHUNIT["metre",1]],AXIS["(N)",north,ORDER[2],LENGTHUNIT["metre",1]],USAGE[SCOPE["Navigation and medium accuracy spatial referencing."],AREA["Between 42°W and 36°W, southern hemisphere between 80°S and equator, onshore and offshore. Brazil. South Georgia and the South Sandwich Islands."],BBOX[-80,-42,0,-36]],ID["EPSG",32724]] - +proj=utm +zone=24 +south +datum=WGS84 +units=m +no_defs - 3174 - 32724 - EPSG:32724 - WGS 84 / UTM zone 24S - utm - EPSG:7030 - false - - - - - - - dataset - - - - - - - - - - - - - - - - - - PROJCRS["WGS 84 / UTM zone 24S",BASEGEOGCRS["WGS 84",ENSEMBLE["World Geodetic System 1984 ensemble",MEMBER["World Geodetic System 1984 (Transit)"],MEMBER["World Geodetic System 1984 (G730)"],MEMBER["World Geodetic System 1984 (G873)"],MEMBER["World Geodetic System 1984 (G1150)"],MEMBER["World Geodetic System 1984 (G1674)"],MEMBER["World Geodetic System 1984 (G1762)"],MEMBER["World Geodetic System 1984 (G2139)"],ELLIPSOID["WGS 84",6378137,298.257223563,LENGTHUNIT["metre",1]],ENSEMBLEACCURACY[2.0]],PRIMEM["Greenwich",0,ANGLEUNIT["degree",0.0174532925199433]],ID["EPSG",4326]],CONVERSION["UTM zone 24S",METHOD["Transverse Mercator",ID["EPSG",9807]],PARAMETER["Latitude of natural origin",0,ANGLEUNIT["degree",0.0174532925199433],ID["EPSG",8801]],PARAMETER["Longitude of natural origin",-39,ANGLEUNIT["degree",0.0174532925199433],ID["EPSG",8802]],PARAMETER["Scale factor at natural origin",0.9996,SCALEUNIT["unity",1],ID["EPSG",8805]],PARAMETER["False easting",500000,LENGTHUNIT["metre",1],ID["EPSG",8806]],PARAMETER["False northing",10000000,LENGTHUNIT["metre",1],ID["EPSG",8807]]],CS[Cartesian,2],AXIS["(E)",east,ORDER[1],LENGTHUNIT["metre",1]],AXIS["(N)",north,ORDER[2],LENGTHUNIT["metre",1]],USAGE[SCOPE["Navigation and medium accuracy spatial referencing."],AREA["Between 42°W and 36°W, southern hemisphere between 80°S and equator, onshore and offshore. Brazil. South Georgia and the South Sandwich Islands."],BBOX[-80,-42,0,-36]],ID["EPSG",32724]] - +proj=utm +zone=24 +south +datum=WGS84 +units=m +no_defs - 3174 - 32724 - EPSG:32724 - WGS 84 / UTM zone 24S - utm - EPSG:7030 - false - - - - - - - - - - - - - gdal - - - - - - - - - 1 - 1 - 1 - 0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - MinMax - WholeRaster - Estimated - 0.02 - 0.98 - 2 - - - - - - - - - - - - - - - - - - - - - - - - - - - - resamplingFilter - - 0 - - - - 569962.59035570570267737 - 8582493.1620953194797039 - 571822.59035570570267737 - 8584473.1620953194797039 - - - -38.35534980613592637 - -12.82171043979659331 - -38.3381654292332712 - -12.80376424953941772 - - high_land_surface_temperature_b6aba51a_6624_45f4_a804_8947316deabd - ./high_land_surface_temperature.tif - - - - high_land_surface_temperature - - - PROJCRS["WGS 84 / UTM zone 24S",BASEGEOGCRS["WGS 84",ENSEMBLE["World Geodetic System 1984 ensemble",MEMBER["World Geodetic System 1984 (Transit)"],MEMBER["World Geodetic System 1984 (G730)"],MEMBER["World Geodetic System 1984 (G873)"],MEMBER["World Geodetic System 1984 (G1150)"],MEMBER["World Geodetic System 1984 (G1674)"],MEMBER["World Geodetic System 1984 (G1762)"],MEMBER["World Geodetic System 1984 (G2139)"],ELLIPSOID["WGS 84",6378137,298.257223563,LENGTHUNIT["metre",1]],ENSEMBLEACCURACY[2.0]],PRIMEM["Greenwich",0,ANGLEUNIT["degree",0.0174532925199433]],ID["EPSG",4326]],CONVERSION["UTM zone 24S",METHOD["Transverse Mercator",ID["EPSG",9807]],PARAMETER["Latitude of natural origin",0,ANGLEUNIT["degree",0.0174532925199433],ID["EPSG",8801]],PARAMETER["Longitude of natural origin",-39,ANGLEUNIT["degree",0.0174532925199433],ID["EPSG",8802]],PARAMETER["Scale factor at natural origin",0.9996,SCALEUNIT["unity",1],ID["EPSG",8805]],PARAMETER["False easting",500000,LENGTHUNIT["metre",1],ID["EPSG",8806]],PARAMETER["False northing",10000000,LENGTHUNIT["metre",1],ID["EPSG",8807]]],CS[Cartesian,2],AXIS["(E)",east,ORDER[1],LENGTHUNIT["metre",1]],AXIS["(N)",north,ORDER[2],LENGTHUNIT["metre",1]],USAGE[SCOPE["Navigation and medium accuracy spatial referencing."],AREA["Between 42°W and 36°W, southern hemisphere between 80°S and equator, onshore and offshore. Brazil. South Georgia and the South Sandwich Islands."],BBOX[-80,-42,0,-36]],ID["EPSG",32724]] - +proj=utm +zone=24 +south +datum=WGS84 +units=m +no_defs - 3174 - 32724 - EPSG:32724 - WGS 84 / UTM zone 24S - utm - EPSG:7030 - false - - - - - - - dataset - - - - - - - - - - - - - - - - - - PROJCRS["WGS 84 / UTM zone 24S",BASEGEOGCRS["WGS 84",ENSEMBLE["World Geodetic System 1984 ensemble",MEMBER["World Geodetic System 1984 (Transit)"],MEMBER["World Geodetic System 1984 (G730)"],MEMBER["World Geodetic System 1984 (G873)"],MEMBER["World Geodetic System 1984 (G1150)"],MEMBER["World Geodetic System 1984 (G1674)"],MEMBER["World Geodetic System 1984 (G1762)"],MEMBER["World Geodetic System 1984 (G2139)"],ELLIPSOID["WGS 84",6378137,298.257223563,LENGTHUNIT["metre",1]],ENSEMBLEACCURACY[2.0]],PRIMEM["Greenwich",0,ANGLEUNIT["degree",0.0174532925199433]],ID["EPSG",4326]],CONVERSION["UTM zone 24S",METHOD["Transverse Mercator",ID["EPSG",9807]],PARAMETER["Latitude of natural origin",0,ANGLEUNIT["degree",0.0174532925199433],ID["EPSG",8801]],PARAMETER["Longitude of natural origin",-39,ANGLEUNIT["degree",0.0174532925199433],ID["EPSG",8802]],PARAMETER["Scale factor at natural origin",0.9996,SCALEUNIT["unity",1],ID["EPSG",8805]],PARAMETER["False easting",500000,LENGTHUNIT["metre",1],ID["EPSG",8806]],PARAMETER["False northing",10000000,LENGTHUNIT["metre",1],ID["EPSG",8807]]],CS[Cartesian,2],AXIS["(E)",east,ORDER[1],LENGTHUNIT["metre",1]],AXIS["(N)",north,ORDER[2],LENGTHUNIT["metre",1]],USAGE[SCOPE["Navigation and medium accuracy spatial referencing."],AREA["Between 42°W and 36°W, southern hemisphere between 80°S and equator, onshore and offshore. Brazil. South Georgia and the South Sandwich Islands."],BBOX[-80,-42,0,-36]],ID["EPSG",32724]] - +proj=utm +zone=24 +south +datum=WGS84 +units=m +no_defs - 3174 - 32724 - EPSG:32724 - WGS 84 / UTM zone 24S - utm - EPSG:7030 - false - - - - - - - - - - - - - gdal - - - - - - - - - 1 - 1 - 1 - 0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - MinMax - WholeRaster - Estimated - 0.02 - 0.98 - 2 - - - - - - - - - - - - - - - - - - - - - - - - - - - - resamplingFilter - - 0 - - - - 569962.59035570570267737 - 8582493.1620953194797039 - 571822.59035570570267737 - 8584473.1620953194797039 - - - -38.35534980613592637 - -12.82171043979659331 - -38.3381654292332712 - -12.80376424953941772 - - land_surface_temperature_e26fbad7_3504_4b45_ad36_9231bc6ede9e - ./land_surface_temperature.tif - - - - land_surface_temperature - - - PROJCRS["WGS 84 / UTM zone 24S",BASEGEOGCRS["WGS 84",ENSEMBLE["World Geodetic System 1984 ensemble",MEMBER["World Geodetic System 1984 (Transit)"],MEMBER["World Geodetic System 1984 (G730)"],MEMBER["World Geodetic System 1984 (G873)"],MEMBER["World Geodetic System 1984 (G1150)"],MEMBER["World Geodetic System 1984 (G1674)"],MEMBER["World Geodetic System 1984 (G1762)"],MEMBER["World Geodetic System 1984 (G2139)"],ELLIPSOID["WGS 84",6378137,298.257223563,LENGTHUNIT["metre",1]],ENSEMBLEACCURACY[2.0]],PRIMEM["Greenwich",0,ANGLEUNIT["degree",0.0174532925199433]],ID["EPSG",4326]],CONVERSION["UTM zone 24S",METHOD["Transverse Mercator",ID["EPSG",9807]],PARAMETER["Latitude of natural origin",0,ANGLEUNIT["degree",0.0174532925199433],ID["EPSG",8801]],PARAMETER["Longitude of natural origin",-39,ANGLEUNIT["degree",0.0174532925199433],ID["EPSG",8802]],PARAMETER["Scale factor at natural origin",0.9996,SCALEUNIT["unity",1],ID["EPSG",8805]],PARAMETER["False easting",500000,LENGTHUNIT["metre",1],ID["EPSG",8806]],PARAMETER["False northing",10000000,LENGTHUNIT["metre",1],ID["EPSG",8807]]],CS[Cartesian,2],AXIS["(E)",east,ORDER[1],LENGTHUNIT["metre",1]],AXIS["(N)",north,ORDER[2],LENGTHUNIT["metre",1]],USAGE[SCOPE["Navigation and medium accuracy spatial referencing."],AREA["Between 42°W and 36°W, southern hemisphere between 80°S and equator, onshore and offshore. Brazil. South Georgia and the South Sandwich Islands."],BBOX[-80,-42,0,-36]],ID["EPSG",32724]] - +proj=utm +zone=24 +south +datum=WGS84 +units=m +no_defs - 3174 - 32724 - EPSG:32724 - WGS 84 / UTM zone 24S - utm - EPSG:7030 - false - - - - - - - dataset - - - - - - - - - PROJCRS["WGS 84 / UTM zone 24S",BASEGEOGCRS["WGS 84",ENSEMBLE["World Geodetic System 1984 ensemble",MEMBER["World Geodetic System 1984 (Transit)"],MEMBER["World Geodetic System 1984 (G730)"],MEMBER["World Geodetic System 1984 (G873)"],MEMBER["World Geodetic System 1984 (G1150)"],MEMBER["World Geodetic System 1984 (G1674)"],MEMBER["World Geodetic System 1984 (G1762)"],MEMBER["World Geodetic System 1984 (G2139)"],ELLIPSOID["WGS 84",6378137,298.257223563,LENGTHUNIT["metre",1]],ENSEMBLEACCURACY[2.0]],PRIMEM["Greenwich",0,ANGLEUNIT["degree",0.0174532925199433]],ID["EPSG",4326]],CONVERSION["UTM zone 24S",METHOD["Transverse Mercator",ID["EPSG",9807]],PARAMETER["Latitude of natural origin",0,ANGLEUNIT["degree",0.0174532925199433],ID["EPSG",8801]],PARAMETER["Longitude of natural origin",-39,ANGLEUNIT["degree",0.0174532925199433],ID["EPSG",8802]],PARAMETER["Scale factor at natural origin",0.9996,SCALEUNIT["unity",1],ID["EPSG",8805]],PARAMETER["False easting",500000,LENGTHUNIT["metre",1],ID["EPSG",8806]],PARAMETER["False northing",10000000,LENGTHUNIT["metre",1],ID["EPSG",8807]]],CS[Cartesian,2],AXIS["(E)",east,ORDER[1],LENGTHUNIT["metre",1]],AXIS["(N)",north,ORDER[2],LENGTHUNIT["metre",1]],USAGE[SCOPE["Navigation and medium accuracy spatial referencing."],AREA["Between 42°W and 36°W, southern hemisphere between 80°S and equator, onshore and offshore. Brazil. South Georgia and the South Sandwich Islands."],BBOX[-80,-42,0,-36]],ID["EPSG",32724]] - +proj=utm +zone=24 +south +datum=WGS84 +units=m +no_defs - 3174 - 32724 - EPSG:32724 - WGS 84 / UTM zone 24S - utm - EPSG:7030 - false - - - - - gdal - - - - - - - - - 1 - 1 - 1 - 0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - MinMax - WholeRaster - Estimated - 0.02 - 0.98 - 2 - - - - - - - - - - - - - - - - - - - - - - - - - - - - resamplingFilter - - 0 - - - - 569962.59035570570267737 - 8582493.1620953194797039 - 571822.59035570570267737 - 8584473.1620953194797039 - - - -38.35534980613592637 - -12.82171043979659331 - -38.3381654292332712 - -12.80376424953941772 - - nasa_dem_68846b24_ab9e_4975_a548_9ea4c03bfe8d - ./nasa_dem.tif - - - - nasa_dem - - - PROJCRS["WGS 84 / UTM zone 24S",BASEGEOGCRS["WGS 84",ENSEMBLE["World Geodetic System 1984 ensemble",MEMBER["World Geodetic System 1984 (Transit)"],MEMBER["World Geodetic System 1984 (G730)"],MEMBER["World Geodetic System 1984 (G873)"],MEMBER["World Geodetic System 1984 (G1150)"],MEMBER["World Geodetic System 1984 (G1674)"],MEMBER["World Geodetic System 1984 (G1762)"],MEMBER["World Geodetic System 1984 (G2139)"],ELLIPSOID["WGS 84",6378137,298.257223563,LENGTHUNIT["metre",1]],ENSEMBLEACCURACY[2.0]],PRIMEM["Greenwich",0,ANGLEUNIT["degree",0.0174532925199433]],ID["EPSG",4326]],CONVERSION["UTM zone 24S",METHOD["Transverse Mercator",ID["EPSG",9807]],PARAMETER["Latitude of natural origin",0,ANGLEUNIT["degree",0.0174532925199433],ID["EPSG",8801]],PARAMETER["Longitude of natural origin",-39,ANGLEUNIT["degree",0.0174532925199433],ID["EPSG",8802]],PARAMETER["Scale factor at natural origin",0.9996,SCALEUNIT["unity",1],ID["EPSG",8805]],PARAMETER["False easting",500000,LENGTHUNIT["metre",1],ID["EPSG",8806]],PARAMETER["False northing",10000000,LENGTHUNIT["metre",1],ID["EPSG",8807]]],CS[Cartesian,2],AXIS["(E)",east,ORDER[1],LENGTHUNIT["metre",1]],AXIS["(N)",north,ORDER[2],LENGTHUNIT["metre",1]],USAGE[SCOPE["Navigation and medium accuracy spatial referencing."],AREA["Between 42°W and 36°W, southern hemisphere between 80°S and equator, onshore and offshore. Brazil. South Georgia and the South Sandwich Islands."],BBOX[-80,-42,0,-36]],ID["EPSG",32724]] - +proj=utm +zone=24 +south +datum=WGS84 +units=m +no_defs - 3174 - 32724 - EPSG:32724 - WGS 84 / UTM zone 24S - utm - EPSG:7030 - false - - - - - - - dataset - - - - - - - - - - - - - - - - - - PROJCRS["WGS 84 / UTM zone 24S",BASEGEOGCRS["WGS 84",ENSEMBLE["World Geodetic System 1984 ensemble",MEMBER["World Geodetic System 1984 (Transit)"],MEMBER["World Geodetic System 1984 (G730)"],MEMBER["World Geodetic System 1984 (G873)"],MEMBER["World Geodetic System 1984 (G1150)"],MEMBER["World Geodetic System 1984 (G1674)"],MEMBER["World Geodetic System 1984 (G1762)"],MEMBER["World Geodetic System 1984 (G2139)"],ELLIPSOID["WGS 84",6378137,298.257223563,LENGTHUNIT["metre",1]],ENSEMBLEACCURACY[2.0]],PRIMEM["Greenwich",0,ANGLEUNIT["degree",0.0174532925199433]],ID["EPSG",4326]],CONVERSION["UTM zone 24S",METHOD["Transverse Mercator",ID["EPSG",9807]],PARAMETER["Latitude of natural origin",0,ANGLEUNIT["degree",0.0174532925199433],ID["EPSG",8801]],PARAMETER["Longitude of natural origin",-39,ANGLEUNIT["degree",0.0174532925199433],ID["EPSG",8802]],PARAMETER["Scale factor at natural origin",0.9996,SCALEUNIT["unity",1],ID["EPSG",8805]],PARAMETER["False easting",500000,LENGTHUNIT["metre",1],ID["EPSG",8806]],PARAMETER["False northing",10000000,LENGTHUNIT["metre",1],ID["EPSG",8807]]],CS[Cartesian,2],AXIS["(E)",east,ORDER[1],LENGTHUNIT["metre",1]],AXIS["(N)",north,ORDER[2],LENGTHUNIT["metre",1]],USAGE[SCOPE["Navigation and medium accuracy spatial referencing."],AREA["Between 42°W and 36°W, southern hemisphere between 80°S and equator, onshore and offshore. Brazil. South Georgia and the South Sandwich Islands."],BBOX[-80,-42,0,-36]],ID["EPSG",32724]] - +proj=utm +zone=24 +south +datum=WGS84 +units=m +no_defs - 3174 - 32724 - EPSG:32724 - WGS 84 / UTM zone 24S - utm - EPSG:7030 - false - - - - - - - - - - - - - gdal - - - - - - - - - 1 - 1 - 1 - 0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - MinMax - WholeRaster - Estimated - 0.02 - 0.98 - 2 - - - - - - - - - - - - - - - - - - - - - - - - - - - - resamplingFilter - - 0 - - - - 569962.59035570570267737 - 8582493.1620953194797039 - 571832.59035570570267737 - 8584483.1620953194797039 - - - -38.35535003588469039 - -12.82171043979659331 - -38.33807328503521461 - -12.80367359560521656 - - natural_areas_fd87fec5_4965_46d4_9f49_3a87327de975 - ./natural_areas.tif - - - - natural_areas - - - PROJCRS["WGS 84 / UTM zone 24S",BASEGEOGCRS["WGS 84",ENSEMBLE["World Geodetic System 1984 ensemble",MEMBER["World Geodetic System 1984 (Transit)"],MEMBER["World Geodetic System 1984 (G730)"],MEMBER["World Geodetic System 1984 (G873)"],MEMBER["World Geodetic System 1984 (G1150)"],MEMBER["World Geodetic System 1984 (G1674)"],MEMBER["World Geodetic System 1984 (G1762)"],MEMBER["World Geodetic System 1984 (G2139)"],ELLIPSOID["WGS 84",6378137,298.257223563,LENGTHUNIT["metre",1]],ENSEMBLEACCURACY[2.0]],PRIMEM["Greenwich",0,ANGLEUNIT["degree",0.0174532925199433]],ID["EPSG",4326]],CONVERSION["UTM zone 24S",METHOD["Transverse Mercator",ID["EPSG",9807]],PARAMETER["Latitude of natural origin",0,ANGLEUNIT["degree",0.0174532925199433],ID["EPSG",8801]],PARAMETER["Longitude of natural origin",-39,ANGLEUNIT["degree",0.0174532925199433],ID["EPSG",8802]],PARAMETER["Scale factor at natural origin",0.9996,SCALEUNIT["unity",1],ID["EPSG",8805]],PARAMETER["False easting",500000,LENGTHUNIT["metre",1],ID["EPSG",8806]],PARAMETER["False northing",10000000,LENGTHUNIT["metre",1],ID["EPSG",8807]]],CS[Cartesian,2],AXIS["(E)",east,ORDER[1],LENGTHUNIT["metre",1]],AXIS["(N)",north,ORDER[2],LENGTHUNIT["metre",1]],USAGE[SCOPE["Navigation and medium accuracy spatial referencing."],AREA["Between 42°W and 36°W, southern hemisphere between 80°S and equator, onshore and offshore. Brazil. South Georgia and the South Sandwich Islands."],BBOX[-80,-42,0,-36]],ID["EPSG",32724]] - +proj=utm +zone=24 +south +datum=WGS84 +units=m +no_defs - 3174 - 32724 - EPSG:32724 - WGS 84 / UTM zone 24S - utm - EPSG:7030 - false - - - - - - - dataset - - - - - - - - - - - - - - - - - - PROJCRS["WGS 84 / UTM zone 24S",BASEGEOGCRS["WGS 84",ENSEMBLE["World Geodetic System 1984 ensemble",MEMBER["World Geodetic System 1984 (Transit)"],MEMBER["World Geodetic System 1984 (G730)"],MEMBER["World Geodetic System 1984 (G873)"],MEMBER["World Geodetic System 1984 (G1150)"],MEMBER["World Geodetic System 1984 (G1674)"],MEMBER["World Geodetic System 1984 (G1762)"],MEMBER["World Geodetic System 1984 (G2139)"],ELLIPSOID["WGS 84",6378137,298.257223563,LENGTHUNIT["metre",1]],ENSEMBLEACCURACY[2.0]],PRIMEM["Greenwich",0,ANGLEUNIT["degree",0.0174532925199433]],ID["EPSG",4326]],CONVERSION["UTM zone 24S",METHOD["Transverse Mercator",ID["EPSG",9807]],PARAMETER["Latitude of natural origin",0,ANGLEUNIT["degree",0.0174532925199433],ID["EPSG",8801]],PARAMETER["Longitude of natural origin",-39,ANGLEUNIT["degree",0.0174532925199433],ID["EPSG",8802]],PARAMETER["Scale factor at natural origin",0.9996,SCALEUNIT["unity",1],ID["EPSG",8805]],PARAMETER["False easting",500000,LENGTHUNIT["metre",1],ID["EPSG",8806]],PARAMETER["False northing",10000000,LENGTHUNIT["metre",1],ID["EPSG",8807]]],CS[Cartesian,2],AXIS["(E)",east,ORDER[1],LENGTHUNIT["metre",1]],AXIS["(N)",north,ORDER[2],LENGTHUNIT["metre",1]],USAGE[SCOPE["Navigation and medium accuracy spatial referencing."],AREA["Between 42°W and 36°W, southern hemisphere between 80°S and equator, onshore and offshore. Brazil. South Georgia and the South Sandwich Islands."],BBOX[-80,-42,0,-36]],ID["EPSG",32724]] - +proj=utm +zone=24 +south +datum=WGS84 +units=m +no_defs - 3174 - 32724 - EPSG:32724 - WGS 84 / UTM zone 24S - utm - EPSG:7030 - false - - - - - - - - - - - - - gdal - - - - - - - - - 1 - 1 - 1 - 0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - MinMax - WholeRaster - Estimated - 0.02 - 0.98 - 2 - - - - - - - - - - - - - - - - - - - - - - - - - - - - resamplingFilter - - 0 - - - open_buildings_0d3930fb_7530_4657_bde1_bf40431f46a7 - ./open_buildings.tif|layername=open_buildings - - - - open_buildings - - - GEOGCRS["WGS 84",ENSEMBLE["World Geodetic System 1984 ensemble",MEMBER["World Geodetic System 1984 (Transit)"],MEMBER["World Geodetic System 1984 (G730)"],MEMBER["World Geodetic System 1984 (G873)"],MEMBER["World Geodetic System 1984 (G1150)"],MEMBER["World Geodetic System 1984 (G1674)"],MEMBER["World Geodetic System 1984 (G1762)"],MEMBER["World Geodetic System 1984 (G2139)"],ELLIPSOID["WGS 84",6378137,298.257223563,LENGTHUNIT["metre",1]],ENSEMBLEACCURACY[2.0]],PRIMEM["Greenwich",0,ANGLEUNIT["degree",0.0174532925199433]],CS[ellipsoidal,2],AXIS["geodetic latitude (Lat)",north,ORDER[1],ANGLEUNIT["degree",0.0174532925199433]],AXIS["geodetic longitude (Lon)",east,ORDER[2],ANGLEUNIT["degree",0.0174532925199433]],USAGE[SCOPE["Horizontal component of 3D system."],AREA["World."],BBOX[-90,-180,90,180]],ID["EPSG",4326]] - +proj=longlat +datum=WGS84 +no_defs - 3452 - 4326 - EPSG:4326 - WGS 84 - longlat - EPSG:7030 - true - - - - - - - dataset - - - - - - - - - - - - - - - - - - GEOGCRS["WGS 84",ENSEMBLE["World Geodetic System 1984 ensemble",MEMBER["World Geodetic System 1984 (Transit)"],MEMBER["World Geodetic System 1984 (G730)"],MEMBER["World Geodetic System 1984 (G873)"],MEMBER["World Geodetic System 1984 (G1150)"],MEMBER["World Geodetic System 1984 (G1674)"],MEMBER["World Geodetic System 1984 (G1762)"],MEMBER["World Geodetic System 1984 (G2139)"],ELLIPSOID["WGS 84",6378137,298.257223563,LENGTHUNIT["metre",1]],ENSEMBLEACCURACY[2.0]],PRIMEM["Greenwich",0,ANGLEUNIT["degree",0.0174532925199433]],CS[ellipsoidal,2],AXIS["geodetic latitude (Lat)",north,ORDER[1],ANGLEUNIT["degree",0.0174532925199433]],AXIS["geodetic longitude (Lon)",east,ORDER[2],ANGLEUNIT["degree",0.0174532925199433]],USAGE[SCOPE["Horizontal component of 3D system."],AREA["World."],BBOX[-90,-180,90,180]],ID["EPSG",4326]] - +proj=longlat +datum=WGS84 +no_defs - 3452 - 4326 - EPSG:4326 - WGS 84 - longlat - EPSG:7030 - true - - - - - - - - - - - - - ogr - - - - - - - - - - - 1 - 1 - 1 - 0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 0 - 0 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 0 - - - 0 - generatedlayout - - - - - - - - - - - - - - - - - - - - - - - - - - - "bf_source" - - - - overture_buildings_36036eef_d21e_4838_8914_f2ebad1d5c68 - ./overture_buildings.tif|layername=overture_buildings - - - - overture_buildings - - - GEOGCRS["WGS 84",ENSEMBLE["World Geodetic System 1984 ensemble",MEMBER["World Geodetic System 1984 (Transit)"],MEMBER["World Geodetic System 1984 (G730)"],MEMBER["World Geodetic System 1984 (G873)"],MEMBER["World Geodetic System 1984 (G1150)"],MEMBER["World Geodetic System 1984 (G1674)"],MEMBER["World Geodetic System 1984 (G1762)"],MEMBER["World Geodetic System 1984 (G2139)"],ELLIPSOID["WGS 84",6378137,298.257223563,LENGTHUNIT["metre",1]],ENSEMBLEACCURACY[2.0]],PRIMEM["Greenwich",0,ANGLEUNIT["degree",0.0174532925199433]],CS[ellipsoidal,2],AXIS["geodetic latitude (Lat)",north,ORDER[1],ANGLEUNIT["degree",0.0174532925199433]],AXIS["geodetic longitude (Lon)",east,ORDER[2],ANGLEUNIT["degree",0.0174532925199433]],USAGE[SCOPE["Horizontal component of 3D system."],AREA["World."],BBOX[-90,-180,90,180]],ID["EPSG",4326]] - +proj=longlat +datum=WGS84 +no_defs - 3452 - 4326 - EPSG:4326 - WGS 84 - longlat - EPSG:7030 - true - - - - - - - dataset - - - - - - - - - GEOGCRS["WGS 84",ENSEMBLE["World Geodetic System 1984 ensemble",MEMBER["World Geodetic System 1984 (Transit)"],MEMBER["World Geodetic System 1984 (G730)"],MEMBER["World Geodetic System 1984 (G873)"],MEMBER["World Geodetic System 1984 (G1150)"],MEMBER["World Geodetic System 1984 (G1674)"],MEMBER["World Geodetic System 1984 (G1762)"],MEMBER["World Geodetic System 1984 (G2139)"],ELLIPSOID["WGS 84",6378137,298.257223563,LENGTHUNIT["metre",1]],ENSEMBLEACCURACY[2.0]],PRIMEM["Greenwich",0,ANGLEUNIT["degree",0.0174532925199433]],CS[ellipsoidal,2],AXIS["geodetic latitude (Lat)",north,ORDER[1],ANGLEUNIT["degree",0.0174532925199433]],AXIS["geodetic longitude (Lon)",east,ORDER[2],ANGLEUNIT["degree",0.0174532925199433]],USAGE[SCOPE["Horizontal component of 3D system."],AREA["World."],BBOX[-90,-180,90,180]],ID["EPSG",4326]] - +proj=longlat +datum=WGS84 +no_defs - 3452 - 4326 - EPSG:4326 - WGS 84 - longlat - EPSG:7030 - true - - - - - ogr - - - - - - - - - - - 1 - 1 - 1 - 0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 0 - 0 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 0 - - - 0 - generatedlayout - - - - - - - - - - - 569962.59035570570267737 - 8582493.1620953194797039 - 571832.59035570570267737 - 8584483.1620953194797039 - - - -38.35535003588469039 - -12.82171043979659331 - -38.33807328503521461 - -12.80367359560521656 - - smart_surface_lulc_3c04a4e2_2352_49bc_9c1a_d8c9b22055ce - ./smart_surface_lulc.tif - - - - smart_surface_lulc - - - PROJCRS["WGS 84 / UTM zone 24S",BASEGEOGCRS["WGS 84",ENSEMBLE["World Geodetic System 1984 ensemble",MEMBER["World Geodetic System 1984 (Transit)"],MEMBER["World Geodetic System 1984 (G730)"],MEMBER["World Geodetic System 1984 (G873)"],MEMBER["World Geodetic System 1984 (G1150)"],MEMBER["World Geodetic System 1984 (G1674)"],MEMBER["World Geodetic System 1984 (G1762)"],MEMBER["World Geodetic System 1984 (G2139)"],ELLIPSOID["WGS 84",6378137,298.257223563,LENGTHUNIT["metre",1]],ENSEMBLEACCURACY[2.0]],PRIMEM["Greenwich",0,ANGLEUNIT["degree",0.0174532925199433]],ID["EPSG",4326]],CONVERSION["UTM zone 24S",METHOD["Transverse Mercator",ID["EPSG",9807]],PARAMETER["Latitude of natural origin",0,ANGLEUNIT["degree",0.0174532925199433],ID["EPSG",8801]],PARAMETER["Longitude of natural origin",-39,ANGLEUNIT["degree",0.0174532925199433],ID["EPSG",8802]],PARAMETER["Scale factor at natural origin",0.9996,SCALEUNIT["unity",1],ID["EPSG",8805]],PARAMETER["False easting",500000,LENGTHUNIT["metre",1],ID["EPSG",8806]],PARAMETER["False northing",10000000,LENGTHUNIT["metre",1],ID["EPSG",8807]]],CS[Cartesian,2],AXIS["(E)",east,ORDER[1],LENGTHUNIT["metre",1]],AXIS["(N)",north,ORDER[2],LENGTHUNIT["metre",1]],USAGE[SCOPE["Navigation and medium accuracy spatial referencing."],AREA["Between 42°W and 36°W, southern hemisphere between 80°S and equator, onshore and offshore. Brazil. South Georgia and the South Sandwich Islands."],BBOX[-80,-42,0,-36]],ID["EPSG",32724]] - +proj=utm +zone=24 +south +datum=WGS84 +units=m +no_defs - 3174 - 32724 - EPSG:32724 - WGS 84 / UTM zone 24S - utm - EPSG:7030 - false - - - - - - - dataset - - - - - - - - - - - - - - - - - - PROJCRS["WGS 84 / UTM zone 24S",BASEGEOGCRS["WGS 84",ENSEMBLE["World Geodetic System 1984 ensemble",MEMBER["World Geodetic System 1984 (Transit)"],MEMBER["World Geodetic System 1984 (G730)"],MEMBER["World Geodetic System 1984 (G873)"],MEMBER["World Geodetic System 1984 (G1150)"],MEMBER["World Geodetic System 1984 (G1674)"],MEMBER["World Geodetic System 1984 (G1762)"],MEMBER["World Geodetic System 1984 (G2139)"],ELLIPSOID["WGS 84",6378137,298.257223563,LENGTHUNIT["metre",1]],ENSEMBLEACCURACY[2.0]],PRIMEM["Greenwich",0,ANGLEUNIT["degree",0.0174532925199433]],ID["EPSG",4326]],CONVERSION["UTM zone 24S",METHOD["Transverse Mercator",ID["EPSG",9807]],PARAMETER["Latitude of natural origin",0,ANGLEUNIT["degree",0.0174532925199433],ID["EPSG",8801]],PARAMETER["Longitude of natural origin",-39,ANGLEUNIT["degree",0.0174532925199433],ID["EPSG",8802]],PARAMETER["Scale factor at natural origin",0.9996,SCALEUNIT["unity",1],ID["EPSG",8805]],PARAMETER["False easting",500000,LENGTHUNIT["metre",1],ID["EPSG",8806]],PARAMETER["False northing",10000000,LENGTHUNIT["metre",1],ID["EPSG",8807]]],CS[Cartesian,2],AXIS["(E)",east,ORDER[1],LENGTHUNIT["metre",1]],AXIS["(N)",north,ORDER[2],LENGTHUNIT["metre",1]],USAGE[SCOPE["Navigation and medium accuracy spatial referencing."],AREA["Between 42°W and 36°W, southern hemisphere between 80°S and equator, onshore and offshore. Brazil. South Georgia and the South Sandwich Islands."],BBOX[-80,-42,0,-36]],ID["EPSG",32724]] - +proj=utm +zone=24 +south +datum=WGS84 +units=m +no_defs - 3174 - 32724 - EPSG:32724 - WGS 84 / UTM zone 24S - utm - EPSG:7030 - false - - - - - - - - - - - - - gdal - - - - - - - - - 1 - 1 - 1 - 0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - MinMax - WholeRaster - Estimated - 0.02 - 0.98 - 2 - - - - - - - - - - - - - - - - - - - - - - - - - - - - resamplingFilter - - 0 - - - - 569962.59035570570267737 - 8582493.1620953194797039 - 571830.59035570570267737 - 8584488.1620953194797039 - - - -38.35535015075841159 - -12.82171043979659331 - -38.33809171387467529 - -12.8036284306771595 - - tree_canopy_height_7902b00d_e052_4c25_86e2_f465a978f4fc - ./tree_canopy_height.tif - - - - tree_canopy_height - - - PROJCRS["WGS 84 / UTM zone 24S",BASEGEOGCRS["WGS 84",ENSEMBLE["World Geodetic System 1984 ensemble",MEMBER["World Geodetic System 1984 (Transit)"],MEMBER["World Geodetic System 1984 (G730)"],MEMBER["World Geodetic System 1984 (G873)"],MEMBER["World Geodetic System 1984 (G1150)"],MEMBER["World Geodetic System 1984 (G1674)"],MEMBER["World Geodetic System 1984 (G1762)"],MEMBER["World Geodetic System 1984 (G2139)"],ELLIPSOID["WGS 84",6378137,298.257223563,LENGTHUNIT["metre",1]],ENSEMBLEACCURACY[2.0]],PRIMEM["Greenwich",0,ANGLEUNIT["degree",0.0174532925199433]],ID["EPSG",4326]],CONVERSION["UTM zone 24S",METHOD["Transverse Mercator",ID["EPSG",9807]],PARAMETER["Latitude of natural origin",0,ANGLEUNIT["degree",0.0174532925199433],ID["EPSG",8801]],PARAMETER["Longitude of natural origin",-39,ANGLEUNIT["degree",0.0174532925199433],ID["EPSG",8802]],PARAMETER["Scale factor at natural origin",0.9996,SCALEUNIT["unity",1],ID["EPSG",8805]],PARAMETER["False easting",500000,LENGTHUNIT["metre",1],ID["EPSG",8806]],PARAMETER["False northing",10000000,LENGTHUNIT["metre",1],ID["EPSG",8807]]],CS[Cartesian,2],AXIS["(E)",east,ORDER[1],LENGTHUNIT["metre",1]],AXIS["(N)",north,ORDER[2],LENGTHUNIT["metre",1]],USAGE[SCOPE["Navigation and medium accuracy spatial referencing."],AREA["Between 42°W and 36°W, southern hemisphere between 80°S and equator, onshore and offshore. Brazil. South Georgia and the South Sandwich Islands."],BBOX[-80,-42,0,-36]],ID["EPSG",32724]] - +proj=utm +zone=24 +south +datum=WGS84 +units=m +no_defs - 3174 - 32724 - EPSG:32724 - WGS 84 / UTM zone 24S - utm - EPSG:7030 - false - - - - - - - dataset - - - - - - - - - - - - - - - - - - PROJCRS["WGS 84 / UTM zone 24S",BASEGEOGCRS["WGS 84",ENSEMBLE["World Geodetic System 1984 ensemble",MEMBER["World Geodetic System 1984 (Transit)"],MEMBER["World Geodetic System 1984 (G730)"],MEMBER["World Geodetic System 1984 (G873)"],MEMBER["World Geodetic System 1984 (G1150)"],MEMBER["World Geodetic System 1984 (G1674)"],MEMBER["World Geodetic System 1984 (G1762)"],MEMBER["World Geodetic System 1984 (G2139)"],ELLIPSOID["WGS 84",6378137,298.257223563,LENGTHUNIT["metre",1]],ENSEMBLEACCURACY[2.0]],PRIMEM["Greenwich",0,ANGLEUNIT["degree",0.0174532925199433]],ID["EPSG",4326]],CONVERSION["UTM zone 24S",METHOD["Transverse Mercator",ID["EPSG",9807]],PARAMETER["Latitude of natural origin",0,ANGLEUNIT["degree",0.0174532925199433],ID["EPSG",8801]],PARAMETER["Longitude of natural origin",-39,ANGLEUNIT["degree",0.0174532925199433],ID["EPSG",8802]],PARAMETER["Scale factor at natural origin",0.9996,SCALEUNIT["unity",1],ID["EPSG",8805]],PARAMETER["False easting",500000,LENGTHUNIT["metre",1],ID["EPSG",8806]],PARAMETER["False northing",10000000,LENGTHUNIT["metre",1],ID["EPSG",8807]]],CS[Cartesian,2],AXIS["(E)",east,ORDER[1],LENGTHUNIT["metre",1]],AXIS["(N)",north,ORDER[2],LENGTHUNIT["metre",1]],USAGE[SCOPE["Navigation and medium accuracy spatial referencing."],AREA["Between 42°W and 36°W, southern hemisphere between 80°S and equator, onshore and offshore. Brazil. South Georgia and the South Sandwich Islands."],BBOX[-80,-42,0,-36]],ID["EPSG",32724]] - +proj=utm +zone=24 +south +datum=WGS84 +units=m +no_defs - 3174 - 32724 - EPSG:32724 - WGS 84 / UTM zone 24S - utm - EPSG:7030 - false - - - - - - - - - - - - - gdal - - - - - - - - - 1 - 1 - 1 - 0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - MinMax - WholeRaster - Estimated - 0.02 - 0.98 - 2 - - - - - - - - - - - - - - - - - - - - - - - - - - - - resamplingFilter - - 0 - - - - 569962.59035570570267737 - 8582493.1620953194797039 - 571832.59035570570267737 - 8584483.1620953194797039 - - - -38.35535003588469039 - -12.82171043979659331 - -38.33807328503521461 - -12.80367359560521656 - - tree_cover_1ccee586_17ee_4e1b_aef7_5cfa559b5b05 - ./tree_cover.tif - - - - tree_cover - - - PROJCRS["WGS 84 / UTM zone 24S",BASEGEOGCRS["WGS 84",ENSEMBLE["World Geodetic System 1984 ensemble",MEMBER["World Geodetic System 1984 (Transit)"],MEMBER["World Geodetic System 1984 (G730)"],MEMBER["World Geodetic System 1984 (G873)"],MEMBER["World Geodetic System 1984 (G1150)"],MEMBER["World Geodetic System 1984 (G1674)"],MEMBER["World Geodetic System 1984 (G1762)"],MEMBER["World Geodetic System 1984 (G2139)"],ELLIPSOID["WGS 84",6378137,298.257223563,LENGTHUNIT["metre",1]],ENSEMBLEACCURACY[2.0]],PRIMEM["Greenwich",0,ANGLEUNIT["degree",0.0174532925199433]],ID["EPSG",4326]],CONVERSION["UTM zone 24S",METHOD["Transverse Mercator",ID["EPSG",9807]],PARAMETER["Latitude of natural origin",0,ANGLEUNIT["degree",0.0174532925199433],ID["EPSG",8801]],PARAMETER["Longitude of natural origin",-39,ANGLEUNIT["degree",0.0174532925199433],ID["EPSG",8802]],PARAMETER["Scale factor at natural origin",0.9996,SCALEUNIT["unity",1],ID["EPSG",8805]],PARAMETER["False easting",500000,LENGTHUNIT["metre",1],ID["EPSG",8806]],PARAMETER["False northing",10000000,LENGTHUNIT["metre",1],ID["EPSG",8807]]],CS[Cartesian,2],AXIS["(E)",east,ORDER[1],LENGTHUNIT["metre",1]],AXIS["(N)",north,ORDER[2],LENGTHUNIT["metre",1]],USAGE[SCOPE["Navigation and medium accuracy spatial referencing."],AREA["Between 42°W and 36°W, southern hemisphere between 80°S and equator, onshore and offshore. Brazil. South Georgia and the South Sandwich Islands."],BBOX[-80,-42,0,-36]],ID["EPSG",32724]] - +proj=utm +zone=24 +south +datum=WGS84 +units=m +no_defs - 3174 - 32724 - EPSG:32724 - WGS 84 / UTM zone 24S - utm - EPSG:7030 - false - - - - - - - dataset - - - - - - - - - - - - - - - - - - PROJCRS["WGS 84 / UTM zone 24S",BASEGEOGCRS["WGS 84",ENSEMBLE["World Geodetic System 1984 ensemble",MEMBER["World Geodetic System 1984 (Transit)"],MEMBER["World Geodetic System 1984 (G730)"],MEMBER["World Geodetic System 1984 (G873)"],MEMBER["World Geodetic System 1984 (G1150)"],MEMBER["World Geodetic System 1984 (G1674)"],MEMBER["World Geodetic System 1984 (G1762)"],MEMBER["World Geodetic System 1984 (G2139)"],ELLIPSOID["WGS 84",6378137,298.257223563,LENGTHUNIT["metre",1]],ENSEMBLEACCURACY[2.0]],PRIMEM["Greenwich",0,ANGLEUNIT["degree",0.0174532925199433]],ID["EPSG",4326]],CONVERSION["UTM zone 24S",METHOD["Transverse Mercator",ID["EPSG",9807]],PARAMETER["Latitude of natural origin",0,ANGLEUNIT["degree",0.0174532925199433],ID["EPSG",8801]],PARAMETER["Longitude of natural origin",-39,ANGLEUNIT["degree",0.0174532925199433],ID["EPSG",8802]],PARAMETER["Scale factor at natural origin",0.9996,SCALEUNIT["unity",1],ID["EPSG",8805]],PARAMETER["False easting",500000,LENGTHUNIT["metre",1],ID["EPSG",8806]],PARAMETER["False northing",10000000,LENGTHUNIT["metre",1],ID["EPSG",8807]]],CS[Cartesian,2],AXIS["(E)",east,ORDER[1],LENGTHUNIT["metre",1]],AXIS["(N)",north,ORDER[2],LENGTHUNIT["metre",1]],USAGE[SCOPE["Navigation and medium accuracy spatial referencing."],AREA["Between 42°W and 36°W, southern hemisphere between 80°S and equator, onshore and offshore. Brazil. South Georgia and the South Sandwich Islands."],BBOX[-80,-42,0,-36]],ID["EPSG",32724]] - +proj=utm +zone=24 +south +datum=WGS84 +units=m +no_defs - 3174 - 32724 - EPSG:32724 - WGS 84 / UTM zone 24S - utm - EPSG:7030 - false - - - - - - - - - - - - - gdal - - - - - - - - - 1 - 1 - 1 - 0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - MinMax - WholeRaster - Estimated - 0.02 - 0.98 - 2 - - - - - - - - - - - - - - - - - - - - - - - - - - - - resamplingFilter - - 0 - - - - 569962.59035570570267737 - 8582493.1620953194797039 - 571832.59035570570267737 - 8584488.1620953194797039 - - - -38.35535015075841159 - -12.82171043979659331 - -38.33807328503521461 - -12.80362838437874551 - - urban_land_use_2b9d2c0b_7689_489d_ad0d_7317d9d15faa - ./urban_land_use.tif - - - - urban_land_use - - - PROJCRS["WGS 84 / UTM zone 24S",BASEGEOGCRS["WGS 84",ENSEMBLE["World Geodetic System 1984 ensemble",MEMBER["World Geodetic System 1984 (Transit)"],MEMBER["World Geodetic System 1984 (G730)"],MEMBER["World Geodetic System 1984 (G873)"],MEMBER["World Geodetic System 1984 (G1150)"],MEMBER["World Geodetic System 1984 (G1674)"],MEMBER["World Geodetic System 1984 (G1762)"],MEMBER["World Geodetic System 1984 (G2139)"],ELLIPSOID["WGS 84",6378137,298.257223563,LENGTHUNIT["metre",1]],ENSEMBLEACCURACY[2.0]],PRIMEM["Greenwich",0,ANGLEUNIT["degree",0.0174532925199433]],ID["EPSG",4326]],CONVERSION["UTM zone 24S",METHOD["Transverse Mercator",ID["EPSG",9807]],PARAMETER["Latitude of natural origin",0,ANGLEUNIT["degree",0.0174532925199433],ID["EPSG",8801]],PARAMETER["Longitude of natural origin",-39,ANGLEUNIT["degree",0.0174532925199433],ID["EPSG",8802]],PARAMETER["Scale factor at natural origin",0.9996,SCALEUNIT["unity",1],ID["EPSG",8805]],PARAMETER["False easting",500000,LENGTHUNIT["metre",1],ID["EPSG",8806]],PARAMETER["False northing",10000000,LENGTHUNIT["metre",1],ID["EPSG",8807]]],CS[Cartesian,2],AXIS["(E)",east,ORDER[1],LENGTHUNIT["metre",1]],AXIS["(N)",north,ORDER[2],LENGTHUNIT["metre",1]],USAGE[SCOPE["Navigation and medium accuracy spatial referencing."],AREA["Between 42°W and 36°W, southern hemisphere between 80°S and equator, onshore and offshore. Brazil. South Georgia and the South Sandwich Islands."],BBOX[-80,-42,0,-36]],ID["EPSG",32724]] - +proj=utm +zone=24 +south +datum=WGS84 +units=m +no_defs - 3174 - 32724 - EPSG:32724 - WGS 84 / UTM zone 24S - utm - EPSG:7030 - false - - - - - - - dataset - - - - - - - - - - - - - - - - - - PROJCRS["WGS 84 / UTM zone 24S",BASEGEOGCRS["WGS 84",ENSEMBLE["World Geodetic System 1984 ensemble",MEMBER["World Geodetic System 1984 (Transit)"],MEMBER["World Geodetic System 1984 (G730)"],MEMBER["World Geodetic System 1984 (G873)"],MEMBER["World Geodetic System 1984 (G1150)"],MEMBER["World Geodetic System 1984 (G1674)"],MEMBER["World Geodetic System 1984 (G1762)"],MEMBER["World Geodetic System 1984 (G2139)"],ELLIPSOID["WGS 84",6378137,298.257223563,LENGTHUNIT["metre",1]],ENSEMBLEACCURACY[2.0]],PRIMEM["Greenwich",0,ANGLEUNIT["degree",0.0174532925199433]],ID["EPSG",4326]],CONVERSION["UTM zone 24S",METHOD["Transverse Mercator",ID["EPSG",9807]],PARAMETER["Latitude of natural origin",0,ANGLEUNIT["degree",0.0174532925199433],ID["EPSG",8801]],PARAMETER["Longitude of natural origin",-39,ANGLEUNIT["degree",0.0174532925199433],ID["EPSG",8802]],PARAMETER["Scale factor at natural origin",0.9996,SCALEUNIT["unity",1],ID["EPSG",8805]],PARAMETER["False easting",500000,LENGTHUNIT["metre",1],ID["EPSG",8806]],PARAMETER["False northing",10000000,LENGTHUNIT["metre",1],ID["EPSG",8807]]],CS[Cartesian,2],AXIS["(E)",east,ORDER[1],LENGTHUNIT["metre",1]],AXIS["(N)",north,ORDER[2],LENGTHUNIT["metre",1]],USAGE[SCOPE["Navigation and medium accuracy spatial referencing."],AREA["Between 42°W and 36°W, southern hemisphere between 80°S and equator, onshore and offshore. Brazil. South Georgia and the South Sandwich Islands."],BBOX[-80,-42,0,-36]],ID["EPSG",32724]] - +proj=utm +zone=24 +south +datum=WGS84 +units=m +no_defs - 3174 - 32724 - EPSG:32724 - WGS 84 / UTM zone 24S - utm - EPSG:7030 - false - - - - - - - - - - - - - gdal - - - - - - - - - 1 - 1 - 1 - 0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - MinMax - WholeRaster - Estimated - 0.02 - 0.98 - 2 - - - - - - - - - - - - - - - - - - - - - - - - - - - - resamplingFilter - - 0 - - - - 569962.59035570570267737 - 8582493.1620953194797039 - 571862.59035570570267737 - 8584493.1620953194797039 - - - -38.35535026563169225 - -12.82171043979659331 - -38.33779685245188773 - -12.80358247852375619 - - world_pop_65d76980_e93c_4f74_84cb_3a2594b36255 - ./world_pop.tif - - - - world_pop - - - PROJCRS["WGS 84 / UTM zone 24S",BASEGEOGCRS["WGS 84",ENSEMBLE["World Geodetic System 1984 ensemble",MEMBER["World Geodetic System 1984 (Transit)"],MEMBER["World Geodetic System 1984 (G730)"],MEMBER["World Geodetic System 1984 (G873)"],MEMBER["World Geodetic System 1984 (G1150)"],MEMBER["World Geodetic System 1984 (G1674)"],MEMBER["World Geodetic System 1984 (G1762)"],MEMBER["World Geodetic System 1984 (G2139)"],ELLIPSOID["WGS 84",6378137,298.257223563,LENGTHUNIT["metre",1]],ENSEMBLEACCURACY[2.0]],PRIMEM["Greenwich",0,ANGLEUNIT["degree",0.0174532925199433]],ID["EPSG",4326]],CONVERSION["UTM zone 24S",METHOD["Transverse Mercator",ID["EPSG",9807]],PARAMETER["Latitude of natural origin",0,ANGLEUNIT["degree",0.0174532925199433],ID["EPSG",8801]],PARAMETER["Longitude of natural origin",-39,ANGLEUNIT["degree",0.0174532925199433],ID["EPSG",8802]],PARAMETER["Scale factor at natural origin",0.9996,SCALEUNIT["unity",1],ID["EPSG",8805]],PARAMETER["False easting",500000,LENGTHUNIT["metre",1],ID["EPSG",8806]],PARAMETER["False northing",10000000,LENGTHUNIT["metre",1],ID["EPSG",8807]]],CS[Cartesian,2],AXIS["(E)",east,ORDER[1],LENGTHUNIT["metre",1]],AXIS["(N)",north,ORDER[2],LENGTHUNIT["metre",1]],USAGE[SCOPE["Navigation and medium accuracy spatial referencing."],AREA["Between 42°W and 36°W, southern hemisphere between 80°S and equator, onshore and offshore. Brazil. South Georgia and the South Sandwich Islands."],BBOX[-80,-42,0,-36]],ID["EPSG",32724]] - +proj=utm +zone=24 +south +datum=WGS84 +units=m +no_defs - 3174 - 32724 - EPSG:32724 - WGS 84 / UTM zone 24S - utm - EPSG:7030 - false - - - - - - - dataset - - - - - - - - - - - - - - - - - - PROJCRS["WGS 84 / UTM zone 24S",BASEGEOGCRS["WGS 84",ENSEMBLE["World Geodetic System 1984 ensemble",MEMBER["World Geodetic System 1984 (Transit)"],MEMBER["World Geodetic System 1984 (G730)"],MEMBER["World Geodetic System 1984 (G873)"],MEMBER["World Geodetic System 1984 (G1150)"],MEMBER["World Geodetic System 1984 (G1674)"],MEMBER["World Geodetic System 1984 (G1762)"],MEMBER["World Geodetic System 1984 (G2139)"],ELLIPSOID["WGS 84",6378137,298.257223563,LENGTHUNIT["metre",1]],ENSEMBLEACCURACY[2.0]],PRIMEM["Greenwich",0,ANGLEUNIT["degree",0.0174532925199433]],ID["EPSG",4326]],CONVERSION["UTM zone 24S",METHOD["Transverse Mercator",ID["EPSG",9807]],PARAMETER["Latitude of natural origin",0,ANGLEUNIT["degree",0.0174532925199433],ID["EPSG",8801]],PARAMETER["Longitude of natural origin",-39,ANGLEUNIT["degree",0.0174532925199433],ID["EPSG",8802]],PARAMETER["Scale factor at natural origin",0.9996,SCALEUNIT["unity",1],ID["EPSG",8805]],PARAMETER["False easting",500000,LENGTHUNIT["metre",1],ID["EPSG",8806]],PARAMETER["False northing",10000000,LENGTHUNIT["metre",1],ID["EPSG",8807]]],CS[Cartesian,2],AXIS["(E)",east,ORDER[1],LENGTHUNIT["metre",1]],AXIS["(N)",north,ORDER[2],LENGTHUNIT["metre",1]],USAGE[SCOPE["Navigation and medium accuracy spatial referencing."],AREA["Between 42°W and 36°W, southern hemisphere between 80°S and equator, onshore and offshore. Brazil. South Georgia and the South Sandwich Islands."],BBOX[-80,-42,0,-36]],ID["EPSG",32724]] - +proj=utm +zone=24 +south +datum=WGS84 +units=m +no_defs - 3174 - 32724 - EPSG:32724 - WGS 84 / UTM zone 24S - utm - EPSG:7030 - false - - - - - - - - - - - - - gdal - - - - - - - - - 1 - 1 - 1 - 0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - MinMax - WholeRaster - Estimated - 0.02 - 0.98 - 2 - - - - - - - - - - - - - - - - - - - - - - - - - - - - resamplingFilter - - 0 - - - - - - - - - - - - - - - - - - - - - - - - 0 - - - 255 - 255 - 255 - 255 - 0 - 255 - 255 - - - false - - - EPSG:7030 - - - m2 - meters - - - 5 - 2.5 - false - false - false - 1 - 0 - false - false - true - 0 - 255,0,0,255 - - - false - - - true - 2 - - - 1 - - - - - - - - - - - - - - - - - - - Kenn Cartier - 2024-08-13T11:33:46 - - - - - - - - - - - PROJCRS["WGS 84 / UTM zone 24S",BASEGEOGCRS["WGS 84",ENSEMBLE["World Geodetic System 1984 ensemble",MEMBER["World Geodetic System 1984 (Transit)"],MEMBER["World Geodetic System 1984 (G730)"],MEMBER["World Geodetic System 1984 (G873)"],MEMBER["World Geodetic System 1984 (G1150)"],MEMBER["World Geodetic System 1984 (G1674)"],MEMBER["World Geodetic System 1984 (G1762)"],MEMBER["World Geodetic System 1984 (G2139)"],ELLIPSOID["WGS 84",6378137,298.257223563,LENGTHUNIT["metre",1]],ENSEMBLEACCURACY[2.0]],PRIMEM["Greenwich",0,ANGLEUNIT["degree",0.0174532925199433]],ID["EPSG",4326]],CONVERSION["UTM zone 24S",METHOD["Transverse Mercator",ID["EPSG",9807]],PARAMETER["Latitude of natural origin",0,ANGLEUNIT["degree",0.0174532925199433],ID["EPSG",8801]],PARAMETER["Longitude of natural origin",-39,ANGLEUNIT["degree",0.0174532925199433],ID["EPSG",8802]],PARAMETER["Scale factor at natural origin",0.9996,SCALEUNIT["unity",1],ID["EPSG",8805]],PARAMETER["False easting",500000,LENGTHUNIT["metre",1],ID["EPSG",8806]],PARAMETER["False northing",10000000,LENGTHUNIT["metre",1],ID["EPSG",8807]]],CS[Cartesian,2],AXIS["(E)",east,ORDER[1],LENGTHUNIT["metre",1]],AXIS["(N)",north,ORDER[2],LENGTHUNIT["metre",1]],USAGE[SCOPE["Navigation and medium accuracy spatial referencing."],AREA["Between 42°W and 36°W, southern hemisphere between 80°S and equator, onshore and offshore. Brazil. South Georgia and the South Sandwich Islands."],BBOX[-80,-42,0,-36]],ID["EPSG",32724]] - +proj=utm +zone=24 +south +datum=WGS84 +units=m +no_defs - 3174 - 32724 - EPSG:32724 - WGS 84 / UTM zone 24S - utm - EPSG:7030 - false - - - - - - - - - - - - - - - - - - - - - - GEOGCRS["WGS 84",ENSEMBLE["World Geodetic System 1984 ensemble",MEMBER["World Geodetic System 1984 (Transit)"],MEMBER["World Geodetic System 1984 (G730)"],MEMBER["World Geodetic System 1984 (G873)"],MEMBER["World Geodetic System 1984 (G1150)"],MEMBER["World Geodetic System 1984 (G1674)"],MEMBER["World Geodetic System 1984 (G1762)"],MEMBER["World Geodetic System 1984 (G2139)"],ELLIPSOID["WGS 84",6378137,298.257223563,LENGTHUNIT["metre",1]],ENSEMBLEACCURACY[2.0]],PRIMEM["Greenwich",0,ANGLEUNIT["degree",0.0174532925199433]],CS[ellipsoidal,2],AXIS["geodetic latitude (Lat)",north,ORDER[1],ANGLEUNIT["degree",0.0174532925199433]],AXIS["geodetic longitude (Lon)",east,ORDER[2],ANGLEUNIT["degree",0.0174532925199433]],USAGE[SCOPE["Horizontal component of 3D system."],AREA["World."],BBOX[-90,-180,90,180]],ID["EPSG",4326]] - +proj=longlat +datum=WGS84 +no_defs - 3452 - 4326 - EPSG:4326 - WGS 84 - longlat - EPSG:7030 - true - - - - - - - diff --git a/tests/resources/layer_dumps_for_br_lauro_de_freitas/layers_for_br_lauro_de_freitas.qgz b/tests/resources/layer_dumps_for_br_lauro_de_freitas/layers_for_br_lauro_de_freitas.qgz new file mode 100644 index 0000000..c0e237d Binary files /dev/null and b/tests/resources/layer_dumps_for_br_lauro_de_freitas/layers_for_br_lauro_de_freitas.qgz differ diff --git a/tests/resources/layer_dumps_for_br_lauro_de_freitas/sample_dataset/2019/part-0.parquet b/tests/resources/layer_dumps_for_br_lauro_de_freitas/sample_dataset/2019/part-0.parquet new file mode 100644 index 0000000..8702ef4 Binary files /dev/null and b/tests/resources/layer_dumps_for_br_lauro_de_freitas/sample_dataset/2019/part-0.parquet differ diff --git a/tests/resources/layer_dumps_for_br_lauro_de_freitas/sample_dataset/2020/part-0.parquet b/tests/resources/layer_dumps_for_br_lauro_de_freitas/sample_dataset/2020/part-0.parquet new file mode 100644 index 0000000..98ce11a Binary files /dev/null and b/tests/resources/layer_dumps_for_br_lauro_de_freitas/sample_dataset/2020/part-0.parquet differ diff --git a/tests/resources/layer_dumps_for_br_lauro_de_freitas/sample_dataset/2021/part-0.parquet b/tests/resources/layer_dumps_for_br_lauro_de_freitas/sample_dataset/2021/part-0.parquet new file mode 100644 index 0000000..ae02c0c Binary files /dev/null and b/tests/resources/layer_dumps_for_br_lauro_de_freitas/sample_dataset/2021/part-0.parquet differ diff --git a/tests/resources/layer_dumps_for_br_lauro_de_freitas/sample_dataset/2022/part-0.parquet b/tests/resources/layer_dumps_for_br_lauro_de_freitas/sample_dataset/2022/part-0.parquet new file mode 100644 index 0000000..7ac70fb Binary files /dev/null and b/tests/resources/layer_dumps_for_br_lauro_de_freitas/sample_dataset/2022/part-0.parquet differ diff --git a/tests/resources/layer_dumps_for_br_lauro_de_freitas/test_write_layers_to_geotiff.py b/tests/resources/layer_dumps_for_br_lauro_de_freitas/test_write_layers_to_geotiff.py index ba939f5..c7072f5 100644 --- a/tests/resources/layer_dumps_for_br_lauro_de_freitas/test_write_layers_to_geotiff.py +++ b/tests/resources/layer_dumps_for_br_lauro_de_freitas/test_write_layers_to_geotiff.py @@ -1,8 +1,8 @@ # This code is mostly intended for manual execution +# Execution configuration is specified in the conftest file import pytest import os -import shutil from city_metrix.layers import ( Albedo, @@ -18,169 +18,131 @@ OpenStreetMap, OvertureBuildings, Sentinel2Level2, + NdviSentinel2, SmartSurfaceLULC, TreeCanopyHeight, TreeCover, UrbanLandUse, WorldPop ) -from tests.resources.bbox_constants import BBOX_BR_LAURO_DE_FREITAS_1 -from tools.general_tools import create_temp_folder, create_folder - -# RUN_DUMPS is the master control for whether the writes and tests are executed -# Setting RUN_DUMPS to True turns on code execution. -# Values should normally be set to False in order to avoid unnecessary execution. -RUN_DUMPS = False -# Both the tests and QGIS file are implemented for the same bounding box in Brazil. -COUNTRY_CODE_FOR_BBOX = 'BRA' -BBOX = BBOX_BR_LAURO_DE_FREITAS_1 -# Specify None to write to a temporary default folder otherwise specify a valid custom target path. -CUSTOM_DUMP_DIRECTORY = None +from .conftest import RUN_DUMPS, prep_output_path, verify_file_is_populated @pytest.mark.skipif(RUN_DUMPS == False, reason='Skipping since RUN_DUMPS set to False') -def test_geotiff_writing(): - qgis_project_file = 'layers_for_br_lauro_de_freitas.qgs' - - source_folder = os.path.dirname(__file__) - - if CUSTOM_DUMP_DIRECTORY is None: - output_temp_folder = create_temp_folder('test_result_tif_files', True) - else: - output_temp_folder = create_folder(CUSTOM_DUMP_DIRECTORY, True) - - source_qgis_file = os.path.join(source_folder, qgis_project_file) - target_qgis_file = os.path.join(output_temp_folder, qgis_project_file) - shutil.copyfile(source_qgis_file, target_qgis_file) - - process_layers(output_temp_folder) - - print("\n\033[93mQGIS project file and layer files were written to the %s folder.\033[0m" % output_temp_folder) - - -def process_layers(output_temp_folder): - write_albedo(output_temp_folder) - write_alos_dsm(output_temp_folder) - write_average_net_building_height(output_temp_folder) - write_esa_world_cover(output_temp_folder) - write_high_land_surface_temperature(output_temp_folder) - write_land_surface_temperature(output_temp_folder) - # write_landsat_collection_2(output_temp_folder) # TODO no longer used, but may be useful - write_nasa_dem(output_temp_folder) - write_natural_areas(output_temp_folder) - write_openbuildings(output_temp_folder) - # TODO Talk to Saif - # write_open_street_map(output_temp_folder) # TODO still needed or have we switched to overture - write_overture_buildings(output_temp_folder) - # write_sentinel_2_level2(output_temp_folder) # TODO no longer used, but may be useful - write_smart_surface_lulc(output_temp_folder) - write_tree_canopy_height(output_temp_folder) - write_tree_cover(output_temp_folder) - write_urban_land_use(output_temp_folder) - write_world_pop(output_temp_folder) - - -def write_albedo(output_temp_folder): - file_path = prep_output_path(output_temp_folder, 'albedo.tif') - Albedo().write(BBOX, file_path, tile_degrees=None) +def test_write_albedo(target_folder, bbox_info): + file_path = prep_output_path(target_folder, 'albedo.tif') + Albedo().write(bbox_info.bounds, file_path, tile_degrees=None) assert verify_file_is_populated(file_path) -def write_alos_dsm(output_temp_folder): - file_path = prep_output_path(output_temp_folder, 'alos_dsm.tif') - AlosDSM().write(BBOX, file_path, tile_degrees=None) +@pytest.mark.skipif(RUN_DUMPS == False, reason='Skipping since RUN_DUMPS set to False') +def test_write_alos_dsm(target_folder, bbox_info): + file_path = prep_output_path(target_folder, 'alos_dsm.tif') + AlosDSM().write(bbox_info.bounds, file_path, tile_degrees=None) assert verify_file_is_populated(file_path) -def write_average_net_building_height(output_temp_folder): - file_path = prep_output_path(output_temp_folder, 'average_net_building_height.tif') - AverageNetBuildingHeight().write(BBOX, file_path, tile_degrees=None) +@pytest.mark.skipif(RUN_DUMPS == False, reason='Skipping since RUN_DUMPS set to False') +def test_write_average_net_building_height(target_folder, bbox_info): + file_path = prep_output_path(target_folder, 'average_net_building_height.tif') + AverageNetBuildingHeight().write(bbox_info.bounds, file_path, tile_degrees=None) assert verify_file_is_populated(file_path) -def write_esa_world_cover(output_temp_folder): - file_path = prep_output_path(output_temp_folder, 'esa_world_cover.tif') - EsaWorldCover().write(BBOX, file_path, tile_degrees=None) +@pytest.mark.skipif(RUN_DUMPS == False, reason='Skipping since RUN_DUMPS set to False') +def test_write_esa_world_cover(target_folder, bbox_info): + file_path = prep_output_path(target_folder, 'esa_world_cover.tif') + EsaWorldCover().write(bbox_info.bounds, file_path, tile_degrees=None) assert verify_file_is_populated(file_path) -def write_high_land_surface_temperature(output_temp_folder): - file_path = prep_output_path(output_temp_folder, 'high_land_surface_temperature.tif') - HighLandSurfaceTemperature().write(BBOX, file_path, tile_degrees=None) +@pytest.mark.skipif(RUN_DUMPS == False, reason='Skipping since RUN_DUMPS set to False') +def test_write_high_land_surface_temperature(target_folder, bbox_info): + file_path = prep_output_path(target_folder, 'high_land_surface_temperature.tif') + HighLandSurfaceTemperature().write(bbox_info.bounds, file_path, tile_degrees=None) assert verify_file_is_populated(file_path) -def write_land_surface_temperature(output_temp_folder): - file_path = prep_output_path(output_temp_folder, 'land_surface_temperature.tif') - LandSurfaceTemperature().write(BBOX, file_path, tile_degrees=None) +@pytest.mark.skipif(RUN_DUMPS == False, reason='Skipping since RUN_DUMPS set to False') +def test_write_land_surface_temperature(target_folder, bbox_info): + file_path = prep_output_path(target_folder, 'land_surface_temperature.tif') + LandSurfaceTemperature().write(bbox_info.bounds, file_path, tile_degrees=None) assert verify_file_is_populated(file_path) -# TODO: Determine how to output xarray.Dataset with time dimension for QGIS rendering -# def write_landsat_collection_2(output_temp_folder): -# file_path = prep_output_path(output_temp_folder, 'landsat_collection2.tif') +# TODO Class is no longer used, but may be useful later +# @pytest.mark.skipif(RUN_DUMPS == False, reason='Skipping since RUN_DUMPS set to False') +# def test_write_landsat_collection_2(target_folder, bbox_info): +# file_path = prep_output_path(target_folder, 'landsat_collection2.tif') # bands = ['green'] -# LandsatCollection2(bands).write(BBOX, file_path, tile_degrees=None) +# LandsatCollection2(bands).write(bbox_info.bounds, file_path, tile_degrees=None) # assert verify_file_is_populated(file_path) -def write_nasa_dem(output_temp_folder): - file_path = prep_output_path(output_temp_folder, 'nasa_dem.tif') - NasaDEM().write(BBOX, file_path, tile_degrees=None) +@pytest.mark.skipif(RUN_DUMPS == False, reason='Skipping since RUN_DUMPS set to False') +def test_write_nasa_dem(target_folder, bbox_info): + file_path = prep_output_path(target_folder, 'nasa_dem.tif') + NasaDEM().write(bbox_info.bounds, file_path, tile_degrees=None) + assert verify_file_is_populated(file_path) + +@pytest.mark.skipif(RUN_DUMPS == False, reason='Skipping since RUN_DUMPS set to False') +def test_write_natural_areas(target_folder, bbox_info): + file_path = prep_output_path(target_folder, 'natural_areas.tif') + NaturalAreas().write(bbox_info.bounds, file_path, tile_degrees=None) assert verify_file_is_populated(file_path) -def write_natural_areas(output_temp_folder): - file_path = prep_output_path(output_temp_folder, 'natural_areas.tif') - NaturalAreas().write(BBOX, file_path, tile_degrees=None) +@pytest.mark.skipif(RUN_DUMPS == False, reason='Skipping since RUN_DUMPS set to False') +def test_write_ndvi_sentinel2_gee(target_folder, bbox_info): + file_path = prep_output_path(target_folder, 'ndvi_sentinel2_gee.tif') + (NdviSentinel2(year=2023) + .write(bbox_info.bounds, file_path, tile_degrees=None, ndvi_threshold=0.4, convert_to_percentage=True)) assert verify_file_is_populated(file_path) -def write_openbuildings(output_temp_folder): - file_path = prep_output_path(output_temp_folder, 'open_buildings.tif') - OpenBuildings(COUNTRY_CODE_FOR_BBOX).write(BBOX, file_path, tile_degrees=None) +@pytest.mark.skipif(RUN_DUMPS == False, reason='Skipping since RUN_DUMPS set to False') +def test_write_openbuildings(target_folder, bbox_info): + file_path = prep_output_path(target_folder, 'open_buildings.tif') + OpenBuildings(bbox_info.country).write(bbox_info.bounds, file_path, tile_degrees=None) assert verify_file_is_populated(file_path) -# TODO: class function "write" does not properly handle call -# def write_open_street_map(output_temp_folder): -# file_path = prep_output_path(output_temp_folder, 'open_street_map.tif') -# OpenStreetMap().write(BBOX, file_path, tile_degrees=None) +# TODO Class write is not functional. Is class still needed or have we switched to overture? +# @pytest.mark.skipif(RUN_DUMPS == False, reason='Skipping since RUN_DUMPS set to False') +# def test_write_open_street_map(target_folder, bbox_info): +# file_path = prep_output_path(target_folder, 'open_street_map.tif') +# OpenStreetMap().write(bbox_info.bounds, file_path, tile_degrees=None) # assert verify_file_is_populated(file_path) -def write_overture_buildings(output_temp_folder): - file_path = prep_output_path(output_temp_folder, 'overture_buildings.tif') - OvertureBuildings().write(BBOX, file_path, tile_degrees=None) +@pytest.mark.skipif(RUN_DUMPS == False, reason='Skipping since RUN_DUMPS set to False') +def test_write_overture_buildings(target_folder, bbox_info): + file_path = prep_output_path(target_folder, 'overture_buildings.tif') + OvertureBuildings().write(bbox_info.bounds, file_path, tile_degrees=None) assert verify_file_is_populated(file_path) -# TODO: Determine how to output xarray.Dataset with time dimension for QGIS rendering -# def write_sentinel_2_level2(output_temp_folder): -# file_path = prep_output_path(output_temp_folder, 'sentinel_2_level2.tif') +# TODO Class is no longer used, but may be useful later +# @pytest.mark.skipif(RUN_DUMPS == False, reason='Skipping since RUN_DUMPS set to False') +# def test_write_sentinel_2_level2(target_folder, bbox_info): +# file_path = prep_output_path(target_folder, 'sentinel_2_level2.tif') # sentinel_2_bands = ["green"] -# Sentinel2Level2(sentinel_2_bands).write(BBOX, file_path, tile_degrees=None) +# Sentinel2Level2(sentinel_2_bands).write(bbox_info.bounds, file_path, tile_degrees=None) # assert verify_file_is_populated(file_path) -def write_smart_surface_lulc(output_temp_folder): - file_path = prep_output_path(output_temp_folder, 'smart_surface_lulc.tif') - SmartSurfaceLULC().write(BBOX, file_path, tile_degrees=None) +@pytest.mark.skipif(RUN_DUMPS == False, reason='Skipping since RUN_DUMPS set to False') +def test_write_smart_surface_lulc(target_folder, bbox_info): + file_path = prep_output_path(target_folder, 'smart_surface_lulc.tif') + SmartSurfaceLULC().write(bbox_info.bounds, file_path, tile_degrees=None) assert verify_file_is_populated(file_path) -def write_tree_canopy_height(output_temp_folder): - file_path = prep_output_path(output_temp_folder, 'tree_canopy_height.tif') - TreeCanopyHeight().write(BBOX, file_path, tile_degrees=None) +@pytest.mark.skipif(RUN_DUMPS == False, reason='Skipping since RUN_DUMPS set to False') +def test_write_tree_canopy_height(target_folder, bbox_info): + file_path = prep_output_path(target_folder, 'tree_canopy_height.tif') + TreeCanopyHeight().write(bbox_info.bounds, file_path, tile_degrees=None) assert verify_file_is_populated(file_path) -def write_tree_cover(output_temp_folder): - file_path = prep_output_path(output_temp_folder, 'tree_cover.tif') - TreeCover().write(BBOX, file_path, tile_degrees=None) +@pytest.mark.skipif(RUN_DUMPS == False, reason='Skipping since RUN_DUMPS set to False') +def test_write_tree_cover(target_folder, bbox_info): + file_path = prep_output_path(target_folder, 'tree_cover.tif') + TreeCover().write(bbox_info.bounds, file_path, tile_degrees=None) assert verify_file_is_populated(file_path) -def write_urban_land_use(output_temp_folder): - file_path = prep_output_path(output_temp_folder, 'urban_land_use.tif') - UrbanLandUse().write(BBOX, file_path, tile_degrees=None) +@pytest.mark.skipif(RUN_DUMPS == False, reason='Skipping since RUN_DUMPS set to False') +def test_write_urban_land_use(target_folder, bbox_info): + file_path = prep_output_path(target_folder, 'urban_land_use.tif') + UrbanLandUse().write(bbox_info.bounds, file_path, tile_degrees=None) assert verify_file_is_populated(file_path) -def write_world_pop(output_temp_folder): - file_path = prep_output_path(output_temp_folder, 'world_pop.tif') - WorldPop().write(BBOX, file_path, tile_degrees=None) +@pytest.mark.skipif(RUN_DUMPS == False, reason='Skipping since RUN_DUMPS set to False') +def test_write_world_pop(target_folder, bbox_info): + file_path = prep_output_path(target_folder, 'world_pop.tif') + WorldPop().write(bbox_info.bounds, file_path, tile_degrees=None) assert verify_file_is_populated(file_path) - - -def prep_output_path(output_temp_folder, file_name): - file_path = os.path.join(output_temp_folder, file_name) - if os.path.isfile(file_path): - os.remove(file_path) - return file_path - -def verify_file_is_populated(file_path): - is_populated = True if os.path.getsize(file_path) > 0 else False - return is_populated diff --git a/tests/test_layers.py b/tests/test_layers.py index 7980aa1..bfcf4a0 100644 --- a/tests/test_layers.py +++ b/tests/test_layers.py @@ -5,6 +5,7 @@ Albedo, AlosDSM, AverageNetBuildingHeight, + NdviSentinel2, EsaWorldCover, EsaWorldCoverClass, HighLandSurfaceTemperature, @@ -24,28 +25,30 @@ WorldPop ) from city_metrix.layers.layer import get_image_collection -from tests.resources.bbox_constants import BBOX_BR_LAURO_DE_FREITAS_1 +from tests.resources.bbox_constants import BBOX_BRA_LAURO_DE_FREITAS_1 EE_IMAGE_DIMENSION_TOLERANCE = 1 # Tolerance compensates for variable results from GEE service - +# Tests are implemented for the same bounding box in Brazil. +COUNTRY_CODE_FOR_BBOX = 'BRA' +BBOX = BBOX_BRA_LAURO_DE_FREITAS_1 def test_albedo(): - assert Albedo().get_data(BBOX_BR_LAURO_DE_FREITAS_1).mean() + assert Albedo().get_data(BBOX).mean() def test_alos_dsm(): - mean = AlosDSM().get_data(BBOX_BR_LAURO_DE_FREITAS_1).mean() + mean = AlosDSM().get_data(BBOX).mean() assert mean def test_average_net_building_height(): - assert AverageNetBuildingHeight().get_data(BBOX_BR_LAURO_DE_FREITAS_1).mean() + assert AverageNetBuildingHeight().get_data(BBOX).mean() def test_esa_world_cover(): count = ( EsaWorldCover(land_cover_class=EsaWorldCoverClass.BUILT_UP) - .get_data(BBOX_BR_LAURO_DE_FREITAS_1) + .get_data(BBOX) .count() ) assert count @@ -53,7 +56,7 @@ def test_esa_world_cover(): def test_read_image_collection(): ic = ee.ImageCollection("ESA/WorldCover/v100") - data = get_image_collection(ic, BBOX_BR_LAURO_DE_FREITAS_1, 10, "test") + data = get_image_collection(ic, BBOX, 10, "test") expected_crs = 32724 expected_x_dimension = 187 @@ -68,47 +71,52 @@ def test_read_image_collection(): def test_read_image_collection_scale(): ic = ee.ImageCollection("ESA/WorldCover/v100") - data = get_image_collection(ic, BBOX_BR_LAURO_DE_FREITAS_1, 100, "test") + data = get_image_collection(ic, BBOX, 100, "test") expected_x_dimension = 19 expected_y_dimension = 20 assert data.dims == {"x": expected_x_dimension, "y": expected_y_dimension} def test_high_land_surface_temperature(): - data = HighLandSurfaceTemperature().get_data(BBOX_BR_LAURO_DE_FREITAS_1) + data = HighLandSurfaceTemperature().get_data(BBOX) assert data.any() def test_land_surface_temperature(): - mean_lst = LandSurfaceTemperature().get_data(BBOX_BR_LAURO_DE_FREITAS_1).mean() + mean_lst = LandSurfaceTemperature().get_data(BBOX).mean() assert mean_lst +@pytest.mark.skip(reason="layer is deprecated") def test_landsat_collection_2(): - bands = ['green'] - data = LandsatCollection2(bands).get_data(BBOX_BR_LAURO_DE_FREITAS_1) + bands = ["blue"] + data = LandsatCollection2(bands).get_data(BBOX) assert data.any() def test_nasa_dem(): - mean = NasaDEM().get_data(BBOX_BR_LAURO_DE_FREITAS_1).mean() + mean = NasaDEM().get_data(BBOX).mean() assert mean def test_natural_areas(): - data = NaturalAreas().get_data(BBOX_BR_LAURO_DE_FREITAS_1) + data = NaturalAreas().get_data(BBOX) assert data.any() +def test_ndvi_sentinel2(): + data = NdviSentinel2(year=2023).get_data(BBOX) + assert data is not None + def test_openbuildings(): - count = OpenBuildings().get_data(BBOX_BR_LAURO_DE_FREITAS_1).count().sum() + count = OpenBuildings(COUNTRY_CODE_FOR_BBOX).get_data(BBOX).count().sum() assert count def test_open_street_map(): count = ( OpenStreetMap(osm_class=OpenStreetMapClass.ROAD) - .get_data(BBOX_BR_LAURO_DE_FREITAS_1) + .get_data(BBOX) .count() .sum() ) @@ -116,28 +124,27 @@ def test_open_street_map(): def test_overture_buildings(): - count = OvertureBuildings().get_data(BBOX_BR_LAURO_DE_FREITAS_1).count().sum() + count = OvertureBuildings().get_data(BBOX).count().sum() assert count +@pytest.mark.skip(reason="layer is deprecated") def test_sentinel_2_level2(): sentinel_2_bands = ["green"] - data = Sentinel2Level2(sentinel_2_bands).get_data(BBOX_BR_LAURO_DE_FREITAS_1) + data = Sentinel2Level2(sentinel_2_bands).get_data(BBOX) assert data.any() def test_smart_surface_lulc(): - count = SmartSurfaceLULC().get_data(BBOX_BR_LAURO_DE_FREITAS_1).count() + count = SmartSurfaceLULC().get_data(BBOX).count() assert count - def test_tree_canopy_height(): - count = TreeCanopyHeight().get_data(BBOX_BR_LAURO_DE_FREITAS_1).count() + count = TreeCanopyHeight().get_data(BBOX).count() assert count - def test_tree_cover(): - actual = TreeCover().get_data(BBOX_BR_LAURO_DE_FREITAS_1).mean() + actual = TreeCover().get_data(BBOX).mean() expected = 54.0 tolerance = 0.1 assert ( @@ -146,9 +153,9 @@ def test_tree_cover(): def test_urban_land_use(): - assert UrbanLandUse().get_data(BBOX_BR_LAURO_DE_FREITAS_1).count() + assert UrbanLandUse().get_data(BBOX).count() def test_world_pop(): - data = WorldPop().get_data(BBOX_BR_LAURO_DE_FREITAS_1) + data = WorldPop().get_data(BBOX) assert data.any() diff --git a/tools/general_tools.py b/tools/general_tools.py index 1497864..b38d1b5 100644 --- a/tools/general_tools.py +++ b/tools/general_tools.py @@ -1,31 +1,17 @@ import os import tempfile -def create_temp_folder(sub_directory_name: str, delete_existing_files: bool): - scratch_dir_name = tempfile.TemporaryDirectory().name - dirpath = os.path.dirname(scratch_dir_name) - temp_dir = os.path.join(dirpath, sub_directory_name) - _create_target_folder(temp_dir, delete_existing_files) - - return temp_dir - -def create_folder(folder_path, delete_existing_files: bool): - if _is_valid_path(folder_path) is False: - raise ValueError(f"The custom path '%s' is not valid. Stopping." % folder_path) - _create_target_folder(folder_path, delete_existing_files) - return folder_path - -def _is_valid_path(path: str): +def is_valid_path(path: str): return os.path.exists(path) -def _create_target_folder(folder_path, delete_existing_files: bool): +def create_target_folder(folder_path, delete_existing_files: bool): if os.path.isdir(folder_path) is False: os.makedirs(folder_path) elif delete_existing_files is True: - _remove_all_files_in_directory(folder_path) + remove_all_files_in_directory(folder_path) -def _remove_all_files_in_directory(directory): +def remove_all_files_in_directory(directory): # Iterate over all the files in the directory for filename in os.listdir(directory): file_path = os.path.join(directory, filename) diff --git a/tools/xarray_tools.py b/tools/xarray_tools.py new file mode 100644 index 0000000..2ef773d --- /dev/null +++ b/tools/xarray_tools.py @@ -0,0 +1,18 @@ +import numpy as np +from rasterio import uint8 + +def convert_ratio_to_percentage(data): + """ + Converts xarray variable from a ratio to a percentage + :param data: (xarray) xarray to be converted + :return: A rioxarray-format DataArray + """ + + # convert to percentage and to bytes for efficient storage + values_as_percent = np.round(data * 100).astype(uint8) + + # reset CRS + source_crs = data.rio.crs + values_as_percent.rio.write_crs(source_crs, inplace=True) + + return values_as_percent