diff --git a/.gitattributes b/.gitattributes index a6344aac8c09253b3b630fb776ae94478aa0275b..063e22e5c4de92c642b4efad179f49fa93c5a007 100644 --- a/.gitattributes +++ b/.gitattributes @@ -33,3 +33,8 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text *.zip filter=lfs diff=lfs merge=lfs -text *.zst filter=lfs diff=lfs merge=lfs -text *tfevents* filter=lfs diff=lfs merge=lfs -text +y/media/shp/District_Boundary.shp filter=lfs diff=lfs merge=lfs -text +y/media/shp/hydro_basins.shp filter=lfs diff=lfs merge=lfs -text +y/media/shp/kenya_highland_roads.shp filter=lfs diff=lfs merge=lfs -text +y/media/shp/National_Constituency_with_Projected_2010_Population.shp filter=lfs diff=lfs merge=lfs -text +y/media/shp/Provincial_Constituency.shp filter=lfs diff=lfs merge=lfs -text diff --git a/y/.DS_Store b/y/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..47887136dbd14076604ee479e62ac9a91bc51542 Binary files /dev/null and b/y/.DS_Store differ diff --git a/y/.gitignore b/y/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..b6e47617de110dea7ca47e087ff1347cc2646eda --- /dev/null +++ b/y/.gitignore @@ -0,0 +1,129 @@ +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# C extensions +*.so + +# Distribution / packaging +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +pip-wheel-metadata/ +share/python-wheels/ +*.egg-info/ +.installed.cfg +*.egg +MANIFEST + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.nox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*.cover +*.py,cover +.hypothesis/ +.pytest_cache/ + +# Translations +*.mo +*.pot + +# Django stuff: +*.log +local_settings.py +db.sqlite3 +db.sqlite3-journal + +# Flask stuff: +instance/ +.webassets-cache + +# Scrapy stuff: +.scrapy + +# Sphinx documentation +docs/_build/ + +# PyBuilder +target/ + +# Jupyter Notebook +.ipynb_checkpoints + +# IPython +profile_default/ +ipython_config.py + +# pyenv +.python-version + +# pipenv +# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. +# However, in case of collaboration, if having platform-specific dependencies or dependencies +# having no cross-platform support, pipenv may install dependencies that don't work, or not +# install all needed dependencies. +#Pipfile.lock + +# PEP 582; used by e.g. github.com/David-OConnor/pyflow +__pypackages__/ + +# Celery stuff +celerybeat-schedule +celerybeat.pid + +# SageMath parsed files +*.sage.py + +# Environments +.env +.venv +env/ +venv/ +ENV/ +env.bak/ +venv.bak/ + +# Spyder project settings +.spyderproject +.spyproject + +# Rope project settings +.ropeproject + +# mkdocs documentation +/site + +# mypy +.mypy_cache/ +.dmypy.json +dmypy.json + +# Pyre type checker +.pyre/ diff --git a/y/Home.py b/y/Home.py new file mode 100644 index 0000000000000000000000000000000000000000..573218e45a3e57fa498e5149450ade0426492b17 --- /dev/null +++ b/y/Home.py @@ -0,0 +1,2079 @@ +import streamlit as st +import folium +import geopandas as gpd +import json +import geemap.foliumap as geemap +import ee +import pandas as pd +import os +from google.auth.transport.requests import Request +import google.auth.exceptions +from streamlit.components.v1 import html +import ee +import json +import os +import datetime +import fiona +import geopandas as gpd +import folium +import streamlit as st +import geemap.colormaps as cm +import geemap.foliumap as geemap +from datetime import date +from shapely.geometry import Polygon +import leafmap.foliumap as leafmap + + + +# Define the pages +def page_home(): + st.title("Home Page") + st.write("Welcome to the Home Page!") + +def page_about(): + st.title("About Page") + st.write("The main purpose is to provide navigation to other pages/maps.") + + + +# Path to your shapefiles and service account key +SHAPEFILE_DIR = 'C:/Users/piv/Desktop/y/media/shp' + + +#<-------------------------------------------------------------------- Google earth engine Authentication code--------------------------------------------------------------------------------> + +def initialize_gee(): + service = os.getenv('SA') + file = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'gee', 'ee-muzzamil1-37ebc3dece52.json') + credentials = ee.ServiceAccountCredentials(service, file) + try: + ee.Initialize(credentials) + st.success("Google Earth Engine initialized successfully.") + except google.auth.exceptions.RefreshError: + try: + request = Request() + credentials.refresh(request) + ee.Initialize(credentials) + st.success("Google Earth Engine token refreshed and initialized successfully.") + except Exception as e: + st.error(f"Error refreshing Google Earth Engine token: {e}") + except Exception as e: + st.error(f"Error initializing Google Earth Engine: {e}") + +#<---------------------------------------------------------------Interactive map code used to callin home page (Navigation purpose)----------------------------------------------------------------------------------> + +def interactive_map_page(): + st.title("Interactive Map") + create_sidebar_controls() + + map_col, control_col = st.columns([3, 1]) # Adjust column width ratios as needed + + with map_col: + if 'submitted' in st.session_state and st.session_state.submitted: + st.markdown("### Satellite Data Map") + st.components.v1.html(st.session_state.folium_map_html, height=600) + + with control_col: + st.header("Map Controls") + +def create_folium_map(selected_dataset, ee_object, start_date_str, end_date_str): + folium_map = folium.Map(location=[25.5973518, 65.54495724], zoom_start=7) + + try: + if selected_dataset == "Modis": + dataset = ee.ImageCollection('MODIS/006/MOD13Q1') \ + .filter(ee.Filter.date(start_date_str, end_date_str)) \ + .filterBounds(ee_object) + + def clip_image(img): + return img.clip(ee_object).select('NDVI') + + clipped_collection = dataset.map(clip_image) + modis_ndvi = clipped_collection.mean() + vis_params_ndvi = { + 'min': 0, + 'max': 9000, + 'palette': ['FE8374', 'C0E5DE', '3A837C', '034B48'] + } + modis_ndvi_map_id = modis_ndvi.getMapId(vis_params_ndvi) + folium.TileLayer( + tiles=modis_ndvi_map_id['tile_fetcher'].url_format, + attr='Google Earth Engine', + name='NDVI', + overlay=True, + control=True + ).add_to(folium_map) + + elif selected_dataset == "dataset_nighttime": + dataset_nighttime = ee.ImageCollection('NOAA/VIIRS/DNB/MONTHLY_V1/VCMCFG') \ + .filter(ee.Filter.date(start_date_str, end_date_str)) + + nighttime = dataset_nighttime.select('avg_rad').mosaic() + nighttime_clipped = nighttime.clip(ee_object) + nighttime_vis = { + 'min': 0.0, + 'max': 60.0, + 'palette': ['1a3678', '2955bc', '5699ff', '8dbae9', 'acd1ff', 'caebff', 'e5f9ff', 'fdffb4', 'ffe6a2', 'ffc969', 'ffa12d', 'ff7c1f', 'ca531a', 'ff0000', 'ab0000'] + } + nighttime_map_id = nighttime_clipped.getMapId(nighttime_vis) + folium.TileLayer( + tiles=nighttime_map_id['tile_fetcher'].url_format, + attr='Google Earth Engine', + name='Nighttime Lights', + overlay=True, + control=True + ).add_to(folium_map) + + elif selected_dataset == "precipitation": + dataset_precipitation = ee.ImageCollection('UCSB-CHG/CHIRPS/DAILY') \ + .filter(ee.Filter.date(start_date_str, end_date_str)) + + precipitation = dataset_precipitation.mosaic().clip(ee_object) + precip_vis = { + 'min': 0, + 'max': 300, + 'palette': ['blue', 'cyan', 'lime', 'yellow', 'red'] + } + precip_map_id = precipitation.getMapId(precip_vis) + folium.TileLayer( + tiles=precip_map_id['tile_fetcher'].url_format, + attr='Google Earth Engine', + name='Precipitation', + overlay=True, + control=True + ).add_to(folium_map) + + elif selected_dataset == "GlobalSurfaceWater": + st.warning("GlobalSurfaceWater dataset is not configured.") + + elif selected_dataset == "WorldPop": + dataset = ee.ImageCollection('WorldPop/GP/100m/pop') \ + .filterBounds(ee_object) \ + .filter(ee.Filter.date(start_date_str, end_date_str)) + + population = dataset.mean().clip(ee_object) + pop_vis = { + 'min': 0, + 'max': 1000, + 'palette': ['blue', 'green', 'yellow', 'red'] + } + pop_map_id = population.getMapId(pop_vis) + folium.TileLayer( + tiles=pop_map_id['tile_fetcher'].url_format, + attr='Google Earth Engine', + name='World Population', + overlay=True, + control=True + ).add_to(folium_map) + + elif selected_dataset == "COPERNICUS": + dataset = ee.ImageCollection('COPERNICUS/S2') \ + .filterBounds(ee_object) \ + .filter(ee.Filter.date(start_date_str, end_date_str)) + + sentinel = dataset.median().clip(ee_object) + vis_params = { + 'bands': ['B4', 'B3', 'B2'], + 'min': 0, + 'max': 3000, + 'gamma': 1.4 + } + copernicus_map_id = sentinel.getMapId(vis_params) + folium.TileLayer( + tiles=copernicus_map_id['tile_fetcher'].url_format, + attr='Google Earth Engine', + name='Copernicus Sentinel-2', + overlay=True, + control=True + ).add_to(folium_map) + + folium_map.add_child(folium.LayerControl()) + except Exception as e: + st.error(f"Error processing dataset: {e}") + + folium_map_html = folium_map._repr_html_() + return folium_map_html + +def handle_submit(selected_dataset, selected_date_range_From, selected_date_range_To, selected_shape): + shapefile_name = f'{selected_shape}.shp' + shapefile_path = os.path.join(SHAPEFILE_DIR, shapefile_name) + + if os.path.exists(shapefile_path): + try: + roi_gdf = gpd.read_file(shapefile_path) + roi_geojson = roi_gdf.to_crs("EPSG:4326").to_json() + except Exception as e: + st.error(f"Error reading shapefile: {e}") + return + + try: + ee_object = geemap.geojson_to_ee(json.loads(roi_geojson)) + except Exception as e: + st.error(f"Error converting GeoJSON to Earth Engine object: {e}") + return + + st.markdown("### Satellite Data Map") + folium_map_html = create_folium_map( + selected_dataset, + ee_object, + selected_date_range_From.strftime('%Y-%m-%d'), + selected_date_range_To.strftime('%Y-%m-%d') + ) + st.session_state.folium_map_html = folium_map_html + else: + st.error("Selected shapefile does not exist.") + +def create_sidebar_controls(): + with st.sidebar: + selected_dataset = st.selectbox( + "Select Dataset", + ["Modis", "dataset_nighttime", 'precipitation', 'GlobalSurfaceWater', 'WorldPop', 'COPERNICUS'], + key='sidebar_dataset_selectbox' + ) + + selected_date_range_From = st.date_input( + "From", + value=pd.to_datetime("2015-07-01"), + key='sidebar_date_from' + ) + selected_date_range_To = st.date_input( + "To", + value=pd.to_datetime("2023-09-30"), + key='sidebar_date_to' + ) + + shape_options = [ + 'District_Boundary', 'hydro_basins', 'karachi', + 'National_Constituency_with_Projected_2010_Population', + 'Provincial_Boundary', 'Provincial_Constituency', + 'Tehsil_Boundary', 'Union_Council' + ] + + selected_shape = st.selectbox( + "Select Shape", + shape_options, + key='sidebar_shape_selectbox' + ) + + if st.button("Submit", key='sidebar_submit_button'): + st.session_state.selected_dataset = selected_dataset + st.session_state.selected_date_range_From = selected_date_range_From + st.session_state.selected_date_range_To = selected_date_range_To + st.session_state.selected_shape = selected_shape + st.session_state.submitted = True + else: + st.session_state.submitted = False + + if 'submitted' in st.session_state and st.session_state.submitted: + handle_submit( + st.session_state.selected_dataset, + st.session_state.selected_date_range_From, + st.session_state.selected_date_range_To, + st.session_state.selected_shape + ) + + +def interactive_map_page(): + st.title("Interactive Map") + submit_control() + +#<------------------------------------------------------- Interactive map code-------------------------------------------------------------------------------------------------------------------> + + + + # Create two columns: one for the map and one for the controls + map_col, control_col = st.columns([3, 1]) # Adjust column width ratios as needed + + # Map column + with map_col: + if 'submitted' in st.session_state and st.session_state.submitted: + st.markdown("### Satellite Data Map") + st.components.v1.html(st.session_state.folium_map_html, height=600) + + # Control column + with control_col: + st.header("Map Controls") + selected_dataset = st.selectbox( + "Select Dataset", + ["Modis", "dataset_nighttime", 'precipitation', 'GlobalSurfaceWater', 'WorldPop', 'COPERNICUS'] + ) + + selected_date_range_From = st.date_input("From", value=pd.to_datetime("2015-07-01")) + selected_date_range_To = st.date_input("To", value=pd.to_datetime("2023-09-30")) + + shape_options = [ + 'District_Boundary', 'hydro_basins', 'karachi', + 'National_Constituency_with_Projected_2010_Population', + 'Provincial_Boundary', 'Provincial_Constituency', + 'Tehsil_Boundary', 'Union_Council' + ] + + selected_shape = st.selectbox("Select Shape", shape_options) + + if st.button("Submit"): + handle_submit( + selected_dataset, + selected_date_range_From, + selected_date_range_To, + selected_shape + ) + + +def create_folium_map(selected_dataset, ee_object, start_date_str, end_date_str): + folium_map = folium.Map(location=[25.5973518, 65.54495724], zoom_start=7) + + try: + if selected_dataset == "Modis": + dataset = ee.ImageCollection('MODIS/006/MOD13Q1') \ + .filter(ee.Filter.date(start_date_str, end_date_str)) \ + .filterBounds(ee_object) + + def clip_image(img): + return img.clip(ee_object).select('NDVI') + + clipped_collection = dataset.map(clip_image) + modis_ndvi = clipped_collection.mean() + vis_params_ndvi = { + 'min': 0, + 'max': 9000, + 'palette': ['FE8374', 'C0E5DE', '3A837C', '034B48'] + } + modis_ndvi_map_id = modis_ndvi.getMapId(vis_params_ndvi) + folium.TileLayer( + tiles=modis_ndvi_map_id['tile_fetcher'].url_format, + attr='Google Earth Engine', + name='NDVI', + overlay=True, + control=True + ).add_to(folium_map) + + elif selected_dataset == "dataset_nighttime": + dataset_nighttime = ee.ImageCollection('NOAA/VIIRS/DNB/MONTHLY_V1/VCMCFG') \ + .filter(ee.Filter.date(start_date_str, end_date_str)) + + nighttime = dataset_nighttime.select('avg_rad').mosaic() + nighttime_clipped = nighttime.clip(ee_object) + nighttime_vis = { + 'min': 0.0, + 'max': 60.0, + 'palette': ['1a3678', '2955bc', '5699ff', '8dbae9', 'acd1ff', 'caebff', 'e5f9ff', 'fdffb4', 'ffe6a2', 'ffc969', 'ffa12d', 'ff7c1f', 'ca531a', 'ff0000', 'ab0000'] + } + nighttime_map_id = nighttime_clipped.getMapId(nighttime_vis) + folium.TileLayer( + tiles=nighttime_map_id['tile_fetcher'].url_format, + attr='Google Earth Engine', + name='Nighttime Lights', + overlay=True, + control=True + ).add_to(folium_map) + + elif selected_dataset == "precipitation": + dataset_precipitation = ee.ImageCollection('UCSB-CHG/CHIRPS/DAILY') \ + .filter(ee.Filter.date(start_date_str, end_date_str)) + + precipitation = dataset_precipitation.mosaic().clip(ee_object) + precip_vis = { + 'min': 0, + 'max': 300, + 'palette': ['blue', 'cyan', 'lime', 'yellow', 'red'] + } + precip_map_id = precipitation.getMapId(precip_vis) + folium.TileLayer( + tiles=precip_map_id['tile_fetcher'].url_format, + attr='Google Earth Engine', + name='Precipitation', + overlay=True, + control=True + ).add_to(folium_map) + + elif selected_dataset == "GlobalSurfaceWater": + st.warning("GlobalSurfaceWater dataset is not configured.") + + elif selected_dataset == "WorldPop": + dataset = ee.ImageCollection('WorldPop/GP/100m/pop') \ + .filterBounds(ee_object) \ + .filter(ee.Filter.date(start_date_str, end_date_str)) + + population = dataset.mean().clip(ee_object) + pop_vis = { + 'min': 0, + 'max': 1000, + 'palette': ['blue', 'green', 'yellow', 'red'] + } + pop_map_id = population.getMapId(pop_vis) + folium.TileLayer( + tiles=pop_map_id['tile_fetcher'].url_format, + attr='Google Earth Engine', + name='World Population', + overlay=True, + control=True + ).add_to(folium_map) + + elif selected_dataset == "COPERNICUS": + dataset = ee.ImageCollection('COPERNICUS/S2') \ + .filterBounds(ee_object) \ + .filter(ee.Filter.date(start_date_str, end_date_str)) + + sentinel = dataset.median().clip(ee_object) + vis_params = { + 'bands': ['B4', 'B3', 'B2'], + 'min': 0, + 'max': 3000, + 'gamma': 1.4 + } + copernicus_map_id = sentinel.getMapId(vis_params) + folium.TileLayer( + tiles=copernicus_map_id['tile_fetcher'].url_format, + attr='Google Earth Engine', + name='Copernicus Sentinel-2', + overlay=True, + control=True + ).add_to(folium_map) + + folium_map.add_child(folium.LayerControl()) + except Exception as e: + st.error(f"Error processing dataset: {e}") + + folium_map_html = folium_map._repr_html_() + return folium_map_html + +def handle_submit(selected_dataset, selected_date_range_From, selected_date_range_To, selected_shape): + shapefile_name = f'{selected_shape}.shp' + shapefile_path = os.path.join(SHAPEFILE_DIR, shapefile_name) + + if os.path.exists(shapefile_path): + try: + roi_gdf = gpd.read_file(shapefile_path) + roi_geojson = roi_gdf.to_crs("EPSG:4326").to_json() + except Exception as e: + st.error(f"Error reading shapefile: {e}") + return + + try: + ee_object = geemap.geojson_to_ee(json.loads(roi_geojson)) + except Exception as e: + st.error(f"Error converting GeoJSON to Earth Engine object: {e}") + return + + st.markdown("### Satellite Data Map") + folium_map_html = create_folium_map( + selected_dataset, + ee_object, + selected_date_range_From.strftime('%Y-%m-%d'), + selected_date_range_To.strftime('%Y-%m-%d') + ) + html(folium_map_html, height=600) + else: + st.error("Selected shapefile does not exist.") + +def submit_control(): + selected_dataset = st.sidebar.selectbox( + "Select Dataset", + ["Modis", "dataset_nighttime", 'precipitation', 'GlobalSurfaceWater', 'WorldPop', 'COPERNICUS'] + ) + + selected_date_range_From = st.sidebar.date_input("From", value=pd.to_datetime("2015-07-01")) + selected_date_range_To = st.sidebar.date_input("To", value=pd.to_datetime("2023-09-30")) + + shape_options = [ + 'District_Boundary', 'hydro_basins', 'karachi', + 'National_Constituency_with_Projected_2010_Population', + 'Provincial_Boundary', 'Provincial_Constituency', + 'Tehsil_Boundary', 'Union_Council' + ] + + selected_shape = st.sidebar.selectbox("Select Shape", shape_options) + + if st.sidebar.button("Submit"): + st.session_state.selected_dataset = selected_dataset + st.session_state.selected_date_range_From = selected_date_range_From + st.session_state.selected_date_range_To = selected_date_range_To + st.session_state.selected_shape = selected_shape + st.session_state.submitted = True + else: + st.session_state.submitted = False + + if 'submitted' in st.session_state and st.session_state.submitted: + handle_submit( + st.session_state.selected_dataset, + st.session_state.selected_date_range_From, + st.session_state.selected_date_range_To, + st.session_state.selected_shape + ) + +def main(): + st.set_page_config(layout="wide") + st.title("Satellite Data Visualization") + + initialize_gee() + + +if __name__ == "__main__": + main() + +#<---------------------------------------------------------------------timelapse pagefunction which is calling it in home (Navigation Purpose)-----------------------------------------------------------------------------------------------------> + +def Timelapse_page(): + try: + app() + except Exception as e: + pass + +#<------------------------------------------------------------------- timelapse code---------------------------------------------------------------------------------------------------------> +#create timelapse + +@st.cache_data +def ee_authenticate(token_name="EARTHENGINE_TOKEN"): + geemap.ee_initialize(token_name=token_name) + + +goes_rois = { + "Creek Fire, CA (2020-09-05)": { + "region": Polygon( + [ + [-121.003418, 36.848857], + [-121.003418, 39.049052], + [-117.905273, 39.049052], + [-117.905273, 36.848857], + [-121.003418, 36.848857], + ] + ), + "start_time": "2020-09-05T15:00:00", + "end_time": "2020-09-06T02:00:00", + }, + "Bomb Cyclone (2021-10-24)": { + "region": Polygon( + [ + [-159.5954, 60.4088], + [-159.5954, 24.5178], + [-114.2438, 24.5178], + [-114.2438, 60.4088], + ] + ), + "start_time": "2021-10-24T14:00:00", + "end_time": "2021-10-25T01:00:00", + }, + "Hunga Tonga Volcanic Eruption (2022-01-15)": { + "region": Polygon( + [ + [-192.480469, -32.546813], + [-192.480469, -8.754795], + [-157.587891, -8.754795], + [-157.587891, -32.546813], + [-192.480469, -32.546813], + ] + ), + "start_time": "2022-01-15T03:00:00", + "end_time": "2022-01-15T07:00:00", + }, + "Hunga Tonga Volcanic Eruption Closer Look (2022-01-15)": { + "region": Polygon( + [ + [-178.901367, -22.958393], + [-178.901367, -17.85329], + [-171.452637, -17.85329], + [-171.452637, -22.958393], + [-178.901367, -22.958393], + ] + ), + "start_time": "2022-01-15T03:00:00", + "end_time": "2022-01-15T07:00:00", + }, +} + + +landsat_rois = { + "Aral Sea": Polygon( + [ + [57.667236, 43.834527], + [57.667236, 45.996962], + [61.12793, 45.996962], + [61.12793, 43.834527], + [57.667236, 43.834527], + ] + ), + "Dubai": Polygon( + [ + [54.541626, 24.763044], + [54.541626, 25.427152], + [55.632019, 25.427152], + [55.632019, 24.763044], + [54.541626, 24.763044], + ] + ), + "Hong Kong International Airport": Polygon( + [ + [113.825226, 22.198849], + [113.825226, 22.349758], + [114.085121, 22.349758], + [114.085121, 22.198849], + [113.825226, 22.198849], + ] + ), + "Las Vegas, NV": Polygon( + [ + [-115.554199, 35.804449], + [-115.554199, 36.558188], + [-113.903503, 36.558188], + [-113.903503, 35.804449], + [-115.554199, 35.804449], + ] + ), + "Pucallpa, Peru": Polygon( + [ + [-74.672699, -8.600032], + [-74.672699, -8.254983], + [-74.279938, -8.254983], + [-74.279938, -8.600032], + ] + ), + "Sierra Gorda, Chile": Polygon( + [ + [-69.315491, -22.837104], + [-69.315491, -22.751488], + [-69.190006, -22.751488], + [-69.190006, -22.837104], + [-69.315491, -22.837104], + ] + ), +} + +modis_rois = { + "World": Polygon( + [ + [-171.210938, -57.136239], + [-171.210938, 79.997168], + [177.539063, 79.997168], + [177.539063, -57.136239], + [-171.210938, -57.136239], + ] + ), + "Africa": Polygon( + [ + [-18.6983, 38.1446], + [-18.6983, -36.1630], + [52.2293, -36.1630], + [52.2293, 38.1446], + ] + ), + "USA": Polygon( + [ + [-127.177734, 23.725012], + [-127.177734, 50.792047], + [-66.269531, 50.792047], + [-66.269531, 23.725012], + [-127.177734, 23.725012], + ] + ), +} + +ocean_rois = { + "Gulf of Mexico": Polygon( + [ + [-101.206055, 15.496032], + [-101.206055, 32.361403], + [-75.673828, 32.361403], + [-75.673828, 15.496032], + [-101.206055, 15.496032], + ] + ), + "North Atlantic Ocean": Polygon( + [ + [-85.341797, 24.046464], + [-85.341797, 45.02695], + [-55.810547, 45.02695], + [-55.810547, 24.046464], + [-85.341797, 24.046464], + ] + ), + "World": Polygon( + [ + [-171.210938, -57.136239], + [-171.210938, 79.997168], + [177.539063, 79.997168], + [177.539063, -57.136239], + [-171.210938, -57.136239], + ] + ), +} + + +@st.cache_data +def uploaded_file_to_gdf(data): + import tempfile + import os + import uuid + + _, file_extension = os.path.splitext(data.name) + file_id = str(uuid.uuid4()) + file_path = os.path.join(tempfile.gettempdir(), f"{file_id}{file_extension}") + + with open(file_path, "wb") as file: + file.write(data.getbuffer()) + + if file_path.lower().endswith(".kml"): + fiona.drvsupport.supported_drivers["KML"] = "rw" + gdf = gpd.read_file(file_path, driver="KML") + else: + gdf = gpd.read_file(file_path) + + return gdf + + +def app(): + + today = date.today() + + st.title("Create Satellite Timelapse") + + row1_col1, row1_col2 = st.columns([2, 1]) + + if st.session_state.get("zoom_level") is None: + st.session_state["zoom_level"] = 4 + + st.session_state["ee_asset_id"] = None + st.session_state["bands"] = None + st.session_state["palette"] = None + st.session_state["vis_params"] = None + + with row1_col1: + ee_authenticate(token_name="EARTHENGINE_TOKEN") + m = geemap.Map( + basemap="HYBRID", + plugin_Draw=True, + Draw_export=True, + locate_control=True, + plugin_LatLngPopup=False, + ) + m.add_basemap("ROADMAP") + + with row1_col2: + + keyword = st.text_input("Search for a location:", "") + if keyword: + locations = geemap.geocode(keyword) + if locations is not None and len(locations) > 0: + str_locations = [str(g)[1:-1] for g in locations] + location = st.selectbox("Select a location:", str_locations) + loc_index = str_locations.index(location) + selected_loc = locations[loc_index] + lat, lng = selected_loc.lat, selected_loc.lng + folium.Marker(location=[lat, lng], popup=location).add_to(m) + m.set_center(lng, lat, 12) + st.session_state["zoom_level"] = 12 + + collection = st.selectbox( + "Select a satellite image collection: ", + [ + "Any Earth Engine ImageCollection", + "Landsat TM-ETM-OLI Surface Reflectance", + "Sentinel-2 MSI Surface Reflectance", + "Geostationary Operational Environmental Satellites (GOES)", + "MODIS Vegetation Indices (NDVI/EVI) 16-Day Global 1km", + "MODIS Gap filled Land Surface Temperature Daily", + "MODIS Ocean Color SMI", + "USDA National Agriculture Imagery Program (NAIP)","Modis", + "dataset_nighttime", 'precipitation', 'GlobalSurfaceWater', 'WorldPop', 'COPERNICUS' + ], + index=1, + ) + + if collection in [ + "Landsat TM-ETM-OLI Surface Reflectance", + "Sentinel-2 MSI Surface Reflectance", + ]: + roi_options = ["Uploaded GeoJSON"] + list(landsat_rois.keys()) + + elif collection == "Geostationary Operational Environmental Satellites (GOES)": + roi_options = ["Uploaded GeoJSON"] + list(goes_rois.keys()) + + elif collection in [ + "MODIS Vegetation Indices (NDVI/EVI) 16-Day Global 1km", + "MODIS Gap filled Land Surface Temperature Daily", + ]: + roi_options = ["Uploaded GeoJSON"] + list(modis_rois.keys()) + elif collection == "MODIS Ocean Color SMI": + roi_options = ["Uploaded GeoJSON"] + list(ocean_rois.keys()) + else: + roi_options = ["Uploaded GeoJSON"] + + if collection == "Any Earth Engine ImageCollection": + keyword = st.text_input("Enter a keyword to search (e.g., MODIS):", "") + if keyword: + + assets = geemap.search_ee_data(keyword) + ee_assets = [] + for asset in assets: + if asset["ee_id_snippet"].startswith("ee.ImageCollection"): + ee_assets.append(asset) + + asset_titles = [x["title"] for x in ee_assets] + dataset = st.selectbox("Select a dataset:", asset_titles) + if len(ee_assets) > 0: + st.session_state["ee_assets"] = ee_assets + st.session_state["asset_titles"] = asset_titles + index = asset_titles.index(dataset) + ee_id = ee_assets[index]["id"] + else: + ee_id = "" + + if dataset is not None: + with st.expander("Show dataset details", False): + index = asset_titles.index(dataset) + html = geemap.ee_data_html(st.session_state["ee_assets"][index]) + st.markdown(html, True) + # elif collection == "MODIS Gap filled Land Surface Temperature Daily": + # ee_id = "" + else: + ee_id = "" + + asset_id = st.text_input("Enter an ee.ImageCollection asset ID:", ee_id) + + if asset_id: + with st.expander("Customize band combination and color palette", True): + try: + col = ee.ImageCollection.load(asset_id) + st.session_state["ee_asset_id"] = asset_id + except: + st.error("Invalid Earth Engine asset ID.") + st.session_state["ee_asset_id"] = None + return + + img_bands = col.first().bandNames().getInfo() + if len(img_bands) >= 3: + default_bands = img_bands[:3][::-1] + else: + default_bands = img_bands[:] + bands = st.multiselect( + "Select one or three bands (RGB):", img_bands, default_bands + ) + st.session_state["bands"] = bands + + if len(bands) == 1: + palette_options = st.selectbox( + "Color palette", + cm.list_colormaps(), + index=2, + ) + palette_values = cm.get_palette(palette_options, 15) + palette = st.text_area( + "Enter a custom palette:", + palette_values, + ) + st.write( + cm.plot_colormap(cmap=palette_options, return_fig=True) + ) + st.session_state["palette"] = json.loads( + palette.replace("'", '"') + ) + + if bands: + vis_params = st.text_area( + "Enter visualization parameters", + "{'bands': [" + + ", ".join([f"'{band}'" for band in bands]) + + "]}", + ) + else: + vis_params = st.text_area( + "Enter visualization parameters", + "{}", + ) + try: + st.session_state["vis_params"] = json.loads( + vis_params.replace("'", '"') + ) + st.session_state["vis_params"]["palette"] = st.session_state[ + "palette" + ] + except Exception as e: + st.session_state["vis_params"] = None + st.error( + f"Invalid visualization parameters. It must be a dictionary." + ) + + + elif collection == "MODIS Gap filled Land Surface Temperature Daily": + with st.expander("Show dataset details", False): + st.markdown( + """ + See the [Awesome GEE Community Datasets](https://samapriya.github.io/awesome-gee-community-datasets/projects/daily_lst/). + """ + ) + + MODIS_options = ["Daytime (1:30 pm)", "Nighttime (1:30 am)"] + MODIS_option = st.selectbox("Select a MODIS dataset:", MODIS_options) + if MODIS_option == "Daytime (1:30 pm)": + st.session_state["ee_asset_id"] = ( + "projects/sat-io/open-datasets/gap-filled-lst/gf_day_1km" + ) + else: + st.session_state["ee_asset_id"] = ( + "projects/sat-io/open-datasets/gap-filled-lst/gf_night_1km" + ) + + palette_options = st.selectbox( + "Color palette", + cm.list_colormaps(), + index=90, + ) + palette_values = cm.get_palette(palette_options, 15) + palette = st.text_area( + "Enter a custom palette:", + palette_values, + ) + st.write(cm.plot_colormap(cmap=palette_options, return_fig=True)) + st.session_state["palette"] = json.loads(palette.replace("'", '"')) + elif collection == "MODIS Ocean Color SMI": + with st.expander("Show dataset details", False): + st.markdown( + """ + See the [Earth Engine Data Catalog](https://developers.google.com/earth-engine/datasets/catalog/NASA_OCEANDATA_MODIS-Aqua_L3SMI). + """ + ) + + MODIS_options = ["Aqua", "Terra"] + MODIS_option = st.selectbox("Select a satellite:", MODIS_options) + st.session_state["ee_asset_id"] = MODIS_option + # if MODIS_option == "Daytime (1:30 pm)": + # st.session_state[ + # "ee_asset_id" + # ] = "projects/sat-io/open-datasets/gap-filled-lst/gf_day_1km" + # else: + # st.session_state[ + # "ee_asset_id" + # ] = "projects/sat-io/open-datasets/gap-filled-lst/gf_night_1km" + + band_dict = { + "Chlorophyll a concentration": "chlor_a", + "Normalized fluorescence line height": "nflh", + "Particulate organic carbon": "poc", + "Sea surface temperature": "sst", + "Remote sensing reflectance at band 412nm": "Rrs_412", + "Remote sensing reflectance at band 443nm": "Rrs_443", + "Remote sensing reflectance at band 469nm": "Rrs_469", + "Remote sensing reflectance at band 488nm": "Rrs_488", + "Remote sensing reflectance at band 531nm": "Rrs_531", + "Remote sensing reflectance at band 547nm": "Rrs_547", + "Remote sensing reflectance at band 555nm": "Rrs_555", + "Remote sensing reflectance at band 645nm": "Rrs_645", + "Remote sensing reflectance at band 667nm": "Rrs_667", + "Remote sensing reflectance at band 678nm": "Rrs_678", + } + + band_options = list(band_dict.keys()) + band = st.selectbox( + "Select a band", + band_options, + band_options.index("Sea surface temperature"), + ) + st.session_state["band"] = band_dict[band] + + colors = cm.list_colormaps() + palette_options = st.selectbox( + "Color palette", + colors, + index=colors.index("coolwarm"), + ) + palette_values = cm.get_palette(palette_options, 15) + palette = st.text_area( + "Enter a custom palette:", + palette_values, + ) + st.write(cm.plot_colormap(cmap=palette_options, return_fig=True)) + st.session_state["palette"] = json.loads(palette.replace("'", '"')) + + sample_roi = st.selectbox( + "Select a sample ROI or upload a GeoJSON file:", + roi_options, + index=0, + ) + + add_outline = st.checkbox( + "Overlay an administrative boundary on timelapse", False + ) + + if add_outline: + + with st.expander("Customize administrative boundary", True): + + overlay_options = { + "User-defined": None, + "Continents": "continents", + "Countries": "countries", + "US States": "us_states", + "China": "china", + } + + overlay = st.selectbox( + "Select an administrative boundary:", + list(overlay_options.keys()), + index=2, + ) + + overlay_data = overlay_options[overlay] + + if overlay_data is None: + overlay_data = st.text_input( + "Enter an HTTP URL to a GeoJSON file or an ee.FeatureCollection asset id:", + "https://raw.githubusercontent.com/giswqs/geemap/master/examples/data/countries.geojson", + ) + + overlay_color = st.color_picker( + "Select a color for the administrative boundary:", "#000000" + ) + overlay_width = st.slider( + "Select a line width for the administrative boundary:", 1, 20, 1 + ) + overlay_opacity = st.slider( + "Select an opacity for the administrative boundary:", + 0.0, + 1.0, + 1.0, + 0.05, + ) + else: + overlay_data = None + overlay_color = "black" + overlay_width = 1 + overlay_opacity = 1 + + with row1_col1: + + with st.expander( + "Steps: Draw a rectangle on the map -> Export it as a GeoJSON -> Upload it back to the app -> Click the Submit button. Expand this tab to see a demo 👉" + ): + video_empty = st.empty() + + data = st.file_uploader( + "Upload a GeoJSON file to use as an ROI. Customize timelapse parameters and then click the Submit button 😇👇", + type=["geojson", "kml", "zip"], + ) + + crs = "epsg:4326" + if sample_roi == "Uploaded GeoJSON": + if data is None: + # st.info( + # "Steps to create a timelapse: Draw a rectangle on the map -> Export it as a GeoJSON -> Upload it back to the app -> Click Submit button" + # ) + if collection in [ + "Geostationary Operational Environmental Satellites (GOES)", + "USDA National Agriculture Imagery Program (NAIP)", + ] and (not keyword): + m.set_center(-100, 40, 3) + # else: + # m.set_center(4.20, 18.63, zoom=2) + else: + if collection in [ + "Landsat TM-ETM-OLI Surface Reflectance", + "Sentinel-2 MSI Surface Reflectance", + ]: + gdf = gpd.GeoDataFrame( + index=[0], crs=crs, geometry=[landsat_rois[sample_roi]] + ) + elif ( + collection + == "Geostationary Operational Environmental Satellites (GOES)" + ): + gdf = gpd.GeoDataFrame( + index=[0], crs=crs, geometry=[goes_rois[sample_roi]["region"]] + ) + elif collection == "MODIS Vegetation Indices (NDVI/EVI) 16-Day Global 1km": + gdf = gpd.GeoDataFrame( + index=[0], crs=crs, geometry=[modis_rois[sample_roi]] + ) + + if sample_roi != "Uploaded GeoJSON": + + if collection in [ + "Landsat TM-ETM-OLI Surface Reflectance", + "Sentinel-2 MSI Surface Reflectance", + ]: + gdf = gpd.GeoDataFrame( + index=[0], crs=crs, geometry=[landsat_rois[sample_roi]] + ) + elif ( + collection + == "Geostationary Operational Environmental Satellites (GOES)" + ): + gdf = gpd.GeoDataFrame( + index=[0], crs=crs, geometry=[goes_rois[sample_roi]["region"]] + ) + elif collection in [ + "MODIS Vegetation Indices (NDVI/EVI) 16-Day Global 1km", + "MODIS Gap filled Land Surface Temperature Daily", + ]: + gdf = gpd.GeoDataFrame( + index=[0], crs=crs, geometry=[modis_rois[sample_roi]] + ) + elif collection == "MODIS Ocean Color SMI": + gdf = gpd.GeoDataFrame( + index=[0], crs=crs, geometry=[ocean_rois[sample_roi]] + ) + try: + st.session_state["roi"] = geemap.gdf_to_ee(gdf, geodesic=False) + except Exception as e: + st.error(e) + st.error("Please draw another ROI and try again.") + return + m.add_gdf(gdf, "ROI") + + elif data: + gdf = uploaded_file_to_gdf(data) + try: + st.session_state["roi"] = geemap.gdf_to_ee(gdf, geodesic=False) + m.add_gdf(gdf, "ROI") + except Exception as e: + st.error(e) + st.error("Please draw another ROI and try again.") + return + + m.to_streamlit(height=600) + + with row1_col2: + + if collection in [ + "Landsat TM-ETM-OLI Surface Reflectance", + "Sentinel-2 MSI Surface Reflectance", + ]: + + if collection == "Landsat TM-ETM-OLI Surface Reflectance": + sensor_start_year = 1984 + timelapse_title = "Landsat Timelapse" + timelapse_speed = 5 + elif collection == "Sentinel-2 MSI Surface Reflectance": + sensor_start_year = 2015 + timelapse_title = "Sentinel-2 Timelapse" + timelapse_speed = 5 + video_empty.video("https://youtu.be/VVRK_-dEjR4") + + with st.form("submit_landsat_form"): + + roi = None + if st.session_state.get("roi") is not None: + roi = st.session_state.get("roi") + out_gif = geemap.temp_file_path(".gif") + + title = st.text_input( + "Enter a title to show on the timelapse: ", timelapse_title + ) + RGB = st.selectbox( + "Select an RGB band combination:", + [ + "Red/Green/Blue", + "NIR/Red/Green", + "SWIR2/SWIR1/NIR", + "NIR/SWIR1/Red", + "SWIR2/NIR/Red", + "SWIR2/SWIR1/Red", + "SWIR1/NIR/Blue", + "NIR/SWIR1/Blue", + "SWIR2/NIR/Green", + "SWIR1/NIR/Red", + "SWIR2/NIR/SWIR1", + "SWIR1/NIR/SWIR2", + ], + index=9, + ) + + frequency = st.selectbox( + "Select a temporal frequency:", + ["year", "quarter", "month"], + index=0, + ) + + with st.expander("Customize timelapse"): + + speed = st.slider("Frames per second:", 1, 30, timelapse_speed) + dimensions = st.slider( + "Maximum dimensions (Width*Height) in pixels", 768, 2000, 768 + ) + progress_bar_color = st.color_picker( + "Progress bar color:", "#0000ff" + ) + years = st.slider( + "Start and end year:", + sensor_start_year, + today.year, + (sensor_start_year, today.year), + ) + months = st.slider("Start and end month:", 1, 12, (1, 12)) + font_size = st.slider("Font size:", 10, 50, 30) + font_color = st.color_picker("Font color:", "#ffffff") + apply_fmask = st.checkbox( + "Apply fmask (remove clouds, shadows, snow)", True + ) + font_type = st.selectbox( + "Select the font type for the title:", + ["arial.ttf", "alibaba.otf"], + index=0, + ) + fading = st.slider( + "Fading duration (seconds) for each frame:", 0.0, 3.0, 0.0 + ) + mp4 = st.checkbox("Save timelapse as MP4", True) + + empty_text = st.empty() + empty_image = st.empty() + empty_fire_image = st.empty() + empty_video = st.container() + submitted = st.form_submit_button("Submit") + if submitted: + + if sample_roi == "Uploaded GeoJSON" and data is None: + empty_text.warning( + "Steps to create a timelapse: Draw a rectangle on the map -> Export it as a GeoJSON -> Upload it back to the app -> Click the Submit button. Alternatively, you can select a sample ROI from the dropdown list." + ) + else: + + empty_text.text("Computing... Please wait...") + + start_year = years[0] + end_year = years[1] + start_date = str(months[0]).zfill(2) + "-01" + end_date = str(months[1]).zfill(2) + "-30" + bands = RGB.split("/") + + try: + if collection == "Landsat TM-ETM-OLI Surface Reflectance": + out_gif = geemap.landsat_timelapse( + roi=roi, + out_gif=out_gif, + start_year=start_year, + end_year=end_year, + start_date=start_date, + end_date=end_date, + bands=bands, + apply_fmask=apply_fmask, + frames_per_second=speed, + # dimensions=dimensions, + dimensions=768, + overlay_data=overlay_data, + overlay_color=overlay_color, + overlay_width=overlay_width, + overlay_opacity=overlay_opacity, + frequency=frequency, + date_format=None, + title=title, + title_xy=("2%", "90%"), + add_text=True, + text_xy=("2%", "2%"), + text_sequence=None, + font_type=font_type, + font_size=font_size, + font_color=font_color, + add_progress_bar=True, + progress_bar_color=progress_bar_color, + progress_bar_height=5, + loop=0, + mp4=mp4, + fading=fading, + ) + elif collection == "Sentinel-2 MSI Surface Reflectance": + out_gif = geemap.sentinel2_timelapse( + roi=roi, + out_gif=out_gif, + start_year=start_year, + end_year=end_year, + start_date=start_date, + end_date=end_date, + bands=bands, + apply_fmask=apply_fmask, + frames_per_second=speed, + dimensions=768, + # dimensions=dimensions, + overlay_data=overlay_data, + overlay_color=overlay_color, + overlay_width=overlay_width, + overlay_opacity=overlay_opacity, + frequency=frequency, + date_format=None, + title=title, + title_xy=("2%", "90%"), + add_text=True, + text_xy=("2%", "2%"), + text_sequence=None, + font_type=font_type, + font_size=font_size, + font_color=font_color, + add_progress_bar=True, + progress_bar_color=progress_bar_color, + progress_bar_height=5, + loop=0, + mp4=mp4, + fading=fading, + ) + except: + empty_text.error( + "An error occurred while computing the timelapse. Your probably requested too much data. Try reducing the ROI or timespan." + ) + st.stop() + + if out_gif is not None and os.path.exists(out_gif): + + empty_text.text( + "Right click the GIF to save it to your computer👇" + ) + empty_image.image(out_gif) + + out_mp4 = out_gif.replace(".gif", ".mp4") + if mp4 and os.path.exists(out_mp4): + with empty_video: + st.text( + "Right click the MP4 to save it to your computer👇" + ) + st.video(out_gif.replace(".gif", ".mp4")) + + else: + empty_text.error( + "Something went wrong. You probably requested too much data. Try reducing the ROI or timespan." + ) + + elif collection == "Geostationary Operational Environmental Satellites (GOES)": + + video_empty.video("https://youtu.be/16fA2QORG4A") + + with st.form("submit_goes_form"): + + roi = None + if st.session_state.get("roi") is not None: + roi = st.session_state.get("roi") + out_gif = geemap.temp_file_path(".gif") + + satellite = st.selectbox("Select a satellite:", ["GOES-17", "GOES-16"]) + earliest_date = datetime.date(2017, 7, 10) + latest_date = datetime.date.today() + + if sample_roi == "Uploaded GeoJSON": + roi_start_date = today - datetime.timedelta(days=2) + roi_end_date = today - datetime.timedelta(days=1) + roi_start_time = datetime.time(14, 00) + roi_end_time = datetime.time(1, 00) + else: + roi_start = goes_rois[sample_roi]["start_time"] + roi_end = goes_rois[sample_roi]["end_time"] + roi_start_date = datetime.datetime.strptime( + roi_start[:10], "%Y-%m-%d" + ) + roi_end_date = datetime.datetime.strptime(roi_end[:10], "%Y-%m-%d") + roi_start_time = datetime.time( + int(roi_start[11:13]), int(roi_start[14:16]) + ) + roi_end_time = datetime.time( + int(roi_end[11:13]), int(roi_end[14:16]) + ) + + start_date = st.date_input("Select the start date:", roi_start_date) + end_date = st.date_input("Select the end date:", roi_end_date) + + with st.expander("Customize timelapse"): + + add_fire = st.checkbox("Add Fire/Hotspot Characterization", False) + + scan_type = st.selectbox( + "Select a scan type:", ["Full Disk", "CONUS", "Mesoscale"] + ) + + start_time = st.time_input( + "Select the start time of the start date:", roi_start_time + ) + + end_time = st.time_input( + "Select the end time of the end date:", roi_end_time + ) + + start = ( + start_date.strftime("%Y-%m-%d") + + "T" + + start_time.strftime("%H:%M:%S") + ) + end = ( + end_date.strftime("%Y-%m-%d") + + "T" + + end_time.strftime("%H:%M:%S") + ) + + speed = st.slider("Frames per second:", 1, 30, 5) + add_progress_bar = st.checkbox("Add a progress bar", True) + progress_bar_color = st.color_picker( + "Progress bar color:", "#0000ff" + ) + font_size = st.slider("Font size:", 10, 50, 20) + font_color = st.color_picker("Font color:", "#ffffff") + fading = st.slider( + "Fading duration (seconds) for each frame:", 0.0, 3.0, 0.0 + ) + mp4 = st.checkbox("Save timelapse as MP4", True) + + empty_text = st.empty() + empty_image = st.empty() + empty_video = st.container() + empty_fire_text = st.empty() + empty_fire_image = st.empty() + + submitted = st.form_submit_button("Submit") + if submitted: + if sample_roi == "Uploaded GeoJSON" and data is None: + empty_text.warning( + "Steps to create a timelapse: Draw a rectangle on the map -> Export it as a GeoJSON -> Upload it back to the app -> Click the Submit button. Alternatively, you can select a sample ROI from the dropdown list." + ) + else: + empty_text.text("Computing... Please wait...") + + geemap.goes_timelapse( + roi, + out_gif, + start_date=start, + end_date=end, + data=satellite, + scan=scan_type.replace(" ", "_").lower(), + dimensions=768, + framesPerSecond=speed, + date_format="YYYY-MM-dd HH:mm", + xy=("3%", "3%"), + text_sequence=None, + font_type="arial.ttf", + font_size=font_size, + font_color=font_color, + add_progress_bar=add_progress_bar, + progress_bar_color=progress_bar_color, + progress_bar_height=5, + loop=0, + overlay_data=overlay_data, + overlay_color=overlay_color, + overlay_width=overlay_width, + overlay_opacity=overlay_opacity, + mp4=mp4, + fading=fading, + ) + + if out_gif is not None and os.path.exists(out_gif): + empty_text.text( + "Right click the GIF to save it to your computer👇" + ) + empty_image.image(out_gif) + + out_mp4 = out_gif.replace(".gif", ".mp4") + if mp4 and os.path.exists(out_mp4): + with empty_video: + st.text( + "Right click the MP4 to save it to your computer👇" + ) + st.video(out_gif.replace(".gif", ".mp4")) + + if add_fire: + out_fire_gif = geemap.temp_file_path(".gif") + empty_fire_text.text( + "Delineating Fire Hotspot... Please wait..." + ) + geemap.goes_fire_timelapse( + out_fire_gif, + start_date=start, + end_date=end, + data=satellite, + scan=scan_type.replace(" ", "_").lower(), + region=roi, + dimensions=768, + framesPerSecond=speed, + date_format="YYYY-MM-dd HH:mm", + xy=("3%", "3%"), + text_sequence=None, + font_type="arial.ttf", + font_size=font_size, + font_color=font_color, + add_progress_bar=add_progress_bar, + progress_bar_color=progress_bar_color, + progress_bar_height=5, + loop=0, + ) + if os.path.exists(out_fire_gif): + empty_fire_image.image(out_fire_gif) + else: + empty_text.text( + "Something went wrong, either the ROI is too big or there are no data available for the specified date range. Please try a smaller ROI or different date range." + ) + + elif collection == "MODIS Vegetation Indices (NDVI/EVI) 16-Day Global 1km": + + video_empty.video("https://youtu.be/16fA2QORG4A") + + satellite = st.selectbox("Select a satellite:", ["Terra", "Aqua"]) + band = st.selectbox("Select a band:", ["NDVI", "EVI"]) + + with st.form("submit_modis_form"): + + roi = None + if st.session_state.get("roi") is not None: + roi = st.session_state.get("roi") + out_gif = geemap.temp_file_path(".gif") + + with st.expander("Customize timelapse"): + + start = st.date_input( + "Select a start date:", datetime.date(2000, 2, 8) + ) + end = st.date_input("Select an end date:", datetime.date.today()) + + start_date = start.strftime("%Y-%m-%d") + end_date = end.strftime("%Y-%m-%d") + + speed = st.slider("Frames per second:", 1, 30, 5) + add_progress_bar = st.checkbox("Add a progress bar", True) + progress_bar_color = st.color_picker( + "Progress bar color:", "#0000ff" + ) + font_size = st.slider("Font size:", 10, 50, 20) + font_color = st.color_picker("Font color:", "#ffffff") + + font_type = st.selectbox( + "Select the font type for the title:", + ["arial.ttf", "alibaba.otf"], + index=0, + ) + fading = st.slider( + "Fading duration (seconds) for each frame:", 0.0, 3.0, 0.0 + ) + mp4 = st.checkbox("Save timelapse as MP4", True) + + empty_text = st.empty() + empty_image = st.empty() + empty_video = st.container() + + submitted = st.form_submit_button("Submit") + if submitted: + if sample_roi == "Uploaded GeoJSON" and data is None: + empty_text.warning( + "Steps to create a timelapse: Draw a rectangle on the map -> Export it as a GeoJSON -> Upload it back to the app -> Click the Submit button. Alternatively, you can select a sample ROI from the dropdown list." + ) + else: + + empty_text.text("Computing... Please wait...") + + geemap.modis_ndvi_timelapse( + roi, + out_gif, + satellite, + band, + start_date, + end_date, + 768, + speed, + overlay_data=overlay_data, + overlay_color=overlay_color, + overlay_width=overlay_width, + overlay_opacity=overlay_opacity, + mp4=mp4, + fading=fading, + ) + + geemap.reduce_gif_size(out_gif) + + empty_text.text( + "Right click the GIF to save it to your computer👇" + ) + empty_image.image(out_gif) + + out_mp4 = out_gif.replace(".gif", ".mp4") + if mp4 and os.path.exists(out_mp4): + with empty_video: + st.text( + "Right click the MP4 to save it to your computer👇" + ) + st.video(out_gif.replace(".gif", ".mp4")) + + elif collection == "Any Earth Engine ImageCollection": + + with st.form("submit_ts_form"): + with st.expander("Customize timelapse"): + + title = st.text_input( + "Enter a title to show on the timelapse: ", "Timelapse" + ) + start_date = st.date_input( + "Select the start date:", datetime.date(2020, 1, 1) + ) + end_date = st.date_input( + "Select the end date:", datetime.date.today() + ) + frequency = st.selectbox( + "Select a temporal frequency:", + ["year", "quarter", "month", "day", "hour", "minute", "second"], + index=0, + ) + reducer = st.selectbox( + "Select a reducer for aggregating data:", + ["median", "mean", "min", "max", "sum", "variance", "stdDev"], + index=0, + ) + data_format = st.selectbox( + "Select a date format to show on the timelapse:", + [ + "YYYY-MM-dd", + "YYYY", + "YYMM-MM", + "YYYY-MM-dd HH:mm", + "YYYY-MM-dd HH:mm:ss", + "HH:mm", + "HH:mm:ss", + "w", + "M", + "d", + "D", + ], + index=0, + ) + + speed = st.slider("Frames per second:", 1, 30, 5) + add_progress_bar = st.checkbox("Add a progress bar", True) + progress_bar_color = st.color_picker( + "Progress bar color:", "#0000ff" + ) + font_size = st.slider("Font size:", 10, 50, 30) + font_color = st.color_picker("Font color:", "#ffffff") + font_type = st.selectbox( + "Select the font type for the title:", + ["arial.ttf", "alibaba.otf"], + index=0, + ) + fading = st.slider( + "Fading duration (seconds) for each frame:", 0.0, 3.0, 0.0 + ) + mp4 = st.checkbox("Save timelapse as MP4", True) + + empty_text = st.empty() + empty_image = st.empty() + empty_video = st.container() + empty_fire_image = st.empty() + + roi = None + if st.session_state.get("roi") is not None: + roi = st.session_state.get("roi") + out_gif = geemap.temp_file_path(".gif") + + submitted = st.form_submit_button("Submit") + if submitted: + + if sample_roi == "Uploaded GeoJSON" and data is None: + empty_text.warning( + "Steps to create a timelapse: Draw a rectangle on the map -> Export it as a GeoJSON -> Upload it back to the app -> Click the Submit button. Alternatively, you can select a sample ROI from the dropdown list." + ) + else: + + empty_text.text("Computing... Please wait...") + try: + geemap.create_timelapse( + st.session_state.get("ee_asset_id"), + start_date=start_date.strftime("%Y-%m-%d"), + end_date=end_date.strftime("%Y-%m-%d"), + region=roi, + frequency=frequency, + reducer=reducer, + date_format=data_format, + out_gif=out_gif, + bands=st.session_state.get("bands"), + palette=st.session_state.get("palette"), + vis_params=st.session_state.get("vis_params"), + dimensions=768, + frames_per_second=speed, + crs="EPSG:3857", + overlay_data=overlay_data, + overlay_color=overlay_color, + overlay_width=overlay_width, + overlay_opacity=overlay_opacity, + title=title, + title_xy=("2%", "90%"), + add_text=True, + text_xy=("2%", "2%"), + text_sequence=None, + font_type=font_type, + font_size=font_size, + font_color=font_color, + add_progress_bar=add_progress_bar, + progress_bar_color=progress_bar_color, + progress_bar_height=5, + loop=0, + mp4=mp4, + fading=fading, + ) + except: + empty_text.error( + "An error occurred while computing the timelapse. You probably requested too much data. Try reducing the ROI or timespan." + ) + + empty_text.text( + "Right click the GIF to save it to your computer👇" + ) + empty_image.image(out_gif) + + out_mp4 = out_gif.replace(".gif", ".mp4") + if mp4 and os.path.exists(out_mp4): + with empty_video: + st.text( + "Right click the MP4 to save it to your computer👇" + ) + st.video(out_gif.replace(".gif", ".mp4")) + + elif collection in [ + "MODIS Gap filled Land Surface Temperature Daily", + "MODIS Ocean Color SMI", + ]: + + with st.form("submit_ts_form"): + with st.expander("Customize timelapse"): + + title = st.text_input( + "Enter a title to show on the timelapse: ", + "Surface Temperature", + ) + start_date = st.date_input( + "Select the start date:", datetime.date(2018, 1, 1) + ) + end_date = st.date_input( + "Select the end date:", datetime.date(2020, 12, 31) + ) + frequency = st.selectbox( + "Select a temporal frequency:", + ["year", "quarter", "month", "week", "day"], + index=2, + ) + reducer = st.selectbox( + "Select a reducer for aggregating data:", + ["median", "mean", "min", "max", "sum", "variance", "stdDev"], + index=0, + ) + + vis_params = st.text_area( + "Enter visualization parameters", + "", + help="Enter a string in the format of a dictionary, such as '{'min': 23, 'max': 32}'", + ) + + speed = st.slider("Frames per second:", 1, 30, 5) + add_progress_bar = st.checkbox("Add a progress bar", True) + progress_bar_color = st.color_picker( + "Progress bar color:", "#0000ff" + ) + font_size = st.slider("Font size:", 10, 50, 30) + font_color = st.color_picker("Font color:", "#ffffff") + font_type = st.selectbox( + "Select the font type for the title:", + ["arial.ttf", "alibaba.otf"], + index=0, + ) + add_colorbar = st.checkbox("Add a colorbar", True) + colorbar_label = st.text_input( + "Enter the colorbar label:", "Surface Temperature (°C)" + ) + fading = st.slider( + "Fading duration (seconds) for each frame:", 0.0, 3.0, 0.0 + ) + mp4 = st.checkbox("Save timelapse as MP4", True) + + empty_text = st.empty() + empty_image = st.empty() + empty_video = st.container() + + roi = None + if st.session_state.get("roi") is not None: + roi = st.session_state.get("roi") + out_gif = geemap.temp_file_path(".gif") + + submitted = st.form_submit_button("Submit") + if submitted: + + if sample_roi == "Uploaded GeoJSON" and data is None: + empty_text.warning( + "Steps to create a timelapse: Draw a rectangle on the map -> Export it as a GeoJSON -> Upload it back to the app -> Click the Submit button. Alternatively, you can select a sample ROI from the dropdown list." + ) + else: + + empty_text.text("Computing... Please wait...") + try: + if ( + collection + == "MODIS Gap filled Land Surface Temperature Daily" + ): + out_gif = geemap.create_timelapse( + st.session_state.get("ee_asset_id"), + start_date=start_date.strftime("%Y-%m-%d"), + end_date=end_date.strftime("%Y-%m-%d"), + region=roi, + bands=None, + frequency=frequency, + reducer=reducer, + date_format=None, + out_gif=out_gif, + palette=st.session_state.get("palette"), + vis_params=None, + dimensions=768, + frames_per_second=speed, + crs="EPSG:3857", + overlay_data=overlay_data, + overlay_color=overlay_color, + overlay_width=overlay_width, + overlay_opacity=overlay_opacity, + title=title, + title_xy=("2%", "90%"), + add_text=True, + text_xy=("2%", "2%"), + text_sequence=None, + font_type=font_type, + font_size=font_size, + font_color=font_color, + add_progress_bar=add_progress_bar, + progress_bar_color=progress_bar_color, + progress_bar_height=5, + add_colorbar=add_colorbar, + colorbar_label=colorbar_label, + loop=0, + mp4=mp4, + fading=fading, + ) + elif collection == "MODIS Ocean Color SMI": + if vis_params.startswith("{") and vis_params.endswith( + "}" + ): + vis_params = json.loads( + vis_params.replace("'", '"') + ) + else: + vis_params = None + out_gif = geemap.modis_ocean_color_timelapse( + st.session_state.get("ee_asset_id"), + start_date=start_date.strftime("%Y-%m-%d"), + end_date=end_date.strftime("%Y-%m-%d"), + region=roi, + bands=st.session_state["band"], + frequency=frequency, + reducer=reducer, + date_format=None, + out_gif=out_gif, + palette=st.session_state.get("palette"), + vis_params=vis_params, + dimensions=768, + frames_per_second=speed, + crs="EPSG:3857", + overlay_data=overlay_data, + overlay_color=overlay_color, + overlay_width=overlay_width, + overlay_opacity=overlay_opacity, + title=title, + title_xy=("2%", "90%"), + add_text=True, + text_xy=("2%", "2%"), + text_sequence=None, + font_type=font_type, + font_size=font_size, + font_color=font_color, + add_progress_bar=add_progress_bar, + progress_bar_color=progress_bar_color, + progress_bar_height=5, + add_colorbar=add_colorbar, + colorbar_label=colorbar_label, + loop=0, + mp4=mp4, + fading=fading, + ) + except: + empty_text.error( + "Something went wrong. You probably requested too much data. Try reducing the ROI or timespan." + ) + + if out_gif is not None and os.path.exists(out_gif): + + geemap.reduce_gif_size(out_gif) + + empty_text.text( + "Right click the GIF to save it to your computer👇" + ) + empty_image.image(out_gif) + + out_mp4 = out_gif.replace(".gif", ".mp4") + if mp4 and os.path.exists(out_mp4): + with empty_video: + st.text( + "Right click the MP4 to save it to your computer👇" + ) + st.video(out_gif.replace(".gif", ".mp4")) + + else: + st.error( + "Something went wrong. You probably requested too much data. Try reducing the ROI or timespan." + ) + + elif collection == "USDA National Agriculture Imagery Program (NAIP)": + + with st.form("submit_naip_form"): + with st.expander("Customize timelapse"): + + title = st.text_input( + "Enter a title to show on the timelapse: ", "NAIP Timelapse" + ) + + years = st.slider( + "Start and end year:", + 2003, + today.year, + (2003, today.year), + ) + + bands = st.selectbox( + "Select a band combination:", ["N/R/G", "R/G/B"], index=0 + ) + + speed = st.slider("Frames per second:", 1, 30, 3) + add_progress_bar = st.checkbox("Add a progress bar", True) + progress_bar_color = st.color_picker( + "Progress bar color:", "#0000ff" + ) + font_size = st.slider("Font size:", 10, 50, 30) + font_color = st.color_picker("Font color:", "#ffffff") + font_type = st.selectbox( + "Select the font type for the title:", + ["arial.ttf", "alibaba.otf"], + index=0, + ) + fading = st.slider( + "Fading duration (seconds) for each frame:", 0.0, 3.0, 0.0 + ) + mp4 = st.checkbox("Save timelapse as MP4", True) + + empty_text = st.empty() + empty_image = st.empty() + empty_video = st.container() + empty_fire_image = st.empty() + + roi = None + if st.session_state.get("roi") is not None: + roi = st.session_state.get("roi") + out_gif = geemap.temp_file_path(".gif") + + submitted = st.form_submit_button("Submit") + if submitted: + + if sample_roi == "Uploaded GeoJSON" and data is None: + empty_text.warning( + "Steps to create a timelapse: Draw a rectangle on the map -> Export it as a GeoJSON -> Upload it back to the app -> Click the Submit button. Alternatively, you can select a sample ROI from the dropdown list." + ) + else: + + empty_text.text("Computing... Please wait...") + try: + geemap.naip_timelapse( + roi, + years[0], + years[1], + out_gif, + bands=bands.split("/"), + palette=st.session_state.get("palette"), + vis_params=None, + dimensions=768, + frames_per_second=speed, + crs="EPSG:3857", + overlay_data=overlay_data, + overlay_color=overlay_color, + overlay_width=overlay_width, + overlay_opacity=overlay_opacity, + title=title, + title_xy=("2%", "90%"), + add_text=True, + text_xy=("2%", "2%"), + text_sequence=None, + font_type=font_type, + font_size=font_size, + font_color=font_color, + add_progress_bar=add_progress_bar, + progress_bar_color=progress_bar_color, + progress_bar_height=5, + loop=0, + mp4=mp4, + fading=fading, + ) + except: + empty_text.error( + "Something went wrong. You either requested too much data or the ROI is outside the U.S." + ) + + if out_gif is not None and os.path.exists(out_gif): + + empty_text.text( + "Right click the GIF to save it to your computer👇" + ) + empty_image.image(out_gif) + + out_mp4 = out_gif.replace(".gif", ".mp4") + if mp4 and os.path.exists(out_mp4): + with empty_video: + st.text( + "Right click the MP4 to save it to your computer👇" + ) + st.video(out_gif.replace(".gif", ".mp4")) + + else: + st.error( + "Something went wrong. You either requested too much data or the ROI is outside the U.S." + ) + +#<----------------------------------------------------------------base map code for calling in home page(Navigation purpose)----------------------------------------------------------------> + +def basemap_page(): + st.title("Search Basemaps") + base_map() + + +#<----------------------------------------------------------------basemap code------------------------------------------------------------------------------------------------------> + +def base_map(): + + with st.expander("See demo"): + st.image("https://i.imgur.com/0SkUhZh.gif") + + row1_col1, row1_col2 = st.columns([3, 1]) + width = 800 + height = 600 + tiles = None + + with row1_col2: + + checkbox = st.checkbox("Search Quick Map Services (QMS)") + keyword = st.text_input("Enter a keyword to search and press Enter:") + empty = st.empty() + + if keyword: + options = leafmap.search_xyz_services(keyword=keyword) + if checkbox: + qms = leafmap.search_qms(keyword=keyword) + if qms is not None: + options = options + qms + + tiles = empty.multiselect("Select XYZ tiles to add to the map:", options) + + with row1_col1: + m = leafmap.Map() + + if tiles is not None: + for tile in tiles: + m.add_xyz_service(tile) + + m.to_streamlit(height=height) + + +#<--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------> + + +# Create a dictionary of pages +pages = { + "Home": page_home, + "About": page_about, + "Interactive Map": interactive_map_page, + "Timelapse": Timelapse_page, # Placeholder for Timelapse page function + "Basemap": basemap_page, +} + +# Add a sidebar for navigation +st.sidebar.title("Navigation") +selection = st.sidebar.radio("Go to", list(pages.keys())) + +# Call the function of the selected page +page = pages[selection] +page() diff --git a/y/Interactive_Map.py b/y/Interactive_Map.py new file mode 100644 index 0000000000000000000000000000000000000000..23e5196f0ae404c1ae5664caaa85fe8e19a907fc --- /dev/null +++ b/y/Interactive_Map.py @@ -0,0 +1,224 @@ +import streamlit as st +import folium +import geopandas as gpd +import json +import geemap.foliumap as geemap +import ee +import pandas as pd +import os +from google.auth.transport.requests import Request +import google.auth.exceptions +from streamlit.components.v1 import html + +# Path to your shapefiles and service account key +SHAPEFILE_DIR = 'C:/Users/piv/Desktop/y/media/shp' + +def initialize_gee(): + service = os.getenv('SA') + file = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'gee', 'ee-muzzamil1-37ebc3dece52.json') + credentials = ee.ServiceAccountCredentials(service, file) + try: + ee.Initialize(credentials) + st.success("Google Earth Engine initialized successfully.") + except google.auth.exceptions.RefreshError: + try: + request = Request() + credentials.refresh(request) + ee.Initialize(credentials) + st.success("Google Earth Engine token refreshed and initialized successfully.") + except Exception as e: + st.error(f"Error refreshing Google Earth Engine token: {e}") + except Exception as e: + st.error(f"Error initializing Google Earth Engine: {e}") + +def create_folium_map(selected_dataset, ee_object, start_date_str, end_date_str): + folium_map = folium.Map(location=[25.5973518, 65.54495724], zoom_start=7) + + try: + if selected_dataset == "Modis": + dataset = ee.ImageCollection('MODIS/006/MOD13Q1') \ + .filter(ee.Filter.date(start_date_str, end_date_str)) \ + .filterBounds(ee_object) + + def clip_image(img): + return img.clip(ee_object).select('NDVI') + + clipped_collection = dataset.map(clip_image) + modis_ndvi = clipped_collection.mean() + vis_params_ndvi = { + 'min': 0, + 'max': 9000, + 'palette': ['FE8374', 'C0E5DE', '3A837C', '034B48'] + } + modis_ndvi_map_id = modis_ndvi.getMapId(vis_params_ndvi) + folium.TileLayer( + tiles=modis_ndvi_map_id['tile_fetcher'].url_format, + attr='Google Earth Engine', + name='NDVI', + overlay=True, + control=True + ).add_to(folium_map) + + elif selected_dataset == "dataset_nighttime": + dataset_nighttime = ee.ImageCollection('NOAA/VIIRS/DNB/MONTHLY_V1/VCMCFG') \ + .filter(ee.Filter.date(start_date_str, end_date_str)) + + nighttime = dataset_nighttime.select('avg_rad').mosaic() + nighttime_clipped = nighttime.clip(ee_object) + nighttime_vis = { + 'min': 0.0, + 'max': 60.0, + 'palette': ['1a3678', '2955bc', '5699ff', '8dbae9', 'acd1ff', 'caebff', 'e5f9ff', 'fdffb4', 'ffe6a2', 'ffc969', 'ffa12d', 'ff7c1f', 'ca531a', 'ff0000', 'ab0000'] + } + nighttime_map_id = nighttime_clipped.getMapId(nighttime_vis) + folium.TileLayer( + tiles=nighttime_map_id['tile_fetcher'].url_format, + attr='Google Earth Engine', + name='Nighttime Lights', + overlay=True, + control=True + ).add_to(folium_map) + + elif selected_dataset == "precipitation": + dataset_precipitation = ee.ImageCollection('UCSB-CHG/CHIRPS/DAILY') \ + .filter(ee.Filter.date(start_date_str, end_date_str)) + + precipitation = dataset_precipitation.mosaic().clip(ee_object) + precip_vis = { + 'min': 0, + 'max': 300, + 'palette': ['blue', 'cyan', 'lime', 'yellow', 'red'] + } + precip_map_id = precipitation.getMapId(precip_vis) + folium.TileLayer( + tiles=precip_map_id['tile_fetcher'].url_format, + attr='Google Earth Engine', + name='Precipitation', + overlay=True, + control=True + ).add_to(folium_map) + + elif selected_dataset == "GlobalSurfaceWater": + st.warning("GlobalSurfaceWater dataset is not configured.") + + elif selected_dataset == "WorldPop": + dataset = ee.ImageCollection('WorldPop/GP/100m/pop') \ + .filterBounds(ee_object) \ + .filter(ee.Filter.date(start_date_str, end_date_str)) + + population = dataset.mean().clip(ee_object) + pop_vis = { + 'min': 0, + 'max': 1000, + 'palette': ['blue', 'green', 'yellow', 'red'] + } + pop_map_id = population.getMapId(pop_vis) + folium.TileLayer( + tiles=pop_map_id['tile_fetcher'].url_format, + attr='Google Earth Engine', + name='World Population', + overlay=True, + control=True + ).add_to(folium_map) + + elif selected_dataset == "COPERNICUS": + dataset = ee.ImageCollection('COPERNICUS/S2') \ + .filterBounds(ee_object) \ + .filter(ee.Filter.date(start_date_str, end_date_str)) + + sentinel = dataset.median().clip(ee_object) + vis_params = { + 'bands': ['B4', 'B3', 'B2'], + 'min': 0, + 'max': 3000, + 'gamma': 1.4 + } + copernicus_map_id = sentinel.getMapId(vis_params) + folium.TileLayer( + tiles=copernicus_map_id['tile_fetcher'].url_format, + attr='Google Earth Engine', + name='Copernicus Sentinel-2', + overlay=True, + control=True + ).add_to(folium_map) + + folium_map.add_child(folium.LayerControl()) + except Exception as e: + st.error(f"Error processing dataset: {e}") + + folium_map_html = folium_map._repr_html_() + return folium_map_html + +def handle_submit(selected_dataset, selected_date_range_From, selected_date_range_To, selected_shape): + shapefile_name = f'{selected_shape}.shp' + shapefile_path = os.path.join(SHAPEFILE_DIR, shapefile_name) + + if os.path.exists(shapefile_path): + try: + roi_gdf = gpd.read_file(shapefile_path) + roi_geojson = roi_gdf.to_crs("EPSG:4326").to_json() + except Exception as e: + st.error(f"Error reading shapefile: {e}") + return + + try: + ee_object = geemap.geojson_to_ee(json.loads(roi_geojson)) + except Exception as e: + st.error(f"Error converting GeoJSON to Earth Engine object: {e}") + return + + st.markdown("### Satellite Data Map") + folium_map_html = create_folium_map( + selected_dataset, + ee_object, + selected_date_range_From.strftime('%Y-%m-%d'), + selected_date_range_To.strftime('%Y-%m-%d') + ) + html(folium_map_html, height=600) + else: + st.error("Selected shapefile does not exist.") + +def submit_control(): + selected_dataset = st.sidebar.selectbox( + "Select Dataset", + ["Modis", "dataset_nighttime", 'precipitation', 'GlobalSurfaceWater', 'WorldPop', 'COPERNICUS'] + ) + + selected_date_range_From = st.sidebar.date_input("From", value=pd.to_datetime("2015-07-01")) + selected_date_range_To = st.sidebar.date_input("To", value=pd.to_datetime("2023-09-30")) + + shape_options = [ + 'District_Boundary', 'hydro_basins', 'karachi', + 'National_Constituency_with_Projected_2010_Population', + 'Provincial_Boundary', 'Provincial_Constituency', + 'Tehsil_Boundary', 'Union_Council' + ] + + selected_shape = st.sidebar.selectbox("Select Shape", shape_options) + + if st.sidebar.button("Submit"): + st.session_state.selected_dataset = selected_dataset + st.session_state.selected_date_range_From = selected_date_range_From + st.session_state.selected_date_range_To = selected_date_range_To + st.session_state.selected_shape = selected_shape + st.session_state.submitted = True + else: + st.session_state.submitted = False + + if 'submitted' in st.session_state and st.session_state.submitted: + handle_submit( + st.session_state.selected_dataset, + st.session_state.selected_date_range_From, + st.session_state.selected_date_range_To, + st.session_state.selected_shape + ) + +def main(): + st.set_page_config(layout="wide") + st.title("Satellite Data Visualization, Interactive Map") + + initialize_gee() + submit_control() + +if __name__ == "__main__": + main() diff --git a/y/LICENSE b/y/LICENSE new file mode 100644 index 0000000000000000000000000000000000000000..ace7f15f50ff5a4f8f76098c1c739ad2a56c5769 --- /dev/null +++ b/y/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2020 bikesh bade + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/y/Timelapse.py b/y/Timelapse.py new file mode 100644 index 0000000000000000000000000000000000000000..592a10b8cead38d31fe9ea9a071c0c6f905d697d --- /dev/null +++ b/y/Timelapse.py @@ -0,0 +1,1534 @@ +import ee +import json +import os +import warnings +import datetime +import fiona +import geopandas as gpd +import folium +import streamlit as st +import geemap.colormaps as cm +import geemap.foliumap as geemap +from datetime import date +from shapely.geometry import Polygon + +st.set_page_config(layout="wide") +warnings.filterwarnings("ignore") + + +@st.cache_data +def ee_authenticate(token_name="EARTHENGINE_TOKEN"): + geemap.ee_initialize(token_name=token_name) + + +st.sidebar.info( + """ + - Web App URL: + - GitHub repository: + """ +) + +st.sidebar.title("Contact") +st.sidebar.info( + """ + Qiusheng Wu at [wetlands.io](https://wetlands.io) | [GitHub](https://github.com/giswqs) | [Twitter](https://twitter.com/giswqs) | [YouTube](https://www.youtube.com/c/QiushengWu) | [LinkedIn](https://www.linkedin.com/in/qiushengwu) + """ +) + +goes_rois = { + "Creek Fire, CA (2020-09-05)": { + "region": Polygon( + [ + [-121.003418, 36.848857], + [-121.003418, 39.049052], + [-117.905273, 39.049052], + [-117.905273, 36.848857], + [-121.003418, 36.848857], + ] + ), + "start_time": "2020-09-05T15:00:00", + "end_time": "2020-09-06T02:00:00", + }, + "Bomb Cyclone (2021-10-24)": { + "region": Polygon( + [ + [-159.5954, 60.4088], + [-159.5954, 24.5178], + [-114.2438, 24.5178], + [-114.2438, 60.4088], + ] + ), + "start_time": "2021-10-24T14:00:00", + "end_time": "2021-10-25T01:00:00", + }, + "Hunga Tonga Volcanic Eruption (2022-01-15)": { + "region": Polygon( + [ + [-192.480469, -32.546813], + [-192.480469, -8.754795], + [-157.587891, -8.754795], + [-157.587891, -32.546813], + [-192.480469, -32.546813], + ] + ), + "start_time": "2022-01-15T03:00:00", + "end_time": "2022-01-15T07:00:00", + }, + "Hunga Tonga Volcanic Eruption Closer Look (2022-01-15)": { + "region": Polygon( + [ + [-178.901367, -22.958393], + [-178.901367, -17.85329], + [-171.452637, -17.85329], + [-171.452637, -22.958393], + [-178.901367, -22.958393], + ] + ), + "start_time": "2022-01-15T03:00:00", + "end_time": "2022-01-15T07:00:00", + }, +} + + +landsat_rois = { + "Aral Sea": Polygon( + [ + [57.667236, 43.834527], + [57.667236, 45.996962], + [61.12793, 45.996962], + [61.12793, 43.834527], + [57.667236, 43.834527], + ] + ), + "Dubai": Polygon( + [ + [54.541626, 24.763044], + [54.541626, 25.427152], + [55.632019, 25.427152], + [55.632019, 24.763044], + [54.541626, 24.763044], + ] + ), + "Hong Kong International Airport": Polygon( + [ + [113.825226, 22.198849], + [113.825226, 22.349758], + [114.085121, 22.349758], + [114.085121, 22.198849], + [113.825226, 22.198849], + ] + ), + "Las Vegas, NV": Polygon( + [ + [-115.554199, 35.804449], + [-115.554199, 36.558188], + [-113.903503, 36.558188], + [-113.903503, 35.804449], + [-115.554199, 35.804449], + ] + ), + "Pucallpa, Peru": Polygon( + [ + [-74.672699, -8.600032], + [-74.672699, -8.254983], + [-74.279938, -8.254983], + [-74.279938, -8.600032], + ] + ), + "Sierra Gorda, Chile": Polygon( + [ + [-69.315491, -22.837104], + [-69.315491, -22.751488], + [-69.190006, -22.751488], + [-69.190006, -22.837104], + [-69.315491, -22.837104], + ] + ), +} + +modis_rois = { + "World": Polygon( + [ + [-171.210938, -57.136239], + [-171.210938, 79.997168], + [177.539063, 79.997168], + [177.539063, -57.136239], + [-171.210938, -57.136239], + ] + ), + "Africa": Polygon( + [ + [-18.6983, 38.1446], + [-18.6983, -36.1630], + [52.2293, -36.1630], + [52.2293, 38.1446], + ] + ), + "USA": Polygon( + [ + [-127.177734, 23.725012], + [-127.177734, 50.792047], + [-66.269531, 50.792047], + [-66.269531, 23.725012], + [-127.177734, 23.725012], + ] + ), +} + +ocean_rois = { + "Gulf of Mexico": Polygon( + [ + [-101.206055, 15.496032], + [-101.206055, 32.361403], + [-75.673828, 32.361403], + [-75.673828, 15.496032], + [-101.206055, 15.496032], + ] + ), + "North Atlantic Ocean": Polygon( + [ + [-85.341797, 24.046464], + [-85.341797, 45.02695], + [-55.810547, 45.02695], + [-55.810547, 24.046464], + [-85.341797, 24.046464], + ] + ), + "World": Polygon( + [ + [-171.210938, -57.136239], + [-171.210938, 79.997168], + [177.539063, 79.997168], + [177.539063, -57.136239], + [-171.210938, -57.136239], + ] + ), +} + + +@st.cache_data +def uploaded_file_to_gdf(data): + import tempfile + import os + import uuid + + _, file_extension = os.path.splitext(data.name) + file_id = str(uuid.uuid4()) + file_path = os.path.join(tempfile.gettempdir(), f"{file_id}{file_extension}") + + with open(file_path, "wb") as file: + file.write(data.getbuffer()) + + if file_path.lower().endswith(".kml"): + fiona.drvsupport.supported_drivers["KML"] = "rw" + gdf = gpd.read_file(file_path, driver="KML") + else: + gdf = gpd.read_file(file_path) + + return gdf + + +def app(): + + today = date.today() + + st.title("Create Satellite Timelapse") + + st.markdown( + """ + An interactive web app for creating [Landsat](https://developers.google.com/earth-engine/datasets/catalog/landsat)/[GOES](https://jstnbraaten.medium.com/goes-in-earth-engine-53fbc8783c16) timelapse for any location around the globe. + The app was built using [streamlit](https://streamlit.io), [geemap](https://geemap.org), and [Google Earth Engine](https://earthengine.google.com). For more info, check out my streamlit [blog post](https://blog.streamlit.io/creating-satellite-timelapse-with-streamlit-and-earth-engine). + """ + ) + + row1_col1, row1_col2 = st.columns([2, 1]) + + if st.session_state.get("zoom_level") is None: + st.session_state["zoom_level"] = 4 + + st.session_state["ee_asset_id"] = None + st.session_state["bands"] = None + st.session_state["palette"] = None + st.session_state["vis_params"] = None + + with row1_col1: + ee_authenticate(token_name="EARTHENGINE_TOKEN") + m = geemap.Map( + basemap="HYBRID", + plugin_Draw=True, + Draw_export=True, + locate_control=True, + plugin_LatLngPopup=False, + ) + m.add_basemap("ROADMAP") + + with row1_col2: + + keyword = st.text_input("Search for a location:", "") + if keyword: + locations = geemap.geocode(keyword) + if locations is not None and len(locations) > 0: + str_locations = [str(g)[1:-1] for g in locations] + location = st.selectbox("Select a location:", str_locations) + loc_index = str_locations.index(location) + selected_loc = locations[loc_index] + lat, lng = selected_loc.lat, selected_loc.lng + folium.Marker(location=[lat, lng], popup=location).add_to(m) + m.set_center(lng, lat, 12) + st.session_state["zoom_level"] = 12 + + collection = st.selectbox( + "Select a satellite image collection: ", + [ + "Any Earth Engine ImageCollection", + "Landsat TM-ETM-OLI Surface Reflectance", + "Sentinel-2 MSI Surface Reflectance", + "Geostationary Operational Environmental Satellites (GOES)", + "MODIS Vegetation Indices (NDVI/EVI) 16-Day Global 1km", + "MODIS Gap filled Land Surface Temperature Daily", + "MODIS Ocean Color SMI", + "USDA National Agriculture Imagery Program (NAIP)", + ], + index=1, + ) + + if collection in [ + "Landsat TM-ETM-OLI Surface Reflectance", + "Sentinel-2 MSI Surface Reflectance", + ]: + roi_options = ["Uploaded GeoJSON"] + list(landsat_rois.keys()) + + elif collection == "Geostationary Operational Environmental Satellites (GOES)": + roi_options = ["Uploaded GeoJSON"] + list(goes_rois.keys()) + + elif collection in [ + "MODIS Vegetation Indices (NDVI/EVI) 16-Day Global 1km", + "MODIS Gap filled Land Surface Temperature Daily", + ]: + roi_options = ["Uploaded GeoJSON"] + list(modis_rois.keys()) + elif collection == "MODIS Ocean Color SMI": + roi_options = ["Uploaded GeoJSON"] + list(ocean_rois.keys()) + else: + roi_options = ["Uploaded GeoJSON"] + + if collection == "Any Earth Engine ImageCollection": + keyword = st.text_input("Enter a keyword to search (e.g., MODIS):", "") + if keyword: + + assets = geemap.search_ee_data(keyword) + ee_assets = [] + for asset in assets: + if asset["ee_id_snippet"].startswith("ee.ImageCollection"): + ee_assets.append(asset) + + asset_titles = [x["title"] for x in ee_assets] + dataset = st.selectbox("Select a dataset:", asset_titles) + if len(ee_assets) > 0: + st.session_state["ee_assets"] = ee_assets + st.session_state["asset_titles"] = asset_titles + index = asset_titles.index(dataset) + ee_id = ee_assets[index]["id"] + else: + ee_id = "" + + if dataset is not None: + with st.expander("Show dataset details", False): + index = asset_titles.index(dataset) + html = geemap.ee_data_html(st.session_state["ee_assets"][index]) + st.markdown(html, True) + # elif collection == "MODIS Gap filled Land Surface Temperature Daily": + # ee_id = "" + else: + ee_id = "" + + asset_id = st.text_input("Enter an ee.ImageCollection asset ID:", ee_id) + + if asset_id: + with st.expander("Customize band combination and color palette", True): + try: + col = ee.ImageCollection.load(asset_id) + st.session_state["ee_asset_id"] = asset_id + except: + st.error("Invalid Earth Engine asset ID.") + st.session_state["ee_asset_id"] = None + return + + img_bands = col.first().bandNames().getInfo() + if len(img_bands) >= 3: + default_bands = img_bands[:3][::-1] + else: + default_bands = img_bands[:] + bands = st.multiselect( + "Select one or three bands (RGB):", img_bands, default_bands + ) + st.session_state["bands"] = bands + + if len(bands) == 1: + palette_options = st.selectbox( + "Color palette", + cm.list_colormaps(), + index=2, + ) + palette_values = cm.get_palette(palette_options, 15) + palette = st.text_area( + "Enter a custom palette:", + palette_values, + ) + st.write( + cm.plot_colormap(cmap=palette_options, return_fig=True) + ) + st.session_state["palette"] = json.loads( + palette.replace("'", '"') + ) + + if bands: + vis_params = st.text_area( + "Enter visualization parameters", + "{'bands': [" + + ", ".join([f"'{band}'" for band in bands]) + + "]}", + ) + else: + vis_params = st.text_area( + "Enter visualization parameters", + "{}", + ) + try: + st.session_state["vis_params"] = json.loads( + vis_params.replace("'", '"') + ) + st.session_state["vis_params"]["palette"] = st.session_state[ + "palette" + ] + except Exception as e: + st.session_state["vis_params"] = None + st.error( + f"Invalid visualization parameters. It must be a dictionary." + ) + + elif collection == "MODIS Gap filled Land Surface Temperature Daily": + with st.expander("Show dataset details", False): + st.markdown( + """ + See the [Awesome GEE Community Datasets](https://samapriya.github.io/awesome-gee-community-datasets/projects/daily_lst/). + """ + ) + + MODIS_options = ["Daytime (1:30 pm)", "Nighttime (1:30 am)"] + MODIS_option = st.selectbox("Select a MODIS dataset:", MODIS_options) + if MODIS_option == "Daytime (1:30 pm)": + st.session_state["ee_asset_id"] = ( + "projects/sat-io/open-datasets/gap-filled-lst/gf_day_1km" + ) + else: + st.session_state["ee_asset_id"] = ( + "projects/sat-io/open-datasets/gap-filled-lst/gf_night_1km" + ) + + palette_options = st.selectbox( + "Color palette", + cm.list_colormaps(), + index=90, + ) + palette_values = cm.get_palette(palette_options, 15) + palette = st.text_area( + "Enter a custom palette:", + palette_values, + ) + st.write(cm.plot_colormap(cmap=palette_options, return_fig=True)) + st.session_state["palette"] = json.loads(palette.replace("'", '"')) + elif collection == "MODIS Ocean Color SMI": + with st.expander("Show dataset details", False): + st.markdown( + """ + See the [Earth Engine Data Catalog](https://developers.google.com/earth-engine/datasets/catalog/NASA_OCEANDATA_MODIS-Aqua_L3SMI). + """ + ) + + MODIS_options = ["Aqua", "Terra"] + MODIS_option = st.selectbox("Select a satellite:", MODIS_options) + st.session_state["ee_asset_id"] = MODIS_option + # if MODIS_option == "Daytime (1:30 pm)": + # st.session_state[ + # "ee_asset_id" + # ] = "projects/sat-io/open-datasets/gap-filled-lst/gf_day_1km" + # else: + # st.session_state[ + # "ee_asset_id" + # ] = "projects/sat-io/open-datasets/gap-filled-lst/gf_night_1km" + + band_dict = { + "Chlorophyll a concentration": "chlor_a", + "Normalized fluorescence line height": "nflh", + "Particulate organic carbon": "poc", + "Sea surface temperature": "sst", + "Remote sensing reflectance at band 412nm": "Rrs_412", + "Remote sensing reflectance at band 443nm": "Rrs_443", + "Remote sensing reflectance at band 469nm": "Rrs_469", + "Remote sensing reflectance at band 488nm": "Rrs_488", + "Remote sensing reflectance at band 531nm": "Rrs_531", + "Remote sensing reflectance at band 547nm": "Rrs_547", + "Remote sensing reflectance at band 555nm": "Rrs_555", + "Remote sensing reflectance at band 645nm": "Rrs_645", + "Remote sensing reflectance at band 667nm": "Rrs_667", + "Remote sensing reflectance at band 678nm": "Rrs_678", + } + + band_options = list(band_dict.keys()) + band = st.selectbox( + "Select a band", + band_options, + band_options.index("Sea surface temperature"), + ) + st.session_state["band"] = band_dict[band] + + colors = cm.list_colormaps() + palette_options = st.selectbox( + "Color palette", + colors, + index=colors.index("coolwarm"), + ) + palette_values = cm.get_palette(palette_options, 15) + palette = st.text_area( + "Enter a custom palette:", + palette_values, + ) + st.write(cm.plot_colormap(cmap=palette_options, return_fig=True)) + st.session_state["palette"] = json.loads(palette.replace("'", '"')) + + sample_roi = st.selectbox( + "Select a sample ROI or upload a GeoJSON file:", + roi_options, + index=0, + ) + + add_outline = st.checkbox( + "Overlay an administrative boundary on timelapse", False + ) + + if add_outline: + + with st.expander("Customize administrative boundary", True): + + overlay_options = { + "User-defined": None, + "Continents": "continents", + "Countries": "countries", + "US States": "us_states", + "China": "china", + } + + overlay = st.selectbox( + "Select an administrative boundary:", + list(overlay_options.keys()), + index=2, + ) + + overlay_data = overlay_options[overlay] + + if overlay_data is None: + overlay_data = st.text_input( + "Enter an HTTP URL to a GeoJSON file or an ee.FeatureCollection asset id:", + "https://raw.githubusercontent.com/giswqs/geemap/master/examples/data/countries.geojson", + ) + + overlay_color = st.color_picker( + "Select a color for the administrative boundary:", "#000000" + ) + overlay_width = st.slider( + "Select a line width for the administrative boundary:", 1, 20, 1 + ) + overlay_opacity = st.slider( + "Select an opacity for the administrative boundary:", + 0.0, + 1.0, + 1.0, + 0.05, + ) + else: + overlay_data = None + overlay_color = "black" + overlay_width = 1 + overlay_opacity = 1 + + with row1_col1: + + with st.expander( + "Steps: Draw a rectangle on the map -> Export it as a GeoJSON -> Upload it back to the app -> Click the Submit button. Expand this tab to see a demo 👉" + ): + video_empty = st.empty() + + data = st.file_uploader( + "Upload a GeoJSON file to use as an ROI. Customize timelapse parameters and then click the Submit button 😇👇", + type=["geojson", "kml", "zip"], + ) + + crs = "epsg:4326" + if sample_roi == "Uploaded GeoJSON": + if data is None: + # st.info( + # "Steps to create a timelapse: Draw a rectangle on the map -> Export it as a GeoJSON -> Upload it back to the app -> Click Submit button" + # ) + if collection in [ + "Geostationary Operational Environmental Satellites (GOES)", + "USDA National Agriculture Imagery Program (NAIP)", + ] and (not keyword): + m.set_center(-100, 40, 3) + # else: + # m.set_center(4.20, 18.63, zoom=2) + else: + if collection in [ + "Landsat TM-ETM-OLI Surface Reflectance", + "Sentinel-2 MSI Surface Reflectance", + ]: + gdf = gpd.GeoDataFrame( + index=[0], crs=crs, geometry=[landsat_rois[sample_roi]] + ) + elif ( + collection + == "Geostationary Operational Environmental Satellites (GOES)" + ): + gdf = gpd.GeoDataFrame( + index=[0], crs=crs, geometry=[goes_rois[sample_roi]["region"]] + ) + elif collection == "MODIS Vegetation Indices (NDVI/EVI) 16-Day Global 1km": + gdf = gpd.GeoDataFrame( + index=[0], crs=crs, geometry=[modis_rois[sample_roi]] + ) + + if sample_roi != "Uploaded GeoJSON": + + if collection in [ + "Landsat TM-ETM-OLI Surface Reflectance", + "Sentinel-2 MSI Surface Reflectance", + ]: + gdf = gpd.GeoDataFrame( + index=[0], crs=crs, geometry=[landsat_rois[sample_roi]] + ) + elif ( + collection + == "Geostationary Operational Environmental Satellites (GOES)" + ): + gdf = gpd.GeoDataFrame( + index=[0], crs=crs, geometry=[goes_rois[sample_roi]["region"]] + ) + elif collection in [ + "MODIS Vegetation Indices (NDVI/EVI) 16-Day Global 1km", + "MODIS Gap filled Land Surface Temperature Daily", + ]: + gdf = gpd.GeoDataFrame( + index=[0], crs=crs, geometry=[modis_rois[sample_roi]] + ) + elif collection == "MODIS Ocean Color SMI": + gdf = gpd.GeoDataFrame( + index=[0], crs=crs, geometry=[ocean_rois[sample_roi]] + ) + try: + st.session_state["roi"] = geemap.gdf_to_ee(gdf, geodesic=False) + except Exception as e: + st.error(e) + st.error("Please draw another ROI and try again.") + return + m.add_gdf(gdf, "ROI") + + elif data: + gdf = uploaded_file_to_gdf(data) + try: + st.session_state["roi"] = geemap.gdf_to_ee(gdf, geodesic=False) + m.add_gdf(gdf, "ROI") + except Exception as e: + st.error(e) + st.error("Please draw another ROI and try again.") + return + + m.to_streamlit(height=600) + + with row1_col2: + + if collection in [ + "Landsat TM-ETM-OLI Surface Reflectance", + "Sentinel-2 MSI Surface Reflectance", + ]: + + if collection == "Landsat TM-ETM-OLI Surface Reflectance": + sensor_start_year = 1984 + timelapse_title = "Landsat Timelapse" + timelapse_speed = 5 + elif collection == "Sentinel-2 MSI Surface Reflectance": + sensor_start_year = 2015 + timelapse_title = "Sentinel-2 Timelapse" + timelapse_speed = 5 + video_empty.video("https://youtu.be/VVRK_-dEjR4") + + with st.form("submit_landsat_form"): + + roi = None + if st.session_state.get("roi") is not None: + roi = st.session_state.get("roi") + out_gif = geemap.temp_file_path(".gif") + + title = st.text_input( + "Enter a title to show on the timelapse: ", timelapse_title + ) + RGB = st.selectbox( + "Select an RGB band combination:", + [ + "Red/Green/Blue", + "NIR/Red/Green", + "SWIR2/SWIR1/NIR", + "NIR/SWIR1/Red", + "SWIR2/NIR/Red", + "SWIR2/SWIR1/Red", + "SWIR1/NIR/Blue", + "NIR/SWIR1/Blue", + "SWIR2/NIR/Green", + "SWIR1/NIR/Red", + "SWIR2/NIR/SWIR1", + "SWIR1/NIR/SWIR2", + ], + index=9, + ) + + frequency = st.selectbox( + "Select a temporal frequency:", + ["year", "quarter", "month"], + index=0, + ) + + with st.expander("Customize timelapse"): + + speed = st.slider("Frames per second:", 1, 30, timelapse_speed) + dimensions = st.slider( + "Maximum dimensions (Width*Height) in pixels", 768, 2000, 768 + ) + progress_bar_color = st.color_picker( + "Progress bar color:", "#0000ff" + ) + years = st.slider( + "Start and end year:", + sensor_start_year, + today.year, + (sensor_start_year, today.year), + ) + months = st.slider("Start and end month:", 1, 12, (1, 12)) + font_size = st.slider("Font size:", 10, 50, 30) + font_color = st.color_picker("Font color:", "#ffffff") + apply_fmask = st.checkbox( + "Apply fmask (remove clouds, shadows, snow)", True + ) + font_type = st.selectbox( + "Select the font type for the title:", + ["arial.ttf", "alibaba.otf"], + index=0, + ) + fading = st.slider( + "Fading duration (seconds) for each frame:", 0.0, 3.0, 0.0 + ) + mp4 = st.checkbox("Save timelapse as MP4", True) + + empty_text = st.empty() + empty_image = st.empty() + empty_fire_image = st.empty() + empty_video = st.container() + submitted = st.form_submit_button("Submit") + if submitted: + + if sample_roi == "Uploaded GeoJSON" and data is None: + empty_text.warning( + "Steps to create a timelapse: Draw a rectangle on the map -> Export it as a GeoJSON -> Upload it back to the app -> Click the Submit button. Alternatively, you can select a sample ROI from the dropdown list." + ) + else: + + empty_text.text("Computing... Please wait...") + + start_year = years[0] + end_year = years[1] + start_date = str(months[0]).zfill(2) + "-01" + end_date = str(months[1]).zfill(2) + "-30" + bands = RGB.split("/") + + try: + if collection == "Landsat TM-ETM-OLI Surface Reflectance": + out_gif = geemap.landsat_timelapse( + roi=roi, + out_gif=out_gif, + start_year=start_year, + end_year=end_year, + start_date=start_date, + end_date=end_date, + bands=bands, + apply_fmask=apply_fmask, + frames_per_second=speed, + # dimensions=dimensions, + dimensions=768, + overlay_data=overlay_data, + overlay_color=overlay_color, + overlay_width=overlay_width, + overlay_opacity=overlay_opacity, + frequency=frequency, + date_format=None, + title=title, + title_xy=("2%", "90%"), + add_text=True, + text_xy=("2%", "2%"), + text_sequence=None, + font_type=font_type, + font_size=font_size, + font_color=font_color, + add_progress_bar=True, + progress_bar_color=progress_bar_color, + progress_bar_height=5, + loop=0, + mp4=mp4, + fading=fading, + ) + elif collection == "Sentinel-2 MSI Surface Reflectance": + out_gif = geemap.sentinel2_timelapse( + roi=roi, + out_gif=out_gif, + start_year=start_year, + end_year=end_year, + start_date=start_date, + end_date=end_date, + bands=bands, + apply_fmask=apply_fmask, + frames_per_second=speed, + dimensions=768, + # dimensions=dimensions, + overlay_data=overlay_data, + overlay_color=overlay_color, + overlay_width=overlay_width, + overlay_opacity=overlay_opacity, + frequency=frequency, + date_format=None, + title=title, + title_xy=("2%", "90%"), + add_text=True, + text_xy=("2%", "2%"), + text_sequence=None, + font_type=font_type, + font_size=font_size, + font_color=font_color, + add_progress_bar=True, + progress_bar_color=progress_bar_color, + progress_bar_height=5, + loop=0, + mp4=mp4, + fading=fading, + ) + except: + empty_text.error( + "An error occurred while computing the timelapse. Your probably requested too much data. Try reducing the ROI or timespan." + ) + st.stop() + + if out_gif is not None and os.path.exists(out_gif): + + empty_text.text( + "Right click the GIF to save it to your computer👇" + ) + empty_image.image(out_gif) + + out_mp4 = out_gif.replace(".gif", ".mp4") + if mp4 and os.path.exists(out_mp4): + with empty_video: + st.text( + "Right click the MP4 to save it to your computer👇" + ) + st.video(out_gif.replace(".gif", ".mp4")) + + else: + empty_text.error( + "Something went wrong. You probably requested too much data. Try reducing the ROI or timespan." + ) + + elif collection == "Geostationary Operational Environmental Satellites (GOES)": + + video_empty.video("https://youtu.be/16fA2QORG4A") + + with st.form("submit_goes_form"): + + roi = None + if st.session_state.get("roi") is not None: + roi = st.session_state.get("roi") + out_gif = geemap.temp_file_path(".gif") + + satellite = st.selectbox("Select a satellite:", ["GOES-17", "GOES-16"]) + earliest_date = datetime.date(2017, 7, 10) + latest_date = datetime.date.today() + + if sample_roi == "Uploaded GeoJSON": + roi_start_date = today - datetime.timedelta(days=2) + roi_end_date = today - datetime.timedelta(days=1) + roi_start_time = datetime.time(14, 00) + roi_end_time = datetime.time(1, 00) + else: + roi_start = goes_rois[sample_roi]["start_time"] + roi_end = goes_rois[sample_roi]["end_time"] + roi_start_date = datetime.datetime.strptime( + roi_start[:10], "%Y-%m-%d" + ) + roi_end_date = datetime.datetime.strptime(roi_end[:10], "%Y-%m-%d") + roi_start_time = datetime.time( + int(roi_start[11:13]), int(roi_start[14:16]) + ) + roi_end_time = datetime.time( + int(roi_end[11:13]), int(roi_end[14:16]) + ) + + start_date = st.date_input("Select the start date:", roi_start_date) + end_date = st.date_input("Select the end date:", roi_end_date) + + with st.expander("Customize timelapse"): + + add_fire = st.checkbox("Add Fire/Hotspot Characterization", False) + + scan_type = st.selectbox( + "Select a scan type:", ["Full Disk", "CONUS", "Mesoscale"] + ) + + start_time = st.time_input( + "Select the start time of the start date:", roi_start_time + ) + + end_time = st.time_input( + "Select the end time of the end date:", roi_end_time + ) + + start = ( + start_date.strftime("%Y-%m-%d") + + "T" + + start_time.strftime("%H:%M:%S") + ) + end = ( + end_date.strftime("%Y-%m-%d") + + "T" + + end_time.strftime("%H:%M:%S") + ) + + speed = st.slider("Frames per second:", 1, 30, 5) + add_progress_bar = st.checkbox("Add a progress bar", True) + progress_bar_color = st.color_picker( + "Progress bar color:", "#0000ff" + ) + font_size = st.slider("Font size:", 10, 50, 20) + font_color = st.color_picker("Font color:", "#ffffff") + fading = st.slider( + "Fading duration (seconds) for each frame:", 0.0, 3.0, 0.0 + ) + mp4 = st.checkbox("Save timelapse as MP4", True) + + empty_text = st.empty() + empty_image = st.empty() + empty_video = st.container() + empty_fire_text = st.empty() + empty_fire_image = st.empty() + + submitted = st.form_submit_button("Submit") + if submitted: + if sample_roi == "Uploaded GeoJSON" and data is None: + empty_text.warning( + "Steps to create a timelapse: Draw a rectangle on the map -> Export it as a GeoJSON -> Upload it back to the app -> Click the Submit button. Alternatively, you can select a sample ROI from the dropdown list." + ) + else: + empty_text.text("Computing... Please wait...") + + geemap.goes_timelapse( + roi, + out_gif, + start_date=start, + end_date=end, + data=satellite, + scan=scan_type.replace(" ", "_").lower(), + dimensions=768, + framesPerSecond=speed, + date_format="YYYY-MM-dd HH:mm", + xy=("3%", "3%"), + text_sequence=None, + font_type="arial.ttf", + font_size=font_size, + font_color=font_color, + add_progress_bar=add_progress_bar, + progress_bar_color=progress_bar_color, + progress_bar_height=5, + loop=0, + overlay_data=overlay_data, + overlay_color=overlay_color, + overlay_width=overlay_width, + overlay_opacity=overlay_opacity, + mp4=mp4, + fading=fading, + ) + + if out_gif is not None and os.path.exists(out_gif): + empty_text.text( + "Right click the GIF to save it to your computer👇" + ) + empty_image.image(out_gif) + + out_mp4 = out_gif.replace(".gif", ".mp4") + if mp4 and os.path.exists(out_mp4): + with empty_video: + st.text( + "Right click the MP4 to save it to your computer👇" + ) + st.video(out_gif.replace(".gif", ".mp4")) + + if add_fire: + out_fire_gif = geemap.temp_file_path(".gif") + empty_fire_text.text( + "Delineating Fire Hotspot... Please wait..." + ) + geemap.goes_fire_timelapse( + out_fire_gif, + start_date=start, + end_date=end, + data=satellite, + scan=scan_type.replace(" ", "_").lower(), + region=roi, + dimensions=768, + framesPerSecond=speed, + date_format="YYYY-MM-dd HH:mm", + xy=("3%", "3%"), + text_sequence=None, + font_type="arial.ttf", + font_size=font_size, + font_color=font_color, + add_progress_bar=add_progress_bar, + progress_bar_color=progress_bar_color, + progress_bar_height=5, + loop=0, + ) + if os.path.exists(out_fire_gif): + empty_fire_image.image(out_fire_gif) + else: + empty_text.text( + "Something went wrong, either the ROI is too big or there are no data available for the specified date range. Please try a smaller ROI or different date range." + ) + + elif collection == "MODIS Vegetation Indices (NDVI/EVI) 16-Day Global 1km": + + video_empty.video("https://youtu.be/16fA2QORG4A") + + satellite = st.selectbox("Select a satellite:", ["Terra", "Aqua"]) + band = st.selectbox("Select a band:", ["NDVI", "EVI"]) + + with st.form("submit_modis_form"): + + roi = None + if st.session_state.get("roi") is not None: + roi = st.session_state.get("roi") + out_gif = geemap.temp_file_path(".gif") + + with st.expander("Customize timelapse"): + + start = st.date_input( + "Select a start date:", datetime.date(2000, 2, 8) + ) + end = st.date_input("Select an end date:", datetime.date.today()) + + start_date = start.strftime("%Y-%m-%d") + end_date = end.strftime("%Y-%m-%d") + + speed = st.slider("Frames per second:", 1, 30, 5) + add_progress_bar = st.checkbox("Add a progress bar", True) + progress_bar_color = st.color_picker( + "Progress bar color:", "#0000ff" + ) + font_size = st.slider("Font size:", 10, 50, 20) + font_color = st.color_picker("Font color:", "#ffffff") + + font_type = st.selectbox( + "Select the font type for the title:", + ["arial.ttf", "alibaba.otf"], + index=0, + ) + fading = st.slider( + "Fading duration (seconds) for each frame:", 0.0, 3.0, 0.0 + ) + mp4 = st.checkbox("Save timelapse as MP4", True) + + empty_text = st.empty() + empty_image = st.empty() + empty_video = st.container() + + submitted = st.form_submit_button("Submit") + if submitted: + if sample_roi == "Uploaded GeoJSON" and data is None: + empty_text.warning( + "Steps to create a timelapse: Draw a rectangle on the map -> Export it as a GeoJSON -> Upload it back to the app -> Click the Submit button. Alternatively, you can select a sample ROI from the dropdown list." + ) + else: + + empty_text.text("Computing... Please wait...") + + geemap.modis_ndvi_timelapse( + roi, + out_gif, + satellite, + band, + start_date, + end_date, + 768, + speed, + overlay_data=overlay_data, + overlay_color=overlay_color, + overlay_width=overlay_width, + overlay_opacity=overlay_opacity, + mp4=mp4, + fading=fading, + ) + + geemap.reduce_gif_size(out_gif) + + empty_text.text( + "Right click the GIF to save it to your computer👇" + ) + empty_image.image(out_gif) + + out_mp4 = out_gif.replace(".gif", ".mp4") + if mp4 and os.path.exists(out_mp4): + with empty_video: + st.text( + "Right click the MP4 to save it to your computer👇" + ) + st.video(out_gif.replace(".gif", ".mp4")) + + elif collection == "Any Earth Engine ImageCollection": + + with st.form("submit_ts_form"): + with st.expander("Customize timelapse"): + + title = st.text_input( + "Enter a title to show on the timelapse: ", "Timelapse" + ) + start_date = st.date_input( + "Select the start date:", datetime.date(2020, 1, 1) + ) + end_date = st.date_input( + "Select the end date:", datetime.date.today() + ) + frequency = st.selectbox( + "Select a temporal frequency:", + ["year", "quarter", "month", "day", "hour", "minute", "second"], + index=0, + ) + reducer = st.selectbox( + "Select a reducer for aggregating data:", + ["median", "mean", "min", "max", "sum", "variance", "stdDev"], + index=0, + ) + data_format = st.selectbox( + "Select a date format to show on the timelapse:", + [ + "YYYY-MM-dd", + "YYYY", + "YYMM-MM", + "YYYY-MM-dd HH:mm", + "YYYY-MM-dd HH:mm:ss", + "HH:mm", + "HH:mm:ss", + "w", + "M", + "d", + "D", + ], + index=0, + ) + + speed = st.slider("Frames per second:", 1, 30, 5) + add_progress_bar = st.checkbox("Add a progress bar", True) + progress_bar_color = st.color_picker( + "Progress bar color:", "#0000ff" + ) + font_size = st.slider("Font size:", 10, 50, 30) + font_color = st.color_picker("Font color:", "#ffffff") + font_type = st.selectbox( + "Select the font type for the title:", + ["arial.ttf", "alibaba.otf"], + index=0, + ) + fading = st.slider( + "Fading duration (seconds) for each frame:", 0.0, 3.0, 0.0 + ) + mp4 = st.checkbox("Save timelapse as MP4", True) + + empty_text = st.empty() + empty_image = st.empty() + empty_video = st.container() + empty_fire_image = st.empty() + + roi = None + if st.session_state.get("roi") is not None: + roi = st.session_state.get("roi") + out_gif = geemap.temp_file_path(".gif") + + submitted = st.form_submit_button("Submit") + if submitted: + + if sample_roi == "Uploaded GeoJSON" and data is None: + empty_text.warning( + "Steps to create a timelapse: Draw a rectangle on the map -> Export it as a GeoJSON -> Upload it back to the app -> Click the Submit button. Alternatively, you can select a sample ROI from the dropdown list." + ) + else: + + empty_text.text("Computing... Please wait...") + try: + geemap.create_timelapse( + st.session_state.get("ee_asset_id"), + start_date=start_date.strftime("%Y-%m-%d"), + end_date=end_date.strftime("%Y-%m-%d"), + region=roi, + frequency=frequency, + reducer=reducer, + date_format=data_format, + out_gif=out_gif, + bands=st.session_state.get("bands"), + palette=st.session_state.get("palette"), + vis_params=st.session_state.get("vis_params"), + dimensions=768, + frames_per_second=speed, + crs="EPSG:3857", + overlay_data=overlay_data, + overlay_color=overlay_color, + overlay_width=overlay_width, + overlay_opacity=overlay_opacity, + title=title, + title_xy=("2%", "90%"), + add_text=True, + text_xy=("2%", "2%"), + text_sequence=None, + font_type=font_type, + font_size=font_size, + font_color=font_color, + add_progress_bar=add_progress_bar, + progress_bar_color=progress_bar_color, + progress_bar_height=5, + loop=0, + mp4=mp4, + fading=fading, + ) + except: + empty_text.error( + "An error occurred while computing the timelapse. You probably requested too much data. Try reducing the ROI or timespan." + ) + + empty_text.text( + "Right click the GIF to save it to your computer👇" + ) + empty_image.image(out_gif) + + out_mp4 = out_gif.replace(".gif", ".mp4") + if mp4 and os.path.exists(out_mp4): + with empty_video: + st.text( + "Right click the MP4 to save it to your computer👇" + ) + st.video(out_gif.replace(".gif", ".mp4")) + + elif collection in [ + "MODIS Gap filled Land Surface Temperature Daily", + "MODIS Ocean Color SMI", + ]: + + with st.form("submit_ts_form"): + with st.expander("Customize timelapse"): + + title = st.text_input( + "Enter a title to show on the timelapse: ", + "Surface Temperature", + ) + start_date = st.date_input( + "Select the start date:", datetime.date(2018, 1, 1) + ) + end_date = st.date_input( + "Select the end date:", datetime.date(2020, 12, 31) + ) + frequency = st.selectbox( + "Select a temporal frequency:", + ["year", "quarter", "month", "week", "day"], + index=2, + ) + reducer = st.selectbox( + "Select a reducer for aggregating data:", + ["median", "mean", "min", "max", "sum", "variance", "stdDev"], + index=0, + ) + + vis_params = st.text_area( + "Enter visualization parameters", + "", + help="Enter a string in the format of a dictionary, such as '{'min': 23, 'max': 32}'", + ) + + speed = st.slider("Frames per second:", 1, 30, 5) + add_progress_bar = st.checkbox("Add a progress bar", True) + progress_bar_color = st.color_picker( + "Progress bar color:", "#0000ff" + ) + font_size = st.slider("Font size:", 10, 50, 30) + font_color = st.color_picker("Font color:", "#ffffff") + font_type = st.selectbox( + "Select the font type for the title:", + ["arial.ttf", "alibaba.otf"], + index=0, + ) + add_colorbar = st.checkbox("Add a colorbar", True) + colorbar_label = st.text_input( + "Enter the colorbar label:", "Surface Temperature (°C)" + ) + fading = st.slider( + "Fading duration (seconds) for each frame:", 0.0, 3.0, 0.0 + ) + mp4 = st.checkbox("Save timelapse as MP4", True) + + empty_text = st.empty() + empty_image = st.empty() + empty_video = st.container() + + roi = None + if st.session_state.get("roi") is not None: + roi = st.session_state.get("roi") + out_gif = geemap.temp_file_path(".gif") + + submitted = st.form_submit_button("Submit") + if submitted: + + if sample_roi == "Uploaded GeoJSON" and data is None: + empty_text.warning( + "Steps to create a timelapse: Draw a rectangle on the map -> Export it as a GeoJSON -> Upload it back to the app -> Click the Submit button. Alternatively, you can select a sample ROI from the dropdown list." + ) + else: + + empty_text.text("Computing... Please wait...") + try: + if ( + collection + == "MODIS Gap filled Land Surface Temperature Daily" + ): + out_gif = geemap.create_timelapse( + st.session_state.get("ee_asset_id"), + start_date=start_date.strftime("%Y-%m-%d"), + end_date=end_date.strftime("%Y-%m-%d"), + region=roi, + bands=None, + frequency=frequency, + reducer=reducer, + date_format=None, + out_gif=out_gif, + palette=st.session_state.get("palette"), + vis_params=None, + dimensions=768, + frames_per_second=speed, + crs="EPSG:3857", + overlay_data=overlay_data, + overlay_color=overlay_color, + overlay_width=overlay_width, + overlay_opacity=overlay_opacity, + title=title, + title_xy=("2%", "90%"), + add_text=True, + text_xy=("2%", "2%"), + text_sequence=None, + font_type=font_type, + font_size=font_size, + font_color=font_color, + add_progress_bar=add_progress_bar, + progress_bar_color=progress_bar_color, + progress_bar_height=5, + add_colorbar=add_colorbar, + colorbar_label=colorbar_label, + loop=0, + mp4=mp4, + fading=fading, + ) + elif collection == "MODIS Ocean Color SMI": + if vis_params.startswith("{") and vis_params.endswith( + "}" + ): + vis_params = json.loads( + vis_params.replace("'", '"') + ) + else: + vis_params = None + out_gif = geemap.modis_ocean_color_timelapse( + st.session_state.get("ee_asset_id"), + start_date=start_date.strftime("%Y-%m-%d"), + end_date=end_date.strftime("%Y-%m-%d"), + region=roi, + bands=st.session_state["band"], + frequency=frequency, + reducer=reducer, + date_format=None, + out_gif=out_gif, + palette=st.session_state.get("palette"), + vis_params=vis_params, + dimensions=768, + frames_per_second=speed, + crs="EPSG:3857", + overlay_data=overlay_data, + overlay_color=overlay_color, + overlay_width=overlay_width, + overlay_opacity=overlay_opacity, + title=title, + title_xy=("2%", "90%"), + add_text=True, + text_xy=("2%", "2%"), + text_sequence=None, + font_type=font_type, + font_size=font_size, + font_color=font_color, + add_progress_bar=add_progress_bar, + progress_bar_color=progress_bar_color, + progress_bar_height=5, + add_colorbar=add_colorbar, + colorbar_label=colorbar_label, + loop=0, + mp4=mp4, + fading=fading, + ) + except: + empty_text.error( + "Something went wrong. You probably requested too much data. Try reducing the ROI or timespan." + ) + + if out_gif is not None and os.path.exists(out_gif): + + geemap.reduce_gif_size(out_gif) + + empty_text.text( + "Right click the GIF to save it to your computer👇" + ) + empty_image.image(out_gif) + + out_mp4 = out_gif.replace(".gif", ".mp4") + if mp4 and os.path.exists(out_mp4): + with empty_video: + st.text( + "Right click the MP4 to save it to your computer👇" + ) + st.video(out_gif.replace(".gif", ".mp4")) + + else: + st.error( + "Something went wrong. You probably requested too much data. Try reducing the ROI or timespan." + ) + + elif collection == "USDA National Agriculture Imagery Program (NAIP)": + + with st.form("submit_naip_form"): + with st.expander("Customize timelapse"): + + title = st.text_input( + "Enter a title to show on the timelapse: ", "NAIP Timelapse" + ) + + years = st.slider( + "Start and end year:", + 2003, + today.year, + (2003, today.year), + ) + + bands = st.selectbox( + "Select a band combination:", ["N/R/G", "R/G/B"], index=0 + ) + + speed = st.slider("Frames per second:", 1, 30, 3) + add_progress_bar = st.checkbox("Add a progress bar", True) + progress_bar_color = st.color_picker( + "Progress bar color:", "#0000ff" + ) + font_size = st.slider("Font size:", 10, 50, 30) + font_color = st.color_picker("Font color:", "#ffffff") + font_type = st.selectbox( + "Select the font type for the title:", + ["arial.ttf", "alibaba.otf"], + index=0, + ) + fading = st.slider( + "Fading duration (seconds) for each frame:", 0.0, 3.0, 0.0 + ) + mp4 = st.checkbox("Save timelapse as MP4", True) + + empty_text = st.empty() + empty_image = st.empty() + empty_video = st.container() + empty_fire_image = st.empty() + + roi = None + if st.session_state.get("roi") is not None: + roi = st.session_state.get("roi") + out_gif = geemap.temp_file_path(".gif") + + submitted = st.form_submit_button("Submit") + if submitted: + + if sample_roi == "Uploaded GeoJSON" and data is None: + empty_text.warning( + "Steps to create a timelapse: Draw a rectangle on the map -> Export it as a GeoJSON -> Upload it back to the app -> Click the Submit button. Alternatively, you can select a sample ROI from the dropdown list." + ) + else: + + empty_text.text("Computing... Please wait...") + try: + geemap.naip_timelapse( + roi, + years[0], + years[1], + out_gif, + bands=bands.split("/"), + palette=st.session_state.get("palette"), + vis_params=None, + dimensions=768, + frames_per_second=speed, + crs="EPSG:3857", + overlay_data=overlay_data, + overlay_color=overlay_color, + overlay_width=overlay_width, + overlay_opacity=overlay_opacity, + title=title, + title_xy=("2%", "90%"), + add_text=True, + text_xy=("2%", "2%"), + text_sequence=None, + font_type=font_type, + font_size=font_size, + font_color=font_color, + add_progress_bar=add_progress_bar, + progress_bar_color=progress_bar_color, + progress_bar_height=5, + loop=0, + mp4=mp4, + fading=fading, + ) + except: + empty_text.error( + "Something went wrong. You either requested too much data or the ROI is outside the U.S." + ) + + if out_gif is not None and os.path.exists(out_gif): + + empty_text.text( + "Right click the GIF to save it to your computer👇" + ) + empty_image.image(out_gif) + + out_mp4 = out_gif.replace(".gif", ".mp4") + if mp4 and os.path.exists(out_mp4): + with empty_video: + st.text( + "Right click the MP4 to save it to your computer👇" + ) + st.video(out_gif.replace(".gif", ".mp4")) + + else: + st.error( + "Something went wrong. You either requested too much data or the ROI is outside the U.S." + ) + + +try: + app() +except Exception as e: + pass diff --git a/y/__pycache__/Interactive_Map.cpython-312.pyc b/y/__pycache__/Interactive_Map.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b9045044273e08cbaa7fe3736fa6f1344cd170c0 Binary files /dev/null and b/y/__pycache__/Interactive_Map.cpython-312.pyc differ diff --git a/y/__pycache__/Timelapse.cpython-312.pyc b/y/__pycache__/Timelapse.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..511089d261fb6a7e89211b48822aeb4b5698aef9 Binary files /dev/null and b/y/__pycache__/Timelapse.cpython-312.pyc differ diff --git a/y/custom.js b/y/custom.js new file mode 100644 index 0000000000000000000000000000000000000000..59fad971a6b4bcbc9857c53d7d24ccea6e5e5a40 --- /dev/null +++ b/y/custom.js @@ -0,0 +1,22 @@ +document.addEventListener("DOMContentLoaded", function () { + // Add a fade-in effect to elements with class "fade-in" + const elements = document.querySelectorAll(".fade-in"); + elements.forEach(function (element) { + element.classList.add("fade"); + element.style.opacity = 0; + element.addEventListener("transitionend", function () { + element.style.opacity = 1; + }); + }); + + // Handle form submission when the "Submit" button is clicked + const submitButton = document.getElementById("submitButton"); + submitButton.addEventListener("click", function (event) { + // Prevent the default form submission + event.preventDefault(); + + // Trigger the form submission + const form = document.getElementById("dataForm"); + form.submit(); + }); +}); diff --git a/y/db.sqlite3 b/y/db.sqlite3 new file mode 100644 index 0000000000000000000000000000000000000000..b0c7458462c439fdf2c07d4da3eb12bfc3c702d8 Binary files /dev/null and b/y/db.sqlite3 differ diff --git a/y/djangoGEE/__init__.py b/y/djangoGEE/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/y/djangoGEE/__pycache__/__init__.cpython-311.pyc b/y/djangoGEE/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..fac8421aca6a4ea6f48ccc1b33f3deda081e7d4e Binary files /dev/null and b/y/djangoGEE/__pycache__/__init__.cpython-311.pyc differ diff --git a/y/djangoGEE/__pycache__/__init__.cpython-312.pyc b/y/djangoGEE/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..dc6b82ee079e3b254f85e637922ad8d5d4b8fafe Binary files /dev/null and b/y/djangoGEE/__pycache__/__init__.cpython-312.pyc differ diff --git a/y/djangoGEE/__pycache__/__init__.cpython-39.pyc b/y/djangoGEE/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a58c9cf71baeed52be33569c29d00bb7a3d61d78 Binary files /dev/null and b/y/djangoGEE/__pycache__/__init__.cpython-39.pyc differ diff --git a/y/djangoGEE/__pycache__/settings.cpython-311.pyc b/y/djangoGEE/__pycache__/settings.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8301f2a24f07ddfe2af1358bbbf733a6707908f2 Binary files /dev/null and b/y/djangoGEE/__pycache__/settings.cpython-311.pyc differ diff --git a/y/djangoGEE/__pycache__/settings.cpython-312.pyc b/y/djangoGEE/__pycache__/settings.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5e15dbcffb522b6fdc22243b94cdcee83b523b8d Binary files /dev/null and b/y/djangoGEE/__pycache__/settings.cpython-312.pyc differ diff --git a/y/djangoGEE/__pycache__/settings.cpython-39.pyc b/y/djangoGEE/__pycache__/settings.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b3c9b6c55da90fe6d6c32eec1583fb601dea7670 Binary files /dev/null and b/y/djangoGEE/__pycache__/settings.cpython-39.pyc differ diff --git a/y/djangoGEE/__pycache__/urls.cpython-311.pyc b/y/djangoGEE/__pycache__/urls.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..52a48ba4321c0197ff670f8f34bbce27b59b05dc Binary files /dev/null and b/y/djangoGEE/__pycache__/urls.cpython-311.pyc differ diff --git a/y/djangoGEE/__pycache__/urls.cpython-312.pyc b/y/djangoGEE/__pycache__/urls.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0da71120af6cf86a5bf5ec21aa2e9799bac22f2d Binary files /dev/null and b/y/djangoGEE/__pycache__/urls.cpython-312.pyc differ diff --git a/y/djangoGEE/__pycache__/urls.cpython-39.pyc b/y/djangoGEE/__pycache__/urls.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3aa275fb4a0eef5eede2f79a00781db2b52b26b7 Binary files /dev/null and b/y/djangoGEE/__pycache__/urls.cpython-39.pyc differ diff --git a/y/djangoGEE/__pycache__/wsgi.cpython-311.pyc b/y/djangoGEE/__pycache__/wsgi.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e0e457d2d8bf81776a22905f2c98d46b17fa48c8 Binary files /dev/null and b/y/djangoGEE/__pycache__/wsgi.cpython-311.pyc differ diff --git a/y/djangoGEE/__pycache__/wsgi.cpython-312.pyc b/y/djangoGEE/__pycache__/wsgi.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..fa6d4fcd70f7a6c8b753c5260ecd19d2f473671c Binary files /dev/null and b/y/djangoGEE/__pycache__/wsgi.cpython-312.pyc differ diff --git a/y/djangoGEE/__pycache__/wsgi.cpython-39.pyc b/y/djangoGEE/__pycache__/wsgi.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..bd97df43d94a5695b7f5cc92e5bfa570b3411c76 Binary files /dev/null and b/y/djangoGEE/__pycache__/wsgi.cpython-39.pyc differ diff --git a/y/djangoGEE/geoApp/__init__.py b/y/djangoGEE/geoApp/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/y/djangoGEE/geoApp/__pycache__/__init__.cpython-310.pyc b/y/djangoGEE/geoApp/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e19430b71d2aa57278bf978cec9ad41f1d00b8a2 Binary files /dev/null and b/y/djangoGEE/geoApp/__pycache__/__init__.cpython-310.pyc differ diff --git a/y/djangoGEE/geoApp/__pycache__/__init__.cpython-39.pyc b/y/djangoGEE/geoApp/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2411a82eb85b9b83099fb708a0fd097aa1dffb8f Binary files /dev/null and b/y/djangoGEE/geoApp/__pycache__/__init__.cpython-39.pyc differ diff --git a/y/djangoGEE/geoApp/__pycache__/admin.cpython-310.pyc b/y/djangoGEE/geoApp/__pycache__/admin.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..387d03403aec2097d1d3c11e891abdab530a51f8 Binary files /dev/null and b/y/djangoGEE/geoApp/__pycache__/admin.cpython-310.pyc differ diff --git a/y/djangoGEE/geoApp/__pycache__/admin.cpython-39.pyc b/y/djangoGEE/geoApp/__pycache__/admin.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3f6491a036813f20f940330a7c382b96270e61e0 Binary files /dev/null and b/y/djangoGEE/geoApp/__pycache__/admin.cpython-39.pyc differ diff --git a/y/djangoGEE/geoApp/__pycache__/apps.cpython-310.pyc b/y/djangoGEE/geoApp/__pycache__/apps.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..40bba6c3f3eb7f6c8c4bd7e0f33c64d66fb1dcba Binary files /dev/null and b/y/djangoGEE/geoApp/__pycache__/apps.cpython-310.pyc differ diff --git a/y/djangoGEE/geoApp/__pycache__/apps.cpython-39.pyc b/y/djangoGEE/geoApp/__pycache__/apps.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f82bbbdb810ad79cfdb629f47886bb753fdc45f2 Binary files /dev/null and b/y/djangoGEE/geoApp/__pycache__/apps.cpython-39.pyc differ diff --git a/y/djangoGEE/geoApp/__pycache__/models.cpython-310.pyc b/y/djangoGEE/geoApp/__pycache__/models.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7e58d565081e1b47d1a630623eacbaf0175e0beb Binary files /dev/null and b/y/djangoGEE/geoApp/__pycache__/models.cpython-310.pyc differ diff --git a/y/djangoGEE/geoApp/__pycache__/models.cpython-39.pyc b/y/djangoGEE/geoApp/__pycache__/models.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..78c291d03c35e613e3cc13e4b0c83d0f264b40a7 Binary files /dev/null and b/y/djangoGEE/geoApp/__pycache__/models.cpython-39.pyc differ diff --git a/y/djangoGEE/geoApp/__pycache__/urls.cpython-310.pyc b/y/djangoGEE/geoApp/__pycache__/urls.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b4f2931e3bd8485a7c9c8dc36a6814a66f0b1155 Binary files /dev/null and b/y/djangoGEE/geoApp/__pycache__/urls.cpython-310.pyc differ diff --git a/y/djangoGEE/geoApp/__pycache__/urls.cpython-39.pyc b/y/djangoGEE/geoApp/__pycache__/urls.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0fd37b7bfc91edb605cf77651dddf4955983aaa1 Binary files /dev/null and b/y/djangoGEE/geoApp/__pycache__/urls.cpython-39.pyc differ diff --git a/y/djangoGEE/geoApp/__pycache__/views.cpython-310.pyc b/y/djangoGEE/geoApp/__pycache__/views.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3c54541350df6d5c00c09984d1eb606aedc163f6 Binary files /dev/null and b/y/djangoGEE/geoApp/__pycache__/views.cpython-310.pyc differ diff --git a/y/djangoGEE/geoApp/__pycache__/views.cpython-39.pyc b/y/djangoGEE/geoApp/__pycache__/views.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d8f90213a6929160f7ab097b817113f498f9c15c Binary files /dev/null and b/y/djangoGEE/geoApp/__pycache__/views.cpython-39.pyc differ diff --git a/y/djangoGEE/geoApp/admin.py b/y/djangoGEE/geoApp/admin.py new file mode 100644 index 0000000000000000000000000000000000000000..8c38f3f3dad51e4585f3984282c2a4bec5349c1e --- /dev/null +++ b/y/djangoGEE/geoApp/admin.py @@ -0,0 +1,3 @@ +from django.contrib import admin + +# Register your models here. diff --git a/y/djangoGEE/geoApp/apps.py b/y/djangoGEE/geoApp/apps.py new file mode 100644 index 0000000000000000000000000000000000000000..473cf4d69b63864b4264a57ae6094a0cf5590987 --- /dev/null +++ b/y/djangoGEE/geoApp/apps.py @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class GeoappConfig(AppConfig): + default_auto_field = "django.db.models.BigAutoField" + name = "geoApp" diff --git a/y/djangoGEE/geoApp/geoApp/__init__.py b/y/djangoGEE/geoApp/geoApp/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/y/djangoGEE/geoApp/geoApp/admin.py b/y/djangoGEE/geoApp/geoApp/admin.py new file mode 100644 index 0000000000000000000000000000000000000000..ea5d68b7c457cb7f92da9c00a5c4df77ace36cef --- /dev/null +++ b/y/djangoGEE/geoApp/geoApp/admin.py @@ -0,0 +1,3 @@ +from django.contrib import admin + +# Register your models here. diff --git a/y/djangoGEE/geoApp/geoApp/apps.py b/y/djangoGEE/geoApp/geoApp/apps.py new file mode 100644 index 0000000000000000000000000000000000000000..7d7a1b993e238cf92776b7167ac62ccb97d6126c --- /dev/null +++ b/y/djangoGEE/geoApp/geoApp/apps.py @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class GeoappConfig(AppConfig): + default_auto_field = "django.db.models.BigAutoField" + name = "geoApp" diff --git a/y/djangoGEE/geoApp/geoApp/migrations/__init__.py b/y/djangoGEE/geoApp/geoApp/migrations/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/y/djangoGEE/geoApp/geoApp/models.py b/y/djangoGEE/geoApp/geoApp/models.py new file mode 100644 index 0000000000000000000000000000000000000000..fd18c6eac0dc9ffbdf025c31d136901350a0d9f2 --- /dev/null +++ b/y/djangoGEE/geoApp/geoApp/models.py @@ -0,0 +1,3 @@ +from django.db import models + +# Create your models here. diff --git a/y/djangoGEE/geoApp/geoApp/tests.py b/y/djangoGEE/geoApp/geoApp/tests.py new file mode 100644 index 0000000000000000000000000000000000000000..de8bdc00eb2fed53494a534d48e400faa830dbd9 --- /dev/null +++ b/y/djangoGEE/geoApp/geoApp/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/y/djangoGEE/geoApp/geoApp/views.py b/y/djangoGEE/geoApp/geoApp/views.py new file mode 100644 index 0000000000000000000000000000000000000000..c60c790437030748012ed3b77ed8708956de9957 --- /dev/null +++ b/y/djangoGEE/geoApp/geoApp/views.py @@ -0,0 +1,3 @@ +from django.shortcuts import render + +# Create your views here. diff --git a/y/djangoGEE/geoApp/manage.py b/y/djangoGEE/geoApp/manage.py new file mode 100644 index 0000000000000000000000000000000000000000..f1765afff2693b00ef8cd00241f2ff8e6c20e6a2 --- /dev/null +++ b/y/djangoGEE/geoApp/manage.py @@ -0,0 +1,22 @@ +#!/usr/bin/env python +"""Django's command-line utility for administrative tasks.""" +import os +import sys + + +def main(): + """Run administrative tasks.""" + os.environ.setdefault("DJANGO_SETTINGS_MODULE", "geo.settings") + try: + from django.core.management import execute_from_command_line + except ImportError as exc: + raise ImportError( + "Couldn't import Django. Are you sure it's installed and " + "available on your PYTHONPATH environment variable? Did you " + "forget to activate a virtual environment?" + ) from exc + execute_from_command_line(sys.argv) + + +if __name__ == "__main__": + main() diff --git a/y/djangoGEE/geoApp/migrations/__init__.py b/y/djangoGEE/geoApp/migrations/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/y/djangoGEE/geoApp/migrations/__pycache__/__init__.cpython-310.pyc b/y/djangoGEE/geoApp/migrations/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c8f75feb399b019bde0babf16131555947bced2a Binary files /dev/null and b/y/djangoGEE/geoApp/migrations/__pycache__/__init__.cpython-310.pyc differ diff --git a/y/djangoGEE/geoApp/migrations/__pycache__/__init__.cpython-39.pyc b/y/djangoGEE/geoApp/migrations/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7f3ed68bb5c8e164b911545c0e964aa6893d1ecb Binary files /dev/null and b/y/djangoGEE/geoApp/migrations/__pycache__/__init__.cpython-39.pyc differ diff --git a/y/djangoGEE/geoApp/models.py b/y/djangoGEE/geoApp/models.py new file mode 100644 index 0000000000000000000000000000000000000000..71a836239075aa6e6e4ecb700e9c42c95c022d91 --- /dev/null +++ b/y/djangoGEE/geoApp/models.py @@ -0,0 +1,3 @@ +from django.db import models + +# Create your models here. diff --git a/y/djangoGEE/geoApp/templates/geoApp/bgdesert.jpg b/y/djangoGEE/geoApp/templates/geoApp/bgdesert.jpg new file mode 100644 index 0000000000000000000000000000000000000000..da810b4776738e3c0770315a57049cdc973ba347 Binary files /dev/null and b/y/djangoGEE/geoApp/templates/geoApp/bgdesert.jpg differ diff --git a/y/djangoGEE/geoApp/templates/geoApp/home.html b/y/djangoGEE/geoApp/templates/geoApp/home.html new file mode 100644 index 0000000000000000000000000000000000000000..0e30724409e2eeebe62bacd746005916b94adbb9 --- /dev/null +++ b/y/djangoGEE/geoApp/templates/geoApp/home.html @@ -0,0 +1,77 @@ +{% load static %} + + + + + + + + + + + + GeoGida + + + + + + + + + + + + + + + + +
+
+ +
+

Geospatial Application

+

You´ll be seeing shapefiles stored in the Database

+ + {{ my_map|safe }} + +
    +
  • Developed by Lawrence Kimutai
  • +
  • 2023
  • +
  • Contact: +254759629059
  • +
+
+
+
+ + + + + + + + diff --git a/y/djangoGEE/geoApp/templates/geoApp/home1.html b/y/djangoGEE/geoApp/templates/geoApp/home1.html new file mode 100644 index 0000000000000000000000000000000000000000..5601382e205f3fd116b49c373861f33317bfbb0f --- /dev/null +++ b/y/djangoGEE/geoApp/templates/geoApp/home1.html @@ -0,0 +1,27 @@ + + + + + + + Django and GEE + + {{ map.header.render|safe }} + + + + + +
+
+ {{map.html.render|safe}} +
+
+ {{ my_map|safe }} + + + \ No newline at end of file diff --git a/y/djangoGEE/geoApp/tests.py b/y/djangoGEE/geoApp/tests.py new file mode 100644 index 0000000000000000000000000000000000000000..7ce503c2dd97ba78597f6ff6e4393132753573f6 --- /dev/null +++ b/y/djangoGEE/geoApp/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/y/djangoGEE/geoApp/urls.py b/y/djangoGEE/geoApp/urls.py new file mode 100644 index 0000000000000000000000000000000000000000..9d22d49158430254bb9151aa7f747ae22e1e3a01 --- /dev/null +++ b/y/djangoGEE/geoApp/urls.py @@ -0,0 +1,7 @@ +from django.urls import path +from django.contrib.auth import views as auth_views +from . import views + +urlpatterns = [ + path('',views.home, name='home'), +] diff --git a/y/djangoGEE/geoApp/views3.py b/y/djangoGEE/geoApp/views3.py new file mode 100644 index 0000000000000000000000000000000000000000..a0d41b9b3e6c05545587bebfeb3a157fbcacc051 --- /dev/null +++ b/y/djangoGEE/geoApp/views3.py @@ -0,0 +1,71 @@ +from django.shortcuts import render +import os +import folium +import geopandas as gpd +from folium import GeoJson +import ee +import geemap + +def home(request): + shp_dir = os.path.join(os.getcwd(), 'media', 'shp') + + m = folium.Map(location=[25, 67], zoom_start=5) + + # Styling for different layers + style_pakistan_districts_dd = {'fillColor': '#228B22', 'color': '#228B22'} + # Define other styles as needed... + + # Load GeoJSON data from shapefiles + layers = [ + ('Pakistan_Districts', 'District_Boundary.shp', style_pakistan_districts_dd), + # Add other layers here... + ] + + for name, shapefile, style in layers: + data = gpd.read_file(os.path.join(shp_dir, shapefile)) + data_geojson = data.to_crs("EPSG:4326").to_json() + + # Create a style function that takes feature and style as arguments + def style_function(feature, style=style): + return { + 'fillColor': style['fillColor'], + 'color': style['color'] + } + + GeoJson(data_geojson, name=name, style_function=style_function).add_to(m) + + # Earth Engine and geemap code (uncommented if authentication is resolved) + # Authenticate the API using your credentials (only need to run this once) + ee.Authenticate() + + # Initialize the Earth Engine API + ee.Initialize() + + # Define the region of interest (ROI) as a geometry + roi = ee.Geometry.Rectangle([67.56084171593015, 26.467647606743032, + 67.71053043663328, 28.467647606743032]) + + # Load Sentinel-2 dataset + s2_dataset = ee.ImageCollection('COPERNICUS/S2').filterBounds(roi) \ + .filterDate('2019-01-01', '2020-01-01') # Define the date range + + # Get the first image in the collection + image = s2_dataset.first() + + # Select the bands you need + bands = ['B2', 'B3', 'B4'] # Customize according to your needs + + # Select the region and scale of the image + image = image.select(bands).clip(roi) # Adjust scale as needed + + # Use geemap to display the image (optional) + Map = geemap.Map() + Map.centerObject(roi, zoom=10) + Map.addLayer(image, {'bands': bands, 'min': 0, 'max': 3000}, 'Sentinel-2 Image') + # Map + + folium.LayerControl().add_to(m) + + m = m._repr_html_() + context = {'my_map': m} + return render(request, 'geoApp/home.html', context) diff --git a/y/djangoGEE/geoApp/views4.py b/y/djangoGEE/geoApp/views4.py new file mode 100644 index 0000000000000000000000000000000000000000..8414d12391c0c79834267460b95c8b984fa68430 --- /dev/null +++ b/y/djangoGEE/geoApp/views4.py @@ -0,0 +1,52 @@ +from django.shortcuts import render, redirect +import os +import folium +import geopandas as gpd +from folium import GeoJson + +# Create your views here. +def home(request): + shp_dir = os.path.join(os.getcwd(), 'media', 'shp') + + m = folium.Map(location=[0.0236, 37.9062], zoom_start=6) + + #styling + style_Kenya_county_dd = {'fillColor': '#228B22', 'color': '#228B22'} + style_kenya_wetlands = {'color': 'blue'} + style_kenya_all_towns = {'color': 'red'} + style_kenya_highland_roads = {'color': 'yellow'} + style_kenya_forestranges = {'color': 'green'} + + Kenya_county_dd = gpd.read_file(os.path.join(shp_dir, 'Kenya_county_dd.shp')) + Kenya_county_dd_geojson = Kenya_county_dd.to_crs("EPSG:4326").to_json() + + kenya_wetlands = gpd.read_file(os.path.join(shp_dir, 'kenya_wetlands.shp')) + kenya_wetlands_geojson = kenya_wetlands.to_crs("EPSG:4326").to_json() + + kenya_all_towns = gpd.read_file(os.path.join(shp_dir, 'kenya_all_towns.shp')) + kenya_all_towns_geojson = kenya_all_towns.to_crs("EPSG:4326").to_json() + + kenya_highland_roads = gpd.read_file(os.path.join(shp_dir, 'kenya_highland_roads.shp')) + kenya_highland_roads_geojson = kenya_highland_roads.to_crs("EPSG:4326").to_json() + + kenya_forestranges = gpd.read_file(os.path.join(shp_dir, 'kenya_forestranges.shp')) + kenya_forestranges_geojson = kenya_forestranges.to_crs("EPSG:4326").to_json() + + GeoJson(Kenya_county_dd_geojson, name='Kenya_counties', style_function=lambda x: style_Kenya_county_dd).add_to(m) + GeoJson(kenya_wetlands_geojson, name='kenya_wetlands', style_function=lambda x: style_kenya_wetlands).add_to(m) + + # Create a feature group for kenya_all_towns layer + kenya_all_towns_fg = folium.FeatureGroup(name='kenya_all_towns') + # Iterate over the points and add colored circles to the feature group + for _, row in kenya_all_towns.iterrows(): + folium.CircleMarker(location=[row['geometry'].y, row['geometry'].x], radius=2, fill=True, color='red', fill_opacity=1).add_to(kenya_all_towns_fg) + kenya_all_towns_fg.add_to(m) + + GeoJson(kenya_highland_roads_geojson, name='kenya_highland_roads', style_function=lambda x: style_kenya_highland_roads).add_to(m) + GeoJson(kenya_forestranges_geojson, name='kenya_forestranges', style_function=lambda x: style_kenya_forestranges).add_to(m) + + folium.LayerControl().add_to(m) + + m = m._repr_html_() + context = {'my_map': m} + return render(request, 'geoApp/home.html', context) diff --git a/y/djangoGEE/geoApp/views_org.py b/y/djangoGEE/geoApp/views_org.py new file mode 100644 index 0000000000000000000000000000000000000000..8414d12391c0c79834267460b95c8b984fa68430 --- /dev/null +++ b/y/djangoGEE/geoApp/views_org.py @@ -0,0 +1,52 @@ +from django.shortcuts import render, redirect +import os +import folium +import geopandas as gpd +from folium import GeoJson + +# Create your views here. +def home(request): + shp_dir = os.path.join(os.getcwd(), 'media', 'shp') + + m = folium.Map(location=[0.0236, 37.9062], zoom_start=6) + + #styling + style_Kenya_county_dd = {'fillColor': '#228B22', 'color': '#228B22'} + style_kenya_wetlands = {'color': 'blue'} + style_kenya_all_towns = {'color': 'red'} + style_kenya_highland_roads = {'color': 'yellow'} + style_kenya_forestranges = {'color': 'green'} + + Kenya_county_dd = gpd.read_file(os.path.join(shp_dir, 'Kenya_county_dd.shp')) + Kenya_county_dd_geojson = Kenya_county_dd.to_crs("EPSG:4326").to_json() + + kenya_wetlands = gpd.read_file(os.path.join(shp_dir, 'kenya_wetlands.shp')) + kenya_wetlands_geojson = kenya_wetlands.to_crs("EPSG:4326").to_json() + + kenya_all_towns = gpd.read_file(os.path.join(shp_dir, 'kenya_all_towns.shp')) + kenya_all_towns_geojson = kenya_all_towns.to_crs("EPSG:4326").to_json() + + kenya_highland_roads = gpd.read_file(os.path.join(shp_dir, 'kenya_highland_roads.shp')) + kenya_highland_roads_geojson = kenya_highland_roads.to_crs("EPSG:4326").to_json() + + kenya_forestranges = gpd.read_file(os.path.join(shp_dir, 'kenya_forestranges.shp')) + kenya_forestranges_geojson = kenya_forestranges.to_crs("EPSG:4326").to_json() + + GeoJson(Kenya_county_dd_geojson, name='Kenya_counties', style_function=lambda x: style_Kenya_county_dd).add_to(m) + GeoJson(kenya_wetlands_geojson, name='kenya_wetlands', style_function=lambda x: style_kenya_wetlands).add_to(m) + + # Create a feature group for kenya_all_towns layer + kenya_all_towns_fg = folium.FeatureGroup(name='kenya_all_towns') + # Iterate over the points and add colored circles to the feature group + for _, row in kenya_all_towns.iterrows(): + folium.CircleMarker(location=[row['geometry'].y, row['geometry'].x], radius=2, fill=True, color='red', fill_opacity=1).add_to(kenya_all_towns_fg) + kenya_all_towns_fg.add_to(m) + + GeoJson(kenya_highland_roads_geojson, name='kenya_highland_roads', style_function=lambda x: style_kenya_highland_roads).add_to(m) + GeoJson(kenya_forestranges_geojson, name='kenya_forestranges', style_function=lambda x: style_kenya_forestranges).add_to(m) + + folium.LayerControl().add_to(m) + + m = m._repr_html_() + context = {'my_map': m} + return render(request, 'geoApp/home.html', context) diff --git a/y/djangoGEE/geoApp1/__init__.py b/y/djangoGEE/geoApp1/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/y/djangoGEE/geoApp1/__pycache__/__init__.cpython-310.pyc b/y/djangoGEE/geoApp1/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e19430b71d2aa57278bf978cec9ad41f1d00b8a2 Binary files /dev/null and b/y/djangoGEE/geoApp1/__pycache__/__init__.cpython-310.pyc differ diff --git a/y/djangoGEE/geoApp1/__pycache__/__init__.cpython-39.pyc b/y/djangoGEE/geoApp1/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2411a82eb85b9b83099fb708a0fd097aa1dffb8f Binary files /dev/null and b/y/djangoGEE/geoApp1/__pycache__/__init__.cpython-39.pyc differ diff --git a/y/djangoGEE/geoApp1/__pycache__/admin.cpython-310.pyc b/y/djangoGEE/geoApp1/__pycache__/admin.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..387d03403aec2097d1d3c11e891abdab530a51f8 Binary files /dev/null and b/y/djangoGEE/geoApp1/__pycache__/admin.cpython-310.pyc differ diff --git a/y/djangoGEE/geoApp1/__pycache__/admin.cpython-39.pyc b/y/djangoGEE/geoApp1/__pycache__/admin.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3f6491a036813f20f940330a7c382b96270e61e0 Binary files /dev/null and b/y/djangoGEE/geoApp1/__pycache__/admin.cpython-39.pyc differ diff --git a/y/djangoGEE/geoApp1/__pycache__/apps.cpython-310.pyc b/y/djangoGEE/geoApp1/__pycache__/apps.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..40bba6c3f3eb7f6c8c4bd7e0f33c64d66fb1dcba Binary files /dev/null and b/y/djangoGEE/geoApp1/__pycache__/apps.cpython-310.pyc differ diff --git a/y/djangoGEE/geoApp1/__pycache__/apps.cpython-39.pyc b/y/djangoGEE/geoApp1/__pycache__/apps.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f82bbbdb810ad79cfdb629f47886bb753fdc45f2 Binary files /dev/null and b/y/djangoGEE/geoApp1/__pycache__/apps.cpython-39.pyc differ diff --git a/y/djangoGEE/geoApp1/__pycache__/models.cpython-310.pyc b/y/djangoGEE/geoApp1/__pycache__/models.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7e58d565081e1b47d1a630623eacbaf0175e0beb Binary files /dev/null and b/y/djangoGEE/geoApp1/__pycache__/models.cpython-310.pyc differ diff --git a/y/djangoGEE/geoApp1/__pycache__/models.cpython-39.pyc b/y/djangoGEE/geoApp1/__pycache__/models.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..78c291d03c35e613e3cc13e4b0c83d0f264b40a7 Binary files /dev/null and b/y/djangoGEE/geoApp1/__pycache__/models.cpython-39.pyc differ diff --git a/y/djangoGEE/geoApp1/__pycache__/urls.cpython-310.pyc b/y/djangoGEE/geoApp1/__pycache__/urls.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b4f2931e3bd8485a7c9c8dc36a6814a66f0b1155 Binary files /dev/null and b/y/djangoGEE/geoApp1/__pycache__/urls.cpython-310.pyc differ diff --git a/y/djangoGEE/geoApp1/__pycache__/urls.cpython-39.pyc b/y/djangoGEE/geoApp1/__pycache__/urls.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0fd37b7bfc91edb605cf77651dddf4955983aaa1 Binary files /dev/null and b/y/djangoGEE/geoApp1/__pycache__/urls.cpython-39.pyc differ diff --git a/y/djangoGEE/geoApp1/__pycache__/views.cpython-310.pyc b/y/djangoGEE/geoApp1/__pycache__/views.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3c54541350df6d5c00c09984d1eb606aedc163f6 Binary files /dev/null and b/y/djangoGEE/geoApp1/__pycache__/views.cpython-310.pyc differ diff --git a/y/djangoGEE/geoApp1/__pycache__/views.cpython-39.pyc b/y/djangoGEE/geoApp1/__pycache__/views.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d8f90213a6929160f7ab097b817113f498f9c15c Binary files /dev/null and b/y/djangoGEE/geoApp1/__pycache__/views.cpython-39.pyc differ diff --git a/y/djangoGEE/geoApp1/admin.py b/y/djangoGEE/geoApp1/admin.py new file mode 100644 index 0000000000000000000000000000000000000000..8c38f3f3dad51e4585f3984282c2a4bec5349c1e --- /dev/null +++ b/y/djangoGEE/geoApp1/admin.py @@ -0,0 +1,3 @@ +from django.contrib import admin + +# Register your models here. diff --git a/y/djangoGEE/geoApp1/apps.py b/y/djangoGEE/geoApp1/apps.py new file mode 100644 index 0000000000000000000000000000000000000000..473cf4d69b63864b4264a57ae6094a0cf5590987 --- /dev/null +++ b/y/djangoGEE/geoApp1/apps.py @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class GeoappConfig(AppConfig): + default_auto_field = "django.db.models.BigAutoField" + name = "geoApp" diff --git a/y/djangoGEE/geoApp1/geoApp/__init__.py b/y/djangoGEE/geoApp1/geoApp/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/y/djangoGEE/geoApp1/geoApp/admin.py b/y/djangoGEE/geoApp1/geoApp/admin.py new file mode 100644 index 0000000000000000000000000000000000000000..ea5d68b7c457cb7f92da9c00a5c4df77ace36cef --- /dev/null +++ b/y/djangoGEE/geoApp1/geoApp/admin.py @@ -0,0 +1,3 @@ +from django.contrib import admin + +# Register your models here. diff --git a/y/djangoGEE/geoApp1/geoApp/apps.py b/y/djangoGEE/geoApp1/geoApp/apps.py new file mode 100644 index 0000000000000000000000000000000000000000..7d7a1b993e238cf92776b7167ac62ccb97d6126c --- /dev/null +++ b/y/djangoGEE/geoApp1/geoApp/apps.py @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class GeoappConfig(AppConfig): + default_auto_field = "django.db.models.BigAutoField" + name = "geoApp" diff --git a/y/djangoGEE/geoApp1/geoApp/migrations/__init__.py b/y/djangoGEE/geoApp1/geoApp/migrations/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/y/djangoGEE/geoApp1/geoApp/models.py b/y/djangoGEE/geoApp1/geoApp/models.py new file mode 100644 index 0000000000000000000000000000000000000000..fd18c6eac0dc9ffbdf025c31d136901350a0d9f2 --- /dev/null +++ b/y/djangoGEE/geoApp1/geoApp/models.py @@ -0,0 +1,3 @@ +from django.db import models + +# Create your models here. diff --git a/y/djangoGEE/geoApp1/geoApp/tests.py b/y/djangoGEE/geoApp1/geoApp/tests.py new file mode 100644 index 0000000000000000000000000000000000000000..de8bdc00eb2fed53494a534d48e400faa830dbd9 --- /dev/null +++ b/y/djangoGEE/geoApp1/geoApp/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/y/djangoGEE/geoApp1/geoApp/views.py b/y/djangoGEE/geoApp1/geoApp/views.py new file mode 100644 index 0000000000000000000000000000000000000000..c60c790437030748012ed3b77ed8708956de9957 --- /dev/null +++ b/y/djangoGEE/geoApp1/geoApp/views.py @@ -0,0 +1,3 @@ +from django.shortcuts import render + +# Create your views here. diff --git a/y/djangoGEE/geoApp1/manage.py b/y/djangoGEE/geoApp1/manage.py new file mode 100644 index 0000000000000000000000000000000000000000..f1765afff2693b00ef8cd00241f2ff8e6c20e6a2 --- /dev/null +++ b/y/djangoGEE/geoApp1/manage.py @@ -0,0 +1,22 @@ +#!/usr/bin/env python +"""Django's command-line utility for administrative tasks.""" +import os +import sys + + +def main(): + """Run administrative tasks.""" + os.environ.setdefault("DJANGO_SETTINGS_MODULE", "geo.settings") + try: + from django.core.management import execute_from_command_line + except ImportError as exc: + raise ImportError( + "Couldn't import Django. Are you sure it's installed and " + "available on your PYTHONPATH environment variable? Did you " + "forget to activate a virtual environment?" + ) from exc + execute_from_command_line(sys.argv) + + +if __name__ == "__main__": + main() diff --git a/y/djangoGEE/geoApp1/migrations/__init__.py b/y/djangoGEE/geoApp1/migrations/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/y/djangoGEE/geoApp1/migrations/__pycache__/__init__.cpython-310.pyc b/y/djangoGEE/geoApp1/migrations/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c8f75feb399b019bde0babf16131555947bced2a Binary files /dev/null and b/y/djangoGEE/geoApp1/migrations/__pycache__/__init__.cpython-310.pyc differ diff --git a/y/djangoGEE/geoApp1/migrations/__pycache__/__init__.cpython-39.pyc b/y/djangoGEE/geoApp1/migrations/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7f3ed68bb5c8e164b911545c0e964aa6893d1ecb Binary files /dev/null and b/y/djangoGEE/geoApp1/migrations/__pycache__/__init__.cpython-39.pyc differ diff --git a/y/djangoGEE/geoApp1/models.py b/y/djangoGEE/geoApp1/models.py new file mode 100644 index 0000000000000000000000000000000000000000..71a836239075aa6e6e4ecb700e9c42c95c022d91 --- /dev/null +++ b/y/djangoGEE/geoApp1/models.py @@ -0,0 +1,3 @@ +from django.db import models + +# Create your models here. diff --git a/y/djangoGEE/geoApp1/templates/geoApp/bgdesert.jpg b/y/djangoGEE/geoApp1/templates/geoApp/bgdesert.jpg new file mode 100644 index 0000000000000000000000000000000000000000..da810b4776738e3c0770315a57049cdc973ba347 Binary files /dev/null and b/y/djangoGEE/geoApp1/templates/geoApp/bgdesert.jpg differ diff --git a/y/djangoGEE/geoApp1/templates/geoApp/home.html b/y/djangoGEE/geoApp1/templates/geoApp/home.html new file mode 100644 index 0000000000000000000000000000000000000000..0e30724409e2eeebe62bacd746005916b94adbb9 --- /dev/null +++ b/y/djangoGEE/geoApp1/templates/geoApp/home.html @@ -0,0 +1,77 @@ +{% load static %} + + + + + + + + + + + + GeoGida + + + + + + + + + + + + + + + + +
+
+ +
+

Geospatial Application

+

You´ll be seeing shapefiles stored in the Database

+ + {{ my_map|safe }} + +
    +
  • Developed by Lawrence Kimutai
  • +
  • 2023
  • +
  • Contact: +254759629059
  • +
+
+
+
+ + + + + + + + diff --git a/y/djangoGEE/geoApp1/templates/geoApp/home1.html b/y/djangoGEE/geoApp1/templates/geoApp/home1.html new file mode 100644 index 0000000000000000000000000000000000000000..5601382e205f3fd116b49c373861f33317bfbb0f --- /dev/null +++ b/y/djangoGEE/geoApp1/templates/geoApp/home1.html @@ -0,0 +1,27 @@ + + + + + + + Django and GEE + + {{ map.header.render|safe }} + + + + + +
+
+ {{map.html.render|safe}} +
+
+ {{ my_map|safe }} + + + \ No newline at end of file diff --git a/y/djangoGEE/geoApp1/tests.py b/y/djangoGEE/geoApp1/tests.py new file mode 100644 index 0000000000000000000000000000000000000000..7ce503c2dd97ba78597f6ff6e4393132753573f6 --- /dev/null +++ b/y/djangoGEE/geoApp1/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/y/djangoGEE/geoApp1/urls.py b/y/djangoGEE/geoApp1/urls.py new file mode 100644 index 0000000000000000000000000000000000000000..9d22d49158430254bb9151aa7f747ae22e1e3a01 --- /dev/null +++ b/y/djangoGEE/geoApp1/urls.py @@ -0,0 +1,7 @@ +from django.urls import path +from django.contrib.auth import views as auth_views +from . import views + +urlpatterns = [ + path('',views.home, name='home'), +] diff --git a/y/djangoGEE/geoApp1/views3.py b/y/djangoGEE/geoApp1/views3.py new file mode 100644 index 0000000000000000000000000000000000000000..a0d41b9b3e6c05545587bebfeb3a157fbcacc051 --- /dev/null +++ b/y/djangoGEE/geoApp1/views3.py @@ -0,0 +1,71 @@ +from django.shortcuts import render +import os +import folium +import geopandas as gpd +from folium import GeoJson +import ee +import geemap + +def home(request): + shp_dir = os.path.join(os.getcwd(), 'media', 'shp') + + m = folium.Map(location=[25, 67], zoom_start=5) + + # Styling for different layers + style_pakistan_districts_dd = {'fillColor': '#228B22', 'color': '#228B22'} + # Define other styles as needed... + + # Load GeoJSON data from shapefiles + layers = [ + ('Pakistan_Districts', 'District_Boundary.shp', style_pakistan_districts_dd), + # Add other layers here... + ] + + for name, shapefile, style in layers: + data = gpd.read_file(os.path.join(shp_dir, shapefile)) + data_geojson = data.to_crs("EPSG:4326").to_json() + + # Create a style function that takes feature and style as arguments + def style_function(feature, style=style): + return { + 'fillColor': style['fillColor'], + 'color': style['color'] + } + + GeoJson(data_geojson, name=name, style_function=style_function).add_to(m) + + # Earth Engine and geemap code (uncommented if authentication is resolved) + # Authenticate the API using your credentials (only need to run this once) + ee.Authenticate() + + # Initialize the Earth Engine API + ee.Initialize() + + # Define the region of interest (ROI) as a geometry + roi = ee.Geometry.Rectangle([67.56084171593015, 26.467647606743032, + 67.71053043663328, 28.467647606743032]) + + # Load Sentinel-2 dataset + s2_dataset = ee.ImageCollection('COPERNICUS/S2').filterBounds(roi) \ + .filterDate('2019-01-01', '2020-01-01') # Define the date range + + # Get the first image in the collection + image = s2_dataset.first() + + # Select the bands you need + bands = ['B2', 'B3', 'B4'] # Customize according to your needs + + # Select the region and scale of the image + image = image.select(bands).clip(roi) # Adjust scale as needed + + # Use geemap to display the image (optional) + Map = geemap.Map() + Map.centerObject(roi, zoom=10) + Map.addLayer(image, {'bands': bands, 'min': 0, 'max': 3000}, 'Sentinel-2 Image') + # Map + + folium.LayerControl().add_to(m) + + m = m._repr_html_() + context = {'my_map': m} + return render(request, 'geoApp/home.html', context) diff --git a/y/djangoGEE/geoApp1/views4.py b/y/djangoGEE/geoApp1/views4.py new file mode 100644 index 0000000000000000000000000000000000000000..8414d12391c0c79834267460b95c8b984fa68430 --- /dev/null +++ b/y/djangoGEE/geoApp1/views4.py @@ -0,0 +1,52 @@ +from django.shortcuts import render, redirect +import os +import folium +import geopandas as gpd +from folium import GeoJson + +# Create your views here. +def home(request): + shp_dir = os.path.join(os.getcwd(), 'media', 'shp') + + m = folium.Map(location=[0.0236, 37.9062], zoom_start=6) + + #styling + style_Kenya_county_dd = {'fillColor': '#228B22', 'color': '#228B22'} + style_kenya_wetlands = {'color': 'blue'} + style_kenya_all_towns = {'color': 'red'} + style_kenya_highland_roads = {'color': 'yellow'} + style_kenya_forestranges = {'color': 'green'} + + Kenya_county_dd = gpd.read_file(os.path.join(shp_dir, 'Kenya_county_dd.shp')) + Kenya_county_dd_geojson = Kenya_county_dd.to_crs("EPSG:4326").to_json() + + kenya_wetlands = gpd.read_file(os.path.join(shp_dir, 'kenya_wetlands.shp')) + kenya_wetlands_geojson = kenya_wetlands.to_crs("EPSG:4326").to_json() + + kenya_all_towns = gpd.read_file(os.path.join(shp_dir, 'kenya_all_towns.shp')) + kenya_all_towns_geojson = kenya_all_towns.to_crs("EPSG:4326").to_json() + + kenya_highland_roads = gpd.read_file(os.path.join(shp_dir, 'kenya_highland_roads.shp')) + kenya_highland_roads_geojson = kenya_highland_roads.to_crs("EPSG:4326").to_json() + + kenya_forestranges = gpd.read_file(os.path.join(shp_dir, 'kenya_forestranges.shp')) + kenya_forestranges_geojson = kenya_forestranges.to_crs("EPSG:4326").to_json() + + GeoJson(Kenya_county_dd_geojson, name='Kenya_counties', style_function=lambda x: style_Kenya_county_dd).add_to(m) + GeoJson(kenya_wetlands_geojson, name='kenya_wetlands', style_function=lambda x: style_kenya_wetlands).add_to(m) + + # Create a feature group for kenya_all_towns layer + kenya_all_towns_fg = folium.FeatureGroup(name='kenya_all_towns') + # Iterate over the points and add colored circles to the feature group + for _, row in kenya_all_towns.iterrows(): + folium.CircleMarker(location=[row['geometry'].y, row['geometry'].x], radius=2, fill=True, color='red', fill_opacity=1).add_to(kenya_all_towns_fg) + kenya_all_towns_fg.add_to(m) + + GeoJson(kenya_highland_roads_geojson, name='kenya_highland_roads', style_function=lambda x: style_kenya_highland_roads).add_to(m) + GeoJson(kenya_forestranges_geojson, name='kenya_forestranges', style_function=lambda x: style_kenya_forestranges).add_to(m) + + folium.LayerControl().add_to(m) + + m = m._repr_html_() + context = {'my_map': m} + return render(request, 'geoApp/home.html', context) diff --git a/y/djangoGEE/geoApp1/views_org.py b/y/djangoGEE/geoApp1/views_org.py new file mode 100644 index 0000000000000000000000000000000000000000..8414d12391c0c79834267460b95c8b984fa68430 --- /dev/null +++ b/y/djangoGEE/geoApp1/views_org.py @@ -0,0 +1,52 @@ +from django.shortcuts import render, redirect +import os +import folium +import geopandas as gpd +from folium import GeoJson + +# Create your views here. +def home(request): + shp_dir = os.path.join(os.getcwd(), 'media', 'shp') + + m = folium.Map(location=[0.0236, 37.9062], zoom_start=6) + + #styling + style_Kenya_county_dd = {'fillColor': '#228B22', 'color': '#228B22'} + style_kenya_wetlands = {'color': 'blue'} + style_kenya_all_towns = {'color': 'red'} + style_kenya_highland_roads = {'color': 'yellow'} + style_kenya_forestranges = {'color': 'green'} + + Kenya_county_dd = gpd.read_file(os.path.join(shp_dir, 'Kenya_county_dd.shp')) + Kenya_county_dd_geojson = Kenya_county_dd.to_crs("EPSG:4326").to_json() + + kenya_wetlands = gpd.read_file(os.path.join(shp_dir, 'kenya_wetlands.shp')) + kenya_wetlands_geojson = kenya_wetlands.to_crs("EPSG:4326").to_json() + + kenya_all_towns = gpd.read_file(os.path.join(shp_dir, 'kenya_all_towns.shp')) + kenya_all_towns_geojson = kenya_all_towns.to_crs("EPSG:4326").to_json() + + kenya_highland_roads = gpd.read_file(os.path.join(shp_dir, 'kenya_highland_roads.shp')) + kenya_highland_roads_geojson = kenya_highland_roads.to_crs("EPSG:4326").to_json() + + kenya_forestranges = gpd.read_file(os.path.join(shp_dir, 'kenya_forestranges.shp')) + kenya_forestranges_geojson = kenya_forestranges.to_crs("EPSG:4326").to_json() + + GeoJson(Kenya_county_dd_geojson, name='Kenya_counties', style_function=lambda x: style_Kenya_county_dd).add_to(m) + GeoJson(kenya_wetlands_geojson, name='kenya_wetlands', style_function=lambda x: style_kenya_wetlands).add_to(m) + + # Create a feature group for kenya_all_towns layer + kenya_all_towns_fg = folium.FeatureGroup(name='kenya_all_towns') + # Iterate over the points and add colored circles to the feature group + for _, row in kenya_all_towns.iterrows(): + folium.CircleMarker(location=[row['geometry'].y, row['geometry'].x], radius=2, fill=True, color='red', fill_opacity=1).add_to(kenya_all_towns_fg) + kenya_all_towns_fg.add_to(m) + + GeoJson(kenya_highland_roads_geojson, name='kenya_highland_roads', style_function=lambda x: style_kenya_highland_roads).add_to(m) + GeoJson(kenya_forestranges_geojson, name='kenya_forestranges', style_function=lambda x: style_kenya_forestranges).add_to(m) + + folium.LayerControl().add_to(m) + + m = m._repr_html_() + context = {'my_map': m} + return render(request, 'geoApp/home.html', context) diff --git a/y/djangoGEE/settings.py b/y/djangoGEE/settings.py new file mode 100644 index 0000000000000000000000000000000000000000..7ac939d204fd52cd28099a013ed06ddaf4cb7dd9 --- /dev/null +++ b/y/djangoGEE/settings.py @@ -0,0 +1,139 @@ +""" +Django settings for djangoGEE project. + +Generated by 'django-admin startproject' using Django 2.0.7. + +For more information on this file, see +https://docs.djangoproject.com/en/2.0/topics/settings/ + +For the full list of settings and their values, see +https://docs.djangoproject.com/en/2.0/ref/settings/ +""" + +import os + +# Build paths inside the project like this: os.path.join(BASE_DIR, ...) +BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) +TEMPLATE = os.path.join(BASE_DIR,'template') + + + +# Quick-start development settings - unsuitable for production +# See https://docs.djangoproject.com/en/2.0/howto/deployment/checklist/ + +# SECURITY WARNING: keep the secret key used in production secret! +SECRET_KEY = '&b_rrh(@gw(u@gec%a@+p6*gwk3m)rr(mt=uj=i)&=e#e^5-%2' + +# SECURITY WARNING: don't run with debug turned on in production! +DEBUG = True + +ALLOWED_HOSTS = [] + + +# Application definition + +INSTALLED_APPS = [ + 'django.contrib.admin', + 'django.contrib.auth', + 'django.contrib.contenttypes', + 'django.contrib.sessions', + 'django.contrib.messages', + 'django.contrib.staticfiles', + 'gee', + 'widget_tweaks', +] + +MIDDLEWARE = [ + 'django.middleware.security.SecurityMiddleware', + 'django.contrib.sessions.middleware.SessionMiddleware', + 'django.middleware.common.CommonMiddleware', + 'django.middleware.csrf.CsrfViewMiddleware', + 'django.contrib.auth.middleware.AuthenticationMiddleware', + 'django.contrib.messages.middleware.MessageMiddleware', + 'django.middleware.clickjacking.XFrameOptionsMiddleware', +] + +ROOT_URLCONF = 'djangoGEE.urls' + +TEMPLATES = [ + { + 'BACKEND': 'django.template.backends.django.DjangoTemplates', + 'DIRS': [TEMPLATE,], + 'APP_DIRS': True, + 'OPTIONS': { + 'context_processors': [ + 'django.template.context_processors.debug', + 'django.template.context_processors.request', + 'django.contrib.auth.context_processors.auth', + 'django.contrib.messages.context_processors.messages', + ], + }, + }, +] + +WSGI_APPLICATION = 'djangoGEE.wsgi.application' + + +# Database +# https://docs.djangoproject.com/en/2.0/ref/settings/#databases + +DATABASES = { + 'default': { + 'ENGINE': 'django.db.backends.sqlite3', + 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), + } +} + + +# Password validation +# https://docs.djangoproject.com/en/2.0/ref/settings/#auth-password-validators + +AUTH_PASSWORD_VALIDATORS = [ + { + 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', + }, + { + 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator', + }, + { + 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator', + }, + { + 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator', + }, +] + + +# Internationalization +# https://docs.djangoproject.com/en/2.0/topics/i18n/ + +LANGUAGE_CODE = 'en-us' + +TIME_ZONE = 'UTC' + +USE_I18N = True + +USE_L10N = True + +USE_TZ = True + + +# Static files (CSS, JavaScript, Images) +# https://docs.djangoproject.com/en/2.0/howto/static-files/ + + +#static +STATIC_URL = '/static/' + +STATICFILES_DIRS = [ + os.path.join(BASE_DIR, 'static'), +] + +STATIC_ROOT = os.path.join(BASE_DIR, 'static_root') + + +LOGOUT_REDIRECT_URL = 'index' + +LOGIN_REDIRECT_URL = 'index' + +LOGIN_URL= 'login' \ No newline at end of file diff --git a/y/djangoGEE/streamlit.py b/y/djangoGEE/streamlit.py new file mode 100644 index 0000000000000000000000000000000000000000..590a0dc164fcd30eee9be393a6f6548e453566db --- /dev/null +++ b/y/djangoGEE/streamlit.py @@ -0,0 +1,75 @@ +import streamlit as st +import folium +from folium import GeoJson +import geopandas as gpd +import json +import geemap +import ee +import pandas as pd + +# Initialize Earth Engine +ee.Initialize() + +def main(): + st.title("Geospatial Data Viewer") + + # Sidebar for user inputs + st.sidebar.header("Inputs") + + selected_dataset = st.sidebar.selectbox('Select Dataset', ['Modis']) + selected_shapefile = st.sidebar.file_uploader('Upload Shapefile', type=['shp']) + + selected_date_range_From = st.sidebar.date_input('Start Date', value=pd.to_datetime('2015-07-01')) + selected_date_range_To = st.sidebar.date_input('End Date', value=pd.to_datetime('2019-11-30')) + + if selected_shapefile is not None: + shapefile_path = f'./temp_shapefile.shp' + with open(shapefile_path, 'wb') as f: + f.write(selected_shapefile.read()) + + # Read the uploaded shapefile + roi_gdf = gpd.read_file(shapefile_path) + roi_geojson = roi_gdf.to_crs("EPSG:4326").to_json() + + # Create a folium map + figure = folium.Figure() + m = folium.Map(location=[25.5973518, 65.54495724], zoom_start=7) + m.add_to(figure) + + # Add GeoJson layer + roi_geojson_layer = GeoJson(roi_geojson, name='ROI GeoJSON') + roi_geojson_layer.add_to(m) + + # Convert the GeoJSON content to Earth Engine object + ee_object = geemap.geojson_to_ee(json.loads(roi_geojson)) + + if selected_dataset == "Modis": + F = selected_date_range_From.strftime('%Y-%m-%d') + T = selected_date_range_To.strftime('%Y-%m-%d') + + # Fetch MODIS data from Earth Engine + dataset = ee.ImageCollection('MODIS/006/MOD13Q1').filter(ee.Filter.date(F, T)).filterBounds(ee_object) + modisndvi = dataset.select('NDVI').clip(ee_object) + + vis_paramsNDVI = { + 'min': 0, + 'max': 9000, + 'palette': ['FE8374', 'C0E5DE', '3A837C', '034B48'] + } + map_id_dict = ee.Image(modisndvi.mean()).getMapId(vis_paramsNDVI) # Use mean image for visualization + + folium.raster_layers.TileLayer( + tiles=map_id_dict['tile_fetcher'].url_format, + attr='Google Earth Engine', + name='NDVI', + overlay=True, + control=True + ).add_to(m) + + m.add_child(folium.LayerControl()) + + # Render the map in Streamlit + st_data = st.components.v1.html(figure.render(), height=600, scrolling=True) + +if __name__ == "__main__": + main() diff --git a/y/djangoGEE/urls.py b/y/djangoGEE/urls.py new file mode 100644 index 0000000000000000000000000000000000000000..835957b099bdf87a3cdcbd1475f58d77851a7424 --- /dev/null +++ b/y/djangoGEE/urls.py @@ -0,0 +1,68 @@ +"""djangoGEE URL Configuration + +The `urlpatterns` list routes URLs to views. For more information please see: + https://docs.djangoproject.com/en/2.0/topics/http/urls/ +Examples: +Function views + 1. Add an import: from my_app import views + 2. Add a URL to urlpatterns: path('', views.home, name='home') +Class-based views + 1. Add an import: from other_app.views import Home + 2. Add a URL to urlpatterns: path('', Home.as_view(), name='home') +Including another URLconf + 1. Import the include() function: from django.urls import include, path + 2. Add a URL to urlpatterns: path('blog/', include('blog.urls')) +""" +from django.contrib import admin +from django.urls import path +from gee import views +from django.contrib.auth import views as auth_views + +urlpatterns = [ + + # path('',views.Home.as_view(), name="home"), + path('admin/', admin.site.urls), + path('',views.index, name="index"), + path('home/',views.home, name="home"), + path('map/',views.map, name="map"), + path('generate-ndvi-map/', views.generate_ndvi_map, name='generate_ndvi_map'), + path('chart/', views.generate_chart, name='generate_chart'), + path('gee/', views.GEE, name='gee'), + path('result_options/', views.result_options, name="result_options"), + path('result_options/temp_result/', views.temp_result, name = "temp_results" ), + path('api/chart-data/', views.chart, name='chart_data_api'), + + + + + + + + + + + #Auth + path('login/',auth_views.LoginView.as_view(template_name = 'login.html'), name='login'), + path('logout/',auth_views.LogoutView.as_view(), name='logout'), + path("signup/",views.signup, name ='signup'), + path('settings/change_password/', auth_views.PasswordChangeView.as_view(template_name='change_password.html'),name='password_change'), + path('settings/change_password/done',auth_views.PasswordChangeDoneView.as_view(template_name='change_password_done.html'),name='password_change_done'), + path('account/', views.UserUpdateView.as_view(), name = 'my_account'), + +] + + + + + + + + + + + + + + + + # path('export_image/', views.export_image_to_drive, name='export_image_to_drive'), \ No newline at end of file diff --git a/y/djangoGEE/wsgi.py b/y/djangoGEE/wsgi.py new file mode 100644 index 0000000000000000000000000000000000000000..26bcefee5c73297e9cbc76877ce539bb6cc7e71f --- /dev/null +++ b/y/djangoGEE/wsgi.py @@ -0,0 +1,16 @@ +""" +WSGI config for djangoGEE project. + +It exposes the WSGI callable as a module-level variable named ``application``. + +For more information on this file, see +https://docs.djangoproject.com/en/2.0/howto/deployment/wsgi/ +""" + +import os + +from django.core.wsgi import get_wsgi_application + +os.environ.setdefault("DJANGO_SETTINGS_MODULE", "djangoGEE.settings") + +application = get_wsgi_application() diff --git a/y/gee/__init__.py b/y/gee/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/y/gee/__pycache__/__init__.cpython-311.pyc b/y/gee/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7be2b1af2125a536d80f5496815cdd1869bb8707 Binary files /dev/null and b/y/gee/__pycache__/__init__.cpython-311.pyc differ diff --git a/y/gee/__pycache__/__init__.cpython-312.pyc b/y/gee/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..21c75a007a09bec209e91078a0dd2932b335c1c2 Binary files /dev/null and b/y/gee/__pycache__/__init__.cpython-312.pyc differ diff --git a/y/gee/__pycache__/__init__.cpython-39.pyc b/y/gee/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d0820e545b75a7f51b355dd06a49787c1d32065b Binary files /dev/null and b/y/gee/__pycache__/__init__.cpython-39.pyc differ diff --git a/y/gee/__pycache__/admin.cpython-311.pyc b/y/gee/__pycache__/admin.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..22de2cc2067fe99421827650a0b47029ca18b0e2 Binary files /dev/null and b/y/gee/__pycache__/admin.cpython-311.pyc differ diff --git a/y/gee/__pycache__/admin.cpython-312.pyc b/y/gee/__pycache__/admin.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8252280fbcf14c398d1458c83ed39aa55f770330 Binary files /dev/null and b/y/gee/__pycache__/admin.cpython-312.pyc differ diff --git a/y/gee/__pycache__/admin.cpython-39.pyc b/y/gee/__pycache__/admin.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f5ecaadea8c4f86848e0cd002ee76a45b0f7bbea Binary files /dev/null and b/y/gee/__pycache__/admin.cpython-39.pyc differ diff --git a/y/gee/__pycache__/apps.cpython-311.pyc b/y/gee/__pycache__/apps.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..94ace9d84f8e1ba458f1ecddaed62673522b0123 Binary files /dev/null and b/y/gee/__pycache__/apps.cpython-311.pyc differ diff --git a/y/gee/__pycache__/apps.cpython-312.pyc b/y/gee/__pycache__/apps.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5cde5e3b4f2734f828d14529e671f7e2c8ff05f9 Binary files /dev/null and b/y/gee/__pycache__/apps.cpython-312.pyc differ diff --git a/y/gee/__pycache__/apps.cpython-39.pyc b/y/gee/__pycache__/apps.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ba0bcc7edee7fcceb67bcd15a23d5d63520ecc94 Binary files /dev/null and b/y/gee/__pycache__/apps.cpython-39.pyc differ diff --git a/y/gee/__pycache__/chart_gen.cpython-39.pyc b/y/gee/__pycache__/chart_gen.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3cb52877ec27c4d480c935ad0c543ed7f2c8d363 Binary files /dev/null and b/y/gee/__pycache__/chart_gen.cpython-39.pyc differ diff --git a/y/gee/__pycache__/forms.cpython-311.pyc b/y/gee/__pycache__/forms.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..16e5e772a7bcd169b98910696edde8e879b20cab Binary files /dev/null and b/y/gee/__pycache__/forms.cpython-311.pyc differ diff --git a/y/gee/__pycache__/forms.cpython-312.pyc b/y/gee/__pycache__/forms.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6e6bd19826b16ec11c672fd8429ba8ffe3fef404 Binary files /dev/null and b/y/gee/__pycache__/forms.cpython-312.pyc differ diff --git a/y/gee/__pycache__/forms.cpython-39.pyc b/y/gee/__pycache__/forms.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9ced6b2e1395a4034c16e3783db3716c3f424636 Binary files /dev/null and b/y/gee/__pycache__/forms.cpython-39.pyc differ diff --git a/y/gee/__pycache__/gee.cpython-311.pyc b/y/gee/__pycache__/gee.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..884fe1b51cc73807592a76c97da91dd87ac44305 Binary files /dev/null and b/y/gee/__pycache__/gee.cpython-311.pyc differ diff --git a/y/gee/__pycache__/gee.cpython-312.pyc b/y/gee/__pycache__/gee.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..daea28dfff1cbb840001cee21dfdb3a4e3a72350 Binary files /dev/null and b/y/gee/__pycache__/gee.cpython-312.pyc differ diff --git a/y/gee/__pycache__/gee.cpython-39.pyc b/y/gee/__pycache__/gee.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7ecac36e9e8dc94c8faef527a44328c0078b4b2f Binary files /dev/null and b/y/gee/__pycache__/gee.cpython-39.pyc differ diff --git a/y/gee/__pycache__/models.cpython-311.pyc b/y/gee/__pycache__/models.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f8c1d6bfbd9ffaf407c7629fcd1fbea729b9f282 Binary files /dev/null and b/y/gee/__pycache__/models.cpython-311.pyc differ diff --git a/y/gee/__pycache__/models.cpython-312.pyc b/y/gee/__pycache__/models.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a6fe916bbdf22b9d64c4c04549588675ed581992 Binary files /dev/null and b/y/gee/__pycache__/models.cpython-312.pyc differ diff --git a/y/gee/__pycache__/models.cpython-39.pyc b/y/gee/__pycache__/models.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f875ff65efaa136b8a4afaaad23725df8d878238 Binary files /dev/null and b/y/gee/__pycache__/models.cpython-39.pyc differ diff --git a/y/gee/__pycache__/views.cpython-311.pyc b/y/gee/__pycache__/views.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f423f92c0b8934fe3ccfd37e5dcd7619869b2a20 Binary files /dev/null and b/y/gee/__pycache__/views.cpython-311.pyc differ diff --git a/y/gee/__pycache__/views.cpython-312.pyc b/y/gee/__pycache__/views.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8e65978588e498416d05db19abbe74999e6677ff Binary files /dev/null and b/y/gee/__pycache__/views.cpython-312.pyc differ diff --git a/y/gee/__pycache__/views.cpython-39.pyc b/y/gee/__pycache__/views.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..04a26065cb35667b31f9d9f305ec032e6220a20e Binary files /dev/null and b/y/gee/__pycache__/views.cpython-39.pyc differ diff --git a/y/gee/admin.py b/y/gee/admin.py new file mode 100644 index 0000000000000000000000000000000000000000..8c38f3f3dad51e4585f3984282c2a4bec5349c1e --- /dev/null +++ b/y/gee/admin.py @@ -0,0 +1,3 @@ +from django.contrib import admin + +# Register your models here. diff --git a/y/gee/apps.py b/y/gee/apps.py new file mode 100644 index 0000000000000000000000000000000000000000..f1f42ba5415c4a7ec9e7d4d9575418b8ee8fde2d --- /dev/null +++ b/y/gee/apps.py @@ -0,0 +1,5 @@ +from django.apps import AppConfig + + +class GeeConfig(AppConfig): + name = 'gee' diff --git a/y/gee/data_gee/gee_catalog.csv b/y/gee/data_gee/gee_catalog.csv new file mode 100644 index 0000000000000000000000000000000000000000..068a13ab43579c656fe7992703ea163254dd1569 --- /dev/null +++ b/y/gee/data_gee/gee_catalog.csv @@ -0,0 +1,1022 @@ +id,provider,title,start_date,end_date,startyear,endyear,type,tags,asset_url,thumbnail_url +AAFC/ACI,Agriculture and Agri-Food Canada,Canada AAFC Annual Crop Inventory,01-01-09,01-01-20,2009,2020,image_collection,"aafc, canada, crop, landcover",https://developers.google.com/earth-engine/datasets/catalog/AAFC_ACI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/AAFC/AAFC_ACI_sample.png +ACA/reef_habitat/v1_0,Allen Coral Atlas Partnership (ACA),Allen Coral Atlas (ACA) - Geomorphic Zonation and Benthic Habitat - v1.0 [deprecated],01-01-18,01-01-21,2018,2021,image,"coral, ocean, planet_derived, reef, seagrass, sentinel2_derived",https://developers.google.com/earth-engine/datasets/catalog/ACA_reef_habitat_v1_0#terms-of-use,https://developers.google.com/earth-engine/datasets/images/ACA/ACA_reef_habitat_v1_0_sample.png +ACA/reef_habitat/v2_0,Allen Coral Atlas Partnership (ACA),Allen Coral Atlas (ACA) - Geomorphic Zonation and Benthic Habitat - v2.0,01-01-18,01-01-21,2018,2021,image,"coral, ocean, planet_derived, reef, seagrass, sentinel2_derived",https://developers.google.com/earth-engine/datasets/catalog/ACA_reef_habitat_v2_0#terms-of-use,https://developers.google.com/earth-engine/datasets/images/ACA/ACA_reef_habitat_v2_0_sample.png +AHN/AHN2_05M_INT,AHN,"AHN Netherlands 0.5m DEM, Interpolated",01-01-12,01-01-12,2012,2012,image,"ahn, dem, elevation, geophysical, lidar, netherlands",https://developers.google.com/earth-engine/datasets/catalog/AHN_AHN2_05M_INT#terms-of-use,https://developers.google.com/earth-engine/datasets/images/AHN/AHN_AHN2_05M_INT_sample.png +AHN/AHN2_05M_NON,AHN,"AHN Netherlands 0.5m DEM, Non-Interpolated",01-01-12,01-01-12,2012,2012,image,"ahn, dem, elevation, geophysical, lidar, netherlands",https://developers.google.com/earth-engine/datasets/catalog/AHN_AHN2_05M_NON#terms-of-use,https://developers.google.com/earth-engine/datasets/images/AHN/AHN_AHN2_05M_NON_sample.png +AHN/AHN2_05M_RUW,AHN,"AHN Netherlands 0.5m DEM, Raw Samples",01-01-12,01-01-12,2012,2012,image,"ahn, dem, elevation, geophysical, lidar, netherlands",https://developers.google.com/earth-engine/datasets/catalog/AHN_AHN2_05M_RUW#terms-of-use,https://developers.google.com/earth-engine/datasets/images/AHN/AHN_AHN2_05M_RUW_sample.png +ASTER/AST_L1T_003,NASA LP DAAC at the USGS EROS Center,ASTER L1T Radiance,04-03-00,11-10-22,2000,2022,image_collection,"aster, eos, imagery, nasa, nir, radiance, swir, terra, thermal, tir, toa, usgs, vnir",https://developers.google.com/earth-engine/datasets/catalog/ASTER_AST_L1T_003#terms-of-use,https://developers.google.com/earth-engine/datasets/images/ASTER/ASTER_AST_L1T_003_sample.png +AU/GA/AUSTRALIA_5M_DEM,Geoscience Australia,Australian 5M DEM,01-12-15,01-12-15,2015,2015,image_collection,"australia, dem, elevation, ga, geophysical, geoscience_australia, lidar",https://developers.google.com/earth-engine/datasets/catalog/AU_GA_AUSTRALIA_5M_DEM#terms-of-use,https://developers.google.com/earth-engine/datasets/images/AU/AU_GA_AUSTRALIA_5M_DEM_sample.png +AU/GA/DEM_1SEC/v10/DEM-H,Geoscience Australia,DEM-H: Australian SRTM Hydrologically Enforced Digital Elevation Model,01-02-10,01-02-10,2010,2010,image,"australia, dem, elevation, ga, geophysical, geoscience_australia, smoothed, srtm",https://developers.google.com/earth-engine/datasets/catalog/AU_GA_DEM_1SEC_v10_DEM-H#terms-of-use,https://developers.google.com/earth-engine/datasets/images/AU/AU_GA_DEM_1SEC_v10_DEM-H_sample.png +AU/GA/DEM_1SEC/v10/DEM-S,Geoscience Australia,DEM-S: Australian Smoothed Digital Elevation Model,01-02-10,01-02-10,2010,2010,image,"australia, dem, elevation, ga, geophysical, geoscience_australia, smoothed, srtm",https://developers.google.com/earth-engine/datasets/catalog/AU_GA_DEM_1SEC_v10_DEM-S#terms-of-use,https://developers.google.com/earth-engine/datasets/images/AU/AU_GA_DEM_1SEC_v10_DEM-S_sample.png +BIOPAMA/GlobalOilPalm/v1,Biopama programme,Global Map of Oil Palm Plantations,01-01-19,31-12-19,2019,2019,image_collection,"biodiversity, biopama, conservation, crop, global, landuse, oilpalm, plantation",https://developers.google.com/earth-engine/datasets/catalog/BIOPAMA_GlobalOilPalm_v1#terms-of-use,https://developers.google.com/earth-engine/datasets/images/BIOPAMA/BIOPAMA_GlobalOilPalm_v1_sample.png +BLM/AIM/v1/TerrADat/TerrestrialAIM,US Department of Interior Bureau of Land Management (BLM),BLM AIM TerrADat TerrestrialAIM Point v1,10-05-11,06-12-16,2011,2016,table,"aim, biota, blm, endangered, environment, grsg, health, hydrology, landscape, range, terradat, terrestrialaim, vegetation, wildlife",https://developers.google.com/earth-engine/datasets/catalog/BLM_AIM_v1_TerrADat_TerrestrialAIM#terms-of-use,https://developers.google.com/earth-engine/datasets/images/BLM/BLM_AIM_v1_TerrADat_TerrestrialAIM_sample.png +BNU/FGS/CCNL/v1,Beijng Normal University,CCNL: Consistent And Corrected Nighttime Light Dataset from DMSP-OLS (1992-2013),01-01-92,01-01-14,1992,2014,image_collection,"bnu, dmsp, eog, imagery, lights, nighttime, ols, visible, yearly",https://developers.google.com/earth-engine/datasets/catalog/BNU_FGS_CCNL_v1#terms-of-use,https://developers.google.com/earth-engine/datasets/images/BNU/BNU_FGS_CCNL_v1_sample.png +CAS/IGSNRR/PML/V2,PML_V2,PML_V2 0.1.4: Coupled Evapotranspiration and Gross Primary Product (GPP) [deprecated],04-07-02,27-12-17,2002,2017,image_collection,"cas, evapotranspiration, gpp, gross_primary_product, igsnrr, pml",https://developers.google.com/earth-engine/datasets/catalog/CAS_IGSNRR_PML_V2#terms-of-use,https://developers.google.com/earth-engine/datasets/images/CAS/CAS_IGSNRR_PML_V2_sample.png +CAS/IGSNRR/PML/V2_v017,PML_V2,PML_V2 0.1.7: Coupled Evapotranspiration and Gross Primary Product (GPP),26-02-00,26-12-20,2000,2020,image_collection,"cas, evapotranspiration, gpp, gross_primary_product, igsnrr, pml",https://developers.google.com/earth-engine/datasets/catalog/CAS_IGSNRR_PML_V2_v017#terms-of-use,https://developers.google.com/earth-engine/datasets/images/CAS/CAS_IGSNRR_PML_V2_v017_sample.png +CGIAR/SRTM90_V4,NASA/CGIAR,SRTM Digital Elevation Data Version 4,11-02-00,22-02-00,2000,2000,image,"cgiar, dem, elevation, geophysical, srtm, topography",https://developers.google.com/earth-engine/datasets/catalog/CGIAR_SRTM90_V4#terms-of-use,https://developers.google.com/earth-engine/datasets/images/CGIAR/CGIAR_SRTM90_V4_sample.png +CIESIN/GPWv4/ancillary-data-grids,CIESIN,"GPWv4: Gridded Population of the World Version 4, Ancillary Data Grids [deprecated]",01-01-00,01-01-20,2000,2020,image,"ciesin, gpw, population",https://developers.google.com/earth-engine/datasets/catalog/CIESIN_GPWv4_ancillary-data-grids#terms-of-use,https://developers.google.com/earth-engine/datasets/images/CIESIN/CIESIN_GPWv4_ancillary-data-grids_sample.png +CIESIN/GPWv4/population-count,CIESIN,"GPWv4: Gridded Population of the World Version 4, Population Count [deprecated]",01-01-00,01-01-20,2000,2020,image_collection,"ciesin, gpw, population",https://developers.google.com/earth-engine/datasets/catalog/CIESIN_GPWv4_population-count#terms-of-use,https://developers.google.com/earth-engine/datasets/images/CIESIN/CIESIN_GPWv4_population-count_sample.png +CIESIN/GPWv4/population-density,CIESIN,"GPWv4: Gridded Population of the World Version 4, Population Density [deprecated]",01-01-00,01-01-20,2000,2020,image_collection,"ciesin, gpw, population",https://developers.google.com/earth-engine/datasets/catalog/CIESIN_GPWv4_population-density#terms-of-use,https://developers.google.com/earth-engine/datasets/images/CIESIN/CIESIN_GPWv4_population-density_sample.png +CIESIN/GPWv4/unwpp-adjusted-population-count,CIESIN,"GPWv4: Gridded Population of the World Version 4, UN-Adjusted Population Count [deprecated]",01-01-00,01-01-20,2000,2020,image_collection,"ciesin, gpw, population",https://developers.google.com/earth-engine/datasets/catalog/CIESIN_GPWv4_unwpp-adjusted-population-count#terms-of-use,https://developers.google.com/earth-engine/datasets/images/CIESIN/CIESIN_GPWv4_unwpp-adjusted-population-count_sample.png +CIESIN/GPWv4/unwpp-adjusted-population-density,CIESIN,"GPWv4: Gridded Population of the World Version 4, UN-Adjusted Population Density [deprecated]",01-01-00,01-01-20,2000,2020,image_collection,"ciesin, gpw, population",https://developers.google.com/earth-engine/datasets/catalog/CIESIN_GPWv4_unwpp-adjusted-population-density#terms-of-use,https://developers.google.com/earth-engine/datasets/images/CIESIN/CIESIN_GPWv4_unwpp-adjusted-population-density_sample.png +CIESIN/GPWv411/GPW_Basic_Demographic_Characteristics,NASA SEDAC at the Center for International Earth Science Information Network,GPWv411: Basic Demographic Characteristics (Gridded Population of the World Version 4.11),01-01-00,01-01-20,2000,2020,image_collection,"ciesin, gpw, nasa, population",https://developers.google.com/earth-engine/datasets/catalog/CIESIN_GPWv411_GPW_Basic_Demographic_Characteristics#terms-of-use,https://developers.google.com/earth-engine/datasets/images/CIESIN/CIESIN_GPWv411_GPW_Basic_Demographic_Characteristics_sample.png +CIESIN/GPWv411/GPW_Data_Context,NASA SEDAC at the Center for International Earth Science Information Network,GPWv411: Data Context (Gridded Population of the World Version 4.11),01-01-00,01-01-20,2000,2020,image,"ciesin, gpw, nasa, population",https://developers.google.com/earth-engine/datasets/catalog/CIESIN_GPWv411_GPW_Data_Context#terms-of-use,https://developers.google.com/earth-engine/datasets/images/CIESIN/CIESIN_GPWv411_GPW_Data_Context_sample.png +CIESIN/GPWv411/GPW_Land_Area,NASA SEDAC at the Center for International Earth Science Information Network,GPWv411: Land Area (Gridded Population of the World Version 4.11),01-01-00,01-01-20,2000,2020,image,"ciesin, gpw, nasa, population",https://developers.google.com/earth-engine/datasets/catalog/CIESIN_GPWv411_GPW_Land_Area#terms-of-use,https://developers.google.com/earth-engine/datasets/images/CIESIN/CIESIN_GPWv411_GPW_Land_Area_sample.png +CIESIN/GPWv411/GPW_Mean_Administrative_Unit_Area,NASA SEDAC at the Center for International Earth Science Information Network,GPWv411: Mean Administrative Unit Area (Gridded Population of the World Version 4.11),01-01-00,01-01-20,2000,2020,image,"ciesin, gpw, nasa, population",https://developers.google.com/earth-engine/datasets/catalog/CIESIN_GPWv411_GPW_Mean_Administrative_Unit_Area#terms-of-use,https://developers.google.com/earth-engine/datasets/images/CIESIN/CIESIN_GPWv411_GPW_Mean_Administrative_Unit_Area_sample.png +CIESIN/GPWv411/GPW_National_Identifier_Grid,NASA SEDAC at the Center for International Earth Science Information Network,GPWv411: National Identifier Grid (Gridded Population of the World Version 4.11),01-01-00,01-01-20,2000,2020,image,"ciesin, gpw, nasa, population",https://developers.google.com/earth-engine/datasets/catalog/CIESIN_GPWv411_GPW_National_Identifier_Grid#terms-of-use,https://developers.google.com/earth-engine/datasets/images/CIESIN/CIESIN_GPWv411_GPW_National_Identifier_Grid_sample.png +CIESIN/GPWv411/GPW_Population_Count,NASA SEDAC at the Center for International Earth Science Information Network,GPWv411: Population Count (Gridded Population of the World Version 4.11),01-01-00,01-01-20,2000,2020,image_collection,"ciesin, gpw, nasa, population",https://developers.google.com/earth-engine/datasets/catalog/CIESIN_GPWv411_GPW_Population_Count#terms-of-use,https://developers.google.com/earth-engine/datasets/images/CIESIN/CIESIN_GPWv411_GPW_Population_Count_sample.png +CIESIN/GPWv411/GPW_Population_Density,NASA SEDAC at the Center for International Earth Science Information Network,GPWv411: Population Density (Gridded Population of the World Version 4.11),01-01-00,01-01-20,2000,2020,image_collection,"ciesin, gpw, nasa, population",https://developers.google.com/earth-engine/datasets/catalog/CIESIN_GPWv411_GPW_Population_Density#terms-of-use,https://developers.google.com/earth-engine/datasets/images/CIESIN/CIESIN_GPWv411_GPW_Population_Density_sample.png +CIESIN/GPWv411/GPW_UNWPP-Adjusted_Population_Count,NASA SEDAC at the Center for International Earth Science Information Network,GPWv411: Adjusted to Match 2015 Revision of UN WPP Country Totals (Gridded Population of the World Version 4.11),01-01-00,01-01-20,2000,2020,image_collection,"ciesin, gpw, nasa, population",https://developers.google.com/earth-engine/datasets/catalog/CIESIN_GPWv411_GPW_UNWPP-Adjusted_Population_Count#terms-of-use,https://developers.google.com/earth-engine/datasets/images/CIESIN/CIESIN_GPWv411_GPW_UNWPP-Adjusted_Population_Count_sample.png +CIESIN/GPWv411/GPW_UNWPP-Adjusted_Population_Density,NASA SEDAC at the Center for International Earth Science Information Network,GPWv411: UN-Adjusted Population Density (Gridded Population of the World Version 4.11),01-01-00,01-01-20,2000,2020,image_collection,"ciesin, gpw, nasa, population",https://developers.google.com/earth-engine/datasets/catalog/CIESIN_GPWv411_GPW_UNWPP-Adjusted_Population_Density#terms-of-use,https://developers.google.com/earth-engine/datasets/images/CIESIN/CIESIN_GPWv411_GPW_UNWPP-Adjusted_Population_Density_sample.png +CIESIN/GPWv411/GPW_Water_Area,NASA SEDAC at the Center for International Earth Science Information Network,GPWv411: Water Area (Gridded Population of the World Version 4.11),01-01-00,01-01-20,2000,2020,image,"ciesin, gpw, nasa, population",https://developers.google.com/earth-engine/datasets/catalog/CIESIN_GPWv411_GPW_Water_Area#terms-of-use,https://developers.google.com/earth-engine/datasets/images/CIESIN/CIESIN_GPWv411_GPW_Water_Area_sample.png +CIESIN/GPWv411/GPW_Water_Mask,NASA SEDAC at the Center for International Earth Science Information Network,GPWv411: Water Mask (Gridded Population of the World Version 4.11),01-01-00,01-01-20,2000,2020,image,"ciesin, gpw, nasa, population",https://developers.google.com/earth-engine/datasets/catalog/CIESIN_GPWv411_GPW_Water_Mask#terms-of-use,https://developers.google.com/earth-engine/datasets/images/CIESIN/CIESIN_GPWv411_GPW_Water_Mask_sample.png +COPERNICUS/CORINE/V18_5_1/100m,EEA/Copernicus,Copernicus CORINE Land Cover [deprecated],01-01-86,31-12-12,1986,2012,image_collection,"clc, copernicus, corine, eea, esa, eu, landcover",https://developers.google.com/earth-engine/datasets/catalog/COPERNICUS_CORINE_V18_5_1_100m#terms-of-use,https://developers.google.com/earth-engine/datasets/images/COPERNICUS/COPERNICUS_CORINE_V18_5_1_100m_sample.png +COPERNICUS/CORINE/V20/100m,EEA/Copernicus,Copernicus CORINE Land Cover,01-01-86,31-12-18,1986,2018,image_collection,"clc, copernicus, corine, eea, esa, eu, landcover",https://developers.google.com/earth-engine/datasets/catalog/COPERNICUS_CORINE_V20_100m#terms-of-use,https://developers.google.com/earth-engine/datasets/images/COPERNICUS/COPERNICUS_CORINE_V20_100m_sample.png +COPERNICUS/DEM/GLO30,Copernicus,Copernicus DEM GLO-30: Global 30m Digital Elevation Model,01-12-10,31-01-15,2010,2015,image_collection,"copernicus, dem, elevation, geophysical",https://developers.google.com/earth-engine/datasets/catalog/COPERNICUS_DEM_GLO30#terms-of-use,https://developers.google.com/earth-engine/datasets/images/COPERNICUS/COPERNICUS_DEM_GLO30_sample.png +COPERNICUS/Landcover/100m/Proba-V-C3/Global,Copernicus,Copernicus Global Land Cover Layers: CGLS-LC100 Collection 3,01-01-15,31-12-19,2015,2019,image_collection,"copernicus, eea, esa, eu, landcover, proba, probav, vito",https://developers.google.com/earth-engine/datasets/catalog/COPERNICUS_Landcover_100m_Proba-V-C3_Global#terms-of-use,https://developers.google.com/earth-engine/datasets/images/COPERNICUS/COPERNICUS_Landcover_100m_Proba-V-C3_Global_sample.png +COPERNICUS/Landcover/100m/Proba-V/Global,Copernicus,Copernicus Global Land Cover Layers: CGLS-LC100 Collection 2 [deprecated],01-01-15,01-01-15,2015,2015,image_collection,"copernicus, eea, esa, eu, landcover, proba, probav, vito",https://developers.google.com/earth-engine/datasets/catalog/COPERNICUS_Landcover_100m_Proba-V_Global#terms-of-use,https://developers.google.com/earth-engine/datasets/images/COPERNICUS/COPERNICUS_Landcover_100m_Proba-V_Global_sample.png +COPERNICUS/S1_GRD,European Union/ESA/Copernicus,"Sentinel-1 SAR GRD: C-band Synthetic Aperture Radar Ground Range Detected, log scaling",03-10-14,26-03-23,2014,2023,image_collection,"backscatter, copernicus, esa, eu, polarization, radar, sar, sentinel",https://developers.google.com/earth-engine/datasets/catalog/COPERNICUS_S1_GRD#terms-of-use,https://developers.google.com/earth-engine/datasets/images/COPERNICUS/COPERNICUS_S1_GRD_sample.png +COPERNICUS/S2,European Union/ESA/Copernicus,"Sentinel-2 MSI: MultiSpectral Instrument, Level-1C",23-06-15,26-03-23,2015,2023,image_collection,"copernicus, esa, eu, msi, radiance, sentinel",https://developers.google.com/earth-engine/datasets/catalog/COPERNICUS_S2#terms-of-use,https://developers.google.com/earth-engine/datasets/images/COPERNICUS/COPERNICUS_S2_sample.png +COPERNICUS/S2_CLOUD_PROBABILITY,European Union/ESA/Copernicus/SentinelHub,Sentinel-2: Cloud Probability,23-06-15,26-03-23,2015,2023,image_collection,"cloud, copernicus, esa, eu, msi, radiance, sentinel, sentinelhub",https://developers.google.com/earth-engine/datasets/catalog/COPERNICUS_S2_CLOUD_PROBABILITY#terms-of-use,https://developers.google.com/earth-engine/datasets/images/COPERNICUS/COPERNICUS_S2_CLOUD_PROBABILITY_sample.png +COPERNICUS/S2_HARMONIZED,European Union/ESA/Copernicus,"Harmonized Sentinel-2 MSI: MultiSpectral Instrument, Level-1C",23-06-15,26-03-23,2015,2023,image_collection,"copernicus, esa, eu, msi, radiance, sentinel",https://developers.google.com/earth-engine/datasets/catalog/COPERNICUS_S2_HARMONIZED#terms-of-use,https://developers.google.com/earth-engine/datasets/images/COPERNICUS/COPERNICUS_S2_HARMONIZED_sample.png +COPERNICUS/S2_SR,European Union/ESA/Copernicus,"Sentinel-2 MSI: MultiSpectral Instrument, Level-2A",28-03-17,26-03-23,2017,2023,image_collection,"copernicus, esa, eu, msi, reflectance, sentinel, sr",https://developers.google.com/earth-engine/datasets/catalog/COPERNICUS_S2_SR#terms-of-use,https://developers.google.com/earth-engine/datasets/images/COPERNICUS/COPERNICUS_S2_SR_sample.png +COPERNICUS/S2_SR_HARMONIZED,European Union/ESA/Copernicus,"Harmonized Sentinel-2 MSI: MultiSpectral Instrument, Level-2A",28-03-17,26-03-23,2017,2023,image_collection,"copernicus, esa, eu, msi, reflectance, sentinel, sr",https://developers.google.com/earth-engine/datasets/catalog/COPERNICUS_S2_SR_HARMONIZED#terms-of-use,https://developers.google.com/earth-engine/datasets/images/COPERNICUS/COPERNICUS_S2_SR_HARMONIZED_sample.png +COPERNICUS/S3/OLCI,European Union/ESA/Copernicus,Sentinel-3 OLCI EFR: Ocean and Land Color Instrument Earth Observation Full Resolution,18-10-16,25-03-23,2016,2023,image_collection,"copernicus, esa, eu, olci, radiance, sentinel, toa",https://developers.google.com/earth-engine/datasets/catalog/COPERNICUS_S3_OLCI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/COPERNICUS/COPERNICUS_S3_OLCI_sample.png +COPERNICUS/S5P/NRTI/L3_AER_AI,European Union/ESA/Copernicus,Sentinel-5P NRTI AER AI: Near Real-Time UV Aerosol Index,10-07-18,25-03-23,2018,2023,image_collection,"aai, aerosol, air_quality, copernicus, esa, eu, knmi, pollution, s5p, sentinel, tropomi, uvai",https://developers.google.com/earth-engine/datasets/catalog/COPERNICUS_S5P_NRTI_L3_AER_AI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/COPERNICUS/COPERNICUS_S5P_NRTI_L3_AER_AI_sample.png +COPERNICUS/S5P/NRTI/L3_AER_LH,European Union/ESA/Copernicus,Sentinel-5P NRTI AER LH: Near Real-Time UV Aerosol Layer Height,10-07-18,25-03-23,2018,2023,image_collection,"aerosol, air_quality, alh, copernicus, esa, eu, knmi, pollution, s5p, sentinel, tropomi, uvai",https://developers.google.com/earth-engine/datasets/catalog/COPERNICUS_S5P_NRTI_L3_AER_LH#terms-of-use,https://developers.google.com/earth-engine/datasets/images/COPERNICUS/COPERNICUS_S5P_NRTI_L3_AER_LH_sample.png +COPERNICUS/S5P/NRTI/L3_CLOUD,European Union/ESA/Copernicus,Sentinel-5P NRTI CLOUD: Near Real-Time Cloud,05-07-18,25-03-23,2018,2023,image_collection,"climate, cloud, copernicus, dlr, esa, eu, s5p, sentinel, tropomi",https://developers.google.com/earth-engine/datasets/catalog/COPERNICUS_S5P_NRTI_L3_CLOUD#terms-of-use,https://developers.google.com/earth-engine/datasets/images/COPERNICUS/COPERNICUS_S5P_NRTI_L3_CLOUD_sample.png +COPERNICUS/S5P/NRTI/L3_CO,European Union/ESA/Copernicus,Sentinel-5P NRTI CO: Near Real-Time Carbon Monoxide,22-11-18,25-03-23,2018,2023,image_collection,"air_quality, carbon_monoxide, copernicus, esa, eu, knmi, pollution, s5p, sentinel, sron, tropomi",https://developers.google.com/earth-engine/datasets/catalog/COPERNICUS_S5P_NRTI_L3_CO#terms-of-use,https://developers.google.com/earth-engine/datasets/images/COPERNICUS/COPERNICUS_S5P_NRTI_L3_CO_sample.png +COPERNICUS/S5P/NRTI/L3_HCHO,European Union/ESA/Copernicus,Sentinel-5P NRTI HCHO: Near Real-Time Formaldehyde,02-10-18,25-03-23,2018,2023,image_collection,"air_quality, bira, copernicus, dlr, esa, eu, formaldehyde, hcho, pollution, s5p, sentinel, tropomi",https://developers.google.com/earth-engine/datasets/catalog/COPERNICUS_S5P_NRTI_L3_HCHO#terms-of-use,https://developers.google.com/earth-engine/datasets/images/COPERNICUS/COPERNICUS_S5P_NRTI_L3_HCHO_sample.png +COPERNICUS/S5P/NRTI/L3_NO2,European Union/ESA/Copernicus,Sentinel-5P NRTI NO2: Near Real-Time Nitrogen Dioxide,10-07-18,25-03-23,2018,2023,image_collection,"air_quality, copernicus, esa, eu, knmi, nitrogen_dioxide, no2, pollution, s5p, sentinel, tropomi",https://developers.google.com/earth-engine/datasets/catalog/COPERNICUS_S5P_NRTI_L3_NO2#terms-of-use,https://developers.google.com/earth-engine/datasets/images/COPERNICUS/COPERNICUS_S5P_NRTI_L3_NO2_sample.png +COPERNICUS/S5P/NRTI/L3_O3,European Union/ESA/Copernicus,Sentinel-5P NRTI O3: Near Real-Time Ozone,10-07-18,25-03-23,2018,2023,image_collection,"air_quality, copernicus, esa, eu, o3, ozone, pollution, s5p, sentinel, tropomi",https://developers.google.com/earth-engine/datasets/catalog/COPERNICUS_S5P_NRTI_L3_O3#terms-of-use,https://developers.google.com/earth-engine/datasets/images/COPERNICUS/COPERNICUS_S5P_NRTI_L3_O3_sample.png +COPERNICUS/S5P/NRTI/L3_SO2,European Union/ESA/Copernicus,Sentinel-5P NRTI SO2: Near Real-Time Sulfur Dioxide,10-07-18,25-03-23,2018,2023,image_collection,"air_quality, bira, copernicus, dlr, esa, eu, pollution, s5p, sentinel, so2, sulfur_dioxide, tropomi",https://developers.google.com/earth-engine/datasets/catalog/COPERNICUS_S5P_NRTI_L3_SO2#terms-of-use,https://developers.google.com/earth-engine/datasets/images/COPERNICUS/COPERNICUS_S5P_NRTI_L3_SO2_sample.png +COPERNICUS/S5P/OFFL/L3_AER_AI,European Union/ESA/Copernicus,Sentinel-5P OFFL AER AI: Offline UV Aerosol Index,04-07-18,24-03-23,2018,2023,image_collection,"aai, aerosol, air_quality, copernicus, esa, eu, knmi, pollution, s5p, sentinel, tropomi, uvai",https://developers.google.com/earth-engine/datasets/catalog/COPERNICUS_S5P_OFFL_L3_AER_AI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/COPERNICUS/COPERNICUS_S5P_OFFL_L3_AER_AI_sample.png +COPERNICUS/S5P/OFFL/L3_AER_LH,European Union/ESA/Copernicus,Sentinel-5P OFFL AER LH: Offline UV Aerosol Layer Height,04-07-18,24-03-23,2018,2023,image_collection,"aerosol, air_quality, alh, copernicus, esa, eu, knmi, pollution, s5p, sentinel, tropomi, uvai",https://developers.google.com/earth-engine/datasets/catalog/COPERNICUS_S5P_OFFL_L3_AER_LH#terms-of-use,https://developers.google.com/earth-engine/datasets/images/COPERNICUS/COPERNICUS_S5P_OFFL_L3_AER_LH_sample.png +COPERNICUS/S5P/OFFL/L3_CH4,European Union/ESA/Copernicus,Sentinel-5P OFFL CH4: Offline Methane,08-02-19,24-03-23,2019,2023,image_collection,"climate, copernicus, esa, eu, knmi, methane, s5p, sentinel, sron, tropomi",https://developers.google.com/earth-engine/datasets/catalog/COPERNICUS_S5P_OFFL_L3_CH4#terms-of-use,https://developers.google.com/earth-engine/datasets/images/COPERNICUS/COPERNICUS_S5P_OFFL_L3_CH4_sample.png +COPERNICUS/S5P/OFFL/L3_CLOUD,European Union/ESA/Copernicus,Sentinel-5P OFFL CLOUD: Near Real-Time Cloud,04-07-18,24-03-23,2018,2023,image_collection,"climate, cloud, copernicus, dlr, esa, eu, s5p, sentinel, tropomi",https://developers.google.com/earth-engine/datasets/catalog/COPERNICUS_S5P_OFFL_L3_CLOUD#terms-of-use,https://developers.google.com/earth-engine/datasets/images/COPERNICUS/COPERNICUS_S5P_OFFL_L3_CLOUD_sample.png +COPERNICUS/S5P/OFFL/L3_CO,European Union/ESA/Copernicus,Sentinel-5P OFFL CO: Offline Carbon Monoxide,28-06-18,24-03-23,2018,2023,image_collection,"air_quality, carbon_monoxide, copernicus, esa, eu, knmi, pollution, s5p, sentinel, sron, tropomi",https://developers.google.com/earth-engine/datasets/catalog/COPERNICUS_S5P_OFFL_L3_CO#terms-of-use,https://developers.google.com/earth-engine/datasets/images/COPERNICUS/COPERNICUS_S5P_OFFL_L3_CO_sample.png +COPERNICUS/S5P/OFFL/L3_HCHO,European Union/ESA/Copernicus,Sentinel-5P OFFL HCHO: Offline Formaldehyde,05-12-18,24-03-23,2018,2023,image_collection,"air_quality, bira, copernicus, dlr, esa, eu, formaldehyde, hcho, pollution, s5p, sentinel, tropomi",https://developers.google.com/earth-engine/datasets/catalog/COPERNICUS_S5P_OFFL_L3_HCHO#terms-of-use,https://developers.google.com/earth-engine/datasets/images/COPERNICUS/COPERNICUS_S5P_OFFL_L3_HCHO_sample.png +COPERNICUS/S5P/OFFL/L3_NO2,European Union/ESA/Copernicus,Sentinel-5P OFFL NO2: Offline Nitrogen Dioxide,28-06-18,17-03-23,2018,2023,image_collection,"air_quality, copernicus, esa, eu, knmi, nitrogen_dioxide, no2, pollution, s5p, sentinel, tropomi",https://developers.google.com/earth-engine/datasets/catalog/COPERNICUS_S5P_OFFL_L3_NO2#terms-of-use,https://developers.google.com/earth-engine/datasets/images/COPERNICUS/COPERNICUS_S5P_OFFL_L3_NO2_sample.png +COPERNICUS/S5P/OFFL/L3_O3,European Union/ESA/Copernicus,Sentinel-5P OFFL O3: Offline Ozone,08-09-18,24-03-23,2018,2023,image_collection,"air_quality, copernicus, esa, eu, o3, ozone, pollution, s5p, sentinel, tropomi",https://developers.google.com/earth-engine/datasets/catalog/COPERNICUS_S5P_OFFL_L3_O3#terms-of-use,https://developers.google.com/earth-engine/datasets/images/COPERNICUS/COPERNICUS_S5P_OFFL_L3_O3_sample.png +COPERNICUS/S5P/OFFL/L3_O3_TCL,European Union/ESA/Copernicus,Sentinel-5P OFFL O3 TCL: Offline Tropospheric Ozone,30-04-18,11-03-23,2018,2023,image_collection,"air_quality, copernicus, esa, eu, o3, ozone, pollution, s5p, sentinel, tropomi",https://developers.google.com/earth-engine/datasets/catalog/COPERNICUS_S5P_OFFL_L3_O3_TCL#terms-of-use,https://developers.google.com/earth-engine/datasets/images/COPERNICUS/COPERNICUS_S5P_OFFL_L3_O3_TCL_sample.png +COPERNICUS/S5P/OFFL/L3_SO2,European Union/ESA/Copernicus,Sentinel-5P OFFL SO2: Offline Sulfur Dioxide,05-12-18,24-03-23,2018,2023,image_collection,"air_quality, bira, copernicus, dlr, esa, eu, pollution, s5p, sentinel, so2, sulfur_dioxide, tropomi",https://developers.google.com/earth-engine/datasets/catalog/COPERNICUS_S5P_OFFL_L3_SO2#terms-of-use,https://developers.google.com/earth-engine/datasets/images/COPERNICUS/COPERNICUS_S5P_OFFL_L3_SO2_sample.png +CPOM/CryoSat2/ANTARCTICA_DEM,CPOM,CryoSat-2 Antarctica 1km DEM,01-07-10,01-07-16,2010,2016,image,"antarctica, cpom, cryosat_2, dem, elevation, polar",https://developers.google.com/earth-engine/datasets/catalog/CPOM_CryoSat2_ANTARCTICA_DEM#terms-of-use,https://developers.google.com/earth-engine/datasets/images/CPOM/CPOM_CryoSat2_ANTARCTICA_DEM_sample.png +CSIRO/SLGA,CSIRO/SLGA,SLGA: Soil and Landscape Grid of Australia (Soil Attributes),01-01-50,31-12-13,1950,2013,image_collection,"australia, csiro, digital_soil_mapping, globalsoilmap, slga, soil, soil_depth, tern",https://developers.google.com/earth-engine/datasets/catalog/CSIRO_SLGA#terms-of-use,https://developers.google.com/earth-engine/datasets/images/CSIRO/CSIRO_SLGA_sample.png +CSP/ERGo/1_0/Global/ALOS_CHILI,Conservation Science Partners,Global ALOS CHILI (Continuous Heat-Insolation Load Index),24-01-06,13-05-11,2006,2011,image,"aspect, csp, elevation, ergo, geophysical, global, landforms, slope, topography",https://developers.google.com/earth-engine/datasets/catalog/CSP_ERGo_1_0_Global_ALOS_CHILI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/CSP/CSP_ERGo_1_0_Global_ALOS_CHILI_sample.png +CSP/ERGo/1_0/Global/ALOS_landforms,Conservation Science Partners,Global ALOS Landforms,24-01-06,13-05-11,2006,2011,image,"aspect, csp, elevation, ergo, geophysical, global, landforms, slope, topography",https://developers.google.com/earth-engine/datasets/catalog/CSP_ERGo_1_0_Global_ALOS_landforms#terms-of-use,https://developers.google.com/earth-engine/datasets/images/CSP/CSP_ERGo_1_0_Global_ALOS_landforms_sample.png +CSP/ERGo/1_0/Global/ALOS_mTPI,Conservation Science Partners,Global ALOS mTPI (Multi-Scale Topographic Position Index),24-01-06,13-05-11,2006,2011,image,"aspect, csp, elevation, ergo, geophysical, global, landforms, slope, topography",https://developers.google.com/earth-engine/datasets/catalog/CSP_ERGo_1_0_Global_ALOS_mTPI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/CSP/CSP_ERGo_1_0_Global_ALOS_mTPI_sample.png +CSP/ERGo/1_0/Global/ALOS_topoDiversity,Conservation Science Partners,Global ALOS Topographic Diversity,24-01-06,13-05-11,2006,2011,image,"aspect, csp, elevation, ergo, geophysical, global, landforms, slope, topography",https://developers.google.com/earth-engine/datasets/catalog/CSP_ERGo_1_0_Global_ALOS_topoDiversity#terms-of-use,https://developers.google.com/earth-engine/datasets/images/CSP/CSP_ERGo_1_0_Global_ALOS_topoDiversity_sample.png +CSP/ERGo/1_0/Global/SRTM_CHILI,Conservation Science Partners,Global SRTM CHILI (Continuous Heat-Insolation Load Index),24-01-06,13-05-11,2006,2011,image,"aspect, csp, elevation, ergo, geophysical, global, landforms, slope, topography",https://developers.google.com/earth-engine/datasets/catalog/CSP_ERGo_1_0_Global_SRTM_CHILI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/CSP/CSP_ERGo_1_0_Global_SRTM_CHILI_sample.png +CSP/ERGo/1_0/Global/SRTM_landforms,Conservation Science Partners,Global SRTM Landforms,24-01-06,13-05-11,2006,2011,image,"aspect, csp, elevation, ergo, geophysical, global, landforms, slope, topography",https://developers.google.com/earth-engine/datasets/catalog/CSP_ERGo_1_0_Global_SRTM_landforms#terms-of-use,https://developers.google.com/earth-engine/datasets/images/CSP/CSP_ERGo_1_0_Global_SRTM_landforms_sample.png +CSP/ERGo/1_0/Global/SRTM_mTPI,Conservation Science Partners,Global SRTM mTPI (Multi-Scale Topographic Position Index),24-01-06,13-05-11,2006,2011,image,"aspect, csp, elevation, ergo, geophysical, global, landforms, slope, topography",https://developers.google.com/earth-engine/datasets/catalog/CSP_ERGo_1_0_Global_SRTM_mTPI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/CSP/CSP_ERGo_1_0_Global_SRTM_mTPI_sample.png +CSP/ERGo/1_0/Global/SRTM_topoDiversity,Conservation Science Partners,Global SRTM Topographic Diversity,24-01-06,13-05-11,2006,2011,image,"aspect, csp, elevation, ergo, geophysical, global, landforms, slope, topography",https://developers.google.com/earth-engine/datasets/catalog/CSP_ERGo_1_0_Global_SRTM_topoDiversity#terms-of-use,https://developers.google.com/earth-engine/datasets/images/CSP/CSP_ERGo_1_0_Global_SRTM_topoDiversity_sample.png +CSP/ERGo/1_0/US/CHILI,Conservation Science Partners,US NED CHILI (Continuous Heat-Insolation Load Index),24-01-06,13-05-11,2006,2011,image,"aspect, csp, elevation, ergo, geophysical, landforms, slope, topography, us",https://developers.google.com/earth-engine/datasets/catalog/CSP_ERGo_1_0_US_CHILI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/CSP/CSP_ERGo_1_0_US_CHILI_sample.png +CSP/ERGo/1_0/US/landforms,Conservation Science Partners,US NED Landforms,24-01-06,13-05-11,2006,2011,image,"aspect, csp, elevation, ergo, geophysical, landforms, slope, topography, us",https://developers.google.com/earth-engine/datasets/catalog/CSP_ERGo_1_0_US_landforms#terms-of-use,https://developers.google.com/earth-engine/datasets/images/CSP/CSP_ERGo_1_0_US_landforms_sample.png +CSP/ERGo/1_0/US/lithology,Conservation Science Partners,US Lithology,24-01-06,13-05-11,2006,2011,image,"aspect, csp, elevation, ergo, geophysical, landforms, slope, topography, us",https://developers.google.com/earth-engine/datasets/catalog/CSP_ERGo_1_0_US_lithology#terms-of-use,https://developers.google.com/earth-engine/datasets/images/CSP/CSP_ERGo_1_0_US_lithology_sample.png +CSP/ERGo/1_0/US/mTPI,Conservation Science Partners,US NED mTPI (Multi-Scale Topographic Position Index),24-01-06,13-05-11,2006,2011,image,"aspect, csp, elevation, ergo, geophysical, landforms, slope, topography, us",https://developers.google.com/earth-engine/datasets/catalog/CSP_ERGo_1_0_US_mTPI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/CSP/CSP_ERGo_1_0_US_mTPI_sample.png +CSP/ERGo/1_0/US/physioDiversity,Conservation Science Partners,US NED Physiographic Diversity,24-01-06,13-05-11,2006,2011,image,"aspect, csp, elevation, ergo, geophysical, landforms, slope, topography, us",https://developers.google.com/earth-engine/datasets/catalog/CSP_ERGo_1_0_US_physioDiversity#terms-of-use,https://developers.google.com/earth-engine/datasets/images/CSP/CSP_ERGo_1_0_US_physioDiversity_sample.png +CSP/ERGo/1_0/US/physiography,Conservation Science Partners,US Physiography,24-01-06,13-05-11,2006,2011,image,"aspect, csp, elevation, ergo, geophysical, landforms, slope, topography, us",https://developers.google.com/earth-engine/datasets/catalog/CSP_ERGo_1_0_US_physiography#terms-of-use,https://developers.google.com/earth-engine/datasets/images/CSP/CSP_ERGo_1_0_US_physiography_sample.png +CSP/ERGo/1_0/US/topoDiversity,Conservation Science Partners,US NED Topographic Diversity,24-01-06,13-05-11,2006,2011,image,"aspect, csp, elevation, ergo, geophysical, landforms, slope, topography, us",https://developers.google.com/earth-engine/datasets/catalog/CSP_ERGo_1_0_US_topoDiversity#terms-of-use,https://developers.google.com/earth-engine/datasets/images/CSP/CSP_ERGo_1_0_US_topoDiversity_sample.png +CSP/HM/GlobalHumanModification,Conservation Science Partners,CSP gHM: Global Human Modification,01-01-16,31-12-16,2016,2016,image_collection,"csp, fragmentation, human_modification, landcover, landscape_gradient, stressors, tnc",https://developers.google.com/earth-engine/datasets/catalog/CSP_HM_GlobalHumanModification#terms-of-use,https://developers.google.com/earth-engine/datasets/images/CSP/CSP_HM_GlobalHumanModification_sample.png +DLR/WSF/WSF2015/v1,Deutsches Zentrum für Luft- und Raumfahrt (DLR),World Settlement Footprint 2015,01-01-15,01-01-16,2015,2016,image,"landcover, landsat_derived, sentinel1_derived, settlement, urban",https://developers.google.com/earth-engine/datasets/catalog/DLR_WSF_WSF2015_v1#terms-of-use,https://developers.google.com/earth-engine/datasets/images/DLR/DLR_WSF_WSF2015_v1_sample.png +DOE/ORNL/LandScan_HD/Ukraine_202201,Oak Ridge National Laboratory,"LandScan High Definition Data for Ukraine, January 2022",01-01-22,01-02-22,2022,2022,image,"landscan, population, ukraine",https://developers.google.com/earth-engine/datasets/catalog/DOE_ORNL_LandScan_HD_Ukraine_202201#terms-of-use,https://developers.google.com/earth-engine/datasets/images/DOE/DOE_ORNL_LandScan_HD_Ukraine_202201_sample.png +ECMWF/CAMS/NRT,European Centre for Medium-Range Weather Forecasts (ECMWF),Copernicus Atmosphere Monitoring Service (CAMS) Global Near-Real-Time,21-06-16,25-03-23,2016,2023,image_collection,"aerosol, atmosphere, climate, copernicus, ecmwf, forecast, particulate_matter",https://developers.google.com/earth-engine/datasets/catalog/ECMWF_CAMS_NRT#terms-of-use,https://developers.google.com/earth-engine/datasets/images/ECMWF/ECMWF_CAMS_NRT_sample.png +ECMWF/ERA5/DAILY,ECMWF / Copernicus Climate Change Service,ERA5 Daily Aggregates - Latest Climate Reanalysis Produced by ECMWF / Copernicus Climate Change Service,02-01-79,09-07-20,1979,2020,image_collection,"climate, copernicus, dewpoint, ecmwf, era5, precipitation, pressure, reanalysis, surface, temperature, wind",https://developers.google.com/earth-engine/datasets/catalog/ECMWF_ERA5_DAILY#terms-of-use,https://developers.google.com/earth-engine/datasets/images/ECMWF/ECMWF_ERA5_DAILY_sample.png +ECMWF/ERA5_LAND/DAILY_RAW,Daily Aggregates: Google and Copernicus Climate Data Store,ERA5-Land Daily Aggregated - ECMWF Climate Reanalysis,11-07-63,27-01-23,1963,2023,image_collection,"cds, climate, copernicus, ecmwf, era5_land, evaporation, heat, lakes, precipitation, pressure, radiation, reanalysis, runoff, snow, soil_water, temperature, vegetation, wind",https://developers.google.com/earth-engine/datasets/catalog/ECMWF_ERA5_LAND_DAILY_RAW#terms-of-use,https://developers.google.com/earth-engine/datasets/images/ECMWF/ECMWF_ERA5_LAND_DAILY_RAW_sample.png +ECMWF/ERA5_LAND/HOURLY,Climate Data Store,ERA5-Land Hourly - ECMWF Climate Reanalysis,01-01-81,28-01-23,1981,2023,image_collection,"cds, climate, copernicus, ecmwf, era5_land, evaporation, heat, lakes, precipitation, pressure, radiation, reanalysis, runoff, snow, soil_water, temperature, vegetation, wind",https://developers.google.com/earth-engine/datasets/catalog/ECMWF_ERA5_LAND_HOURLY#terms-of-use,https://developers.google.com/earth-engine/datasets/images/ECMWF/ECMWF_ERA5_LAND_HOURLY_sample.png +ECMWF/ERA5_LAND/MONTHLY,Copernicus Climate Data Store,ERA5-Land Monthly Averaged - ECMWF Climate Reanalysis [deprecated],01-01-81,01-01-23,1981,2023,image_collection,"cds, climate, copernicus, ecmwf, era5_land, evaporation, heat, lakes, precipitation, pressure, radiation, reanalysis, runoff, snow, soil_water, temperature, vegetation, wind",https://developers.google.com/earth-engine/datasets/catalog/ECMWF_ERA5_LAND_MONTHLY#terms-of-use,https://developers.google.com/earth-engine/datasets/images/ECMWF/ECMWF_ERA5_LAND_MONTHLY_sample.png +ECMWF/ERA5_LAND/MONTHLY_AGGR,Monthly Aggregates: Google and Copernicus Climate Data Store,ERA5-Land Monthly Aggregated - ECMWF Climate Reanalysis,01-01-50,01-12-22,1950,2022,image_collection,"cds, climate, copernicus, ecmwf, era5_land, evaporation, heat, lakes, precipitation, pressure, radiation, reanalysis, runoff, snow, soil_water, temperature, vegetation, wind",https://developers.google.com/earth-engine/datasets/catalog/ECMWF_ERA5_LAND_MONTHLY_AGGR#terms-of-use,https://developers.google.com/earth-engine/datasets/images/ECMWF/ECMWF_ERA5_LAND_MONTHLY_AGGR_sample.png +ECMWF/ERA5_LAND/MONTHLY_BY_HOUR,Climate Data Store,ERA5-Land Monthly Averaged by Hour of Day - ECMWF Climate Reanalysis,01-01-81,01-01-23,1981,2023,image_collection,"cds, climate, copernicus, ecmwf, era5_land, evaporation, heat, lakes, precipitation, pressure, radiation, reanalysis, runoff, snow, soil_water, temperature, vegetation, wind",https://developers.google.com/earth-engine/datasets/catalog/ECMWF_ERA5_LAND_MONTHLY_BY_HOUR#terms-of-use,https://developers.google.com/earth-engine/datasets/images/ECMWF/ECMWF_ERA5_LAND_MONTHLY_BY_HOUR_sample.png +ECMWF/ERA5/MONTHLY,ECMWF / Copernicus Climate Change Service,ERA5 Monthly Aggregates - Latest Climate Reanalysis Produced by ECMWF / Copernicus Climate Change Service,01-01-79,01-06-20,1979,2020,image_collection,"climate, copernicus, dewpoint, ecmwf, era5, precipitation, pressure, reanalysis, surface, temperature, wind",https://developers.google.com/earth-engine/datasets/catalog/ECMWF_ERA5_MONTHLY#terms-of-use,https://developers.google.com/earth-engine/datasets/images/ECMWF/ECMWF_ERA5_MONTHLY_sample.png +EO1/HYPERION,USGS,EO-1 Hyperion Hyperspectral Imager,01-05-01,13-03-17,2001,2017,image_collection,"eo_1, hyperion, hyperspectral, usgs",https://developers.google.com/earth-engine/datasets/catalog/EO1_HYPERION#terms-of-use,https://developers.google.com/earth-engine/datasets/images/EO1/EO1_HYPERION_sample.png +EPA/Ecoregions/2013/L3,United States Environmental Protection Agency,US EPA Ecoregions (Level III),16-04-13,17-04-13,2013,2013,table,"ecoregions, epa",https://developers.google.com/earth-engine/datasets/catalog/EPA_Ecoregions_2013_L3#terms-of-use,https://developers.google.com/earth-engine/datasets/images/EPA/EPA_Ecoregions_2013_L3_sample.png +EPA/Ecoregions/2013/L4,United States Environmental Protection Agency,US EPA Ecoregions (Level IV),16-04-13,17-04-13,2013,2013,table,"ecoregions, epa",https://developers.google.com/earth-engine/datasets/catalog/EPA_Ecoregions_2013_L4#terms-of-use,https://developers.google.com/earth-engine/datasets/images/EPA/EPA_Ecoregions_2013_L4_sample.png +ESA/CCI/FireCCI/5_1,"European Space Agency (ESA) Climate Change Initiative (CCI) Programme, Fire ECV","FireCCI51: MODIS Fire_cci Burned Area Pixel Product, Version 5.1",01-01-01,01-12-20,2001,2020,image_collection,"burn, c3s, cci, climate_change, copernicus, esa, fire, firecci, firecci51, fragmentation, gcos, geophysical, global, human_modification, landcover, landscape_gradient, modis, monthly, stressors",https://developers.google.com/earth-engine/datasets/catalog/ESA_CCI_FireCCI_5_1#terms-of-use,https://developers.google.com/earth-engine/datasets/images/ESA/ESA_CCI_FireCCI_5_1_sample.png +ESA/GLOBCOVER_L4_200901_200912_V2_3,ESA,GlobCover: Global Land Cover Map,01-01-09,01-01-10,2009,2010,image,"esa, globcover, landcover",https://developers.google.com/earth-engine/datasets/catalog/ESA_GLOBCOVER_L4_200901_200912_V2_3#terms-of-use,https://developers.google.com/earth-engine/datasets/images/ESA/ESA_GLOBCOVER_L4_200901_200912_V2_3_sample.png +ESA/WorldCover/v100,ESA/VITO/Brockmann Consult/CS/GAMMA Remote Sensing/IIASA/WUR,ESA WorldCover 10m v100,01-01-20,01-01-21,2020,2021,image_collection,"esa, landcover, landuse, sentinel1_derived, sentinel2_derived",https://developers.google.com/earth-engine/datasets/catalog/ESA_WorldCover_v100#terms-of-use,https://developers.google.com/earth-engine/datasets/images/ESA/ESA_WorldCover_v100_sample.png +ESA/WorldCover/v200,ESA/VITO/Brockmann Consult/CS/GAMMA Remote Sensing/IIASA/WUR,ESA WorldCover 10m v200,01-01-21,01-01-22,2021,2022,image_collection,"esa, landcover, landuse, sentinel1_derived, sentinel2_derived",https://developers.google.com/earth-engine/datasets/catalog/ESA_WorldCover_v200#terms-of-use,https://developers.google.com/earth-engine/datasets/images/ESA/ESA_WorldCover_v200_sample.png +FAO/GAUL/2015/level0,FAO UN,"FAO GAUL: Global Administrative Unit Layers 2015, Country Boundaries",19-12-14,19-12-14,2014,2014,table,"borders, countries, fao, gaul, un",https://developers.google.com/earth-engine/datasets/catalog/FAO_GAUL_2015_level0#terms-of-use,https://developers.google.com/earth-engine/datasets/images/FAO/FAO_GAUL_2015_level0_sample.png +FAO/GAUL/2015/level1,FAO UN,"FAO GAUL: Global Administrative Unit Layers 2015, First-Level Administrative Units",19-12-14,19-12-14,2014,2014,table,"borders, departments, fao, gaul, provinces, states, un",https://developers.google.com/earth-engine/datasets/catalog/FAO_GAUL_2015_level1#terms-of-use,https://developers.google.com/earth-engine/datasets/images/FAO/FAO_GAUL_2015_level1_sample.png +FAO/GAUL/2015/level2,FAO UN,"FAO GAUL: Global Administrative Unit Layers 2015, Second-Level Administrative Units",19-12-14,19-12-14,2014,2014,table,"borders, county, districts, fao, gaul, un",https://developers.google.com/earth-engine/datasets/catalog/FAO_GAUL_2015_level2#terms-of-use,https://developers.google.com/earth-engine/datasets/images/FAO/FAO_GAUL_2015_level2_sample.png +FAO/GAUL_SIMPLIFIED_500m/2015/level0,FAO UN,"FAO GAUL 500m: Global Administrative Unit Layers 2015, Country Boundaries",19-12-14,19-12-14,2014,2014,table,"borders, countries, fao, gaul, un",https://developers.google.com/earth-engine/datasets/catalog/FAO_GAUL_SIMPLIFIED_500m_2015_level0#terms-of-use,https://developers.google.com/earth-engine/datasets/images/FAO/FAO_GAUL_SIMPLIFIED_500m_2015_level0_sample.png +FAO/GAUL_SIMPLIFIED_500m/2015/level1,FAO UN,"FAO GAUL 500m: Global Administrative Unit Layers 2015, First-Level Administrative Units",19-12-14,19-12-14,2014,2014,table,"borders, departments, fao, gaul, provinces, states, un",https://developers.google.com/earth-engine/datasets/catalog/FAO_GAUL_SIMPLIFIED_500m_2015_level1#terms-of-use,https://developers.google.com/earth-engine/datasets/images/FAO/FAO_GAUL_SIMPLIFIED_500m_2015_level1_sample.png +FAO/GAUL_SIMPLIFIED_500m/2015/level2,FAO UN,"FAO GAUL 500m: Global Administrative Unit Layers 2015, Second-Level Administrative Units",19-12-14,19-12-14,2014,2014,table,"borders, county, districts, fao, gaul, un",https://developers.google.com/earth-engine/datasets/catalog/FAO_GAUL_SIMPLIFIED_500m_2015_level2#terms-of-use,https://developers.google.com/earth-engine/datasets/images/FAO/FAO_GAUL_SIMPLIFIED_500m_2015_level2_sample.png +FAO/GHG/1/DROSA_A,FAO UN,UN FAO Drained Organic Soils Area (Annual),01-01-92,01-01-18,1992,2018,image_collection,"agriculture, climate_change, emissions, fao, ghg, organic_soils",https://developers.google.com/earth-engine/datasets/catalog/FAO_GHG_1_DROSA_A#terms-of-use,https://developers.google.com/earth-engine/datasets/images/FAO/FAO_GHG_1_DROSA_A_sample.png +FAO/GHG/1/DROSE_A,FAO UN,Drained Organic Soils Emissions (Annual),01-01-92,01-01-18,1992,2018,image_collection,"agriculture, climate_change, emissions, fao, ghg, organic_soils",https://developers.google.com/earth-engine/datasets/catalog/FAO_GHG_1_DROSE_A#terms-of-use,https://developers.google.com/earth-engine/datasets/images/FAO/FAO_GHG_1_DROSE_A_sample.png +FAO/SOFO/1/FPP,FAO Forestry Division (FPP 1km),Forest proximate people (FPP),01-01-19,01-01-19,2019,2019,image_collection,"agriculture, fao, forest, global, population, rural_area",https://developers.google.com/earth-engine/datasets/catalog/FAO_SOFO_1_FPP#terms-of-use,https://developers.google.com/earth-engine/datasets/images/FAO/FAO_SOFO_1_FPP_sample.png +FAO/SOFO/1/TPP,FAO Forestry Division (TPP 500m cropland),Tree proximate people (TPP),01-01-19,01-01-19,2019,2019,image_collection,"agriculture, fao, forest, global, population, rural_area",https://developers.google.com/earth-engine/datasets/catalog/FAO_SOFO_1_TPP#terms-of-use,https://developers.google.com/earth-engine/datasets/images/FAO/FAO_SOFO_1_TPP_sample.png +FAO/WAPOR/2/L1_AETI_D,FAO UN,WAPOR Actual Evapotranspiration and Interception,01-01-09,01-03-23,2009,2023,image_collection,"agriculture, fao, wapor, water",https://developers.google.com/earth-engine/datasets/catalog/FAO_WAPOR_2_L1_AETI_D#terms-of-use,https://developers.google.com/earth-engine/datasets/images/FAO/FAO_WAPOR_2_L1_AETI_D_sample.png +FAO/WAPOR/2/L1_E_D,FAO UN,WAPOR Dekadal Evaporation,01-01-09,01-03-23,2009,2023,image_collection,"agriculture, fao, wapor, water",https://developers.google.com/earth-engine/datasets/catalog/FAO_WAPOR_2_L1_E_D#terms-of-use,https://developers.google.com/earth-engine/datasets/images/FAO/FAO_WAPOR_2_L1_E_D_sample.png +FAO/WAPOR/2/L1_I_D,FAO UN,WAPOR Dekadal Interception,01-01-09,01-03-23,2009,2023,image_collection,"agriculture, fao, wapor, water",https://developers.google.com/earth-engine/datasets/catalog/FAO_WAPOR_2_L1_I_D#terms-of-use,https://developers.google.com/earth-engine/datasets/images/FAO/FAO_WAPOR_2_L1_I_D_sample.png +FAO/WAPOR/2/L1_NPP_D,FAO UN,WAPOR Dekadal Net Primary Production,01-01-09,01-03-23,2009,2023,image_collection,"agriculture, fao, wapor, water",https://developers.google.com/earth-engine/datasets/catalog/FAO_WAPOR_2_L1_NPP_D#terms-of-use,https://developers.google.com/earth-engine/datasets/images/FAO/FAO_WAPOR_2_L1_NPP_D_sample.png +FAO/WAPOR/2/L1_RET_D,FAO UN,WAPOR Dekadal Reference Evapotranspiration,01-01-09,11-03-23,2009,2023,image_collection,"agriculture, fao, wapor, water",https://developers.google.com/earth-engine/datasets/catalog/FAO_WAPOR_2_L1_RET_D#terms-of-use,https://developers.google.com/earth-engine/datasets/images/FAO/FAO_WAPOR_2_L1_RET_D_sample.png +FAO/WAPOR/2/L1_RET_E,FAO UN,WAPOR Daily Reference Evapotranspiration,01-01-09,20-03-23,2009,2023,image_collection,"agriculture, fao, wapor, water",https://developers.google.com/earth-engine/datasets/catalog/FAO_WAPOR_2_L1_RET_E#terms-of-use,https://developers.google.com/earth-engine/datasets/images/FAO/FAO_WAPOR_2_L1_RET_E_sample.png +FAO/WAPOR/2/L1_T_D,FAO UN,WAPOR Dekadal Transpiration,01-01-09,01-03-23,2009,2023,image_collection,"agriculture, fao, wapor, water",https://developers.google.com/earth-engine/datasets/catalog/FAO_WAPOR_2_L1_T_D#terms-of-use,https://developers.google.com/earth-engine/datasets/images/FAO/FAO_WAPOR_2_L1_T_D_sample.png +FIRMS,NASA / LANCE / EOSDIS,FIRMS: Fire Information for Resource Management System,01-11-00,25-03-23,2000,2023,image_collection,"eosdis, fire, firms, geophysical, hotspot, lance, modis, nasa, thermal",https://developers.google.com/earth-engine/datasets/catalog/FIRMS#terms-of-use,https://developers.google.com/earth-engine/datasets/images/FIRMS/FIRMS_sample.png +FORMA/FORMA_500m,"Global Forest Watch, World Resources Institute","FORMA Global Forest Watch Deforestation Alerts, 500m [deprecated]",01-01-06,10-06-15,2006,2015,image,"alerts, deforestation, forest, forma, geophysical, gfw, modis, nasa, wri",https://developers.google.com/earth-engine/datasets/catalog/FORMA_FORMA_500m#terms-of-use,https://developers.google.com/earth-engine/datasets/images/FORMA/FORMA_FORMA_500m_sample.png +Finland/MAVI/VV/50cm,NLS orthophotos,Finland NRG NLS orthophotos 50 cm by Mavi,01-01-15,01-01-18,2015,2018,image_collection,"falsecolor, finland, mavi, nrg, orthophoto",https://developers.google.com/earth-engine/datasets/catalog/Finland_MAVI_VV_50cm#terms-of-use,https://developers.google.com/earth-engine/datasets/images/Finland/Finland_MAVI_VV_50cm_sample.png +Finland/SMK/VV/50cm,NLS orthophotos,Finland NRG NLS orthophotos 50 cm by SMK,01-01-15,01-01-22,2015,2022,image_collection,"falsecolor, finland, nrg, orthophoto, smk",https://developers.google.com/earth-engine/datasets/catalog/Finland_SMK_VV_50cm#terms-of-use,https://developers.google.com/earth-engine/datasets/images/Finland/Finland_SMK_VV_50cm_sample.png +Finland/SMK/V/50cm,NLS orthophotos,Finland RGB NLS orthophotos 50 cm by SMK,01-01-15,01-01-23,2015,2023,image_collection,"finland, orthophoto, rgb, smk",https://developers.google.com/earth-engine/datasets/catalog/Finland_SMK_V_50cm#terms-of-use,https://developers.google.com/earth-engine/datasets/images/Finland/Finland_SMK_V_50cm_sample.png +GFW/GFF/V1/fishing_hours,Global Fishing Watch,GFW (Global Fishing Watch) Daily Fishing Hours,01-01-12,01-01-17,2012,2017,image_collection,"fishing, gfw, marine, monthly, ocean",https://developers.google.com/earth-engine/datasets/catalog/GFW_GFF_V1_fishing_hours#terms-of-use,https://developers.google.com/earth-engine/datasets/images/GFW/GFW_GFF_V1_fishing_hours_sample.png +GFW/GFF/V1/vessel_hours,Global Fishing Watch,GFW (Global Fishing Watch) Daily Vessel Hours,01-01-12,01-01-17,2012,2017,image_collection,"fishing, gfw, marine, monthly, ocean",https://developers.google.com/earth-engine/datasets/catalog/GFW_GFF_V1_vessel_hours#terms-of-use,https://developers.google.com/earth-engine/datasets/images/GFW/GFW_GFF_V1_vessel_hours_sample.png +GLCF/GLS_TCC,NASA LP DAAC at the USGS EROS Center,GLCF: Landsat Tree Cover Continuous Fields [deprecated],01-01-00,31-12-10,2000,2010,image_collection,"forest, glcf, landsat_derived, nasa, umd",https://developers.google.com/earth-engine/datasets/catalog/GLCF_GLS_TCC#terms-of-use,https://developers.google.com/earth-engine/datasets/images/GLCF/GLCF_GLS_TCC_sample.png +GLCF/GLS_WATER,NASA LP DAAC at the USGS EROS Center,GLCF: Landsat Global Inland Water,01-01-00,31-12-00,2000,2000,image_collection,"glcf, landsat_derived, nasa, umd, water",https://developers.google.com/earth-engine/datasets/catalog/GLCF_GLS_WATER#terms-of-use,https://developers.google.com/earth-engine/datasets/images/GLCF/GLCF_GLS_WATER_sample.png +GLIMS/2016,National Snow and Ice Data Center (NSDIC),GLIMS 2016: Global Land Ice Measurements From Space [deprecated],1870-01-01,09-11-11,1870,2011,table,"glacier, glims, ice, landcover, nasa, nsidc, snow",https://developers.google.com/earth-engine/datasets/catalog/GLIMS_2016#terms-of-use,https://developers.google.com/earth-engine/datasets/images/GLIMS/GLIMS_2016_sample.png +GLIMS/20171027,National Snow and Ice Data Center (NSDIC),GLIMS 2017: Global Land Ice Measurements From Space [deprecated],1850-01-01,19-08-16,1850,2016,table,"glacier, glims, ice, landcover, nasa, nsidc, snow",https://developers.google.com/earth-engine/datasets/catalog/GLIMS_20171027#terms-of-use,https://developers.google.com/earth-engine/datasets/images/GLIMS/GLIMS_20171027_sample.png +GLIMS/20210914,National Snow and Ice Data Center (NSDIC),GLIMS 2021: Global Land Ice Measurements From Space,1750-01-01,18-07-19,1750,2019,table,"glacier, glims, ice, landcover, nasa, nsidc, snow",https://developers.google.com/earth-engine/datasets/catalog/GLIMS_20210914#terms-of-use,https://developers.google.com/earth-engine/datasets/images/GLIMS/GLIMS_20210914_sample.png +GLIMS/current,National Snow and Ice Data Center (NSDIC),GLIMS Current: Global Land Ice Measurements From Space,1750-01-01,18-07-19,1750,2019,table,"glacier, glims, ice, landcover, nasa, nsidc, snow",https://developers.google.com/earth-engine/datasets/catalog/GLIMS_current#terms-of-use,https://developers.google.com/earth-engine/datasets/images/GLIMS/GLIMS_current_sample.png +GLOBAL_FLOOD_DB/MODIS_EVENTS/V1,Cloud to Street (C2S) / Dartmouth Flood Observatory (DFO),Global Flood Database v1 (2000-2018),17-02-00,10-12-18,2000,2018,image_collection,"c2s, cloudtostreet, dartmouth, dfo, flood, gfd, inundation, surface, water",https://developers.google.com/earth-engine/datasets/catalog/GLOBAL_FLOOD_DB_MODIS_EVENTS_V1#terms-of-use,https://developers.google.com/earth-engine/datasets/images/GLOBAL_FLOOD_DB/GLOBAL_FLOOD_DB_MODIS_EVENTS_V1_sample.png +GOOGLE/DYNAMICWORLD/V1,World Resources Institute,Dynamic World V1,23-06-15,26-03-23,2015,2023,image_collection,"global, google, landcover, landuse, nrt, sentinel2_derived",https://developers.google.com/earth-engine/datasets/catalog/GOOGLE_DYNAMICWORLD_V1#terms-of-use,https://developers.google.com/earth-engine/datasets/images/GOOGLE/GOOGLE_DYNAMICWORLD_V1_sample.png +GOOGLE/Research/open-buildings/v1/polygons,Google Research - Open Buildings,Open Buildings V1 Polygons [deprecated],30-04-21,30-04-21,2021,2021,table,"africa, building, built_up, open_buildings, structure",https://developers.google.com/earth-engine/datasets/catalog/GOOGLE_Research_open-buildings_v1_polygons#terms-of-use,https://developers.google.com/earth-engine/datasets/images/GOOGLE/GOOGLE_Research_open-buildings_v1_polygons_sample.png +GOOGLE/Research/open-buildings/v2/polygons,Google Research - Open Buildings,Open Buildings V2 Polygons,30-08-22,30-08-22,2022,2022,table,"africa, asia, building, built_up, open_buildings, south_asia, southeast_asia, structure",https://developers.google.com/earth-engine/datasets/catalog/GOOGLE_Research_open-buildings_v2_polygons#terms-of-use,https://developers.google.com/earth-engine/datasets/images/GOOGLE/GOOGLE_Research_open-buildings_v2_polygons_sample.png +GRIDMET/DROUGHT,University of California Merced,GRIDMET DROUGHT: CONUS Drought Indices,05-01-80,21-03-23,1980,2023,image_collection,"climate, climatic_water_balance, conus, crop, drought, eddi, evapotranspiration, geophysical, gridmet, merced, metdata, palmer, pdsi, precipitation, spei, spi",https://developers.google.com/earth-engine/datasets/catalog/GRIDMET_DROUGHT#terms-of-use,https://developers.google.com/earth-engine/datasets/images/GRIDMET/GRIDMET_DROUGHT_sample.png +Germany/Brandenburg/orthos/20cm,Brandenburg orthophotos,Brandenburg (Germany) RGBN orthophotos 20 cm,23-08-21,20-01-23,2021,2023,image_collection,"brandenburg, germany, orthophoto, rgbn",https://developers.google.com/earth-engine/datasets/catalog/Germany_Brandenburg_orthos_20cm#terms-of-use,https://developers.google.com/earth-engine/datasets/images/Germany/Germany_Brandenburg_orthos_20cm_sample.png +HYCOM/GLBu0_08/sea_surface_elevation,NOPP,"HYCOM: Hybrid Coordinate Ocean Model, Sea Surface Elevation [deprecated]",02-10-92,09-12-18,1992,2018,image_collection,"elevation, hycom, nopp, ocean, ssh, water",https://developers.google.com/earth-engine/datasets/catalog/HYCOM_GLBu0_08_sea_surface_elevation#terms-of-use,https://developers.google.com/earth-engine/datasets/images/HYCOM/HYCOM_GLBu0_08_sea_surface_elevation_sample.png +HYCOM/GLBu0_08/sea_temp_salinity,NOPP,"HYCOM: Hybrid Coordinate Ocean Model, Water Temperature and Salinity [deprecated]",02-10-92,09-12-18,1992,2018,image_collection,"hycom, nopp, ocean, salinity, sst, water, water_temp",https://developers.google.com/earth-engine/datasets/catalog/HYCOM_GLBu0_08_sea_temp_salinity#terms-of-use,https://developers.google.com/earth-engine/datasets/images/HYCOM/HYCOM_GLBu0_08_sea_temp_salinity_sample.png +HYCOM/GLBu0_08/sea_water_velocity,NOPP,"HYCOM: Hybrid Coordinate Ocean Model, Water Velocity [deprecated]",02-10-92,09-12-18,1992,2018,image_collection,"hycom, nopp, ocean, velocity, water",https://developers.google.com/earth-engine/datasets/catalog/HYCOM_GLBu0_08_sea_water_velocity#terms-of-use,https://developers.google.com/earth-engine/datasets/images/HYCOM/HYCOM_GLBu0_08_sea_water_velocity_sample.png +HYCOM/sea_surface_elevation,NOPP,"HYCOM: Hybrid Coordinate Ocean Model, Sea Surface Elevation",02-10-92,25-03-23,1992,2023,image_collection,"elevation, hycom, nopp, ocean, ssh, water",https://developers.google.com/earth-engine/datasets/catalog/HYCOM_sea_surface_elevation#terms-of-use,https://developers.google.com/earth-engine/datasets/images/HYCOM/HYCOM_sea_surface_elevation_sample.png +HYCOM/sea_temp_salinity,NOPP,"HYCOM: Hybrid Coordinate Ocean Model, Water Temperature and Salinity",02-10-92,25-03-23,1992,2023,image_collection,"hycom, nopp, ocean, salinity, sst, water, water_temp",https://developers.google.com/earth-engine/datasets/catalog/HYCOM_sea_temp_salinity#terms-of-use,https://developers.google.com/earth-engine/datasets/images/HYCOM/HYCOM_sea_temp_salinity_sample.png +HYCOM/sea_water_velocity,NOPP,"HYCOM: Hybrid Coordinate Ocean Model, Water Velocity",02-10-92,24-03-23,1992,2023,image_collection,"hycom, nopp, ocean, velocity, water",https://developers.google.com/earth-engine/datasets/catalog/HYCOM_sea_water_velocity#terms-of-use,https://developers.google.com/earth-engine/datasets/images/HYCOM/HYCOM_sea_water_velocity_sample.png +IDAHO_EPSCOR/GRIDMET,University of California Merced,GRIDMET: University of Idaho Gridded Surface Meteorological Dataset,01-01-79,24-03-23,1979,2023,image_collection,"climate, fireburning, gridmet, humidity, merced, metdata, nfdrs, precipitation, radiation, temperature, wind",https://developers.google.com/earth-engine/datasets/catalog/IDAHO_EPSCOR_GRIDMET#terms-of-use,https://developers.google.com/earth-engine/datasets/images/IDAHO_EPSCOR/IDAHO_EPSCOR_GRIDMET_sample.png +IDAHO_EPSCOR/MACAv2_METDATA,University of California Merced,"MACAv2-METDATA: University of Idaho, Multivariate Adaptive Constructed Analogs Applied to Global Climate Models",01-01-00,31-12-00,1900,2100,image_collection,"climate, conus, geophysical, idaho, maca, monthly",https://developers.google.com/earth-engine/datasets/catalog/IDAHO_EPSCOR_MACAv2_METDATA#terms-of-use,https://developers.google.com/earth-engine/datasets/images/IDAHO_EPSCOR/IDAHO_EPSCOR_MACAv2_METDATA_sample.png +IDAHO_EPSCOR/MACAv2_METDATA_MONTHLY,University of California Merced,"MACAv2-METDATA Monthly Summaries: University of Idaho, Multivariate Adaptive Constructed Analogs Applied to Global Climate Models",01-01-00,31-12-99,1900,2099,image_collection,"climate, conus, geophysical, idaho, maca, monthly",https://developers.google.com/earth-engine/datasets/catalog/IDAHO_EPSCOR_MACAv2_METDATA_MONTHLY#terms-of-use,https://developers.google.com/earth-engine/datasets/images/IDAHO_EPSCOR/IDAHO_EPSCOR_MACAv2_METDATA_MONTHLY_sample.png +IDAHO_EPSCOR/PDSI,University of California Merced,PDSI: University of Idaho Palmer Drought Severity Index [deprecated],01-03-79,20-06-20,1979,2020,image_collection,"climate, conus, crop, drought, geophysical, merced, palmer, pdsi",https://developers.google.com/earth-engine/datasets/catalog/IDAHO_EPSCOR_PDSI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/IDAHO_EPSCOR/IDAHO_EPSCOR_PDSI_sample.png +IDAHO_EPSCOR/TERRACLIMATE,University of California Merced,"TerraClimate: Monthly Climate and Climatic Water Balance for Global Terrestrial Surfaces, University of Idaho",01-01-58,01-12-21,1958,2021,image_collection,"climate, drought, evapotranspiration, geophysical, global, merced, monthly, palmer, pdsi, precipitation, runoff, temperature, vapor, wind",https://developers.google.com/earth-engine/datasets/catalog/IDAHO_EPSCOR_TERRACLIMATE#terms-of-use,https://developers.google.com/earth-engine/datasets/images/IDAHO_EPSCOR/IDAHO_EPSCOR_TERRACLIMATE_sample.png +IGN/RGE_ALTI/1M/2_0,IGN,RGE ALTI: IGN RGE ALTI Digital Elevation 1m,01-01-09,01-01-21,2009,2021,image_collection,"dem, elevation, geophysical",https://developers.google.com/earth-engine/datasets/catalog/IGN_RGE_ALTI_1M_2_0#terms-of-use,https://developers.google.com/earth-engine/datasets/images/IGN/IGN_RGE_ALTI_1M_2_0_sample.png +ISDASOIL/Africa/v1/aluminium_extractable,iSDA,iSDAsoil extractable Aluminium,01-01-01,01-01-17,2001,2017,image,"africa, aluminium, isda, soil",https://developers.google.com/earth-engine/datasets/catalog/ISDASOIL_Africa_v1_aluminium_extractable#terms-of-use,https://developers.google.com/earth-engine/datasets/images/ISDASOIL/ISDASOIL_Africa_v1_aluminium_extractable_sample.png +ISDASOIL/Africa/v1/bedrock_depth,iSDA,iSDAsoil Depth to Bedrock,01-01-01,01-01-17,2001,2017,image,"africa, bedrock, isda, soil",https://developers.google.com/earth-engine/datasets/catalog/ISDASOIL_Africa_v1_bedrock_depth#terms-of-use,https://developers.google.com/earth-engine/datasets/images/ISDASOIL/ISDASOIL_Africa_v1_bedrock_depth_sample.png +ISDASOIL/Africa/v1/bulk_density,iSDA,"iSDAsoil Bulk Density, <2mm Fraction",01-01-01,01-01-17,2001,2017,image,"africa, bulk_density, isda, soil",https://developers.google.com/earth-engine/datasets/catalog/ISDASOIL_Africa_v1_bulk_density#terms-of-use,https://developers.google.com/earth-engine/datasets/images/ISDASOIL/ISDASOIL_Africa_v1_bulk_density_sample.png +ISDASOIL/Africa/v1/calcium_extractable,iSDA,iSDAsoil Extractable Calcium,01-01-01,01-01-17,2001,2017,image,"africa, calcium, isda, soil",https://developers.google.com/earth-engine/datasets/catalog/ISDASOIL_Africa_v1_calcium_extractable#terms-of-use,https://developers.google.com/earth-engine/datasets/images/ISDASOIL/ISDASOIL_Africa_v1_calcium_extractable_sample.png +ISDASOIL/Africa/v1/carbon_organic,iSDA,iSDAsoil Organic Carbon,01-01-01,01-01-17,2001,2017,image,"africa, carbon, carbon_organic, isda, soil",https://developers.google.com/earth-engine/datasets/catalog/ISDASOIL_Africa_v1_carbon_organic#terms-of-use,https://developers.google.com/earth-engine/datasets/images/ISDASOIL/ISDASOIL_Africa_v1_carbon_organic_sample.png +ISDASOIL/Africa/v1/carbon_total,iSDA,iSDAsoil Total Carbon,01-01-01,01-01-17,2001,2017,image,"africa, aluminium, isda, soil",https://developers.google.com/earth-engine/datasets/catalog/ISDASOIL_Africa_v1_carbon_total#terms-of-use,https://developers.google.com/earth-engine/datasets/images/ISDASOIL/ISDASOIL_Africa_v1_carbon_total_sample.png +ISDASOIL/Africa/v1/cation_exchange_capacity,iSDA,iSDAsoil Effective Cation Exchange Capacity,01-01-01,01-01-17,2001,2017,image,"africa, aluminium, isda, soil",https://developers.google.com/earth-engine/datasets/catalog/ISDASOIL_Africa_v1_cation_exchange_capacity#terms-of-use,https://developers.google.com/earth-engine/datasets/images/ISDASOIL/ISDASOIL_Africa_v1_cation_exchange_capacity_sample.png +ISDASOIL/Africa/v1/clay_content,iSDA,iSDAsoil Clay Content,01-01-01,01-01-17,2001,2017,image,"africa, clay, isda, soil",https://developers.google.com/earth-engine/datasets/catalog/ISDASOIL_Africa_v1_clay_content#terms-of-use,https://developers.google.com/earth-engine/datasets/images/ISDASOIL/ISDASOIL_Africa_v1_clay_content_sample.png +ISDASOIL/Africa/v1/fcc,iSDA,iSDAsoil Fertility Capability Classification,01-01-01,01-01-17,2001,2017,image,"africa, fcc, isda, soil",https://developers.google.com/earth-engine/datasets/catalog/ISDASOIL_Africa_v1_fcc#terms-of-use,https://developers.google.com/earth-engine/datasets/images/ISDASOIL/ISDASOIL_Africa_v1_fcc_sample.png +ISDASOIL/Africa/v1/iron_extractable,iSDA,iSDAsoil Extractable Iron,01-01-01,01-01-17,2001,2017,image,"africa, iron, isda, soil",https://developers.google.com/earth-engine/datasets/catalog/ISDASOIL_Africa_v1_iron_extractable#terms-of-use,https://developers.google.com/earth-engine/datasets/images/ISDASOIL/ISDASOIL_Africa_v1_iron_extractable_sample.png +ISDASOIL/Africa/v1/magnesium_extractable,iSDA,iSDAsoil Extractable Magnesium,01-01-01,01-01-17,2001,2017,image,"africa, isda, magnesium, soil",https://developers.google.com/earth-engine/datasets/catalog/ISDASOIL_Africa_v1_magnesium_extractable#terms-of-use,https://developers.google.com/earth-engine/datasets/images/ISDASOIL/ISDASOIL_Africa_v1_magnesium_extractable_sample.png +ISDASOIL/Africa/v1/nitrogen_total,iSDA,iSDAsoil Total Nitrogen,01-01-01,01-01-17,2001,2017,image,"africa, isda, nitrogen, soil",https://developers.google.com/earth-engine/datasets/catalog/ISDASOIL_Africa_v1_nitrogen_total#terms-of-use,https://developers.google.com/earth-engine/datasets/images/ISDASOIL/ISDASOIL_Africa_v1_nitrogen_total_sample.png +ISDASOIL/Africa/v1/ph,iSDA,iSDAsoil pH,01-01-01,01-01-17,2001,2017,image,"africa, isda, ph, soil",https://developers.google.com/earth-engine/datasets/catalog/ISDASOIL_Africa_v1_ph#terms-of-use,https://developers.google.com/earth-engine/datasets/images/ISDASOIL/ISDASOIL_Africa_v1_ph_sample.png +ISDASOIL/Africa/v1/phosphorus_extractable,iSDA,iSDAsoil Extractable Phosphorus,01-01-01,01-01-17,2001,2017,image,"africa, isda, phosphorus, soil",https://developers.google.com/earth-engine/datasets/catalog/ISDASOIL_Africa_v1_phosphorus_extractable#terms-of-use,https://developers.google.com/earth-engine/datasets/images/ISDASOIL/ISDASOIL_Africa_v1_phosphorus_extractable_sample.png +ISDASOIL/Africa/v1/potassium_extractable,iSDA,iSDAsoil Extractable Potassium,01-01-01,01-01-17,2001,2017,image,"africa, isda, potassium, soil",https://developers.google.com/earth-engine/datasets/catalog/ISDASOIL_Africa_v1_potassium_extractable#terms-of-use,https://developers.google.com/earth-engine/datasets/images/ISDASOIL/ISDASOIL_Africa_v1_potassium_extractable_sample.png +ISDASOIL/Africa/v1/sand_content,iSDA,iSDAsoil Sand Content,01-01-01,01-01-17,2001,2017,image,"africa, isda, sand, soil",https://developers.google.com/earth-engine/datasets/catalog/ISDASOIL_Africa_v1_sand_content#terms-of-use,https://developers.google.com/earth-engine/datasets/images/ISDASOIL/ISDASOIL_Africa_v1_sand_content_sample.png +ISDASOIL/Africa/v1/silt_content,iSDA,iSDAsoil Silt Content,01-01-01,01-01-17,2001,2017,image,"africa, isda, silt, soil",https://developers.google.com/earth-engine/datasets/catalog/ISDASOIL_Africa_v1_silt_content#terms-of-use,https://developers.google.com/earth-engine/datasets/images/ISDASOIL/ISDASOIL_Africa_v1_silt_content_sample.png +ISDASOIL/Africa/v1/stone_content,iSDA,iSDAsoil Stone Content,01-01-01,01-01-17,2001,2017,image,"africa, isda, soil, stone",https://developers.google.com/earth-engine/datasets/catalog/ISDASOIL_Africa_v1_stone_content#terms-of-use,https://developers.google.com/earth-engine/datasets/images/ISDASOIL/ISDASOIL_Africa_v1_stone_content_sample.png +ISDASOIL/Africa/v1/sulphur_extractable,iSDA,iSDAsoil Extractable Sulfur,01-01-01,01-01-17,2001,2017,image,"africa, isda, soil, sulfur",https://developers.google.com/earth-engine/datasets/catalog/ISDASOIL_Africa_v1_sulphur_extractable#terms-of-use,https://developers.google.com/earth-engine/datasets/images/ISDASOIL/ISDASOIL_Africa_v1_sulphur_extractable_sample.png +ISDASOIL/Africa/v1/texture_class,iSDA,iSDAsoil USDA Texture Class,01-01-01,01-01-17,2001,2017,image,"africa, aluminium, isda, soil",https://developers.google.com/earth-engine/datasets/catalog/ISDASOIL_Africa_v1_texture_class#terms-of-use,https://developers.google.com/earth-engine/datasets/images/ISDASOIL/ISDASOIL_Africa_v1_texture_class_sample.png +ISDASOIL/Africa/v1/zinc_extractable,iSDA,iSDAsoil Extractable Zinc,01-01-01,01-01-17,2001,2017,image,"africa, isda, soil, zinc",https://developers.google.com/earth-engine/datasets/catalog/ISDASOIL_Africa_v1_zinc_extractable#terms-of-use,https://developers.google.com/earth-engine/datasets/images/ISDASOIL/ISDASOIL_Africa_v1_zinc_extractable_sample.png +JAXA/ALOS/AVNIR-2/ORI,JAXA Earth Observation Research Center,ALOS/AVNIR-2 ORI,26-04-06,18-04-11,2006,2011,image_collection,"alos, avnir_2, eorc, jaxa, orthophoto, visible",https://developers.google.com/earth-engine/datasets/catalog/JAXA_ALOS_AVNIR-2_ORI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/JAXA/JAXA_ALOS_AVNIR-2_ORI_sample.png +JAXA/ALOS/AW3D30/V1_1,JAXA Earth Observation Research Center,ALOS DSM: Global 30m v1.1 [deprecated],24-01-06,12-05-11,2006,2011,image,"alos, dem, elevation, geophysical, jaxa, topography",https://developers.google.com/earth-engine/datasets/catalog/JAXA_ALOS_AW3D30_V1_1#terms-of-use,https://developers.google.com/earth-engine/datasets/images/JAXA/JAXA_ALOS_AW3D30_V1_1_sample.png +JAXA/ALOS/AW3D30/V2_1,JAXA Earth Observation Research Center,ALOS DSM: Global 30m v2.1 [deprecated],24-01-06,12-05-11,2006,2011,image,"alos, dem, elevation, geophysical, jaxa, topography",https://developers.google.com/earth-engine/datasets/catalog/JAXA_ALOS_AW3D30_V2_1#terms-of-use,https://developers.google.com/earth-engine/datasets/images/JAXA/JAXA_ALOS_AW3D30_V2_1_sample.png +JAXA/ALOS/AW3D30/V2_2,JAXA Earth Observation Research Center,ALOS DSM: Global 30m v2.2 [deprecated],24-01-06,12-05-11,2006,2011,image,"alos, dem, elevation, geophysical, jaxa, topography",https://developers.google.com/earth-engine/datasets/catalog/JAXA_ALOS_AW3D30_V2_2#terms-of-use,https://developers.google.com/earth-engine/datasets/images/JAXA/JAXA_ALOS_AW3D30_V2_2_sample.png +JAXA/ALOS/AW3D30/V3_2,JAXA Earth Observation Research Center,ALOS DSM: Global 30m v3.2,24-01-06,12-05-11,2006,2011,image_collection,"alos, dem, elevation, geophysical, jaxa, topography",https://developers.google.com/earth-engine/datasets/catalog/JAXA_ALOS_AW3D30_V3_2#terms-of-use,https://developers.google.com/earth-engine/datasets/images/JAXA/JAXA_ALOS_AW3D30_V3_2_sample.png +JAXA/ALOS/PALSAR-2/Level2_2/ScanSAR,JAXA EORC,PALSAR-2 ScanSAR Level 2.2,04-08-14,31-12-22,2014,2022,image_collection,"alos2, eroc, jaxa, palsar2, radar, sar",https://developers.google.com/earth-engine/datasets/catalog/JAXA_ALOS_PALSAR-2_Level2_2_ScanSAR#terms-of-use,https://developers.google.com/earth-engine/datasets/images/JAXA/JAXA_ALOS_PALSAR-2_Level2_2_ScanSAR_sample.png +JAXA/ALOS/PALSAR/YEARLY/FNF4,JAXA EORC,Global 4-class PALSAR-2/PALSAR Forest/Non-Forest Map,01-01-17,01-01-21,2017,2021,image_collection,"alos, alos2, classification, eroc, forest, jaxa, landcover, palsar, palsar2, sar",https://developers.google.com/earth-engine/datasets/catalog/JAXA_ALOS_PALSAR_YEARLY_FNF4#terms-of-use,https://developers.google.com/earth-engine/datasets/images/JAXA/JAXA_ALOS_PALSAR_YEARLY_FNF4_sample.png +JAXA/ALOS/PALSAR/YEARLY/FNF,JAXA EORC,Global 3-class PALSAR-2/PALSAR Forest/Non-Forest Map,01-01-07,01-01-18,2007,2018,image_collection,"alos, alos2, classification, eroc, forest, jaxa, landcover, palsar, palsar2, sar",https://developers.google.com/earth-engine/datasets/catalog/JAXA_ALOS_PALSAR_YEARLY_FNF#terms-of-use,https://developers.google.com/earth-engine/datasets/images/JAXA/JAXA_ALOS_PALSAR_YEARLY_FNF_sample.png +JAXA/ALOS/PALSAR/YEARLY/SAR,JAXA EORC,"Global PALSAR-2/PALSAR Yearly Mosaic, version K",01-01-07,01-01-21,2007,2021,image_collection,"alos, alos2, eroc, jaxa, palsar, palsar2, sar",https://developers.google.com/earth-engine/datasets/catalog/JAXA_ALOS_PALSAR_YEARLY_SAR#terms-of-use,https://developers.google.com/earth-engine/datasets/images/JAXA/JAXA_ALOS_PALSAR_YEARLY_SAR_sample.png +JAXA/ALOS/PALSAR/YEARLY/SAR_EPOCH,JAXA EORC,"Global PALSAR-2/PALSAR Yearly Mosaic, version 2.1.2",01-01-15,01-01-22,2015,2022,image_collection,"alos, alos2, eroc, jaxa, palsar, palsar2, sar",https://developers.google.com/earth-engine/datasets/catalog/JAXA_ALOS_PALSAR_YEARLY_SAR_EPOCH#terms-of-use,https://developers.google.com/earth-engine/datasets/images/JAXA/JAXA_ALOS_PALSAR_YEARLY_SAR_EPOCH_sample.png +JAXA/GCOM-C/L3/LAND/LAI/V1,Global Change Observation Mission (GCOM),GCOM-C/SGLI L3 Leaf Area Index (V1),01-01-18,28-06-20,2018,2020,image_collection,"climate, g_portal, gcom, gcom_c, jaxa, lai, land, leaf_area_index",https://developers.google.com/earth-engine/datasets/catalog/JAXA_GCOM-C_L3_LAND_LAI_V1#terms-of-use,https://developers.google.com/earth-engine/datasets/images/JAXA/JAXA_GCOM-C_L3_LAND_LAI_V1_sample.png +JAXA/GCOM-C/L3/LAND/LAI/V2,Global Change Observation Mission (GCOM),GCOM-C/SGLI L3 Leaf Area Index (V2),01-01-18,28-11-21,2018,2021,image_collection,"climate, g_portal, gcom, gcom_c, jaxa, lai, land, leaf_area_index",https://developers.google.com/earth-engine/datasets/catalog/JAXA_GCOM-C_L3_LAND_LAI_V2#terms-of-use,https://developers.google.com/earth-engine/datasets/images/JAXA/JAXA_GCOM-C_L3_LAND_LAI_V2_sample.png +JAXA/GCOM-C/L3/LAND/LAI/V3,Global Change Observation Mission (GCOM),GCOM-C/SGLI L3 Leaf Area Index (V3),29-11-21,24-03-23,2021,2023,image_collection,"climate, g_portal, gcom, gcom_c, jaxa, lai, land, leaf_area_index",https://developers.google.com/earth-engine/datasets/catalog/JAXA_GCOM-C_L3_LAND_LAI_V3#terms-of-use,https://developers.google.com/earth-engine/datasets/images/JAXA/JAXA_GCOM-C_L3_LAND_LAI_V3_sample.png +JAXA/GCOM-C/L3/LAND/LST/V1,Global Change Observation Mission (GCOM),GCOM-C/SGLI L3 Land Surface Temperature (V1),01-01-18,28-06-20,2018,2020,image_collection,"climate, g_portal, gcom, gcom_c, jaxa, land, land_surface_temperature, lst",https://developers.google.com/earth-engine/datasets/catalog/JAXA_GCOM-C_L3_LAND_LST_V1#terms-of-use,https://developers.google.com/earth-engine/datasets/images/JAXA/JAXA_GCOM-C_L3_LAND_LST_V1_sample.png +JAXA/GCOM-C/L3/LAND/LST/V2,Global Change Observation Mission (GCOM),GCOM-C/SGLI L3 Land Surface Temperature (V2),01-01-18,28-11-21,2018,2021,image_collection,"climate, g_portal, gcom, gcom_c, jaxa, land, land_surface_temperature, lst",https://developers.google.com/earth-engine/datasets/catalog/JAXA_GCOM-C_L3_LAND_LST_V2#terms-of-use,https://developers.google.com/earth-engine/datasets/images/JAXA/JAXA_GCOM-C_L3_LAND_LST_V2_sample.png +JAXA/GCOM-C/L3/LAND/LST/V3,Global Change Observation Mission (GCOM),GCOM-C/SGLI L3 Land Surface Temperature (V3),29-11-21,24-03-23,2021,2023,image_collection,"climate, g_portal, gcom, gcom_c, jaxa, land, land_surface_temperature, lst",https://developers.google.com/earth-engine/datasets/catalog/JAXA_GCOM-C_L3_LAND_LST_V3#terms-of-use,https://developers.google.com/earth-engine/datasets/images/JAXA/JAXA_GCOM-C_L3_LAND_LST_V3_sample.png +JAXA/GCOM-C/L3/OCEAN/CHLA/V1,Global Change Observation Mission (GCOM),GCOM-C/SGLI L3 Chlorophyll-a Concentration (V1),01-01-18,28-06-20,2018,2020,image_collection,"chla, chlorophyll_a, climate, g_portal, gcom, gcom_c, jaxa, ocean, ocean_color",https://developers.google.com/earth-engine/datasets/catalog/JAXA_GCOM-C_L3_OCEAN_CHLA_V1#terms-of-use,https://developers.google.com/earth-engine/datasets/images/JAXA/JAXA_GCOM-C_L3_OCEAN_CHLA_V1_sample.png +JAXA/GCOM-C/L3/OCEAN/CHLA/V2,Global Change Observation Mission (GCOM),GCOM-C/SGLI L3 Chlorophyll-a Concentration (V2),01-01-18,28-11-21,2018,2021,image_collection,"chla, chlorophyll_a, climate, g_portal, gcom, gcom_c, jaxa, ocean, ocean_color",https://developers.google.com/earth-engine/datasets/catalog/JAXA_GCOM-C_L3_OCEAN_CHLA_V2#terms-of-use,https://developers.google.com/earth-engine/datasets/images/JAXA/JAXA_GCOM-C_L3_OCEAN_CHLA_V2_sample.png +JAXA/GCOM-C/L3/OCEAN/CHLA/V3,Global Change Observation Mission (GCOM),GCOM-C/SGLI L3 Chlorophyll-a Concentration (V3),29-11-21,23-03-23,2021,2023,image_collection,"chla, chlorophyll_a, climate, g_portal, gcom, gcom_c, jaxa, ocean, ocean_color",https://developers.google.com/earth-engine/datasets/catalog/JAXA_GCOM-C_L3_OCEAN_CHLA_V3#terms-of-use,https://developers.google.com/earth-engine/datasets/images/JAXA/JAXA_GCOM-C_L3_OCEAN_CHLA_V3_sample.png +JAXA/GCOM-C/L3/OCEAN/SST/V1,Global Change Observation Mission (GCOM),GCOM-C/SGLI L3 Sea Surface Temperature (V1),01-01-18,28-06-20,2018,2020,image_collection,"climate, g_portal, gcom, gcom_c, jaxa, ocean, sea_surface_temperature, sst",https://developers.google.com/earth-engine/datasets/catalog/JAXA_GCOM-C_L3_OCEAN_SST_V1#terms-of-use,https://developers.google.com/earth-engine/datasets/images/JAXA/JAXA_GCOM-C_L3_OCEAN_SST_V1_sample.png +JAXA/GCOM-C/L3/OCEAN/SST/V2,Global Change Observation Mission (GCOM),GCOM-C/SGLI L3 Sea Surface Temperature (V2),01-01-18,28-11-21,2018,2021,image_collection,"climate, g_portal, gcom, gcom_c, jaxa, ocean, sea_surface_temperature, sst",https://developers.google.com/earth-engine/datasets/catalog/JAXA_GCOM-C_L3_OCEAN_SST_V2#terms-of-use,https://developers.google.com/earth-engine/datasets/images/JAXA/JAXA_GCOM-C_L3_OCEAN_SST_V2_sample.png +JAXA/GCOM-C/L3/OCEAN/SST/V3,Global Change Observation Mission (GCOM),GCOM-C/SGLI L3 Sea Surface Temperature (V3),29-11-21,23-03-23,2021,2023,image_collection,"climate, g_portal, gcom, gcom_c, jaxa, ocean, sea_surface_temperature, sst",https://developers.google.com/earth-engine/datasets/catalog/JAXA_GCOM-C_L3_OCEAN_SST_V3#terms-of-use,https://developers.google.com/earth-engine/datasets/images/JAXA/JAXA_GCOM-C_L3_OCEAN_SST_V3_sample.png +JAXA/GPM_L3/GSMaP/v6/operational,JAXA Earth Observation Research Center,GSMaP Operational: Global Satellite Mapping of Precipitation,01-03-14,25-03-23,2014,2023,image_collection,"climate, geophysical, gpm, hourly, jaxa, precipitation, weather",https://developers.google.com/earth-engine/datasets/catalog/JAXA_GPM_L3_GSMaP_v6_operational#terms-of-use,https://developers.google.com/earth-engine/datasets/images/JAXA/JAXA_GPM_L3_GSMaP_v6_operational_sample.png +JAXA/GPM_L3/GSMaP/v6/reanalysis,JAXA Earth Observation Research Center,GSMaP Reanalysis: Global Satellite Mapping of Precipitation,01-03-00,12-03-14,2000,2014,image_collection,"climate, geophysical, gpm, hourly, jaxa, precipitation, weather",https://developers.google.com/earth-engine/datasets/catalog/JAXA_GPM_L3_GSMaP_v6_reanalysis#terms-of-use,https://developers.google.com/earth-engine/datasets/images/JAXA/JAXA_GPM_L3_GSMaP_v6_reanalysis_sample.png +JCU/Murray/GIC/global_tidal_wetland_change/2019,Murray/JCU,Murray Global Tidal Wetland Change v1.0 (1999-2019),01-01-99,31-12-19,1999,2019,image,"coastal, ecosystem, intertidal, landsat_derived, mangrove, murray, saltmarsh, tidal_flat, tidal_marsh",https://developers.google.com/earth-engine/datasets/catalog/JCU_Murray_GIC_global_tidal_wetland_change_2019#terms-of-use,https://developers.google.com/earth-engine/datasets/images/JCU/JCU_Murray_GIC_global_tidal_wetland_change_2019_sample.png +JRC/D5/EUCROPMAP/V1,Joint Research Center (JRC),EUCROPMAP 2018,01-01-18,01-01-19,2018,2019,image_collection,"crop, eu, jrc, lucas, sentinel1_derived",https://developers.google.com/earth-engine/datasets/catalog/JRC_D5_EUCROPMAP_V1#terms-of-use,https://developers.google.com/earth-engine/datasets/images/JRC/JRC_D5_EUCROPMAP_V1_sample.png +JRC/GHSL/P2016/BUILT_LDSMT_GLOBE_V1,EC JRC,"GHSL: Global Human Settlement Layers, Built-Up Grid 1975-1990-2000-2015 (P2016)",01-01-75,31-12-14,1975,2014,image,"built, builtup, jrc, landsat_derived, multitemporal",https://developers.google.com/earth-engine/datasets/catalog/JRC_GHSL_P2016_BUILT_LDSMT_GLOBE_V1#terms-of-use,https://developers.google.com/earth-engine/datasets/images/JRC/JRC_GHSL_P2016_BUILT_LDSMT_GLOBE_V1_sample.png +JRC/GHSL/P2016/POP_GPW_GLOBE_V1,EC JRC,"GHSL: Global Human Settlement Layers, Population Grid 1975-1990-2000-2015 (P2016)",01-01-75,31-12-15,1975,2015,image_collection,"ciesin_derived, jrc, population",https://developers.google.com/earth-engine/datasets/catalog/JRC_GHSL_P2016_POP_GPW_GLOBE_V1#terms-of-use,https://developers.google.com/earth-engine/datasets/images/JRC/JRC_GHSL_P2016_POP_GPW_GLOBE_V1_sample.png +JRC/GHSL/P2016/SMOD_POP_GLOBE_V1,EC JRC,"GHSL: Global Human Settlement Layers, Settlement Grid 1975-1990-2000-2014 (P2016)",01-01-75,31-12-15,1975,2015,image_collection,"jrc, settlement, smod",https://developers.google.com/earth-engine/datasets/catalog/JRC_GHSL_P2016_SMOD_POP_GLOBE_V1#terms-of-use,https://developers.google.com/earth-engine/datasets/images/JRC/JRC_GHSL_P2016_SMOD_POP_GLOBE_V1_sample.png +JRC/GSW1_0/GlobalSurfaceWater,EC JRC / Google,"JRC Global Surface Water Mapping Layers, v1.0 [deprecated]",16-03-84,18-10-15,1984,2015,image,"geophysical, google, jrc, landsat_derived, surface, water",https://developers.google.com/earth-engine/datasets/catalog/JRC_GSW1_0_GlobalSurfaceWater#terms-of-use,https://developers.google.com/earth-engine/datasets/images/JRC/JRC_GSW1_0_GlobalSurfaceWater_sample.png +JRC/GSW1_0/Metadata,EC JRC / Google,"JRC Global Surface Water Metadata, v1.0 [deprecated]",16-03-84,18-10-15,1984,2015,image,"geophysical, google, jrc, landsat_derived, surface, water",https://developers.google.com/earth-engine/datasets/catalog/JRC_GSW1_0_Metadata#terms-of-use,https://developers.google.com/earth-engine/datasets/images/JRC/JRC_GSW1_0_Metadata_sample.png +JRC/GSW1_0/MonthlyHistory,EC JRC / Google,"JRC Monthly Water History, v1.0 [deprecated]",16-03-84,18-10-15,1984,2015,image_collection,"geophysical, google, history, jrc, landsat_derived, monthly, surface, water",https://developers.google.com/earth-engine/datasets/catalog/JRC_GSW1_0_MonthlyHistory#terms-of-use,https://developers.google.com/earth-engine/datasets/images/JRC/JRC_GSW1_0_MonthlyHistory_sample.png +JRC/GSW1_0/MonthlyRecurrence,EC JRC / Google,"JRC Monthly Water Recurrence, v1.0 [deprecated]",16-03-84,18-10-15,1984,2015,image_collection,"geophysical, google, history, jrc, landsat_derived, monthly, recurrence, surface, water",https://developers.google.com/earth-engine/datasets/catalog/JRC_GSW1_0_MonthlyRecurrence#terms-of-use,https://developers.google.com/earth-engine/datasets/images/JRC/JRC_GSW1_0_MonthlyRecurrence_sample.png +JRC/GSW1_0/YearlyHistory,EC JRC / Google,"JRC Yearly Water Classification History, v1.0 [deprecated]",16-03-84,18-10-15,1984,2015,image_collection,"annual, geophysical, google, history, jrc, landsat_derived, surface, water, yearly",https://developers.google.com/earth-engine/datasets/catalog/JRC_GSW1_0_YearlyHistory#terms-of-use,https://developers.google.com/earth-engine/datasets/images/JRC/JRC_GSW1_0_YearlyHistory_sample.png +JRC/GSW1_1/GlobalSurfaceWater,EC JRC / Google,"JRC Global Surface Water Mapping Layers, v1.1 [deprecated]",16-03-84,01-01-19,1984,2019,image,"geophysical, google, jrc, landsat_derived, surface, water",https://developers.google.com/earth-engine/datasets/catalog/JRC_GSW1_1_GlobalSurfaceWater#terms-of-use,https://developers.google.com/earth-engine/datasets/images/JRC/JRC_GSW1_1_GlobalSurfaceWater_sample.png +JRC/GSW1_1/Metadata,EC JRC / Google,"JRC Global Surface Water Metadata, v1.1 [deprecated]",16-03-84,01-01-19,1984,2019,image,"geophysical, google, jrc, landsat_derived, surface, water",https://developers.google.com/earth-engine/datasets/catalog/JRC_GSW1_1_Metadata#terms-of-use,https://developers.google.com/earth-engine/datasets/images/JRC/JRC_GSW1_1_Metadata_sample.png +JRC/GSW1_1/MonthlyHistory,EC JRC / Google,"JRC Monthly Water History, v1.1 [deprecated]",16-03-84,01-01-19,1984,2019,image_collection,"geophysical, google, history, jrc, landsat_derived, monthly, surface, water",https://developers.google.com/earth-engine/datasets/catalog/JRC_GSW1_1_MonthlyHistory#terms-of-use,https://developers.google.com/earth-engine/datasets/images/JRC/JRC_GSW1_1_MonthlyHistory_sample.png +JRC/GSW1_1/MonthlyRecurrence,EC JRC / Google,"JRC Monthly Water Recurrence, v1.1 [deprecated]",16-03-84,01-01-19,1984,2019,image_collection,"geophysical, google, history, jrc, landsat_derived, monthly, recurrence, surface, water",https://developers.google.com/earth-engine/datasets/catalog/JRC_GSW1_1_MonthlyRecurrence#terms-of-use,https://developers.google.com/earth-engine/datasets/images/JRC/JRC_GSW1_1_MonthlyRecurrence_sample.png +JRC/GSW1_1/YearlyHistory,EC JRC / Google,"JRC Yearly Water Classification History, v1.1 [deprecated]",16-03-84,01-01-19,1984,2019,image_collection,"annual, geophysical, google, history, jrc, landsat_derived, surface, water, yearly",https://developers.google.com/earth-engine/datasets/catalog/JRC_GSW1_1_YearlyHistory#terms-of-use,https://developers.google.com/earth-engine/datasets/images/JRC/JRC_GSW1_1_YearlyHistory_sample.png +JRC/GSW1_2/GlobalSurfaceWater,EC JRC / Google,"JRC Global Surface Water Mapping Layers, v1.2 [deprecated]",16-03-84,01-01-20,1984,2020,image,"geophysical, google, jrc, landsat_derived, surface, water",https://developers.google.com/earth-engine/datasets/catalog/JRC_GSW1_2_GlobalSurfaceWater#terms-of-use,https://developers.google.com/earth-engine/datasets/images/JRC/JRC_GSW1_2_GlobalSurfaceWater_sample.png +JRC/GSW1_2/Metadata,EC JRC / Google,"JRC Global Surface Water Metadata, v1.2 [deprecated]",16-03-84,01-01-20,1984,2020,image,"geophysical, google, jrc, landsat_derived, surface, water",https://developers.google.com/earth-engine/datasets/catalog/JRC_GSW1_2_Metadata#terms-of-use,https://developers.google.com/earth-engine/datasets/images/JRC/JRC_GSW1_2_Metadata_sample.png +JRC/GSW1_2/MonthlyHistory,EC JRC / Google,"JRC Monthly Water History, v1.2 [deprecated]",16-03-84,01-01-20,1984,2020,image_collection,"geophysical, google, history, jrc, landsat_derived, monthly, surface, water",https://developers.google.com/earth-engine/datasets/catalog/JRC_GSW1_2_MonthlyHistory#terms-of-use,https://developers.google.com/earth-engine/datasets/images/JRC/JRC_GSW1_2_MonthlyHistory_sample.png +JRC/GSW1_2/MonthlyRecurrence,EC JRC / Google,"JRC Monthly Water Recurrence, v1.2 [deprecated]",16-03-84,01-01-20,1984,2020,image_collection,"geophysical, google, history, jrc, landsat_derived, monthly, recurrence, surface, water",https://developers.google.com/earth-engine/datasets/catalog/JRC_GSW1_2_MonthlyRecurrence#terms-of-use,https://developers.google.com/earth-engine/datasets/images/JRC/JRC_GSW1_2_MonthlyRecurrence_sample.png +JRC/GSW1_2/YearlyHistory,EC JRC / Google,"JRC Yearly Water Classification History, v1.2 [deprecated]",16-03-84,01-01-20,1984,2020,image_collection,"annual, geophysical, google, history, jrc, landsat_derived, surface, water, yearly",https://developers.google.com/earth-engine/datasets/catalog/JRC_GSW1_2_YearlyHistory#terms-of-use,https://developers.google.com/earth-engine/datasets/images/JRC/JRC_GSW1_2_YearlyHistory_sample.png +JRC/GSW1_3/GlobalSurfaceWater,EC JRC / Google,"JRC Global Surface Water Mapping Layers, v1.3 [deprecated]",16-03-84,01-01-21,1984,2021,image,"geophysical, google, jrc, landsat_derived, surface, water",https://developers.google.com/earth-engine/datasets/catalog/JRC_GSW1_3_GlobalSurfaceWater#terms-of-use,https://developers.google.com/earth-engine/datasets/images/JRC/JRC_GSW1_3_GlobalSurfaceWater_sample.png +JRC/GSW1_3/Metadata,EC JRC / Google,"JRC Global Surface Water Metadata, v1.3 [deprecated]",16-03-84,01-01-21,1984,2021,image,"geophysical, google, jrc, landsat_derived, surface, water",https://developers.google.com/earth-engine/datasets/catalog/JRC_GSW1_3_Metadata#terms-of-use,https://developers.google.com/earth-engine/datasets/images/JRC/JRC_GSW1_3_Metadata_sample.png +JRC/GSW1_3/MonthlyHistory,EC JRC / Google,"JRC Monthly Water History, v1.3 [deprecated]",16-03-84,01-01-21,1984,2021,image_collection,"geophysical, google, history, jrc, landsat_derived, monthly, surface, water",https://developers.google.com/earth-engine/datasets/catalog/JRC_GSW1_3_MonthlyHistory#terms-of-use,https://developers.google.com/earth-engine/datasets/images/JRC/JRC_GSW1_3_MonthlyHistory_sample.png +JRC/GSW1_3/MonthlyRecurrence,EC JRC / Google,"JRC Monthly Water Recurrence, v1.3 [deprecated]",16-03-84,01-01-21,1984,2021,image_collection,"geophysical, google, history, jrc, landsat_derived, monthly, recurrence, surface, water",https://developers.google.com/earth-engine/datasets/catalog/JRC_GSW1_3_MonthlyRecurrence#terms-of-use,https://developers.google.com/earth-engine/datasets/images/JRC/JRC_GSW1_3_MonthlyRecurrence_sample.png +JRC/GSW1_3/YearlyHistory,EC JRC / Google,"JRC Yearly Water Classification History, v1.3 [deprecated]",16-03-84,01-01-21,1984,2021,image_collection,"annual, geophysical, google, history, jrc, landsat_derived, surface, water, yearly",https://developers.google.com/earth-engine/datasets/catalog/JRC_GSW1_3_YearlyHistory#terms-of-use,https://developers.google.com/earth-engine/datasets/images/JRC/JRC_GSW1_3_YearlyHistory_sample.png +JRC/GSW1_4/GlobalSurfaceWater,EC JRC / Google,"JRC Global Surface Water Mapping Layers, v1.4",16-03-84,01-01-22,1984,2022,image,"geophysical, google, jrc, landsat_derived, surface, water",https://developers.google.com/earth-engine/datasets/catalog/JRC_GSW1_4_GlobalSurfaceWater#terms-of-use,https://developers.google.com/earth-engine/datasets/images/JRC/JRC_GSW1_4_GlobalSurfaceWater_sample.png +JRC/GSW1_4/Metadata,EC JRC / Google,"JRC Global Surface Water Metadata, v1.4",16-03-84,01-01-22,1984,2022,image,"geophysical, google, jrc, landsat_derived, surface, water",https://developers.google.com/earth-engine/datasets/catalog/JRC_GSW1_4_Metadata#terms-of-use,https://developers.google.com/earth-engine/datasets/images/JRC/JRC_GSW1_4_Metadata_sample.png +JRC/GSW1_4/MonthlyHistory,EC JRC / Google,"JRC Monthly Water History, v1.4",16-03-84,01-01-22,1984,2022,image_collection,"geophysical, google, history, jrc, landsat_derived, monthly, surface, water",https://developers.google.com/earth-engine/datasets/catalog/JRC_GSW1_4_MonthlyHistory#terms-of-use,https://developers.google.com/earth-engine/datasets/images/JRC/JRC_GSW1_4_MonthlyHistory_sample.png +JRC/GSW1_4/MonthlyRecurrence,EC JRC / Google,"JRC Monthly Water Recurrence, v1.4",16-03-84,01-01-22,1984,2022,image_collection,"geophysical, google, history, jrc, landsat_derived, monthly, recurrence, surface, water",https://developers.google.com/earth-engine/datasets/catalog/JRC_GSW1_4_MonthlyRecurrence#terms-of-use,https://developers.google.com/earth-engine/datasets/images/JRC/JRC_GSW1_4_MonthlyRecurrence_sample.png +JRC/GSW1_4/YearlyHistory,EC JRC / Google,"JRC Yearly Water Classification History, v1.4",16-03-84,01-01-22,1984,2022,image_collection,"annual, geophysical, google, history, jrc, landsat_derived, surface, water, yearly",https://developers.google.com/earth-engine/datasets/catalog/JRC_GSW1_4_YearlyHistory#terms-of-use,https://developers.google.com/earth-engine/datasets/images/JRC/JRC_GSW1_4_YearlyHistory_sample.png +JRC/GWIS/GlobFire/v2/DailyPerimeters,"European Commission, Joint Research Centre, Global Wildfire Information System",GlobFire Daily Fire Event Detection Based on MCD64A1,01-01-01,01-01-21,2001,2021,table_collection,"area, burnt, disaster, fire, globfire, mcd64a1, modis_derived, wildfire",https://developers.google.com/earth-engine/datasets/catalog/JRC_GWIS_GlobFire_v2_DailyPerimeters#terms-of-use,https://developers.google.com/earth-engine/datasets/images/JRC/JRC_GWIS_GlobFire_v2_DailyPerimeters_sample.png +JRC/GWIS/GlobFire/v2/FinalPerimeters,"European Commission, Joint Research Centre, Global Wildfire Information System",GlobFire Final Fire Event Detection Based on MCD64A1,01-01-01,01-01-21,2001,2021,table,"area, burnt, disaster, fire, globfire, mcd64a1, modis_derived, wildfire",https://spdx.org/licenses/CC-BY-4.0.html,https://developers.google.com/earth-engine/datasets/images/JRC/JRC_GWIS_GlobFire_v2_FinalPerimeters_sample.png +JRC/LUCAS_HARMO/COPERNICUS_POLYGONS/V1/2018,"Joint Research Center, Unit D5","LUCAS Copernicus (Polygons with attributes, 2018) V1",05-02-06,14-03-19,2006,2019,table,"copernicus, eu, jrc, landcover, landuse, lucas",https://developers.google.com/earth-engine/datasets/catalog/JRC_LUCAS_HARMO_COPERNICUS_POLYGONS_V1_2018#terms-of-use,https://developers.google.com/earth-engine/datasets/images/JRC/JRC_LUCAS_HARMO_COPERNICUS_POLYGONS_V1_2018_sample.png +JRC/LUCAS_HARMO/THLOC/V1,"Joint Research Center, Unit D5","LUCAS Harmonized (Theoretical Location, 2006-2018) V1",05-02-06,14-03-19,2006,2019,table,"eu, jrc, landcover, landuse, lucas",https://developers.google.com/earth-engine/datasets/catalog/JRC_LUCAS_HARMO_THLOC_V1#terms-of-use,https://developers.google.com/earth-engine/datasets/images/JRC/JRC_LUCAS_HARMO_THLOC_V1_sample.png +KNTU/LiDARLab/IranLandCover/V1,K. N. Toosi University of Technology LiDAR Lab,Iran Land Cover Map v1 13-class (2017),01-01-17,01-01-18,2017,2018,image,"iran, kntu, landcover",https://developers.google.com/earth-engine/datasets/catalog/KNTU_LiDARLab_IranLandCover_V1#terms-of-use,https://developers.google.com/earth-engine/datasets/images/KNTU/KNTU_LiDARLab_IranLandCover_V1_sample.png +LANDFIRE/Fire/FRG/v1_2_0,"U.S. Department of Agriculture's (USDA), U.S. Forest Service (USFS), U.S. +Department of the Interior's Geological Survey (USGS), and The Nature Conservancy.",LANDFIRE FRG (Fire Regime Groups) v1.2.0,01-01-10,31-12-10,2010,2010,image_collection,"doi, fire, landfire, nature_conservancy, usda, usgs, vegetation, wildfire",https://developers.google.com/earth-engine/datasets/catalog/LANDFIRE_Fire_FRG_v1_2_0#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDFIRE/LANDFIRE_Fire_FRG_v1_2_0_sample.png +LANDFIRE/Fire/MFRI/v1_2_0,"U.S. Department of Agriculture's (USDA), U.S. Forest Service (USFS), U.S. +Department of the Interior's Geological Survey (USGS), and The Nature Conservancy.",LANDFIRE MFRI (Mean Fire Return Interval) v1.2.0,01-01-10,31-12-10,2010,2010,image_collection,"doi, fire, landfire, nature_conservancy, usda, usgs, vegetation, wildfire",https://developers.google.com/earth-engine/datasets/catalog/LANDFIRE_Fire_MFRI_v1_2_0#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDFIRE/LANDFIRE_Fire_MFRI_v1_2_0_sample.png +LANDFIRE/Fire/PLS/v1_2_0,"U.S. Department of Agriculture's (USDA), U.S. Forest Service (USFS), U.S. +Department of the Interior's Geological Survey (USGS), and The Nature Conservancy.",LANDFIRE PLS (Percent Low-severity Fire) v1.2.0,01-01-10,31-12-10,2010,2010,image_collection,"doi, fire, landfire, nature_conservancy, usda, usgs, vegetation, wildfire",https://developers.google.com/earth-engine/datasets/catalog/LANDFIRE_Fire_PLS_v1_2_0#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDFIRE/LANDFIRE_Fire_PLS_v1_2_0_sample.png +LANDFIRE/Fire/PMS/v1_2_0,"U.S. Department of Agriculture's (USDA), U.S. Forest Service (USFS), U.S. +Department of the Interior's Geological Survey (USGS), and The Nature Conservancy.",LANDFIRE PMS (Percent of Mixed-severity Fire) v1.2.0,01-01-10,31-12-10,2010,2010,image_collection,"doi, fire, landfire, nature_conservancy, usda, usgs, vegetation, wildfire",https://developers.google.com/earth-engine/datasets/catalog/LANDFIRE_Fire_PMS_v1_2_0#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDFIRE/LANDFIRE_Fire_PMS_v1_2_0_sample.png +LANDFIRE/Fire/PRS/v1_2_0,"U.S. Department of Agriculture's (USDA), U.S. Forest Service (USFS), U.S. +Department of the Interior's Geological Survey (USGS), and The Nature Conservancy.",LANDFIRE PRS (Percent of Replacement-severity Fire) v1.2.0,01-01-10,31-12-10,2010,2010,image_collection,"doi, fire, landfire, nature_conservancy, usda, usgs, vegetation, wildfire",https://developers.google.com/earth-engine/datasets/catalog/LANDFIRE_Fire_PRS_v1_2_0#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDFIRE/LANDFIRE_Fire_PRS_v1_2_0_sample.png +LANDFIRE/Fire/SClass/v1_4_0,"U.S. Department of Agriculture's (USDA), U.S. Forest Service (USFS), U.S. +Department of the Interior's Geological Survey (USGS), and The Nature Conservancy.",LANDFIRE SClass (Succession Classes) v1.4.0,01-09-14,01-09-14,2014,2014,image_collection,"doi, fire, landfire, nature_conservancy, usda, usgs, vegetation, wildfire",https://developers.google.com/earth-engine/datasets/catalog/LANDFIRE_Fire_SClass_v1_4_0#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDFIRE/LANDFIRE_Fire_SClass_v1_4_0_sample.png +LANDFIRE/Fire/VCC/v1_4_0,"U.S. Department of Agriculture's (USDA), U.S. Forest Service (USFS), U.S. +Department of the Interior's Geological Survey (USGS), and The Nature Conservancy.",LANDFIRE VCC (Vegetation Condition Class) v1.4.0,01-09-14,01-09-14,2014,2014,image_collection,"doi, fire, landfire, nature_conservancy, usda, usgs, vegetation, wildfire",https://developers.google.com/earth-engine/datasets/catalog/LANDFIRE_Fire_VCC_v1_4_0#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDFIRE/LANDFIRE_Fire_VCC_v1_4_0_sample.png +LANDFIRE/Fire/VDep/v1_4_0,"U.S. Department of Agriculture's (USDA), U.S. Forest Service (USFS), U.S. +Department of the Interior's Geological Survey (USGS), and The Nature Conservancy.",LANDFIRE VDep (Vegetation Departure) v1.4.0,01-09-14,01-09-14,2014,2014,image_collection,"doi, fire, landfire, nature_conservancy, usda, usgs, vegetation, wildfire",https://developers.google.com/earth-engine/datasets/catalog/LANDFIRE_Fire_VDep_v1_4_0#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDFIRE/LANDFIRE_Fire_VDep_v1_4_0_sample.png +LANDFIRE/Vegetation/BPS/v1_4_0,"U.S. Department of Agriculture's (USDA), U.S. Forest Service (USFS), U.S. +Department of the Interior's Geological Survey (USGS), and The Nature Conservancy.",LANDFIRE BPS (Biophysical Settings) v1.4.0,01-09-14,01-09-14,2014,2014,image_collection,"doi, fire, landfire, nature_conservancy, usda, usgs, vegetation, wildfire",https://developers.google.com/earth-engine/datasets/catalog/LANDFIRE_Vegetation_BPS_v1_4_0#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDFIRE/LANDFIRE_Vegetation_BPS_v1_4_0_sample.png +LANDFIRE/Vegetation/ESP/v1_2_0/AK,"U.S. Department of Agriculture's (USDA), U.S. Forest Service (USFS), U.S. +Department of the Interior's Geological Survey (USGS), and The Nature Conservancy.",LANDFIRE ESP AK (Environmental Site Potential) v1.2.0,01-01-10,31-12-10,2010,2010,image,"doi, fire, landfire, nature_conservancy, usda, usgs, vegetation, wildfire",https://developers.google.com/earth-engine/datasets/catalog/LANDFIRE_Vegetation_ESP_v1_2_0_AK#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDFIRE/LANDFIRE_Vegetation_ESP_v1_2_0_AK_sample.png +LANDFIRE/Vegetation/ESP/v1_2_0/CONUS,"U.S. Department of Agriculture's (USDA), U.S. Forest Service (USFS), U.S. +Department of the Interior's Geological Survey (USGS), and The Nature Conservancy.",LANDFIRE ESP CONUS (Environmental Site Potential) v1.2.0,01-01-10,31-12-10,2010,2010,image,"doi, fire, landfire, nature_conservancy, usda, usgs, vegetation, wildfire",https://developers.google.com/earth-engine/datasets/catalog/LANDFIRE_Vegetation_ESP_v1_2_0_CONUS#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDFIRE/LANDFIRE_Vegetation_ESP_v1_2_0_CONUS_sample.png +LANDFIRE/Vegetation/ESP/v1_2_0/HI,"U.S. Department of Agriculture's (USDA), U.S. Forest Service (USFS), U.S. +Department of the Interior's Geological Survey (USGS), and The Nature Conservancy.",LANDFIRE ESP HI (Environmental Site Potential) v1.2.0,01-01-10,31-12-10,2010,2010,image,"doi, fire, landfire, nature_conservancy, usda, usgs, vegetation, wildfire",https://developers.google.com/earth-engine/datasets/catalog/LANDFIRE_Vegetation_ESP_v1_2_0_HI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDFIRE/LANDFIRE_Vegetation_ESP_v1_2_0_HI_sample.png +LANDFIRE/Vegetation/EVC/v1_4_0,"U.S. Department of Agriculture's (USDA), U.S. Forest Service (USFS), U.S. +Department of the Interior's Geological Survey (USGS), and The Nature Conservancy.",LANDFIRE EVC (Existing Vegetation Cover) v1.4.0,01-09-14,01-09-14,2014,2014,image_collection,"doi, fire, landfire, nature_conservancy, usda, usgs, vegetation, wildfire",https://developers.google.com/earth-engine/datasets/catalog/LANDFIRE_Vegetation_EVC_v1_4_0#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDFIRE/LANDFIRE_Vegetation_EVC_v1_4_0_sample.png +LANDFIRE/Vegetation/EVH/v1_4_0,"U.S. Department of Agriculture's (USDA), U.S. Forest Service (USFS), U.S. +Department of the Interior's Geological Survey (USGS), and The Nature Conservancy.",LANDFIRE EVH (Existing Vegetation Height) v1.4.0,01-09-14,01-09-14,2014,2014,image_collection,"doi, fire, landfire, nature_conservancy, usda, usgs, vegetation, wildfire",https://developers.google.com/earth-engine/datasets/catalog/LANDFIRE_Vegetation_EVH_v1_4_0#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDFIRE/LANDFIRE_Vegetation_EVH_v1_4_0_sample.png +LANDFIRE/Vegetation/EVT/v1_4_0,"U.S. Department of Agriculture's (USDA), U.S. Forest Service (USFS), U.S. +Department of the Interior's Geological Survey (USGS), and The Nature Conservancy.",LANDFIRE EVT (Existing Vegetation Type) v1.4.0,01-09-14,01-09-14,2014,2014,image_collection,"doi, fire, landfire, nature_conservancy, usda, usgs, vegetation, wildfire",https://developers.google.com/earth-engine/datasets/catalog/LANDFIRE_Vegetation_EVT_v1_4_0#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDFIRE/LANDFIRE_Vegetation_EVT_v1_4_0_sample.png +LANDSAT/GLS1975,USGS,Landsat Global Land Survey 1975,25-07-72,20-02-83,1972,1983,image_collection,"global, gls, landsat, radiance, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_GLS1975#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_GLS1975_sample.png +LANDSAT/GLS1975_MOSAIC,USGS,Landsat Global Land Survey 1975 Mosaic,01-01-75,01-01-76,1975,1976,image_collection,"gls, landsat, radiance, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_GLS1975_MOSAIC#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_GLS1975_MOSAIC_sample.png +LANDSAT/GLS2005,USGS,"Landsat Global Land Survey 2005, Landsat 5+7 scenes",29-07-03,29-07-08,2003,2008,image_collection,"gls, landsat, radiance, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_GLS2005#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_GLS2005_sample.png +LANDSAT/GLS2005_L5,USGS,"Landsat Global Land Survey 2005, Landsat 5 scenes",14-08-03,29-05-08,2003,2008,image_collection,"etm, gls, l5, landsat, radiance, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_GLS2005_L5#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_GLS2005_L5_sample.png +LANDSAT/GLS2005_L7,USGS,"Landsat Global Land Survey 2005, Landsat 7 scenes",29-07-03,29-07-08,2003,2008,image_collection,"etm, gls, l7, landsat, radiance, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_GLS2005_L7#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_GLS2005_L7_sample.png +LANDSAT/LC8,USGS,USGS Landsat 8 Raw Scenes [deprecated],11-04-13,01-05-17,2013,2017,image_collection,"global, l8, landsat, lc8, oli_tirs, radiance, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LC8#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LC8_sample.png +LANDSAT/LC08/C01/T1,USGS,USGS Landsat 8 Collection 1 Tier 1 Raw Scenes [deprecated],18-03-13,02-01-22,2013,2022,image_collection,"c1, global, l8, landsat, lc8, oli_tirs, radiance, t1, tier1, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LC08_C01_T1#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LC08_C01_T1_sample.png +LANDSAT/LC08/C01/T1_8DAY_BAI,Google,Landsat 8 Collection 1 Tier 1 8-Day BAI Composite,07-04-13,01-01-22,2013,2022,image_collection,"bai, landsat, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LC08_C01_T1_8DAY_BAI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LC08_C01_T1_8DAY_BAI_sample.png +LANDSAT/LC08/C01/T1_8DAY_EVI,Google,Landsat 8 Collection 1 Tier 1 8-Day EVI Composite,07-04-13,01-01-22,2013,2022,image_collection,"evi, landsat, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LC08_C01_T1_8DAY_EVI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LC08_C01_T1_8DAY_EVI_sample.png +LANDSAT/LC08/C01/T1_8DAY_NBRT,Google,Landsat 8 Collection 1 Tier 1 8-Day NBRT Composite,07-04-13,01-01-22,2013,2022,image_collection,"landsat, nbrt, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LC08_C01_T1_8DAY_NBRT#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LC08_C01_T1_8DAY_NBRT_sample.png +LANDSAT/LC08/C01/T1_8DAY_NDSI,Google,Landsat 8 Collection 1 Tier 1 8-Day NDSI Composite,07-04-13,01-01-22,2013,2022,image_collection,"landsat, ndsi, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LC08_C01_T1_8DAY_NDSI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LC08_C01_T1_8DAY_NDSI_sample.png +LANDSAT/LC08/C01/T1_8DAY_NDVI,Google,Landsat 8 Collection 1 Tier 1 8-Day NDVI Composite,07-04-13,01-01-22,2013,2022,image_collection,"landsat, ndvi, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LC08_C01_T1_8DAY_NDVI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LC08_C01_T1_8DAY_NDVI_sample.png +LANDSAT/LC08/C01/T1_8DAY_NDWI,Google,Landsat 8 Collection 1 Tier 1 8-Day NDWI Composite,07-04-13,01-01-22,2013,2022,image_collection,"landsat, ndwi, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LC08_C01_T1_8DAY_NDWI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LC08_C01_T1_8DAY_NDWI_sample.png +LANDSAT/LC08/C01/T1_8DAY_RAW,USGS/Google,Landsat 8 Collection 1 Tier 1 8-Day Raw Composite,07-04-13,01-01-22,2013,2022,image_collection,"landsat, raw, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LC08_C01_T1_8DAY_RAW#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LC08_C01_T1_8DAY_RAW_sample.png +LANDSAT/LC08/C01/T1_8DAY_TOA,Google,Landsat 8 Collection 1 Tier 1 8-Day TOA Reflectance Composite,07-04-13,01-01-22,2013,2022,image_collection,"landsat, toa, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LC08_C01_T1_8DAY_TOA#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LC08_C01_T1_8DAY_TOA_sample.png +LANDSAT/LC08/C01/T1_32DAY_BAI,Google,Landsat 8 Collection 1 Tier 1 32-Day BAI Composite,07-04-13,01-01-22,2013,2022,image_collection,"bai, landsat, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LC08_C01_T1_32DAY_BAI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LC08_C01_T1_32DAY_BAI_sample.png +LANDSAT/LC08/C01/T1_32DAY_EVI,Google,Landsat 8 Collection 1 Tier 1 32-Day EVI Composite,07-04-13,01-01-22,2013,2022,image_collection,"evi, landsat, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LC08_C01_T1_32DAY_EVI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LC08_C01_T1_32DAY_EVI_sample.png +LANDSAT/LC08/C01/T1_32DAY_NBRT,Google,Landsat 8 Collection 1 Tier 1 32-Day NBRT Composite,07-04-13,01-01-22,2013,2022,image_collection,"landsat, nbrt, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LC08_C01_T1_32DAY_NBRT#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LC08_C01_T1_32DAY_NBRT_sample.png +LANDSAT/LC08/C01/T1_32DAY_NDSI,Google,Landsat 8 Collection 1 Tier 1 32-Day NDSI Composite,07-04-13,01-01-22,2013,2022,image_collection,"landsat, ndsi, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LC08_C01_T1_32DAY_NDSI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LC08_C01_T1_32DAY_NDSI_sample.png +LANDSAT/LC08/C01/T1_32DAY_NDVI,Google,Landsat 8 Collection 1 Tier 1 32-Day NDVI Composite,07-04-13,01-01-22,2013,2022,image_collection,"landsat, ndvi, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LC08_C01_T1_32DAY_NDVI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LC08_C01_T1_32DAY_NDVI_sample.png +LANDSAT/LC08/C01/T1_32DAY_NDWI,Google,Landsat 8 Collection 1 Tier 1 32-Day NDWI Composite,07-04-13,01-01-22,2013,2022,image_collection,"landsat, ndwi, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LC08_C01_T1_32DAY_NDWI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LC08_C01_T1_32DAY_NDWI_sample.png +LANDSAT/LC08/C01/T1_32DAY_RAW,USGS/Google,Landsat 8 Collection 1 Tier 1 32-Day Raw Composite,07-04-13,01-01-22,2013,2022,image_collection,"landsat, raw, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LC08_C01_T1_32DAY_RAW#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LC08_C01_T1_32DAY_RAW_sample.png +LANDSAT/LC08/C01/T1_32DAY_TOA,Google,Landsat 8 Collection 1 Tier 1 32-Day TOA Reflectance Composite,07-04-13,01-01-22,2013,2022,image_collection,"landsat, toa, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LC08_C01_T1_32DAY_TOA#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LC08_C01_T1_32DAY_TOA_sample.png +LANDSAT/LC08/C01/T1_ANNUAL_BAI,Google,Landsat 8 Collection 1 Tier 1 Annual BAI Composite,01-01-13,01-01-22,2013,2022,image_collection,"bai, landsat, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LC08_C01_T1_ANNUAL_BAI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LC08_C01_T1_ANNUAL_BAI_sample.png +LANDSAT/LC08/C01/T1_ANNUAL_EVI,Google,Landsat 8 Collection 1 Tier 1 Annual EVI Composite,01-01-13,01-01-22,2013,2022,image_collection,"evi, landsat, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LC08_C01_T1_ANNUAL_EVI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LC08_C01_T1_ANNUAL_EVI_sample.png +LANDSAT/LC08/C01/T1_ANNUAL_GREENEST_TOA,Google,Landsat 8 Collection 1 Tier 1 Landsat 8 Collection 1 Tier 1 Annual Greenest-Pixel TOA Reflectance Composite,01-01-13,01-01-22,2013,2022,image_collection,"greenest, landsat, toa, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LC08_C01_T1_ANNUAL_GREENEST_TOA#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LC08_C01_T1_ANNUAL_GREENEST_TOA_sample.png +LANDSAT/LC08/C01/T1_ANNUAL_NBRT,Google,Landsat 8 Collection 1 Tier 1 Annual NBRT Composite,01-01-13,01-01-22,2013,2022,image_collection,"landsat, nbrt, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LC08_C01_T1_ANNUAL_NBRT#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LC08_C01_T1_ANNUAL_NBRT_sample.png +LANDSAT/LC08/C01/T1_ANNUAL_NDSI,Google,Landsat 8 Collection 1 Tier 1 Annual NDSI Composite,01-01-13,01-01-22,2013,2022,image_collection,"landsat, ndsi, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LC08_C01_T1_ANNUAL_NDSI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LC08_C01_T1_ANNUAL_NDSI_sample.png +LANDSAT/LC08/C01/T1_ANNUAL_NDVI,Google,Landsat 8 Collection 1 Tier 1 Annual NDVI Composite,01-01-13,01-01-22,2013,2022,image_collection,"landsat, ndvi, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LC08_C01_T1_ANNUAL_NDVI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LC08_C01_T1_ANNUAL_NDVI_sample.png +LANDSAT/LC08/C01/T1_ANNUAL_NDWI,Google,Landsat 8 Collection 1 Tier 1 Annual NDWI Composite,01-01-13,01-01-22,2013,2022,image_collection,"landsat, ndwi, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LC08_C01_T1_ANNUAL_NDWI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LC08_C01_T1_ANNUAL_NDWI_sample.png +LANDSAT/LC08/C01/T1_ANNUAL_RAW,USGS/Google,Landsat 8 Collection 1 Tier 1 Annual Raw Composite,01-01-13,01-01-22,2013,2022,image_collection,"landsat, raw, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LC08_C01_T1_ANNUAL_RAW#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LC08_C01_T1_ANNUAL_RAW_sample.png +LANDSAT/LC08/C01/T1_ANNUAL_TOA,Google,Landsat 8 Collection 1 Tier 1 Annual TOA Reflectance Composite,01-01-13,01-01-22,2013,2022,image_collection,"landsat, toa, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LC08_C01_T1_ANNUAL_TOA#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LC08_C01_T1_ANNUAL_TOA_sample.png +LANDSAT/LC08/C01/T1_RT,USGS,USGS Landsat 8 Collection 1 Tier 1 and Real-Time data Raw Scenes [deprecated],18-03-13,03-01-22,2013,2022,image_collection,"c1, global, l8, landsat, lc8, nrt, oli_tirs, radiance, rt, t1, tier1, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LC08_C01_T1_RT#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LC08_C01_T1_RT_sample.png +LANDSAT/LC08/C01/T1_RT_TOA,USGS/Google,USGS Landsat 8 Collection 1 Tier 1 and Real-Time data TOA Reflectance [deprecated],18-03-13,03-01-22,2013,2022,image_collection,"global, landsat, toa, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LC08_C01_T1_RT_TOA#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LC08_C01_T1_RT_TOA_sample.png +LANDSAT/LC08/C01/T1_SR,USGS,USGS Landsat 8 Surface Reflectance Tier 1 [deprecated],18-03-13,31-12-21,2013,2021,image_collection,"cfmask, cloud, fmask, global, l8sr, landsat, lc08, reflectance, sr, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LC08_C01_T1_SR#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LC08_C01_T1_SR_sample.png +LANDSAT/LC08/C01/T1_TOA,USGS/Google,USGS Landsat 8 Collection 1 Tier 1 TOA Reflectance [deprecated],18-03-13,02-01-22,2013,2022,image_collection,"global, landsat, toa, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LC08_C01_T1_TOA#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LC08_C01_T1_TOA_sample.png +LANDSAT/LC08/C01/T2,USGS,USGS Landsat 8 Collection 1 Tier 2 Raw Scenes [deprecated],18-03-13,02-01-22,2013,2022,image_collection,"c1, global, l8, landsat, lc8, oli_tirs, radiance, t2, tier2, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LC08_C01_T2#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LC08_C01_T2_sample.png +LANDSAT/LC08/C01/T2_SR,USGS,USGS Landsat 8 Surface Reflectance Tier 2 [deprecated],18-03-13,18-10-21,2013,2021,image_collection,"cfmask, cloud, fmask, global, l8sr, landsat, lc08, reflectance, sr, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LC08_C01_T2_SR#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LC08_C01_T2_SR_sample.png +LANDSAT/LC08/C01/T2_TOA,USGS/Google,USGS Landsat 8 Collection 1 Tier 2 TOA Reflectance [deprecated],18-03-13,02-01-22,2013,2022,image_collection,"global, landsat, toa, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LC08_C01_T2_TOA#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LC08_C01_T2_TOA_sample.png +LANDSAT/LC08/C02/T1,USGS,USGS Landsat 8 Collection 2 Tier 1 Raw Scenes,18-03-13,16-03-23,2013,2023,image_collection,"c2, global, l8, landsat, lc8, oli_tirs, radiance, t1, tier1, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LC08_C02_T1#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LC08_C02_T1_sample.png +LANDSAT/LC08/C02/T1_L2,USGS,"USGS Landsat 8 Level 2, Collection 2, Tier 1",18-03-13,08-03-23,2013,2023,image_collection,"cfmask, cloud, fmask, global, l8sr, landsat, lasrc, lc08, lst, reflectance, sr, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LC08_C02_T1_L2#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LC08_C02_T1_L2_sample.png +LANDSAT/LC08/C02/T1_RT,USGS,USGS Landsat 8 Collection 2 Tier 1 and Real-Time data Raw Scenes,18-03-13,24-03-23,2013,2023,image_collection,"c2, global, l8, landsat, lc8, nrt, oli_tirs, radiance, rt, t1, tier1, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LC08_C02_T1_RT#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LC08_C02_T1_RT_sample.png +LANDSAT/LC08/C02/T1_RT_TOA,USGS/Google,USGS Landsat 8 Collection 2 Tier 1 and Real-Time data TOA Reflectance,18-03-13,24-03-23,2013,2023,image_collection,"c2, global, l8, landsat, lc8, toa, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LC08_C02_T1_RT_TOA#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LC08_C02_T1_RT_TOA_sample.png +LANDSAT/LC08/C02/T1_TOA,USGS/Google,USGS Landsat 8 Collection 2 Tier 1 TOA Reflectance,18-03-13,16-03-23,2013,2023,image_collection,"c2, global, landsat, toa, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LC08_C02_T1_TOA#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LC08_C02_T1_TOA_sample.png +LANDSAT/LC08/C02/T2,USGS,USGS Landsat 8 Collection 2 Tier 2 Raw Scenes,28-10-21,22-03-23,2021,2023,image_collection,"c2, global, l8, landsat, lc8, oli_tirs, radiance, t2, tier2, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LC08_C02_T2#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LC08_C02_T2_sample.png +LANDSAT/LC08/C02/T2_L2,USGS,"USGS Landsat 8 Level 2, Collection 2, Tier 2",18-03-13,08-03-23,2013,2023,image_collection,"cfmask, cloud, fmask, global, l8sr, landsat, lasrc, lc08, lst, reflectance, sr, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LC08_C02_T2_L2#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LC08_C02_T2_L2_sample.png +LANDSAT/LC08/C02/T2_TOA,USGS/Google,USGS Landsat 8 Collection 2 Tier 2 TOA Reflectance,28-10-21,22-03-23,2021,2023,image_collection,"c2, global, landsat, toa, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LC08_C02_T2_TOA#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LC08_C02_T2_TOA_sample.png +LANDSAT/LC8_L1T,USGS,USGS Landsat 8 Raw Scenes (Orthorectified) [deprecated],11-04-13,01-05-17,2013,2017,image_collection,"global, l8, landsat, lc8, oli_tirs, radiance, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LC8_L1T#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LC8_L1T_sample.png +LANDSAT/LC8_L1T_8DAY_BAI,USGS,Landsat 8 8-Day BAI Composite [deprecated],07-04-13,23-04-17,2013,2017,image_collection,"bai, landsat, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LC8_L1T_8DAY_BAI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LC8_L1T_8DAY_BAI_sample.png +LANDSAT/LC8_L1T_8DAY_EVI,USGS,Landsat 8 8-Day EVI Composite [deprecated],07-04-13,23-04-17,2013,2017,image_collection,"evi, landsat, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LC8_L1T_8DAY_EVI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LC8_L1T_8DAY_EVI_sample.png +LANDSAT/LC8_L1T_8DAY_NBRT,USGS,Landsat 8 8-Day NBRT Composite [deprecated],07-04-13,23-04-17,2013,2017,image_collection,"landsat, nbrt, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LC8_L1T_8DAY_NBRT#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LC8_L1T_8DAY_NBRT_sample.png +LANDSAT/LC8_L1T_8DAY_NDSI,USGS,Landsat 8 8-Day NDSI Composite [deprecated],07-04-13,23-04-17,2013,2017,image_collection,"landsat, ndsi, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LC8_L1T_8DAY_NDSI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LC8_L1T_8DAY_NDSI_sample.png +LANDSAT/LC8_L1T_8DAY_NDVI,USGS,Landsat 8 8-Day NDVI Composite [deprecated],07-04-13,23-04-17,2013,2017,image_collection,"landsat, ndvi, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LC8_L1T_8DAY_NDVI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LC8_L1T_8DAY_NDVI_sample.png +LANDSAT/LC8_L1T_8DAY_NDWI,USGS,Landsat 8 8-Day NDWI Composite [deprecated],07-04-13,23-04-17,2013,2017,image_collection,"landsat, ndwi, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LC8_L1T_8DAY_NDWI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LC8_L1T_8DAY_NDWI_sample.png +LANDSAT/LC8_L1T_8DAY_RAW,Google,Landsat 8 8-Day Raw Composite [deprecated],07-04-13,23-04-17,2013,2017,image_collection,"landsat, raw, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LC8_L1T_8DAY_RAW#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LC8_L1T_8DAY_RAW_sample.png +LANDSAT/LC8_L1T_8DAY_TOA,Google,Landsat 8 8-Day TOA Reflectance Composite [deprecated],07-04-13,23-04-17,2013,2017,image_collection,"landsat, toa, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LC8_L1T_8DAY_TOA#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LC8_L1T_8DAY_TOA_sample.png +LANDSAT/LC8_L1T_32DAY_BAI,USGS,Landsat 8 32-Day BAI Composite [deprecated],07-04-13,07-04-17,2013,2017,image_collection,"bai, landsat, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LC8_L1T_32DAY_BAI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LC8_L1T_32DAY_BAI_sample.png +LANDSAT/LC8_L1T_32DAY_EVI,USGS,Landsat 8 32-Day EVI Composite [deprecated],07-04-13,07-04-17,2013,2017,image_collection,"evi, landsat, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LC8_L1T_32DAY_EVI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LC8_L1T_32DAY_EVI_sample.png +LANDSAT/LC8_L1T_32DAY_NBRT,USGS,Landsat 8 32-Day NBRT Composite [deprecated],07-04-13,07-04-17,2013,2017,image_collection,"landsat, nbrt, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LC8_L1T_32DAY_NBRT#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LC8_L1T_32DAY_NBRT_sample.png +LANDSAT/LC8_L1T_32DAY_NDSI,USGS,Landsat 8 32-Day NDSI Composite [deprecated],07-04-13,07-04-17,2013,2017,image_collection,"landsat, ndsi, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LC8_L1T_32DAY_NDSI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LC8_L1T_32DAY_NDSI_sample.png +LANDSAT/LC8_L1T_32DAY_NDVI,USGS,Landsat 8 32-Day NDVI Composite [deprecated],07-04-13,07-04-17,2013,2017,image_collection,"landsat, ndvi, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LC8_L1T_32DAY_NDVI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LC8_L1T_32DAY_NDVI_sample.png +LANDSAT/LC8_L1T_32DAY_NDWI,USGS,Landsat 8 32-Day NDWI Composite [deprecated],07-04-13,07-04-17,2013,2017,image_collection,"landsat, ndwi, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LC8_L1T_32DAY_NDWI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LC8_L1T_32DAY_NDWI_sample.png +LANDSAT/LC8_L1T_32DAY_RAW,Google,Landsat 8 32-Day Raw Composite [deprecated],07-04-13,07-04-17,2013,2017,image_collection,"landsat, raw, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LC8_L1T_32DAY_RAW#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LC8_L1T_32DAY_RAW_sample.png +LANDSAT/LC8_L1T_32DAY_TOA,Google,Landsat 8 32-Day TOA Reflectance Composite [deprecated],07-04-13,07-04-17,2013,2017,image_collection,"landsat, toa, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LC8_L1T_32DAY_TOA#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LC8_L1T_32DAY_TOA_sample.png +LANDSAT/LC8_L1T_ANNUAL_BAI,USGS,Landsat 8 Annual BAI Composite [deprecated],01-01-13,01-01-17,2013,2017,image_collection,"bai, landsat, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LC8_L1T_ANNUAL_BAI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LC8_L1T_ANNUAL_BAI_sample.png +LANDSAT/LC8_L1T_ANNUAL_EVI,USGS,Landsat 8 Annual EVI Composite [deprecated],01-01-13,01-01-17,2013,2017,image_collection,"evi, landsat, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LC8_L1T_ANNUAL_EVI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LC8_L1T_ANNUAL_EVI_sample.png +LANDSAT/LC8_L1T_ANNUAL_GREENEST_TOA,USGS,Landsat 8 Annual Greenest-Pixel TOA Reflectance Composite [deprecated],11-04-13,01-01-17,2013,2017,image_collection,"greenest, landsat, toa, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LC8_L1T_ANNUAL_GREENEST_TOA#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LC8_L1T_ANNUAL_GREENEST_TOA_sample.png +LANDSAT/LC8_L1T_ANNUAL_NBRT,USGS,Landsat 8 Annual NBRT Composite [deprecated],01-01-13,01-01-17,2013,2017,image_collection,"landsat, nbrt, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LC8_L1T_ANNUAL_NBRT#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LC8_L1T_ANNUAL_NBRT_sample.png +LANDSAT/LC8_L1T_ANNUAL_NDSI,USGS,Landsat 8 Annual NDSI Composite [deprecated],01-01-13,01-01-17,2013,2017,image_collection,"landsat, ndsi, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LC8_L1T_ANNUAL_NDSI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LC8_L1T_ANNUAL_NDSI_sample.png +LANDSAT/LC8_L1T_ANNUAL_NDVI,USGS,Landsat 8 Annual NDVI Composite [deprecated],01-01-13,01-01-17,2013,2017,image_collection,"landsat, ndvi, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LC8_L1T_ANNUAL_NDVI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LC8_L1T_ANNUAL_NDVI_sample.png +LANDSAT/LC8_L1T_ANNUAL_NDWI,USGS,Landsat 8 Annual NDWI Composite [deprecated],01-01-13,01-01-17,2013,2017,image_collection,"landsat, ndwi, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LC8_L1T_ANNUAL_NDWI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LC8_L1T_ANNUAL_NDWI_sample.png +LANDSAT/LC8_L1T_ANNUAL_RAW,Google,Landsat 8 Annual Raw Composite [deprecated],01-01-13,01-01-17,2013,2017,image_collection,"landsat, raw, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LC8_L1T_ANNUAL_RAW#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LC8_L1T_ANNUAL_RAW_sample.png +LANDSAT/LC8_L1T_ANNUAL_TOA,Google,Landsat 8 Annual TOA Reflectance Composite [deprecated],01-01-13,01-01-17,2013,2017,image_collection,"landsat, toa, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LC8_L1T_ANNUAL_TOA#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LC8_L1T_ANNUAL_TOA_sample.png +LANDSAT/LC8_L1T_TOA,USGS/Google,USGS Landsat 8 TOA Reflectance (Orthorectified) [deprecated],11-04-13,01-05-17,2013,2017,image_collection,"global, landsat, toa, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LC8_L1T_TOA#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LC8_L1T_TOA_sample.png +LANDSAT/LC09/C02/T1,USGS,USGS Landsat 9 Collection 2 Tier 1 Raw Scenes,31-10-21,25-03-23,2021,2023,image_collection,"c2, global, l9, landsat, lc9, oli_tirs, radiance, t1, tier1, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LC09_C02_T1#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LC09_C02_T1_sample.png +LANDSAT/LC09/C02/T1_L2,USGS,"USGS Landsat 9 Level 2, Collection 2, Tier 1",31-10-21,18-03-23,2021,2023,image_collection,"cfmask, cloud, fmask, global, l9sr, landsat, lasrc, lc09, lst, reflectance, sr, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LC09_C02_T1_L2#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LC09_C02_T1_L2_sample.png +LANDSAT/LC09/C02/T1_TOA,USGS/Google,USGS Landsat 9 Collection 2 Tier 1 TOA Reflectance,31-10-21,25-03-23,2021,2023,image_collection,"c2, global, landsat, toa, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LC09_C02_T1_TOA#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LC09_C02_T1_TOA_sample.png +LANDSAT/LC09/C02/T2,USGS,USGS Landsat 9 Collection 2 Tier 2 Raw Scenes,02-11-21,24-03-23,2021,2023,image_collection,"c2, global, l9, landsat, lc9, oli_tirs, radiance, t2, tier2, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LC09_C02_T2#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LC09_C02_T2_sample.png +LANDSAT/LC09/C02/T2_L2,USGS,"USGS Landsat 9 Level 2, Collection 2, Tier 2",31-10-21,18-03-23,2021,2023,image_collection,"cfmask, cloud, fmask, global, l9sr, landsat, lasrc, lc09, lst, reflectance, sr, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LC09_C02_T2_L2#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LC09_C02_T2_L2_sample.png +LANDSAT/LC09/C02/T2_TOA,USGS/Google,USGS Landsat 9 Collection 2 Tier 2 TOA Reflectance,02-11-21,24-03-23,2021,2023,image_collection,"c2, global, l9, landsat, lc9, toa, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LC09_C02_T2_TOA#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LC09_C02_T2_TOA_sample.png +LANDSAT/LE7,USGS,USGS Landsat 7 Raw Scenes [deprecated],28-05-99,30-04-17,1999,2017,image_collection,"etm, global, l7, landsat, le7, radiance, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LE7#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LE7_sample.png +LANDSAT/LE07/C01/T1,USGS,USGS Landsat 7 Collection 1 Tier 1 Raw Scenes [deprecated],28-05-99,31-12-21,1999,2021,image_collection,"c1, etm, global, l7, landsat, le7, radiance, t1, tier1, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LE07_C01_T1#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LE07_C01_T1_sample.png +LANDSAT/LE07/C01/T1_8DAY_BAI,Google,Landsat 7 Collection 1 Tier 1 8-Day BAI Composite,01-01-99,27-12-21,1999,2021,image_collection,"bai, landsat, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LE07_C01_T1_8DAY_BAI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LE07_C01_T1_8DAY_BAI_sample.png +LANDSAT/LE07/C01/T1_8DAY_EVI,Google,Landsat 7 Collection 1 Tier 1 8-Day EVI Composite,01-01-99,27-12-21,1999,2021,image_collection,"evi, landsat, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LE07_C01_T1_8DAY_EVI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LE07_C01_T1_8DAY_EVI_sample.png +LANDSAT/LE07/C01/T1_8DAY_NBRT,Google,Landsat 7 Collection 1 Tier 1 8-Day NBRT Composite,01-01-99,27-12-21,1999,2021,image_collection,"landsat, nbrt, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LE07_C01_T1_8DAY_NBRT#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LE07_C01_T1_8DAY_NBRT_sample.png +LANDSAT/LE07/C01/T1_8DAY_NDSI,Google,Landsat 7 Collection 1 Tier 1 8-Day NDSI Composite,01-01-99,27-12-21,1999,2021,image_collection,"landsat, ndsi, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LE07_C01_T1_8DAY_NDSI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LE07_C01_T1_8DAY_NDSI_sample.png +LANDSAT/LE07/C01/T1_8DAY_NDVI,Google,Landsat 7 Collection 1 Tier 1 8-Day NDVI Composite,01-01-99,27-12-21,1999,2021,image_collection,"landsat, ndvi, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LE07_C01_T1_8DAY_NDVI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LE07_C01_T1_8DAY_NDVI_sample.png +LANDSAT/LE07/C01/T1_8DAY_NDWI,Google,Landsat 7 Collection 1 Tier 1 8-Day NDWI Composite,01-01-99,27-12-21,1999,2021,image_collection,"landsat, ndwi, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LE07_C01_T1_8DAY_NDWI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LE07_C01_T1_8DAY_NDWI_sample.png +LANDSAT/LE07/C01/T1_8DAY_RAW,USGS/Google,Landsat 7 Collection 1 Tier 1 8-Day Raw Composite,01-01-99,27-12-21,1999,2021,image_collection,"landsat, raw, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LE07_C01_T1_8DAY_RAW#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LE07_C01_T1_8DAY_RAW_sample.png +LANDSAT/LE07/C01/T1_8DAY_TOA,Google,Landsat 7 Collection 1 Tier 1 8-Day TOA Reflectance Composite,01-01-99,27-12-21,1999,2021,image_collection,"landsat, toa, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LE07_C01_T1_8DAY_TOA#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LE07_C01_T1_8DAY_TOA_sample.png +LANDSAT/LE07/C01/T1_32DAY_BAI,Google,Landsat 7 Collection 1 Tier 1 32-Day BAI Composite,01-01-99,19-12-21,1999,2021,image_collection,"bai, landsat, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LE07_C01_T1_32DAY_BAI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LE07_C01_T1_32DAY_BAI_sample.png +LANDSAT/LE07/C01/T1_32DAY_EVI,Google,Landsat 7 Collection 1 Tier 1 32-Day EVI Composite,01-01-99,19-12-21,1999,2021,image_collection,"evi, landsat, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LE07_C01_T1_32DAY_EVI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LE07_C01_T1_32DAY_EVI_sample.png +LANDSAT/LE07/C01/T1_32DAY_NBRT,Google,Landsat 7 Collection 1 Tier 1 32-Day NBRT Composite,01-01-99,19-12-21,1999,2021,image_collection,"landsat, nbrt, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LE07_C01_T1_32DAY_NBRT#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LE07_C01_T1_32DAY_NBRT_sample.png +LANDSAT/LE07/C01/T1_32DAY_NDSI,Google,Landsat 7 Collection 1 Tier 1 32-Day NDSI Composite,01-01-99,19-12-21,1999,2021,image_collection,"landsat, ndsi, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LE07_C01_T1_32DAY_NDSI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LE07_C01_T1_32DAY_NDSI_sample.png +LANDSAT/LE07/C01/T1_32DAY_NDVI,Google,Landsat 7 Collection 1 Tier 1 32-Day NDVI Composite,01-01-99,19-12-21,1999,2021,image_collection,"landsat, ndvi, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LE07_C01_T1_32DAY_NDVI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LE07_C01_T1_32DAY_NDVI_sample.png +LANDSAT/LE07/C01/T1_32DAY_NDWI,Google,Landsat 7 Collection 1 Tier 1 32-Day NDWI Composite,01-01-99,19-12-21,1999,2021,image_collection,"landsat, ndwi, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LE07_C01_T1_32DAY_NDWI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LE07_C01_T1_32DAY_NDWI_sample.png +LANDSAT/LE07/C01/T1_32DAY_RAW,USGS/Google,Landsat 7 Collection 1 Tier 1 32-Day Raw Composite,01-01-99,19-12-21,1999,2021,image_collection,"landsat, raw, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LE07_C01_T1_32DAY_RAW#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LE07_C01_T1_32DAY_RAW_sample.png +LANDSAT/LE07/C01/T1_32DAY_TOA,Google,Landsat 7 Collection 1 Tier 1 32-Day TOA Reflectance Composite,01-01-99,19-12-21,1999,2021,image_collection,"landsat, toa, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LE07_C01_T1_32DAY_TOA#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LE07_C01_T1_32DAY_TOA_sample.png +LANDSAT/LE07/C01/T1_ANNUAL_BAI,Google,Landsat 7 Collection 1 Tier 1 Annual BAI Composite,01-01-99,01-01-21,1999,2021,image_collection,"bai, landsat, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LE07_C01_T1_ANNUAL_BAI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LE07_C01_T1_ANNUAL_BAI_sample.png +LANDSAT/LE07/C01/T1_ANNUAL_EVI,Google,Landsat 7 Collection 1 Tier 1 Annual EVI Composite,01-01-99,01-01-21,1999,2021,image_collection,"evi, landsat, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LE07_C01_T1_ANNUAL_EVI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LE07_C01_T1_ANNUAL_EVI_sample.png +LANDSAT/LE07/C01/T1_ANNUAL_GREENEST_TOA,Google,Landsat 7 Collection 1 Tier 1 Landsat 7 Collection 1 Tier 1 Annual Greenest-Pixel TOA Reflectance Composite,01-01-99,01-01-21,1999,2021,image_collection,"greenest, landsat, toa, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LE07_C01_T1_ANNUAL_GREENEST_TOA#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LE07_C01_T1_ANNUAL_GREENEST_TOA_sample.png +LANDSAT/LE07/C01/T1_ANNUAL_NBRT,Google,Landsat 7 Collection 1 Tier 1 Annual NBRT Composite,01-01-99,01-01-21,1999,2021,image_collection,"landsat, nbrt, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LE07_C01_T1_ANNUAL_NBRT#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LE07_C01_T1_ANNUAL_NBRT_sample.png +LANDSAT/LE07/C01/T1_ANNUAL_NDSI,Google,Landsat 7 Collection 1 Tier 1 Annual NDSI Composite,01-01-99,01-01-21,1999,2021,image_collection,"landsat, ndsi, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LE07_C01_T1_ANNUAL_NDSI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LE07_C01_T1_ANNUAL_NDSI_sample.png +LANDSAT/LE07/C01/T1_ANNUAL_NDVI,Google,Landsat 7 Collection 1 Tier 1 Annual NDVI Composite,01-01-99,01-01-21,1999,2021,image_collection,"landsat, ndvi, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LE07_C01_T1_ANNUAL_NDVI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LE07_C01_T1_ANNUAL_NDVI_sample.png +LANDSAT/LE07/C01/T1_ANNUAL_NDWI,Google,Landsat 7 Collection 1 Tier 1 Annual NDWI Composite,01-01-99,01-01-21,1999,2021,image_collection,"landsat, ndwi, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LE07_C01_T1_ANNUAL_NDWI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LE07_C01_T1_ANNUAL_NDWI_sample.png +LANDSAT/LE07/C01/T1_ANNUAL_RAW,USGS/Google,Landsat 7 Collection 1 Tier 1 Annual Raw Composite,01-01-99,01-01-21,1999,2021,image_collection,"landsat, raw, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LE07_C01_T1_ANNUAL_RAW#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LE07_C01_T1_ANNUAL_RAW_sample.png +LANDSAT/LE07/C01/T1_ANNUAL_TOA,Google,Landsat 7 Collection 1 Tier 1 Annual TOA Reflectance Composite,01-01-99,01-01-21,1999,2021,image_collection,"landsat, toa, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LE07_C01_T1_ANNUAL_TOA#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LE07_C01_T1_ANNUAL_TOA_sample.png +LANDSAT/LE07/C01/T1_RT,USGS,USGS Landsat 7 Collection 1 Tier 1 and Real-Time data Raw Scenes [deprecated],28-05-99,31-12-21,1999,2021,image_collection,"c1, etm, global, l7, landsat, le7, nrt, radiance, rt, t1, tier1, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LE07_C01_T1_RT#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LE07_C01_T1_RT_sample.png +LANDSAT/LE07/C01/T1_RT_TOA,USGS/Google,USGS Landsat 7 Collection 1 Tier 1 and Real-Time data TOA Reflectance [deprecated],28-05-99,31-12-21,1999,2021,image_collection,"global, landsat, toa, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LE07_C01_T1_RT_TOA#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LE07_C01_T1_RT_TOA_sample.png +LANDSAT/LE07/C01/T1_SR,USGS,USGS Landsat 7 Surface Reflectance Tier 1 [deprecated],28-05-99,31-12-21,1999,2021,image_collection,"cfmask, cloud, fmask, global, landsat, le07, ledaps, reflectance, sr, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LE07_C01_T1_SR#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LE07_C01_T1_SR_sample.png +LANDSAT/LE07/C01/T1_TOA,USGS/Google,USGS Landsat 7 Collection 1 Tier 1 TOA Reflectance [deprecated],28-05-99,31-12-21,1999,2021,image_collection,"global, landsat, toa, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LE07_C01_T1_TOA#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LE07_C01_T1_TOA_sample.png +LANDSAT/LE07/C01/T2,USGS,USGS Landsat 7 Collection 1 Tier 2 Raw Scenes [deprecated],28-05-99,31-12-21,1999,2021,image_collection,"c1, etm, global, l7, landsat, le7, radiance, t2, tier2, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LE07_C01_T2#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LE07_C01_T2_sample.png +LANDSAT/LE07/C01/T2_SR,USGS,USGS Landsat 7 Surface Reflectance Tier 2 [deprecated],28-05-99,17-10-21,1999,2021,image_collection,"cfmask, cloud, fmask, global, landsat, le07, ledaps, reflectance, sr, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LE07_C01_T2_SR#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LE07_C01_T2_SR_sample.png +LANDSAT/LE07/C01/T2_TOA,USGS/Google,USGS Landsat 7 Collection 1 Tier 2 TOA Reflectance [deprecated],28-05-99,31-12-21,1999,2021,image_collection,"global, landsat, toa, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LE07_C01_T2_TOA#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LE07_C01_T2_TOA_sample.png +LANDSAT/LE07/C02/T1,USGS,USGS Landsat 7 Collection 2 Tier 1 Raw Scenes,01-01-99,22-02-23,1999,2023,image_collection,"c2, etm, global, l7, landsat, le7, radiance, t1, tier1, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LE07_C02_T1#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LE07_C02_T1_sample.png +LANDSAT/LE07/C02/T1_L2,USGS,"USGS Landsat 7 Level 2, Collection 2, Tier 1",28-05-99,22-02-23,1999,2023,image_collection,"cfmask, cloud, etm, fmask, global, landsat, lasrc, le07, lst, reflectance, sr, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LE07_C02_T1_L2#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LE07_C02_T1_L2_sample.png +LANDSAT/LE07/C02/T1_RT,USGS,USGS Landsat 7 Collection 2 Tier 1 and Real-Time data Raw Scenes,01-01-99,23-03-23,1999,2023,image_collection,"c2, etm, global, l7, landsat, le7, nrt, radiance, rt, t1, tier1, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LE07_C02_T1_RT#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LE07_C02_T1_RT_sample.png +LANDSAT/LE07/C02/T1_RT_TOA,USGS/Google,USGS Landsat 7 Collection 2 Tier 1 and Real-Time data TOA Reflectance,29-06-99,23-03-23,1999,2023,image_collection,"c2, global, landsat, toa, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LE07_C02_T1_RT_TOA#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LE07_C02_T1_RT_TOA_sample.png +LANDSAT/LE07/C02/T1_TOA,USGS/Google,USGS Landsat 7 Collection 2 Tier 1 TOA Reflectance,29-06-99,22-02-23,1999,2023,image_collection,"c2, global, landsat, toa, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LE07_C02_T1_TOA#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LE07_C02_T1_TOA_sample.png +LANDSAT/LE07/C02/T2,USGS,USGS Landsat 7 Collection 2 Tier 2 Raw Scenes,01-01-99,22-02-23,1999,2023,image_collection,"c2, etm, global, l7, landsat, le7, radiance, t2, tier2, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LE07_C02_T2#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LE07_C02_T2_sample.png +LANDSAT/LE07/C02/T2_L2,USGS,"USGS Landsat 7 Level 2, Collection 2, Tier 2",28-05-99,22-02-23,1999,2023,image_collection,"cfmask, cloud, etm, fmask, global, landsat, lasrc, le07, lst, reflectance, sr, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LE07_C02_T2_L2#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LE07_C02_T2_L2_sample.png +LANDSAT/LE07/C02/T2_TOA,USGS/Google,USGS Landsat 7 Collection 2 Tier 2 TOA Reflectance,01-12-03,22-02-23,2003,2023,image_collection,"c2, global, landsat, toa, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LE07_C02_T2_TOA#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LE07_C02_T2_TOA_sample.png +LANDSAT/LE7_L1T,USGS,USGS Landsat 7 Raw Scenes (Orthorectified) [deprecated],28-05-99,30-04-17,1999,2017,image_collection,"etm, global, l7, landsat, le7, radiance, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LE7_L1T#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LE7_L1T_sample.png +LANDSAT/LE7_L1T_8DAY_BAI,USGS,Landsat 7 8-Day BAI Composite [deprecated],01-01-99,23-04-17,1999,2017,image_collection,"bai, landsat, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LE7_L1T_8DAY_BAI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LE7_L1T_8DAY_BAI_sample.png +LANDSAT/LE7_L1T_8DAY_EVI,USGS,Landsat 7 8-Day EVI Composite [deprecated],01-01-99,23-04-17,1999,2017,image_collection,"evi, landsat, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LE7_L1T_8DAY_EVI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LE7_L1T_8DAY_EVI_sample.png +LANDSAT/LE7_L1T_8DAY_NBRT,USGS,Landsat 7 8-Day NBRT Composite [deprecated],01-01-99,23-04-17,1999,2017,image_collection,"landsat, nbrt, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LE7_L1T_8DAY_NBRT#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LE7_L1T_8DAY_NBRT_sample.png +LANDSAT/LE7_L1T_8DAY_NDSI,USGS,Landsat 7 8-Day NDSI Composite [deprecated],01-01-99,23-04-17,1999,2017,image_collection,"landsat, ndsi, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LE7_L1T_8DAY_NDSI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LE7_L1T_8DAY_NDSI_sample.png +LANDSAT/LE7_L1T_8DAY_NDVI,USGS,Landsat 7 8-Day NDVI Composite [deprecated],01-01-99,23-04-17,1999,2017,image_collection,"landsat, ndvi, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LE7_L1T_8DAY_NDVI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LE7_L1T_8DAY_NDVI_sample.png +LANDSAT/LE7_L1T_8DAY_NDWI,USGS,Landsat 7 8-Day NDWI Composite [deprecated],01-01-99,23-04-17,1999,2017,image_collection,"landsat, ndwi, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LE7_L1T_8DAY_NDWI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LE7_L1T_8DAY_NDWI_sample.png +LANDSAT/LE7_L1T_8DAY_RAW,Google,Landsat 7 8-Day Raw Composite [deprecated],01-01-99,23-04-17,1999,2017,image_collection,"landsat, raw, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LE7_L1T_8DAY_RAW#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LE7_L1T_8DAY_RAW_sample.png +LANDSAT/LE7_L1T_8DAY_TOA,Google,Landsat 7 8-Day TOA Reflectance Composite [deprecated],01-01-99,23-04-17,1999,2017,image_collection,"landsat, toa, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LE7_L1T_8DAY_TOA#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LE7_L1T_8DAY_TOA_sample.png +LANDSAT/LE7_L1T_32DAY_BAI,USGS,Landsat 7 32-Day BAI Composite [deprecated],01-01-99,07-04-17,1999,2017,image_collection,"bai, landsat, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LE7_L1T_32DAY_BAI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LE7_L1T_32DAY_BAI_sample.png +LANDSAT/LE7_L1T_32DAY_EVI,USGS,Landsat 7 32-Day EVI Composite [deprecated],01-01-99,07-04-17,1999,2017,image_collection,"evi, landsat, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LE7_L1T_32DAY_EVI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LE7_L1T_32DAY_EVI_sample.png +LANDSAT/LE7_L1T_32DAY_NBRT,USGS,Landsat 7 32-Day NBRT Composite [deprecated],01-01-99,07-04-17,1999,2017,image_collection,"landsat, nbrt, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LE7_L1T_32DAY_NBRT#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LE7_L1T_32DAY_NBRT_sample.png +LANDSAT/LE7_L1T_32DAY_NDSI,USGS,Landsat 7 32-Day NDSI Composite [deprecated],01-01-99,07-04-17,1999,2017,image_collection,"landsat, ndsi, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LE7_L1T_32DAY_NDSI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LE7_L1T_32DAY_NDSI_sample.png +LANDSAT/LE7_L1T_32DAY_NDVI,USGS,Landsat 7 32-Day NDVI Composite [deprecated],01-01-99,07-04-17,1999,2017,image_collection,"landsat, ndvi, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LE7_L1T_32DAY_NDVI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LE7_L1T_32DAY_NDVI_sample.png +LANDSAT/LE7_L1T_32DAY_NDWI,USGS,Landsat 7 32-Day NDWI Composite [deprecated],01-01-99,07-04-17,1999,2017,image_collection,"landsat, ndwi, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LE7_L1T_32DAY_NDWI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LE7_L1T_32DAY_NDWI_sample.png +LANDSAT/LE7_L1T_32DAY_RAW,Google,Landsat 7 32-Day Raw Composite [deprecated],01-01-99,07-04-17,1999,2017,image_collection,"landsat, raw, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LE7_L1T_32DAY_RAW#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LE7_L1T_32DAY_RAW_sample.png +LANDSAT/LE7_L1T_32DAY_TOA,Google,Landsat 7 32-Day TOA Reflectance Composite [deprecated],01-01-99,07-04-17,1999,2017,image_collection,"landsat, toa, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LE7_L1T_32DAY_TOA#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LE7_L1T_32DAY_TOA_sample.png +LANDSAT/LE7_L1T_ANNUAL_BAI,USGS,Landsat 7 Annual BAI Composite [deprecated],01-01-99,01-01-17,1999,2017,image_collection,"bai, landsat, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LE7_L1T_ANNUAL_BAI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LE7_L1T_ANNUAL_BAI_sample.png +LANDSAT/LE7_L1T_ANNUAL_EVI,USGS,Landsat 7 Annual EVI Composite [deprecated],01-01-99,01-01-17,1999,2017,image_collection,"evi, landsat, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LE7_L1T_ANNUAL_EVI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LE7_L1T_ANNUAL_EVI_sample.png +LANDSAT/LE7_L1T_ANNUAL_GREENEST_TOA,USGS,Landsat 7 Annual Greenest-Pixel TOA Reflectance Composite [deprecated],01-01-99,01-01-17,1999,2017,image_collection,"greenest, landsat, toa, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LE7_L1T_ANNUAL_GREENEST_TOA#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LE7_L1T_ANNUAL_GREENEST_TOA_sample.png +LANDSAT/LE7_L1T_ANNUAL_NBRT,USGS,Landsat 7 Annual NBRT Composite [deprecated],01-01-99,01-01-17,1999,2017,image_collection,"landsat, nbrt, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LE7_L1T_ANNUAL_NBRT#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LE7_L1T_ANNUAL_NBRT_sample.png +LANDSAT/LE7_L1T_ANNUAL_NDSI,USGS,Landsat 7 Annual NDSI Composite [deprecated],01-01-99,01-01-17,1999,2017,image_collection,"landsat, ndsi, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LE7_L1T_ANNUAL_NDSI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LE7_L1T_ANNUAL_NDSI_sample.png +LANDSAT/LE7_L1T_ANNUAL_NDVI,USGS,Landsat 7 Annual NDVI Composite [deprecated],01-01-99,01-01-17,1999,2017,image_collection,"landsat, ndvi, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LE7_L1T_ANNUAL_NDVI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LE7_L1T_ANNUAL_NDVI_sample.png +LANDSAT/LE7_L1T_ANNUAL_NDWI,USGS,Landsat 7 Annual NDWI Composite [deprecated],01-01-99,01-01-17,1999,2017,image_collection,"landsat, ndwi, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LE7_L1T_ANNUAL_NDWI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LE7_L1T_ANNUAL_NDWI_sample.png +LANDSAT/LE7_L1T_ANNUAL_RAW,Google,Landsat 7 Annual Raw Composite [deprecated],01-01-99,01-01-17,1999,2017,image_collection,"landsat, raw, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LE7_L1T_ANNUAL_RAW#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LE7_L1T_ANNUAL_RAW_sample.png +LANDSAT/LE7_L1T_ANNUAL_TOA,Google,Landsat 7 Annual TOA Reflectance Composite [deprecated],01-01-99,01-01-17,1999,2017,image_collection,"landsat, toa, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LE7_L1T_ANNUAL_TOA#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LE7_L1T_ANNUAL_TOA_sample.png +LANDSAT/LE7_L1T_TOA,USGS/Google,USGS Landsat 7 TOA Reflectance (Orthorectified) [deprecated],28-05-99,30-04-17,1999,2017,image_collection,"global, landsat, toa, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LE7_L1T_TOA#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LE7_L1T_TOA_sample.png +LANDSAT/LE7_TOA_1YEAR,Google,Landsat 7 annual TOA percentile composites,01-01-99,01-01-14,1999,2014,image_collection,"annual, etm, global, l7, landsat, le7, percentile, toa, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LE7_TOA_1YEAR#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LE7_TOA_1YEAR_sample.png +LANDSAT/LE7_TOA_3YEAR,Google,Landsat 7 3-year TOA percentile composites,01-01-00,01-01-12,2000,2012,image_collection,"etm, global, l7, landsat, le7, percentile, toa, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LE7_TOA_3YEAR#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LE7_TOA_3YEAR_sample.png +LANDSAT/LE7_TOA_5YEAR,Google,Landsat 7 5-year TOA percentile composites,01-01-99,01-01-08,1999,2008,image_collection,"etm, global, l7, landsat, le7, percentile, toa, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LE7_TOA_5YEAR#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LE7_TOA_5YEAR_sample.png +LANDSAT/LM1,USGS,USGS Landsat 1 MSS Raw Scenes [deprecated],25-07-72,07-01-78,1972,1978,image_collection,"global, l1, landsat, lm1, mss, radiance, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LM1#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LM1_sample.png +LANDSAT/LM01/C01/T1,USGS,USGS Landsat 1 MSS Collection 1 Tier 1 Raw Scenes [deprecated],26-07-72,06-01-78,1972,1978,image_collection,"c1, global, l1, landsat, lm1, mss, radiance, t1, tier1, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LM01_C01_T1#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LM01_C01_T1_sample.png +LANDSAT/LM01/C01/T2,USGS,USGS Landsat 1 MSS Collection 1 Tier 2 Raw Scenes [deprecated],25-07-72,07-01-78,1972,1978,image_collection,"c1, global, l1, landsat, lm1, mss, radiance, t2, tier2, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LM01_C01_T2#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LM01_C01_T2_sample.png +LANDSAT/LM01/C02/T1,USGS,USGS Landsat 1 MSS Collection 2 Tier 1 Raw Scenes,26-07-72,06-01-78,1972,1978,image_collection,"c2, global, l1, landsat, lm1, mss, radiance, t1, tier1, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LM01_C02_T1#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LM01_C02_T1_sample.png +LANDSAT/LM01/C02/T2,USGS,USGS Landsat 1 MSS Collection 2 Tier 2 Raw Scenes,25-07-72,07-01-78,1972,1978,image_collection,"c2, global, l1, landsat, lm1, mss, radiance, t2, tier2, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LM01_C02_T2#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LM01_C02_T2_sample.png +LANDSAT/LM1_L1T,USGS,USGS Landsat 1 MSS Raw Scenes (Orthorectified) [deprecated],25-07-72,07-01-78,1972,1978,image_collection,"global, l1, landsat, lm1, mss, radiance, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LM1_L1T#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LM1_L1T_sample.png +LANDSAT/LM2,USGS,USGS Landsat 2 MSS Raw Scenes [deprecated],24-01-75,18-02-82,1975,1982,image_collection,"global, l2, landsat, lm2, mss, radiance, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LM2#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LM2_sample.png +LANDSAT/LM02/C01/T1,USGS,USGS Landsat 2 MSS Collection 1 Tier 1 Raw Scenes [deprecated],31-01-75,03-02-82,1975,1982,image_collection,"c1, global, l2, landsat, lm2, mss, radiance, t1, tier1, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LM02_C01_T1#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LM02_C01_T1_sample.png +LANDSAT/LM02/C01/T2,USGS,USGS Landsat 2 MSS Collection 1 Tier 2 Raw Scenes [deprecated],24-01-75,12-03-82,1975,1982,image_collection,"c1, global, l2, landsat, lm2, mss, radiance, t2, tier2, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LM02_C01_T2#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LM02_C01_T2_sample.png +LANDSAT/LM02/C02/T1,USGS,USGS Landsat 2 MSS Collection 2 Tier 1 Raw Scenes,31-01-75,03-02-82,1975,1982,image_collection,"c2, global, l2, landsat, lm2, mss, radiance, t1, tier1, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LM02_C02_T1#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LM02_C02_T1_sample.png +LANDSAT/LM02/C02/T2,USGS,USGS Landsat 2 MSS Collection 2 Tier 2 Raw Scenes,24-01-75,12-03-82,1975,1982,image_collection,"c2, global, l2, landsat, lm2, mss, radiance, t2, tier2, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LM02_C02_T2#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LM02_C02_T2_sample.png +LANDSAT/LM2_L1T,USGS,USGS Landsat 2 MSS Raw Scenes (Orthorectified) [deprecated],24-01-75,08-02-82,1975,1982,image_collection,"global, l2, landsat, lm2, mss, radiance, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LM2_L1T#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LM2_L1T_sample.png +LANDSAT/LM3,USGS,USGS Landsat 3 MSS Raw Scenes [deprecated],07-03-78,31-03-83,1978,1983,image_collection,"global, l3, landsat, lm3, mss, radiance, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LM3#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LM3_sample.png +LANDSAT/LM03/C01/T1,USGS,USGS Landsat 3 MSS Collection 1 Tier 1 Raw Scenes [deprecated],03-06-78,23-02-83,1978,1983,image_collection,"c1, global, l3, landsat, lm3, mss, radiance, t1, tier1, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LM03_C01_T1#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LM03_C01_T1_sample.png +LANDSAT/LM03/C01/T2,USGS,USGS Landsat 3 MSS Collection 1 Tier 2 Raw Scenes [deprecated],07-03-78,31-03-83,1978,1983,image_collection,"c1, global, l3, landsat, lm3, mss, radiance, t2, tier2, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LM03_C01_T2#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LM03_C01_T2_sample.png +LANDSAT/LM03/C02/T1,USGS,USGS Landsat 3 MSS Collection 2 Tier 1 Raw Scenes,03-06-78,23-02-83,1978,1983,image_collection,"c2, global, l3, landsat, lm3, mss, radiance, t1, tier1, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LM03_C02_T1#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LM03_C02_T1_sample.png +LANDSAT/LM03/C02/T2,USGS,USGS Landsat 3 MSS Collection 2 Tier 2 Raw Scenes,07-03-78,31-03-83,1978,1983,image_collection,"c2, global, l3, landsat, lm3, mss, radiance, t2, tier2, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LM03_C02_T2#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LM03_C02_T2_sample.png +LANDSAT/LM3_L1T,USGS,USGS Landsat 3 MSS Raw Scenes (Orthorectified) [deprecated],07-03-78,31-03-83,1978,1983,image_collection,"global, l3, landsat, lm3, mss, radiance, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LM3_L1T#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LM3_L1T_sample.png +LANDSAT/LM4,USGS,USGS Landsat 4 MSS Raw Scenes [deprecated],06-08-82,15-10-92,1982,1992,image_collection,"global, l4, landsat, lm4, mss, radiance, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LM4#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LM4_sample.png +LANDSAT/LM04/C01/T1,USGS,USGS Landsat 4 MSS Collection 1 Tier 1 Raw Scenes [deprecated],14-08-82,28-08-92,1982,1992,image_collection,"c1, global, l4, landsat, lm4, mss, radiance, t1, tier1, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LM04_C01_T1#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LM04_C01_T1_sample.png +LANDSAT/LM04/C01/T2,USGS,USGS Landsat 4 MSS Collection 1 Tier 2 Raw Scenes [deprecated],06-08-82,15-10-92,1982,1992,image_collection,"c1, global, l4, landsat, lm4, mss, radiance, t2, tier2, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LM04_C01_T2#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LM04_C01_T2_sample.png +LANDSAT/LM04/C02/T1,USGS,USGS Landsat 4 MSS Collection 2 Tier 1 Raw Scenes,14-08-82,28-08-92,1982,1992,image_collection,"c2, global, l4, landsat, lm4, mss, radiance, t1, tier1, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LM04_C02_T1#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LM04_C02_T1_sample.png +LANDSAT/LM04/C02/T2,USGS,USGS Landsat 4 MSS Collection 2 Tier 2 Raw Scenes,06-08-82,15-10-92,1982,1992,image_collection,"c2, global, l4, landsat, lm4, mss, radiance, t2, tier2, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LM04_C02_T2#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LM04_C02_T2_sample.png +LANDSAT/LM4_L1T,USGS,USGS Landsat 4 MSS Raw Scenes (Orthorectified) [deprecated],06-08-82,14-10-92,1982,1992,image_collection,"global, l4, landsat, lm4, mss, radiance, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LM4_L1T#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LM4_L1T_sample.png +LANDSAT/LM5,USGS,USGS Landsat 5 MSS Raw Scenes [deprecated],04-03-84,07-01-13,1984,2013,image_collection,"global, l5, landsat, lm5, mss, radiance, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LM5#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LM5_sample.png +LANDSAT/LM05/C01/T1,USGS,USGS Landsat 5 MSS Collection 1 Tier 1 Raw Scenes [deprecated],07-04-84,01-01-13,1984,2013,image_collection,"c1, global, l5, landsat, lm5, mss, radiance, t1, tier1, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LM05_C01_T1#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LM05_C01_T1_sample.png +LANDSAT/LM05/C01/T2,USGS,USGS Landsat 5 MSS Collection 1 Tier 2 Raw Scenes [deprecated],04-03-84,07-01-13,1984,2013,image_collection,"c1, global, l5, landsat, lm5, mss, radiance, t2, tier2, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LM05_C01_T2#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LM05_C01_T2_sample.png +LANDSAT/LM05/C02/T1,USGS,USGS Landsat 5 MSS Collection 2 Tier 1 Raw Scenes,07-04-84,01-01-13,1984,2013,image_collection,"c2, global, l5, landsat, lm5, mss, radiance, t1, tier1, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LM05_C02_T1#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LM05_C02_T1_sample.png +LANDSAT/LM05/C02/T2,USGS,USGS Landsat 5 MSS Collection 2 Tier 2 Raw Scenes,07-04-84,01-01-13,1984,2013,image_collection,"c2, global, l5, landsat, lm5, mss, radiance, t2, tier2, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LM05_C02_T2#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LM05_C02_T2_sample.png +LANDSAT/LM5_L1T,USGS,USGS Landsat 5 MSS Raw Scenes (Orthorectified) [deprecated],04-03-84,07-01-13,1984,2013,image_collection,"global, l5, landsat, lm5, mss, radiance, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LM5_L1T#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LM5_L1T_sample.png +LANDSAT/LO08/C01/T1,USGS,USGS Landsat 8 Collection 1 Tier 1 OLI Raw Scenes [deprecated],01-04-13,14-11-20,2013,2020,image_collection,"c1, global, l8, landsat, lo8, oli, radiance, t1, tier1, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LO08_C01_T1#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LO08_C01_T1_sample.png +LANDSAT/LO08/C01/T1_RT,USGS,USGS Landsat 8 Collection 1 Tier 1 and Real-Time data OLI Raw Scenes [deprecated],01-04-13,14-11-20,2013,2020,image_collection,"c1, global, l8, landsat, lo8, nrt, oli, radiance, rt, t1, tier1, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LO08_C01_T1_RT#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LO08_C01_T1_RT_sample.png +LANDSAT/LO08/C01/T2,USGS,USGS Landsat 8 Collection 1 Tier 2 OLI Raw Scenes [deprecated],01-04-13,14-11-20,2013,2020,image_collection,"c1, global, l8, landsat, lo8, oli, radiance, t2, tier2, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LO08_C01_T2#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LO08_C01_T2_sample.png +LANDSAT/LT4,USGS,USGS Landsat 4 TM Raw Scenes [deprecated],22-08-82,18-11-93,1982,1993,image_collection,"global, l4, landsat, lt4, radiance, tm, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LT4#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LT4_sample.png +LANDSAT/LT04/C01/T1,USGS,USGS Landsat 4 TM Collection 1 Tier 1 Raw Scenes [deprecated],22-08-82,14-12-93,1982,1993,image_collection,"c1, global, l4, landsat, lt4, radiance, t1, tier1, tm, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LT04_C01_T1#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LT04_C01_T1_sample.png +LANDSAT/LT04/C01/T1_8DAY_BAI,Google,Landsat 4 TM Collection 1 Tier 1 8-Day BAI Composite,21-08-82,11-12-93,1982,1993,image_collection,"bai, landsat, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LT04_C01_T1_8DAY_BAI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LT04_C01_T1_8DAY_BAI_sample.png +LANDSAT/LT04/C01/T1_8DAY_EVI,Google,Landsat 4 TM Collection 1 Tier 1 8-Day EVI Composite,21-08-82,11-12-93,1982,1993,image_collection,"evi, landsat, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LT04_C01_T1_8DAY_EVI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LT04_C01_T1_8DAY_EVI_sample.png +LANDSAT/LT04/C01/T1_8DAY_NBRT,Google,Landsat 4 TM Collection 1 Tier 1 8-Day NBRT Composite,21-08-82,11-12-93,1982,1993,image_collection,"landsat, nbrt, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LT04_C01_T1_8DAY_NBRT#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LT04_C01_T1_8DAY_NBRT_sample.png +LANDSAT/LT04/C01/T1_8DAY_NDSI,Google,Landsat 4 TM Collection 1 Tier 1 8-Day NDSI Composite,21-08-82,11-12-93,1982,1993,image_collection,"landsat, ndsi, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LT04_C01_T1_8DAY_NDSI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LT04_C01_T1_8DAY_NDSI_sample.png +LANDSAT/LT04/C01/T1_8DAY_NDVI,Google,Landsat 4 TM Collection 1 Tier 1 8-Day NDVI Composite,21-08-82,11-12-93,1982,1993,image_collection,"landsat, ndvi, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LT04_C01_T1_8DAY_NDVI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LT04_C01_T1_8DAY_NDVI_sample.png +LANDSAT/LT04/C01/T1_8DAY_NDWI,Google,Landsat 4 TM Collection 1 Tier 1 8-Day NDWI Composite,21-08-82,11-12-93,1982,1993,image_collection,"landsat, ndwi, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LT04_C01_T1_8DAY_NDWI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LT04_C01_T1_8DAY_NDWI_sample.png +LANDSAT/LT04/C01/T1_8DAY_RAW,USGS/Google,Landsat 4 TM Collection 1 Tier 1 8-Day Raw Composite,21-08-82,11-12-93,1982,1993,image_collection,"landsat, raw, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LT04_C01_T1_8DAY_RAW#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LT04_C01_T1_8DAY_RAW_sample.png +LANDSAT/LT04/C01/T1_8DAY_TOA,Google,Landsat 4 TM Collection 1 Tier 1 8-Day TOA Reflectance Composite,21-08-82,11-12-93,1982,1993,image_collection,"landsat, toa, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LT04_C01_T1_8DAY_TOA#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LT04_C01_T1_8DAY_TOA_sample.png +LANDSAT/LT04/C01/T1_32DAY_BAI,Google,Landsat 4 TM Collection 1 Tier 1 32-Day BAI Composite,13-08-82,17-11-93,1982,1993,image_collection,"bai, landsat, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LT04_C01_T1_32DAY_BAI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LT04_C01_T1_32DAY_BAI_sample.png +LANDSAT/LT04/C01/T1_32DAY_EVI,Google,Landsat 4 TM Collection 1 Tier 1 32-Day EVI Composite,13-08-82,17-11-93,1982,1993,image_collection,"evi, landsat, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LT04_C01_T1_32DAY_EVI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LT04_C01_T1_32DAY_EVI_sample.png +LANDSAT/LT04/C01/T1_32DAY_NBRT,Google,Landsat 4 TM Collection 1 Tier 1 32-Day NBRT Composite,13-08-82,17-11-93,1982,1993,image_collection,"landsat, nbrt, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LT04_C01_T1_32DAY_NBRT#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LT04_C01_T1_32DAY_NBRT_sample.png +LANDSAT/LT04/C01/T1_32DAY_NDSI,Google,Landsat 4 TM Collection 1 Tier 1 32-Day NDSI Composite,13-08-82,17-11-93,1982,1993,image_collection,"landsat, ndsi, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LT04_C01_T1_32DAY_NDSI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LT04_C01_T1_32DAY_NDSI_sample.png +LANDSAT/LT04/C01/T1_32DAY_NDVI,Google,Landsat 4 TM Collection 1 Tier 1 32-Day NDVI Composite,13-08-82,17-11-93,1982,1993,image_collection,"landsat, ndvi, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LT04_C01_T1_32DAY_NDVI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LT04_C01_T1_32DAY_NDVI_sample.png +LANDSAT/LT04/C01/T1_32DAY_NDWI,Google,Landsat 4 TM Collection 1 Tier 1 32-Day NDWI Composite,13-08-82,17-11-93,1982,1993,image_collection,"landsat, ndwi, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LT04_C01_T1_32DAY_NDWI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LT04_C01_T1_32DAY_NDWI_sample.png +LANDSAT/LT04/C01/T1_32DAY_RAW,USGS/Google,Landsat 4 TM Collection 1 Tier 1 32-Day Raw Composite,13-08-82,17-11-93,1982,1993,image_collection,"landsat, raw, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LT04_C01_T1_32DAY_RAW#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LT04_C01_T1_32DAY_RAW_sample.png +LANDSAT/LT04/C01/T1_32DAY_TOA,Google,Landsat 4 TM Collection 1 Tier 1 32-Day TOA Reflectance Composite,13-08-82,17-11-93,1982,1993,image_collection,"landsat, toa, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LT04_C01_T1_32DAY_TOA#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LT04_C01_T1_32DAY_TOA_sample.png +LANDSAT/LT04/C01/T1_ANNUAL_BAI,Google,Landsat 4 TM Collection 1 Tier 1 Annual BAI Composite,01-01-82,01-01-93,1982,1993,image_collection,"bai, landsat, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LT04_C01_T1_ANNUAL_BAI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LT04_C01_T1_ANNUAL_BAI_sample.png +LANDSAT/LT04/C01/T1_ANNUAL_EVI,Google,Landsat 4 TM Collection 1 Tier 1 Annual EVI Composite,01-01-82,01-01-93,1982,1993,image_collection,"evi, landsat, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LT04_C01_T1_ANNUAL_EVI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LT04_C01_T1_ANNUAL_EVI_sample.png +LANDSAT/LT04/C01/T1_ANNUAL_GREENEST_TOA,Google,Landsat 4 TM Collection 1 Tier 1 Landsat 4 TM Collection 1 Tier 1 Annual Greenest-Pixel TOA Reflectance Composite,01-01-82,01-01-93,1982,1993,image_collection,"greenest, landsat, toa, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LT04_C01_T1_ANNUAL_GREENEST_TOA#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LT04_C01_T1_ANNUAL_GREENEST_TOA_sample.png +LANDSAT/LT04/C01/T1_ANNUAL_NBRT,Google,Landsat 4 TM Collection 1 Tier 1 Annual NBRT Composite,01-01-82,01-01-93,1982,1993,image_collection,"landsat, nbrt, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LT04_C01_T1_ANNUAL_NBRT#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LT04_C01_T1_ANNUAL_NBRT_sample.png +LANDSAT/LT04/C01/T1_ANNUAL_NDSI,Google,Landsat 4 TM Collection 1 Tier 1 Annual NDSI Composite,01-01-82,01-01-93,1982,1993,image_collection,"landsat, ndsi, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LT04_C01_T1_ANNUAL_NDSI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LT04_C01_T1_ANNUAL_NDSI_sample.png +LANDSAT/LT04/C01/T1_ANNUAL_NDVI,Google,Landsat 4 TM Collection 1 Tier 1 Annual NDVI Composite,01-01-82,01-01-93,1982,1993,image_collection,"landsat, ndvi, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LT04_C01_T1_ANNUAL_NDVI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LT04_C01_T1_ANNUAL_NDVI_sample.png +LANDSAT/LT04/C01/T1_ANNUAL_NDWI,Google,Landsat 4 TM Collection 1 Tier 1 Annual NDWI Composite,01-01-82,01-01-93,1982,1993,image_collection,"landsat, ndwi, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LT04_C01_T1_ANNUAL_NDWI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LT04_C01_T1_ANNUAL_NDWI_sample.png +LANDSAT/LT04/C01/T1_ANNUAL_RAW,USGS/Google,Landsat 4 TM Collection 1 Tier 1 Annual Raw Composite,01-01-82,01-01-93,1982,1993,image_collection,"landsat, raw, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LT04_C01_T1_ANNUAL_RAW#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LT04_C01_T1_ANNUAL_RAW_sample.png +LANDSAT/LT04/C01/T1_ANNUAL_TOA,Google,Landsat 4 TM Collection 1 Tier 1 Annual TOA Reflectance Composite,01-01-82,01-01-93,1982,1993,image_collection,"landsat, toa, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LT04_C01_T1_ANNUAL_TOA#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LT04_C01_T1_ANNUAL_TOA_sample.png +LANDSAT/LT04/C01/T1_SR,USGS,USGS Landsat 4 Surface Reflectance Tier 1 [deprecated],22-08-82,18-11-93,1982,1993,image_collection,"cfmask, cloud, fmask, global, landsat, ledaps, lt04, reflectance, sr, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LT04_C01_T1_SR#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LT04_C01_T1_SR_sample.png +LANDSAT/LT04/C01/T1_TOA,USGS/Google,USGS Landsat 4 TM Collection 1 Tier 1 TOA Reflectance [deprecated],22-08-82,18-11-93,1982,1993,image_collection,"global, landsat, toa, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LT04_C01_T1_TOA#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LT04_C01_T1_TOA_sample.png +LANDSAT/LT04/C01/T2,USGS,USGS Landsat 4 TM Collection 1 Tier 2 Raw Scenes [deprecated],22-08-82,18-11-93,1982,1993,image_collection,"c1, global, l4, landsat, lt4, radiance, t2, tier2, tm, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LT04_C01_T2#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LT04_C01_T2_sample.png +LANDSAT/LT04/C01/T2_SR,USGS,USGS Landsat 4 Surface Reflectance Tier 2 [deprecated],17-11-82,03-04-93,1982,1993,image_collection,"cfmask, cloud, fmask, global, landsat, ledaps, lt04, reflectance, sr, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LT04_C01_T2_SR#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LT04_C01_T2_SR_sample.png +LANDSAT/LT04/C01/T2_TOA,USGS/Google,USGS Landsat 4 TM Collection 1 Tier 2 TOA Reflectance [deprecated],22-08-82,18-11-93,1982,1993,image_collection,"global, landsat, toa, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LT04_C01_T2_TOA#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LT04_C01_T2_TOA_sample.png +LANDSAT/LT04/C02/T1,USGS,USGS Landsat 4 TM Collection 2 Tier 1 Raw Scenes,22-08-82,14-12-93,1982,1993,image_collection,"c2, global, l4, landsat, lt4, radiance, t1, tier1, tm, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LT04_C02_T1#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LT04_C02_T1_sample.png +LANDSAT/LT04/C02/T1_L2,USGS,"USGS Landsat 4 Level 2, Collection 2, Tier 1",22-08-82,24-06-93,1982,1993,image_collection,"cfmask, cloud, fmask, global, landsat, lasrc, lst, lt04, reflectance, sr, tm, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LT04_C02_T1_L2#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LT04_C02_T1_L2_sample.png +LANDSAT/LT04/C02/T1_TOA,USGS/Google,USGS Landsat 4 TM Collection 2 Tier 1 TOA Reflectance,22-08-82,14-12-93,1982,1993,image_collection,"global, landsat, toa, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LT04_C02_T1_TOA#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LT04_C02_T1_TOA_sample.png +LANDSAT/LT04/C02/T2,USGS,USGS Landsat 4 TM Collection 2 Tier 2 Raw Scenes,22-08-82,18-11-93,1982,1993,image_collection,"c2, global, l4, landsat, lt4, radiance, t2, tier2, tm, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LT04_C02_T2#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LT04_C02_T2_sample.png +LANDSAT/LT04/C02/T2_L2,USGS,"USGS Landsat 4 Level 2, Collection 2, Tier 2",22-08-82,18-11-93,1982,1993,image_collection,"cfmask, cloud, fmask, global, landsat, lasrc, lst, lt04, reflectance, sr, tm, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LT04_C02_T2_L2#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LT04_C02_T2_L2_sample.png +LANDSAT/LT04/C02/T2_TOA,USGS/Google,USGS Landsat 4 TM Collection 2 Tier 2 TOA Reflectance,22-08-82,18-11-93,1982,1993,image_collection,"global, landsat, toa, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LT04_C02_T2_TOA#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LT04_C02_T2_TOA_sample.png +LANDSAT/LT4_L1T,USGS,USGS Landsat 4 TM Raw Scenes (Orthorectified) [deprecated],22-08-82,18-11-93,1982,1993,image_collection,"global, l4, landsat, lt4, radiance, tm, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LT4_L1T#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LT4_L1T_sample.png +LANDSAT/LT4_L1T_8DAY_BAI,USGS,Landsat 4 TM 8-Day BAI Composite [deprecated],21-08-82,11-12-93,1982,1993,image_collection,"bai, landsat, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LT4_L1T_8DAY_BAI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LT4_L1T_8DAY_BAI_sample.png +LANDSAT/LT4_L1T_8DAY_EVI,USGS,Landsat 4 TM 8-Day EVI Composite [deprecated],21-08-82,11-12-93,1982,1993,image_collection,"evi, landsat, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LT4_L1T_8DAY_EVI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LT4_L1T_8DAY_EVI_sample.png +LANDSAT/LT4_L1T_8DAY_NBRT,USGS,Landsat 4 TM 8-Day NBRT Composite [deprecated],21-08-82,11-12-93,1982,1993,image_collection,"landsat, nbrt, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LT4_L1T_8DAY_NBRT#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LT4_L1T_8DAY_NBRT_sample.png +LANDSAT/LT4_L1T_8DAY_NDSI,USGS,Landsat 4 TM 8-Day NDSI Composite [deprecated],21-08-82,11-12-93,1982,1993,image_collection,"landsat, ndsi, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LT4_L1T_8DAY_NDSI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LT4_L1T_8DAY_NDSI_sample.png +LANDSAT/LT4_L1T_8DAY_NDVI,USGS,Landsat 4 TM 8-Day NDVI Composite [deprecated],21-08-82,11-12-93,1982,1993,image_collection,"landsat, ndvi, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LT4_L1T_8DAY_NDVI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LT4_L1T_8DAY_NDVI_sample.png +LANDSAT/LT4_L1T_8DAY_NDWI,USGS,Landsat 4 TM 8-Day NDWI Composite [deprecated],21-08-82,11-12-93,1982,1993,image_collection,"landsat, ndwi, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LT4_L1T_8DAY_NDWI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LT4_L1T_8DAY_NDWI_sample.png +LANDSAT/LT4_L1T_8DAY_RAW,Google,Landsat 4 TM 8-Day Raw Composite [deprecated],21-08-82,11-12-93,1982,1993,image_collection,"landsat, raw, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LT4_L1T_8DAY_RAW#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LT4_L1T_8DAY_RAW_sample.png +LANDSAT/LT4_L1T_8DAY_TOA,Google,Landsat 4 TM 8-Day TOA Reflectance Composite [deprecated],21-08-82,11-12-93,1982,1993,image_collection,"landsat, toa, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LT4_L1T_8DAY_TOA#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LT4_L1T_8DAY_TOA_sample.png +LANDSAT/LT4_L1T_32DAY_BAI,USGS,Landsat 4 TM 32-Day BAI Composite [deprecated],13-08-82,17-11-93,1982,1993,image_collection,"bai, landsat, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LT4_L1T_32DAY_BAI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LT4_L1T_32DAY_BAI_sample.png +LANDSAT/LT4_L1T_32DAY_EVI,USGS,Landsat 4 TM 32-Day EVI Composite [deprecated],13-08-82,17-11-93,1982,1993,image_collection,"evi, landsat, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LT4_L1T_32DAY_EVI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LT4_L1T_32DAY_EVI_sample.png +LANDSAT/LT4_L1T_32DAY_NBRT,USGS,Landsat 4 TM 32-Day NBRT Composite [deprecated],13-08-82,17-11-93,1982,1993,image_collection,"landsat, nbrt, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LT4_L1T_32DAY_NBRT#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LT4_L1T_32DAY_NBRT_sample.png +LANDSAT/LT4_L1T_32DAY_NDSI,USGS,Landsat 4 TM 32-Day NDSI Composite [deprecated],13-08-82,17-11-93,1982,1993,image_collection,"landsat, ndsi, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LT4_L1T_32DAY_NDSI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LT4_L1T_32DAY_NDSI_sample.png +LANDSAT/LT4_L1T_32DAY_NDVI,USGS,Landsat 4 TM 32-Day NDVI Composite [deprecated],13-08-82,17-11-93,1982,1993,image_collection,"landsat, ndvi, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LT4_L1T_32DAY_NDVI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LT4_L1T_32DAY_NDVI_sample.png +LANDSAT/LT4_L1T_32DAY_NDWI,USGS,Landsat 4 TM 32-Day NDWI Composite [deprecated],13-08-82,17-11-93,1982,1993,image_collection,"landsat, ndwi, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LT4_L1T_32DAY_NDWI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LT4_L1T_32DAY_NDWI_sample.png +LANDSAT/LT4_L1T_32DAY_RAW,Google,Landsat 4 TM 32-Day Raw Composite [deprecated],13-08-82,17-11-93,1982,1993,image_collection,"landsat, raw, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LT4_L1T_32DAY_RAW#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LT4_L1T_32DAY_RAW_sample.png +LANDSAT/LT4_L1T_32DAY_TOA,Google,Landsat 4 TM 32-Day TOA Reflectance Composite [deprecated],13-08-82,17-11-93,1982,1993,image_collection,"landsat, toa, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LT4_L1T_32DAY_TOA#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LT4_L1T_32DAY_TOA_sample.png +LANDSAT/LT4_L1T_ANNUAL_BAI,USGS,Landsat 4 TM Annual BAI Composite [deprecated],01-01-82,01-01-93,1982,1993,image_collection,"bai, landsat, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LT4_L1T_ANNUAL_BAI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LT4_L1T_ANNUAL_BAI_sample.png +LANDSAT/LT4_L1T_ANNUAL_EVI,USGS,Landsat 4 TM Annual EVI Composite [deprecated],01-01-82,01-01-93,1982,1993,image_collection,"evi, landsat, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LT4_L1T_ANNUAL_EVI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LT4_L1T_ANNUAL_EVI_sample.png +LANDSAT/LT4_L1T_ANNUAL_GREENEST_TOA,USGS,Landsat 4 TM Annual Greenest-Pixel TOA Reflectance Composite [deprecated],22-08-82,01-01-93,1982,1993,image_collection,"greenest, landsat, toa, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LT4_L1T_ANNUAL_GREENEST_TOA#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LT4_L1T_ANNUAL_GREENEST_TOA_sample.png +LANDSAT/LT4_L1T_ANNUAL_NBRT,USGS,Landsat 4 TM Annual NBRT Composite [deprecated],01-01-82,01-01-93,1982,1993,image_collection,"landsat, nbrt, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LT4_L1T_ANNUAL_NBRT#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LT4_L1T_ANNUAL_NBRT_sample.png +LANDSAT/LT4_L1T_ANNUAL_NDSI,USGS,Landsat 4 TM Annual NDSI Composite [deprecated],01-01-82,01-01-93,1982,1993,image_collection,"landsat, ndsi, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LT4_L1T_ANNUAL_NDSI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LT4_L1T_ANNUAL_NDSI_sample.png +LANDSAT/LT4_L1T_ANNUAL_NDVI,USGS,Landsat 4 TM Annual NDVI Composite [deprecated],01-01-82,01-01-93,1982,1993,image_collection,"landsat, ndvi, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LT4_L1T_ANNUAL_NDVI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LT4_L1T_ANNUAL_NDVI_sample.png +LANDSAT/LT4_L1T_ANNUAL_NDWI,USGS,Landsat 4 TM Annual NDWI Composite [deprecated],01-01-82,01-01-93,1982,1993,image_collection,"landsat, ndwi, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LT4_L1T_ANNUAL_NDWI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LT4_L1T_ANNUAL_NDWI_sample.png +LANDSAT/LT4_L1T_ANNUAL_RAW,Google,Landsat 4 TM Annual Raw Composite [deprecated],01-01-82,01-01-93,1982,1993,image_collection,"landsat, raw, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LT4_L1T_ANNUAL_RAW#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LT4_L1T_ANNUAL_RAW_sample.png +LANDSAT/LT4_L1T_ANNUAL_TOA,Google,Landsat 4 TM Annual TOA Reflectance Composite [deprecated],01-01-82,01-01-93,1982,1993,image_collection,"landsat, toa, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LT4_L1T_ANNUAL_TOA#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LT4_L1T_ANNUAL_TOA_sample.png +LANDSAT/LT4_L1T_TOA,USGS/Google,USGS Landsat 4 TM TOA Reflectance (Orthorectified) [deprecated],22-08-82,18-11-93,1982,1993,image_collection,"global, landsat, toa, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LT4_L1T_TOA#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LT4_L1T_TOA_sample.png +LANDSAT/LT5,USGS,USGS Landsat 5 TM Raw Scenes [deprecated],05-03-84,05-05-12,1984,2012,image_collection,"global, l5, landsat, lt5, radiance, tm, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LT5#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LT5_sample.png +LANDSAT/LT05/C01/T1,USGS,USGS Landsat 5 TM Collection 1 Tier 1 Raw Scenes [deprecated],16-03-84,05-05-12,1984,2012,image_collection,"c1, global, l5, landsat, lt5, radiance, t1, tier1, tm, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LT05_C01_T1#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LT05_C01_T1_sample.png +LANDSAT/LT05/C01/T1_8DAY_BAI,Google,Landsat 5 TM Collection 1 Tier 1 8-Day BAI Composite,01-01-84,30-04-12,1984,2012,image_collection,"bai, landsat, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LT05_C01_T1_8DAY_BAI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LT05_C01_T1_8DAY_BAI_sample.png +LANDSAT/LT05/C01/T1_8DAY_EVI,Google,Landsat 5 TM Collection 1 Tier 1 8-Day EVI Composite,01-01-84,30-04-12,1984,2012,image_collection,"evi, landsat, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LT05_C01_T1_8DAY_EVI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LT05_C01_T1_8DAY_EVI_sample.png +LANDSAT/LT05/C01/T1_8DAY_NBRT,Google,Landsat 5 TM Collection 1 Tier 1 8-Day NBRT Composite,01-01-84,30-04-12,1984,2012,image_collection,"landsat, nbrt, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LT05_C01_T1_8DAY_NBRT#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LT05_C01_T1_8DAY_NBRT_sample.png +LANDSAT/LT05/C01/T1_8DAY_NDSI,Google,Landsat 5 TM Collection 1 Tier 1 8-Day NDSI Composite,01-01-84,30-04-12,1984,2012,image_collection,"landsat, ndsi, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LT05_C01_T1_8DAY_NDSI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LT05_C01_T1_8DAY_NDSI_sample.png +LANDSAT/LT05/C01/T1_8DAY_NDVI,Google,Landsat 5 TM Collection 1 Tier 1 8-Day NDVI Composite,01-01-84,30-04-12,1984,2012,image_collection,"landsat, ndvi, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LT05_C01_T1_8DAY_NDVI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LT05_C01_T1_8DAY_NDVI_sample.png +LANDSAT/LT05/C01/T1_8DAY_NDWI,Google,Landsat 5 TM Collection 1 Tier 1 8-Day NDWI Composite,01-01-84,30-04-12,1984,2012,image_collection,"landsat, ndwi, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LT05_C01_T1_8DAY_NDWI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LT05_C01_T1_8DAY_NDWI_sample.png +LANDSAT/LT05/C01/T1_8DAY_RAW,USGS/Google,Landsat 5 TM Collection 1 Tier 1 8-Day Raw Composite,01-01-84,30-04-12,1984,2012,image_collection,"landsat, raw, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LT05_C01_T1_8DAY_RAW#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LT05_C01_T1_8DAY_RAW_sample.png +LANDSAT/LT05/C01/T1_8DAY_TOA,Google,Landsat 5 TM Collection 1 Tier 1 8-Day TOA Reflectance Composite,01-01-84,30-04-12,1984,2012,image_collection,"landsat, toa, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LT05_C01_T1_8DAY_TOA#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LT05_C01_T1_8DAY_TOA_sample.png +LANDSAT/LT05/C01/T1_32DAY_BAI,Google,Landsat 5 TM Collection 1 Tier 1 32-Day BAI Composite,01-01-84,06-04-12,1984,2012,image_collection,"bai, landsat, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LT05_C01_T1_32DAY_BAI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LT05_C01_T1_32DAY_BAI_sample.png +LANDSAT/LT05/C01/T1_32DAY_EVI,Google,Landsat 5 TM Collection 1 Tier 1 32-Day EVI Composite,01-01-84,06-04-12,1984,2012,image_collection,"evi, landsat, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LT05_C01_T1_32DAY_EVI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LT05_C01_T1_32DAY_EVI_sample.png +LANDSAT/LT05/C01/T1_32DAY_NBRT,Google,Landsat 5 TM Collection 1 Tier 1 32-Day NBRT Composite,01-01-84,06-04-12,1984,2012,image_collection,"landsat, nbrt, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LT05_C01_T1_32DAY_NBRT#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LT05_C01_T1_32DAY_NBRT_sample.png +LANDSAT/LT05/C01/T1_32DAY_NDSI,Google,Landsat 5 TM Collection 1 Tier 1 32-Day NDSI Composite,01-01-84,06-04-12,1984,2012,image_collection,"landsat, ndsi, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LT05_C01_T1_32DAY_NDSI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LT05_C01_T1_32DAY_NDSI_sample.png +LANDSAT/LT05/C01/T1_32DAY_NDVI,Google,Landsat 5 TM Collection 1 Tier 1 32-Day NDVI Composite,01-01-84,06-04-12,1984,2012,image_collection,"landsat, ndvi, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LT05_C01_T1_32DAY_NDVI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LT05_C01_T1_32DAY_NDVI_sample.png +LANDSAT/LT05/C01/T1_32DAY_NDWI,Google,Landsat 5 TM Collection 1 Tier 1 32-Day NDWI Composite,01-01-84,06-04-12,1984,2012,image_collection,"landsat, ndwi, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LT05_C01_T1_32DAY_NDWI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LT05_C01_T1_32DAY_NDWI_sample.png +LANDSAT/LT05/C01/T1_32DAY_RAW,USGS/Google,Landsat 5 TM Collection 1 Tier 1 32-Day Raw Composite,01-01-84,06-04-12,1984,2012,image_collection,"landsat, raw, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LT05_C01_T1_32DAY_RAW#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LT05_C01_T1_32DAY_RAW_sample.png +LANDSAT/LT05/C01/T1_32DAY_TOA,Google,Landsat 5 TM Collection 1 Tier 1 32-Day TOA Reflectance Composite,01-01-84,06-04-12,1984,2012,image_collection,"landsat, toa, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LT05_C01_T1_32DAY_TOA#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LT05_C01_T1_32DAY_TOA_sample.png +LANDSAT/LT05/C01/T1_ANNUAL_BAI,Google,Landsat 5 TM Collection 1 Tier 1 Annual BAI Composite,01-01-84,01-01-12,1984,2012,image_collection,"bai, landsat, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LT05_C01_T1_ANNUAL_BAI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LT05_C01_T1_ANNUAL_BAI_sample.png +LANDSAT/LT05/C01/T1_ANNUAL_EVI,Google,Landsat 5 TM Collection 1 Tier 1 Annual EVI Composite,01-01-84,01-01-12,1984,2012,image_collection,"evi, landsat, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LT05_C01_T1_ANNUAL_EVI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LT05_C01_T1_ANNUAL_EVI_sample.png +LANDSAT/LT05/C01/T1_ANNUAL_GREENEST_TOA,Google,Landsat 5 TM Collection 1 Tier 1 Landsat 5 TM Collection 1 Tier 1 Annual Greenest-Pixel TOA Reflectance Composite,01-01-84,01-01-12,1984,2012,image_collection,"greenest, landsat, toa, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LT05_C01_T1_ANNUAL_GREENEST_TOA#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LT05_C01_T1_ANNUAL_GREENEST_TOA_sample.png +LANDSAT/LT05/C01/T1_ANNUAL_NBRT,Google,Landsat 5 TM Collection 1 Tier 1 Annual NBRT Composite,01-01-84,01-01-12,1984,2012,image_collection,"landsat, nbrt, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LT05_C01_T1_ANNUAL_NBRT#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LT05_C01_T1_ANNUAL_NBRT_sample.png +LANDSAT/LT05/C01/T1_ANNUAL_NDSI,Google,Landsat 5 TM Collection 1 Tier 1 Annual NDSI Composite,01-01-84,01-01-12,1984,2012,image_collection,"landsat, ndsi, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LT05_C01_T1_ANNUAL_NDSI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LT05_C01_T1_ANNUAL_NDSI_sample.png +LANDSAT/LT05/C01/T1_ANNUAL_NDVI,Google,Landsat 5 TM Collection 1 Tier 1 Annual NDVI Composite,01-01-84,01-01-12,1984,2012,image_collection,"landsat, ndvi, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LT05_C01_T1_ANNUAL_NDVI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LT05_C01_T1_ANNUAL_NDVI_sample.png +LANDSAT/LT05/C01/T1_ANNUAL_NDWI,Google,Landsat 5 TM Collection 1 Tier 1 Annual NDWI Composite,01-01-84,01-01-12,1984,2012,image_collection,"landsat, ndwi, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LT05_C01_T1_ANNUAL_NDWI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LT05_C01_T1_ANNUAL_NDWI_sample.png +LANDSAT/LT05/C01/T1_ANNUAL_RAW,USGS/Google,Landsat 5 TM Collection 1 Tier 1 Annual Raw Composite,01-01-84,01-01-12,1984,2012,image_collection,"landsat, raw, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LT05_C01_T1_ANNUAL_RAW#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LT05_C01_T1_ANNUAL_RAW_sample.png +LANDSAT/LT05/C01/T1_ANNUAL_TOA,Google,Landsat 5 TM Collection 1 Tier 1 Annual TOA Reflectance Composite,01-01-84,01-01-12,1984,2012,image_collection,"landsat, toa, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LT05_C01_T1_ANNUAL_TOA#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LT05_C01_T1_ANNUAL_TOA_sample.png +LANDSAT/LT05/C01/T1_SR,USGS,USGS Landsat 5 Surface Reflectance Tier 1 [deprecated],16-03-84,05-05-12,1984,2012,image_collection,"cfmask, cloud, fmask, global, landsat, ledaps, lt05, reflectance, sr, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LT05_C01_T1_SR#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LT05_C01_T1_SR_sample.png +LANDSAT/LT05/C01/T1_TOA,USGS/Google,USGS Landsat 5 TM Collection 1 Tier 1 TOA Reflectance [deprecated],16-03-84,05-05-12,1984,2012,image_collection,"global, landsat, toa, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LT05_C01_T1_TOA#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LT05_C01_T1_TOA_sample.png +LANDSAT/LT05/C01/T2,USGS,USGS Landsat 5 TM Collection 1 Tier 2 Raw Scenes [deprecated],05-03-84,26-04-12,1984,2012,image_collection,"c1, global, l5, landsat, lt5, radiance, t2, tier2, tm, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LT05_C01_T2#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LT05_C01_T2_sample.png +LANDSAT/LT05/C01/T2_SR,USGS,USGS Landsat 5 Surface Reflectance Tier 2 [deprecated],16-03-84,16-11-11,1984,2011,image_collection,"cfmask, cloud, fmask, global, landsat, ledaps, lt05, reflectance, sr, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LT05_C01_T2_SR#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LT05_C01_T2_SR_sample.png +LANDSAT/LT05/C01/T2_TOA,USGS/Google,USGS Landsat 5 TM Collection 1 Tier 2 TOA Reflectance [deprecated],05-03-84,26-04-12,1984,2012,image_collection,"global, landsat, toa, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LT05_C01_T2_TOA#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LT05_C01_T2_TOA_sample.png +LANDSAT/LT05/C02/T1,USGS,USGS Landsat 5 TM Collection 2 Tier 1 Raw Scenes,01-01-84,05-05-12,1984,2012,image_collection,"c2, global, l5, landsat, lt5, radiance, t1, tier1, tm, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LT05_C02_T1#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LT05_C02_T1_sample.png +LANDSAT/LT05/C02/T1_L2,USGS,"USGS Landsat 5 Level 2, Collection 2, Tier 1",16-03-84,05-05-12,1984,2012,image_collection,"cfmask, cloud, fmask, global, landsat, lasrc, lst, lt05, reflectance, sr, tm, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LT05_C02_T1_L2#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LT05_C02_T1_L2_sample.png +LANDSAT/LT05/C02/T1_TOA,USGS/Google,USGS Landsat 5 TM Collection 2 Tier 1 TOA Reflectance,19-04-84,08-11-11,1984,2011,image_collection,"global, landsat, toa, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LT05_C02_T1_TOA#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LT05_C02_T1_TOA_sample.png +LANDSAT/LT05/C02/T2,USGS,USGS Landsat 5 TM Collection 2 Tier 2 Raw Scenes,01-01-84,05-05-12,1984,2012,image_collection,"c2, global, l5, landsat, lt5, radiance, t2, tier2, tm, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LT05_C02_T2#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LT05_C02_T2_sample.png +LANDSAT/LT05/C02/T2_L2,USGS,"USGS Landsat 5 Level 2, Collection 2, Tier 2",05-03-84,16-11-11,1984,2011,image_collection,"cfmask, cloud, fmask, global, landsat, lasrc, lst, lt05, reflectance, sr, tm, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LT05_C02_T2_L2#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LT05_C02_T2_L2_sample.png +LANDSAT/LT05/C02/T2_TOA,USGS/Google,USGS Landsat 5 TM Collection 2 Tier 2 TOA Reflectance,06-11-03,01-12-06,2003,2006,image_collection,"global, landsat, toa, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LT05_C02_T2_TOA#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LT05_C02_T2_TOA_sample.png +LANDSAT/LT5_L1T,USGS,USGS Landsat 5 TM Raw Scenes (Orthorectified) [deprecated],16-03-84,05-05-12,1984,2012,image_collection,"global, l5, landsat, lt5, radiance, tm, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LT5_L1T#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LT5_L1T_sample.png +LANDSAT/LT5_L1T_8DAY_BAI,USGS,Landsat 5 TM 8-Day BAI Composite [deprecated],01-01-84,30-04-12,1984,2012,image_collection,"bai, landsat, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LT5_L1T_8DAY_BAI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LT5_L1T_8DAY_BAI_sample.png +LANDSAT/LT5_L1T_8DAY_EVI,USGS,Landsat 5 TM 8-Day EVI Composite [deprecated],01-01-84,30-04-12,1984,2012,image_collection,"evi, landsat, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LT5_L1T_8DAY_EVI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LT5_L1T_8DAY_EVI_sample.png +LANDSAT/LT5_L1T_8DAY_NBRT,USGS,Landsat 5 TM 8-Day NBRT Composite [deprecated],01-01-84,30-04-12,1984,2012,image_collection,"landsat, nbrt, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LT5_L1T_8DAY_NBRT#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LT5_L1T_8DAY_NBRT_sample.png +LANDSAT/LT5_L1T_8DAY_NDSI,USGS,Landsat 5 TM 8-Day NDSI Composite [deprecated],01-01-84,30-04-12,1984,2012,image_collection,"landsat, ndsi, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LT5_L1T_8DAY_NDSI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LT5_L1T_8DAY_NDSI_sample.png +LANDSAT/LT5_L1T_8DAY_NDVI,USGS,Landsat 5 TM 8-Day NDVI Composite [deprecated],01-01-84,30-04-12,1984,2012,image_collection,"landsat, ndvi, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LT5_L1T_8DAY_NDVI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LT5_L1T_8DAY_NDVI_sample.png +LANDSAT/LT5_L1T_8DAY_NDWI,USGS,Landsat 5 TM 8-Day NDWI Composite [deprecated],01-01-84,30-04-12,1984,2012,image_collection,"landsat, ndwi, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LT5_L1T_8DAY_NDWI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LT5_L1T_8DAY_NDWI_sample.png +LANDSAT/LT5_L1T_8DAY_RAW,Google,Landsat 5 TM 8-Day Raw Composite [deprecated],01-01-84,30-04-12,1984,2012,image_collection,"landsat, raw, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LT5_L1T_8DAY_RAW#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LT5_L1T_8DAY_RAW_sample.png +LANDSAT/LT5_L1T_8DAY_TOA,Google,Landsat 5 TM 8-Day TOA Reflectance Composite [deprecated],01-01-84,30-04-12,1984,2012,image_collection,"landsat, toa, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LT5_L1T_8DAY_TOA#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LT5_L1T_8DAY_TOA_sample.png +LANDSAT/LT5_L1T_32DAY_BAI,USGS,Landsat 5 TM 32-Day BAI Composite [deprecated],01-01-84,06-04-12,1984,2012,image_collection,"bai, landsat, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LT5_L1T_32DAY_BAI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LT5_L1T_32DAY_BAI_sample.png +LANDSAT/LT5_L1T_32DAY_EVI,USGS,Landsat 5 TM 32-Day EVI Composite [deprecated],01-01-84,06-04-12,1984,2012,image_collection,"evi, landsat, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LT5_L1T_32DAY_EVI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LT5_L1T_32DAY_EVI_sample.png +LANDSAT/LT5_L1T_32DAY_NBRT,USGS,Landsat 5 TM 32-Day NBRT Composite [deprecated],01-01-84,06-04-12,1984,2012,image_collection,"landsat, nbrt, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LT5_L1T_32DAY_NBRT#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LT5_L1T_32DAY_NBRT_sample.png +LANDSAT/LT5_L1T_32DAY_NDSI,USGS,Landsat 5 TM 32-Day NDSI Composite [deprecated],01-01-84,06-04-12,1984,2012,image_collection,"landsat, ndsi, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LT5_L1T_32DAY_NDSI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LT5_L1T_32DAY_NDSI_sample.png +LANDSAT/LT5_L1T_32DAY_NDVI,USGS,Landsat 5 TM 32-Day NDVI Composite [deprecated],01-01-84,06-04-12,1984,2012,image_collection,"landsat, ndvi, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LT5_L1T_32DAY_NDVI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LT5_L1T_32DAY_NDVI_sample.png +LANDSAT/LT5_L1T_32DAY_NDWI,USGS,Landsat 5 TM 32-Day NDWI Composite [deprecated],01-01-84,06-04-12,1984,2012,image_collection,"landsat, ndwi, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LT5_L1T_32DAY_NDWI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LT5_L1T_32DAY_NDWI_sample.png +LANDSAT/LT5_L1T_32DAY_RAW,Google,Landsat 5 TM 32-Day Raw Composite [deprecated],01-01-84,06-04-12,1984,2012,image_collection,"landsat, raw, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LT5_L1T_32DAY_RAW#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LT5_L1T_32DAY_RAW_sample.png +LANDSAT/LT5_L1T_32DAY_TOA,Google,Landsat 5 TM 32-Day TOA Reflectance Composite [deprecated],01-01-84,06-04-12,1984,2012,image_collection,"landsat, toa, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LT5_L1T_32DAY_TOA#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LT5_L1T_32DAY_TOA_sample.png +LANDSAT/LT5_L1T_ANNUAL_BAI,USGS,Landsat 5 TM Annual BAI Composite [deprecated],01-01-84,01-01-12,1984,2012,image_collection,"bai, landsat, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LT5_L1T_ANNUAL_BAI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LT5_L1T_ANNUAL_BAI_sample.png +LANDSAT/LT5_L1T_ANNUAL_EVI,USGS,Landsat 5 TM Annual EVI Composite [deprecated],01-01-84,01-01-12,1984,2012,image_collection,"evi, landsat, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LT5_L1T_ANNUAL_EVI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LT5_L1T_ANNUAL_EVI_sample.png +LANDSAT/LT5_L1T_ANNUAL_GREENEST_TOA,USGS,Landsat 5 TM Annual Greenest-Pixel TOA Reflectance Composite [deprecated],01-01-84,01-01-12,1984,2012,image_collection,"greenest, landsat, toa, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LT5_L1T_ANNUAL_GREENEST_TOA#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LT5_L1T_ANNUAL_GREENEST_TOA_sample.png +LANDSAT/LT5_L1T_ANNUAL_NBRT,USGS,Landsat 5 TM Annual NBRT Composite [deprecated],01-01-84,01-01-12,1984,2012,image_collection,"landsat, nbrt, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LT5_L1T_ANNUAL_NBRT#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LT5_L1T_ANNUAL_NBRT_sample.png +LANDSAT/LT5_L1T_ANNUAL_NDSI,USGS,Landsat 5 TM Annual NDSI Composite [deprecated],01-01-84,01-01-12,1984,2012,image_collection,"landsat, ndsi, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LT5_L1T_ANNUAL_NDSI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LT5_L1T_ANNUAL_NDSI_sample.png +LANDSAT/LT5_L1T_ANNUAL_NDVI,USGS,Landsat 5 TM Annual NDVI Composite [deprecated],01-01-84,01-01-12,1984,2012,image_collection,"landsat, ndvi, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LT5_L1T_ANNUAL_NDVI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LT5_L1T_ANNUAL_NDVI_sample.png +LANDSAT/LT5_L1T_ANNUAL_NDWI,USGS,Landsat 5 TM Annual NDWI Composite [deprecated],01-01-84,01-01-12,1984,2012,image_collection,"landsat, ndwi, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LT5_L1T_ANNUAL_NDWI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LT5_L1T_ANNUAL_NDWI_sample.png +LANDSAT/LT5_L1T_ANNUAL_RAW,Google,Landsat 5 TM Annual Raw Composite [deprecated],01-01-84,01-01-12,1984,2012,image_collection,"landsat, raw, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LT5_L1T_ANNUAL_RAW#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LT5_L1T_ANNUAL_RAW_sample.png +LANDSAT/LT5_L1T_ANNUAL_TOA,Google,Landsat 5 TM Annual TOA Reflectance Composite [deprecated],01-01-84,01-01-12,1984,2012,image_collection,"landsat, toa, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LT5_L1T_ANNUAL_TOA#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LT5_L1T_ANNUAL_TOA_sample.png +LANDSAT/LT5_L1T_TOA,USGS/Google,USGS Landsat 5 TM TOA Reflectance (Orthorectified) [deprecated],16-03-84,05-05-12,1984,2012,image_collection,"global, landsat, toa, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LT5_L1T_TOA#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LT5_L1T_TOA_sample.png +LANDSAT/LT08/C01/T2,USGS,USGS Landsat 8 Collection 1 Tier 2 TIRS Raw Scenes [deprecated],08-03-13,30-12-21,2013,2021,image_collection,"c1, global, l8, landsat, lt8, radiance, t2, tier2, tirs, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LT08_C01_T2#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_LT08_C01_T2_sample.png +LANDSAT/MANGROVE_FORESTS,NASA SEDAC at the Center for International Earth Science Information Network,"Global Mangrove Forests Distribution, v1 (2000)",01-01-00,01-01-01,2000,2001,image_collection,"annual, ciesin, global, landsat_derived, mangrove, nasa, usgs",https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_MANGROVE_FORESTS#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LANDSAT/LANDSAT_MANGROVE_FORESTS_sample.png +LARSE/GEDI/GEDI02_A_002,USFS Laboratory for Applications of Remote Sensing in Ecology (LARSE),GEDI L2A Vector Canopy Top Height (Version 2),25-03-19,01-01-23,2019,2023,table_collection,"elevation, gedi, larse, nasa, tree_cover, usgs",https://developers.google.com/earth-engine/datasets/catalog/LARSE_GEDI_GEDI02_A_002#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LARSE/LARSE_GEDI_GEDI02_A_002_sample.png +LARSE/GEDI/GEDI02_A_002_INDEX,Indexing: Google and USFS Laboratory for Applications of Remote Sensing in Ecology (LARSE),GEDI L2A table index,25-03-19,01-01-23,2019,2023,table,"elevation, gedi, larse, nasa, tree_cover, usgs",https://developers.google.com/earth-engine/datasets/catalog/LARSE_GEDI_GEDI02_A_002_INDEX#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LARSE/LARSE_GEDI_GEDI02_A_002_INDEX_sample.png +LARSE/GEDI/GEDI02_A_002_MONTHLY,Rasterization: Google and USFS Laboratory for Applications of Remote Sensing in Ecology (LARSE),GEDI L2A Raster Canopy Top Height (Version 2),25-03-19,01-10-22,2019,2022,image_collection,"elevation, gedi, larse, nasa, tree_cover, usgs",https://developers.google.com/earth-engine/datasets/catalog/LARSE_GEDI_GEDI02_A_002_MONTHLY#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LARSE/LARSE_GEDI_GEDI02_A_002_MONTHLY_sample.png +LARSE/GEDI/GEDI02_B_002,USFS Laboratory for Applications of Remote Sensing in Ecology (LARSE),GEDI L2B Vector Canopy Cover Vertical Profile Metrics (Version 2),25-03-19,01-01-23,2019,2023,table_collection,"elevation, gedi, larse, nasa, tree_cover, usgs",https://developers.google.com/earth-engine/datasets/catalog/LARSE_GEDI_GEDI02_B_002#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LARSE/LARSE_GEDI_GEDI02_B_002_sample.png +LARSE/GEDI/GEDI02_B_002_INDEX,Indexing: Google and USFS Laboratory for Applications of Remote Sensing in Ecology (LARSE),GEDI L2B table index,25-03-19,01-01-23,2019,2023,table,"elevation, gedi, larse, nasa, tree_cover, usgs",https://developers.google.com/earth-engine/datasets/catalog/LARSE_GEDI_GEDI02_B_002_INDEX#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LARSE/LARSE_GEDI_GEDI02_B_002_INDEX_sample.png +LARSE/GEDI/GEDI02_B_002_MONTHLY,Rasterization: Google and USFS Laboratory for Applications of Remote Sensing in Ecology (LARSE),GEDI L2B Raster Canopy Cover Vertical Profile Metrics (Version 2),25-03-19,01-10-22,2019,2022,image_collection,"elevation, gedi, larse, nasa, tree_cover, usgs",https://developers.google.com/earth-engine/datasets/catalog/LARSE_GEDI_GEDI02_B_002_MONTHLY#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LARSE/LARSE_GEDI_GEDI02_B_002_MONTHLY_sample.png +LARSE/GEDI/GEDI04_A_002,USFS Laboratory for Applications of Remote Sensing in Ecology (LARSE),"GEDI L4A Aboveground Biomass Density, Version 2.1",18-04-19,09-06-22,2019,2022,table_collection,"elevation, gedi, larse, nasa, tree_cover, usgs",https://developers.google.com/earth-engine/datasets/catalog/LARSE_GEDI_GEDI04_A_002#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LARSE/LARSE_GEDI_GEDI04_A_002_sample.png +LARSE/GEDI/GEDI04_A_002_INDEX,Indexing: Google and USFS Laboratory for Applications of Remote Sensing in Ecology (LARSE),GEDI L4A table index,18-04-19,09-06-22,2019,2022,table,"elevation, gedi, larse, nasa, tree_cover, usgs",https://developers.google.com/earth-engine/datasets/catalog/LARSE_GEDI_GEDI04_A_002_INDEX#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LARSE/LARSE_GEDI_GEDI04_A_002_INDEX_sample.png +LARSE/GEDI/GEDI04_A_002_MONTHLY,Rasterization: Google and USFS Laboratory for Applications of Remote Sensing in Ecology (LARSE),"GEDI L4A Raster Aboveground Biomass Density, Version 2.1",25-03-19,01-10-22,2019,2022,image_collection,"elevation, gedi, larse, nasa, tree_cover, usgs",https://developers.google.com/earth-engine/datasets/catalog/LARSE_GEDI_GEDI04_A_002_MONTHLY#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LARSE/LARSE_GEDI_GEDI04_A_002_MONTHLY_sample.png +LARSE/GEDI/GEDI04_B_002,USFS Laboratory for Applications of Remote Sensing in Ecology (LARSE),GEDI L4B Gridded Aboveground Biomass Density (Version 2),18-04-19,04-08-21,2019,2021,image,"elevation, gedi, larse, nasa, tree_cover, usgs",https://developers.google.com/earth-engine/datasets/catalog/LARSE_GEDI_GEDI04_B_002#terms-of-use,https://developers.google.com/earth-engine/datasets/images/LARSE/LARSE_GEDI_GEDI04_B_002_sample.png +MERIT/DEM/v1_0_3,Dai Yamazaki (University of Tokyo),MERIT DEM: Multi-Error-Removed Improved-Terrain DEM,01-01-87,01-01-17,1987,2017,image,"dem, elevation, merit, topography",https://developers.google.com/earth-engine/datasets/catalog/MERIT_DEM_v1_0_3#terms-of-use,https://developers.google.com/earth-engine/datasets/images/MERIT/MERIT_DEM_v1_0_3_sample.png +MERIT/Hydro_reduced/v1_0_1,Dai Yamazaki (University of Tokyo),MERIT Hydro: Supplementary Visualization Layers,01-01-87,01-01-17,1987,2017,image,"dem, elevation, flow_direction, hand, hydrography, hydrosheds, merit, river_width, upstream_drainage_area",https://developers.google.com/earth-engine/datasets/catalog/MERIT_Hydro_reduced_v1_0_1#terms-of-use,https://developers.google.com/earth-engine/datasets/images/MERIT/MERIT_Hydro_reduced_v1_0_1_sample.png +MERIT/Hydro/v1_0_1,Dai Yamazaki (University of Tokyo),MERIT Hydro: Global Hydrography Datasets,01-01-87,01-01-17,1987,2017,image,"dem, elevation, flow_direction, hand, hydrography, hydrosheds, merit, river_width, upstream_drainage_area",https://developers.google.com/earth-engine/datasets/catalog/MERIT_Hydro_v1_0_1#terms-of-use,https://developers.google.com/earth-engine/datasets/images/MERIT/MERIT_Hydro_v1_0_1_sample.png +MODIS/006/MCD12Q1,NASA LP DAAC at the USGS EROS Center,MCD12Q1.006 MODIS Land Cover Type Yearly Global 500m [deprecated],01-01-01,01-01-20,2001,2020,image_collection,"landcover, modis, nasa, usgs, yearly",https://developers.google.com/earth-engine/datasets/catalog/MODIS_006_MCD12Q1#terms-of-use,https://developers.google.com/earth-engine/datasets/images/MODIS/MODIS_006_MCD12Q1_sample.png +MODIS/006/MCD12Q2,NASA LP DAAC at the USGS EROS Center,MCD12Q2.006 Land Cover Dynamics Yearly Global 500m [deprecated],01-01-01,01-01-19,2001,2019,image_collection,"evi, global, modis, onset_greenness, phenology, usgs, yearly",https://developers.google.com/earth-engine/datasets/catalog/MODIS_006_MCD12Q2#terms-of-use,https://developers.google.com/earth-engine/datasets/images/MODIS/MODIS_006_MCD12Q2_sample.png +MODIS/006/MCD15A3H,NASA LP DAAC at the USGS EROS Center,MCD15A3H.006 MODIS Leaf Area Index/FPAR 4-Day Global 500m [deprecated],04-07-02,14-02-23,2002,2023,image_collection,"4_day, fpar, global, lai, mcd115a3h, modis, nasa, usgs, vegetation",https://developers.google.com/earth-engine/datasets/catalog/MODIS_006_MCD15A3H#terms-of-use,https://developers.google.com/earth-engine/datasets/images/MODIS/MODIS_006_MCD15A3H_sample.png +MODIS/006/MCD19A2_GRANULES,NASA LP DAAC at the USGS EROS Center,MCD19A2.006: Terra & Aqua MAIAC Land Aerosol Optical Depth Daily 1km,26-02-00,17-02-23,2000,2023,image_collection,"aerosol, aod, aqua, daily, global, maiac, mcd19a2, modis, nasa, terra, usgs",https://developers.google.com/earth-engine/datasets/catalog/MODIS_006_MCD19A2_GRANULES#terms-of-use,https://developers.google.com/earth-engine/datasets/images/MODIS/MODIS_006_MCD19A2_GRANULES_sample.png +MODIS/006/MCD43A1,NASA LP DAAC at the USGS EROS Center,MCD43A1.006 MODIS BRDF-Albedo Model Parameters Daily 500m [deprecated],24-02-00,10-02-23,2000,2023,image_collection,"albedo, brdf, daily, global, mcd43a1, modis, nasa, reflectance, usgs",https://developers.google.com/earth-engine/datasets/catalog/MODIS_006_MCD43A1#terms-of-use,https://developers.google.com/earth-engine/datasets/images/MODIS/MODIS_006_MCD43A1_sample.png +MODIS/006/MCD43A2,NASA LP DAAC at the USGS EROS Center,MCD43A2.006 MODIS BRDF-Albedo Quality Daily 500m [deprecated],24-02-00,10-02-23,2000,2023,image_collection,"albedo, brdf, daily, global, modis, nasa, quality, reflectance, usgs",https://developers.google.com/earth-engine/datasets/catalog/MODIS_006_MCD43A2#terms-of-use,https://developers.google.com/earth-engine/datasets/images/MODIS/MODIS_006_MCD43A2_sample.png +MODIS/006/MCD43A3,NASA LP DAAC at the USGS EROS Center,MCD43A3.006 MODIS Albedo Daily 500m [deprecated],24-02-00,10-02-23,2000,2023,image_collection,"albedo, black_sky, daily, global, modis, nasa, usgs, white_sky",https://developers.google.com/earth-engine/datasets/catalog/MODIS_006_MCD43A3#terms-of-use,https://developers.google.com/earth-engine/datasets/images/MODIS/MODIS_006_MCD43A3_sample.png +MODIS/006/MCD43A4,NASA LP DAAC at the USGS EROS Center,MCD43A4.006 MODIS Nadir BRDF-Adjusted Reflectance Daily 500m [deprecated],24-02-00,10-02-23,2000,2023,image_collection,"albedo, brdf, daily, global, modis, nasa, reflectance, usgs",https://developers.google.com/earth-engine/datasets/catalog/MODIS_006_MCD43A4#terms-of-use,https://developers.google.com/earth-engine/datasets/images/MODIS/MODIS_006_MCD43A4_sample.png +MODIS/006/MCD43C3,NASA LP DAAC at the USGS EROS Center,MCD43C3.006 BRDF/Albedo Daily L3 0.05 Deg CMG [deprecated],24-02-00,10-02-23,2000,2023,image_collection,"albedo, black_sky, brdf, daily, global, modis, nasa, usgs, white_sky",https://developers.google.com/earth-engine/datasets/catalog/MODIS_006_MCD43C3#terms-of-use,https://developers.google.com/earth-engine/datasets/images/MODIS/MODIS_006_MCD43C3_sample.png +MODIS/006/MCD64A1,NASA LP DAAC at the USGS EROS Center,MCD64A1.006 MODIS Burned Area Monthly Global 500m [deprecated],01-11-00,01-12-22,2000,2022,image_collection,"burn, fire, geophysical, global, mcd64a1, modis, monthly, nasa, usgs",https://developers.google.com/earth-engine/datasets/catalog/MODIS_006_MCD64A1#terms-of-use,https://developers.google.com/earth-engine/datasets/images/MODIS/MODIS_006_MCD64A1_sample.png +MODIS/006/MOD08_M3,NASA LAADS DAAC at NASA Goddard Space Flight Center,MOD08_M3.006 Terra Aerosol Cloud Water Vapor Ozone Monthly Global Product 1Deg CMG [deprecated],01-03-00,01-04-18,2000,2018,image_collection,"atmosphere, geophysical, global, mod08, mod08_m3, modis, monthly, nasa, temperature, terra, usgs",https://developers.google.com/earth-engine/datasets/catalog/MODIS_006_MOD08_M3#terms-of-use,https://developers.google.com/earth-engine/datasets/images/MODIS/MODIS_006_MOD08_M3_sample.png +MODIS/006/MOD09A1,NASA LP DAAC at the USGS EROS Center,MOD09A1.006 Terra Surface Reflectance 8-Day Global 500m [deprecated],18-02-00,10-02-23,2000,2023,image_collection,"8_day, global, mod09a1, modis, nasa, sr, surface_reflectance, terra, usgs",https://developers.google.com/earth-engine/datasets/catalog/MODIS_006_MOD09A1#terms-of-use,https://developers.google.com/earth-engine/datasets/images/MODIS/MODIS_006_MOD09A1_sample.png +MODIS/006/MOD09GA,NASA LP DAAC at the USGS EROS Center,MOD09GA.006 Terra Surface Reflectance Daily Global 1km and 500m [deprecated],24-02-00,17-02-23,2000,2023,image_collection,"daily, global, mod09ga, modis, nasa, sr, surface_reflectance, terra, usgs",https://developers.google.com/earth-engine/datasets/catalog/MODIS_006_MOD09GA#terms-of-use,https://developers.google.com/earth-engine/datasets/images/MODIS/MODIS_006_MOD09GA_sample.png +MODIS/006/MOD09GQ,NASA LP DAAC at the USGS EROS Center,MOD09GQ.006 Terra Surface Reflectance Daily Global 250m [deprecated],24-02-00,17-02-23,2000,2023,image_collection,"daily, global, mod09gq, modis, nasa, sr, surface_reflectance, terra, usgs",https://developers.google.com/earth-engine/datasets/catalog/MODIS_006_MOD09GQ#terms-of-use,https://developers.google.com/earth-engine/datasets/images/MODIS/MODIS_006_MOD09GQ_sample.png +MODIS/006/MOD09Q1,NASA LP DAAC at the USGS EROS Center,MOD09Q1.006 Terra Surface Reflectance 8-Day Global 250m [deprecated],18-02-00,10-02-23,2000,2023,image_collection,"8_day, global, mod09q1, modis, nasa, sr, surface_reflectance, terra, usgs",https://developers.google.com/earth-engine/datasets/catalog/MODIS_006_MOD09Q1#terms-of-use,https://developers.google.com/earth-engine/datasets/images/MODIS/MODIS_006_MOD09Q1_sample.png +MODIS/006/MOD10A1,NASA NSIDC DAAC at CIRES,MOD10A1.006 Terra Snow Cover Daily Global 500m,24-02-00,17-02-23,2000,2023,image_collection,"albedo, daily, geophysical, global, mod10a1, modis, nasa, nsidc, snow, terra",https://developers.google.com/earth-engine/datasets/catalog/MODIS_006_MOD10A1#terms-of-use,https://developers.google.com/earth-engine/datasets/images/MODIS/MODIS_006_MOD10A1_sample.png +MODIS/006/MOD11A1,NASA LP DAAC at the USGS EROS Center,MOD11A1.006 Terra Land Surface Temperature and Emissivity Daily Global 1km [deprecated],24-02-00,15-11-22,2000,2022,image_collection,"daily, emissivity, global, lst, mod11a1, modis, nasa, surface_temperature, terra, usgs",https://developers.google.com/earth-engine/datasets/catalog/MODIS_006_MOD11A1#terms-of-use,https://developers.google.com/earth-engine/datasets/images/MODIS/MODIS_006_MOD11A1_sample.png +MODIS/006/MOD11A2,NASA LP DAAC at the USGS EROS Center,MOD11A2.006 Terra Land Surface Temperature and Emissivity 8-Day Global 1km [deprecated],18-02-00,09-11-22,2000,2022,image_collection,"8_day, emissivity, global, lst, mod11a2, modis, nasa, surface_temperature, terra, usgs",https://developers.google.com/earth-engine/datasets/catalog/MODIS_006_MOD11A2#terms-of-use,https://developers.google.com/earth-engine/datasets/images/MODIS/MODIS_006_MOD11A2_sample.png +MODIS/006/MOD13A1,NASA LP DAAC at the USGS EROS Center,MOD13A1.006 Terra Vegetation Indices 16-Day Global 500m [deprecated],18-02-00,02-02-23,2000,2023,image_collection,"16_day, evi, global, mod13a1, modis, nasa, ndvi, terra, usgs, vegetation",https://developers.google.com/earth-engine/datasets/catalog/MODIS_006_MOD13A1#terms-of-use,https://developers.google.com/earth-engine/datasets/images/MODIS/MODIS_006_MOD13A1_sample.png +MODIS/006/MOD13A2,NASA LP DAAC at the USGS EROS Center,MOD13A2.006 Terra Vegetation Indices 16-Day Global 1km [deprecated],18-02-00,02-02-23,2000,2023,image_collection,"16_day, evi, global, mod13a2, modis, nasa, ndvi, terra, usgs, vegetation",https://developers.google.com/earth-engine/datasets/catalog/MODIS_006_MOD13A2#terms-of-use,https://developers.google.com/earth-engine/datasets/images/MODIS/MODIS_006_MOD13A2_sample.png +MODIS/006/MOD13Q1,NASA LP DAAC at the USGS EROS Center,MOD13Q1.006 Terra Vegetation Indices 16-Day Global 250m [deprecated],18-02-00,02-02-23,2000,2023,image_collection,"16_day, evi, global, mod13q1, modis, nasa, ndvi, terra, usgs, vegetation",https://developers.google.com/earth-engine/datasets/catalog/MODIS_006_MOD13Q1#terms-of-use,https://developers.google.com/earth-engine/datasets/images/MODIS/MODIS_006_MOD13Q1_sample.png +MODIS/006/MOD14A1,NASA LP DAAC at the USGS EROS Center,MOD14A1.006: Terra Thermal Anomalies & Fire Daily Global 1km [deprecated],24-02-00,17-02-23,2000,2023,image_collection,"daily, fire, global, mod14a1, modis, nasa, terra, usgs",https://developers.google.com/earth-engine/datasets/catalog/MODIS_006_MOD14A1#terms-of-use,https://developers.google.com/earth-engine/datasets/images/MODIS/MODIS_006_MOD14A1_sample.png +MODIS/006/MOD14A2,NASA LP DAAC at the USGS EROS Center,MOD14A2.006: Terra Thermal Anomalies & Fire 8-Day Global 1km [deprecated],18-02-00,10-02-23,2000,2023,image_collection,"8_day, fire, global, mod14a2, modis, nasa, terra, usgs",https://developers.google.com/earth-engine/datasets/catalog/MODIS_006_MOD14A2#terms-of-use,https://developers.google.com/earth-engine/datasets/images/MODIS/MODIS_006_MOD14A2_sample.png +MODIS/006/MOD15A2H,NASA LP DAAC at the USGS EROS Center,MOD15A2H.006: Terra Leaf Area Index/FPAR 8-Day Global 500m [deprecated],18-02-00,10-02-23,2000,2023,image_collection,"8_day, fpar, global, lai, mod15a2h, modis, nasa, terra, usgs",https://developers.google.com/earth-engine/datasets/catalog/MODIS_006_MOD15A2H#terms-of-use,https://developers.google.com/earth-engine/datasets/images/MODIS/MODIS_006_MOD15A2H_sample.png +MODIS/006/MOD16A2,NASA LP DAAC at the USGS EROS Center,MOD16A2.006: Terra Net Evapotranspiration 8-Day Global 500m,01-01-01,02-02-23,2001,2023,image_collection,"8_day, evapotranspiration, global, mod16a2, modis, nasa",https://developers.google.com/earth-engine/datasets/catalog/MODIS_006_MOD16A2#terms-of-use,https://developers.google.com/earth-engine/datasets/images/MODIS/MODIS_006_MOD16A2_sample.png +MODIS/006/MOD17A2H,NASA LP DAAC at the USGS EROS Center,MOD17A2H.006: Terra Gross Primary Productivity 8-Day Global 500M 500m,18-02-00,10-02-23,2000,2023,image_collection,"8_day, global, gpp, mod17a2, modis, nasa, photosynthesis, productivity, psn, terra, usgs",https://developers.google.com/earth-engine/datasets/catalog/MODIS_006_MOD17A2H#terms-of-use,https://developers.google.com/earth-engine/datasets/images/MODIS/MODIS_006_MOD17A2H_sample.png +MODIS/006/MOD17A3H,NASA LP DAAC at the USGS EROS Center,MOD17A3H.006: Terra Net Primary Production Yearly Global 500m [deprecated],01-01-00,01-01-14,2000,2014,image_collection,"global, gpp, mod17a3, modis, nasa, npp, photosynthesis, productivity, psn, terra, usgs, yearly",https://developers.google.com/earth-engine/datasets/catalog/MODIS_006_MOD17A3H#terms-of-use,https://developers.google.com/earth-engine/datasets/images/MODIS/MODIS_006_MOD17A3H_sample.png +MODIS/006/MOD17A3HGF,NASA LP DAAC at the USGS EROS Center,MOD17A3HGF.006: Terra Net Primary Production Gap-Filled Yearly Global 500m [deprecated],18-02-00,01-01-21,2000,2021,image_collection,"global, gpp, nasa, npp, photosynthesis, productivity, psn, terra, usgs, yearly",https://developers.google.com/earth-engine/datasets/catalog/MODIS_006_MOD17A3HGF#terms-of-use,https://developers.google.com/earth-engine/datasets/images/MODIS/MODIS_006_MOD17A3HGF_sample.png +MODIS/006/MOD44B,NASA LP DAAC at the USGS EROS Center,MOD44B.006 Terra Vegetation Continuous Fields Yearly Global 250m,05-03-00,05-03-20,2000,2020,image_collection,"annual, geophysical, global, mod44b, modis, nasa, terra, tree_cover, vegetation",https://developers.google.com/earth-engine/datasets/catalog/MODIS_006_MOD44B#terms-of-use,https://developers.google.com/earth-engine/datasets/images/MODIS/MODIS_006_MOD44B_sample.png +MODIS/006/MOD44W,NASA LP DAAC at the USGS EROS Center,MOD44W.006 Terra Land Water Mask Derived From MODIS and SRTM Yearly Global 250m,01-01-00,01-01-15,2000,2015,image_collection,"geophysical, mod44w, modis, nasa, srtm, usgs, water_mask",https://developers.google.com/earth-engine/datasets/catalog/MODIS_006_MOD44W#terms-of-use,https://developers.google.com/earth-engine/datasets/images/MODIS/MODIS_006_MOD44W_sample.png +MODIS/006/MODOCGA,NASA LP DAAC at the USGS EROS Center,MODOCGA.006 Terra Ocean Reflectance Daily Global 1km,24-02-00,17-02-23,2000,2023,image_collection,"daily, global, modis, modocga, nasa, ocean, reflectance, sr, terra, usgs",https://developers.google.com/earth-engine/datasets/catalog/MODIS_006_MODOCGA#terms-of-use,https://developers.google.com/earth-engine/datasets/images/MODIS/MODIS_006_MODOCGA_sample.png +MODIS/006/MYD08_M3,NASA LAADS DAAC at NASA Goddard Space Flight Center,MYD08_M3.006 Aqua Aerosol Cloud Water Vapor Ozone Monthly Global Product 1Deg CMG [deprecated],01-07-02,01-04-18,2002,2018,image_collection,"aqua, atmosphere, geophysical, global, modis, monthly, myd08, myd08_m3, nasa, temperature, usgs",https://developers.google.com/earth-engine/datasets/catalog/MODIS_006_MYD08_M3#terms-of-use,https://developers.google.com/earth-engine/datasets/images/MODIS/MODIS_006_MYD08_M3_sample.png +MODIS/006/MYD09A1,NASA LP DAAC at the USGS EROS Center,MYD09A1.006 Aqua Surface Reflectance 8-Day Global 500m [deprecated],04-07-02,18-02-23,2002,2023,image_collection,"8_day, aqua, global, modis, myd09a1, nasa, sr, surface_reflectance, usgs",https://developers.google.com/earth-engine/datasets/catalog/MODIS_006_MYD09A1#terms-of-use,https://developers.google.com/earth-engine/datasets/images/MODIS/MODIS_006_MYD09A1_sample.png +MODIS/006/MYD09GA,NASA LP DAAC at the USGS EROS Center,MYD09GA.006 Aqua Surface Reflectance Daily Global 1km and 500m [deprecated],04-07-02,25-02-23,2002,2023,image_collection,"aqua, daily, global, modis, myd09ga, nasa, sr, surface_reflectance, usgs",https://developers.google.com/earth-engine/datasets/catalog/MODIS_006_MYD09GA#terms-of-use,https://developers.google.com/earth-engine/datasets/images/MODIS/MODIS_006_MYD09GA_sample.png +MODIS/006/MYD09GQ,NASA LP DAAC at the USGS EROS Center,MYD09GQ.006 Aqua Surface Reflectance Daily Global 250m [deprecated],04-07-02,25-02-23,2002,2023,image_collection,"aqua, daily, global, modis, myd09gq, nasa, sr, surface_reflectance, usgs",https://developers.google.com/earth-engine/datasets/catalog/MODIS_006_MYD09GQ#terms-of-use,https://developers.google.com/earth-engine/datasets/images/MODIS/MODIS_006_MYD09GQ_sample.png +MODIS/006/MYD09Q1,NASA LP DAAC at the USGS EROS Center,MYD09Q1.006 Aqua Surface Reflectance 8-Day Global 250m [deprecated],04-07-02,18-02-23,2002,2023,image_collection,"8_day, aqua, global, modis, myd09q1, nasa, sr, surface_reflectance, usgs",https://developers.google.com/earth-engine/datasets/catalog/MODIS_006_MYD09Q1#terms-of-use,https://developers.google.com/earth-engine/datasets/images/MODIS/MODIS_006_MYD09Q1_sample.png +MODIS/006/MYD10A1,NASA NSIDC DAAC at CIRES,MYD10A1.006 Aqua Snow Cover Daily Global 500m,04-07-02,25-02-23,2002,2023,image_collection,"albedo, aqua, daily, geophysical, global, modis, myd10a1, nasa, nsidc, snow",https://developers.google.com/earth-engine/datasets/catalog/MODIS_006_MYD10A1#terms-of-use,https://developers.google.com/earth-engine/datasets/images/MODIS/MODIS_006_MYD10A1_sample.png +MODIS/006/MYD11A1,NASA LP DAAC at the USGS EROS Center,MYD11A1.006 Aqua Land Surface Temperature and Emissivity Daily Global 1km [deprecated],04-07-02,25-02-23,2002,2023,image_collection,"aqua, daily, emissivity, global, lst, modis, myd11a1, nasa, surface_temperature, usgs",https://developers.google.com/earth-engine/datasets/catalog/MODIS_006_MYD11A1#terms-of-use,https://developers.google.com/earth-engine/datasets/images/MODIS/MODIS_006_MYD11A1_sample.png +MODIS/006/MYD11A2,NASA LP DAAC at the USGS EROS Center,MYD11A2.006 Aqua Land Surface Temperature and Emissivity 8-Day Global 1km [deprecated],04-07-02,18-02-23,2002,2023,image_collection,"8_day, aqua, emissivity, global, lst, modis, myd11a2, nasa, surface_temperature, usgs",https://developers.google.com/earth-engine/datasets/catalog/MODIS_006_MYD11A2#terms-of-use,https://developers.google.com/earth-engine/datasets/images/MODIS/MODIS_006_MYD11A2_sample.png +MODIS/006/MYD13A1,NASA LP DAAC at the USGS EROS Center,MYD13A1.006 Aqua Vegetation Indices 16-Day Global 500m [deprecated],04-07-02,10-02-23,2002,2023,image_collection,"16_day, aqua, evi, global, modis, myd13a1, nasa, ndvi, usgs, vegetation",https://developers.google.com/earth-engine/datasets/catalog/MODIS_006_MYD13A1#terms-of-use,https://developers.google.com/earth-engine/datasets/images/MODIS/MODIS_006_MYD13A1_sample.png +MODIS/006/MYD13A2,NASA LP DAAC at the USGS EROS Center,MYD13A2.006 Aqua Vegetation Indices 16-Day Global 1km [deprecated],04-07-02,10-02-23,2002,2023,image_collection,"16_day, aqua, evi, global, modis, myd13a2, nasa, ndvi, usgs, vegetation",https://developers.google.com/earth-engine/datasets/catalog/MODIS_006_MYD13A2#terms-of-use,https://developers.google.com/earth-engine/datasets/images/MODIS/MODIS_006_MYD13A2_sample.png +MODIS/006/MYD13Q1,NASA LP DAAC at the USGS EROS Center,MYD13Q1.006 Aqua Vegetation Indices 16-Day Global 250m [deprecated],04-07-02,10-02-23,2002,2023,image_collection,"16_day, aqua, evi, global, modis, myd13q1, nasa, ndvi, usgs, vegetation",https://developers.google.com/earth-engine/datasets/catalog/MODIS_006_MYD13Q1#terms-of-use,https://developers.google.com/earth-engine/datasets/images/MODIS/MODIS_006_MYD13Q1_sample.png +MODIS/006/MYD14A1,NASA LP DAAC at the USGS EROS Center,MYD14A1.006: Aqua Thermal Anomalies & Fire Daily Global 1km [deprecated],04-07-02,25-02-23,2002,2023,image_collection,"aqua, daily, fire, global, modis, myd14a1, nasa, usgs",https://developers.google.com/earth-engine/datasets/catalog/MODIS_006_MYD14A1#terms-of-use,https://developers.google.com/earth-engine/datasets/images/MODIS/MODIS_006_MYD14A1_sample.png +MODIS/006/MYD14A2,NASA LP DAAC at the USGS EROS Center,MYD14A2.006: Aqua Thermal Anomalies & Fire 8-Day Global 1km [deprecated],04-07-02,18-02-23,2002,2023,image_collection,"8_day, aqua, fire, global, modis, myd14a2, nasa, usgs",https://developers.google.com/earth-engine/datasets/catalog/MODIS_006_MYD14A2#terms-of-use,https://developers.google.com/earth-engine/datasets/images/MODIS/MODIS_006_MYD14A2_sample.png +MODIS/006/MYD15A2H,NASA LP DAAC at the USGS EROS Center,MYD15A2H.006: Aqua Leaf Area Index/FPAR 8-Day Global 500m [deprecated],04-07-02,18-02-23,2002,2023,image_collection,"8_day, aqua, fpar, global, lai, modis, myd15a2h, nasa, usgs",https://developers.google.com/earth-engine/datasets/catalog/MODIS_006_MYD15A2H#terms-of-use,https://developers.google.com/earth-engine/datasets/images/MODIS/MODIS_006_MYD15A2H_sample.png +MODIS/006/MYD17A2H,NASA LP DAAC at the USGS EROS Center,MYD17A2H.006: Aqua Gross Primary Productivity 8-Day Global 500M 500m,04-07-02,18-02-23,2002,2023,image_collection,"8_day, aqua, global, gpp, modis, myd17a2, nasa, photosynthesis, productivity, psn, usgs",https://developers.google.com/earth-engine/datasets/catalog/MODIS_006_MYD17A2H#terms-of-use,https://developers.google.com/earth-engine/datasets/images/MODIS/MODIS_006_MYD17A2H_sample.png +MODIS/006/MYD17A3H,NASA LP DAAC at the USGS EROS Center,MYD17A3H.006: Aqua Net Primary Production Yearly Global 500m [deprecated],01-01-02,01-01-14,2002,2014,image_collection,"aqua, global, gpp, modis, myd17a3, nasa, npp, photosynthesis, productivity, psn, usgs, yearly",https://developers.google.com/earth-engine/datasets/catalog/MODIS_006_MYD17A3H#terms-of-use,https://developers.google.com/earth-engine/datasets/images/MODIS/MODIS_006_MYD17A3H_sample.png +MODIS/006/MYD17A3HGF,NASA LP DAAC at the USGS EROS Center,MYD17A3HGF.006: Aqua Net Primary Production Gap-Filled Yearly Global 500m [deprecated],04-07-02,01-01-21,2002,2021,image_collection,"aqua, global, gpp, modis, myd17a3, myd17a3gf, nasa, npp, photosynthesis, productivity, psn, usgs, yearly",https://developers.google.com/earth-engine/datasets/catalog/MODIS_006_MYD17A3HGF#terms-of-use,https://developers.google.com/earth-engine/datasets/images/MODIS/MODIS_006_MYD17A3HGF_sample.png +MODIS/006/MYDOCGA,NASA LP DAAC at the USGS EROS Center,MYDOCGA.006 Aqua Ocean Reflectance Daily Global 1km,04-07-02,25-02-23,2002,2023,image_collection,"aqua, daily, global, modis, mydocga, nasa, ocean, reflectance, sr, usgs",https://developers.google.com/earth-engine/datasets/catalog/MODIS_006_MYDOCGA#terms-of-use,https://developers.google.com/earth-engine/datasets/images/MODIS/MODIS_006_MYDOCGA_sample.png +MODIS/055/MOD17A3,NASA LP DAAC at the USGS EROS Center,MOD17A3.055: Terra Net Primary Production Yearly Global 1km [deprecated],01-01-00,01-01-14,2000,2014,image_collection,"global, gpp, mod17a3, modis, npp, photosynthesis, productivity, psn, terra, yearly",https://developers.google.com/earth-engine/datasets/catalog/MODIS_055_MOD17A3#terms-of-use,https://developers.google.com/earth-engine/datasets/images/MODIS/MODIS_055_MOD17A3_sample.png +MODIS/061/MCD12Q1,NASA LP DAAC at the USGS EROS Center,MCD12Q1.061 MODIS Land Cover Type Yearly Global 500m,01-01-01,01-01-21,2001,2021,image_collection,"landcover, modis, nasa, usgs, yearly",https://developers.google.com/earth-engine/datasets/catalog/MODIS_061_MCD12Q1#terms-of-use,https://developers.google.com/earth-engine/datasets/images/MODIS/MODIS_061_MCD12Q1_sample.png +MODIS/061/MCD12Q2,NASA LP DAAC at the USGS EROS Center,MCD12Q2.006 Land Cover Dynamics Yearly Global 500m,01-01-01,01-01-21,2001,2021,image_collection,"evi, global, modis, onset_greenness, phenology, usgs, yearly",https://developers.google.com/earth-engine/datasets/catalog/MODIS_061_MCD12Q2#terms-of-use,https://developers.google.com/earth-engine/datasets/images/MODIS/MODIS_061_MCD12Q2_sample.png +MODIS/061/MCD15A3H,NASA LP DAAC at the USGS EROS Center,MCD15A3H.061 MODIS Leaf Area Index/FPAR 4-Day Global 500m,04-07-02,18-03-23,2002,2023,image_collection,"4_day, fpar, global, lai, mcd15a3h, modis, nasa, usgs, vegetation",https://developers.google.com/earth-engine/datasets/catalog/MODIS_061_MCD15A3H#terms-of-use,https://developers.google.com/earth-engine/datasets/images/MODIS/MODIS_061_MCD15A3H_sample.png +MODIS/061/MCD18C2,NASA LP DAAC at the USGS EROS Center,MCD18C2.061 Photosynthetically Active Radiation Daily 3-Hour,24-02-02,01-02-23,2002,2023,image_collection,"par, radiation",https://developers.google.com/earth-engine/datasets/catalog/MODIS_061_MCD18C2#terms-of-use,https://developers.google.com/earth-engine/datasets/images/MODIS/MODIS_061_MCD18C2_sample.png +MODIS/061/MCD43A1,NASA LP DAAC at the USGS EROS Center,MCD43A1.061 MODIS BRDF-Albedo Model Parameters Daily 500m,24-02-00,17-03-23,2000,2023,image_collection,"albedo, brdf, daily, global, mcd43a1, modis, nasa, reflectance, usgs",https://developers.google.com/earth-engine/datasets/catalog/MODIS_061_MCD43A1#terms-of-use,https://developers.google.com/earth-engine/datasets/images/MODIS/MODIS_061_MCD43A1_sample.png +MODIS/061/MCD43A2,NASA LP DAAC at the USGS EROS Center,MCD43A2.061 MODIS BRDF-Albedo Quality Daily 500m,24-02-00,17-03-23,2000,2023,image_collection,"albedo, brdf, daily, global, modis, nasa, quality, reflectance, usgs",https://developers.google.com/earth-engine/datasets/catalog/MODIS_061_MCD43A2#terms-of-use,https://developers.google.com/earth-engine/datasets/images/MODIS/MODIS_061_MCD43A2_sample.png +MODIS/061/MCD43A3,NASA LP DAAC at the USGS EROS Center,MCD43A3.061 MODIS Albedo Daily 500m,24-02-00,17-03-23,2000,2023,image_collection,"albedo, black_sky, daily, global, modis, nasa, usgs, white_sky",https://developers.google.com/earth-engine/datasets/catalog/MODIS_061_MCD43A3#terms-of-use,https://developers.google.com/earth-engine/datasets/images/MODIS/MODIS_061_MCD43A3_sample.png +MODIS/061/MCD43A4,NASA LP DAAC at the USGS EROS Center,MCD43A4.061 MODIS Nadir BRDF-Adjusted Reflectance Daily 500m,24-02-00,17-03-23,2000,2023,image_collection,"albedo, brdf, daily, global, modis, nasa, reflectance, usgs",https://developers.google.com/earth-engine/datasets/catalog/MODIS_061_MCD43A4#terms-of-use,https://developers.google.com/earth-engine/datasets/images/MODIS/MODIS_061_MCD43A4_sample.png +MODIS/061/MCD43C3,NASA LP DAAC at the USGS EROS Center,MCD43C3.061 BRDF/Albedo Daily L3 0.05 Deg CMG,24-02-00,17-03-23,2000,2023,image_collection,"albedo, black_sky, brdf, daily, global, modis, nasa, usgs, white_sky",https://developers.google.com/earth-engine/datasets/catalog/MODIS_061_MCD43C3#terms-of-use,https://developers.google.com/earth-engine/datasets/images/MODIS/MODIS_061_MCD43C3_sample.png +MODIS/061/MCD64A1,NASA LP DAAC at the USGS EROS Center,MCD64A1.061 MODIS Burned Area Monthly Global 500m,01-11-00,01-01-23,2000,2023,image_collection,"burn, fire, geophysical, global, mcd64a1, modis, monthly, nasa, usgs",https://developers.google.com/earth-engine/datasets/catalog/MODIS_061_MCD64A1#terms-of-use,https://developers.google.com/earth-engine/datasets/images/MODIS/MODIS_061_MCD64A1_sample.png +MODIS/061/MOD08_M3,NASA LAADS DAAC at NASA Goddard Space Flight Center,MOD08_M3.061 Terra Atmosphere Monthly Global Product,01-02-00,01-02-23,2000,2023,image_collection,"atmosphere, geophysical, global, mod08, mod08_m3, modis, monthly, nasa, temperature, terra, usgs",https://developers.google.com/earth-engine/datasets/catalog/MODIS_061_MOD08_M3#terms-of-use,https://developers.google.com/earth-engine/datasets/images/MODIS/MODIS_061_MOD08_M3_sample.png +MODIS/061/MOD09A1,NASA LP DAAC at the USGS EROS Center,MOD09A1.061 Terra Surface Reflectance 8-Day Global 500m,18-02-00,14-03-23,2000,2023,image_collection,"8_day, global, mod09a1, modis, nasa, sr, surface_reflectance, terra, usgs",https://developers.google.com/earth-engine/datasets/catalog/MODIS_061_MOD09A1#terms-of-use,https://developers.google.com/earth-engine/datasets/images/MODIS/MODIS_061_MOD09A1_sample.png +MODIS/061/MOD09CMG,NASA LP DAAC at the USGS EROS Center,MOD09CMG.061 Surface Reflectance Daily L3 Global 0.05 Deg CMG,24-02-00,24-03-23,2000,2023,image_collection,"brightness_temperature, ozone, surface_reflectance, terra",https://developers.google.com/earth-engine/datasets/catalog/MODIS_061_MOD09CMG#terms-of-use,https://developers.google.com/earth-engine/datasets/images/MODIS/MODIS_061_MOD09CMG_sample.png +MODIS/061/MOD09GA,NASA LP DAAC at the USGS EROS Center,MOD09GA.061 Terra Surface Reflectance Daily Global 1km and 500m,24-02-00,24-03-23,2000,2023,image_collection,"daily, global, mod09ga, modis, nasa, sr, surface_reflectance, terra, usgs",https://developers.google.com/earth-engine/datasets/catalog/MODIS_061_MOD09GA#terms-of-use,https://developers.google.com/earth-engine/datasets/images/MODIS/MODIS_061_MOD09GA_sample.png +MODIS/061/MOD09GQ,NASA LP DAAC at the USGS EROS Center,MOD09GQ.061 Terra Surface Reflectance Daily Global 250m,24-02-00,24-03-23,2000,2023,image_collection,"daily, global, mod09gq, modis, nasa, sr, surface_reflectance, terra, usgs",https://developers.google.com/earth-engine/datasets/catalog/MODIS_061_MOD09GQ#terms-of-use,https://developers.google.com/earth-engine/datasets/images/MODIS/MODIS_061_MOD09GQ_sample.png +MODIS/061/MOD09Q1,NASA LP DAAC at the USGS EROS Center,MOD09Q1.061 Terra Surface Reflectance 8-Day Global 250m,18-02-00,14-03-23,2000,2023,image_collection,"8_day, global, mod09q1, modis, nasa, sr, surface_reflectance, terra, usgs",https://developers.google.com/earth-engine/datasets/catalog/MODIS_061_MOD09Q1#terms-of-use,https://developers.google.com/earth-engine/datasets/images/MODIS/MODIS_061_MOD09Q1_sample.png +MODIS/061/MOD11A1,NASA LP DAAC at the USGS EROS Center,MOD11A1.061 Terra Land Surface Temperature and Emissivity Daily Global 1km,24-02-00,24-03-23,2000,2023,image_collection,"daily, emissivity, global, lst, mod11a1, modis, nasa, surface_temperature, terra, usgs",https://developers.google.com/earth-engine/datasets/catalog/MODIS_061_MOD11A1#terms-of-use,https://developers.google.com/earth-engine/datasets/images/MODIS/MODIS_061_MOD11A1_sample.png +MODIS/061/MOD11A2,NASA LP DAAC at the USGS EROS Center,MOD11A2.061 Terra Land Surface Temperature and Emissivity 8-Day Global 1km,18-02-00,14-03-23,2000,2023,image_collection,"8_day, emissivity, global, lst, mod11a2, modis, nasa, surface_temperature, terra, usgs",https://developers.google.com/earth-engine/datasets/catalog/MODIS_061_MOD11A2#terms-of-use,https://developers.google.com/earth-engine/datasets/images/MODIS/MODIS_061_MOD11A2_sample.png +MODIS/061/MOD13A1,NASA LP DAAC at the USGS EROS Center,MOD13A1.061 Terra Vegetation Indices 16-Day Global 500m,18-02-00,06-03-23,2000,2023,image_collection,"16_day, evi, global, mod13a1, modis, nasa, ndvi, terra, usgs, vegetation",https://developers.google.com/earth-engine/datasets/catalog/MODIS_061_MOD13A1#terms-of-use,https://developers.google.com/earth-engine/datasets/images/MODIS/MODIS_061_MOD13A1_sample.png +MODIS/061/MOD13A2,NASA LP DAAC at the USGS EROS Center,MOD13A2.061 Terra Vegetation Indices 16-Day Global 1km,18-02-00,06-03-23,2000,2023,image_collection,"16_day, evi, global, mod13a2, modis, nasa, ndvi, terra, usgs, vegetation",https://developers.google.com/earth-engine/datasets/catalog/MODIS_061_MOD13A2#terms-of-use,https://developers.google.com/earth-engine/datasets/images/MODIS/MODIS_061_MOD13A2_sample.png +MODIS/061/MOD13Q1,NASA LP DAAC at the USGS EROS Center,MOD13Q1.061 Terra Vegetation Indices 16-Day Global 250m,18-02-00,06-03-23,2000,2023,image_collection,"16_day, evi, global, mod13q1, modis, nasa, ndvi, terra, usgs, vegetation",https://developers.google.com/earth-engine/datasets/catalog/MODIS_061_MOD13Q1#terms-of-use,https://developers.google.com/earth-engine/datasets/images/MODIS/MODIS_061_MOD13Q1_sample.png +MODIS/061/MOD14A1,NASA LP DAAC at the USGS EROS Center,MOD14A1.061: Terra Thermal Anomalies & Fire Daily Global 1km,24-02-00,21-03-23,2000,2023,image_collection,"daily, fire, global, mod14a1, modis, nasa, terra, usgs",https://developers.google.com/earth-engine/datasets/catalog/MODIS_061_MOD14A1#terms-of-use,https://developers.google.com/earth-engine/datasets/images/MODIS/MODIS_061_MOD14A1_sample.png +MODIS/061/MOD14A2,NASA LP DAAC at the USGS EROS Center,MOD14A2.061: Terra Thermal Anomalies & Fire 8-Day Global 1km,18-02-00,14-03-23,2000,2023,image_collection,"8_day, fire, global, mod14a2, modis, nasa, terra, usgs",https://developers.google.com/earth-engine/datasets/catalog/MODIS_061_MOD14A2#terms-of-use,https://developers.google.com/earth-engine/datasets/images/MODIS/MODIS_061_MOD14A2_sample.png +MODIS/061/MOD15A2H,NASA LP DAAC at the USGS EROS Center,MOD15A2H.061: Terra Leaf Area Index/FPAR 8-Day Global 500m,18-02-00,14-03-23,2000,2023,image_collection,"8_day, fpar, global, lai, mod15a2h, modis, nasa, terra, usgs",https://developers.google.com/earth-engine/datasets/catalog/MODIS_061_MOD15A2H#terms-of-use,https://developers.google.com/earth-engine/datasets/images/MODIS/MODIS_061_MOD15A2H_sample.png +MODIS/061/MOD17A3HGF,NASA LP DAAC at the USGS EROS Center,MOD17A3HGF.061: Terra Net Primary Production Gap-Filled Yearly Global 500m,01-01-01,01-01-22,2001,2022,image_collection,"global, gpp, nasa, npp, photosynthesis, productivity, psn, terra, usgs, yearly",https://developers.google.com/earth-engine/datasets/catalog/MODIS_061_MOD17A3HGF#terms-of-use,https://developers.google.com/earth-engine/datasets/images/MODIS/MODIS_061_MOD17A3HGF_sample.png +MODIS/061/MOD21A1D,NASA LP DAAC at the USGS EROS Center,MOD21A1D.061 Terra Land Surface Temperature and 3-Band Emissivity Daily Global 1km,24-02-00,24-03-23,2000,2023,image_collection,"daily, emissivity, global, lst, nasa, surface_temperature, terra, usgs",https://developers.google.com/earth-engine/datasets/catalog/MODIS_061_MOD21A1D#terms-of-use,https://developers.google.com/earth-engine/datasets/images/MODIS/MODIS_061_MOD21A1D_sample.png +MODIS/061/MOD21A1N,NASA LP DAAC at the USGS EROS Center,MOD21A1N.061 Terra Land Surface Temperature and 3-Band Emissivity Daily Global 1km,24-02-00,23-03-23,2000,2023,image_collection,"daily, emissivity, global, lst, nasa, surface_temperature, terra, usgs",https://developers.google.com/earth-engine/datasets/catalog/MODIS_061_MOD21A1N#terms-of-use,https://developers.google.com/earth-engine/datasets/images/MODIS/MODIS_061_MOD21A1N_sample.png +MODIS/061/MOD21C1,NASA LP DAAC at the USGS EROS Center,MOD21C1.061 Terra Land Surface Temperature and 3-Band Emissivity Daily L3 Global 0.05 Deg CMG,24-02-00,22-03-23,2000,2023,image_collection,"daily, emissivity, global, lst, nasa, surface_temperature, terra, usgs",https://developers.google.com/earth-engine/datasets/catalog/MODIS_061_MOD21C1#terms-of-use,https://developers.google.com/earth-engine/datasets/images/MODIS/MODIS_061_MOD21C1_sample.png +MODIS/061/MOD21C2,NASA LP DAAC at the USGS EROS Center,MOD21C2.061 Terra Land Surface Temperature and 3-Band Emissivity 8-Day L3 Global 0.05 Deg CMG,24-02-00,14-03-23,2000,2023,image_collection,"emissivity, global, lst, nasa, surface_temperature, terra, usgs",https://developers.google.com/earth-engine/datasets/catalog/MODIS_061_MOD21C2#terms-of-use,https://developers.google.com/earth-engine/datasets/images/MODIS/MODIS_061_MOD21C2_sample.png +MODIS/061/MOD21C3,NASA LP DAAC at the USGS EROS Center,MOD21C3.061 Terra Land Surface Temperature and 3-Band Emissivity Monthly L3 Global 0.05 Deg CMG,24-02-00,01-02-23,2000,2023,image_collection,"emissivity, global, lst, monthly, nasa, surface_temperature, terra, usgs",https://developers.google.com/earth-engine/datasets/catalog/MODIS_061_MOD21C3#terms-of-use,https://developers.google.com/earth-engine/datasets/images/MODIS/MODIS_061_MOD21C3_sample.png +MODIS/061/MYD08_M3,NASA LAADS DAAC at NASA Goddard Space Flight Center,MYD08_M3.061 Aqua Atmosphere Monthly Global Product,01-07-02,01-02-23,2002,2023,image_collection,"aqua, atmosphere, geophysical, global, modis, monthly, myd08, myd08_m3, nasa, temperature, usgs",https://developers.google.com/earth-engine/datasets/catalog/MODIS_061_MYD08_M3#terms-of-use,https://developers.google.com/earth-engine/datasets/images/MODIS/MODIS_061_MYD08_M3_sample.png +MODIS/061/MYD09A1,NASA LP DAAC at the USGS EROS Center,MYD09A1.061 Aqua Surface Reflectance 8-Day Global 500m,04-07-02,14-03-23,2002,2023,image_collection,"8_day, aqua, global, modis, myd09a1, nasa, sr, surface_reflectance, usgs",https://developers.google.com/earth-engine/datasets/catalog/MODIS_061_MYD09A1#terms-of-use,https://developers.google.com/earth-engine/datasets/images/MODIS/MODIS_061_MYD09A1_sample.png +MODIS/061/MYD09GA,NASA LP DAAC at the USGS EROS Center,MYD09GA.061 Aqua Surface Reflectance Daily Global 1km and 500m,04-07-02,24-03-23,2002,2023,image_collection,"aqua, daily, global, modis, myd09ga, nasa, sr, surface_reflectance, usgs",https://developers.google.com/earth-engine/datasets/catalog/MODIS_061_MYD09GA#terms-of-use,https://developers.google.com/earth-engine/datasets/images/MODIS/MODIS_061_MYD09GA_sample.png +MODIS/061/MYD09GQ,NASA LP DAAC at the USGS EROS Center,MYD09GQ.061 Aqua Surface Reflectance Daily Global 250m,04-07-02,24-03-23,2002,2023,image_collection,"aqua, daily, global, modis, myd09gq, nasa, sr, surface_reflectance, usgs",https://developers.google.com/earth-engine/datasets/catalog/MODIS_061_MYD09GQ#terms-of-use,https://developers.google.com/earth-engine/datasets/images/MODIS/MODIS_061_MYD09GQ_sample.png +MODIS/061/MYD09Q1,NASA LP DAAC at the USGS EROS Center,MYD09Q1.061 Aqua Surface Reflectance 8-Day Global 250m,04-07-02,14-03-23,2002,2023,image_collection,"8_day, aqua, global, modis, myd09q1, nasa, sr, surface_reflectance, usgs",https://developers.google.com/earth-engine/datasets/catalog/MODIS_061_MYD09Q1#terms-of-use,https://developers.google.com/earth-engine/datasets/images/MODIS/MODIS_061_MYD09Q1_sample.png +MODIS/061/MYD11A1,NASA LP DAAC at the USGS EROS Center,MYD11A1.061 Aqua Land Surface Temperature and Emissivity Daily Global 1km,04-07-02,23-03-23,2002,2023,image_collection,"aqua, daily, emissivity, global, lst, modis, myd11a1, nasa, surface_temperature, usgs",https://developers.google.com/earth-engine/datasets/catalog/MODIS_061_MYD11A1#terms-of-use,https://developers.google.com/earth-engine/datasets/images/MODIS/MODIS_061_MYD11A1_sample.png +MODIS/061/MYD11A2,NASA LP DAAC at the USGS EROS Center,MYD11A2.061 Aqua Land Surface Temperature and Emissivity 8-Day Global 1km,04-07-02,14-03-23,2002,2023,image_collection,"8_day, aqua, emissivity, global, lst, modis, myd11a2, nasa, surface_temperature, usgs",https://developers.google.com/earth-engine/datasets/catalog/MODIS_061_MYD11A2#terms-of-use,https://developers.google.com/earth-engine/datasets/images/MODIS/MODIS_061_MYD11A2_sample.png +MODIS/061/MYD13A1,NASA LP DAAC at the USGS EROS Center,MYD13A1.061 Aqua Vegetation Indices 16-Day Global 500m,04-07-02,26-02-23,2002,2023,image_collection,"16_day, aqua, evi, global, modis, myd13a1, nasa, ndvi, usgs, vegetation",https://developers.google.com/earth-engine/datasets/catalog/MODIS_061_MYD13A1#terms-of-use,https://developers.google.com/earth-engine/datasets/images/MODIS/MODIS_061_MYD13A1_sample.png +MODIS/061/MYD13A2,NASA LP DAAC at the USGS EROS Center,MYD13A2.061 Aqua Vegetation Indices 16-Day Global 1km,04-07-02,26-02-23,2002,2023,image_collection,"16_day, aqua, evi, global, modis, myd13a2, nasa, ndvi, usgs, vegetation",https://developers.google.com/earth-engine/datasets/catalog/MODIS_061_MYD13A2#terms-of-use,https://developers.google.com/earth-engine/datasets/images/MODIS/MODIS_061_MYD13A2_sample.png +MODIS/061/MYD13Q1,NASA LP DAAC at the USGS EROS Center,MYD13Q1.061 Aqua Vegetation Indices 16-Day Global 250m,04-07-02,26-02-23,2002,2023,image_collection,"16_day, aqua, evi, global, modis, myd13q1, nasa, ndvi, usgs, vegetation",https://developers.google.com/earth-engine/datasets/catalog/MODIS_061_MYD13Q1#terms-of-use,https://developers.google.com/earth-engine/datasets/images/MODIS/MODIS_061_MYD13Q1_sample.png +MODIS/061/MYD14A1,NASA LP DAAC at the USGS EROS Center,MYD14A1.061: Aqua Thermal Anomalies & Fire Daily Global 1km,04-07-02,21-03-23,2002,2023,image_collection,"aqua, daily, fire, global, modis, myd14a1, nasa, usgs",https://developers.google.com/earth-engine/datasets/catalog/MODIS_061_MYD14A1#terms-of-use,https://developers.google.com/earth-engine/datasets/images/MODIS/MODIS_061_MYD14A1_sample.png +MODIS/061/MYD14A2,NASA LP DAAC at the USGS EROS Center,MYD14A2.061: Aqua Thermal Anomalies & Fire 8-Day Global 1km,04-07-02,14-03-23,2002,2023,image_collection,"8_day, aqua, fire, global, modis, myd14a2, nasa, usgs",https://developers.google.com/earth-engine/datasets/catalog/MODIS_061_MYD14A2#terms-of-use,https://developers.google.com/earth-engine/datasets/images/MODIS/MODIS_061_MYD14A2_sample.png +MODIS/061/MYD15A2H,NASA LP DAAC at the USGS EROS Center,MYD15A2H.061: Aqua Leaf Area Index/FPAR 8-Day Global 500m,04-07-02,14-03-23,2002,2023,image_collection,"8_day, aqua, fpar, global, lai, modis, myd15a2h, nasa, usgs",https://developers.google.com/earth-engine/datasets/catalog/MODIS_061_MYD15A2H#terms-of-use,https://developers.google.com/earth-engine/datasets/images/MODIS/MODIS_061_MYD15A2H_sample.png +MODIS/061/MYD17A3HGF,NASA LP DAAC at the USGS EROS Center,MYD17A3HGF.061: Aqua Net Primary Production Gap-Filled Yearly Global 500m,01-01-01,01-01-22,2001,2022,image_collection,"aqua, global, gpp, nasa, npp, photosynthesis, productivity, psn, usgs, yearly",https://developers.google.com/earth-engine/datasets/catalog/MODIS_061_MYD17A3HGF#terms-of-use,https://developers.google.com/earth-engine/datasets/images/MODIS/MODIS_061_MYD17A3HGF_sample.png +MODIS/061/MYD21A1D,NASA LP DAAC at the USGS EROS Center,MYD21A1D.061 Aqua Land Surface Temperature and 3-Band Emissivity Daily Global 1km,24-02-00,24-03-23,2000,2023,image_collection,"aqua, daily, emissivity, global, lst, nasa, surface_temperature, usgs",https://developers.google.com/earth-engine/datasets/catalog/MODIS_061_MYD21A1D#terms-of-use,https://developers.google.com/earth-engine/datasets/images/MODIS/MODIS_061_MYD21A1D_sample.png +MODIS/061/MYD21A1N,NASA LP DAAC at the USGS EROS Center,MYD21A1N.061 Aqua Land Surface Temperature and 3-Band Emissivity Daily Global 1km,24-02-00,24-03-23,2000,2023,image_collection,"aqua, daily, emissivity, global, lst, nasa, surface_temperature, usgs",https://developers.google.com/earth-engine/datasets/catalog/MODIS_061_MYD21A1N#terms-of-use,https://developers.google.com/earth-engine/datasets/images/MODIS/MODIS_061_MYD21A1N_sample.png +MODIS/061/MYD21C1,NASA LP DAAC at the USGS EROS Center,MYD21C1.061 Aqua Land Surface Temperature and 3-Band Emissivity Daily L3 Global 0.05 Deg CMG,24-02-00,24-03-23,2000,2023,image_collection,"aqua, daily, emissivity, global, lst, nasa, surface_temperature, usgs",https://developers.google.com/earth-engine/datasets/catalog/MODIS_061_MYD21C1#terms-of-use,https://developers.google.com/earth-engine/datasets/images/MODIS/MODIS_061_MYD21C1_sample.png +MODIS/061/MYD21C2,NASA LP DAAC at the USGS EROS Center,MYD21C2.061 Aqua Land Surface Temperature and 3-Band Emissivity 8-Day L3 Global 0.05 Deg CMG,24-02-00,14-03-23,2000,2023,image_collection,"aqua, emissivity, global, lst, nasa, surface_temperature, usgs",https://developers.google.com/earth-engine/datasets/catalog/MODIS_061_MYD21C2#terms-of-use,https://developers.google.com/earth-engine/datasets/images/MODIS/MODIS_061_MYD21C2_sample.png +MODIS/061/MYD21C3,NASA LP DAAC at the USGS EROS Center,MYD21C3.061 Aqua Land Surface Temperature and 3-Band Emissivity Monthly L3 Global 0.05 Deg CMG,24-02-00,01-02-23,2000,2023,image_collection,"aqua, emissivity, global, lst, monthly, nasa, surface_temperature, usgs",https://developers.google.com/earth-engine/datasets/catalog/MODIS_061_MYD21C3#terms-of-use,https://developers.google.com/earth-engine/datasets/images/MODIS/MODIS_061_MYD21C3_sample.png +MODIS/MCD43A1,NASA LP DAAC at the USGS EROS Center,MCD43A1.005 BRDF-Albedo Model Parameters 16-Day L3 Global 500m [deprecated],18-02-00,14-03-17,2000,2017,image_collection,"16_day, albedo, brdf, global, mcd43a1, modis, reflectance, usgs",https://developers.google.com/earth-engine/datasets/catalog/MODIS_MCD43A1#terms-of-use,https://developers.google.com/earth-engine/datasets/images/MODIS/MODIS_MCD43A1_sample.png +MODIS/MCD43A2,NASA LP DAAC at the USGS EROS Center,MCD43A2.005 BRDF-Albedo Quality 16-Day Global 500m [deprecated],18-02-00,14-03-17,2000,2017,image_collection,"16_day, albedo, brdf, global, modis, quality, reflectance, usgs",https://developers.google.com/earth-engine/datasets/catalog/MODIS_MCD43A2#terms-of-use,https://developers.google.com/earth-engine/datasets/images/MODIS/MODIS_MCD43A2_sample.png +MODIS/MCD43A4,NASA LP DAAC at the USGS EROS Center,MCD43A4.005 BRDF-Adjusted Reflectance 16-Day Global 500m [deprecated],18-02-00,14-03-17,2000,2017,image_collection,"16_day, brdf, global, mcd43a4, modis, nbar, reflectance, surface_reflectance, usgs",https://developers.google.com/earth-engine/datasets/catalog/MODIS_MCD43A4#terms-of-use,https://developers.google.com/earth-engine/datasets/images/MODIS/MODIS_MCD43A4_sample.png +MODIS/MCD43A4_006_BAI,Google,MODIS Combined 16-Day BAI,24-02-00,10-02-23,2000,2023,image_collection,"bai, modis, usgs",https://developers.google.com/earth-engine/datasets/catalog/MODIS_MCD43A4_006_BAI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/MODIS/MODIS_MCD43A4_006_BAI_sample.png +MODIS/MCD43A4_006_EVI,Google,MODIS Combined 16-Day EVI,24-02-00,10-02-23,2000,2023,image_collection,"evi, modis, usgs",https://developers.google.com/earth-engine/datasets/catalog/MODIS_MCD43A4_006_EVI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/MODIS/MODIS_MCD43A4_006_EVI_sample.png +MODIS/MCD43A4_006_NDSI,Google,MODIS Combined 16-Day NDSI,24-02-00,10-02-23,2000,2023,image_collection,"modis, ndsi, usgs",https://developers.google.com/earth-engine/datasets/catalog/MODIS_MCD43A4_006_NDSI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/MODIS/MODIS_MCD43A4_006_NDSI_sample.png +MODIS/MCD43A4_006_NDVI,Google,MODIS Combined 16-Day NDVI,24-02-00,10-02-23,2000,2023,image_collection,"modis, ndvi, usgs",https://developers.google.com/earth-engine/datasets/catalog/MODIS_MCD43A4_006_NDVI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/MODIS/MODIS_MCD43A4_006_NDVI_sample.png +MODIS/MCD43A4_006_NDWI,Google,MODIS Combined 16-Day NDWI,24-02-00,10-02-23,2000,2023,image_collection,"modis, ndwi, usgs",https://developers.google.com/earth-engine/datasets/catalog/MODIS_MCD43A4_006_NDWI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/MODIS/MODIS_MCD43A4_006_NDWI_sample.png +MODIS/MCD43A4_BAI,Google,MODIS Combined 16-Day BAI [deprecated],18-02-00,14-03-17,2000,2017,image_collection,"bai, modis, usgs",https://developers.google.com/earth-engine/datasets/catalog/MODIS_MCD43A4_BAI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/MODIS/MODIS_MCD43A4_BAI_sample.png +MODIS/MCD43A4_EVI,Google,MODIS Combined 16-Day EVI [deprecated],18-02-00,14-03-17,2000,2017,image_collection,"evi, modis, usgs",https://developers.google.com/earth-engine/datasets/catalog/MODIS_MCD43A4_EVI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/MODIS/MODIS_MCD43A4_EVI_sample.png +MODIS/MCD43A4_NDSI,Google,MODIS Combined 16-Day NDSI [deprecated],18-02-00,14-03-17,2000,2017,image_collection,"modis, ndsi, usgs",https://developers.google.com/earth-engine/datasets/catalog/MODIS_MCD43A4_NDSI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/MODIS/MODIS_MCD43A4_NDSI_sample.png +MODIS/MCD43A4_NDVI,Google,MODIS Combined 16-Day NDVI [deprecated],18-02-00,14-03-17,2000,2017,image_collection,"modis, ndvi, usgs",https://developers.google.com/earth-engine/datasets/catalog/MODIS_MCD43A4_NDVI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/MODIS/MODIS_MCD43A4_NDVI_sample.png +MODIS/MCD43A4_NDWI,Google,MODIS Combined 16-Day NDWI [deprecated],18-02-00,14-03-17,2000,2017,image_collection,"modis, ndwi, usgs",https://developers.google.com/earth-engine/datasets/catalog/MODIS_MCD43A4_NDWI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/MODIS/MODIS_MCD43A4_NDWI_sample.png +MODIS/MOD09A1,NASA LP DAAC at the USGS EROS Center,MOD09A1.005 Surface Reflectance 8-Day Global 500m [deprecated],18-02-00,22-03-17,2000,2017,image_collection,"8_day, global, mod09a1, modis, surface_reflectance, terra",https://developers.google.com/earth-engine/datasets/catalog/MODIS_MOD09A1#terms-of-use,https://developers.google.com/earth-engine/datasets/images/MODIS/MODIS_MOD09A1_sample.png +MODIS/MOD09GA,NASA LP DAAC at the USGS EROS Center,MOD09GA.005 Terra Surface Reflectance Daily L2G Global 1km and 500m [deprecated],24-02-00,30-03-17,2000,2017,image_collection,"daily, global, mod09ga, modis, surface_reflectance, terra, usgs",https://developers.google.com/earth-engine/datasets/catalog/MODIS_MOD09GA#terms-of-use,https://developers.google.com/earth-engine/datasets/images/MODIS/MODIS_MOD09GA_sample.png +MODIS/MOD09GA_006_BAI,Google,MODIS Terra Daily BAI,24-02-00,17-02-23,2000,2023,image_collection,"bai, modis, usgs",https://developers.google.com/earth-engine/datasets/catalog/MODIS_MOD09GA_006_BAI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/MODIS/MODIS_MOD09GA_006_BAI_sample.png +MODIS/MOD09GA_006_EVI,Google,MODIS Terra Daily EVI,24-02-00,17-02-23,2000,2023,image_collection,"evi, modis, usgs",https://developers.google.com/earth-engine/datasets/catalog/MODIS_MOD09GA_006_EVI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/MODIS/MODIS_MOD09GA_006_EVI_sample.png +MODIS/MOD09GA_006_NDSI,Google,MODIS Terra Daily NDSI,24-02-00,17-02-23,2000,2023,image_collection,"modis, ndsi, usgs",https://developers.google.com/earth-engine/datasets/catalog/MODIS_MOD09GA_006_NDSI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/MODIS/MODIS_MOD09GA_006_NDSI_sample.png +MODIS/MOD09GA_006_NDVI,Google,MODIS Terra Daily NDVI,24-02-00,17-02-23,2000,2023,image_collection,"modis, ndvi, usgs",https://developers.google.com/earth-engine/datasets/catalog/MODIS_MOD09GA_006_NDVI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/MODIS/MODIS_MOD09GA_006_NDVI_sample.png +MODIS/MOD09GA_006_NDWI,Google,MODIS Terra Daily NDWI,24-02-00,17-02-23,2000,2023,image_collection,"modis, ndwi, usgs",https://developers.google.com/earth-engine/datasets/catalog/MODIS_MOD09GA_006_NDWI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/MODIS/MODIS_MOD09GA_006_NDWI_sample.png +MODIS/MOD09GA_BAI,Google,MODIS Terra Daily BAI [deprecated],24-02-00,30-03-17,2000,2017,image_collection,"bai, modis, usgs",https://developers.google.com/earth-engine/datasets/catalog/MODIS_MOD09GA_BAI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/MODIS/MODIS_MOD09GA_BAI_sample.png +MODIS/MOD09GA_EVI,Google,MODIS Terra Daily EVI [deprecated],24-02-00,30-03-17,2000,2017,image_collection,"evi, modis, usgs",https://developers.google.com/earth-engine/datasets/catalog/MODIS_MOD09GA_EVI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/MODIS/MODIS_MOD09GA_EVI_sample.png +MODIS/MOD09GA_NDSI,Google,MODIS Terra Daily NDSI [deprecated],24-02-00,30-03-17,2000,2017,image_collection,"modis, ndsi, usgs",https://developers.google.com/earth-engine/datasets/catalog/MODIS_MOD09GA_NDSI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/MODIS/MODIS_MOD09GA_NDSI_sample.png +MODIS/MOD09GA_NDVI,Google,MODIS Terra Daily NDVI [deprecated],24-02-00,30-03-17,2000,2017,image_collection,"modis, ndvi, usgs",https://developers.google.com/earth-engine/datasets/catalog/MODIS_MOD09GA_NDVI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/MODIS/MODIS_MOD09GA_NDVI_sample.png +MODIS/MOD09GA_NDWI,Google,MODIS Terra Daily NDWI [deprecated],24-02-00,30-03-17,2000,2017,image_collection,"modis, ndwi, usgs",https://developers.google.com/earth-engine/datasets/catalog/MODIS_MOD09GA_NDWI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/MODIS/MODIS_MOD09GA_NDWI_sample.png +MODIS/MOD09GQ,NASA LP DAAC at the USGS EROS Center,MOD09GQ.005 Terra Surface Reflectance Daily L2G Global 250m [deprecated],24-02-00,30-03-17,2000,2017,image_collection,"daily, global, mod09gq, modis, surface_reflectance, terra, usgs",https://developers.google.com/earth-engine/datasets/catalog/MODIS_MOD09GQ#terms-of-use,https://developers.google.com/earth-engine/datasets/images/MODIS/MODIS_MOD09GQ_sample.png +MODIS/MOD09Q1,NASA LP DAAC at the USGS EROS Center,MOD09Q1.005 Surface Reflectance 8-Day Global 250m [deprecated],18-02-00,22-03-17,2000,2017,image_collection,"8_day, global, mod09q1, modis, surface_reflectance, terra",https://developers.google.com/earth-engine/datasets/catalog/MODIS_MOD09Q1#terms-of-use,https://developers.google.com/earth-engine/datasets/images/MODIS/MODIS_MOD09Q1_sample.png +MODIS/MOD10A1,NSIDC,MOD10A1.005 Terra Snow Cover Daily Global 500m [deprecated],24-02-00,26-12-16,2000,2016,image_collection,"albedo, daily, geophysical, global, mod10a1, modis, nsidc, snow, terra",https://developers.google.com/earth-engine/datasets/catalog/MODIS_MOD10A1#terms-of-use,https://developers.google.com/earth-engine/datasets/images/MODIS/MODIS_MOD10A1_sample.png +MODIS/MOD11A1,NASA LP DAAC at the USGS EROS Center,MOD11A1.005 Terra Land Surface Temperature and Emissivity Daily Global 1 km Grid SIN [deprecated],05-03-00,30-03-17,2000,2017,image_collection,"daily, emissivity, global, lst, mod11a1, modis, surface_temperature, terra",https://developers.google.com/earth-engine/datasets/catalog/MODIS_MOD11A1#terms-of-use,https://developers.google.com/earth-engine/datasets/images/MODIS/MODIS_MOD11A1_sample.png +MODIS/MOD11A2,NASA LP DAAC at the USGS EROS Center,MOD11A2.005 Land Surface Temperature and Emissivity 8-Day Global 1km [deprecated],05-03-00,22-03-17,2000,2017,image_collection,"8_day, emissivity, global, lst, mod11a2, modis, surface_temperature, terra",https://developers.google.com/earth-engine/datasets/catalog/MODIS_MOD11A2#terms-of-use,https://developers.google.com/earth-engine/datasets/images/MODIS/MODIS_MOD11A2_sample.png +MODIS/MOD13A1,NASA LP DAAC at the USGS EROS Center,MOD13A1.005 Vegetation Indices 16-Day L3 Global 500m [deprecated],18-02-00,06-03-17,2000,2017,image_collection,"16_day, evi, global, mod13a1, modis, ndvi, terra, vegetation",https://developers.google.com/earth-engine/datasets/catalog/MODIS_MOD13A1#terms-of-use,https://developers.google.com/earth-engine/datasets/images/MODIS/MODIS_MOD13A1_sample.png +MODIS/MOD13Q1,NASA LP DAAC at the USGS EROS Center,MOD13Q1.005 Vegetation Indices 16-Day Global 250m [deprecated],18-02-00,06-03-17,2000,2017,image_collection,"16_day, evi, global, mod13q1, modis, ndvi, terra, vegetation",https://developers.google.com/earth-engine/datasets/catalog/MODIS_MOD13Q1#terms-of-use,https://developers.google.com/earth-engine/datasets/images/MODIS/MODIS_MOD13Q1_sample.png +MODIS/MOD44W/MOD44W_005_2000_02_24,NASA LP DAAC at the USGS EROS Center,MOD44W.005 Land Water Mask Derived From MODIS and SRTM,24-02-00,24-02-00,2000,2000,image,"geophysical, mod44w, modis, srtm, water_mask",https://developers.google.com/earth-engine/datasets/catalog/MODIS_MOD44W_MOD44W_005_2000_02_24#terms-of-use,https://developers.google.com/earth-engine/datasets/images/MODIS/MODIS_MOD44W_MOD44W_005_2000_02_24_sample.png +MODIS/MYD09A1,NASA LP DAAC at the USGS EROS Center,MYD09A1.005 Surface Reflectance 8-Day L3 Global 500m [deprecated],04-07-02,22-03-17,2002,2017,image_collection,"8_day, aqua, global, modis, myd09a1, surface_reflectance",https://developers.google.com/earth-engine/datasets/catalog/MODIS_MYD09A1#terms-of-use,https://developers.google.com/earth-engine/datasets/images/MODIS/MODIS_MYD09A1_sample.png +MODIS/MYD09GA,NASA LP DAAC at the USGS EROS Center,MYD09GA.005 Aqua Surface Reflectance Daily L2G Global 1km and 500m [deprecated],04-07-02,30-03-17,2002,2017,image_collection,"aqua, daily, global, modis, myd09ga, surface_reflectance, usgs",https://developers.google.com/earth-engine/datasets/catalog/MODIS_MYD09GA#terms-of-use,https://developers.google.com/earth-engine/datasets/images/MODIS/MODIS_MYD09GA_sample.png +MODIS/MYD09GA_006_BAI,Google,MODIS Aqua Daily BAI,04-07-02,25-02-23,2002,2023,image_collection,"bai, modis, usgs",https://developers.google.com/earth-engine/datasets/catalog/MODIS_MYD09GA_006_BAI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/MODIS/MODIS_MYD09GA_006_BAI_sample.png +MODIS/MYD09GA_006_EVI,Google,MODIS Aqua Daily EVI,04-07-02,25-02-23,2002,2023,image_collection,"evi, modis, usgs",https://developers.google.com/earth-engine/datasets/catalog/MODIS_MYD09GA_006_EVI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/MODIS/MODIS_MYD09GA_006_EVI_sample.png +MODIS/MYD09GA_006_NDSI,Google,MODIS Aqua Daily NDSI,04-07-02,25-02-23,2002,2023,image_collection,"modis, ndsi, usgs",https://developers.google.com/earth-engine/datasets/catalog/MODIS_MYD09GA_006_NDSI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/MODIS/MODIS_MYD09GA_006_NDSI_sample.png +MODIS/MYD09GA_006_NDVI,Google,MODIS Aqua Daily NDVI,04-07-02,25-02-23,2002,2023,image_collection,"modis, ndvi, usgs",https://developers.google.com/earth-engine/datasets/catalog/MODIS_MYD09GA_006_NDVI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/MODIS/MODIS_MYD09GA_006_NDVI_sample.png +MODIS/MYD09GA_006_NDWI,Google,MODIS Aqua Daily NDWI,04-07-02,25-02-23,2002,2023,image_collection,"modis, ndwi, usgs",https://developers.google.com/earth-engine/datasets/catalog/MODIS_MYD09GA_006_NDWI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/MODIS/MODIS_MYD09GA_006_NDWI_sample.png +MODIS/MYD09GA_BAI,Google,MODIS Aqua Daily BAI [deprecated],04-07-02,30-03-17,2002,2017,image_collection,"bai, modis, usgs",https://developers.google.com/earth-engine/datasets/catalog/MODIS_MYD09GA_BAI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/MODIS/MODIS_MYD09GA_BAI_sample.png +MODIS/MYD09GA_EVI,Google,MODIS Aqua Daily EVI [deprecated],04-07-02,30-03-17,2002,2017,image_collection,"evi, modis, usgs",https://developers.google.com/earth-engine/datasets/catalog/MODIS_MYD09GA_EVI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/MODIS/MODIS_MYD09GA_EVI_sample.png +MODIS/MYD09GA_NDSI,Google,MODIS Aqua Daily NDSI [deprecated],04-07-02,30-03-17,2002,2017,image_collection,"modis, ndsi, usgs",https://developers.google.com/earth-engine/datasets/catalog/MODIS_MYD09GA_NDSI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/MODIS/MODIS_MYD09GA_NDSI_sample.png +MODIS/MYD09GA_NDVI,Google,MODIS Aqua Daily NDVI [deprecated],04-07-02,30-03-17,2002,2017,image_collection,"modis, ndvi, usgs",https://developers.google.com/earth-engine/datasets/catalog/MODIS_MYD09GA_NDVI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/MODIS/MODIS_MYD09GA_NDVI_sample.png +MODIS/MYD09GA_NDWI,Google,MODIS Aqua Daily NDWI [deprecated],04-07-02,30-03-17,2002,2017,image_collection,"modis, ndwi, usgs",https://developers.google.com/earth-engine/datasets/catalog/MODIS_MYD09GA_NDWI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/MODIS/MODIS_MYD09GA_NDWI_sample.png +MODIS/MYD09GQ,NASA LP DAAC at the USGS EROS Center,MYD09GQ.005 Aqua Surface Reflectance Daily L2G Global 250m [deprecated],04-07-02,30-03-17,2002,2017,image_collection,"aqua, daily, global, modis, myd09gq, surface_reflectance, usgs",https://developers.google.com/earth-engine/datasets/catalog/MODIS_MYD09GQ#terms-of-use,https://developers.google.com/earth-engine/datasets/images/MODIS/MODIS_MYD09GQ_sample.png +MODIS/MYD09Q1,NASA LP DAAC at the USGS EROS Center,MYD09Q1.005 Surface Reflectance 8-Day L3 Global 250m [deprecated],04-07-02,22-03-17,2002,2017,image_collection,"8_day, aqua, global, modis, myd09q1, surface_reflectance",https://developers.google.com/earth-engine/datasets/catalog/MODIS_MYD09Q1#terms-of-use,https://developers.google.com/earth-engine/datasets/images/MODIS/MODIS_MYD09Q1_sample.png +MODIS/MYD10A1,NSIDC,MYD10A1.005 Aqua Snow Cover Daily Global 500m [deprecated],04-07-02,25-12-16,2002,2016,image_collection,"albedo, aqua, daily, geophysical, global, modis, myd10a1, nsidc, snow",https://developers.google.com/earth-engine/datasets/catalog/MODIS_MYD10A1#terms-of-use,https://developers.google.com/earth-engine/datasets/images/MODIS/MODIS_MYD10A1_sample.png +MODIS/MYD11A1,NASA LP DAAC at the USGS EROS Center,MYD11A1.005 Land Surface Temperature and Emissivity Daily Global 1 km Grid SIN [deprecated],08-07-02,30-03-17,2002,2017,image_collection,"aqua, daily, emissivity, global, lst, modis, myd11a1, surface_temperature",https://developers.google.com/earth-engine/datasets/catalog/MODIS_MYD11A1#terms-of-use,https://developers.google.com/earth-engine/datasets/images/MODIS/MODIS_MYD11A1_sample.png +MODIS/MYD11A2,NASA LP DAAC at the USGS EROS Center,MYD11A2.005 Land Surface Temperature and Emissivity 8-Day L3 Global 1km [deprecated],04-07-02,22-03-17,2002,2017,image_collection,"8_day, aqua, emissivity, global, lst, modis, myd11a2, surface_temperature",https://developers.google.com/earth-engine/datasets/catalog/MODIS_MYD11A2#terms-of-use,https://developers.google.com/earth-engine/datasets/images/MODIS/MODIS_MYD11A2_sample.png +MODIS/MYD13A1,NASA LP DAAC at the USGS EROS Center,MYD13A1.005 Vegetation Indices 16-Day L3 Global 500m [deprecated],04-07-02,14-03-17,2002,2017,image_collection,"16_day, aqua, evi, global, modis, myd13a1, ndvi, vegetation",https://developers.google.com/earth-engine/datasets/catalog/MODIS_MYD13A1#terms-of-use,https://developers.google.com/earth-engine/datasets/images/MODIS/MODIS_MYD13A1_sample.png +MODIS/MYD13Q1,NASA LP DAAC at the USGS EROS Center,MYD13Q1.005 Vegetation Indices 16-Day Global 250m [deprecated],04-07-02,14-03-17,2002,2017,image_collection,"16_day, aqua, evi, global, modis, myd13q1, ndvi, vegetation",https://developers.google.com/earth-engine/datasets/catalog/MODIS_MYD13Q1#terms-of-use,https://developers.google.com/earth-engine/datasets/images/MODIS/MODIS_MYD13Q1_sample.png +MODIS/NTSG/MOD16A2/105,"Numerical Terradynamic Simulation Group, The University of Montana",MOD16A2: MODIS Global Terrestrial Evapotranspiration 8-Day Global 1km,01-01-00,27-12-14,2000,2014,image_collection,"8_day, evapotranspiration, global, mod16a2, modis",https://developers.google.com/earth-engine/datasets/catalog/MODIS_NTSG_MOD16A2_105#terms-of-use,https://developers.google.com/earth-engine/datasets/images/MODIS/MODIS_NTSG_MOD16A2_105_sample.png +NASA/ASTER_GED/AG100_003,NASA LP DAAC at the USGS EROS Center,AG100: ASTER Global Emissivity Dataset 100-meter V003,01-01-00,31-12-08,2000,2008,image,"aster, caltech, elevation, emissivity, ged, geophysical, infrared, jpl, lst, nasa, ndvi, temperature, thermal",https://developers.google.com/earth-engine/datasets/catalog/NASA_ASTER_GED_AG100_003#terms-of-use,https://developers.google.com/earth-engine/datasets/images/NASA/NASA_ASTER_GED_AG100_003_sample.png +NASA/FLDAS/NOAH01/C/GL/M/V001,NASA GES DISC at NASA Goddard Space Flight Center,FLDAS: Famine Early Warning Systems Network (FEWS NET) Land Data Assimilation System,01-01-82,01-02-23,1982,2023,image_collection,"climate, evapotranspiration, famine, fldas, humidity, ldas, monthly, nasa, runoff, snow, soil_moisture, soil_temperature, temperature, wind",https://developers.google.com/earth-engine/datasets/catalog/NASA_FLDAS_NOAH01_C_GL_M_V001#terms-of-use,https://developers.google.com/earth-engine/datasets/images/NASA/NASA_FLDAS_NOAH01_C_GL_M_V001_sample.png +NASA/GDDP-CMIP6,NASA / CSU,NEX-GDDP-CMIP6: NASA Earth Exchange Global Daily Downscaled Climate Projections,01-01-50,31-12-00,1950,2100,image_collection,"climate, csu, gddp, geophysical, nasa, nex, precipitation, temperature",https://developers.google.com/earth-engine/datasets/catalog/NASA_GDDP-CMIP6#terms-of-use,https://developers.google.com/earth-engine/datasets/images/NASA/NASA_GDDP-CMIP6_sample.png +NASA/GEOS-CF/v1/fcst/htf,NASA / GMAO,GEOS-CF fcst htf v1: Goddard Earth Observing System Composition Forecast,01-10-22,24-03-23,2022,2023,image_collection,"composition, forecast, geos, gmao, nasa",https://developers.google.com/earth-engine/datasets/catalog/NASA_GEOS-CF_v1_fcst_htf#terms-of-use,https://developers.google.com/earth-engine/datasets/images/NASA/NASA_GEOS-CF_v1_fcst_htf_sample.png +NASA/GEOS-CF/v1/rpl/htf,NASA / GMAO,GEOS-CF rpl htf v1: Goddard Earth Observing System Composition Forecast,01-01-18,24-03-23,2018,2023,image_collection,"composition, forecast, geos, gmao, nasa",https://developers.google.com/earth-engine/datasets/catalog/NASA_GEOS-CF_v1_rpl_htf#terms-of-use,https://developers.google.com/earth-engine/datasets/images/NASA/NASA_GEOS-CF_v1_rpl_htf_sample.png +NASA/GEOS-CF/v1/rpl/tavg1hr,NASA / GMAO,GEOS-CF rpl tavg1hr v1: Goddard Earth Observing System Composition Forecast,01-01-18,24-03-23,2018,2023,image_collection,"composition, forecast, geos, gmao, nasa",https://developers.google.com/earth-engine/datasets/catalog/NASA_GEOS-CF_v1_rpl_tavg1hr#terms-of-use,https://developers.google.com/earth-engine/datasets/images/NASA/NASA_GEOS-CF_v1_rpl_tavg1hr_sample.png +NASA/GIMMS/3GV0,NASA/NOAA,GIMMS NDVI From AVHRR Sensors (3rd Generation),01-07-81,16-12-13,1981,2013,image_collection,"avhrr, gimms, nasa, ndvi, noaa, vegetation",https://developers.google.com/earth-engine/datasets/catalog/NASA_GIMMS_3GV0#terms-of-use,https://developers.google.com/earth-engine/datasets/images/NASA/NASA_GIMMS_3GV0_sample.png +NASA/GLDAS/V20/NOAH/G025/T3H,NASA GES DISC at NASA Goddard Space Flight Center,Reprocessed GLDAS-2.0: Global Land Data Assimilation System,01-01-48,31-12-14,1948,2014,image_collection,"3_hourly, climate, evaporation, forcing, geophysical, gldas, humidity, ldas, nasa, precipitation, pressure, radiation, soil, soil_moisture, surface, temperature, wind",https://developers.google.com/earth-engine/datasets/catalog/NASA_GLDAS_V20_NOAH_G025_T3H#terms-of-use,https://developers.google.com/earth-engine/datasets/images/NASA/NASA_GLDAS_V20_NOAH_G025_T3H_sample.png +NASA/GLDAS/V021/NOAH/G025/T3H,NASA GES DISC at NASA Goddard Space Flight Center,GLDAS-2.1: Global Land Data Assimilation System,01-01-00,14-03-23,2000,2023,image_collection,"3_hourly, climate, evaporation, forcing, geophysical, gldas, humidity, ldas, nasa, precipitation, pressure, radiation, soil, soil_moisture, surface, temperature, wind",https://developers.google.com/earth-engine/datasets/catalog/NASA_GLDAS_V021_NOAH_G025_T3H#terms-of-use,https://developers.google.com/earth-engine/datasets/images/NASA/NASA_GLDAS_V021_NOAH_G025_T3H_sample.png +NASA/GLDAS/V022/CLSM/G025/DA1D,NASA GES DISC at NASA Goddard Earth Sciences Data and Information Services Center,GLDAS-2.2: Global Land Data Assimilation System,01-01-03,30-11-22,2003,2022,image_collection,"3_hourly, climate, evaporation, forcing, geophysical, gldas, humidity, ldas, nasa, precipitation, pressure, radiation, soil, soil_moisture, surface, temperature, wind",https://developers.google.com/earth-engine/datasets/catalog/NASA_GLDAS_V022_CLSM_G025_DA1D#terms-of-use,https://developers.google.com/earth-engine/datasets/images/NASA/NASA_GLDAS_V022_CLSM_G025_DA1D_sample.png +NASA/GPM_L3/IMERG_MONTHLY_V06,NASA GES DISC at NASA Goddard Space Flight Center,GPM: Monthly Global Precipitation Measurement (GPM) v6,01-06-00,01-09-21,2000,2021,image_collection,"climate, geophysical, gpm, imerg, jaxa, monthly, nasa, precipitation, weather",https://developers.google.com/earth-engine/datasets/catalog/NASA_GPM_L3_IMERG_MONTHLY_V06#terms-of-use,https://developers.google.com/earth-engine/datasets/images/NASA/NASA_GPM_L3_IMERG_MONTHLY_V06_sample.png +NASA/GPM_L3/IMERG_V06,NASA GES DISC at NASA Goddard Space Flight Center,GPM: Global Precipitation Measurement (GPM) v6,01-06-00,25-03-23,2000,2023,image_collection,"climate, geophysical, gpm, half_hourly, imerg, jaxa, nasa, precipitation, weather",https://developers.google.com/earth-engine/datasets/catalog/NASA_GPM_L3_IMERG_V06#terms-of-use,https://developers.google.com/earth-engine/datasets/images/NASA/NASA_GPM_L3_IMERG_V06_sample.png +NASA/GRACE/MASS_GRIDS/LAND,NASA Jet Propulsion Laboratory,GRACE Monthly Mass Grids - Land,01-04-02,07-01-17,2002,2017,image_collection,"crs, gfz, grace, gravity, jpl, land, mass, nasa, tellus, water",https://developers.google.com/earth-engine/datasets/catalog/NASA_GRACE_MASS_GRIDS_LAND#terms-of-use,https://developers.google.com/earth-engine/datasets/images/NASA/NASA_GRACE_MASS_GRIDS_LAND_sample.png +NASA/GRACE/MASS_GRIDS/MASCON,NASA Jet Propulsion Laboratory,GRACE Monthly Mass Grids - Global Mascons,31-03-02,22-05-17,2002,2017,image_collection,"grace, gravity, jpl, mascon, mass, nasa, tellus, water",https://developers.google.com/earth-engine/datasets/catalog/NASA_GRACE_MASS_GRIDS_MASCON#terms-of-use,https://developers.google.com/earth-engine/datasets/images/NASA/NASA_GRACE_MASS_GRIDS_MASCON_sample.png +NASA/GRACE/MASS_GRIDS/MASCON_CRI,NASA Jet Propulsion Laboratory,GRACE Monthly Mass Grids - Global Mascon (CRI Filtered),31-03-02,22-05-17,2002,2017,image_collection,"grace, gravity, jpl, mascon, mass, nasa, tellus, water",https://developers.google.com/earth-engine/datasets/catalog/NASA_GRACE_MASS_GRIDS_MASCON_CRI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/NASA/NASA_GRACE_MASS_GRIDS_MASCON_CRI_sample.png +NASA/GRACE/MASS_GRIDS/OCEAN,NASA Jet Propulsion Laboratory,GRACE Monthly Mass Grids - Ocean,31-07-02,10-12-16,2002,2016,image_collection,"crs, gfz, grace, gravity, jpl, mass, nasa, ocean, tellus, water",https://developers.google.com/earth-engine/datasets/catalog/NASA_GRACE_MASS_GRIDS_OCEAN#terms-of-use,https://developers.google.com/earth-engine/datasets/images/NASA/NASA_GRACE_MASS_GRIDS_OCEAN_sample.png +NASA/GRACE/MASS_GRIDS/OCEAN_EOFR,NASA Jet Propulsion Laboratory,GRACE Monthly Mass Grids - Ocean EOFR,31-12-02,10-12-16,2002,2016,image_collection,"crs, gfz, grace, gravity, jpl, mass, nasa, ocean, tellus, water",https://developers.google.com/earth-engine/datasets/catalog/NASA_GRACE_MASS_GRIDS_OCEAN_EOFR#terms-of-use,https://developers.google.com/earth-engine/datasets/images/NASA/NASA_GRACE_MASS_GRIDS_OCEAN_EOFR_sample.png +NASA/GSFC/MERRA/aer/2,NASA/MERRA,MERRA-2 M2T1NXAER: Aerosol Diagnostics V5.12.4,01-01-80,01-03-23,1980,2023,image_collection,"aer, aerosol, carbon, dust, mass, merra, nasa, sea_salt, so2, so4",https://developers.google.com/earth-engine/datasets/catalog/NASA_GSFC_MERRA_aer_2#terms-of-use,https://developers.google.com/earth-engine/datasets/images/NASA/NASA_GSFC_MERRA_aer_2_sample.png +NASA/GSFC/MERRA/flx/2,NASA/MERRA,MERRA-2 M2T1NXFLX: Surface Flux Diagnostics V5.12.4,01-01-80,01-03-23,1980,2023,image_collection,"merra, sea_salt, so2, so4, soil_moisture",https://developers.google.com/earth-engine/datasets/catalog/NASA_GSFC_MERRA_flx_2#terms-of-use,https://developers.google.com/earth-engine/datasets/images/NASA/NASA_GSFC_MERRA_flx_2_sample.png +NASA/GSFC/MERRA/lnd/2,NASA/MERRA,MERRA-2 M2T1NXLND: Land Surface Diagnostics V5.12.4,01-01-80,01-03-23,1980,2023,image_collection,"evaporation, ice, merra, temperature",https://developers.google.com/earth-engine/datasets/catalog/NASA_GSFC_MERRA_lnd_2#terms-of-use,https://developers.google.com/earth-engine/datasets/images/NASA/NASA_GSFC_MERRA_lnd_2_sample.png +NASA/GSFC/MERRA/rad/2,NASA/MERRA,MERRA-2 M2T1NXRAD: Radiation Diagnostics V5.12.4,01-01-80,01-03-23,1980,2023,image_collection,"albedo, emissivity, merra, shortwave, temperature",https://developers.google.com/earth-engine/datasets/catalog/NASA_GSFC_MERRA_rad_2#terms-of-use,https://developers.google.com/earth-engine/datasets/images/NASA/NASA_GSFC_MERRA_rad_2_sample.png +NASA/GSFC/MERRA/slv/2,NASA/MERRA,MERRA-2 M2T1NXSLV: Single-Level Diagnostics V5.12.4,01-01-80,01-03-23,1980,2023,image_collection,"condensation, humidity, merra, nasa, omega, pressure, slv, temperature, vapor, water, wind",https://developers.google.com/earth-engine/datasets/catalog/NASA_GSFC_MERRA_slv_2#terms-of-use,https://developers.google.com/earth-engine/datasets/images/NASA/NASA_GSFC_MERRA_slv_2_sample.png +NASA/JPL/global_forest_canopy_height_2005,NASA/JPL,"Global Forest Canopy Height, 2005",20-05-05,23-06-05,2005,2005,image,"canopy, forest, geophysical, glas, jpl, nasa",https://developers.google.com/earth-engine/datasets/catalog/NASA_JPL_global_forest_canopy_height_2005#terms-of-use,https://developers.google.com/earth-engine/datasets/images/NASA/NASA_JPL_global_forest_canopy_height_2005_sample.png +NASA/MEASURES/GFCC/TC/v3,NASA LP DAAC at the USGS EROS Center,Global Forest Cover Change (GFCC) Tree Cover Multi-Year Global 30m,01-01-00,01-01-15,2000,2015,image_collection,"forest, glcf, landsat_derived, nasa, umd",https://developers.google.com/earth-engine/datasets/catalog/NASA_MEASURES_GFCC_TC_v3#terms-of-use,https://developers.google.com/earth-engine/datasets/images/NASA/NASA_MEASURES_GFCC_TC_v3_sample.png +NASA/NASADEM_HGT/001,NASA / USGS / JPL-Caltech,NASADEM: NASA NASADEM Digital Elevation 30m,11-02-00,22-02-00,2000,2000,image,"dem, elevation, geophysical, nasa, nasadem, srtm, topography, usgs",https://developers.google.com/earth-engine/datasets/catalog/NASA_NASADEM_HGT_001#terms-of-use,https://developers.google.com/earth-engine/datasets/images/NASA/NASA_NASADEM_HGT_001_sample.png +NASA/NEX-DCP30,NASA / CSU,NEX-DCP30: NASA Earth Exchange Downscaled Climate Projections,01-01-50,01-12-99,1950,2099,image_collection,"climate, cmip5, csu, geophysical, nasa, nex, precipitation, temperature",https://developers.google.com/earth-engine/datasets/catalog/NASA_NEX-DCP30#terms-of-use,https://developers.google.com/earth-engine/datasets/images/NASA/NASA_NEX-DCP30_sample.png +NASA/NEX-DCP30_ENSEMBLE_STATS,NASA / CSU,NEX-DCP30: Ensemble Stats for NASA Earth Exchange Downscaled Climate Projections,01-01-50,01-12-99,1950,2099,image_collection,"climate, cmip5, csu, geophysical, nasa, nex, precipitation, temperature",https://developers.google.com/earth-engine/datasets/catalog/NASA_NEX-DCP30_ENSEMBLE_STATS#terms-of-use,https://developers.google.com/earth-engine/datasets/images/NASA/NASA_NEX-DCP30_ENSEMBLE_STATS_sample.png +NASA/NEX-GDDP,NASA / CSU,NEX-GDDP: NASA Earth Exchange Global Daily Downscaled Climate Projections,01-01-50,31-12-00,1950,2100,image_collection,"climate, cmip5, csu, gddp, geophysical, nasa, nex, precipitation, temperature",https://developers.google.com/earth-engine/datasets/catalog/NASA_NEX-GDDP#terms-of-use,https://developers.google.com/earth-engine/datasets/images/NASA/NASA_NEX-GDDP_sample.png +NASA/NLDAS/FORA0125_H002,NASA GES DISC at NASA Goddard Space Flight Center,NLDAS-2: North American Land Data Assimilation System Forcing Fields,01-01-79,22-03-23,1979,2023,image_collection,"climate, evaporation, forcing, geophysical, hourly, humidity, ldas, nasa, nldas, precipitation, pressure, radiation, temperature, wind",https://developers.google.com/earth-engine/datasets/catalog/NASA_NLDAS_FORA0125_H002#terms-of-use,https://developers.google.com/earth-engine/datasets/images/NASA/NASA_NLDAS_FORA0125_H002_sample.png +NASA/OCEANDATA/MODIS-Aqua/L3SMI,NASA OB.DAAC at NASA Goddard Space Flight Center,Ocean Color SMI: Standard Mapped Image MODIS Aqua Data,03-07-02,28-02-22,2002,2022,image_collection,"biology, chlorophyll, climate, modis, nasa, ocean, oceandata, reflectance, sst, temperature, weather",https://developers.google.com/earth-engine/datasets/catalog/NASA_OCEANDATA_MODIS-Aqua_L3SMI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/NASA/NASA_OCEANDATA_MODIS-Aqua_L3SMI_sample.png +NASA/OCEANDATA/MODIS-Terra/L3SMI,NASA OB.DAAC at NASA Goddard Space Flight Center,Ocean Color SMI: Standard Mapped Image MODIS Terra Data,24-02-00,28-02-22,2000,2022,image_collection,"biology, chlorophyll, climate, modis, nasa, ocean, oceandata, reflectance, sst, temperature, weather",https://developers.google.com/earth-engine/datasets/catalog/NASA_OCEANDATA_MODIS-Terra_L3SMI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/NASA/NASA_OCEANDATA_MODIS-Terra_L3SMI_sample.png +NASA/OCEANDATA/SeaWiFS/L3SMI,NASA OB.DAAC at NASA Goddard Space Flight Center,Ocean Color SMI: Standard Mapped Image SeaWiFS Data,04-09-97,10-12-10,1997,2010,image_collection,"biology, chlorophyll, climate, nasa, ocean, oceandata, reflectance, seawifs, temperature, weather",https://developers.google.com/earth-engine/datasets/catalog/NASA_OCEANDATA_SeaWiFS_L3SMI#terms-of-use,https://developers.google.com/earth-engine/datasets/images/NASA/NASA_OCEANDATA_SeaWiFS_L3SMI_sample.png +NASA/ORNL/DAYMET_V3,NASA ORNL DAAC at Oak Ridge National Laboratory,Daymet V3: Daily Surface Weather and Climatological Summaries [deprecated],01-01-80,31-12-19,1980,2019,image_collection,"climate, daily, daylight, daymet, flux, geophysical, nasa, ornl, precipitation, radiation, snow, temperature, vapor, water, weather",https://developers.google.com/earth-engine/datasets/catalog/NASA_ORNL_DAYMET_V3#terms-of-use,https://developers.google.com/earth-engine/datasets/images/NASA/NASA_ORNL_DAYMET_V3_sample.png +NASA/ORNL/DAYMET_V4,NASA ORNL DAAC at Oak Ridge National Laboratory,Daymet V4: Daily Surface Weather and Climatological Summaries,01-01-80,31-12-21,1980,2021,image_collection,"climate, daily, daylight, daymet, flux, geophysical, nasa, ornl, precipitation, radiation, snow, temperature, vapor, water, weather",https://developers.google.com/earth-engine/datasets/catalog/NASA_ORNL_DAYMET_V4#terms-of-use,https://developers.google.com/earth-engine/datasets/images/NASA/NASA_ORNL_DAYMET_V4_sample.png +NASA/ORNL/biomass_carbon_density/v1,NASA ORNL DAAC at Oak Ridge National Laboratory,Global Aboveground and Belowground Biomass Carbon Density Maps,01-01-10,31-12-10,2010,2010,image_collection,"aboveground, belowground, biomass, carbon, density, forest, nasa, ornl, vegetation",https://developers.google.com/earth-engine/datasets/catalog/NASA_ORNL_biomass_carbon_density_v1#terms-of-use,https://developers.google.com/earth-engine/datasets/images/NASA/NASA_ORNL_biomass_carbon_density_v1_sample.png +NASA/SMAP/SPL3SMP_E/005,Google and NSIDC,SPL3SMP_E.005 SMAP L3 Radiometer Global Daily 9 km Soil Moisture,31-03-15,23-03-23,2015,2023,image_collection,"drought, nasa, smap, soil_moisture, surface, weather",https://developers.google.com/earth-engine/datasets/catalog/NASA_SMAP_SPL3SMP_E_005#terms-of-use,https://developers.google.com/earth-engine/datasets/images/NASA/NASA_SMAP_SPL3SMP_E_005_sample.png +NASA/SMAP/SPL4SMGP/007,Google and NSIDC,SPL4SMGP.007 SMAP L4 Global 3-hourly 9-km Surface and Root Zone Soil Moisture,31-03-15,24-03-23,2015,2023,image_collection,"drought, nasa, smap, soil_moisture, surface, weather",https://developers.google.com/earth-engine/datasets/catalog/NASA_SMAP_SPL4SMGP_007#terms-of-use,https://developers.google.com/earth-engine/datasets/images/NASA/NASA_SMAP_SPL4SMGP_007_sample.png +NASA_USDA/HSL/SMAP10KM_soil_moisture,NASA GSFC,NASA-USDA Enhanced SMAP Global Soil Moisture Data,02-04-15,02-08-22,2015,2022,image_collection,"geophysical, hsl, nasa, smap, soil, soil_moisture, usda",https://developers.google.com/earth-engine/datasets/catalog/NASA_USDA_HSL_SMAP10KM_soil_moisture#terms-of-use,https://developers.google.com/earth-engine/datasets/images/NASA_USDA/NASA_USDA_HSL_SMAP10KM_soil_moisture_sample.png +NASA_USDA/HSL/SMAP_soil_moisture,NASA GSFC,NASA-USDA SMAP Global Soil Moisture Data [deprecated],02-04-15,31-12-20,2015,2020,image_collection,"geophysical, hsl, nasa, smap, soil, soil_moisture, usda",https://developers.google.com/earth-engine/datasets/catalog/NASA_USDA_HSL_SMAP_soil_moisture#terms-of-use,https://developers.google.com/earth-engine/datasets/images/NASA_USDA/NASA_USDA_HSL_SMAP_soil_moisture_sample.png +NASA_USDA/HSL/soil_moisture,NASA GSFC,NASA-USDA Global Soil Moisture Data [deprecated],13-01-10,31-12-20,2010,2020,image_collection,"geophysical, hsl, nasa, smos, soil, soil_moisture, usda",https://developers.google.com/earth-engine/datasets/catalog/NASA_USDA_HSL_soil_moisture#terms-of-use,https://developers.google.com/earth-engine/datasets/images/NASA_USDA/NASA_USDA_HSL_soil_moisture_sample.png +NCEP_RE/sea_level_pressure,NCEP,"NCEP/NCAR Reanalysis Data, Sea-Level Pressure",01-01-48,23-03-23,1948,2023,image_collection,"atmosphere, climate, geophysical, ncep, noaa, pressure, reanalysis",https://developers.google.com/earth-engine/datasets/catalog/NCEP_RE_sea_level_pressure#terms-of-use,https://developers.google.com/earth-engine/datasets/images/NCEP_RE/NCEP_RE_sea_level_pressure_sample.png +NCEP_RE/surface_temp,NCEP,"NCEP/NCAR Reanalysis Data, Surface Temperature",01-01-48,23-03-23,1948,2023,image_collection,"atmosphere, climate, geophysical, ncep, noaa, reanalysis, temperature",https://developers.google.com/earth-engine/datasets/catalog/NCEP_RE_surface_temp#terms-of-use,https://developers.google.com/earth-engine/datasets/images/NCEP_RE/NCEP_RE_surface_temp_sample.png +NCEP_RE/surface_wv,NCEP,"NCEP/NCAR Reanalysis Data, Water Vapor",01-01-48,23-03-23,1948,2023,image_collection,"atmosphere, climate, geophysical, ncep, noaa, precipitable, reanalysis, vapor",https://developers.google.com/earth-engine/datasets/catalog/NCEP_RE_surface_wv#terms-of-use,https://developers.google.com/earth-engine/datasets/images/NCEP_RE/NCEP_RE_surface_wv_sample.png +NOAA/CDR/ATMOS_NEAR_SURFACE/V2,NOAA,"NOAA CDR: Ocean Near-Surface Atmospheric Properties, Version 2",01-01-88,31-08-21,1988,2021,image_collection,"air_temperature, atmospheric, cdr, hourly, humidity, noaa, ocean, osb, wind",https://developers.google.com/earth-engine/datasets/catalog/NOAA_CDR_ATMOS_NEAR_SURFACE_V2#terms-of-use,https://developers.google.com/earth-engine/datasets/images/NOAA/NOAA_CDR_ATMOS_NEAR_SURFACE_V2_sample.png +NOAA/CDR/AVHRR/AOT/V3,NOAA,"NOAA CDR AVHRR AOT: Daily Aerosol Optical Thickness Over Global Oceans, v03",01-01-81,31-03-22,1981,2022,image_collection,"aerosol, aot, atmospheric, avhrr, cdr, daily, noaa, optical, pollution",https://developers.google.com/earth-engine/datasets/catalog/NOAA_CDR_AVHRR_AOT_V3#terms-of-use,https://developers.google.com/earth-engine/datasets/images/NOAA/NOAA_CDR_AVHRR_AOT_V3_sample.png +NOAA/CDR/AVHRR/LAI_FAPAR/V4,NOAA,"NOAA CDR AVHRR LAI FAPAR: Leaf Area Index and Fraction of Absorbed Photosynthetically Active Radiation, Version 4 [deprecated]",24-06-81,16-05-19,1981,2019,image_collection,"avhrr, cdr, daily, fapar, lai, land, noaa",https://developers.google.com/earth-engine/datasets/catalog/NOAA_CDR_AVHRR_LAI_FAPAR_V4#terms-of-use,https://developers.google.com/earth-engine/datasets/images/NOAA/NOAA_CDR_AVHRR_LAI_FAPAR_V4_sample.png +NOAA/CDR/AVHRR/LAI_FAPAR/V5,NOAA,"NOAA CDR AVHRR LAI FAPAR: Leaf Area Index and Fraction of Absorbed Photosynthetically Active Radiation, Version 5",24-06-81,31-12-13,1981,2013,image_collection,"avhrr, cdr, daily, fapar, lai, land, noaa",https://developers.google.com/earth-engine/datasets/catalog/NOAA_CDR_AVHRR_LAI_FAPAR_V5#terms-of-use,https://developers.google.com/earth-engine/datasets/images/NOAA/NOAA_CDR_AVHRR_LAI_FAPAR_V5_sample.png +NOAA/CDR/AVHRR/NDVI/V4,NOAA,"NOAA CDR AVHRR NDVI: Normalized Difference Vegetation Index, Version 4 [deprecated]",24-06-81,16-05-19,1981,2019,image_collection,"avhrr, cdr, daily, land, ndvi, noaa",https://developers.google.com/earth-engine/datasets/catalog/NOAA_CDR_AVHRR_NDVI_V4#terms-of-use,https://developers.google.com/earth-engine/datasets/images/NOAA/NOAA_CDR_AVHRR_NDVI_V4_sample.png +NOAA/CDR/AVHRR/NDVI/V5,NOAA,"NOAA CDR AVHRR NDVI: Normalized Difference Vegetation Index, Version 5",24-06-81,31-12-13,1981,2013,image_collection,"avhrr, cdr, daily, land, ndvi, noaa",https://developers.google.com/earth-engine/datasets/catalog/NOAA_CDR_AVHRR_NDVI_V5#terms-of-use,https://developers.google.com/earth-engine/datasets/images/NOAA/NOAA_CDR_AVHRR_NDVI_V5_sample.png +NOAA/CDR/AVHRR/SR/V4,NOAA,"NOAA CDR AVHRR: Surface Reflectance, Version 4 [deprecated]",24-06-81,16-05-19,1981,2019,image_collection,"avhrr, cdr, daily, land, noaa, reflectance, sr",https://developers.google.com/earth-engine/datasets/catalog/NOAA_CDR_AVHRR_SR_V4#terms-of-use,https://developers.google.com/earth-engine/datasets/images/NOAA/NOAA_CDR_AVHRR_SR_V4_sample.png +NOAA/CDR/AVHRR/SR/V5,NOAA,"NOAA CDR AVHRR: Surface Reflectance, Version 5",24-06-81,31-12-13,1981,2013,image_collection,"avhrr, cdr, daily, land, noaa, reflectance, sr",https://developers.google.com/earth-engine/datasets/catalog/NOAA_CDR_AVHRR_SR_V5#terms-of-use,https://developers.google.com/earth-engine/datasets/images/NOAA/NOAA_CDR_AVHRR_SR_V5_sample.png +NOAA/CDR/GRIDSAT-B1/V2,NOAA,NOAA CDR GRIDSAT-B1: Geostationary IR Channel Brightness Temperature,01-01-80,30-09-22,1980,2022,image_collection,"brightness, cdr, fundamental, geostationary, infrared, isccp, noaa, reflectance, sr",https://developers.google.com/earth-engine/datasets/catalog/NOAA_CDR_GRIDSAT-B1_V2#terms-of-use,https://developers.google.com/earth-engine/datasets/images/NOAA/NOAA_CDR_GRIDSAT-B1_V2_sample.png +NOAA/CDR/HEAT_FLUXES/V2,NOAA,"NOAA CDR: Ocean Heat Fluxes, Version 2",01-01-88,31-08-21,1988,2021,image_collection,"atmospheric, cdr, flux, heat, hourly, noaa, ocean, osb",https://developers.google.com/earth-engine/datasets/catalog/NOAA_CDR_HEAT_FLUXES_V2#terms-of-use,https://developers.google.com/earth-engine/datasets/images/NOAA/NOAA_CDR_HEAT_FLUXES_V2_sample.png +NOAA/CDR/OISST/V2,NOAA,NOAA CDR OISST v2: Optimum Interpolation Sea Surface Temperature [deprecated],01-09-81,26-04-20,1981,2020,image_collection,"avhrr, cdr, daily, ice, noaa, ocean, oisst, real_time, sst, temperature",https://developers.google.com/earth-engine/datasets/catalog/NOAA_CDR_OISST_V2#terms-of-use,https://developers.google.com/earth-engine/datasets/images/NOAA/NOAA_CDR_OISST_V2_sample.png +NOAA/CDR/OISST/V2_1,NOAA,NOAA CDR OISST v02r01: Optimum Interpolation Sea Surface Temperature,01-09-81,23-03-23,1981,2023,image_collection,"avhrr, cdr, daily, ice, noaa, ocean, oisst, real_time, sst, temperature",https://developers.google.com/earth-engine/datasets/catalog/NOAA_CDR_OISST_V2_1#terms-of-use,https://developers.google.com/earth-engine/datasets/images/NOAA/NOAA_CDR_OISST_V2_1_sample.png +NOAA/CDR/PATMOSX/V53,NOAA,"NOAA CDR PATMOSX: Cloud Properties, Reflectance, and Brightness Temperatures, Version 5.3",01-01-79,01-01-22,1979,2022,image_collection,"atmospheric, avhrr, brightness, cdr, cloud, metop, noaa, optical, poes, reflectance, temperature",https://developers.google.com/earth-engine/datasets/catalog/NOAA_CDR_PATMOSX_V53#terms-of-use,https://developers.google.com/earth-engine/datasets/images/NOAA/NOAA_CDR_PATMOSX_V53_sample.png +NOAA/CDR/SST_PATHFINDER/V53,NOAA,NOAA AVHRR Pathfinder Version 5.3 Collated Global 4km Sea Surface Temperature,24-08-81,30-12-22,1981,2022,image_collection,"avhrr, noaa, pathfinder, sea_ice, sst, temperature, wind",https://developers.google.com/earth-engine/datasets/catalog/NOAA_CDR_SST_PATHFINDER_V53#terms-of-use,https://developers.google.com/earth-engine/datasets/images/NOAA/NOAA_CDR_SST_PATHFINDER_V53_sample.png +NOAA/CDR/SST_WHOI/V2,NOAA,"NOAA CDR WHOI: Sea Surface Temperature, Version 2",01-01-88,31-08-21,1988,2021,image_collection,"atmospheric, cdr, hourly, noaa, ocean, oisst, osb, sst, whoi",https://developers.google.com/earth-engine/datasets/catalog/NOAA_CDR_SST_WHOI_V2#terms-of-use,https://developers.google.com/earth-engine/datasets/images/NOAA/NOAA_CDR_SST_WHOI_V2_sample.png +NOAA/CFSR,NOAA NWS National Centers for Environmental Prediction (NCEP),CFSR: Climate Forecast System Reanalysis,13-12-18,25-03-23,2018,2023,image_collection,"climate, daylight, flux, forecast, geophysical, ncep, noaa, nws, precipitation, radiation, snow, temperature, vapor, water, weather",https://developers.google.com/earth-engine/datasets/catalog/NOAA_CFSR#terms-of-use,https://developers.google.com/earth-engine/datasets/images/NOAA/NOAA_CFSR_sample.png +NOAA/CFSV2/FOR6H,NOAA NWS National Centers for Environmental Prediction (NCEP),"CFSV2: NCEP Climate Forecast System Version 2, 6-Hourly Products",01-01-79,25-03-23,1979,2023,image_collection,"climate, daylight, flux, forecast, geophysical, ncep, noaa, nws, precipitation, radiation, snow, temperature, vapor, water, weather",https://developers.google.com/earth-engine/datasets/catalog/NOAA_CFSV2_FOR6H#terms-of-use,https://developers.google.com/earth-engine/datasets/images/NOAA/NOAA_CFSV2_FOR6H_sample.png +NOAA/DMSP-OLS/CALIBRATED_LIGHTS_V4,"Earth Observation Group, Payne Institute for Public Policy, Colorado School of Mines","DMSP OLS: Global Radiance-Calibrated Nighttime Lights Version 4, Defense Meteorological Program Operational Linescan System",16-03-96,31-07-11,1996,2011,image_collection,"calibrated, dmsp, eog, imagery, lights, nighttime, ols, radiance, visible, yearly",https://developers.google.com/earth-engine/datasets/catalog/NOAA_DMSP-OLS_CALIBRATED_LIGHTS_V4#terms-of-use,https://developers.google.com/earth-engine/datasets/images/NOAA/NOAA_DMSP-OLS_CALIBRATED_LIGHTS_V4_sample.png +NOAA/DMSP-OLS/NIGHTTIME_LIGHTS,"Earth Observation Group, Payne Institute for Public Policy, Colorado School of Mines","DMSP OLS: Nighttime Lights Time Series Version 4, Defense Meteorological Program Operational Linescan System",01-01-92,01-01-14,1992,2014,image_collection,"dmsp, eog, imagery, lights, nighttime, ols, visible, yearly",https://developers.google.com/earth-engine/datasets/catalog/NOAA_DMSP-OLS_NIGHTTIME_LIGHTS#terms-of-use,https://developers.google.com/earth-engine/datasets/images/NOAA/NOAA_DMSP-OLS_NIGHTTIME_LIGHTS_sample.png +NOAA/GFS0P25,NOAA/NCEP/EMC,GFS: Global Forecast System 384-Hour Predicted Atmosphere Data,01-07-15,26-03-23,2015,2023,image_collection,"climate, cloud, emc, flux, forecast, geophysical, gfs, humidity, ncep, noaa, precipitation, radiation, temperature, vapor, weather, wind",https://developers.google.com/earth-engine/datasets/catalog/NOAA_GFS0P25#terms-of-use,https://developers.google.com/earth-engine/datasets/images/NOAA/NOAA_GFS0P25_sample.png +NOAA/GOES/16/FDCC,NOAA,GOES-16 FDCC Series ABI Level 2 Fire/Hot Spot Characterization CONUS,24-05-17,26-03-23,2017,2023,image_collection,"abi, climate, fdc, fire, goes, goes_16, goes_east, goes_r, hotspot, nesdis, noaa, ospo, wildfire",https://developers.google.com/earth-engine/datasets/catalog/NOAA_GOES_16_FDCC#terms-of-use,https://developers.google.com/earth-engine/datasets/images/NOAA/NOAA_GOES_16_FDCC_sample.png +NOAA/GOES/16/FDCF,NOAA,GOES-16 FDCF Series ABI Level 2 Fire/Hot Spot Characterization Full Disk,24-05-17,26-03-23,2017,2023,image_collection,"abi, climate, fdc, fire, goes, goes_16, goes_east, goes_r, hotspot, nesdis, noaa, ospo, wildfire",https://developers.google.com/earth-engine/datasets/catalog/NOAA_GOES_16_FDCF#terms-of-use,https://developers.google.com/earth-engine/datasets/images/NOAA/NOAA_GOES_16_FDCF_sample.png +NOAA/GOES/16/MCMIPC,NOAA,GOES-16 MCMIPC Series ABI Level 2 Cloud and Moisture Imagery CONUS,10-07-17,26-03-23,2017,2023,image_collection,"abi, climate, goes, goes_16, goes_east, goes_r, mcmip, nesdis, noaa, ospo, weather",https://developers.google.com/earth-engine/datasets/catalog/NOAA_GOES_16_MCMIPC#terms-of-use,https://developers.google.com/earth-engine/datasets/images/NOAA/NOAA_GOES_16_MCMIPC_sample.png +NOAA/GOES/16/MCMIPF,NOAA,GOES-16 MCMIPF Series ABI Level 2 Cloud and Moisture Imagery Full Disk,10-07-17,26-03-23,2017,2023,image_collection,"abi, climate, goes, goes_16, goes_east, goes_r, mcmip, nesdis, noaa, ospo, weather",https://developers.google.com/earth-engine/datasets/catalog/NOAA_GOES_16_MCMIPF#terms-of-use,https://developers.google.com/earth-engine/datasets/images/NOAA/NOAA_GOES_16_MCMIPF_sample.png +NOAA/GOES/16/MCMIPM,NOAA,GOES-16 MCMIPM Series ABI Level 2 Cloud and Moisture Imagery Mesoscale,10-07-17,26-03-23,2017,2023,image_collection,"abi, climate, goes, goes_16, goes_east, goes_r, mcmip, nesdis, noaa, ospo, weather",https://developers.google.com/earth-engine/datasets/catalog/NOAA_GOES_16_MCMIPM#terms-of-use,https://developers.google.com/earth-engine/datasets/images/NOAA/NOAA_GOES_16_MCMIPM_sample.png +NOAA/GOES/17/FDCC,NOAA,GOES-17 FDCC Series ABI Level 2 Fire/Hot Spot Characterization CONUS,27-08-18,10-01-23,2018,2023,image_collection,"abi, climate, fdc, fire, goes, goes_17, goes_s, hotspot, nesdis, noaa, ospo, wildfire",https://developers.google.com/earth-engine/datasets/catalog/NOAA_GOES_17_FDCC#terms-of-use,https://developers.google.com/earth-engine/datasets/images/NOAA/NOAA_GOES_17_FDCC_sample.png +NOAA/GOES/17/FDCF,NOAA,GOES-17 FDCF Series ABI Level 2 Fire/Hot Spot Characterization Full Disk,27-08-18,10-01-23,2018,2023,image_collection,"abi, climate, fdc, fire, goes, goes_17, goes_s, hotspot, nesdis, noaa, ospo, wildfire",https://developers.google.com/earth-engine/datasets/catalog/NOAA_GOES_17_FDCF#terms-of-use,https://developers.google.com/earth-engine/datasets/images/NOAA/NOAA_GOES_17_FDCF_sample.png +NOAA/GOES/17/MCMIPC,NOAA,GOES-17 MCMIPC Series ABI Level 2 Cloud and Moisture Imagery CONUS,04-12-18,10-01-23,2018,2023,image_collection,"abi, climate, goes, goes_17, goes_s, mcmip, nesdis, noaa, ospo, weather",https://developers.google.com/earth-engine/datasets/catalog/NOAA_GOES_17_MCMIPC#terms-of-use,https://developers.google.com/earth-engine/datasets/images/NOAA/NOAA_GOES_17_MCMIPC_sample.png +NOAA/GOES/17/MCMIPF,NOAA,GOES-17 MCMIPF Series ABI Level 2 Cloud and Moisture Imagery Full Disk,04-12-18,10-01-23,2018,2023,image_collection,"abi, climate, goes, goes_17, goes_s, mcmip, nesdis, noaa, ospo, weather",https://developers.google.com/earth-engine/datasets/catalog/NOAA_GOES_17_MCMIPF#terms-of-use,https://developers.google.com/earth-engine/datasets/images/NOAA/NOAA_GOES_17_MCMIPF_sample.png +NOAA/GOES/17/MCMIPM,NOAA,GOES-17 MCMIPM Series ABI Level 2 Cloud and Moisture Imagery Full Disk,04-12-18,10-01-23,2018,2023,image_collection,"abi, climate, goes, goes_17, goes_s, mcmip, nesdis, noaa, ospo, weather",https://developers.google.com/earth-engine/datasets/catalog/NOAA_GOES_17_MCMIPM#terms-of-use,https://developers.google.com/earth-engine/datasets/images/NOAA/NOAA_GOES_17_MCMIPM_sample.png +NOAA/GOES/18/FDCC,NOAA,GOES-18 FDCC Series ABI Level 2 Fire/Hot Spot Characterization CONUS,13-10-22,26-03-23,2022,2023,image_collection,"abi, climate, fdc, fire, goes, goes_18, goes_t, goes_west, hotspot, nesdis, noaa, ospo, wildfire",https://developers.google.com/earth-engine/datasets/catalog/NOAA_GOES_18_FDCC#terms-of-use,https://developers.google.com/earth-engine/datasets/images/NOAA/NOAA_GOES_18_FDCC_sample.png +NOAA/GOES/18/FDCF,NOAA,GOES-18 FDCF Series ABI Level 2 Fire/Hot Spot Characterization Full Disk,13-10-22,26-03-23,2022,2023,image_collection,"abi, climate, fdc, fire, goes, goes_18, goes_t, goes_west, hotspot, nesdis, noaa, ospo, wildfire",https://developers.google.com/earth-engine/datasets/catalog/NOAA_GOES_18_FDCF#terms-of-use,https://developers.google.com/earth-engine/datasets/images/NOAA/NOAA_GOES_18_FDCF_sample.png +NOAA/GOES/18/MCMIPC,NOAA,GOES-18 MCMIPC Series ABI Level 2 Cloud and Moisture Imagery CONUS,04-12-18,26-03-23,2018,2023,image_collection,"abi, climate, goes, goes_18, goes_t, goes_west, mcmip, nesdis, noaa, ospo, weather",https://developers.google.com/earth-engine/datasets/catalog/NOAA_GOES_18_MCMIPC#terms-of-use,https://developers.google.com/earth-engine/datasets/images/NOAA/NOAA_GOES_18_MCMIPC_sample.png +NOAA/GOES/18/MCMIPF,NOAA,GOES-18 MCMIPF Series ABI Level 2 Cloud and Moisture Imagery Full Disk,04-12-18,26-03-23,2018,2023,image_collection,"abi, climate, goes, goes_18, goes_t, goes_west, mcmip, nesdis, noaa, ospo, weather",https://developers.google.com/earth-engine/datasets/catalog/NOAA_GOES_18_MCMIPF#terms-of-use,https://developers.google.com/earth-engine/datasets/images/NOAA/NOAA_GOES_18_MCMIPF_sample.png +NOAA/GOES/18/MCMIPM,NOAA,GOES-18 MCMIPM Series ABI Level 2 Cloud and Moisture Imagery Full Disk,04-12-18,26-03-23,2018,2023,image_collection,"abi, climate, goes, goes_18, goes_t, goes_west, mcmip, nesdis, noaa, ospo, weather",https://developers.google.com/earth-engine/datasets/catalog/NOAA_GOES_18_MCMIPM#terms-of-use,https://developers.google.com/earth-engine/datasets/images/NOAA/NOAA_GOES_18_MCMIPM_sample.png +NOAA/NCEP_DOE_RE2/total_cloud_coverage,NOAA,"NCEP-DOE Reanalysis 2 (Gaussian Grid), Total Cloud Coverage",01-01-79,28-02-23,1979,2023,image_collection,"atmosphere, climate, cloud, geophysical, ncep, noaa, reanalysis",https://developers.google.com/earth-engine/datasets/catalog/NOAA_NCEP_DOE_RE2_total_cloud_coverage#terms-of-use,https://developers.google.com/earth-engine/datasets/images/NOAA/NOAA_NCEP_DOE_RE2_total_cloud_coverage_sample.png +NOAA/NGDC/ETOPO1,NOAA,ETOPO1: Global 1 Arc-Minute Elevation,01-08-08,01-08-08,2008,2008,image,"bedrock, dem, elevation, geophysical, ice, noaa, topography",https://developers.google.com/earth-engine/datasets/catalog/NOAA_NGDC_ETOPO1#terms-of-use,https://developers.google.com/earth-engine/datasets/images/NOAA/NOAA_NGDC_ETOPO1_sample.png +NOAA/NHC/HURDAT2/atlantic,NOAA NHC,NOAA NHC HURDAT2 Atlantic Hurricane Catalog,1851-06-25,04-11-18,1851,2018,table,"hurricane, nhc, noaa, weather",https://developers.google.com/earth-engine/datasets/catalog/NOAA_NHC_HURDAT2_atlantic#terms-of-use,https://developers.google.com/earth-engine/datasets/images/NOAA/NOAA_NHC_HURDAT2_atlantic_sample.png +NOAA/NHC/HURDAT2/pacific,NOAA NHC,NOAA NHC HURDAT2 Pacific Hurricane Catalog,11-06-49,09-11-18,1949,2018,table,"hurricane, nhc, noaa, weather",https://developers.google.com/earth-engine/datasets/catalog/NOAA_NHC_HURDAT2_pacific#terms-of-use,https://developers.google.com/earth-engine/datasets/images/NOAA/NOAA_NHC_HURDAT2_pacific_sample.png +NOAA/NWS/RTMA,NOAA/NWS,RTMA: Real-Time Mesoscale Analysis,01-01-11,25-03-23,2011,2023,image_collection,"climate, cloud, geophysical, humidity, noaa, nws, precipitation, pressure, rtma, surface, temperature, visibility, weather, wind",https://developers.google.com/earth-engine/datasets/catalog/NOAA_NWS_RTMA#terms-of-use,https://developers.google.com/earth-engine/datasets/images/NOAA/NOAA_NWS_RTMA_sample.png +NOAA/PERSIANN-CDR,NOAA NCDC,PERSIANN-CDR: Precipitation Estimation From Remotely Sensed Information Using Artificial Neural Networks-Climate Data Record,01-01-83,30-09-22,1983,2022,image_collection,"cdr, climate, geophysical, ncdc, noaa, persiann, precipitation, weather",https://developers.google.com/earth-engine/datasets/catalog/NOAA_PERSIANN-CDR#terms-of-use,https://developers.google.com/earth-engine/datasets/images/NOAA/NOAA_PERSIANN-CDR_sample.png +NOAA/VIIRS/001/VNP09GA,NASA LP DAAC at the USGS EROS Center,VNP09GA: VIIRS Surface Reflectance Daily 500m and 1km,19-01-12,25-03-23,2012,2023,image_collection,"daily, nasa, noaa, npp, reflectance, sr, viirs, vnp09ga",https://developers.google.com/earth-engine/datasets/catalog/NOAA_VIIRS_001_VNP09GA#terms-of-use,https://developers.google.com/earth-engine/datasets/images/NOAA/NOAA_VIIRS_001_VNP09GA_sample.png +NOAA/VIIRS/001/VNP09H1,NASA LP DAAC at the USGS EROS Center,VNP09H1: VIIRS Surface Reflectance 8-Day L3 Global 500m,19-01-12,14-03-23,2012,2023,image_collection,"daily, nasa, noaa, npp, reflectance, sr, viirs",https://developers.google.com/earth-engine/datasets/catalog/NOAA_VIIRS_001_VNP09H1#terms-of-use,https://developers.google.com/earth-engine/datasets/images/NOAA/NOAA_VIIRS_001_VNP09H1_sample.png +NOAA/VIIRS/001/VNP13A1,NASA LP DAAC at the USGS EROS Center,VNP13A1: VIIRS Vegetation Indices 16-Day 500m,17-01-12,06-03-23,2012,2023,image_collection,"16_day, evi, nasa, ndvi, noaa, npp, vegetation, viirs, vnp13a1",https://developers.google.com/earth-engine/datasets/catalog/NOAA_VIIRS_001_VNP13A1#terms-of-use,https://developers.google.com/earth-engine/datasets/images/NOAA/NOAA_VIIRS_001_VNP13A1_sample.png +NOAA/VIIRS/001/VNP14A1,NASA LP DAAC at the USGS EROS Center,VNP14A1: Thermal Anomalies/Fire Daily L3 Global 1km SIN Grid,19-01-12,25-03-23,2012,2023,image_collection,"fire, land, nasa, noaa, surface, viirs",https://developers.google.com/earth-engine/datasets/catalog/NOAA_VIIRS_001_VNP14A1#terms-of-use,https://developers.google.com/earth-engine/datasets/images/NOAA/NOAA_VIIRS_001_VNP14A1_sample.png +NOAA/VIIRS/001/VNP15A2H,NASA LP DAAC at the USGS EROS Center,VNP15A2H: LAI/FPAR 8-Day L4 Global 500m SIN Grid,17-01-12,14-03-23,2012,2023,image_collection,"land, nasa, noaa, surface, viirs",https://developers.google.com/earth-engine/datasets/catalog/NOAA_VIIRS_001_VNP15A2H#terms-of-use,https://developers.google.com/earth-engine/datasets/images/NOAA/NOAA_VIIRS_001_VNP15A2H_sample.png +NOAA/VIIRS/001/VNP21A1D,NASA LP DAAC at the USGS EROS Center,VNP21A1D: Day Land Surface Temperature and Emissivity Daily 1km,19-01-12,01-02-23,2012,2023,image_collection,"daily, day, land, nasa, noaa, surface, temperature, viirs",https://developers.google.com/earth-engine/datasets/catalog/NOAA_VIIRS_001_VNP21A1D#terms-of-use,https://developers.google.com/earth-engine/datasets/images/NOAA/NOAA_VIIRS_001_VNP21A1D_sample.png +NOAA/VIIRS/001/VNP21A1N,NASA LP DAAC at the USGS EROS Center,VNP21A1N: Night Land Surface Temperature and Emissivity Daily 1km,19-01-12,01-02-23,2012,2023,image_collection,"daily, land, nasa, night, noaa, surface, temperature, viirs",https://developers.google.com/earth-engine/datasets/catalog/NOAA_VIIRS_001_VNP21A1N#terms-of-use,https://developers.google.com/earth-engine/datasets/images/NOAA/NOAA_VIIRS_001_VNP21A1N_sample.png +NOAA/VIIRS/001/VNP22Q2,NASA LP DAAC at the USGS EROS Center,VNP22Q2: Land Surface Phenology Yearly L3 Global 500m SIN Grid,01-01-13,01-01-21,2013,2021,image_collection,"land, nasa, ndvi, noaa, npp, onset_greenness, phenology, surface, vegetation, viirs",https://developers.google.com/earth-engine/datasets/catalog/NOAA_VIIRS_001_VNP22Q2#terms-of-use,https://developers.google.com/earth-engine/datasets/images/NOAA/NOAA_VIIRS_001_VNP22Q2_sample.png +NOAA/VIIRS/001/VNP46A2,NASA LP DAAC at the USGS EROS Center,VNP46A2: VIIRS Lunar Gap-Filled BRDF Nighttime Lights Daily L3 Global 500m,19-01-12,05-02-23,2012,2023,image_collection,"brdf, daily, nasa, noaa, viirs",https://developers.google.com/earth-engine/datasets/catalog/NOAA_VIIRS_001_VNP46A2#terms-of-use,https://developers.google.com/earth-engine/datasets/images/NOAA/NOAA_VIIRS_001_VNP46A2_sample.png +NOAA/VIIRS/001/VNP64A1,NASA LP DAAC at the USGS EROS Center,VNP64A1: Burned Area Monthly L4 Global 500m SIN Grid,01-01-14,01-01-19,2014,2019,image_collection,"burn, land, nasa, noaa, surface, viirs",https://developers.google.com/earth-engine/datasets/catalog/NOAA_VIIRS_001_VNP64A1#terms-of-use,https://developers.google.com/earth-engine/datasets/images/NOAA/NOAA_VIIRS_001_VNP64A1_sample.png +NOAA/VIIRS/DNB/MONTHLY_V1/VCMCFG,"Earth Observation Group, Payne Institute for Public Policy, Colorado School of Mines",VIIRS Nighttime Day/Night Band Composites Version 1,01-04-12,01-11-22,2012,2022,image_collection,"dnb, eog, lights, monthly, nighttime, noaa, viirs, visible",https://developers.google.com/earth-engine/datasets/catalog/NOAA_VIIRS_DNB_MONTHLY_V1_VCMCFG#terms-of-use,https://developers.google.com/earth-engine/datasets/images/NOAA/NOAA_VIIRS_DNB_MONTHLY_V1_VCMCFG_sample.png +NOAA/VIIRS/DNB/MONTHLY_V1/VCMSLCFG,"Earth Observation Group, Payne Institute for Public Policy, Colorado School of Mines",VIIRS Stray Light Corrected Nighttime Day/Night Band Composites Version 1,01-01-14,01-11-22,2014,2022,image_collection,"dnb, eog, lights, monthly, nighttime, noaa, stray_light, viirs, visible",https://developers.google.com/earth-engine/datasets/catalog/NOAA_VIIRS_DNB_MONTHLY_V1_VCMSLCFG#terms-of-use,https://developers.google.com/earth-engine/datasets/images/NOAA/NOAA_VIIRS_DNB_MONTHLY_V1_VCMSLCFG_sample.png +NRCan/CDEM,NRCan,Canadian Digital Elevation Model,01-01-45,01-01-11,1945,2011,image_collection,"canada, cdem, dem, elevation, geophysical, nrcan, topography",https://developers.google.com/earth-engine/datasets/catalog/NRCan_CDEM#terms-of-use,https://developers.google.com/earth-engine/datasets/images/NRCan/NRCan_CDEM_sample.png +OREGONSTATE/PRISM/AN81d,PRISM / OREGONSTATE,PRISM Daily Spatial Climate Dataset AN81d,01-01-81,23-03-23,1981,2023,image_collection,"climate, daily, geophysical, oregonstate, precipitation, pressure, prism, temperature, vapor, weather",https://developers.google.com/earth-engine/datasets/catalog/OREGONSTATE_PRISM_AN81d#terms-of-use,https://developers.google.com/earth-engine/datasets/images/OREGONSTATE/OREGONSTATE_PRISM_AN81d_sample.png +OREGONSTATE/PRISM/AN81m,PRISM / OREGONSTATE,PRISM Monthly Spatial Climate Dataset AN81m,1895-01-01,01-02-23,1895,2023,image_collection,"climate, geophysical, monthly, oregonstate, precipitation, pressure, prism, temperature, vapor, weather",https://developers.google.com/earth-engine/datasets/catalog/OREGONSTATE_PRISM_AN81m#terms-of-use,https://developers.google.com/earth-engine/datasets/images/OREGONSTATE/OREGONSTATE_PRISM_AN81m_sample.png +OREGONSTATE/PRISM/Norm81m,PRISM / OREGONSTATE,PRISM Long-Term Average Climate Dataset Norm81m [deprecated],01-01-81,31-12-10,1981,2010,image_collection,"30_year, climate, geophysical, oregonstate, precipitation, pressure, prism, temperature, vapor, weather",https://developers.google.com/earth-engine/datasets/catalog/OREGONSTATE_PRISM_Norm81m#terms-of-use,https://developers.google.com/earth-engine/datasets/images/OREGONSTATE/OREGONSTATE_PRISM_Norm81m_sample.png +OREGONSTATE/PRISM/Norm91m,PRISM / OREGONSTATE,PRISM Long-Term Average Climate Dataset Norm91m,01-01-91,31-12-20,1991,2020,image_collection,"30_year, climate, geophysical, oregonstate, precipitation, pressure, prism, temperature, vapor, weather",https://developers.google.com/earth-engine/datasets/catalog/OREGONSTATE_PRISM_Norm91m#terms-of-use,https://developers.google.com/earth-engine/datasets/images/OREGONSTATE/OREGONSTATE_PRISM_Norm91m_sample.png +ORTHO/Switzerland/SWISSIMAGE/10cm,Topography swisstopo,SWISSIMAGE 10 cm RGB imagery,01-01-17,01-01-21,2017,2021,image_collection,"orthophoto, rgb, swissimage, swisstopo",https://developers.google.com/earth-engine/datasets/catalog/ORTHO_Switzerland_SWISSIMAGE_10cm#terms-of-use,https://developers.google.com/earth-engine/datasets/images/ORTHO/ORTHO_Switzerland_SWISSIMAGE_10cm_sample.png +OSU/GIMP/2000_ICE_OCEAN_MASK,NASA NSIDC DAAC at CIRES,Greenland Ice & Ocean Mask - Greenland Mapping Project (GIMP),30-06-99,04-09-02,1999,2002,image,"arctic, gimp, greenland, ice, mask, nasa, polar",https://developers.google.com/earth-engine/datasets/catalog/OSU_GIMP_2000_ICE_OCEAN_MASK#terms-of-use,https://developers.google.com/earth-engine/datasets/images/OSU/OSU_GIMP_2000_ICE_OCEAN_MASK_sample.png +OSU/GIMP/2000_IMAGERY_MOSAIC,NASA NSIDC DAAC at CIRES,2000 Greenland Mosaic - Greenland Ice Mapping Project (GIMP),30-06-99,04-09-02,1999,2002,image,"arctic, gimp, greenland, imagery, nasa, polar, radarsat_1",https://developers.google.com/earth-engine/datasets/catalog/OSU_GIMP_2000_IMAGERY_MOSAIC#terms-of-use,https://developers.google.com/earth-engine/datasets/images/OSU/OSU_GIMP_2000_IMAGERY_MOSAIC_sample.png +OSU/GIMP/DEM,NASA NSIDC DAAC at CIRES,Greenland DEM - Greenland Mapping Project (GIMP),30-06-99,04-09-02,1999,2002,image,"arctic, gimp, greenland, nasa, polar",https://developers.google.com/earth-engine/datasets/catalog/OSU_GIMP_DEM#terms-of-use,https://developers.google.com/earth-engine/datasets/images/OSU/OSU_GIMP_DEM_sample.png +OSU/GIMP/ICE_VELOCITY_OPT,NASA NSIDC DAAC at CIRES,MEaSUREs Greenland Ice Velocity: Selected Glacier Site Velocity Maps from Optical Images Version 2,01-03-85,30-09-16,1985,2016,image_collection,"arctic, gimp, greenland, ice, nasa, polar, velocity",https://developers.google.com/earth-engine/datasets/catalog/OSU_GIMP_ICE_VELOCITY_OPT#terms-of-use,https://developers.google.com/earth-engine/datasets/images/OSU/OSU_GIMP_ICE_VELOCITY_OPT_sample.png +OpenET/ENSEMBLE/CONUS/GRIDMET/MONTHLY/v2_0,"OpenET, Inc.",OpenET CONUS Ensemble Monthly Evapotranspiration v2.0,01-01-16,01-12-21,2016,2021,image_collection,"conus, evapotranspiration, gridmet_derived, landsat_derived, monthly, water",https://developers.google.com/earth-engine/datasets/catalog/OpenET_ENSEMBLE_CONUS_GRIDMET_MONTHLY_v2_0#terms-of-use,https://developers.google.com/earth-engine/datasets/images/OpenET/OpenET_ENSEMBLE_CONUS_GRIDMET_MONTHLY_v2_0_sample.png +OpenLandMap/CLM/CLM_LST_MOD11A2-DAYNIGHT_M/v01,EnvirometriX Ltd,OpenLandMap Long-term Land Surface Temperature Monthly Day-Night Difference,01-01-00,01-01-18,2000,2018,image,"day, envirometrix, lst, mod11a2, modis, monthly, night, opengeohub, openlandmap",https://developers.google.com/earth-engine/datasets/catalog/OpenLandMap_CLM_CLM_LST_MOD11A2-DAYNIGHT_M_v01#terms-of-use,https://developers.google.com/earth-engine/datasets/images/OpenLandMap/OpenLandMap_CLM_CLM_LST_MOD11A2-DAYNIGHT_M_v01_sample.png +OpenLandMap/CLM/CLM_LST_MOD11A2-DAY_M/v01,EnvirometriX Ltd,OpenLandMap Long-term Land Surface Temperature Daytime Monthly Median,01-01-00,01-01-18,2000,2018,image,"envirometrix, lst, mod11a2, modis, monthly, opengeohub, openlandmap",https://developers.google.com/earth-engine/datasets/catalog/OpenLandMap_CLM_CLM_LST_MOD11A2-DAY_M_v01#terms-of-use,https://developers.google.com/earth-engine/datasets/images/OpenLandMap/OpenLandMap_CLM_CLM_LST_MOD11A2-DAY_M_v01_sample.png +OpenLandMap/CLM/CLM_LST_MOD11A2-DAY_SD/v01,EnvirometriX Ltd,OpenLandMap Long-term Land Surface Temperature Daytime Monthly Standard Deviation,01-01-00,01-01-18,2000,2018,image,"envirometrix, lst, mod11a2, modis, monthly, opengeohub, openlandmap",https://developers.google.com/earth-engine/datasets/catalog/OpenLandMap_CLM_CLM_LST_MOD11A2-DAY_SD_v01#terms-of-use,https://developers.google.com/earth-engine/datasets/images/OpenLandMap/OpenLandMap_CLM_CLM_LST_MOD11A2-DAY_SD_v01_sample.png +OpenLandMap/CLM/CLM_PRECIPITATION_SM2RAIN_M/v01,EnvirometriX Ltd,OpenLandMap Precipitation Monthly,01-01-07,01-01-19,2007,2019,image,"envirometrix, imerg, monthly, opengeohub, openlandmap, precipitation",https://developers.google.com/earth-engine/datasets/catalog/OpenLandMap_CLM_CLM_PRECIPITATION_SM2RAIN_M_v01#terms-of-use,https://developers.google.com/earth-engine/datasets/images/OpenLandMap/OpenLandMap_CLM_CLM_PRECIPITATION_SM2RAIN_M_v01_sample.png +OpenLandMap/PNV/PNV_BIOME-TYPE_BIOME00K_C/v01,EnvirometriX Ltd,OpenLandMap Potential Distribution of Biomes,01-01-01,01-01-02,2001,2002,image,"biome, envirometrix, opengeohub, openlandmap, potential",https://developers.google.com/earth-engine/datasets/catalog/OpenLandMap_PNV_PNV_BIOME-TYPE_BIOME00K_C_v01#terms-of-use,https://developers.google.com/earth-engine/datasets/images/OpenLandMap/OpenLandMap_PNV_PNV_BIOME-TYPE_BIOME00K_C_v01_sample.png +OpenLandMap/PNV/PNV_FAPAR_PROBA-V_D/v01,EnvirometriX Ltd,OpenLandMap Potential FAPAR Monthly,01-01-01,01-01-02,2001,2002,image,"envirometrix, fapar, monthly, opengeohub, openlandmap, potential",https://developers.google.com/earth-engine/datasets/catalog/OpenLandMap_PNV_PNV_FAPAR_PROBA-V_D_v01#terms-of-use,https://developers.google.com/earth-engine/datasets/images/OpenLandMap/OpenLandMap_PNV_PNV_FAPAR_PROBA-V_D_v01_sample.png +OpenLandMap/SOL/SOL_BULKDENS-FINEEARTH_USDA-4A1H_M/v02,EnvirometriX Ltd,OpenLandMap Soil Bulk Density,01-01-50,01-01-18,1950,2018,image,"bulk, density, envirometrix, opengeohub, openlandmap, soil",https://developers.google.com/earth-engine/datasets/catalog/OpenLandMap_SOL_SOL_BULKDENS-FINEEARTH_USDA-4A1H_M_v02#terms-of-use,https://developers.google.com/earth-engine/datasets/images/OpenLandMap/OpenLandMap_SOL_SOL_BULKDENS-FINEEARTH_USDA-4A1H_M_v02_sample.png +OpenLandMap/SOL/SOL_CLAY-WFRACTION_USDA-3A1A1A_M/v02,EnvirometriX Ltd,OpenLandMap Clay Content,01-01-50,01-01-18,1950,2018,image,"clay, envirometrix, opengeohub, openlandmap, soil, usda",https://developers.google.com/earth-engine/datasets/catalog/OpenLandMap_SOL_SOL_CLAY-WFRACTION_USDA-3A1A1A_M_v02#terms-of-use,https://developers.google.com/earth-engine/datasets/images/OpenLandMap/OpenLandMap_SOL_SOL_CLAY-WFRACTION_USDA-3A1A1A_M_v02_sample.png +OpenLandMap/SOL/SOL_GRTGROUP_USDA-SOILTAX-HAPLUDALFS_P/v01,EnvirometriX Ltd,OpenLandMap Predicted Hapludalfs Probability,01-01-50,01-01-18,1950,2018,image,"argillic, envirometrix, hapludalfs, opengeohub, openlandmap",https://developers.google.com/earth-engine/datasets/catalog/OpenLandMap_SOL_SOL_GRTGROUP_USDA-SOILTAX-HAPLUDALFS_P_v01#terms-of-use,https://developers.google.com/earth-engine/datasets/images/OpenLandMap/OpenLandMap_SOL_SOL_GRTGROUP_USDA-SOILTAX-HAPLUDALFS_P_v01_sample.png +OpenLandMap/SOL/SOL_GRTGROUP_USDA-SOILTAX_C/v01,EnvirometriX Ltd,OpenLandMap USDA Soil Taxonomy Great Groups,01-01-50,01-01-18,1950,2018,image,"envirometrix, opengeohub, openlandmap, soil, taxonomy, usda",https://developers.google.com/earth-engine/datasets/catalog/OpenLandMap_SOL_SOL_GRTGROUP_USDA-SOILTAX_C_v01#terms-of-use,https://developers.google.com/earth-engine/datasets/images/OpenLandMap/OpenLandMap_SOL_SOL_GRTGROUP_USDA-SOILTAX_C_v01_sample.png +OpenLandMap/SOL/SOL_ORGANIC-CARBON_USDA-6A1C_M/v02,EnvirometriX Ltd,OpenLandMap Soil Organic Carbon Content,01-01-50,01-01-18,1950,2018,image,"carbon, envirometrix, opengeohub, openlandmap, organic, soil",https://developers.google.com/earth-engine/datasets/catalog/OpenLandMap_SOL_SOL_ORGANIC-CARBON_USDA-6A1C_M_v02#terms-of-use,https://developers.google.com/earth-engine/datasets/images/OpenLandMap/OpenLandMap_SOL_SOL_ORGANIC-CARBON_USDA-6A1C_M_v02_sample.png +OpenLandMap/SOL/SOL_PH-H2O_USDA-4C1A2A_M/v02,EnvirometriX Ltd,OpenLandMap Soil pH in H2O,01-01-50,01-01-18,1950,2018,image,"envirometrix, opengeohub, openlandmap, ph, soil",https://developers.google.com/earth-engine/datasets/catalog/OpenLandMap_SOL_SOL_PH-H2O_USDA-4C1A2A_M_v02#terms-of-use,https://developers.google.com/earth-engine/datasets/images/OpenLandMap/OpenLandMap_SOL_SOL_PH-H2O_USDA-4C1A2A_M_v02_sample.png +OpenLandMap/SOL/SOL_SAND-WFRACTION_USDA-3A1A1A_M/v02,EnvirometriX Ltd,OpenLandMap Sand Content,01-01-50,01-01-18,1950,2018,image,"envirometrix, opengeohub, openlandmap, sand, soil, usda",https://developers.google.com/earth-engine/datasets/catalog/OpenLandMap_SOL_SOL_SAND-WFRACTION_USDA-3A1A1A_M_v02#terms-of-use,https://developers.google.com/earth-engine/datasets/images/OpenLandMap/OpenLandMap_SOL_SOL_SAND-WFRACTION_USDA-3A1A1A_M_v02_sample.png +OpenLandMap/SOL/SOL_TEXTURE-CLASS_USDA-TT_M/v02,EnvirometriX Ltd,OpenLandMap Soil Texture Class (USDA System),01-01-50,01-01-18,1950,2018,image,"envirometrix, opengeohub, openlandmap, soil, texture, usda",https://developers.google.com/earth-engine/datasets/catalog/OpenLandMap_SOL_SOL_TEXTURE-CLASS_USDA-TT_M_v02#terms-of-use,https://developers.google.com/earth-engine/datasets/images/OpenLandMap/OpenLandMap_SOL_SOL_TEXTURE-CLASS_USDA-TT_M_v02_sample.png +OpenLandMap/SOL/SOL_WATERCONTENT-33KPA_USDA-4B1C_M/v01,EnvirometriX Ltd,OpenLandMap Soil Water Content at 33kPa (Field Capacity),01-01-50,01-01-18,1950,2018,image,"envirometrix, opengeohub, openlandmap, soil, watercontent",https://developers.google.com/earth-engine/datasets/catalog/OpenLandMap_SOL_SOL_WATERCONTENT-33KPA_USDA-4B1C_M_v01#terms-of-use,https://developers.google.com/earth-engine/datasets/images/OpenLandMap/OpenLandMap_SOL_SOL_WATERCONTENT-33KPA_USDA-4B1C_M_v01_sample.png +Oxford/MAP/EVI_5km_Monthly,Oxford Malaria Atlas Project,Oxford MAP EVI: Malaria Atlas Project Gap-Filled Enhanced Vegetation Index,01-02-01,01-06-15,2001,2015,image_collection,"evi, map, oxford, vegetation",https://developers.google.com/earth-engine/datasets/catalog/Oxford_MAP_EVI_5km_Monthly#terms-of-use,https://developers.google.com/earth-engine/datasets/images/Oxford/Oxford_MAP_EVI_5km_Monthly_sample.png +Oxford/MAP/IGBP_Fractional_Landcover_5km_Annual,Oxford Malaria Atlas Project,Oxford MAP: Malaria Atlas Project Fractional International Geosphere-Biosphere Programme Landcover,01-01-01,01-01-13,2001,2013,image_collection,"igbp, landcover, map, oxford",https://developers.google.com/earth-engine/datasets/catalog/Oxford_MAP_IGBP_Fractional_Landcover_5km_Annual#terms-of-use,https://developers.google.com/earth-engine/datasets/images/Oxford/Oxford_MAP_IGBP_Fractional_Landcover_5km_Annual_sample.png +Oxford/MAP/LST_Day_5km_Monthly,Oxford Malaria Atlas Project,Oxford MAP LST: Malaria Atlas Project Gap-Filled Daytime Land Surface Temperature,01-03-01,01-06-15,2001,2015,image_collection,"lst, map, oxford, surface_temperature",https://developers.google.com/earth-engine/datasets/catalog/Oxford_MAP_LST_Day_5km_Monthly#terms-of-use,https://developers.google.com/earth-engine/datasets/images/Oxford/Oxford_MAP_LST_Day_5km_Monthly_sample.png +Oxford/MAP/LST_Night_5km_Monthly,Oxford Malaria Atlas Project,Oxford MAP LST: Malaria Atlas Project Gap-Filled Nighttime Land Surface Temperature,01-03-01,01-06-15,2001,2015,image_collection,"lst, map, oxford, surface_temperature",https://developers.google.com/earth-engine/datasets/catalog/Oxford_MAP_LST_Night_5km_Monthly#terms-of-use,https://developers.google.com/earth-engine/datasets/images/Oxford/Oxford_MAP_LST_Night_5km_Monthly_sample.png +Oxford/MAP/TCB_5km_Monthly,Oxford Malaria Atlas Project,Oxford MAP TCB: Malaria Atlas Project Gap-Filled Tasseled Cap Brightness,01-02-01,01-01-15,2001,2015,image_collection,"brightness, map, oxford, tasseled_cap, tcb",https://developers.google.com/earth-engine/datasets/catalog/Oxford_MAP_TCB_5km_Monthly#terms-of-use,https://developers.google.com/earth-engine/datasets/images/Oxford/Oxford_MAP_TCB_5km_Monthly_sample.png +Oxford/MAP/TCW_5km_Monthly,Oxford Malaria Atlas Project,Oxford MAP TCW: Malaria Atlas Project Gap-Filled Tasseled Cap Wetness,01-02-01,01-01-15,2001,2015,image_collection,"map, oxford, tasseled_cap, tcb, wetness",https://developers.google.com/earth-engine/datasets/catalog/Oxford_MAP_TCW_5km_Monthly#terms-of-use,https://developers.google.com/earth-engine/datasets/images/Oxford/Oxford_MAP_TCW_5km_Monthly_sample.png +Oxford/MAP/accessibility_to_cities_2015_v1_0,Malaria Atlas Project,Accessibility to Cities 2015 [deprecated],01-01-15,01-01-16,2015,2016,image,"accessibility, jrc, map, oxford, twente",https://developers.google.com/earth-engine/datasets/catalog/Oxford_MAP_accessibility_to_cities_2015_v1_0#terms-of-use,https://developers.google.com/earth-engine/datasets/images/Oxford/Oxford_MAP_accessibility_to_cities_2015_v1_0_sample.png +Oxford/MAP/accessibility_to_healthcare_2019,Malaria Atlas Project,Accessibility to Healthcare 2019,01-01-19,01-01-20,2019,2020,image,"accessibility, jrc, map, oxford, twente",https://developers.google.com/earth-engine/datasets/catalog/Oxford_MAP_accessibility_to_healthcare_2019#terms-of-use,https://developers.google.com/earth-engine/datasets/images/Oxford/Oxford_MAP_accessibility_to_healthcare_2019_sample.png +Oxford/MAP/friction_surface_2015_v1_0,Malaria Atlas Project,Global Friction Surface 2015 [deprecated],01-01-15,01-01-16,2015,2016,image,"accessibility, friction, jrc, map, oxford, twente",https://developers.google.com/earth-engine/datasets/catalog/Oxford_MAP_friction_surface_2015_v1_0#terms-of-use,https://developers.google.com/earth-engine/datasets/images/Oxford/Oxford_MAP_friction_surface_2015_v1_0_sample.png +Oxford/MAP/friction_surface_2019,Malaria Atlas Project,Global Friction Surface 2019,01-01-19,01-01-20,2019,2020,image,"accessibility, friction, jrc, map, oxford, twente",https://developers.google.com/earth-engine/datasets/catalog/Oxford_MAP_friction_surface_2019#terms-of-use,https://developers.google.com/earth-engine/datasets/images/Oxford/Oxford_MAP_friction_surface_2019_sample.png +RESOLVE/ECOREGIONS/2017,RESOLVE Biodiversity and Wildlife Solutions,RESOLVE Ecoregions 2017,05-04-17,05-04-17,2017,2017,table,"biodiversity, conservation, ecoregions, global, habitats, protection, resolve",https://developers.google.com/earth-engine/datasets/catalog/RESOLVE_ECOREGIONS_2017#terms-of-use,https://developers.google.com/earth-engine/datasets/images/RESOLVE/RESOLVE_ECOREGIONS_2017_sample.png +RUB/RUBCLIM/LCZ/global_lcz_map/v1,Bochum Urban Climate Lab,Global map of Local Climate Zones,01-01-18,01-01-19,2018,2019,image_collection,"climate, landcover, urban",https://developers.google.com/earth-engine/datasets/catalog/RUB_RUBCLIM_LCZ_global_lcz_map_v1#terms-of-use,https://developers.google.com/earth-engine/datasets/images/RUB/RUB_RUBCLIM_LCZ_global_lcz_map_v1_sample.png +SKYSAT/GEN-A/PUBLIC/ORTHO/MULTISPECTRAL,Planet Labs Inc.,"Planet SkySat Public Ortho Imagery, Multispectral",03-07-14,24-12-16,2014,2016,image_collection,"highres, multispectral, pansharpened, planet, skysat",https://developers.google.com/earth-engine/datasets/catalog/SKYSAT_GEN-A_PUBLIC_ORTHO_MULTISPECTRAL#terms-of-use,https://developers.google.com/earth-engine/datasets/images/SKYSAT/SKYSAT_GEN-A_PUBLIC_ORTHO_MULTISPECTRAL_sample.png +SKYSAT/GEN-A/PUBLIC/ORTHO/RGB,Planet Labs Inc.,"Planet SkySat Public Ortho Imagery, RGB",03-07-14,24-12-16,2014,2016,image_collection,"highres, pansharpened, planet, rgb, skysat",https://developers.google.com/earth-engine/datasets/catalog/SKYSAT_GEN-A_PUBLIC_ORTHO_RGB#terms-of-use,https://developers.google.com/earth-engine/datasets/images/SKYSAT/SKYSAT_GEN-A_PUBLIC_ORTHO_RGB_sample.png +SNU/ESL/BESS/Rad/v1,Seoul National University (SNU),Breathing Earth System Simulator (BESS) Radiation v1,01-01-01,31-12-21,2001,2021,image_collection,"evapotranspiration, gpp, modis_derived, par, radiation, shortwave",https://developers.google.com/earth-engine/datasets/catalog/SNU_ESL_BESS_Rad_v1#terms-of-use,https://developers.google.com/earth-engine/datasets/images/SNU/SNU_ESL_BESS_Rad_v1_sample.png +Spain/PNOA/PNOA10,Spain orthophotos,Spain RGB orthophotos 10 cm,01-01-07,01-01-19,2007,2019,image_collection,"orthophoto, pnoa, rgb, spain",https://developers.google.com/earth-engine/datasets/catalog/Spain_PNOA_PNOA10#terms-of-use,https://developers.google.com/earth-engine/datasets/images/Spain/Spain_PNOA_PNOA10_sample.png +TERN/AET/CMRSET_LANDSAT_V2_1,TERN Landscapes / CSIRO Land and Water,Actual Evapotranspiration for Australia (CMRSET Landsat V2.1) [deprecated],01-02-12,01-02-21,2012,2021,image_collection,"agriculture, australia, csiro, evaporation, evapotranspiration, hydrology, landsat_derived, tern, viirs_derived",https://developers.google.com/earth-engine/datasets/catalog/TERN_AET_CMRSET_LANDSAT_V2_1#terms-of-use,https://developers.google.com/earth-engine/datasets/images/TERN/TERN_AET_CMRSET_LANDSAT_V2_1_sample.png +TERN/AET/CMRSET_LANDSAT_V2_2,TERN Landscapes / CSIRO Land and Water,Actual Evapotranspiration for Australia (CMRSET Landsat V2.2),01-02-00,01-11-22,2000,2022,image_collection,"agriculture, australia, csiro, evaporation, evapotranspiration, hydrology, landsat_derived, tern, viirs_derived",https://developers.google.com/earth-engine/datasets/catalog/TERN_AET_CMRSET_LANDSAT_V2_2#terms-of-use,https://developers.google.com/earth-engine/datasets/images/TERN/TERN_AET_CMRSET_LANDSAT_V2_2_sample.png +TIGER/2010/BG,United States Census Bureau,TIGER: US Census Block Groups (BG),01-01-10,02-01-10,2010,2010,table,"census, city, neighborhood, tiger, urban, us",https://developers.google.com/earth-engine/datasets/catalog/TIGER_2010_BG#terms-of-use,https://developers.google.com/earth-engine/datasets/images/TIGER/TIGER_2010_BG_sample.png +TIGER/2010/Blocks,United States Census Bureau,TIGER: US Census Blocks,01-01-10,02-01-10,2010,2010,table,"census, city, neighborhood, tiger, urban, us",https://developers.google.com/earth-engine/datasets/catalog/TIGER_2010_Blocks#terms-of-use,https://developers.google.com/earth-engine/datasets/images/TIGER/TIGER_2010_Blocks_sample.png +TIGER/2010/Tracts_DP1,United States Census Bureau,TIGER: US Census Tracts Demographic - Profile 1,01-01-10,02-01-10,2010,2010,table,"census, demographic, human, social, tiger, us",https://developers.google.com/earth-engine/datasets/catalog/TIGER_2010_Tracts_DP1#terms-of-use,https://developers.google.com/earth-engine/datasets/images/TIGER/TIGER_2010_Tracts_DP1_sample.png +TIGER/2010/ZCTA5,United States Census Bureau,TIGER: US Census 5-digit ZIP Code Tabulation Areas 2010,01-01-10,02-01-10,2010,2010,table,"census, tiger, us, zcta, zip_code",https://developers.google.com/earth-engine/datasets/catalog/TIGER_2010_ZCTA5#terms-of-use,https://developers.google.com/earth-engine/datasets/images/TIGER/TIGER_2010_ZCTA5_sample.png +TIGER/2016/Counties,United States Census Bureau,TIGER: US Census Counties 2016,01-01-16,02-01-17,2016,2017,table,"census, county, tiger, us",https://developers.google.com/earth-engine/datasets/catalog/TIGER_2016_Counties#terms-of-use,https://developers.google.com/earth-engine/datasets/images/TIGER/TIGER_2016_Counties_sample.png +TIGER/2016/Roads,United States Census Bureau,TIGER: US Census Roads,01-01-16,02-01-17,2016,2017,table,"census, roads, tiger, us",https://developers.google.com/earth-engine/datasets/catalog/TIGER_2016_Roads#terms-of-use,https://developers.google.com/earth-engine/datasets/images/TIGER/TIGER_2016_Roads_sample.png +TIGER/2016/States,United States Census Bureau,TIGER: US Census States 2016,01-01-16,02-01-17,2016,2017,table,"census, state, states, tiger, us",https://developers.google.com/earth-engine/datasets/catalog/TIGER_2016_States#terms-of-use,https://developers.google.com/earth-engine/datasets/images/TIGER/TIGER_2016_States_sample.png +TIGER/2018/Counties,United States Census Bureau,TIGER: US Census Counties 2018,01-01-18,01-01-19,2018,2019,table,"census, county, tiger, us",https://developers.google.com/earth-engine/datasets/catalog/TIGER_2018_Counties#terms-of-use,https://developers.google.com/earth-engine/datasets/images/TIGER/TIGER_2018_Counties_sample.png +TIGER/2018/States,United States Census Bureau,TIGER: US Census States 2018,01-01-18,01-01-19,2018,2019,table,"census, state, states, tiger, us",https://developers.google.com/earth-engine/datasets/catalog/TIGER_2018_States#terms-of-use,https://developers.google.com/earth-engine/datasets/images/TIGER/TIGER_2018_States_sample.png +TIGER/2020/BG,United States Census Bureau,TIGER: US Census Block Groups (BG),01-01-20,02-01-20,2020,2020,table,"census, city, neighborhood, tiger, urban, us",https://developers.google.com/earth-engine/datasets/catalog/TIGER_2020_BG#terms-of-use,https://developers.google.com/earth-engine/datasets/images/TIGER/TIGER_2020_BG_sample.png +TIGER/2020/TABBLOCK20,United States Census Bureau,TIGER: 2020 Tabulation (Census) Block ,01-01-20,02-01-20,2020,2020,table,"census, city, neighborhood, tiger, urban, us",https://developers.google.com/earth-engine/datasets/catalog/TIGER_2020_TABBLOCK20#terms-of-use,https://developers.google.com/earth-engine/datasets/images/TIGER/TIGER_2020_TABBLOCK20_sample.png +TIGER/2020/TRACT,United States Census Bureau,TIGER: US Census Tracts,01-01-20,02-01-20,2020,2020,table,"census, city, neighborhood, tiger, urban, us",https://developers.google.com/earth-engine/datasets/catalog/TIGER_2020_TRACT#terms-of-use,https://developers.google.com/earth-engine/datasets/images/TIGER/TIGER_2020_TRACT_sample.png +TOMS/MERGED,NASA / GES DISC,TOMS and OMI Merged Ozone Data,01-11-78,23-03-23,1978,2023,image_collection,"atmosphere, aura, climate, geophysical, ges_disc, goddard, nasa, omi, ozone, toms",https://developers.google.com/earth-engine/datasets/catalog/TOMS_MERGED#terms-of-use,https://developers.google.com/earth-engine/datasets/images/TOMS/TOMS_MERGED_sample.png +TRMM/3B42,NASA GES DISC at NASA Goddard Space Flight Center,TRMM 3B42: 3-Hourly Precipitation Estimates,01-01-98,31-12-19,1998,2019,image_collection,"3_hourly, climate, geophysical, jaxa, nasa, precipitation, rainfall, trmm, weather",https://developers.google.com/earth-engine/datasets/catalog/TRMM_3B42#terms-of-use,https://developers.google.com/earth-engine/datasets/images/TRMM/TRMM_3B42_sample.png +TRMM/3B43V7,NASA GES DISC at NASA Goddard Space Flight Center,TRMM 3B43: Monthly Precipitation Estimates,01-01-98,01-12-19,1998,2019,image_collection,"climate, geophysical, jaxa, nasa, precipitation, rainfall, trmm, weather",https://developers.google.com/earth-engine/datasets/catalog/TRMM_3B43V7#terms-of-use,https://developers.google.com/earth-engine/datasets/images/TRMM/TRMM_3B43V7_sample.png +TUBerlin/BigEarthNet/v1,BigEarthNet,TUBerlin/BigEarthNet/v1,01-06-17,31-05-18,2017,2018,image_collection,"chip, copernicus, corine_derived, label, ml, sentinel, tile",https://developers.google.com/earth-engine/datasets/catalog/TUBerlin_BigEarthNet_v1#terms-of-use,https://developers.google.com/earth-engine/datasets/images/TUBerlin/TUBerlin_BigEarthNet_v1_sample.png +Tsinghua/DESS/ChinaTerraceMap/v1,"Department of Earth System Science, Tsinghua University (DESS, THU)",DESS China Terrace Map v1,01-01-18,01-01-19,2018,2019,image,"agriculture, china, dess, landcover, landuse, terrace, tsinghua",https://developers.google.com/earth-engine/datasets/catalog/Tsinghua_DESS_ChinaTerraceMap_v1#terms-of-use,https://developers.google.com/earth-engine/datasets/images/Tsinghua/Tsinghua_DESS_ChinaTerraceMap_v1_sample.png +Tsinghua/FROM-GLC/GAIA/v10,Tsinghua University,Tsinghua FROM-GLC Year of Change to Impervious Surface,01-01-85,31-12-18,1985,2018,image,"built, development, impervious, tsinghua, urban",https://developers.google.com/earth-engine/datasets/catalog/Tsinghua_FROM-GLC_GAIA_v10#terms-of-use,https://developers.google.com/earth-engine/datasets/images/Tsinghua/Tsinghua_FROM-GLC_GAIA_v10_sample.png +UCSB-CHG/CHIRPS/DAILY,UCSB/CHG,CHIRPS Daily: Climate Hazards Group InfraRed Precipitation With Station Data (Version 2.0 Final),01-01-81,28-02-23,1981,2023,image_collection,"chg, climate, geophysical, precipitation, ucsb, weather",https://developers.google.com/earth-engine/datasets/catalog/UCSB-CHG_CHIRPS_DAILY#terms-of-use,https://developers.google.com/earth-engine/datasets/images/UCSB-CHG/UCSB-CHG_CHIRPS_DAILY_sample.png +UCSB-CHG/CHIRPS/PENTAD,UCSB/CHG,CHIRPS Pentad: Climate Hazards Group InfraRed Precipitation With Station Data (Version 2.0 Final),01-01-81,26-02-23,1981,2023,image_collection,"chg, climate, geophysical, precipitation, ucsb, weather",https://developers.google.com/earth-engine/datasets/catalog/UCSB-CHG_CHIRPS_PENTAD#terms-of-use,https://developers.google.com/earth-engine/datasets/images/UCSB-CHG/UCSB-CHG_CHIRPS_PENTAD_sample.png +UMD/GLAD/PRIMARY_HUMID_TROPICAL_FORESTS/v1,UMD/GLAD,Primary Humid Tropical Forests,01-01-01,01-01-02,2001,2002,image_collection,"forest, glad, global, landsat_derived, umd",https://developers.google.com/earth-engine/datasets/catalog/UMD_GLAD_PRIMARY_HUMID_TROPICAL_FORESTS_v1#terms-of-use,https://developers.google.com/earth-engine/datasets/images/UMD/UMD_GLAD_PRIMARY_HUMID_TROPICAL_FORESTS_v1_sample.png +UMD/hansen/global_forest_change_2013,Hansen/UMD/Google/USGS/NASA,Hansen Global Forest Change v1.0 (2000-2012) [deprecated],01-01-00,01-01-13,2000,2013,image,"forest, geophysical, hansen, landsat_derived, umd",https://developers.google.com/earth-engine/datasets/catalog/UMD_hansen_global_forest_change_2013#terms-of-use,https://developers.google.com/earth-engine/datasets/images/UMD/UMD_hansen_global_forest_change_2013_sample.png +UMD/hansen/global_forest_change_2014,Hansen/UMD/Google/USGS/NASA,Hansen Global Forest Change v1.1 (2000-2013) [deprecated],01-01-00,01-01-14,2000,2014,image,"forest, geophysical, hansen, landsat_derived, umd",https://developers.google.com/earth-engine/datasets/catalog/UMD_hansen_global_forest_change_2014#terms-of-use,https://developers.google.com/earth-engine/datasets/images/UMD/UMD_hansen_global_forest_change_2014_sample.png +UMD/hansen/global_forest_change_2015,Hansen/UMD/Google/USGS/NASA,Hansen Global Forest Change v1.2 (2000-2014) [deprecated],01-01-00,01-01-15,2000,2015,image,"forest, geophysical, hansen, landsat_derived, umd",https://developers.google.com/earth-engine/datasets/catalog/UMD_hansen_global_forest_change_2015#terms-of-use,https://developers.google.com/earth-engine/datasets/images/UMD/UMD_hansen_global_forest_change_2015_sample.png +UMD/hansen/global_forest_change_2015_v1_3,Hansen/UMD/Google/USGS/NASA,Hansen Global Forest Change v1.3 (2000-2015) [deprecated],01-01-00,01-01-16,2000,2016,image,"forest, geophysical, hansen, landsat_derived, umd",https://developers.google.com/earth-engine/datasets/catalog/UMD_hansen_global_forest_change_2015_v1_3#terms-of-use,https://developers.google.com/earth-engine/datasets/images/UMD/UMD_hansen_global_forest_change_2015_v1_3_sample.png +UMD/hansen/global_forest_change_2016_v1_4,Hansen/UMD/Google/USGS/NASA,Hansen Global Forest Change v1.4 (2000-2016) [deprecated],01-01-00,01-01-17,2000,2017,image,"forest, geophysical, hansen, landsat_derived, umd",https://developers.google.com/earth-engine/datasets/catalog/UMD_hansen_global_forest_change_2016_v1_4#terms-of-use,https://developers.google.com/earth-engine/datasets/images/UMD/UMD_hansen_global_forest_change_2016_v1_4_sample.png +UMD/hansen/global_forest_change_2017_v1_5,Hansen/UMD/Google/USGS/NASA,Hansen Global Forest Change v1.5 (2000-2017) [deprecated],01-01-00,01-01-18,2000,2018,image,"forest, geophysical, hansen, landsat_derived, umd",https://developers.google.com/earth-engine/datasets/catalog/UMD_hansen_global_forest_change_2017_v1_5#terms-of-use,https://developers.google.com/earth-engine/datasets/images/UMD/UMD_hansen_global_forest_change_2017_v1_5_sample.png +UMD/hansen/global_forest_change_2018_v1_6,Hansen/UMD/Google/USGS/NASA,Hansen Global Forest Change v1.6 (2000-2018) [deprecated],01-01-00,01-01-19,2000,2019,image,"forest, geophysical, hansen, landsat_derived, umd",https://developers.google.com/earth-engine/datasets/catalog/UMD_hansen_global_forest_change_2018_v1_6#terms-of-use,https://developers.google.com/earth-engine/datasets/images/UMD/UMD_hansen_global_forest_change_2018_v1_6_sample.png +UMD/hansen/global_forest_change_2019_v1_7,Hansen/UMD/Google/USGS/NASA,Hansen Global Forest Change v1.7 (2000-2019) [deprecated],01-01-00,01-01-20,2000,2020,image,"forest, geophysical, hansen, landsat_derived, umd",https://developers.google.com/earth-engine/datasets/catalog/UMD_hansen_global_forest_change_2019_v1_7#terms-of-use,https://developers.google.com/earth-engine/datasets/images/UMD/UMD_hansen_global_forest_change_2019_v1_7_sample.png +UMD/hansen/global_forest_change_2020_v1_8,Hansen/UMD/Google/USGS/NASA,Hansen Global Forest Change v1.8 (2000-2020) [deprecated],01-01-00,01-01-20,2000,2020,image,"forest, geophysical, hansen, landsat_derived, umd",https://developers.google.com/earth-engine/datasets/catalog/UMD_hansen_global_forest_change_2020_v1_8#terms-of-use,https://developers.google.com/earth-engine/datasets/images/UMD/UMD_hansen_global_forest_change_2020_v1_8_sample.png +UMD/hansen/global_forest_change_2021_v1_9,Hansen/UMD/Google/USGS/NASA,Hansen Global Forest Change v1.9 (2000-2021),01-01-00,01-01-21,2000,2021,image,"forest, geophysical, hansen, landsat_derived, umd",https://developers.google.com/earth-engine/datasets/catalog/UMD_hansen_global_forest_change_2021_v1_9#terms-of-use,https://developers.google.com/earth-engine/datasets/images/UMD/UMD_hansen_global_forest_change_2021_v1_9_sample.png +UMN/PGC/ArcticDEM/V2/2m,University of Minnesota Polar Geospatial Center,ArcticDEM Strips [deprecated],16-08-09,12-03-17,2009,2017,image_collection,"arctic, dem, geophysical, pgc, umn",https://developers.google.com/earth-engine/datasets/catalog/UMN_PGC_ArcticDEM_V2_2m#terms-of-use,https://developers.google.com/earth-engine/datasets/images/UMN/UMN_PGC_ArcticDEM_V2_2m_sample.png +UMN/PGC/ArcticDEM/V2/5m,University of Minnesota Polar Geospatial Center,ArcticDEM Mosaic [deprecated],21-09-16,21-09-16,2016,2016,image,"arctic, dem, geophysical, pgc, umn",https://developers.google.com/earth-engine/datasets/catalog/UMN_PGC_ArcticDEM_V2_5m#terms-of-use,https://developers.google.com/earth-engine/datasets/images/UMN/UMN_PGC_ArcticDEM_V2_5m_sample.png +UMN/PGC/ArcticDEM/V3/2m,University of Minnesota Polar Geospatial Center,ArcticDEM Strips,16-08-09,12-03-17,2009,2017,image_collection,"arctic, dem, geophysical, pgc, umn",https://developers.google.com/earth-engine/datasets/catalog/UMN_PGC_ArcticDEM_V3_2m#terms-of-use,https://developers.google.com/earth-engine/datasets/images/UMN/UMN_PGC_ArcticDEM_V3_2m_sample.png +UMN/PGC/ArcticDEM/V3/2m_mosaic,University of Minnesota Polar Geospatial Center,ArcticDEM Mosaic,21-09-16,21-09-16,2016,2016,image,"arctic, dem, geophysical, pgc, umn",https://developers.google.com/earth-engine/datasets/catalog/UMN_PGC_ArcticDEM_V3_2m_mosaic#terms-of-use,https://developers.google.com/earth-engine/datasets/images/UMN/UMN_PGC_ArcticDEM_V3_2m_mosaic_sample.png +UMN/PGC/REMA/V1_1/8m,University of Minnesota Polar Geospatial Center,REMA Mosaic,01-01-09,01-01-18,2009,2018,image,"dem, geophysical, pgc, rema, umn",https://developers.google.com/earth-engine/datasets/catalog/UMN_PGC_REMA_V1_1_8m#terms-of-use,https://developers.google.com/earth-engine/datasets/images/UMN/UMN_PGC_REMA_V1_1_8m_sample.png +UMN/PGC/REMA/V1/2m,University of Minnesota Polar Geospatial Center,REMA Strips 2m,01-01-09,01-01-18,2009,2018,image_collection,"dem, geophysical, pgc, rema, umn",https://developers.google.com/earth-engine/datasets/catalog/UMN_PGC_REMA_V1_2m#terms-of-use,https://developers.google.com/earth-engine/datasets/images/UMN/UMN_PGC_REMA_V1_2m_sample.png +UMN/PGC/REMA/V1/8m,University of Minnesota Polar Geospatial Center,REMA Strips 8m,01-01-09,01-01-18,2009,2018,image_collection,"dem, geophysical, pgc, rema, umn",https://developers.google.com/earth-engine/datasets/catalog/UMN_PGC_REMA_V1_8m#terms-of-use,https://developers.google.com/earth-engine/datasets/images/UMN/UMN_PGC_REMA_V1_8m_sample.png +UMT/Climate/IrrMapper_RF/v1_0,University of Montana / Montana Climate Office,IrrMapper Irrigated Lands,01-01-86,01-01-20,1986,2020,image_collection,"irrigated_land, landsat_derived",https://developers.google.com/earth-engine/datasets/catalog/UMT_Climate_IrrMapper_RF_v1_0#terms-of-use,https://developers.google.com/earth-engine/datasets/images/UMT/UMT_Climate_IrrMapper_RF_v1_0_sample.png +UMT/NTSG/v2/LANDSAT/GPP,University of Montana Numerical Terradynamic Simulation Group (NTSG),Landsat Gross Primary Production CONUS,01-01-86,19-12-21,1986,2021,image_collection,"16_day, conus, gpp, gridmet_derived, landsat, mod17, nlcd_derived, photosynthesis, production, productivity",https://developers.google.com/earth-engine/datasets/catalog/UMT_NTSG_v2_LANDSAT_GPP#terms-of-use,https://developers.google.com/earth-engine/datasets/images/UMT/UMT_NTSG_v2_LANDSAT_GPP_sample.png +UMT/NTSG/v2/LANDSAT/NPP,University of Montana Numerical Terradynamic Simulation Group (NTSG),Landsat Net Primary Production CONUS,01-01-86,01-01-20,1986,2020,image_collection,"conus, gridmet_derived, landsat, mod17, nlcd_derived, npp, photosynthesis, production, productivity, yearly",https://developers.google.com/earth-engine/datasets/catalog/UMT_NTSG_v2_LANDSAT_NPP#terms-of-use,https://developers.google.com/earth-engine/datasets/images/UMT/UMT_NTSG_v2_LANDSAT_NPP_sample.png +UMT/NTSG/v2/MODIS/GPP,University of Montana Numerical Terradynamic Simulation Group (NTSG),MODIS Gross Primary Production CONUS,01-01-01,19-12-21,2001,2021,image_collection,"8_day, conus, gpp, gridmet_derived, mod09q1, mod17, modis, nlcd_derived, photosynthesis, production, productivity",https://developers.google.com/earth-engine/datasets/catalog/UMT_NTSG_v2_MODIS_GPP#terms-of-use,https://developers.google.com/earth-engine/datasets/images/UMT/UMT_NTSG_v2_MODIS_GPP_sample.png +UMT/NTSG/v2/MODIS/NPP,University of Montana Numerical Terradynamic Simulation Group (NTSG),MODIS Net Primary Production CONUS,01-01-01,01-01-19,2001,2019,image_collection,"conus, gridmet_derived, mod09q1, mod17, modis, nlcd_derived, npp, photosynthesis, production, productivity, yearly",https://developers.google.com/earth-engine/datasets/catalog/UMT_NTSG_v2_MODIS_NPP#terms-of-use,https://developers.google.com/earth-engine/datasets/images/UMT/UMT_NTSG_v2_MODIS_NPP_sample.png +UQ/murray/Intertidal/v1_1/data_mask,Murray/UQ/Google/USGS/NASA,Murray Global Intertidal Change Data Mask,01-01-84,01-01-17,1984,2017,image,"coastal, google, intertidal, landsat_derived, murray, tidal_flats, uq",https://developers.google.com/earth-engine/datasets/catalog/UQ_murray_Intertidal_v1_1_data_mask#terms-of-use,https://developers.google.com/earth-engine/datasets/images/UQ/UQ_murray_Intertidal_v1_1_data_mask_sample.png +UQ/murray/Intertidal/v1_1/global_intertidal,Murray/UQ/Google/USGS/NASA,Murray Global Intertidal Change Classification,01-01-84,01-01-17,1984,2017,image_collection,"coastal, google, intertidal, landsat_derived, murray, tidal_flats, uq",https://developers.google.com/earth-engine/datasets/catalog/UQ_murray_Intertidal_v1_1_global_intertidal#terms-of-use,https://developers.google.com/earth-engine/datasets/images/UQ/UQ_murray_Intertidal_v1_1_global_intertidal_sample.png +UQ/murray/Intertidal/v1_1/qa_pixel_count,Murray/UQ/Google/USGS/NASA,Murray Global Intertidal Change QA Pixel Count,01-01-84,01-01-17,1984,2017,image_collection,"coastal, google, intertidal, landsat_derived, murray, tidal_flats, uq",https://developers.google.com/earth-engine/datasets/catalog/UQ_murray_Intertidal_v1_1_qa_pixel_count#terms-of-use,https://developers.google.com/earth-engine/datasets/images/UQ/UQ_murray_Intertidal_v1_1_qa_pixel_count_sample.png +USDA/NAIP/DOQQ,"USDA Farm Production and Conservation - Business Center, Geospatial Enterprise Operations",NAIP: National Agriculture Imagery Program,15-06-02,17-12-20,2002,2020,image_collection,"aerial, agriculture, fpac, highres, imagery, naip, usda",https://developers.google.com/earth-engine/datasets/catalog/USDA_NAIP_DOQQ#terms-of-use,https://developers.google.com/earth-engine/datasets/images/USDA/USDA_NAIP_DOQQ_sample.png +USDA/NASS/CDL,USDA National Agricultural Statistics Service,USDA NASS Cropland Data Layers,01-01-97,01-01-22,1997,2022,image_collection,"cdl, cropland, landcover, nass, usda",https://developers.google.com/earth-engine/datasets/catalog/USDA_NASS_CDL#terms-of-use,https://developers.google.com/earth-engine/datasets/images/USDA/USDA_NASS_CDL_sample.png +USDOS/LSIB/2013,"United States Department of State, Office of the Geographer","LSIB 2013: Large Scale International Boundary Polygons, Detailed [deprecated]",08-03-13,08-03-13,2013,2013,table,"borders, boundaries, countries, dos, political, usdos",https://developers.google.com/earth-engine/datasets/catalog/USDOS_LSIB_2013#terms-of-use,https://developers.google.com/earth-engine/datasets/images/USDOS/USDOS_LSIB_2013_sample.png +USDOS/LSIB/2017,"United States Department of State, Office of the Geographer","LSIB 2017: Large Scale International Boundary Polygons, Detailed",29-12-17,29-12-17,2017,2017,table,"borders, boundaries, countries, dos, political, usdos",https://developers.google.com/earth-engine/datasets/catalog/USDOS_LSIB_2017#terms-of-use,https://developers.google.com/earth-engine/datasets/images/USDOS/USDOS_LSIB_2017_sample.png +USDOS/LSIB_SIMPLE/2017,"United States Department of State, Office of the Geographer","LSIB 2017: Large Scale International Boundary Polygons, Simplified",30-03-17,30-03-17,2017,2017,table,"borders, boundaries, countries, dos, political, usdos",https://developers.google.com/earth-engine/datasets/catalog/USDOS_LSIB_SIMPLE_2017#terms-of-use,https://developers.google.com/earth-engine/datasets/images/USDOS/USDOS_LSIB_SIMPLE_2017_sample.png +USFS/GTAC/LCMS/v2020-5,USDA Forest Service (USFS) Geospatial Technology and Applications Center (GTAC),USFS Landscape Change Monitoring System v2020.5,01-06-85,30-09-20,1985,2020,image_collection,"change, change_detection, forest, gtac, landcover, landsat_derived, landuse, lcms, redcastle_resources, rmrs, sentinel2_derived, time_series, usda, usfs",https://developers.google.com/earth-engine/datasets/catalog/USFS_GTAC_LCMS_v2020-5#terms-of-use,https://developers.google.com/earth-engine/datasets/images/USFS/USFS_GTAC_LCMS_v2020-5_sample.png +USFS/GTAC/LCMS/v2020-6,USDA Forest Service (USFS) Geospatial Technology and Applications Center (GTAC),USFS Landscape Change Monitoring System v2020.6 (Puerto Rico - US Virgin Islands only),01-06-85,31-05-21,1985,2021,image_collection,"change, change_detection, forest, gtac, landcover, landsat_derived, landuse, lcms, redcastle_resources, rmrs, sentinel2_derived, time_series, usda, usfs",https://developers.google.com/earth-engine/datasets/catalog/USFS_GTAC_LCMS_v2020-6#terms-of-use,https://developers.google.com/earth-engine/datasets/images/USFS/USFS_GTAC_LCMS_v2020-6_sample.png +USFS/GTAC/LCMS/v2021-7,USDA Forest Service (USFS) Geospatial Technology and Applications Center (GTAC),USFS Landscape Change Monitoring System v2021.7 (Conterminous United States and Southeastern Alaska),01-06-85,30-09-21,1985,2021,image_collection,"change, change_detection, forest, gtac, landcover, landsat_derived, landuse, lcms, redcastle_resources, rmrs, sentinel2_derived, time_series, usda, usfs",https://developers.google.com/earth-engine/datasets/catalog/USFS_GTAC_LCMS_v2021-7#terms-of-use,https://developers.google.com/earth-engine/datasets/images/USFS/USFS_GTAC_LCMS_v2021-7_sample.png +USFS/GTAC/MTBS/annual_burn_severity_mosaics/v1,Monitoring Trends in Burn Severity (MTBS),Monitoring Trends in Burn Severity (MTBS) Burn Severity Images,01-01-84,31-12-21,1984,2021,image_collection,"eros, fire, forest, gtac, landcover, landsat_derived, mtbs, redcastle_resources, usda, usfs, usgs",https://developers.google.com/earth-engine/datasets/catalog/USFS_GTAC_MTBS_annual_burn_severity_mosaics_v1#terms-of-use,https://developers.google.com/earth-engine/datasets/images/USFS/USFS_GTAC_MTBS_annual_burn_severity_mosaics_v1_sample.png +USFS/GTAC/MTBS/burned_area_boundaries/v1,Monitoring Trends in Burn Severity (MTBS),MTBS Burned Area Boundaries,01-01-84,01-06-22,1984,2022,table,"burnseverity, eros, fire, gtac, mtbs, prescribedfire, usda, usfs, usgs, wildfire",https://developers.google.com/earth-engine/datasets/catalog/USFS_GTAC_MTBS_burned_area_boundaries_v1#terms-of-use,https://developers.google.com/earth-engine/datasets/images/USFS/USFS_GTAC_MTBS_burned_area_boundaries_v1_sample.png +USGS/3DEP/1m,United States Geological Survey,USGS 3DEP 1m National Map,16-08-98,06-05-20,1998,2020,image_collection,"3dep, dem, elevation, geophysical, topography, usgs",https://developers.google.com/earth-engine/datasets/catalog/USGS_3DEP_1m#terms-of-use,https://developers.google.com/earth-engine/datasets/images/USGS/USGS_3DEP_1m_sample.png +USGS/3DEP/10m,United States Geological Survey,USGS 3DEP 10m National Map Seamless (1/3 Arc-Second),16-08-98,06-05-20,1998,2020,image,"3dep, dem, elevation, geophysical, topography, usgs",https://developers.google.com/earth-engine/datasets/catalog/USGS_3DEP_10m#terms-of-use,https://developers.google.com/earth-engine/datasets/images/USGS/USGS_3DEP_10m_sample.png +USGS/3DEP/10m_metadata,United States Geological Survey,USGS 3DEP National Map Spatial Metadata 1/3 Arc-Second (10m),16-08-98,06-05-20,1998,2020,table,"3dep, usgs",https://developers.google.com/earth-engine/datasets/catalog/USGS_3DEP_10m_metadata#terms-of-use,https://developers.google.com/earth-engine/datasets/images/USGS/USGS_3DEP_10m_metadata_sample.png +USGS/GAP/AK/2001,USGS,USGS GAP Alaska 2001,01-01-01,01-01-02,2001,2002,image,"gap, landcover, landfire, usgs, vegetation",https://developers.google.com/earth-engine/datasets/catalog/USGS_GAP_AK_2001#terms-of-use,https://developers.google.com/earth-engine/datasets/images/USGS/USGS_GAP_AK_2001_sample.png +USGS/GAP/CONUS/2011,USGS,USGS GAP CONUS 2011,01-01-11,01-01-12,2011,2012,image,"gap, landcover, landfire, usgs, vegetation",https://developers.google.com/earth-engine/datasets/catalog/USGS_GAP_CONUS_2011#terms-of-use,https://developers.google.com/earth-engine/datasets/images/USGS/USGS_GAP_CONUS_2011_sample.png +USGS/GAP/HI/2001,USGS,USGS GAP Hawaii 2001,01-01-01,01-01-02,2001,2002,image,"gap, landcover, landfire, usgs, vegetation",https://developers.google.com/earth-engine/datasets/catalog/USGS_GAP_HI_2001#terms-of-use,https://developers.google.com/earth-engine/datasets/images/USGS/USGS_GAP_HI_2001_sample.png +USGS/GAP/PAD-US/v20/designation,US Geological Survey,Designation: USGS GAP PAD-US v2.0,01-09-18,01-09-18,2018,2018,table,"conservation_easements, designation, management, ownership, protected_areas, public_lands, usgs",https://developers.google.com/earth-engine/datasets/catalog/USGS_GAP_PAD-US_v20_designation#terms-of-use,https://developers.google.com/earth-engine/datasets/images/USGS/USGS_GAP_PAD-US_v20_designation_sample.png +USGS/GAP/PAD-US/v20/easement,US Geological Survey,Easement: USGS GAP PAD-US v2.0,01-09-18,01-09-18,2018,2018,table,"conservation_easements, designation, management, ownership, protected_areas, public_lands, usgs",https://developers.google.com/earth-engine/datasets/catalog/USGS_GAP_PAD-US_v20_easement#terms-of-use,https://developers.google.com/earth-engine/datasets/images/USGS/USGS_GAP_PAD-US_v20_easement_sample.png +USGS/GAP/PAD-US/v20/fee,US Geological Survey,Fee: USGS GAP PAD-US v2.0,01-09-18,01-09-18,2018,2018,table,"conservation_easements, designation, management, ownership, protected_areas, public_lands, usgs",https://developers.google.com/earth-engine/datasets/catalog/USGS_GAP_PAD-US_v20_fee#terms-of-use,https://developers.google.com/earth-engine/datasets/images/USGS/USGS_GAP_PAD-US_v20_fee_sample.png +USGS/GAP/PAD-US/v20/proclamation,US Geological Survey,Proclamation: USGS GAP PAD-US v2.0,01-09-18,01-09-18,2018,2018,table,"conservation_easements, designation, management, ownership, protected_areas, public_lands, usgs",https://developers.google.com/earth-engine/datasets/catalog/USGS_GAP_PAD-US_v20_proclamation#terms-of-use,https://developers.google.com/earth-engine/datasets/images/USGS/USGS_GAP_PAD-US_v20_proclamation_sample.png +USGS/GAP/PR/2001,USGS,USGS GAP Puerto Rico 2001,01-01-01,01-01-02,2001,2002,image,"gap, landcover, landfire, usgs, vegetation",https://developers.google.com/earth-engine/datasets/catalog/USGS_GAP_PR_2001#terms-of-use,https://developers.google.com/earth-engine/datasets/images/USGS/USGS_GAP_PR_2001_sample.png +USGS/GFSAD1000_V0,Global Food Security-support Analysis Data at 30m Project (GFSAD30),"GFSAD1000: Cropland Extent 1km Crop Dominance, Global Food-Support Analysis Data [deprecated]",01-01-10,01-01-11,2010,2011,image,"crop, cropland, gfsad, landcover, usgs",https://developers.google.com/earth-engine/datasets/catalog/USGS_GFSAD1000_V0#terms-of-use,https://developers.google.com/earth-engine/datasets/images/USGS/USGS_GFSAD1000_V0_sample.png +USGS/GFSAD1000_V1,Global Food Security-support Analysis Data at 30m Project (GFSAD30),"GFSAD1000: Cropland Extent 1km Multi-Study Crop Mask, Global Food-Support Analysis Data",01-01-10,01-01-10,2010,2010,image,"crop, cropland, gfsad, landcover, usgs",https://developers.google.com/earth-engine/datasets/catalog/USGS_GFSAD1000_V1#terms-of-use,https://developers.google.com/earth-engine/datasets/images/USGS/USGS_GFSAD1000_V1_sample.png +USGS/GMTED2010,USGS,GMTED2010: Global Multi-resolution Terrain Elevation Data 2010,01-01-10,01-01-10,2010,2010,image,"dem, elevation, geophysical, srtm, topography, usgs",https://developers.google.com/earth-engine/datasets/catalog/USGS_GMTED2010#terms-of-use,https://developers.google.com/earth-engine/datasets/images/USGS/USGS_GMTED2010_sample.png +USGS/GTOPO30,United States Geological Survey,GTOPO30: Global 30 Arc-Second Elevation,01-01-96,01-01-96,1996,1996,image,"dem, elevation, geophysical, gtopo30, nasa, topography, usgs",https://developers.google.com/earth-engine/datasets/catalog/USGS_GTOPO30#terms-of-use,https://developers.google.com/earth-engine/datasets/images/USGS/USGS_GTOPO30_sample.png +USGS/LIMA/MOSAIC,USGS,Landsat Image Mosaic of Antarctica (LIMA) 16-Bit Pan-Sharpened Mosaic,30-06-99,04-09-02,1999,2002,image,"antarctica, ice, landsat_derived, lima, mosaic, sr, usgs",https://developers.google.com/earth-engine/datasets/catalog/USGS_LIMA_MOSAIC#terms-of-use,https://developers.google.com/earth-engine/datasets/images/USGS/USGS_LIMA_MOSAIC_sample.png +USGS/LIMA/SR,USGS,Landsat Image Mosaic of Antarctica (LIMA) - Processed Landsat Scenes (16 bit),30-06-99,04-09-02,1999,2002,image_collection,"antarctica, ice, landsat_derived, lima, mosaic, sr, usgs",https://developers.google.com/earth-engine/datasets/catalog/USGS_LIMA_SR#terms-of-use,https://developers.google.com/earth-engine/datasets/images/USGS/USGS_LIMA_SR_sample.png +USGS/NED,United States Geological Survey,USGS National Elevation Dataset 1/3 Arc-Second [deprecated],07-02-12,07-02-12,2012,2012,image,"dem, elevation, geophysical, ned, topography, usgs",https://developers.google.com/earth-engine/datasets/catalog/USGS_NED#terms-of-use,https://developers.google.com/earth-engine/datasets/images/USGS/USGS_NED_sample.png +USGS/NLCD,USGS,NLCD: USGS National Land Cover Database [deprecated],01-01-92,01-01-17,1992,2017,image_collection,"blm, landcover, mrlc, nlcd, shrub, shrubland, usgs",https://developers.google.com/earth-engine/datasets/catalog/USGS_NLCD#terms-of-use,https://developers.google.com/earth-engine/datasets/images/USGS/USGS_NLCD_sample.png +USGS/NLCD_RELEASES/2016_REL,USGS,"NLCD 2016: USGS National Land Cover Database, 2016 release",01-01-92,01-01-17,1992,2017,image_collection,"blm, landcover, mrlc, nlcd, rangeland, shrub, shrubland, usgs",https://developers.google.com/earth-engine/datasets/catalog/USGS_NLCD_RELEASES_2016_REL#terms-of-use,https://developers.google.com/earth-engine/datasets/images/USGS/USGS_NLCD_RELEASES_2016_REL_sample.png +USGS/NLCD_RELEASES/2019_REL/NLCD,USGS,"NLCD 2019: USGS National Land Cover Database, 2019 release",01-01-01,01-01-19,2001,2019,image_collection,"blm, landcover, mrlc, nlcd, usgs",https://developers.google.com/earth-engine/datasets/catalog/USGS_NLCD_RELEASES_2019_REL_NLCD#terms-of-use,https://developers.google.com/earth-engine/datasets/images/USGS/USGS_NLCD_RELEASES_2019_REL_NLCD_sample.png +USGS/NLCD_RELEASES/2019_REL/RCMAP/V4/COVER,United States Geological Survey and Bureau of Land Management,RCMAP Rangeland Component Timeseries v4 (1985-2020),01-01-85,31-12-20,1985,2020,image_collection,"climate_change, disturbance, landsat_derived, nlcd, rangeland, trends",https://developers.google.com/earth-engine/datasets/catalog/USGS_NLCD_RELEASES_2019_REL_RCMAP_V4_COVER#terms-of-use,https://developers.google.com/earth-engine/datasets/images/USGS/USGS_NLCD_RELEASES_2019_REL_RCMAP_V4_COVER_sample.png +USGS/NLCD_RELEASES/2019_REL/RCMAP/V5/COVER,United States Geological Survey and Bureau of Land Management,RCMAP Rangeland Component Timeseries v5 (1985-2021),01-01-85,31-12-21,1985,2021,image_collection,"climate_change, disturbance, landsat_derived, nlcd, rangeland, trends",https://developers.google.com/earth-engine/datasets/catalog/USGS_NLCD_RELEASES_2019_REL_RCMAP_V5_COVER#terms-of-use,https://developers.google.com/earth-engine/datasets/images/USGS/USGS_NLCD_RELEASES_2019_REL_RCMAP_V5_COVER_sample.png +USGS/SRTMGL1_003,NASA / USGS / JPL-Caltech,NASA SRTM Digital Elevation 30m,11-02-00,22-02-00,2000,2000,image,"dem, elevation, geophysical, nasa, srtm, topography, usgs",https://developers.google.com/earth-engine/datasets/catalog/USGS_SRTMGL1_003#terms-of-use,https://developers.google.com/earth-engine/datasets/images/USGS/USGS_SRTMGL1_003_sample.png +USGS/WBD/2017/HUC02,United States Geological Survey,HUC02: USGS Watershed Boundary Dataset of Regions,22-04-17,23-04-17,2017,2017,table,"hydrology, usgs, water, watershed, wbd",https://developers.google.com/earth-engine/datasets/catalog/USGS_WBD_2017_HUC02#terms-of-use,https://developers.google.com/earth-engine/datasets/images/USGS/USGS_WBD_2017_HUC02_sample.png +USGS/WBD/2017/HUC04,United States Geological Survey,HUC04: USGS Watershed Boundary Dataset of Subregions,22-04-17,23-04-17,2017,2017,table,"hydrology, usgs, water, watershed, wbd",https://developers.google.com/earth-engine/datasets/catalog/USGS_WBD_2017_HUC04#terms-of-use,https://developers.google.com/earth-engine/datasets/images/USGS/USGS_WBD_2017_HUC04_sample.png +USGS/WBD/2017/HUC06,United States Geological Survey,HUC06: USGS Watershed Boundary Dataset of Basins,22-04-17,23-04-17,2017,2017,table,"hydrology, usgs, water, watershed, wbd",https://developers.google.com/earth-engine/datasets/catalog/USGS_WBD_2017_HUC06#terms-of-use,https://developers.google.com/earth-engine/datasets/images/USGS/USGS_WBD_2017_HUC06_sample.png +USGS/WBD/2017/HUC08,United States Geological Survey,HUC08: USGS Watershed Boundary Dataset of Subbasins,22-04-17,23-04-17,2017,2017,table,"hydrology, usgs, water, watershed, wbd",https://developers.google.com/earth-engine/datasets/catalog/USGS_WBD_2017_HUC08#terms-of-use,https://developers.google.com/earth-engine/datasets/images/USGS/USGS_WBD_2017_HUC08_sample.png +USGS/WBD/2017/HUC10,United States Geological Survey,HUC10: USGS Watershed Boundary Dataset of Watersheds,22-04-17,23-04-17,2017,2017,table,"hydrology, usgs, water, watershed, wbd",https://developers.google.com/earth-engine/datasets/catalog/USGS_WBD_2017_HUC10#terms-of-use,https://developers.google.com/earth-engine/datasets/images/USGS/USGS_WBD_2017_HUC10_sample.png +USGS/WBD/2017/HUC12,United States Geological Survey,HUC12: USGS Watershed Boundary Dataset of Subwatersheds,22-04-17,23-04-17,2017,2017,table,"hydrology, usgs, water, watershed, wbd",https://developers.google.com/earth-engine/datasets/catalog/USGS_WBD_2017_HUC12#terms-of-use,https://developers.google.com/earth-engine/datasets/images/USGS/USGS_WBD_2017_HUC12_sample.png +UTOKYO/WTLAB/KBDI/v1,"Institute of Industrial Science, The University of Tokyo, Japan",KBDI: Keetch-Byram Drought Index,01-01-07,24-03-23,2007,2023,image_collection,"drought, kbdi, lst_derived, rainfall, utokyo, wtlab",https://developers.google.com/earth-engine/datasets/catalog/UTOKYO_WTLAB_KBDI_v1#terms-of-use,https://developers.google.com/earth-engine/datasets/images/UTOKYO/UTOKYO_WTLAB_KBDI_v1_sample.png +VITO/PROBAV/C1/S1_TOC_100M,Vito / ESA,PROBA-V C1 Top Of Canopy Daily Synthesis 100m,17-10-13,31-10-21,2013,2021,image_collection,"esa, multispectral, nir, proba, probav, swir, vito",https://developers.google.com/earth-engine/datasets/catalog/VITO_PROBAV_C1_S1_TOC_100M#terms-of-use,https://developers.google.com/earth-engine/datasets/images/VITO/VITO_PROBAV_C1_S1_TOC_100M_sample.png +VITO/PROBAV/C1/S1_TOC_333M,Vito / ESA,PROBA-V C1 Top Of Canopy Daily Synthesis 333m,17-10-13,31-10-21,2013,2021,image_collection,"esa, multispectral, nir, proba, probav, swir, vito",https://developers.google.com/earth-engine/datasets/catalog/VITO_PROBAV_C1_S1_TOC_333M#terms-of-use,https://developers.google.com/earth-engine/datasets/images/VITO/VITO_PROBAV_C1_S1_TOC_333M_sample.png +VITO/PROBAV/S1_TOC_100M,Vito / ESA,PROBA-V C0 Top Of Canopy Daily Synthesis 100m [deprecated],17-10-13,14-12-16,2013,2016,image_collection,"esa, multispectral, nir, proba, probav, swir, vito",https://developers.google.com/earth-engine/datasets/catalog/VITO_PROBAV_S1_TOC_100M#terms-of-use,https://developers.google.com/earth-engine/datasets/images/VITO/VITO_PROBAV_S1_TOC_100M_sample.png +VITO/PROBAV/S1_TOC_333M,Vito / ESA,PROBA-V C0 Top Of Canopy Daily Synthesis 333m [deprecated],17-10-13,14-12-16,2013,2016,image_collection,"esa, multispectral, nir, proba, probav, swir, vito",https://developers.google.com/earth-engine/datasets/catalog/VITO_PROBAV_S1_TOC_333M#terms-of-use,https://developers.google.com/earth-engine/datasets/images/VITO/VITO_PROBAV_S1_TOC_333M_sample.png +WCMC/WDPA/current/points,UN Environment World Conservation Monitoring Centre (UNEP-WCMC) / Protected Planet,WDPA: World Database on Protected Areas (points),01-07-17,01-01-30,2017,2030,table,"boundaries, iucn, marine, mpa, protected, wcmc, wdpa",https://developers.google.com/earth-engine/datasets/catalog/WCMC_WDPA_current_points#terms-of-use,https://developers.google.com/earth-engine/datasets/images/WCMC/WCMC_WDPA_current_points_sample.png +WCMC/WDPA/current/polygons,UN Environment World Conservation Monitoring Centre (UNEP-WCMC) / Protected Planet,WDPA: World Database on Protected Areas (polygons),01-07-17,01-01-30,2017,2030,table,"boundaries, iucn, marine, mpa, protected, wcmc, wdpa",https://developers.google.com/earth-engine/datasets/catalog/WCMC_WDPA_current_polygons#terms-of-use,https://developers.google.com/earth-engine/datasets/images/WCMC/WCMC_WDPA_current_polygons_sample.png +WCMC/biomass_carbon_density/v1_0,UNEP-WCMC (UN Environment Programme World Conservation Monitoring Centre),WCMC Above and Below Ground Biomass Carbon Density,01-01-10,31-12-10,2010,2010,image_collection,"biomass, carbon, unep, wcmc",https://developers.google.com/earth-engine/datasets/catalog/WCMC_biomass_carbon_density_v1_0#terms-of-use,https://developers.google.com/earth-engine/datasets/images/WCMC/WCMC_biomass_carbon_density_v1_0_sample.png +WHBU/NBAR_1YEAR,"Baccini, A. (Woods Hole Research Center), Sulla-Menashe, D. (Boston University)",MODIS 1-year Nadir BRDF-Adjusted Reflectance (NBAR) Mosaic,18-02-00,01-01-17,2000,2017,image_collection,"albedo, bu, mcd43a4, modis_derived, nbar, reflectance, whrc",https://developers.google.com/earth-engine/datasets/catalog/WHBU_NBAR_1YEAR#terms-of-use,https://developers.google.com/earth-engine/datasets/images/WHBU/WHBU_NBAR_1YEAR_sample.png +WHBU/NBAR_2YEAR,"Baccini, A. (Woods Hole Research Center), Sulla-Menashe, D. (Boston University)",MODIS 2-year Nadir BRDF-Adjusted Reflectance (NBAR) Mosaic,01-01-01,01-01-17,2001,2017,image_collection,"albedo, bu, mcd43a4, modis_derived, nbar, reflectance, whrc",https://developers.google.com/earth-engine/datasets/catalog/WHBU_NBAR_2YEAR#terms-of-use,https://developers.google.com/earth-engine/datasets/images/WHBU/WHBU_NBAR_2YEAR_sample.png +WHBU/NBAR_3YEAR,"Baccini, A. (Woods Hole Research Center), Sulla-Menashe, D. (Boston University)",MODIS 3-year Nadir BRDF-Adjusted Reflectance (NBAR) Mosaic,01-01-02,01-01-17,2002,2017,image_collection,"albedo, bu, mcd43a4, modis_derived, nbar, reflectance, whrc",https://developers.google.com/earth-engine/datasets/catalog/WHBU_NBAR_3YEAR#terms-of-use,https://developers.google.com/earth-engine/datasets/images/WHBU/WHBU_NBAR_3YEAR_sample.png +WHRC/biomass/tropical,WHRC,WHRC Pantropical National Level Carbon Stock Dataset,29-01-12,29-01-12,2012,2012,image,"aboveground, biomass, carbon, geophysical, pantropical, tropical, umd, whrc",https://developers.google.com/earth-engine/datasets/catalog/WHRC_biomass_tropical#terms-of-use,https://developers.google.com/earth-engine/datasets/images/WHRC/WHRC_biomass_tropical_sample.png +WORLDCLIM/V1/BIO,"University of California, Berkeley",WorldClim BIO Variables V1,01-01-60,01-01-91,1960,1991,image,"berkeley, bioclim, climate, coldest, diurnal, driest, isothermality, monthly, precipitation, seasonality, temperature, warmest, weather, wettest, worldclim",https://developers.google.com/earth-engine/datasets/catalog/WORLDCLIM_V1_BIO#terms-of-use,https://developers.google.com/earth-engine/datasets/images/WORLDCLIM/WORLDCLIM_V1_BIO_sample.png +WORLDCLIM/V1/MONTHLY,"University of California, Berkeley",WorldClim Climatology V1,01-01-60,01-01-91,1960,1991,image_collection,"berkeley, climate, monthly, precipitation, temperature, weather, worldclim",https://developers.google.com/earth-engine/datasets/catalog/WORLDCLIM_V1_MONTHLY#terms-of-use,https://developers.google.com/earth-engine/datasets/images/WORLDCLIM/WORLDCLIM_V1_MONTHLY_sample.png +WRI/GFW/FORMA/alerts,World Resources Institute / Global Forest Watch,FORMA Alerts,01-01-12,18-05-19,2012,2019,image,"daily, deforestation, forest, forma, gfw, modis, monitoring, wri",https://developers.google.com/earth-engine/datasets/catalog/WRI_GFW_FORMA_alerts#terms-of-use,https://developers.google.com/earth-engine/datasets/images/WRI/WRI_GFW_FORMA_alerts_sample.png +WRI/GFW/FORMA/raw_output_firms,World Resources Institute / Global Forest Watch,FORMA Raw Output FIRMS,08-04-17,18-05-19,2017,2019,image_collection,"daily, deforestation, forest, forma, gfw, modis, monitoring, wri",https://developers.google.com/earth-engine/datasets/catalog/WRI_GFW_FORMA_raw_output_firms#terms-of-use,https://developers.google.com/earth-engine/datasets/images/WRI/WRI_GFW_FORMA_raw_output_firms_sample.png +WRI/GFW/FORMA/raw_output_ndvi,World Resources Institute / Global Forest Watch,FORMA Raw Output NDVI,01-01-12,23-04-19,2012,2019,image_collection,"daily, deforestation, forest, forma, gfw, modis, monitoring, wri",https://developers.google.com/earth-engine/datasets/catalog/WRI_GFW_FORMA_raw_output_ndvi#terms-of-use,https://developers.google.com/earth-engine/datasets/images/WRI/WRI_GFW_FORMA_raw_output_ndvi_sample.png +WRI/GFW/FORMA/thresholds,World Resources Institute / Global Forest Watch,FORMA Alert Thresholds,01-01-12,01-01-16,2012,2016,image,"daily, deforestation, forest, forma, gfw, modis, monitoring, wri",https://developers.google.com/earth-engine/datasets/catalog/WRI_GFW_FORMA_thresholds#terms-of-use,https://developers.google.com/earth-engine/datasets/images/WRI/WRI_GFW_FORMA_thresholds_sample.png +WRI/GFW/FORMA/vegetation_tstats,World Resources Institute / Global Forest Watch,FORMA Vegetation T-Statistics,01-01-12,23-04-19,2012,2019,image_collection,"daily, deforestation, forest, forma, gfw, modis, monitoring, wri",https://developers.google.com/earth-engine/datasets/catalog/WRI_GFW_FORMA_vegetation_tstats#terms-of-use,https://developers.google.com/earth-engine/datasets/images/WRI/WRI_GFW_FORMA_vegetation_tstats_sample.png +WRI/GPPD/power_plants,World Resources Institute,Global Power Plant Database,11-06-18,11-06-18,2018,2018,table,"climate, energy, infrastructure, power, power_plants, wri",https://developers.google.com/earth-engine/datasets/catalog/WRI_GPPD_power_plants#terms-of-use,https://developers.google.com/earth-engine/datasets/images/WRI/WRI_GPPD_power_plants_sample.png +WWF/HydroATLAS/v1/Basins/level12,WWF,WWF HydroATLAS Basins Level 12,22-02-00,22-02-00,2000,2000,table,"geophysical, hydroatlas, hydrography, hydrology, hydrosheds, srtm, water, watershed, wwf",https://developers.google.com/earth-engine/datasets/catalog/WWF_HydroATLAS_v1_Basins_level12#terms-of-use,https://developers.google.com/earth-engine/datasets/images/WWF/WWF_HydroATLAS_v1_Basins_level12_sample.png +WWF/HydroSHEDS/03CONDEM,WWF,"WWF HydroSHEDS Hydrologically Conditioned DEM, 3 Arc-Seconds",11-02-00,22-02-00,2000,2000,image,"conditioned, dem, elevation, geophysical, hydrography, hydrology, hydrosheds, srtm, topography, water, wwf",https://developers.google.com/earth-engine/datasets/catalog/WWF_HydroSHEDS_03CONDEM#terms-of-use,https://developers.google.com/earth-engine/datasets/images/WWF/WWF_HydroSHEDS_03CONDEM_sample.png +WWF/HydroSHEDS/03DIR,WWF,"WWF HydroSHEDS Drainage Direction, 3 Arc-Seconds",11-02-00,22-02-00,2000,2000,image,"direction, drainage, flow, geophysical, hydrography, hydrology, hydrosheds, srtm, water, wwf",https://developers.google.com/earth-engine/datasets/catalog/WWF_HydroSHEDS_03DIR#terms-of-use,https://developers.google.com/earth-engine/datasets/images/WWF/WWF_HydroSHEDS_03DIR_sample.png +WWF/HydroSHEDS/03VFDEM,WWF,"WWF HydroSHEDS Void-Filled DEM, 3 Arc-Seconds",11-02-00,22-02-00,2000,2000,image,"dem, elevation, geophysical, hydrography, hydrology, hydrosheds, srtm, topography, void_filled, water, wwf",https://developers.google.com/earth-engine/datasets/catalog/WWF_HydroSHEDS_03VFDEM#terms-of-use,https://developers.google.com/earth-engine/datasets/images/WWF/WWF_HydroSHEDS_03VFDEM_sample.png +WWF/HydroSHEDS/15ACC,WWF,"WWF HydroSHEDS Flow Accumulation, 15 Arc-Seconds",11-02-00,22-02-00,2000,2000,image,"accumulation, drainage, flow, geophysical, hydrography, hydrology, hydrosheds, srtm, water, wwf",https://developers.google.com/earth-engine/datasets/catalog/WWF_HydroSHEDS_15ACC#terms-of-use,https://developers.google.com/earth-engine/datasets/images/WWF/WWF_HydroSHEDS_15ACC_sample.png +WWF/HydroSHEDS/15CONDEM,WWF,"WWF HydroSHEDS Hydrologically Conditioned DEM, 15 Arc-Seconds",11-02-00,22-02-00,2000,2000,image,"conditioned, dem, elevation, geophysical, hydrography, hydrology, hydrosheds, srtm, topography, water, wwf",https://developers.google.com/earth-engine/datasets/catalog/WWF_HydroSHEDS_15CONDEM#terms-of-use,https://developers.google.com/earth-engine/datasets/images/WWF/WWF_HydroSHEDS_15CONDEM_sample.png +WWF/HydroSHEDS/15DIR,WWF,"WWF HydroSHEDS Drainage Direction, 15 Arc-Seconds",11-02-00,22-02-00,2000,2000,image,"direction, drainage, flow, geophysical, hydrography, hydrology, hydrosheds, srtm, water, wwf",https://developers.google.com/earth-engine/datasets/catalog/WWF_HydroSHEDS_15DIR#terms-of-use,https://developers.google.com/earth-engine/datasets/images/WWF/WWF_HydroSHEDS_15DIR_sample.png +WWF/HydroSHEDS/30ACC,WWF,"WWF HydroSHEDS Flow Accumulation, 30 Arc-Seconds",11-02-00,22-02-00,2000,2000,image,"accumulation, drainage, flow, geophysical, hydrography, hydrology, hydrosheds, srtm, water, wwf",https://developers.google.com/earth-engine/datasets/catalog/WWF_HydroSHEDS_30ACC#terms-of-use,https://developers.google.com/earth-engine/datasets/images/WWF/WWF_HydroSHEDS_30ACC_sample.png +WWF/HydroSHEDS/30CONDEM,WWF,"WWF HydroSHEDS Hydrologically Conditioned DEM, 30 Arc-Seconds",11-02-00,22-02-00,2000,2000,image,"conditioned, dem, elevation, geophysical, hydrography, hydrology, hydrosheds, srtm, topography, water, wwf",https://developers.google.com/earth-engine/datasets/catalog/WWF_HydroSHEDS_30CONDEM#terms-of-use,https://developers.google.com/earth-engine/datasets/images/WWF/WWF_HydroSHEDS_30CONDEM_sample.png +WWF/HydroSHEDS/30DIR,WWF,"WWF HydroSHEDS Drainage Direction, 30 Arc-Seconds",11-02-00,22-02-00,2000,2000,image,"direction, drainage, flow, geophysical, hydrography, hydrology, hydrosheds, srtm, water, wwf",https://developers.google.com/earth-engine/datasets/catalog/WWF_HydroSHEDS_30DIR#terms-of-use,https://developers.google.com/earth-engine/datasets/images/WWF/WWF_HydroSHEDS_30DIR_sample.png +WWF/HydroSHEDS/v1/Basins/hybas_1,WWF,WWF HydroSHEDS Basins Level 1,11-02-00,22-02-00,2000,2000,table,"geophysical, hydrography, hydrology, hydrosheds, srtm, water, watershed, wwf",https://developers.google.com/earth-engine/datasets/catalog/WWF_HydroSHEDS_v1_Basins_hybas_1#terms-of-use,https://developers.google.com/earth-engine/datasets/images/WWF/WWF_HydroSHEDS_v1_Basins_hybas_1_sample.png +WWF/HydroSHEDS/v1/Basins/hybas_2,WWF,WWF HydroSHEDS Basins Level 2,11-02-00,22-02-00,2000,2000,table,"geophysical, hydrography, hydrology, hydrosheds, srtm, water, watershed, wwf",https://developers.google.com/earth-engine/datasets/catalog/WWF_HydroSHEDS_v1_Basins_hybas_2#terms-of-use,https://developers.google.com/earth-engine/datasets/images/WWF/WWF_HydroSHEDS_v1_Basins_hybas_2_sample.png +WWF/HydroSHEDS/v1/Basins/hybas_3,WWF,WWF HydroSHEDS Basins Level 3,11-02-00,22-02-00,2000,2000,table,"geophysical, hydrography, hydrology, hydrosheds, srtm, water, watershed, wwf",https://developers.google.com/earth-engine/datasets/catalog/WWF_HydroSHEDS_v1_Basins_hybas_3#terms-of-use,https://developers.google.com/earth-engine/datasets/images/WWF/WWF_HydroSHEDS_v1_Basins_hybas_3_sample.png +WWF/HydroSHEDS/v1/Basins/hybas_4,WWF,WWF HydroSHEDS Basins Level 4,11-02-00,22-02-00,2000,2000,table,"geophysical, hydrography, hydrology, hydrosheds, srtm, water, watershed, wwf",https://developers.google.com/earth-engine/datasets/catalog/WWF_HydroSHEDS_v1_Basins_hybas_4#terms-of-use,https://developers.google.com/earth-engine/datasets/images/WWF/WWF_HydroSHEDS_v1_Basins_hybas_4_sample.png +WWF/HydroSHEDS/v1/Basins/hybas_5,WWF,WWF HydroSHEDS Basins Level 5,11-02-00,22-02-00,2000,2000,table,"geophysical, hydrography, hydrology, hydrosheds, srtm, water, watershed, wwf",https://developers.google.com/earth-engine/datasets/catalog/WWF_HydroSHEDS_v1_Basins_hybas_5#terms-of-use,https://developers.google.com/earth-engine/datasets/images/WWF/WWF_HydroSHEDS_v1_Basins_hybas_5_sample.png +WWF/HydroSHEDS/v1/Basins/hybas_6,WWF,WWF HydroSHEDS Basins Level 6,11-02-00,22-02-00,2000,2000,table,"geophysical, hydrography, hydrology, hydrosheds, srtm, water, watershed, wwf",https://developers.google.com/earth-engine/datasets/catalog/WWF_HydroSHEDS_v1_Basins_hybas_6#terms-of-use,https://developers.google.com/earth-engine/datasets/images/WWF/WWF_HydroSHEDS_v1_Basins_hybas_6_sample.png +WWF/HydroSHEDS/v1/Basins/hybas_7,WWF,WWF HydroSHEDS Basins Level 7,11-02-00,22-02-00,2000,2000,table,"geophysical, hydrography, hydrology, hydrosheds, srtm, water, watershed, wwf",https://developers.google.com/earth-engine/datasets/catalog/WWF_HydroSHEDS_v1_Basins_hybas_7#terms-of-use,https://developers.google.com/earth-engine/datasets/images/WWF/WWF_HydroSHEDS_v1_Basins_hybas_7_sample.png +WWF/HydroSHEDS/v1/Basins/hybas_8,WWF,WWF HydroSHEDS Basins Level 8,11-02-00,22-02-00,2000,2000,table,"geophysical, hydrography, hydrology, hydrosheds, srtm, water, watershed, wwf",https://developers.google.com/earth-engine/datasets/catalog/WWF_HydroSHEDS_v1_Basins_hybas_8#terms-of-use,https://developers.google.com/earth-engine/datasets/images/WWF/WWF_HydroSHEDS_v1_Basins_hybas_8_sample.png +WWF/HydroSHEDS/v1/Basins/hybas_9,WWF,WWF HydroSHEDS Basins Level 9,11-02-00,22-02-00,2000,2000,table,"geophysical, hydrography, hydrology, hydrosheds, srtm, water, watershed, wwf",https://developers.google.com/earth-engine/datasets/catalog/WWF_HydroSHEDS_v1_Basins_hybas_9#terms-of-use,https://developers.google.com/earth-engine/datasets/images/WWF/WWF_HydroSHEDS_v1_Basins_hybas_9_sample.png +WWF/HydroSHEDS/v1/Basins/hybas_10,WWF,WWF HydroSHEDS Basins Level 10,11-02-00,22-02-00,2000,2000,table,"geophysical, hydrography, hydrology, hydrosheds, srtm, water, watershed, wwf",https://developers.google.com/earth-engine/datasets/catalog/WWF_HydroSHEDS_v1_Basins_hybas_10#terms-of-use,https://developers.google.com/earth-engine/datasets/images/WWF/WWF_HydroSHEDS_v1_Basins_hybas_10_sample.png +WWF/HydroSHEDS/v1/Basins/hybas_11,WWF,WWF HydroSHEDS Basins Level 11,11-02-00,22-02-00,2000,2000,table,"geophysical, hydrography, hydrology, hydrosheds, srtm, water, watershed, wwf",https://developers.google.com/earth-engine/datasets/catalog/WWF_HydroSHEDS_v1_Basins_hybas_11#terms-of-use,https://developers.google.com/earth-engine/datasets/images/WWF/WWF_HydroSHEDS_v1_Basins_hybas_11_sample.png +WWF/HydroSHEDS/v1/Basins/hybas_12,WWF,WWF HydroSHEDS Basins Level 12,11-02-00,22-02-00,2000,2000,table,"geophysical, hydrography, hydrology, hydrosheds, srtm, water, watershed, wwf",https://developers.google.com/earth-engine/datasets/catalog/WWF_HydroSHEDS_v1_Basins_hybas_12#terms-of-use,https://developers.google.com/earth-engine/datasets/images/WWF/WWF_HydroSHEDS_v1_Basins_hybas_12_sample.png +WWF/HydroSHEDS/v1/FreeFlowingRivers,WWF,WWF HydroSHEDS Free Flowing Rivers Network v1,11-02-00,22-02-00,2000,2000,table,"flow_regulation, geophysical, hydrography, hydrology, hydrosheds, river_networks, srtm, water, wwf",https://developers.google.com/earth-engine/datasets/catalog/WWF_HydroSHEDS_v1_FreeFlowingRivers#terms-of-use,https://developers.google.com/earth-engine/datasets/images/WWF/WWF_HydroSHEDS_v1_FreeFlowingRivers_sample.png +WorldPop/GP/100m/pop,WorldPop,WorldPop Global Project Population Data: Estimated Residential Population per 100x100m Grid Square,01-01-00,01-01-21,2000,2021,image_collection,"demography, population, worldpop",https://developers.google.com/earth-engine/datasets/catalog/WorldPop_GP_100m_pop#terms-of-use,https://developers.google.com/earth-engine/datasets/images/WorldPop/WorldPop_GP_100m_pop_sample.png +WorldPop/GP/100m/pop_age_sex,WorldPop,WorldPop Global Project Population Data: Estimated Age and Sex Structures of Residential Population per 100x100m Grid Square,01-01-20,01-01-21,2020,2021,image_collection,"demography, population, worldpop",https://developers.google.com/earth-engine/datasets/catalog/WorldPop_GP_100m_pop_age_sex#terms-of-use,https://developers.google.com/earth-engine/datasets/images/WorldPop/WorldPop_GP_100m_pop_age_sex_sample.png +WorldPop/GP/100m/pop_age_sex_cons_unadj,WorldPop,WorldPop Global Project Population Data: Constrained Estimated Age and Sex Structures of Residential Population per 100x100m Grid Square,01-01-20,01-01-21,2020,2021,image_collection,"demography, population, worldpop",https://developers.google.com/earth-engine/datasets/catalog/WorldPop_GP_100m_pop_age_sex_cons_unadj#terms-of-use,https://developers.google.com/earth-engine/datasets/images/WorldPop/WorldPop_GP_100m_pop_age_sex_cons_unadj_sample.png +WorldPop/POP,WorldPop,WorldPop Project Population Data: Estimated Residential Population per 100x100m Grid Square [deprecated],01-01-10,01-01-16,2010,2016,image_collection,"demography, population, worldpop",https://developers.google.com/earth-engine/datasets/catalog/WorldPop_POP#terms-of-use,https://developers.google.com/earth-engine/datasets/images/WorldPop/WorldPop_POP_sample.png +YALE/YCEO/UHI/Summer_UHI_yearly_pixel/v4,Yale Center for Earth Observation (YCEO),YCEO Surface Urban Heat Islands: Pixel-Level Composites of Yearly Summertime Daytime and Nighttime Intensity,01-01-03,31-12-18,2003,2018,image_collection,"climate, uhi, urban, yale",https://developers.google.com/earth-engine/datasets/catalog/YALE_YCEO_UHI_Summer_UHI_yearly_pixel_v4#terms-of-use,https://developers.google.com/earth-engine/datasets/images/YALE/YALE_YCEO_UHI_Summer_UHI_yearly_pixel_v4_sample.png +YALE/YCEO/UHI/UHI_all_averaged/v4,Yale Center for Earth Observation (YCEO),"YCEO Surface Urban Heat Islands: Spatially-Averaged Daytime and Nighttime Intensity for Annual, Summer, and Winter",01-01-03,31-12-18,2003,2018,image,"climate, uhi, urban, yale",https://developers.google.com/earth-engine/datasets/catalog/YALE_YCEO_UHI_UHI_all_averaged_v4#terms-of-use,https://developers.google.com/earth-engine/datasets/images/YALE/YALE_YCEO_UHI_UHI_all_averaged_v4_sample.png +YALE/YCEO/UHI/UHI_monthly_averaged/v4,Yale Center for Earth Observation (YCEO),YCEO Surface Urban Heat Islands: Spatially-Averaged Monthly Composites of Daytime and Nighttime Intensity,01-01-03,31-12-18,2003,2018,image,"climate, uhi, urban, yale",https://developers.google.com/earth-engine/datasets/catalog/YALE_YCEO_UHI_UHI_monthly_averaged_v4#terms-of-use,https://developers.google.com/earth-engine/datasets/images/YALE/YALE_YCEO_UHI_UHI_monthly_averaged_v4_sample.png +YALE/YCEO/UHI/UHI_yearly_averaged/v4,Yale Center for Earth Observation (YCEO),YCEO Surface Urban Heat Islands: Spatially-Averaged Yearly Composites of Annual Daytime and Nighttime Intensity,01-01-03,31-12-18,2003,2018,image_collection,"climate, uhi, urban, yale",https://developers.google.com/earth-engine/datasets/catalog/YALE_YCEO_UHI_UHI_yearly_averaged_v4#terms-of-use,https://developers.google.com/earth-engine/datasets/images/YALE/YALE_YCEO_UHI_UHI_yearly_averaged_v4_sample.png +YALE/YCEO/UHI/UHI_yearly_pixel/v4,Yale Center for Earth Observation (YCEO),YCEO Surface Urban Heat Islands: Pixel-Level Annual Daytime and Nighttime Intensity,01-01-03,31-12-18,2003,2018,image_collection,"climate, uhi, urban, yale",https://developers.google.com/earth-engine/datasets/catalog/YALE_YCEO_UHI_UHI_yearly_pixel_v4#terms-of-use,https://developers.google.com/earth-engine/datasets/images/YALE/YALE_YCEO_UHI_UHI_yearly_pixel_v4_sample.png +YALE/YCEO/UHI/Winter_UHI_yearly_pixel/v4,Yale Center for Earth Observation (YCEO),YCEO Surface Urban Heat Islands: Pixel-Level Yearly Composites of Wintertime Daytime and Nighttime Intensity,01-01-03,31-12-18,2003,2018,image_collection,"climate, uhi, urban, yale",https://developers.google.com/earth-engine/datasets/catalog/YALE_YCEO_UHI_Winter_UHI_yearly_pixel_v4#terms-of-use,https://developers.google.com/earth-engine/datasets/images/YALE/YALE_YCEO_UHI_Winter_UHI_yearly_pixel_v4_sample.png +projects/planet-nicfi/assets/basemaps/africa,Planet,Planet & NICFI Basemaps for Tropical Forest Monitoring - Tropical Africa,01-12-15,29-06-21,2015,2021,image_collection,"basemaps, forest, nicfi, planet, sr, surface_reflectance, tropics",https://developers.google.com/earth-engine/datasets/catalog/projects_planet-nicfi_assets_basemaps_africa#terms-of-use,https://developers.google.com/earth-engine/datasets/images/planet-nicfi/projects_planet-nicfi_assets_basemaps_africa_sample.png +projects/planet-nicfi/assets/basemaps/americas,Planet,Planet & NICFI Basemaps for Tropical Forest Monitoring - Tropical Americas,01-12-15,29-06-21,2015,2021,image_collection,"basemaps, forest, nicfi, planet, sr, surface_reflectance, tropics",https://developers.google.com/earth-engine/datasets/catalog/projects_planet-nicfi_assets_basemaps_americas#terms-of-use,https://developers.google.com/earth-engine/datasets/images/planet-nicfi/projects_planet-nicfi_assets_basemaps_americas_sample.png +projects/planet-nicfi/assets/basemaps/asia,Planet,Planet & NICFI Basemaps for Tropical Forest Monitoring - Tropical Asia,01-12-15,29-06-21,2015,2021,image_collection,"basemaps, forest, nicfi, planet, sr, surface_reflectance, tropics",https://developers.google.com/earth-engine/datasets/catalog/projects_planet-nicfi_assets_basemaps_asia#terms-of-use,https://developers.google.com/earth-engine/datasets/images/planet-nicfi/projects_planet-nicfi_assets_basemaps_asia_sample.png +NOAA/DMSP-OLS,Earth Observation Group-Payne Institute for Public Policy - Colorado School of Mines,Global Radiance-Calibrated Nighttime Lights Version 4 Defense Meteorological Program Operational Linescan System,16-03-96,31-07-11,1996,2011, image_collection,"dmsp, lights",https://developers.google.com/earth-engine/datasets/catalog/NOAA_DMSP-OLS_CALIBRATED_LIGHTS_V4#terms-of-use,https://developers.google.com/earth-engine/datasets/images/NOAA/NOAA_DMSP-OLS_CALIBRATED_LIGHTS_V4_sample.png +NOAA/VIIRS/DNB/MONTHLY_V1/VCMCFG,Earth Observation Group-Payne Institute for Public Policy-Colorado School of Mines,VIIRS Nighttime Day/Night Annual Band Composites,01-04-12,01-07-23,2012,2023,image_collection,"lights,noaa,viirs",https://developers.google.com/earth-engine/datasets/catalog/NOAA_VIIRS_DNB_MONTHLY_V1_VCMCFG#terms-of-use,https://developers.google.com/earth-engine/datasets/images/NOAA/NOAA_VIIRS_DNB_MONTHLY_V1_VCMCFG_sample.png diff --git a/y/gee/ee-muzzamil1-37ebc3dece52.json b/y/gee/ee-muzzamil1-37ebc3dece52.json new file mode 100644 index 0000000000000000000000000000000000000000..730f979a38db459b4f720e411a43f7a8515c5af3 --- /dev/null +++ b/y/gee/ee-muzzamil1-37ebc3dece52.json @@ -0,0 +1,13 @@ +{ + "type": "service_account", + "project_id": "ee-muzzamil1", + "private_key_id": "37ebc3dece52ae603066e6e3e6b614e8d4ba10cb", + "private_key": "-----BEGIN PRIVATE KEY-----\nMIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDA+XUtzhc3TZV5\nYrcV4a/9CN4gBO8zHLQjbWonnxp2eaogzByhRouctGSqJ5KVvnYFQFZcfN4wa+06\nj0Fr9uktH+PHkqDZ2OprRED0dzhgwCoSG59YoRgURbxWH5qCdr6dDYWd9/u4aJLW\nIywyqB/6XsuEnqkuQ5NnFcwrM/5rxn5y/3aXygNipiW9k5s/Q5UQXY8rh1QsTGZj\nJQmYokZZbCYGeoKd+c+tqVDPeR7nO1TT2bqzXAmNB+9MRIW3SBGhvNJu4ejHNti+\ncKb70j5KxJQ/PDAGbW1oZg2MUSGiLS16eRgpROlsNOqMWLAQo9iLl/KFSEpolAEC\nM+ocQJSTAgMBAAECggEARki1NpUo3IIb7mWXVFdqT0kzCctySZXrQDoCH2Mx8rO2\nVJKy3MSCZfVH8rdOCs8fUiNQMQhjrpQoh5sUk1uPKtnCDvanMiDwpFfsJn3joU1s\nJUM9Qr0NtZh+k4mYL2tLWo1JvLLM0in4TRjraJnWZ8yt6GQXL1v6bGHChnu97wdv\nIb411CSEsL7uW/RuAPr2UWhdx5D6FqzXtPEhsHgG9Iq/g7JGyP0/s854CxkWjVA/\nr0jxmzVfgg+lMtZYffp3PEA26XzZTAvxPPZ9sqvIyfQKu2lJnEUQfevoBtfJrlxj\n6Kd184ps4vaoDBellIZsKI46RAfdF2H1Wn4YaCYYsQKBgQDkHnR0JEI8D+rXAIUt\nap6rBiTKOLUv8Ai1UpwlZrRCJ22/UgvQgyLdUejFKqq5MGQDShnugm4q4Yk/8rP/\n+rjKzZfZLE85nJdubpeL7F1jozJDV8bJ7ZqZHYsadR6WpbLG9sU8WJ0nuUAzGpBt\n6l4H2ZTUp6fDzJVtNJL4kgN+YwKBgQDYj2Bov21oXIA2N5CTv/IB78RAR/w2yFra\ngLxi0CiR+/QogYBvXwM7xTQldfVGFlllgJVVTZTJKAKhs9d0M/5ZAVWt77K/t102\nVvNvDoSpxd23TolEQPBAHb3hS5HL7gaDnGHVNV09f6yILqGM0gMIvS73uZQ5E2fn\nptTkHBUQEQKBgQCZVMsr4c9PddeBCs15mIfsJuYFsxY+kZYY4t0n2p/hM4V2Ktzc\nG7kMkGjoVmSIs7kV6PIDOlJ4qj5J6IYK0mjxkD238SuTaujyho2AtLCVL3WyhEaP\nJhFbR9tfPkgANII1cFtk059WuxMnBnz8FKN9nUeHpOWEG3h4/fSn9eU5RwKBgQCR\nywzT2DQ28zdZyNSrs6igxyNvR0c0NnR77/lj6NG3XlFEx9KIqAWMQrpVkfE7ayZq\nIEPo9t75Adert2CQmcRddXmSLPJBAZheUfF3TeXgShZ3JwdgjPtxntRLjc2s5iU6\ni5iNqmyIT6D+2a3nGSfzxTGOk0CHoFnuabGflIxVkQKBgAIXy7g1Qb8nF88w4G6N\nHAmtRYsrvVQV9pG0atGJTEu4lPprbLmZNRWRxP9GPDOnf4WlLQ81g2Dk7J9vTt68\noLUsSgUNGR/FY68V/56fM3VwPuctE+6WrHpx9F09kMLPJaFTmmGF5SDcaH1OjPel\nsWmCRdg+vzGkP88aqRqxCJ/N\n-----END PRIVATE KEY-----\n", + "client_email": "geo-spatial-app@ee-muzzamil1.iam.gserviceaccount.com", + "client_id": "101116468635843693944", + "auth_uri": "https://accounts.google.com/o/oauth2/auth", + "token_uri": "https://oauth2.googleapis.com/token", + "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs", + "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/geo-spatial-app%40ee-muzzamil1.iam.gserviceaccount.com", + "universe_domain": "googleapis.com" +} diff --git a/y/gee/ee-muzzamil2.json b/y/gee/ee-muzzamil2.json new file mode 100644 index 0000000000000000000000000000000000000000..519f0ed40ef043de12655c0062996a1765acd787 --- /dev/null +++ b/y/gee/ee-muzzamil2.json @@ -0,0 +1,12 @@ +{ + "installed":{ + "client_id":"153528832810-vdg7lpl8flfbtvrddas37hsgkjf0o8mt.apps.googleusercontent.com", + "project_id":"ee-muzzamil1","auth_uri":"https://accounts.google.com/o/oauth2/auth", + "token_uri":"https://oauth2.googleapis.com/token", + "auth_provider_x509_cert_url":"https://www.googleapis.com/oauth2/v1/certs", + "client_secret":"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", + "redirect_uris":["http://localhost"] + } + } + + \ No newline at end of file diff --git a/y/gee/ee-muzzamil3.json b/y/gee/ee-muzzamil3.json new file mode 100644 index 0000000000000000000000000000000000000000..f8db9a16a365c8cadb4521b2833020b4996b658a --- /dev/null +++ b/y/gee/ee-muzzamil3.json @@ -0,0 +1,13 @@ +{ + "type": "service_account", + "project_id": "ee-muzzamil1", + "private_key_id": "2cd2a52d422ca684326f73c466bdb749a0c96b83", + "private_key": "-----BEGIN PRIVATE KEY-----\nMIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDJ0MFy7kR2kML1\n5HclRvxAuV+F9EEZxcXRYl8YntjrRTkzoiKBM/0PATjwBNPmjc0bcR3gCW4vo2OG\nZWd88Vhm4Tkt7CIX9YcL9j53pmNF/AyFWxeMwtgCzGO3VjH8wyr23DxVy+ahO1ey\nf9ISfpKFcjF1fJMVFHbcNifpIhjnFrAcyh7u/gv6Fzi2ZoCfs903gjItGbQCe5JA\nH+GGDqM3qZrxTRKLGg5y5plbUg7Es0IsHhEkmHC3pO7/qp6Sc55FMY4n+Dhu8anD\n/92E0agBnx4GOj9W+2fn8ga/pvnpohMlDF9CvISyZrHAFH9WL6Sf9uQMskm88Wcu\nN8T2NNmxAgMBAAECggEAAQgXJQ5AvVZqGLWtQjyFp5MLAPVJq+cN5s8Y61hMhY9a\nBoCKqpxoa74220s7Bg+tf7lpTK7fqFCufo5gJAxbxlLaZvixB+xSX2ZH1Xa9RStP\nqRLZIPgSAJmo3NQM91zMCG0BxfJ/4E0cWqY6nauV9iaqSA519gKfxOpl89QfynaZ\n49XnYf65UuQa5yHQSj8x/scruSh+HQVzo1lY2KqZ2U07NMRPv4Azg8aCGSCd8hQG\ncdrsajgYCbpon1AXUTsUC34REgJhbvyOX+4UJSgeIq8wuZuIhhk73ZpTxVf9MAPp\nSURYX8JoiOaSwmFl6DOtc4C8cbuUdHc+slFa7aRzwQKBgQD74W6rT7STm1rgZhBv\nBkogB+Gl6Ykg/gpHSno6eDMJbZY9wQTNWnZWok1g00Gv0S/wBCHig6ixX2M6NkVN\nqHfrFZfZiBvevu0jcRLAWX5wZdYg0maiXwOZTtqTr2MKyhZkjRajMZZ2S/co7ZWd\nWS/+zMv9d0GiKhk+ZyAFruneGQKBgQDNHbY425NaGN4gWPV1qRcFza9yy2xzSxRS\nwO4Zq7N4PWfMwpvvvtDK7+mOZeTBw2Rap1JT9uZhfJiOBr/FlmKnSX9LHBPMCKua\nldPWr1PCE4MizTqtTDZ/P4kGzTN69vf3DezWu7oVCqbQsMBh6XKKLTKVOPS20oAn\nlWGvO4obWQKBgQDO0UfBumyXVtTDtIqB3zQ2IMKTLLLAOFfQOcMrB09Ayo62niqH\nQ2Qvtoy6mDwzVRx7g6kfCOQW4C/luHInVdFBYjWRFEVuHG8yzsGK1vEO8U9lG93S\nLRoTY7/ty/ETBuRkI8UWsrzM3YtQO+TBkl3qZdaJhMaLlO2tY5fTks/M4QKBgAu4\nk+4h1gTDAQZ2LuifVfp1632y1CqucqXb8n8zCZloYOMZh9GmZMYD+aOyfOT5pmVr\nxE+Z/0Y42XrcNd8zncWTdJu1KghxwmSeBTHyaOXhOZAmjCDVBxQ0bD8gQL3ZGQhc\nGlmW9qY3KpsoToYJ0grFVGukio9b7gjVB3T9AQJZAoGAMyIWC/FETtGHvliH5mX1\nf27Z1rcN63GmuXaOpaEGriZveclqS+Q7snYE3v0o9ucmzhQlL4XU5w4yM6ERgKrd\nOL1cHItvlHilS91XaUQuWpOaqmogPVIgZIPqym4Fn0e5rr5vr/Fg7jxsxwcWaj6i\nV52zywyPE6D184SMYO1/rss=\n-----END PRIVATE KEY-----\n", + "client_email": "gee-ned-project@ee-muzzamil1.iam.gserviceaccount.com", + "client_id": "101116468635843693944", + "auth_uri": "https://accounts.google.com/o/oauth2/auth", + "token_uri": "https://oauth2.googleapis.com/token", + "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs", + "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/geo-spatial-app%40ee-muzzamil1.iam.gserviceaccount.com", + "universe_domain": "googleapis.com" +} diff --git a/y/gee/ee-tabassum4502862-7b8c82e6f9a3.json b/y/gee/ee-tabassum4502862-7b8c82e6f9a3.json new file mode 100644 index 0000000000000000000000000000000000000000..c287caf64c24cc3b5d8549ac65b33099c5ad0877 --- /dev/null +++ b/y/gee/ee-tabassum4502862-7b8c82e6f9a3.json @@ -0,0 +1,13 @@ +{ + "type": "service_account", + "project_id": "ee-tabassum4502862", + "private_key_id": "7b8c82e6f9a3decb3bda17d10306008a6e533c40", + "private_key": "-----BEGIN PRIVATE KEY-----\nMIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDlBbK9z0U4XCxc\nP5Pe7l/u2t1PRn3jOsZDCz7ZCbIL3qaRCDudUAIe5moheWsMcsyUx64Jm/sFFc9W\nxZKIMwS24yAdiWZRSt7NYPe9LgJFE02udc8HKWfD3h739pXjjFdcll7iJ8DdwXi8\nJlOwvSePtYchqA7gb11kR5DLbMSQedBBhmzu1hANUviLh5I+/FYX1x7HOBj5OtGr\nt8tRv+TL35u2FUgDeJdPSDcd6K1Ksq5QwA5tRMiLFwF3PvEb7AxPWFpNKFVs6AVT\n+/5UMnF5y0CJDoOypFUxUwZ2T6yCbTXQ1G0KNnV97FPme11tiO9yHjd///XVmR5t\nXSwaM9B/AgMBAAECggEADYd2JSda5/bt+e8ZjahYS3RrcXTxF9zPfINsDYc4mOHo\nxhWN6/+feHLVHzAchko70qgvHEs2G3lL28zlGJ2m8CTfr08AF9pL6icJy4etw6Xd\nx2oXNk2YXyY+fxh2h1AxkvshFMwTZSY6Oycqd3zdGuy21GKoqlJ52mQt5g6BWCV1\nb7IjDR+DIWGBKP2BeX9VuzqZSmBqApPuKCbLy3MLsP32ApGnyn3pKKneX4r0OqKx\nRiG5pAI0KWo+Hd1IcWi613hUA5qapMAls478n5xTWgfj0TntED58U4HCbbf1ZjDO\nSgJUn+ibUUWNKsPGd4SFBUP+ANN8rwlvbZRLgxqZfQKBgQDzsejIEiKgHCBS9idP\n2itF5rxWc+RouLSJdkr3h23zGqbV8PDx4gqsrWPS7oWjVJn5T6MTrc1k4w4YepRQ\ne36iDPvaK5lg2lMFxw4gXpyEEQ1WBqlld3jWawHLb1rzW1E3mrxWBsgQ3CqLuvWv\n4V8CCxd1LtE1rjpTZDxNYFcrEwKBgQDwlh/LEJI55IawIXMCBYtR8rpF3S6zEBes\new6ak5zi+iWQNRzGRH6zvo4hPXuWCiMpIVDWABzz/2yflP2G5EJq8Lg/uwZkduPJ\n2BEh3MrcwV2Mzbo74GlAJ8/UZ19ftbnMwzp3NVb4XIiWp7US3RFTnJYQyRl9soVY\nimL0hUkmZQKBgCGUx5YiYaEcnxuvjfVEBCiKxjNHnxcLNN2obmYzxGP2rTzYCevb\nEUuATTw44DOEqf8gCUHh9mbLnxqicaOxkN612VLUJTuiekRWjMzLHNhaHTNYkalI\n0F8DueiVvLvCPqvh58gXASTJohdFOSv2a4g1jRL505yJGMJ7EpA7EWf/AoGAfNja\nzMzfpO1DO7lP7jekUbVNFp4t8rwiHN6K+IoretnmjkwRj43R1kLHjNZUAMtn7Zsd\nUMAkRjZBTxrI6awgD1C1vFS4f3/2uzLFyTXDjAVIH55Oy22sEJ/YSNgP9SHftjOF\nboEejamvM8b5vz07FZGHilRhRwpSCl1d9pgIGsUCgYEAsagj3WYtIq1+ppuWFBfr\nmnXMwrGHhSZhFHLgq655aktVNJJA6cMdqg8lU3J1MMWDOoenzmj4FklUQLckUbNS\nAHPJPg4P+yn+DTd/fkHBMt+aSAksYcnrjeJZ3nVe+b9G2WoX/U5Q1dOGhc+ySSQM\nRwwyIaVmnKGXGkrWpgZrEHc=\n-----END PRIVATE KEY-----\n", + "client_email": "earth-engine-default-service-a@ee-tabassum4502862.iam.gserviceaccount.com", + "client_id": "109205562121119384216", + "auth_uri": "https://accounts.google.com/o/oauth2/auth", + "token_uri": "https://oauth2.googleapis.com/token", + "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs", + "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/earth-engine-default-service-a%40ee-tabassum4502862.iam.gserviceaccount.com", + "universe_domain": "googleapis.com" +} diff --git a/y/gee/forms.py b/y/gee/forms.py new file mode 100644 index 0000000000000000000000000000000000000000..0ba81c08a7ceb9fe19ef4dc04ac79b9840aaa325 --- /dev/null +++ b/y/gee/forms.py @@ -0,0 +1,20 @@ +from django import forms +from .gee import data_gee +from django.contrib.auth.models import User + +from django.contrib.auth.forms import UserCreationForm + + + +class dataset_geemap(forms.Form): + data, f = data_gee() + + options = [(row['id'], row['title']) for index, row in data.iterrows()] + option = forms.ChoiceField(choices=options) + + + +class SignUpForm (UserCreationForm): + class Meta: + model=User + fields = {'username','email', 'password1', 'password2'} \ No newline at end of file diff --git a/y/gee/gee.py b/y/gee/gee.py new file mode 100644 index 0000000000000000000000000000000000000000..2a6c946a3b68a6683db1ef478a5637846aac1b1e --- /dev/null +++ b/y/gee/gee.py @@ -0,0 +1,4402 @@ +import ee +import os +import pandas as pd + +def data_gee(): + file = (os.path.dirname(os.path.abspath(__file__)) + '/data_gee/gee_catalog.csv') + data = pd.read_csv(file) + delete = [] + for i in range(len(data)): + d = data['title'].iloc[i] + f = d.find('deprecated') + if f != -1: + delete.append(i) + + data = data.drop(delete, axis=0).reset_index(drop=True) + f = data[['id', 'title']] + return(f, data) + +def type_map(Map, cod): + if cod == 'AAFC/ACI': + dataset = ee.ImageCollection('AAFC/ACI') + crop2016 = dataset.filter(ee.Filter.date('2016-01-01', '2016-12-31')).first() + Map.setCenter(-103.8881, 53.0371, 10) + Map.addLayer(crop2016) + + elif cod == 'ACA/reef_habitat/v2_0': + dataset = ee.Image('ACA/reef_habitat/v2_0') + reefExtent = dataset.select('reef_mask').selfMask() + geomorphicZonation = dataset.select('geomorphic').selfMask() + benthicHabitat = dataset.select('benthic').selfMask() + Map.setCenter(-149.56194, -17.00872, 13); + Map.setOptions('SATELLITE') + Map.addLayer(reefExtent, {}, 'Global reef extent') + Map.addLayer(geomorphicZonation, {}, 'Geomorphic zonation') + Map.addLayer(benthicHabitat, {}, 'Benthic habitat') + + elif cod == 'AHN/AHN2_05M_INT': + dataset = ee.Image('AHN/AHN2_05M_INT') + elevation = dataset.select('elevation') + elevationVis = {'min': -5.0,'max': 30.0} + Map.setCenter(5.76583, 51.855276, 16) + Map.addLayer(elevation, elevationVis, 'Elevation') + + elif cod == 'AHN/AHN2_05M_NON': + dataset = ee.Image('AHN/AHN2_05M_NON') + elevation = dataset.select('elevation') + elevationVis = { + 'min': -5.0, + 'max': 30.0 + } + Map.setCenter(5.80258, 51.78547, 14) + Map.addLayer(elevation, elevationVis, 'Elevation') + + elif cod == 'AHN/AHN2_05M_RUW': + dataset = ee.Image('AHN/AHN2_05M_RUW') + elevation = dataset.select('elevation') + elevationVis = { + 'min': -5.0, + 'max': 30.0 + } + Map.setCenter(5.76583, 51.855276, 16) + Map.addLayer(elevation, elevationVis, 'Elevation') + + elif cod == 'ASTER/AST_L1T_003': + dataset = ee.ImageCollection('ASTER/AST_L1T_003').filter(ee.Filter.date('2018-01-01', '2018-08-15')) + falseColor = dataset.select(['B3N', 'B02', 'B01']) + falseColorVis = { + 'min': 0.0, + 'max': 255.0, + } + Map.setCenter(-122.0272, 39.6734, 11) + Map.addLayer(falseColor.median(), falseColorVis, 'False Color') + + elif cod == 'AU/GA/AUSTRALIA_5M_DEM': + dataset = ee.ImageCollection('AU/GA/AUSTRALIA_5M_DEM') + elevation = dataset.select('elevation') + elevationVis = { + 'min': 0.0, + 'max': 150.0, + 'palette': ['0000ff', '00ffff', 'ffff00', 'ff0000', 'ffffff'] + } + Map.setCenter(140.1883, -35.9113, 8) + Map.addLayer(elevation, elevationVis, 'Elevation') + + elif cod == 'AU/GA/DEM_1SEC/v10/DEM-H': + dataset = ee.Image('AU/GA/DEM_1SEC/v10/DEM-H') + elevation = dataset.select('elevation') + elevationVis = { + 'min': -10.0, + 'max': 1300.0, + 'palette': [ + '3ae237', 'b5e22e', 'd6e21f', 'fff705', 'ffd611', 'ffb613', 'ff8b13', + 'ff6e08', 'ff500d', 'ff0000', 'de0101', 'c21301', '0602ff', '235cb1', + '307ef3', '269db1', '30c8e2', '32d3ef', '3be285', '3ff38f', '86e26f' + ], + } + Map.setCenter(133.95, -24.69, 5) + Map.addLayer(elevation, elevationVis, 'Elevation') + + elif cod == 'AU/GA/DEM_1SEC/v10/DEM-S': + dataset = ee.Image('AU/GA/DEM_1SEC/v10/DEM-S') + elevation = dataset.select('elevation') + elevationVis = { + 'min': -10.0, + 'max': 1300.0, + 'palette': [ + '3ae237', 'b5e22e', 'd6e21f', 'fff705', 'ffd611', 'ffb613', 'ff8b13', + 'ff6e08', 'ff500d', 'ff0000', 'de0101', 'c21301', '0602ff', '235cb1', + '307ef3', '269db1', '30c8e2', '32d3ef', '3be285', '3ff38f', '86e26f' + ], + } + Map.setCenter(133.95, -24.69, 5) + Map.addLayer(elevation, elevationVis, 'Elevation') + + elif cod == 'BIOPAMA/GlobalOilPalm/v1': + dataset = ee.ImageCollection('BIOPAMA/GlobalOilPalm/v1') + opClass = dataset.select('classification') + mosaic = opClass.mosaic() + classificationVis = { + 'min': 1, + 'max': 3, + 'palette': ['ff0000','ef00ff', '696969'] + } + mask = mosaic.neq(3) + mask = mask.where(mask.eq(0), 0.6) + + Map.addLayer(mosaic.updateMask(mask), classificationVis, 'Oil palm plantation type', True) + Map.setCenter(-73.628998,7.320244,8) + + elif cod == "BLM/AIM/v1/TerrADat/TerrestrialAIM": + greens = ee.List(["#00441B", "#00682A", "#37A055", "#5DB96B", "#AEDEA7", "#E7F6E2", "#F7FCF5"]) + reds = ee.List(["#67000D", "#9E0D14", "#E32F27", "#F6553D", "#FCA082", "#FEE2D5", "#FFF5F0"]) + + def normalize(value, min, max): + return value.subtract(min).divide(ee.Number(max).subtract(min)) + + def setColor(feature, property, min, max, palette): + value = normalize(feature.getNumber(property), min, max).multiply(palette.size()).min(palette.size().subtract(1)).max(0) + return feature.set({"style": {"color": palette.get(value.int())}}) + + fc = ee.FeatureCollection("BLM/AIM/v1/TerrADat/TerrestrialAIM") + woodyHeightStyle = lambda f:setColor(f, "WoodyHgt_Avg", 0, 100, greens) + bareSoilStyle = lambda f: setColor(f, "BareSoilCover_FH", 0, 100, reds) + + treeHeight = fc.filter("WoodyHgt_Avg > 1").map(woodyHeightStyle) + bareSoil = fc.filter("BareSoilCover_FH > 1").map(bareSoilStyle) + Map.addLayer(bareSoil.style({"styleProperty": "style", "pointSize": 3})) + Map.addLayer(treeHeight.style({"styleProperty": "style", "pointSize": 1})) + Map.setCenter(-110, 40, 6) + + elif cod == "BNU/FGS/CCNL/v1": + dataset = ee.ImageCollection("BNU/FGS/CCNL/v1").filter(ee.Filter.date("2010-01-01", "2010-12-31")) + nighttimeLights = dataset.select("b1") + nighttimeLightsVis = { + "min": 3.0, + "max": 60.0, + } + Map.setCenter(31.4, 30, 6) + Map.addLayer(nighttimeLights, nighttimeLightsVis, "Nighttime Lights") + + elif cod == "CAS/IGSNRR/PML/V2_v017": + dataset = ee.ImageCollection("CAS/IGSNRR/PML/V2_v017") + visualization = { + 'bands': ["GPP"], + "min": 0.0, + "max": 9.0, + "palette": ["a50026", "d73027", "f46d43", "fdae61", "fee08b", "ffffbf", + "d9ef8b", "a6d96a", "66bd63", "1a9850", "006837"]} + Map.setCenter(0.0, 15.0, 2) + Map.addLayer(dataset, visualization, "PML_V2 0.1.7 Gross Primary Product (GPP)") + + elif cod == "CGIAR/SRTM90_V4": + dataset = ee.Image("CGIAR/SRTM90_V4") + elevation = dataset.select("elevation") + slope = ee.Terrain.slope(elevation) + Map.setCenter(-112.8598, 36.2841, 10) + Map.addLayer(slope, {"min": 0, "max": 60}, "slope") + + elif cod == "CIESIN/GPWv411/GPW_Basic_Demographic_Characteristics": + dataset = ee.ImageCollection("CIESIN/GPWv411/GPW_Basic_Demographic_Characteristics").first() + raster = dataset.select("basic_demographic_characteristics") + raster_vis = { + "max": 1000.0, + "palette": ["ffffe7","86a192","509791","307296","2c4484","000066"], + "min": 0.0 + } + Map.setCenter(79.1, 19.81, 3) + Map.addLayer(raster, raster_vis, "basic_demographic_characteristics") + + elif cod == "CIESIN/GPWv411/GPW_Data_Context": + dataset = ee.Image("CIESIN/GPWv411/GPW_Data_Context") + raster = dataset.select("data_context") + raster_vis = { + "min": 200.0, + "palette": ["ffffff","099506","f04923","e62440","706984","a5a5a5","ffe152","d4cc11","000000"], + "max": 207.0 + } + Map.setCenter(-88.6, 26.4, 1) + Map.addLayer(raster, raster_vis, "data_context") + + elif cod == "CIESIN/GPWv411/GPW_Land_Area": + dataset = ee.Image("CIESIN/GPWv411/GPW_Land_Area") + raster = dataset.select("land_area") + raster_vis = { + "min": 0.0, + "palette": ["ecefb7","745638"], + "max": 0.86 + } + Map.setCenter(26.4, 19.81, 1) + Map.addLayer(raster, raster_vis, "land_area") + + elif cod == "CIESIN/GPWv411/GPW_Mean_Administrative_Unit_Area": + dataset = ee.Image("CIESIN/GPWv411/GPW_Mean_Administrative_Unit_Area") + raster = dataset.select("mean_administrative_unit_area") + raster_vis = { + "min": 0.0, + "palette": ["ffffff","747474","656565","3c3c3c","2f2f2f","000000"], + "max": 40000.0 + } + Map.setCenter(-88.6, 26.4, 1) + Map.addLayer(raster, raster_vis, "mean_administrative_unit_area") + + elif cod == "CIESIN/GPWv411/GPW_National_Identifier_Grid": + dataset = ee.Image("CIESIN/GPWv411/GPW_National_Identifier_Grid") + raster = dataset.select("national_identifier_grid") + raster_vis = { + "min": 4.0, + "palette": ["000000","ffffff"], + "max": 999.0 + } + Map.setCenter(-88.6, 26.4, 1) + Map.addLayer(raster, raster_vis, "national_identifier_grid") + + elif cod == "CIESIN/GPWv411/GPW_Population_Count": + dataset = ee.ImageCollection("CIESIN/GPWv411/GPW_Population_Count").first() + raster = dataset.select("population_count") + raster_vis = { + "max": 1000.0, + "palette": ["ffffe7","86a192","509791","307296","2c4484","000066"], + "min": 0.0} + Map.setCenter(79.1, 19.81, 3) + Map.addLayer(raster, raster_vis, "population_count") + + elif cod == "CIESIN/GPWv411/GPW_Population_Density": + dataset = ee.ImageCollection("CIESIN/GPWv411/GPW_Population_Density").first() + raster = dataset.select("population_density") + raster_vis = { + "max": 1000.0, + "palette": ["ffffe7","FFc869","ffac1d","e17735","f2552c","9f0c21"], + "min": 200.0 + } + Map.setCenter(79.1, 19.81, 3) + Map.addLayer(raster, raster_vis, "population_density") + + elif cod == "CIESIN/GPWv411/GPW_UNWPP-Adjusted_Population_Count": + dataset = ee.ImageCollection("CIESIN/GPWv411/GPW_UNWPP-Adjusted_Population_Count").first() + raster = dataset.select("unwpp-adjusted_population_count") + raster_vis = {"max": 1000.0, "palette": ["ffffe7","86a192","509791","307296","2c4484","000066"], "min": 0.0} + Map.setCenter(79.1, 19.81, 3) + Map.addLayer(raster, raster_vis, "unwpp-adjusted_population_count") + + elif cod == "CIESIN/GPWv411/GPW_UNWPP-Adjusted_Population_Density": + dataset = ee.ImageCollection("CIESIN/GPWv411/GPW_UNWPP-Adjusted_Population_Density").first() + raster = dataset.select("unwpp-adjusted_population_density") + raster_vis = {"max": 1000.0, "palette": ["ffffe7","FFc869","ffac1d","e17735","f2552c","9f0c21"], "min": 0.0} + Map.setCenter(79.1, 19.81, 3) + Map.addLayer(raster, raster_vis, "unwpp-adjusted_population_density") + + elif cod == "CIESIN/GPWv411/GPW_Water_Area": + dataset = ee.Image("CIESIN/GPWv411/GPW_Water_Area") + raster = dataset.select("water_area") + raster_vis = { + "min": 0.0, + "palette": ["f5f6da","180d02"], + "max": 0.860558} + Map.setCenter(79.1, 19.81, 3) + Map.addLayer(raster, raster_vis, "water_area") + + elif cod == "CIESIN/GPWv411/GPW_Water_Mask": + dataset = ee.Image("CIESIN/GPWv411/GPW_Water_Mask") + raster = dataset.select("water_mask") + raster_vis = { + "min": 0.0, + "palette": ["005ce6","00ffc5","bed2ff","aed0f1"], + "max": 3.0 + } + Map.setCenter(-88.6, 26.4, 1) + Map.addLayer(raster, raster_vis, "water_mask") + + elif cod == "COPERNICUS/CORINE/V20/100m/2012": + dataset = ee.Image("COPERNICUS/CORINE/V20/100m/2012") + landCover = dataset.select("landcover") + Map.setCenter(16.436, 39.825, 6) + Map.addLayer(landCover, {}, "Land Cover") + + + elif cod == "COPERNICUS/DEM/GLO30": + dataset = ee.ImageCollection("COPERNICUS/DEM/GLO30") + elevation = dataset.select("DEM") + elevationVis = { + "min": 0.0, + "max": 1000.0, + 'palette': ["0000ff","00ffff","ffff00","ff0000","ffffff"], + } + Map.setCenter(-73.388672,5.353521, 4) + Map.addLayer(elevation, elevationVis, "DEM") + + elif cod == "COPERNICUS/Landcover/100m/Proba-V-C3/Global": + dataset = ee.Image("COPERNICUS/Landcover/100m/Proba-V-C3/Global/2019").select("discrete_classification") + Map.setCenter(-88.6, 26.4, 1) + Map.addLayer(dataset, {}, "Land Cover") + + elif cod == "COPERNICUS/S1_GRD": + def ff(image): + edge = image.lt(-30.0) + maskedImage = image.mask() + maskedImage = maskedImage.And(edge.Not()) + return image.updateMask(maskedImage) + + imgVV = ee.ImageCollection("COPERNICUS/S1_GRD") \ + .filter(ee.Filter.listContains("transmitterReceiverPolarisation", "VV")) \ + .filter(ee.Filter.eq("instrumentMode", "IW")) \ + .select("VV") \ + .map(lambda x:ff(x)) + + desc = imgVV.filter(ee.Filter.eq("orbitProperties_pass", "DESCENDING")) + asc = imgVV.filter(ee.Filter.eq("orbitProperties_pass", "ASCENDING")) + + spring = ee.Filter.date("2015-03-01", "2015-04-20") + lateSpring = ee.Filter.date("2015-04-21", "2015-06-10") + summer = ee.Filter.date("2015-06-11", "2015-08-31") + + descChange = ee.Image.cat(desc.filter(spring).mean(),desc.filter(lateSpring).mean(),desc.filter(summer).mean()) + ascChange = ee.Image.cat(asc.filter(spring).mean(),asc.filter(lateSpring).mean(),asc.filter(summer).mean()) + Map.setCenter(-73.388672,5.353521, 6) + Map.addLayer(ascChange, {"min": -25, "max": 5}, "Multi-T Mean ASC", True) + Map.addLayer(descChange, {"min": -25, "max": 5}, "Multi-T Mean DESC", True) + + elif cod == "COPERNICUS/S2": + def maskS2clouds(image): + qa = image.select("QA60") + cloudBitMask = 1 << 10 + cirrusBitMask = 1 << 11 + mask = qa.bitwiseAnd(cloudBitMask).eq(0).And(qa.bitwiseAnd(cirrusBitMask).eq(0)) + return image.updateMask(mask).divide(10000) + + dataset = ee.ImageCollection("COPERNICUS/S2").filterDate("2018-01-01", "2018-01-31").filter(ee.Filter.lt("CLOUDY_PIXEL_PERCENTAGE", 20)).map(maskS2clouds) + rgbVis = {"min": 0.0, "max": 0.3,"bands": ["B4", "B3", "B2"] + } + Map.setCenter(-73.388672,5.353521, 6) + Map.addLayer(dataset.median(), rgbVis, "RGB") + + elif cod == "COPERNICUS/S2_CLOUD_PROBABILITY": + s2Sr = ee.ImageCollection("COPERNICUS/S2_SR") + s2Clouds = ee.ImageCollection("COPERNICUS/S2_CLOUD_PROBABILITY") + START_DATE = ee.Date("2019-01-01") + END_DATE = ee.Date("2019-03-01") + MAX_CLOUD_PROBABILITY = 65 + region = ee.Geometry.Rectangle([[-76.5, 2.0], [-74, 4.0]]) + Map.setCenter(-75, 3, 12) + + def maskClouds(img): + clouds = ee.Image(img.get("cloud_mask")).select("probability") + isNotCloud = clouds.lt(MAX_CLOUD_PROBABILITY) + return img.updateMask(isNotCloud) + + def maskEdges(s2_img): + return s2_img.updateMask(s2_img.select("B8A").mask().updateMask(s2_img.select("B9").mask())) + + criteria = ee.Filter.And(ee.Filter.bounds(region), ee.Filter.date(START_DATE, END_DATE)) + s2Sr = s2Sr.filter(criteria).map(maskEdges) + s2Clouds = s2Clouds.filter(criteria) + + s2SrWithCloudMask = ee.Join.saveFirst("cloud_mask").apply({ + 'primary': s2Sr, + 'secondary': s2Clouds, + 'condition': ee.Filter.equals(leftField= "system:index", rightField= "system:index") + }) + + s2CloudMasked = ee.ImageCollection(s2SrWithCloudMask).map(maskClouds).median() + rgbVis = {"min": 0, "max": 3000, "bands": ["B4", "B3", "B2"]} + + Map.addLayer(s2CloudMasked, rgbVis, "S2 SR masked at " + MAX_CLOUD_PROBABILITY + "%", True) + + elif cod == "COPERNICUS/S2_HARMONIZED": + def maskS2clouds(image): + qa = image.select("QA60") + cloudBitMask = 1 << 10 + cirrusBitMask = 1 << 11 + mask = qa.bitwiseAnd(cloudBitMask).eq(0).And(qa.bitwiseAnd(cirrusBitMask).eq(0)) + return image.updateMask(mask).divide(10000) + + dataset = ee.ImageCollection("COPERNICUS/S2_HARMONIZED") \ + .filterDate("2022-01-01", "2022-01-31") \ + .filter(ee.Filter.lt("CLOUDY_PIXEL_PERCENTAGE", 20)) \ + .map(maskS2clouds) + rgbVis = { + "min": 0.0, + "max": 0.3, + "bands": ["B4", "B3", "B2"], + } + + Map.setCenter(-73.388672,5.353521, 6) + Map.addLayer(dataset.median(), rgbVis, "RGB") + + elif cod == "COPERNICUS/S2_SR": + def maskS2clouds(image): + qa = image.select("QA60") + cloudBitMask = 1 << 10 + cirrusBitMask = 1 << 11 + mask = qa.bitwiseAnd(cloudBitMask).eq(0).And(qa.bitwiseAnd(cirrusBitMask).eq(0)) + return image.updateMask(mask).divide(10000) + dataset = ee.ImageCollection("COPERNICUS/S2_SR") \ + .filterDate("2020-01-01", "2020-01-30") \ + .filter(ee.Filter.lt("CLOUDY_PIXEL_PERCENTAGE",20)) \ + .map(maskS2clouds) + visualization = { + "min": 0.0, + "max": 0.3, + 'bands': ["B4", "B3", "B2"], + } + Map.setCenter(83.277, 17.7009, 12) + Map.addLayer(dataset.mean(), visualization, "RGB") + + + elif cod == "COPERNICUS/S2_SR_HARMONIZED": + def maskS2clouds(image): + qa = image.select("QA60") + cloudBitMask = 1 << 10 + cirrusBitMask = 1 << 11 + mask = qa.bitwiseAnd(cloudBitMask).eq(0).And(qa.bitwiseAnd(cirrusBitMask).eq(0)) + return image.updateMask(mask).divide(10000) + dataset = ee.ImageCollection("COPERNICUS/S2_SR_HARMONIZED") \ + .filterDate("2020-01-01", "2020-01-30") \ + .filter(ee.Filter.lt("CLOUDY_PIXEL_PERCENTAGE",20)) \ + .map(maskS2clouds) + visualization = { + "min": 0.0, + "max": 0.3, + "bands": ["B4", "B3", "B2"], + } + Map.setCenter(83.277, 17.7009, 12) + Map.addLayer(dataset.mean(), visualization, "RGB") + + elif cod == "COPERNICUS/S3/OLCI": + dataset = ee.ImageCollection("COPERNICUS/S3/OLCI") \ + .filterDate("2018-04-01", "2018-04-04") + rgb = dataset.select(["Oa08_radiance", "Oa06_radiance", "Oa04_radiance"]) \ + .median().multiply(ee.Image([0.00876539, 0.0123538, 0.0115198])) + visParams = {"min": 0, "max": 6, "gamma": 1.5,} + Map.setCenter(46.043, 1.45, 5) + Map.addLayer(rgb, visParams, "RGB") + + elif cod == "COPERNICUS/S5P/NRTI/L3_AER_AI": + collection = ee.ImageCollection("COPERNICUS/S5P/NRTI/L3_AER_AI") \ + .select("absorbing_aerosol_index") \ + .filterDate("2019-06-01", "2019-06-06") + band_viz = { + "min": -1, + "max": 2.0, + "palette": ["black", "blue", "purple", "cyan", "green", "yellow", "red"] + } + Map.addLayer(collection.mean(), band_viz, "S5P Aerosol") + Map.setCenter(-118.82, 36.1, 5) + + elif cod == "COPERNICUS/S5P/NRTI/L3_AER_LH": + collection = ee.ImageCollection("COPERNICUS/S5P/NRTI/L3_AER_LH") \ + .select("aerosol_height") \ + .filterDate("2019-06-01", "2019-06-06") + band_viz = { + "min": -81.17, + "max": 67622.56, + "palette": ["blue", "purple", "cyan", "green", "yellow", "red"] + } + Map.addLayer(collection.mean(), band_viz, "S5P Aerosol Height") + Map.setCenter(44.09, 24.27, 4) + + elif cod == "COPERNICUS/S5P/NRTI/L3_CLOUD": + collection = ee.ImageCollection("COPERNICUS/S5P/NRTI/L3_CLOUD") \ + .select("cloud_fraction") \ + .filterDate("2019-06-01", "2019-06-02") + band_viz = { + "min": 0, + "max": 0.95, + "palette": ["black", "blue", "purple", "cyan", "green", "yellow", "red"] + } + Map.addLayer(collection.mean(), band_viz, "S5P Cloud") + Map.setCenter(-58.14, -10.47, 2) + + elif cod == "COPERNICUS/S5P/NRTI/L3_CO": + collection = ee.ImageCollection("COPERNICUS/S5P/NRTI/L3_CO") \ + .select("CO_column_number_density") \ + .filterDate("2019-06-01", "2019-06-11") + band_viz = { + "min": 0, + "max": 0.05, + "palette": ["black", "blue", "purple", "cyan", "green", "yellow", "red"] + } + Map.addLayer(collection.mean(), band_viz, "S5P CO") + Map.setCenter(-25.01, -4.28, 4) + + elif cod == "COPERNICUS/S5P/NRTI/L3_HCHO": + collection = ee.ImageCollection("COPERNICUS/S5P/NRTI/L3_HCHO") \ + .select("tropospheric_HCHO_column_number_density") \ + .filterDate("2019-06-01", "2019-06-06") + band_viz = { + "min": 0.0, + "max": 0.0003, + "palette": ["black", "blue", "purple", "cyan", "green", "yellow", "red"] + } + Map.addLayer(collection.mean(), band_viz, "S5P HCHO") + Map.setCenter(0.0, 0.0, 2) + + elif cod == "COPERNICUS/S5P/NRTI/L3_NO2": + collection = ee.ImageCollection("COPERNICUS/S5P/NRTI/L3_NO2") \ + .select("NO2_column_number_density") \ + .filterDate("2019-06-01", "2019-06-06") + band_viz = { + "min": 0, + "max": 0.0002, + "palette": ["black", "blue", "purple", "cyan", "green", "yellow", "red"] + } + Map.addLayer(collection.mean(), band_viz, "S5P N02") + Map.setCenter(65.27, 24.11, 4) + + elif cod == "COPERNICUS/S5P/NRTI/L3_O3": + collection = ee.ImageCollection("COPERNICUS/S5P/NRTI/L3_O3") \ + .select("O3_column_number_density") \ + .filterDate("2019-06-01", "2019-06-05") + band_viz = { + "min": 0.12, + "max": 0.15, + "palette": ["black", "blue", "purple", "cyan", "green", "yellow", "red"] + } + Map.addLayer(collection.mean(), band_viz, "S5P O3") + Map.setCenter(0.0, 0.0, 2) + + elif cod == "COPERNICUS/S5P/NRTI/L3_SO2": + collection = ee.ImageCollection("COPERNICUS/S5P/NRTI/L3_SO2") \ + .select("SO2_column_number_density") \ + .filterDate("2019-06-01", "2019-06-11") + band_viz = { + "min": 0.0, + "max": 0.0005, + "palette": ["black", "blue", "purple", "cyan", "green", "yellow", "red"] + } + Map.addLayer(collection.mean(), band_viz, "S5P SO2") + Map.setCenter(0.0, 0.0, 2) + + elif cod == "COPERNICUS/S5P/OFFL/L3_AER_AI": + collection = ee.ImageCollection("COPERNICUS/S5P/OFFL/L3_AER_AI") \ + .select("absorbing_aerosol_index") \ + .filterDate("2019-06-01", "2019-06-06") + band_viz = { + "min": -1, + "max": 2.0, + "palette": ["black", "blue", "purple", "cyan", "green", "yellow", "red"] + } + Map.addLayer(collection.mean(), band_viz, "S5P Aerosol") + Map.setCenter(-118.82, 36.1, 5) + + elif cod == "COPERNICUS/S5P/OFFL/L3_AER_LH": + collection = ee.ImageCollection("COPERNICUS/S5P/OFFL/L3_AER_LH") \ + .select("aerosol_height") \ + .filterDate("2019-06-01", "2019-06-05") + visualization = { + "min": 0, + "max": 6000, + "palette": ["blue", "purple", "cyan", "green", "yellow", "red"] + } + Map.setCenter(44.09, 24.27, 4) + Map.addLayer(collection.mean(), visualization, "S5P Aerosol Height") + + elif cod == "COPERNICUS/S5P/OFFL/L3_CH4": + collection = ee.ImageCollection("COPERNICUS/S5P/OFFL/L3_CH4") \ + .select("CH4_column_volume_mixing_ratio_dry_air") \ + .filterDate("2019-06-01", "2019-07-16") + band_viz = { + "min": 1750, + "max": 1900, + "palette": ["black", "blue", "purple", "cyan", "green", "yellow", "red"] + } + Map.addLayer(collection.mean(), band_viz, "S5P CH4") + Map.setCenter(0.0, 0.0, 2) + + elif cod == "COPERNICUS/S5P/OFFL/L3_CLOUD": + collection = ee.ImageCollection("COPERNICUS/S5P/OFFL/L3_CLOUD") \ + .select("cloud_fraction") \ + .filterDate("2019-06-01", "2019-06-02") + band_viz = { + "min": 0, + "max": 0.95, + "palette": ["black", "blue", "purple", "cyan", "green", "yellow", "red"] + } + Map.addLayer(collection.mean(), band_viz, "S5P Cloud") + Map.setCenter(-58.14, -10.47, 2) + + elif cod == "COPERNICUS/S5P/OFFL/L3_CO": + collection = ee.ImageCollection("COPERNICUS/S5P/OFFL/L3_CO") \ + .select("CO_column_number_density") \ + .filterDate("2019-06-01", "2019-06-11") + band_viz = { + "min": 0, + "max": 0.05, + "palette": ["black", "blue", "purple", "cyan", "green", "yellow", "red"] + } + Map.addLayer(collection.mean(), band_viz, "S5P CO") + Map.setCenter(-25.01, -4.28, 4) + + elif cod == "COPERNICUS/S5P/OFFL/L3_HCHO": + collection = ee.ImageCollection("COPERNICUS/S5P/OFFL/L3_HCHO") \ + .select("tropospheric_HCHO_column_number_density") \ + .filterDate("2019-06-01", "2019-06-06") + band_viz = { + "min": 0.0, + "max": 0.0003, + "palette": ["black", "blue", "purple", "cyan", "green", "yellow", "red"] + } + Map.addLayer(collection.mean(), band_viz, "S5P HCHO") + Map.setCenter(0.0, 0.0, 2) + + elif cod == "COPERNICUS/S5P/OFFL/L3_NO2": + collection = ee.ImageCollection("COPERNICUS/S5P/OFFL/L3_NO2") \ + .select("tropospheric_NO2_column_number_density") \ + .filterDate("2019-06-01", "2019-06-06") + band_viz = { + "min": 0, + "max": 0.0002, + "palette": ["black", "blue", "purple", "cyan", "green", "yellow", "red"] + } + Map.addLayer(collection.mean(), band_viz, "S5P N02") + Map.setCenter(65.27, 24.11, 4) + + elif cod == "COPERNICUS/S5P/OFFL/L3_O3": + collection = ee.ImageCollection("COPERNICUS/S5P/OFFL/L3_O3") \ + .select("O3_column_number_density") \ + .filterDate("2019-06-01", "2019-06-05") + band_viz = { + "min": 0.12, + "max": 0.15, + "palette": ["black", "blue", "purple", "cyan", "green", "yellow", "red"] + } + Map.addLayer(collection.mean(), band_viz, "S5P O3") + Map.setCenter(0.0, 0.0, 2) + + elif cod == "COPERNICUS/S5P/OFFL/L3_O3_TCL": + collection = ee.ImageCollection("COPERNICUS/S5P/OFFL/L3_O3_TCL") \ + .select("ozone_tropospheric_vertical_column") \ + .filterDate("2019-06-01", "2019-07-01") + band_viz = { + "min": 0, + "max": 0.02, + "palette": ["black", "blue", "purple", "cyan", "green", "yellow", "red"] + } + Map.addLayer(collection.mean(), band_viz, "S5P O3") + Map.setCenter(0.0, 0.0, 2) + + elif cod == "COPERNICUS/S5P/OFFL/L3_SO2": + collection = ee.ImageCollection("COPERNICUS/S5P/OFFL/L3_SO2") \ + .select("SO2_column_number_density") \ + .filterDate("2019-06-01", "2019-06-11") + band_viz = { + "min": 0.0, + "max": 0.0005, + "palette": ["black", "blue", "purple", "cyan", "green", "yellow", "red"] + } + Map.addLayer(collection.mean(), band_viz, "S5P SO2") + Map.setCenter(0.0, 0.0, 2) + + elif cod == "CPOM/CryoSat2/ANTARCTICA_DEM": + dataset = ee.Image("CPOM/CryoSat2/ANTARCTICA_DEM") + visualization = { + "bands": ["elevation"], + "min": 0.0, + "max": 4000.0, + "palette": ["001fff", "00ffff", "fbff00", "ff0000"] + } + Map.setCenter(17.0, -76.0, 3) + Map.addLayer(dataset, visualization, "Elevation") + + elif cod == "CSIRO/SLGA": + dataset = ee.ImageCollection("CSIRO/SLGA") \ + .filter(ee.Filter.eq("attribute_code", "DES")) + soilDepth = dataset.select("DES_000_200_EV") + soilDepthVis = { + "min": 0.1, + "max": 1.84, + "palette": ["8d6738", "252525"], + } + Map.setCenter(132.495, -21.984, 5) + Map.addLayer(soilDepth, soilDepthVis, "Soil Depth") + + elif cod == "CSP/ERGo/1_0/Global/ALOS_CHILI": + dataset = ee.Image("CSP/ERGo/1_0/Global/ALOS_CHILI") + alosChili = dataset.select("constant") + alosChiliVis = { + "min": 0.0, + "max": 255.0, + } + Map.setCenter(-105.8636, 40.3439, 11) + Map.addLayer(alosChili, alosChiliVis, "ALOS CHILI") + + elif cod == "CSP/ERGo/1_0/Global/ALOS_landforms": + dataset = ee.Image("CSP/ERGo/1_0/Global/ALOS_landforms") + landforms = dataset.select("constant") + landformsVis = { + "min": 11.0, + "max": 42.0, + "palette": [ + "141414", "383838", "808080", "EBEB8F", "F7D311", "AA0000", "D89382", + "DDC9C9", "DCCDCE", "1C6330", "68AA63", "B5C98E", "E1F0E5", "a975ba", + "6f198c" + ], + } + Map.setCenter(-105.58, 40.5498, 11) + Map.addLayer(landforms, landformsVis, "Landforms") + + elif cod == "CSP/ERGo/1_0/Global/ALOS_mTPI": + dataset = ee.Image("CSP/ERGo/1_0/Global/ALOS_mTPI") + alosMtpi = dataset.select("AVE") + alosMtpiVis = { + "min": -200.0, + "max": 200.0, + "palette": ["0b1eff", "4be450", "fffca4", "ffa011", "ff0000"], + } + Map.setCenter(-105.8636, 40.3439, 11) + Map.addLayer(alosMtpi, alosMtpiVis, "ALOS mTPI") + + elif cod == "CSP/ERGo/1_0/Global/ALOS_topoDiversity": + dataset = ee.Image("CSP/ERGo/1_0/Global/ALOS_topoDiversity") + alosTopographicDiversity = dataset.select("constant") + alosTopographicDiversityVis = { + "min": 0.0, + "max": 1.0, + } + Map.setCenter(-111.313, 39.724, 6) + Map.addLayer(alosTopographicDiversity, alosTopographicDiversityVis, "ALOS Topographic Diversity") + + elif cod == "CSP/ERGo/1_0/Global/SRTM_CHILI": + dataset = ee.Image("CSP/ERGo/1_0/Global/SRTM_CHILI") + srtmChili = dataset.select("constant") + srtmChiliVis = { + "min": 0.0, + "max": 255.0, + } + Map.setCenter(-105.8636, 40.3439, 11) + Map.addLayer(srtmChili, srtmChiliVis, "SRTM CHILI") + + elif cod == "CSP/ERGo/1_0/Global/SRTM_landforms": + dataset = ee.Image("CSP/ERGo/1_0/Global/SRTM_landforms") + landforms = dataset.select("constant") + landformsVis = { + "min": 11.0, + "max": 42.0, + "palette": [ + "141414", "383838", "808080", "EBEB8F", "F7D311", "AA0000", "D89382", + "DDC9C9", "DCCDCE", "1C6330", "68AA63", "B5C98E", "E1F0E5", "a975ba", + "6f198c" + ], + } + Map.setCenter(-105.58, 40.5498, 11) + Map.addLayer(landforms, landformsVis, "Landforms") + + elif cod == "CSP/ERGo/1_0/Global/SRTM_mTPI": + dataset = ee.Image("CSP/ERGo/1_0/Global/SRTM_mTPI") + srtmMtpi = dataset.select("elevation") + srtmMtpiVis = { + "min": -200.0, + "max": 200.0, + "palette": ["0b1eff", "4be450", "fffca4", "ffa011", "ff0000"], + } + Map.setCenter(-105.8636, 40.3439, 11) + Map.addLayer(srtmMtpi, srtmMtpiVis, "SRTM mTPI") + + elif cod == "CSP/ERGo/1_0/Global/SRTM_topoDiversity": + dataset = ee.Image("CSP/ERGo/1_0/Global/SRTM_topoDiversity") + srtmTopographicDiversity = dataset.select("constant") + srtmTopographicDiversityVis = { + "min": 0.0, + "max": 1.0, + } + Map.setCenter(-111.313, 39.724, 6) + Map.addLayer(srtmTopographicDiversity, srtmTopographicDiversityVis,"SRTM Topographic Diversity") + + elif cod == "CSP/ERGo/1_0/US/CHILI": + dataset = ee.Image("CSP/ERGo/1_0/US/CHILI") + usChili = dataset.select("constant") + usChiliVis = { + "min": 0.0, + "max": 255.0, + } + Map.setCenter(-105.8636, 40.3439, 11) + Map.addLayer(usChili, usChiliVis, "US CHILI") + + elif cod == "CSP/ERGo/1_0/US/landforms": + dataset = ee.Image("CSP/ERGo/1_0/US/landforms") + landforms = dataset.select("constant") + landformsVis = { + "min": 11.0, + "max": 42.0, + "palette": [ + "141414", "383838", "808080", "EBEB8F", "F7D311", "AA0000", "D89382", + "DDC9C9", "DCCDCE", "1C6330", "68AA63", "B5C98E", "E1F0E5", "a975ba", + "6f198c" + ], + } + Map.setCenter(-105.58, 40.5498, 11) + Map.addLayer(landforms, landformsVis, "Landforms") + + elif cod == "CSP/ERGo/1_0/US/lithology": + dataset = ee.Image("CSP/ERGo/1_0/US/lithology") + lithology = dataset.select("b1") + lithologyVis = { + "min": 0.0, + "max": 20.0, + "palette": [ + "356EFF", "ACB6DA", "D6B879", "313131", "EDA800", "616161", "D6D6D6", + "D0DDAE", "B8D279", "D5D378", "141414", "6DB155", "9B6D55", "FEEEC9", + "D6B879", "00B7EC", "FFDA90", "F8B28C" + ], + } + Map.setCenter(-105.8636, 40.3439, 11) + Map.addLayer(lithology, lithologyVis, "Lithology") + + elif cod == "CSP/ERGo/1_0/US/mTPI": + dataset = ee.Image("CSP/ERGo/1_0/US/mTPI") + usMtpi = dataset.select("elevation") + usMtpiVis = { + "min": -200.0, + "max": 200.0, + "palette": ["0b1eff", "4be450", "fffca4", "ffa011", "ff0000"], + } + Map.setCenter(-105.8636, 40.3439, 11) + Map.addLayer(usMtpi, usMtpiVis, "US mTPI") + + elif cod == "CSP/ERGo/1_0/US/physioDiversity": + dataset = ee.Image("CSP/ERGo/1_0/US/physioDiversity") + physiographicDiversity = dataset.select("b1") + physiographicDiversityVis = { + "min": 0.0, + "max": 1.0, + } + Map.setCenter(-94.625, 39.825, 7) + Map.addLayer(physiographicDiversity, physiographicDiversityVis,"Physiographic Diversity") + + elif cod == "CSP/ERGo/1_0/US/physiography": + dataset = ee.Image("CSP/ERGo/1_0/US/physiography") + physiography = dataset.select("constant") + physiographyVis = { + "min": 1100.0, + "max": 4220.0, + } + Map.setCenter(-105.4248, 40.5242, 8) + Map.addLayer(physiography, physiographyVis, "Physiography") + + elif cod == "CSP/ERGo/1_0/US/topoDiversity": + dataset = ee.Image("CSP/ERGo/1_0/US/topoDiversity") + usTopographicDiversity = dataset.select("constant") + usTopographicDiversityVis = { + "min": 0.0, + "max": 1.0, + } + Map.setCenter(-111.313, 39.724, 6) + Map.addLayer(usTopographicDiversity, usTopographicDiversityVis, "US Topographic Diversity") + + elif cod == "CSP/HM/GlobalHumanModification": + dataset = ee.ImageCollection("CSP/HM/GlobalHumanModification") + visualization = {"bands": ["gHM"], + "min": 0.0, + "max": 1.0, + "palette": ["0c0c0c", "071aff", "ff0000", "ffbd03", "fbff05", "fffdfd"] + } + Map.centerObject(dataset) + Map.addLayer(dataset, visualization, "Human modification") + + elif cod == "DLR/WSF/WSF2015/v1": + dataset = ee.Image("DLR/WSF/WSF2015/v1") + opacity = 0.75 + blackBackground = ee.Image(0) + Map.addLayer(blackBackground, None, "Black background", True, opacity) + visualization = { + "min": 0, + "max": 255, + } + Map.addLayer(dataset, visualization, "Human settlement areas") + Map.setCenter(90.45, 23.7, 7) + + elif cod == "DOE/ORNL/LandScan_HD/Ukraine_202201": + dataset = ee.Image("DOE/ORNL/LandScan_HD/Ukraine_202201") + vis = { + "min": 0.0, + "max": 10.0, + "palette":["lemonchiffon", "khaki", "orange","orangered", "red", "maroon"], + } + Map.centerObject(dataset) + Map.addLayer(dataset, vis, "Population Count") + + elif cod == "ECMWF/CAMS/NRT": + dataset = ee.ImageCollection("ECMWF/CAMS/NRT").filter(ee.Filter.date("2019-01-01", "2019-01-31")) + aod = dataset.select("total_aerosol_optical_depth_at_550nm_surface") + visParams = { + "min": 0.000096, + "max": 3.582552, + "palette": [ + "5E4FA2", "3288BD", "66C2A5", "ABE0A4", + "E6F598", "FFFFBF", "FEE08B", "FDAE61", + "F46D43", "D53E4F", "9E0142" + ] + } + Map.setCenter(-94.18, 16.8, 1) + Map.addLayer(aod, visParams, "Total Aerosal Optical Depth") + + elif cod == "ECMWF/ERA5/DAILY": + era5_2mt = ee.ImageCollection("ECMWF/ERA5/DAILY").select("mean_2m_air_temperature").filter(ee.Filter.date("2019-07-01", "2019-07-31")) + + era5_tp = ee.ImageCollection("ECMWF/ERA5/DAILY").select("total_precipitation").filter(ee.Filter.date("2019-07-01", "2019-07-31")) + era5_2d = ee.ImageCollection("ECMWF/ERA5/DAILY").select("dewpoint_2m_temperature").filter(ee.Filter.date("2019-07-01", "2019-07-31")) + era5_mslp = ee.ImageCollection("ECMWF/ERA5/DAILY").select("mean_sea_level_pressure").filter(ee.Filter.date("2019-07-01", "2019-07-31")) + era5_sp = ee.ImageCollection("ECMWF/ERA5/DAILY").select("surface_pressure").filter(ee.Filter.date("2019-07-01", "2019-07-31")) + era5_u_wind_10m = ee.ImageCollection("ECMWF/ERA5/DAILY").select("u_component_of_wind_10m").filter(ee.Filter.date("2019-07-01", "2019-07-31")) + era5_sp = era5_sp.map(lambda image: image.divide(100).set("system:time_start", image.get("system:time_start"))) + visTp = {"min": 0, "max": 0.1, "palette": ["#FFFFFF", "#00FFFF", "#0080FF", "#DA00FF", "#FFA400", "#FF0000"]} + vis2mt = {"min": 250, + "max": 320, + "palette": [ + "#000080", "#0000D9", "#4000FF", "#8000FF", "#0080FF", "#00FFFF", "#00FF80", + "#80FF00", "#DAFF00", "#FFFF00", "#FFF500", "#FFDA00", "#FFB000", "#FFA400", + "#FF4F00", "#FF2500", "#FF0A00", "#FF00FF"] + } + visWind = {"min": 0, + "max": 30, + "palette": [ + "#FFFFFF", "#FFFF71", "#DEFF00", "#9EFF00", "#77B038", "#007E55", "#005F51", + "#004B51", "#013A7B", "#023AAD"] + } + visPressure = {"min": 500, + "max": 1150, + "palette": ["#01FFFF", "#058BFF", "#0600FF", "#DF00FF", "#FF00FF", "#FF8C00", "#FF8C00"] + } + Map.addLayer(era5_tp.filter(ee.Filter.date("2019-07-15")), visTp, "Daily total precipitation sums") + Map.addLayer(era5_2d.filter(ee.Filter.date("2019-07-15")), vis2mt, "Daily mean 2m dewpoint temperature") + Map.addLayer(era5_2mt.filter(ee.Filter.date("2019-07-15")), vis2mt, "Daily mean 2m air temperature") + Map.addLayer(era5_u_wind_10m.filter(ee.Filter.date("2019-07-15")), visWind, "Daily mean 10m u-component of wind") + Map.addLayer(era5_sp.filter(ee.Filter.date("2019-07-15")), visPressure, "Daily mean surface pressure") + Map.setCenter(21.2, 22.2, 2) + + elif cod == "ECMWF/ERA5/MONTHLY": + dataset = ee.ImageCollection("ECMWF/ERA5/MONTHLY") + visualization = { + "bands": ["mean_2m_air_temperature"], + "min": 250.0, + "max": 320.0, + "palette": ["#000080","#0000D9","#4000FF","#8000FF","#0080FF","#00FFFF","#00FF80","#80FF00","#DAFF00","#FFFF00","#FFF500","#FFDA00","#FFB000","#FFA400","#FF4F00","#FF2500","#FF0A00","#FF00FF"] + } + Map.setCenter(22.2, 21.2, 0) + Map.addLayer(dataset, visualization, "Monthly average air temperature [K] at 2m height") + + elif cod == "ECMWF/ERA5_LAND/DAILY_RAW": + dataset = ee.ImageCollection("ECMWF/ERA5_LAND/DAILY_RAW").filter(ee.Filter.date("2021-06-01", "2021-07-01")) + visualization = { + "bands": ["temperature_2m"], + "min": 250.0, + "max": 320.0, + "palette": ["#000080","#0000D9","#4000FF","#8000FF","#0080FF","#00FFFF","#00FF80","#80FF00","#DAFF00","#FFFF00","#FFF500","#FFDA00","#FFB000","#FFA400","#FF4F00","#FF2500","#FF0A00","#FF00FF"] + } + Map.setCenter(-170.13, 45.62, 2) + Map.addLayer(dataset, visualization, "Air temperature [K] at 2m height") + + elif cod == "ECMWF/ERA5_LAND/HOURLY": + dataset = ee.ImageCollection("ECMWF/ERA5_LAND/HOURLY").filter(ee.Filter.date("2020-07-01", "2020-07-02")) + visualization = { + "bands": ["temperature_2m"], + "min": 250.0, + "max": 320.0, + "palette": ["#000080","#0000D9","#4000FF","#8000FF","#0080FF","#00FFFF","#00FF80","#80FF00","#DAFF00","#FFFF00","#FFF500","#FFDA00","#FFB000","#FFA400","#FF4F00","#FF2500","#FF0A00","#FF00FF"] + } + Map.setCenter(22.2, 21.2, 0) + Map.addLayer(dataset, visualization, "Air temperature [K] at 2m height") + + elif cod == "ECMWF/ERA5_LAND/MONTHLY_AGGR": + dataset = ee.ImageCollection("ECMWF/ERA5_LAND/MONTHLY_AGGR").filter(ee.Filter.date("2020-02-01", "2020-07-10")) + visualization = { + "bands": ["temperature_2m"], + "min": 250.0, + "max": 320.0, + "palette": ["#000080","#0000D9","#4000FF","#8000FF","#0080FF","#00FFFF","#00FF80","#80FF00","#DAFF00","#FFFF00","#FFF500","#FFDA00","#FFB000","#FFA400","#FF4F00","#FF2500","#FF0A00","#FF00FF"] + } + Map.setCenter(-170.13, 45.62, 2) + Map.addLayer(dataset, visualization, "Air temperature [K] at 2m height") + + elif cod == "ECMWF/ERA5_LAND/MONTHLY_BY_HOUR": + dataset = ee.ImageCollection("ECMWF/ERA5_LAND/MONTHLY_BY_HOUR").filter(ee.Filter.date("2020-07-01", "2020-08-01")) + visualization = { + "bands": ["temperature_2m"], + "min": 250.0, + "max": 320.0, + "palette": ["#000080","#0000D9","#4000FF","#8000FF","#0080FF","#00FFFF","#00FF80","#80FF00","#DAFF00","#FFFF00","#FFF500","#FFDA00","#FFB000","#FFA400","#FF4F00","#FF2500","#FF0A00","#FF00FF"] + } + Map.setCenter(22.2, 21.2, 0) + Map.addLayer(dataset, visualization, "Air temperature [K] at 2m height") + + elif cod == "EO1/HYPERION": + dataset = ee.ImageCollection("EO1/HYPERION").filter(ee.Filter.date("2016-01-01", "2017-03-01")) + rgb = dataset.select(["B050", "B023", "B015"]) + rgbVis = { + "min": 1000.0, + "max": 14000.0, + "gamma": 2.5, + } + Map.setCenter(162.0044, -77.3463, 9) + Map.addLayer(rgb.median(), rgbVis, "RGB") + + elif cod == "EPA/Ecoregions/2013/L3": + dataset = ee.FeatureCollection("EPA/Ecoregions/2013/L3") + visParams = { + "palette": ["0a3b04", "1a9924", "15d812"], + "min": 23.0, + "max": 3.57e+11, + "opacity": 0.8, + } + image = ee.Image().float().paint(dataset, "shape_area") + Map.setCenter(-99.814, 40.166, 5) + Map.addLayer(image, visParams, "EPA/Ecoregions/2013/L3") + Map.addLayer(dataset, None, "for Inspector", False) + + elif cod == "EPA/Ecoregions/2013/L4": + dataset = ee.FeatureCollection("EPA/Ecoregions/2013/L4") + visParams = { + "palette": ["0a3b04", "1a9924", "15d812"], + "min": 0.0, + "max": 67800000000.0, + "opacity": 0.8, + } + image = ee.Image().float().paint(dataset, "shape_area") + Map.setCenter(-99.814, 40.166, 5) + Map.addLayer(image, visParams, "EPA/Ecoregions/2013/L4") + Map.addLayer(dataset, None, "for Inspector", False) + + elif cod == "ESA/CCI/FireCCI/5_1": + dataset = ee.ImageCollection("ESA/CCI/FireCCI/5_1").filterDate("2020-01-01", "2020-12-31") + burnedArea = dataset.select("BurnDate") + baVis = { + "min": 1, + "max": 366, + "palette": ["ff0000", "fd4100", "fb8200", "f9c400", "f2ff00", "b6ff05","7aff0a", "3eff0f", "02ff15", "00ff55", "00ff99", "00ffdd","00ddff", "0098ff", "0052ff", "0210ff", "3a0dfb", "7209f6","a905f1", "e102ed", "ff00cc", "ff0089", "ff0047", "ff0004"] + } + maxBA = burnedArea.max() + Map.setCenter(0, 18, 2.1) + Map.addLayer(maxBA, baVis, "Burned Area") + + elif cod == "ESA/GLOBCOVER_L4_200901_200912_V2_3": + dataset = ee.Image("ESA/GLOBCOVER_L4_200901_200912_V2_3") + landcover = dataset.select("landcover") + Map.setCenter(-88.6, 26.4, 3) + Map.addLayer(landcover, {}, "Landcover") + + elif cod == "ESA/WorldCover/v100": + dataset = ee.ImageCollection("ESA/WorldCover/v100").first() + visualization = { + "bands": ["Map"], + } + Map.centerObject(dataset) + Map.addLayer(dataset, visualization, "Landcover") + + elif cod == "ESA/WorldCover/v200": + dataset = ee.ImageCollection("ESA/WorldCover/v200").first() + visualization = { + "bands": ["Map"], + } + Map.centerObject(dataset) + Map.addLayer(dataset, visualization, "Landcover") + + elif cod == "FAO/GAUL/2015/level0": + dataset = ee.FeatureCollection("FAO/GAUL/2015/level0") + Map.setCenter(7.82, 49.1, 4) + styleParams = { + "fillColor": "#b5ffb4", + "color": "#00909F", + "width": 1.0, + } + dataset = dataset.style(styleParams) + Map.addLayer(dataset, {}, "Country Boundaries") + + elif cod == "FAO/GAUL/2015/level1": + dataset = ee.FeatureCollection("FAO/GAUL/2015/level1") + Map.setCenter(7.82, 49.1, 4) + styleParams = { + "fillColor": "b5ffb4", + "color": "#00909F", + "width": 1.0, + } + dataset = dataset.style(styleParams) + Map.addLayer(dataset, {}, "First Level Administrative Units") + + elif cod == "FAO/GAUL/2015/level2": + dataset = ee.FeatureCollection("FAO/GAUL/2015/level2") + Map.setCenter(12.876, 42.682, 5) + styleParams = { + "fillColor": "#b5ffb4", + "color": "#00909F", + "width": 1.0, + } + dataset = dataset.style(styleParams) + Map.addLayer(dataset, {}, "Second Level Administrative Units") + + elif cod == "FAO/GAUL_SIMPLIFIED_500m/2015/level0": + dataset = ee.FeatureCollection("FAO/GAUL_SIMPLIFIED_500m/2015/level0") + Map.setCenter(7.82, 49.1, 4) + styleParams = { + "fillColor": "#b5ffb4", + "color": "#00909F", + "width": 1.0, + } + dataset = dataset.style(styleParams) + Map.addLayer(dataset, {}, "Country Boundaries") + + elif cod == "FAO/GAUL_SIMPLIFIED_500m/2015/level1": + dataset = ee.FeatureCollection("FAO/GAUL_SIMPLIFIED_500m/2015/level1") + Map.setCenter(7.82, 49.1, 4) + styleParams = { + "fillColor": "#b5ffb4", + "color": "#00909F", + "width": 1.0, + } + dataset = dataset.style(styleParams) + Map.addLayer(dataset, {}, "First Level Administrative Units") + + elif cod == "FAO/GAUL_SIMPLIFIED_500m/2015/level2": + dataset = ee.FeatureCollection("FAO/GAUL_SIMPLIFIED_500m/2015/level2") + Map.setCenter(12.876, 42.682, 5) + styleParams = { + "fillColor": "b5ffb4", + "color": "00909F", + "width": 1.0, + } + dataset = dataset.style(styleParams) + Map.addLayer(dataset, {}, "Second Level Administrative Units") + + elif cod == "FAO/GHG/1/DROSA_A": + dataset = ee.ImageCollection("FAO/GHG/1/DROSA_A") + visualization = { + "bands": ["cropland"], + "min": 1.0, + "max": 60.0, + "palette": ["white", "red"] + } + Map.setCenter(108.0, -0.4, 6) + Map.addLayer(dataset, visualization, "Cropland area drained (Annual)") + + elif cod == "FAO/GHG/1/DROSE_A": + dataset = ee.ImageCollection("FAO/GHG/1/DROSE_A") + visualization = { + "bands": ["croplandc"], + "min": 0.1, + "max": 0.1, + "palette": ["yellow", "red"] + } + Map.setCenter(108.0, -0.4, 6) + Map.addLayer(dataset, visualization, "Cropland C emissions (Annual)") + + elif cod == "FAO/SOFO/1/FPP": + coll = ee.ImageCollection("FAO/SOFO/1/FPP") + image = coll.first().select("FPP_1km") + Map.setCenter(17.5, 20, 3) + Map.addLayer(image, {"min": 0, "max": 12, "palette": ["blue", "yellow", "red"]},"Forest proximate people – 1km cutoff distance") + + elif cod == "FAO/SOFO/1/TPP": + coll = ee.ImageCollection("FAO/SOFO/1/TPP") + image = coll.first().select("TPP_1km") + Map.setCenter(17.5, 20, 3) + Map.addLayer( + image, {"min": 0, "max": 12, "palette": ["blue", "yellow", "red"]}, "Tree proximate people – 1km cutoff distance") + + elif cod == "FAO/WAPOR/2/L1_AETI_D": + coll = ee.ImageCollection("FAO/WAPOR/2/L1_AETI_D") + image = coll.first() + Map.setCenter(17.5, 20, 3) + Map.addLayer(image, {"min": 0, "max": 50}) + + elif cod == "FAO/WAPOR/2/L1_E_D": + coll = ee.ImageCollection("FAO/WAPOR/2/L1_E_D") + image = coll.first() + Map.setCenter(17.5, 20, 3) + Map.addLayer(image, {"min": 0, "max": 10}) + + elif cod == "FAO/WAPOR/2/L1_I_D": + coll = ee.ImageCollection("FAO/WAPOR/2/L1_I_D") + image = coll.first() + Map.setCenter(17.5, 20, 3) + Map.addLayer(image, {"min": 0, "max": 50}) + + elif cod == "FAO/WAPOR/2/L1_NPP_D": + coll = ee.ImageCollection("FAO/WAPOR/2/L1_NPP_D") + image = coll.first() + Map.setCenter(17.5, 20, 3) + Map.addLayer(image, {"min": 0, "max": 5000}) + + elif cod == "FAO/WAPOR/2/L1_RET_D": + coll = ee.ImageCollection("FAO/WAPOR/2/L1_RET_D") + image = coll.first() + Map.setCenter(17.5, 20, 3) + Map.addLayer(image, {"min": 0, "max": 100}) + + elif cod == "FAO/WAPOR/2/L1_RET_E": + coll = ee.ImageCollection("FAO/WAPOR/2/L1_RET_E") + image = coll.first() + Map.setCenter(17.5, 20, 3) + Map.addLayer(image, {"min": 0, "max": 100}) + + elif cod == "FAO/WAPOR/2/L1_T_D": + coll = ee.ImageCollection("FAO/WAPOR/2/L1_T_D") + image = coll.first() + Map.setCenter(17.5, 20, 3) + Map.addLayer(image, {"min": 0, "max": 50}) + + elif cod == "FIRMS": + dataset = ee.ImageCollection("FIRMS").filter( + ee.Filter.date("2018-08-01", "2018-08-10")) + fires = dataset.select("T21") + firesVis = { + "min": 325.0, + "max": 400.0, + "palette": ["red", "orange", "yellow"], + } + Map.setCenter(-119.086, 47.295, 6) + Map.addLayer(fires, firesVis, "Fires") + + elif cod == "Finland/MAVI/VV/50cm": + dataset = ee.ImageCollection("Finland/MAVI/VV/50cm") + Map.setCenter(25.7416, 62.2446, 16) + Map.addLayer(dataset, None, "Finland 50 cm(False color)") + + elif cod == "GFW/GFF/V1/fishing_hours": + dataset = ee.ImageCollection("GFW/GFF/V1/fishing_hours").filter(ee.Filter.date("2016-12-01", "2017-01-01")) + trawlers = dataset.select("trawlers") + trawlersVis = { + "min": 0.0, + "max": 5.0, + } + Map.setCenter(16.201, 36.316, 7) + Map.addLayer(trawlers.max(), trawlersVis, "Trawlers") + + elif cod == "GFW/GFF/V1/vessel_hours": + dataset = ee.ImageCollection("GFW/GFF/V1/vessel_hours").filter(ee.Filter.date("2016-12-01", "2017-01-01")) + trawlers = dataset.select("trawlers") + trawlersVis = { + "min": 0.0, + "max": 5.0, + } + Map.setCenter(130.61, 34.287, 8) + Map.addLayer(trawlers.max(), trawlersVis, "Trawlers") + + elif cod == "GLCF/GLS_WATER": + dataset = ee.ImageCollection("GLCF/GLS_WATER") + water = dataset.select("water") + waterVis = { + "min": 1.0, + "max": 4.0, + "palette": ["FAFAFA", "00C5FF", "DF73FF", "828282", "CCCCCC"], + } + Map.setCenter(-79.3094, 44.5693, 8) + Map.addLayer(water, waterVis, "Water") + + elif cod == "GLIMS/20210914": + dataset = ee.FeatureCollection("GLIMS/20210914") + visParams = { + "palette": ["gray", "cyan", "blue"], + "min": 0.0, + "max": 10.0, + "opacity": 0.8, + } + image = ee.Image().float().paint(dataset, "area") + Map.setCenter(-35.618, 66.743, 7) + Map.addLayer(image, visParams, "GLIMS/20210914") + Map.addLayer(dataset, None, "for Inspector", False) + + elif cod == "Finland/SMK/VV/50cm": + dataset = ee.ImageCollection("Finland/SMK/VV/50cm") + Map.setCenter(25.7416, 62.2446, 16) + Map.addLayer(dataset, None, "Finland 50 cm(False color)") + + elif cod == "Finland/SMK/V/50cm": + dataset = ee.ImageCollection("Finland/SMK/V/50cm") + Map.setCenter(24.9, 60.2, 17) + Map.addLayer(dataset, None, "Finland 50 cm(color)") + + elif cod == "GLIMS/current": + dataset = ee.FeatureCollection("GLIMS/current") + visParams = { + "palette": ["gray", "cyan", "blue"], + "min": 0.0, + "max": 10.0, + "opacity": 0.8, + } + image = ee.Image().float().paint(dataset, "area") + Map.setCenter(-35.618, 66.743, 7) + Map.addLayer(image, visParams, "GLIMS/current") + Map.addLayer(dataset, None, "for Inspector", False) + + elif cod == "GLOBAL_FLOOD_DB/MODIS_EVENTS/V1": + gfd = ee.ImageCollection("GLOBAL_FLOOD_DB/MODIS_EVENTS/V1") + hurricaneIsaacDartmouthId = 3977 + hurricaneIsaacUsa = ee.Image(gfd.filterMetadata("id", "equals", hurricaneIsaacDartmouthId).first()) + Map.setOptions("SATELLITE") + Map.setCenter(-90.2922, 29.4064, 9) + Map.addLayer( + hurricaneIsaacUsa.select("flooded").selfMask(),{"min": 0, "max": 1, "palette": "001133"},"Hurricane Isaac - Inundation Extent") + durationPalette = ["C3EFFE", "1341E8", "051CB0", "001133"] + Map.addLayer(hurricaneIsaacUsa.select("duration").selfMask(),{"min": 0, "max": 4, "palette": durationPalette},"Hurricane Isaac - Duration") + gfdFloodedSum = gfd.select("flooded").sum() + Map.addLayer(gfdFloodedSum.selfMask(),{"min": 0, "max": 10, "palette": durationPalette},"GFD Satellite Observed Flood Plain") + jrc = gfd.select("jrc_perm_water").sum().gte(1) + Map.addLayer(jrc.selfMask(),{"min": 0, "max": 1, "palette": "C3EFFE"},"JRC Permanent Water") + + elif cod == "GOOGLE/DYNAMICWORLD/V1": + COL_FILTER = ee.Filter.And(ee.Filter.bounds(ee.Geometry.Point(20.6729, 52.4305)),ee.Filter.date("2021-04-02", "2021-04-03")) + dwCol = ee.ImageCollection("GOOGLE/DYNAMICWORLD/V1").filter(COL_FILTER) + s2Col = ee.ImageCollection("COPERNICUS/S2").filter(COL_FILTER) + DwS2Col = ee.Join.saveFirst("s2_img").apply(dwCol, s2Col, + ee.Filter.equals({"leftField": "system:index", "rightField": "system:index"})) + dwImage = ee.Image(DwS2Col.first()) + s2Image = ee.Image(dwImage.get("s2_img")) + CLASS_NAMES = ["water", "trees", "grass", "flooded_vegetation", "crops","shrub_and_scrub", "built", "bare", "snow_and_ice"] + VIS_PALETTE = ["419BDF", "397D49", "88B053", "7A87C6","E49635", "DFC35A", "C4281B", "A59B8F","B39FE1"] + dwRgb = dwImage.select("label").visualize({"min": 0, "max": 8, "palette": VIS_PALETTE}).divide(255) + top1Prob = dwImage.select(CLASS_NAMES).reduce(ee.Reducer.max()) + top1ProbHillshade = ee.Terrain.hillshade(top1Prob.multiply(100)).divide(255) + dwRgbHillshade = dwRgb.multiply(top1ProbHillshade) + Map.setCenter(20.6729, 52.4305, 12) + Map.addLayer(s2Image,{"min": 0, "max": 3000, "bands": ["B4", "B3", "B2"]},"Sentinel-2 L1C") + Map.addLayer(dwRgbHillshade,{"min": 0, "max": 0.65},"Dynamic World") + + elif cod == "GOOGLE/Research/open-buildings/v2/polygons": + t = ee.FeatureCollection("GOOGLE/Research/open-buildings/v2/polygons") + t_060_065 = t.filter("confidence >= 0.60 && confidence < 0.65") + t_065_070 = t.filter("confidence >= 0.65 && confidence < 0.70") + t_gte_070 = t.filter("confidence >= 0.70") + Map.addLayer(t_060_065, {"color": "FF0000"}, "Buildings confidence [0.60 0.65)") + Map.addLayer(t_065_070, {"color": "FFFF00"}, "Buildings confidence [0.65 0.70)") + Map.addLayer(t_gte_070, {"color": "00FF00"}, "Buildings confidence >= 0.70") + Map.setCenter(3.389, 6.492, 17) + Map.setOptions("SATELLITE") + + elif cod == "GRIDMET/DROUGHT": + collection = ee.ImageCollection("GRIDMET/DROUGHT") + dS = "2020-03-30" + dE = "2020-03-30" + dSUTC = ee.Date(dS, "GMT") + dEUTC = ee.Date(dE, "GMT") + filtered = collection.filterDate(dSUTC, dEUTC.advance(1, "day")) + PDSI = filtered.select("pdsi") + Z = filtered.select("z") + SPI2y = filtered.select("spi2y") + SPEI2y = filtered.select("spei2y") + EDDI2y = filtered.select("spei2y") + usdmColors = ["0000aa","0000ff","00aaff","00ffff","aaff55","ffffff","ffff00","fcd37f","ffaa00","e60000","730000"] + minColorbar= -2.5 + maxColorbar= 2.5 + colorbarOptions1 = { + "min":minColorbar, + "max":maxColorbar, + "palette": usdmColors} + minColorbar= -6 + maxColorbar= 6 + colorbarOptions2 = { + "min":minColorbar, + "max":maxColorbar, + "palette": usdmColors} + Map.addLayer(ee.Image(PDSI.first()), colorbarOptions2, "PDSI") + Map.addLayer(ee.Image(Z.first()), colorbarOptions2, "Palmer-Z") + Map.addLayer(ee.Image(SPI2y.first()), colorbarOptions1, "SPI-48months") + Map.addLayer(ee.Image(SPEI2y.first()), colorbarOptions1, "SPEI-48months") + Map.addLayer(ee.Image(EDDI2y.first()), colorbarOptions1, "EDDI-48months") + + elif cod == "Germany/Brandenburg/orthos/20cm": + dataset = ee.Image("Germany/Brandenburg/orthos/20cm") + Map.setCenter(13.386091, 52.507899, 18) + Map.addLayer(dataset, None, "Brandenburg 20cm") + + elif cod == "HYCOM/sea_surface_elevation": + dataset = ee.ImageCollection("HYCOM/sea_surface_elevation").filter(ee.Filter.date("2018-08-01", "2018-08-15")) + surfaceElevation = dataset.select("surface_elevation") + surfaceElevationVis = { + "min": -2000.0, + "max": 2000.0, + "palette": ["blue", "cyan", "yellow", "red"], + } + Map.setCenter(-28.1, 28.3, 1) + Map.addLayer(surfaceElevation, surfaceElevationVis, "Surface Elevation") + + elif cod == "HYCOM/sea_temp_salinity": + dataset = ee.ImageCollection("HYCOM/sea_temp_salinity").filter(ee.Filter.date("2018-08-01", "2018-08-15")) + seaWaterTemperature = dataset.select("water_temp_0").map(lambda image: ee.Image(image).multiply(0.001).add(20)) + visParams = { + "min": -2.0, + "max": 34.0, + "palette": ["000000", "005aff", "43c8c8", "fff700", "ff0000"], + } + Map.setCenter(-88.6, 26.4, 1) + Map.addLayer(seaWaterTemperature.mean(), visParams, "Sea Water Temperature") + + + elif cod == "HYCOM/sea_water_velocity": + velocity = ee.Image("HYCOM/sea_water_velocity/2014040700").divide(1000) + Map.addLayer(velocity.select("velocity_u_0").hypot(velocity.select("velocity_v_0"))) + Map.setCenter(-60, 33, 5) + + elif cod == "IDAHO_EPSCOR/GRIDMET": + dataset = ee.ImageCollection("IDAHO_EPSCOR/GRIDMET").filter(ee.Filter.date("2018-08-01", "2018-08-15")) + maximumTemperature = dataset.select("tmmx") + maximumTemperatureVis = { + "min": 290.0, + "max": 314.0, + "palette": ["d8d8d8", "4addff", "5affa3", "f2ff89", "ff725c"], + } + Map.setCenter(-115.356, 38.686, 5) + Map.addLayer(maximumTemperature, maximumTemperatureVis, "Maximum Temperature") + + elif cod == "IDAHO_EPSCOR/MACAv2_METDATA": + dataset = ee.ImageCollection("IDAHO_EPSCOR/MACAv2_METDATA").filter(ee.Filter.date("2018-08-01", "2018-08-15")) + maximumTemperature = dataset.select("tasmax") + maximumTemperatureVis = { + "min": 290.0, + "max": 314.0, + "palette": ["d8d8d8", "4addff", "5affa3", "f2ff89", "ff725c"], + } + Map.setCenter(-84.37, 33.5, 5) + Map.addLayer(maximumTemperature, maximumTemperatureVis, "Maximum Temperature") + + elif cod == "IDAHO_EPSCOR/MACAv2_METDATA_MONTHLY": + dataset = ee.ImageCollection("IDAHO_EPSCOR/MACAv2_METDATA_MONTHLY").filter(ee.Filter.date("2018-07-01", "2018-08-01")) + maximumTemperature = dataset.select("tasmax") + maximumTemperatureVis = { + "min": 290.0, + "max": 314.0, + "palette": ["d8d8d8", "4addff", "5affa3", "f2ff89", "ff725c"], + } + Map.setCenter(-115.356, 38.686, 5) + Map.addLayer(maximumTemperature, maximumTemperatureVis, "Maximum Temperature") + + elif cod == "IDAHO_EPSCOR/TERRACLIMATE": + dataset = ee.ImageCollection("IDAHO_EPSCOR/TERRACLIMATE").filter(ee.Filter.date("2017-07-01", "2017-08-01")) + maximumTemperature = dataset.select("tmmx") + maximumTemperatureVis = { + "min": -300.0, + "max": 300.0, + "palette": ["1a3678", "2955bc", "5699ff", "8dbae9", "acd1ff", "caebff", "e5f9ff", + "fdffb4", "ffe6a2", "ffc969", "ffa12d", "ff7c1f", "ca531a", "ff0000", "ab0000"]} + Map.setCenter(71.72, 52.48, 3) + Map.addLayer(maximumTemperature, maximumTemperatureVis, "Maximum Temperature") + + elif cod == "IGN/RGE_ALTI/1M/2_0/FXX": + dataset = ee.Image("IGN/RGE_ALTI/1M/2_0/FXX") + elevation = dataset.select("MNT") + elevationVis = { + "min": 0, + "max": 1000, + "palette": ["006600", "002200", "fff700", "ab7634", "c4d0ff", "ffffff"]} + Map.addLayer(elevation, elevationVis, "Elevation") + Map.setCenter(3, 47, 5) + + ###https://developers.google.com/earth-engine/datasets/catalog/ISDASOIL_Africa_v1_aluminium_extractable + + elif cod == "ISDASOIL/Africa/v1/aluminium_extractable": + mean_0_20 = """ + + + + + + + + + + + + + + + + + + + + """ + mean_20_50 = """ + + + + + + + + + + + + + + + + + + + + """ + stdev_0_20 = """ + + + + + + + + + + """ + stdev_20_50 = """ + + + + + + + + + + """ + Map.setCenter(25, -3, 2) + raw = ee.Image("ISDASOIL/Africa/v1/aluminium_extractable") + Map.addLayer( + raw.select(0).sldStyle(mean_0_20), {},"Aluminium, extractable, mean visualization, 0-20 cm") + Map.addLayer(raw.select(1).sldStyle(mean_20_50), {},"Aluminium, extractable, mean visualization, 20-50 cm") + Map.addLayer(raw.select(2).sldStyle(stdev_0_20), {},"Aluminium, extractable, stdev visualization, 0-20 cm") + Map.addLayer(raw.select(3).sldStyle(stdev_20_50), {},"Aluminium, extractable, stdev visualization, 20-50 cm") + converted = raw.divide(10).exp().subtract(1) + Map.addLayer(converted.select(0), {"min": 0, "max": 100},"Aluminium, extractable, mean, 0-20 cm") + + elif cod == "ISDASOIL/Africa/v1/bedrock_depth": + mean_0_200 = """ + + + + + + + + + + + + + + + + + + + + """ + stdev_0_200 = """ + + + + + + + + + + """ + raw = ee.Image("ISDASOIL/Africa/v1/bedrock_depth") + Map.addLayer(raw.select(0).sldStyle(mean_0_200), {},"Bedrock depth, mean visualization, 0-200 cm") + Map.addLayer(raw.select(1).sldStyle(stdev_0_200), {},"Bedrock depth, stdev visualization, 0-200 cm") + visualization = {"min": 27, "max": 200} + Map.setCenter(25, -3, 2) + Map.addLayer(raw.select(0), visualization, "Bedrock depth, mean, 0-200 cm") + + elif cod == "ISDASOIL/Africa/v1/bulk_density": + mean_0_20 = """ + + + + + + + + + + + + + + + + + + + + """ + mean_20_50 = """ + + + + + + + + + + + + + + + + + + + + """ + stdev_0_20 = """ + + + + + + + + + + """ + stdev_20_50 = """ + + + + + + + + + + """ + raw = ee.Image("ISDASOIL/Africa/v1/bulk_density") + Map.addLayer(raw.select(0).sldStyle(mean_0_20), {},"Bulk density, mean visualization, 0-20 cm") + Map.addLayer(raw.select(1).sldStyle(mean_20_50), {},"Bulk density, mean visualization, 20-50 cm") + Map.addLayer(raw.select(2).sldStyle(stdev_0_20), {},"Bulk density, stdev visualization, 0-20 cm") + Map.addLayer(raw.select(3).sldStyle(stdev_20_50), {},"Bulk density, stdev visualization, 20-50 cm") + converted = raw.divide(100) + visualization = {"min": 1, "max": 1.5} + Map.setCenter(25, -3, 2) + Map.addLayer(converted.select(0), visualization, "Bulk density, mean, 0-20 cm") + + elif cod == "ISDASOIL/Africa/v1/calcium_extractable": + mean_0_20 = """ + + + + + + + + + + + + + + + + + + + + """ + mean_20_50 = """ + + + + + + + + + + + + + + + + + + + + """ + stdev_0_20 = """ + + + + + + + + + + """ + stdev_20_50 = """ + + + + + + + + + + """ + raw = ee.Image("ISDASOIL/Africa/v1/calcium_extractable") + Map.addLayer(raw.select(0).sldStyle(mean_0_20), {},"Calcium, extractable, mean visualization, 0-20 cm") + Map.addLayer(raw.select(1).sldStyle(mean_20_50), {},"Calcium, extractable, mean visualization, 20-50 cm") + Map.addLayer(raw.select(2).sldStyle(stdev_0_20), {},"Calcium, extractable, stdev visualization, 0-20 cm") + Map.addLayer(raw.select(3).sldStyle(stdev_20_50), {},"Calcium, extractable, stdev visualization, 20-50 cm") + converted = raw.divide(10).exp().subtract(1) + visualization = {"min": 100, "max": 2000} + Map.setCenter(25, -3, 2) + Map.addLayer(converted.select(0), visualization, "Calcium, extractable, mean, 0-20 cm") + + elif cod == "ISDASOIL/Africa/v1/carbon_organic": + mean_0_20 = """ + + + + + + + + + + + + + + + + + + + + """ + mean_20_50 = """ + + + + + + + + + + + + + + + + + + + + """ + stdev_0_20 = """ + + + + + + + + + + """ + stdev_20_50 = """ + + + + + + + + + + """ + raw = ee.Image("ISDASOIL/Africa/v1/carbon_organic") + Map.addLayer(raw.select(0).sldStyle(mean_0_20), {},"Carbon, organic, mean visualization, 0-20 cm") + Map.addLayer(raw.select(1).sldStyle(mean_20_50), {},"Carbon, organic, mean visualization, 20-50 cm") + Map.addLayer(raw.select(2).sldStyle(stdev_0_20), {},"Carbon, organic, stdev visualization, 0-20 cm") + Map.addLayer(raw.select(3).sldStyle(stdev_20_50), {},"Carbon, organic, stdev visualization, 20-50 cm") + converted = raw.divide(10).exp().subtract(1) + visualization = {"min": 0, "max": 20} + Map.setCenter(25, -3, 2) + Map.addLayer(converted.select(0), visualization, "Carbon, organic, mean, 0-20 cm") + + elif cod == "ISDASOIL/Africa/v1/carbon_total": + mean_0_20 = """ + + + + + + + + + + + + + + + + + + + + """ + mean_20_50 = """ + + + + + + + + + + + + + + + + + + + + """ + stdev_0_20 = """ + + + + + + + + + + """ + stdev_20_50 = """ + + + + + + + + + + """ + raw = ee.Image("ISDASOIL/Africa/v1/carbon_total") + Map.addLayer(raw.select(0).sldStyle(mean_0_20), {},"Carbon, total, mean visualization, 0-20 cm") + Map.addLayer(raw.select(1).sldStyle(mean_20_50), {},"Carbon, total, mean visualization, 20-50 cm") + Map.addLayer(raw.select(2).sldStyle(stdev_0_20), {},"Carbon, total, stdev visualization, 0-20 cm") + Map.addLayer(raw.select(3).sldStyle(stdev_20_50), {},"Carbon, total, stdev visualization, 20-50 cm") + converted = raw.divide(10).exp().subtract(1) + visualization = {"min": 0, "max": 60} + Map.setCenter(25, -3, 2) + Map.addLayer(converted.select(0), visualization, "Carbon, total, mean, 0-20 cm") + + elif cod == "ISDASOIL/Africa/v1/cation_exchange_capacity": + mean_0_20 = """ + + + + + + + + + + + + + + + + + + + + """ + mean_20_50 = """ + + + + + + + + + + + + + + + + + + + + """ + stdev_0_20 = """ + + + + + + + + + + """ + stdev_20_50 = """ + + + + + + + + + + """ + raw = ee.Image("ISDASOIL/Africa/v1/cation_exchange_capacity") + Map.addLayer(raw.select(0).sldStyle(mean_0_20), {},"Cation exchange capacity, mean visualization, 0-20 cm") + Map.addLayer(raw.select(1).sldStyle(mean_20_50), {},"Cation exchange capacity, mean visualization, 20-50 cm") + Map.addLayer(raw.select(2).sldStyle(stdev_0_20), {},"Cation exchange capacity, stdev visualization, 0-20 cm") + Map.addLayer(raw.select(3).sldStyle(stdev_20_50), {},"Cation exchange capacity, stdev visualization, 20-50 cm") + converted = raw.divide(10).exp().subtract(1) + visualization = {"min": 0, "max": 25} + Map.setCenter(25, -3, 2) + Map.addLayer(converted.select(0), visualization, "Cation exchange capacity, mean, 0-20 cm") + + elif cod == "ISDASOIL/Africa/v1/clay_content": + mean_0_20 = """ + + + + + + + + + + + + + + + + + + + + """ + mean_20_50 = """ + + + + + + + + + + + + + + + + + + + + """ + stdev_0_20 = """ + + + + + + + + + + """ + stdev_20_50 = """ + + + + + + + + + + """ + raw = ee.Image("ISDASOIL/Africa/v1/clay_content") + Map.addLayer(raw.select(0).sldStyle(mean_0_20), {},"Clay content, mean visualization, 0-20 cm") + Map.addLayer(raw.select(1).sldStyle(mean_20_50), {},"Clay content, mean visualization, 20-50 cm") + Map.addLayer(raw.select(2).sldStyle(stdev_0_20), {},"Clay content, stdev visualization, 0-20 cm") + Map.addLayer(raw.select(3).sldStyle(stdev_20_50), {},"Clay content, stdev visualization, 20-50 cm") + converted = raw.divide(10).exp().subtract(1) + visualization = {"min": 0, "max": 50} + Map.setCenter(25, -3, 2) + Map.addLayer(converted.select(0), visualization, "Clay content, mean, 0-20 cm") + + elif cod == "ISDASOIL/Africa/v1/fcc": + raw = ee.Image("ISDASOIL/Africa/v1/fcc").select(0) + converted = ee.Image(raw.mod(3000).copyProperties(raw)) + Map.setCenter(25, -3, 2) + Map.addLayer(converted, {}, "Fertility Capability Classification") + + elif cod == "ISDASOIL/Africa/v1/iron_extractable": + mean_0_20 = """ + + + + + + + + + + + + + + + + + + + + """ + mean_20_50 = """ + + + + + + + + + + + + + + + + + + + + """ + stdev_0_20 = """ + + + + + + + + + + """ + stdev_20_50 = """ + + + + + + + + + + """ + raw = ee.Image("ISDASOIL/Africa/v1/iron_extractable") + Map.addLayer(raw.select(0).sldStyle(mean_0_20), {},"Iron, extractable, mean visualization, 0-20 cm") + Map.addLayer(raw.select(1).sldStyle(mean_20_50), {},"Iron, extractable, mean visualization, 20-50 cm") + Map.addLayer(raw.select(2).sldStyle(stdev_0_20), {},"Iron, extractable, stdev visualization, 0-20 cm") + Map.addLayer(raw.select(3).sldStyle(stdev_20_50), {},"Iron, extractable, stdev visualization, 20-50 cm") + converted = raw.divide(10).exp().subtract(1) + visualization = {"min": 0, "max": 140} + Map.setCenter(25, -3, 2) + Map.addLayer(converted.select(0), visualization, "Iron, extractable, mean, 0-20 cm") + + elif cod == "ISDASOIL/Africa/v1/magnesium_extractable": + mean_0_20 = """ + + + + + + + + + + + + + + + + + + + + """ + mean_20_50 = """ + + + + + + + + + + + + + + + + + + + + """ + stdev_0_20 = """ + + + + + + + + + + """ + stdev_20_50 = """ + + + + + + + + + + """ + raw = ee.Image("ISDASOIL/Africa/v1/magnesium_extractable") + Map.addLayer(raw.select(0).sldStyle(mean_0_20), {},"Magnesium, extractable, mean visualization, 0-20 cm") + Map.addLayer(raw.select(1).sldStyle(mean_20_50), {},"Magnesium, extractable, mean visualization, 20-50 cm") + Map.addLayer(raw.select(2).sldStyle(stdev_0_20), {},"Magnesium, extractable, stdev visualization, 0-20 cm") + Map.addLayer(raw.select(3).sldStyle(stdev_20_50), {},"Magnesium, extractable, stdev visualization, 20-50 cm") + converted = raw.divide(10).exp().subtract(1) + visualization = {"min": 0, "max": 500} + Map.setCenter(25, -3, 2) + Map.addLayer(converted.select(0), visualization, "Magnesium, extractable, mean, 0-20 cm") + + elif cod == "ISDASOIL/Africa/v1/nitrogen_total": + mean_0_20 = """ + + + + + + + + + + + + + + + + + + + + """ + mean_20_50 = """ + + + + + + + + + + + + + + + + + + + + """ + stdev_0_20 = """ + + + + + + + + + + """ + stdev_20_50 = """ + + + + + + + + + + """ + raw = ee.Image("ISDASOIL/Africa/v1/nitrogen_total") + Map.addLayer(raw.select(0).sldStyle(mean_0_20), {},"Nitrogen, total, mean visualization, 0-20 cm") + Map.addLayer(raw.select(1).sldStyle(mean_20_50), {},"Nitrogen, total, mean visualization, 20-50 cm") + Map.addLayer(raw.select(2).sldStyle(stdev_0_20), {},"Nitrogen, total, stdev visualization, 0-20 cm") + Map.addLayer(raw.select(3).sldStyle(stdev_20_50), {},"Nitrogen, total, stdev visualization, 20-50 cm") + converted = raw.divide(100).exp().subtract(1) + visualization = {"min": 0, "max": 10000} + Map.setCenter(25, -3, 2) + Map.addLayer(converted.select(0), visualization, "Nitrogen, total, mean, 0-20 cm") + + elif cod == "ISDASOIL/Africa/v1/ph": + mean_0_20 = """ + + + + + + + + + + + + + + + + + + + + """ + mean_20_50 = """ + + + + + + + + + + + + + + + + + + + + """ + stdev_0_20 = """ + + + + + + + + + + """ + stdev_20_50 = """ + + + + + + + + + + """ + raw = ee.Image("ISDASOIL/Africa/v1/ph") + Map.addLayer(raw.select(0).sldStyle(mean_0_20), {},"ph, mean visualization, 0-20 cm") + Map.addLayer(raw.select(1).sldStyle(mean_20_50), {},"ph, mean visualization, 20-50 cm") + Map.addLayer(raw.select(2).sldStyle(stdev_0_20), {},"ph, stdev visualization, 0-20 cm") + Map.addLayer(raw.select(3).sldStyle(stdev_20_50), {},"ph, stdev visualization, 20-50 cm") + converted = raw.divide(10) + visualization = {"min": 4, "max": 8} + Map.setCenter(25, -3, 2) + Map.addLayer(converted.select(0), visualization, "ph, mean, 0-20 cm") + + elif cod == "ISDASOIL/Africa/v1/phosphorus_extractable": + mean_0_20 = """ + + + + + + + + + + + + + + + + + + + + """ + mean_20_50 = """ + + + + + + + + + + + + + + + + + + + + """ + stdev_0_20 = """ + + + + + + + + + + """ + stdev_20_50 = """ + + + + + + + + + + """ + raw = ee.Image("ISDASOIL/Africa/v1/phosphorus_extractable") + Map.addLayer(raw.select(0).sldStyle(mean_0_20), {},"Phosphorus extractable, mean visualization, 0-20 cm") + Map.addLayer(raw.select(1).sldStyle(mean_20_50), {},"Phosphorus extractable, mean visualization, 20-50 cm") + Map.addLayer(raw.select(2).sldStyle(stdev_0_20), {},"Phosphorus extractable, stdev visualization, 0-20 cm") + Map.addLayer(raw.select(3).sldStyle(stdev_20_50), {},"Phosphorus extractable, stdev visualization, 20-50 cm") + converted = raw.divide(10).exp().subtract(1) + visualization = {"min": 0, "max": 15} + Map.setCenter(25, -3, 2) + Map.addLayer(converted.select(0), visualization, "Phosphorus extractable, mean, 0-20 cm") + + elif cod == "ISDASOIL/Africa/v1/potassium_extractable": + mean_0_20 = """ + + + + + + + + + + + + + + + + + + + + """ + mean_20_50 = """ + + + + + + + + + + + + + + + + + + + + """ + stdev_0_20 = """ + + + + + + + + + + """ + stdev_20_50 = """ + + + + + + + + + + """ + raw = ee.Image("ISDASOIL/Africa/v1/potassium_extractable") + Map.addLayer(raw.select(0).sldStyle(mean_0_20), {},"Potassium extractable, mean visualization, 0-20 cm") + Map.addLayer(raw.select(1).sldStyle(mean_20_50), {},"Potassium extractable, mean visualization, 20-50 cm") + Map.addLayer(raw.select(2).sldStyle(stdev_0_20), {},"Potassium extractable, stdev visualization, 0-20 cm") + Map.addLayer(raw.select(3).sldStyle(stdev_20_50), {},"Potassium extractable, stdev visualization, 20-50 cm") + converted = raw.divide(10).exp().subtract(1) + visualization = {"min": 0, "max": 250} + Map.setCenter(25, -3, 2) + Map.addLayer(converted.select(0), visualization, "Potassium extractable, mean, 0-20 cm") + + elif cod == "ISDASOIL/Africa/v1/sand_content": + mean_0_20 = """ + + + + + + + + + + + + + + + + + + + + """ + mean_20_50 = """ + + + + + + + + + + + + + + + + + + + + """ + stdev_0_20 = """ + + + + + + + + + + """ + stdev_20_50 = """ + + + + + + + + + + """ + raw = ee.Image("ISDASOIL/Africa/v1/sand_content") + Map.addLayer(raw.select(0).sldStyle(mean_0_20), {},"Sand content, mean visualization, 0-20 cm") + Map.addLayer(raw.select(1).sldStyle(mean_20_50), {},"Sand content, mean visualization, 20-50 cm") + Map.addLayer(raw.select(2).sldStyle(stdev_0_20), {},"Sand content, stdev visualization, 0-20 cm") + Map.addLayer(raw.select(3).sldStyle(stdev_20_50), {},"Sand content, stdev visualization, 20-50 cm") + converted = raw.divide(10).exp().subtract(1) + visualization = {"min": 0, "max": 3000} + Map.setCenter(25, -3, 2) + Map.addLayer(converted.select(0), visualization, "Sand content, mean, 0-20 cm") + + elif cod == "ISDASOIL/Africa/v1/silt_content": + mean_0_20 = """ + + + + + + + + + + + + + + + + + + + + """ + mean_20_50 = """ + + + + + + + + + + + + + + + + + + + + """ + stdev_0_20 = """ + + + + + + + + + + """ + stdev_20_50 = """ + + + + + + + + + + """ + raw = ee.Image("ISDASOIL/Africa/v1/silt_content") + Map.addLayer(raw.select(0).sldStyle(mean_0_20), {},"Silt content, mean visualization, 0-20 cm") + Map.addLayer(raw.select(1).sldStyle(mean_20_50), {},"Silt content, mean visualization, 20-50 cm") + Map.addLayer(raw.select(2).sldStyle(stdev_0_20), {},"Silt content, stdev visualization, 0-20 cm") + Map.addLayer(raw.select(3).sldStyle(stdev_20_50), {},"Silt content, stdev visualization, 20-50 cm") + converted = raw.divide(10).exp().subtract(1) + visualization = {"min": 0, "max": 15} + Map.setCenter(25, -3, 2) + Map.addLayer(converted.select(0), visualization, "Silt content, mean, 0-20 cm") + + elif cod == "ISDASOIL/Africa/v1/stone_content": + mean_0_20 = """ + + + + + + + + + + + + + + + + + + + + """ + mean_20_50 = """ + + + + + + + + + + + + + + + + + + + + """ + stdev_0_20 = """ + + + + + + + + + + """ + stdev_20_50 = """ + + + + + + + + + + """ + raw = ee.Image("ISDASOIL/Africa/v1/stone_content") + Map.addLayer(raw.select(0).sldStyle(mean_0_20), {},"Stone content, mean visualization, 0-20 cm") + Map.addLayer(raw.select(1).sldStyle(mean_20_50), {},"Stone content, mean visualization, 20-50 cm") + Map.addLayer(raw.select(2).sldStyle(stdev_0_20), {},"Stone content, stdev visualization, 0-20 cm") + Map.addLayer(raw.select(3).sldStyle(stdev_20_50), {},"Stone content, stdev visualization, 20-50 cm") + converted = raw.divide(10).exp().subtract(1) + visualization = {"min": 0, "max": 6} + Map.setCenter(25, -3, 2) + Map.addLayer(converted.select(0), visualization, "Stone content, mean, 0-20 cm") + + elif cod == "ISDASOIL/Africa/v1/sulphur_extractable": + mean_0_20 = """ + + + + + + + + + + + + + + + + + + + + """ + mean_20_50 = """ + + + + + + + + + + + + + + + + + + + + """ + stdev_0_20 = """ + + + + + + + + + + """ + stdev_20_50 = """ + + + + + + + + + + """ + raw = ee.Image("ISDASOIL/Africa/v1/sulphur_extractable") + Map.addLayer(raw.select(0).sldStyle(mean_0_20), {},"Sulphur extractable, mean visualization, 0-20 cm") + Map.addLayer(raw.select(1).sldStyle(mean_20_50), {},"Sulphur extractable, mean visualization, 20-50 cm") + Map.addLayer(raw.select(2).sldStyle(stdev_0_20), {},"Sulphur extractable, stdev visualization, 0-20 cm") + Map.addLayer(raw.select(3).sldStyle(stdev_20_50), {},"Sulphur extractable, stdev visualization, 20-50 cm") + converted = raw.divide(10).exp().subtract(1) + visualization = {"min": 0, "max": 20} + Map.setCenter(25, -3, 2) + Map.addLayer(converted.select(0), visualization, "Sulphur extractable, mean, 0-20 cm") + + + + elif cod == "ISDASOIL/Africa/v1/texture_class": + raw = ee.Image("ISDASOIL/Africa/v1/texture_class") + Map.addLayer(raw.select(0), {}, "Texture class, 0-20 cm") + Map.addLayer(raw.select(1), {}, "Texture class, 20-50 cm") + Map.setCenter(25, -3, 2) + + elif cod == "ISDASOIL/Africa/v1/zinc_extractable": + mean_0_20 = """ + + + + + + + + + + + + + + + + + + + + """ + mean_20_50 = """ + + + + + + + + + + + + + + + + + + + + """ + stdev_0_20 = """ + + + + + + + + + + """ + stdev_20_50 = """ + + + + + + + + + + """ + raw = ee.Image("ISDASOIL/Africa/v1/zinc_extractable") + Map.addLayer(raw.select(0).sldStyle(mean_0_20), {},"Zinc, extractable, mean visualization, 0-20 cm") + Map.addLayer(raw.select(1).sldStyle(mean_20_50), {},"Zinc, extractable, mean visualization, 20-50 cm") + Map.addLayer(raw.select(2).sldStyle(stdev_0_20), {},"Zinc, extractable, stdev visualization, 0-20 cm") + Map.addLayer(raw.select(3).sldStyle(stdev_20_50), {},"Zinc, extractable, stdev visualization, 20-50 cm") + converted = raw.divide(10).exp().subtract(1) + visualization = {"min": 0, "max": 10} + Map.setCenter(25, -3, 2) + Map.addLayer(converted.select(0), visualization, "Zinc, extractable, mean, 0-20 cm") + + elif cod == "JAXA/ALOS/AVNIR-2/ORI": + dataset = ee.ImageCollection("JAXA/ALOS/AVNIR-2/ORI").filter(ee.Filter.date("2011-01-01", "2011-04-01")) + avnir2OriRgb = dataset.select(["B3", "B2", "B1"]) + avnir2OriRgbVis = { + "min": 0.0, + "max": 255.0, + } + Map.setCenter(138.7302, 35.3641, 12) + Map.addLayer(avnir2OriRgb, avnir2OriRgbVis, "AVNIR-2 ORI RGB") + + elif cod == "JAXA/ALOS/AW3D30/V3_2": + dataset = ee.ImageCollection("JAXA/ALOS/AW3D30/V3_2") + elevation = dataset.select("DSM") + elevationVis = { + "min": 0, + "max": 5000, + "palette": ["0000ff", "00ffff", "ffff00", "ff0000", "ffffff"] + } + Map.setCenter(138.73, 35.36, 11) + Map.addLayer(elevation, elevationVis, "Elevation") + proj = elevation.first().select(0).projection() + slopeReprojected = ee.Terrain.slope(elevation.mosaic().setDefaultProjection(proj)) + Map.addLayer(slopeReprojected, {"min": 0, "max": 45}, "Slope") + + elif cod == "JAXA/ALOS/PALSAR-2/Level2_2/ScanSAR": + collection = ee.ImageCollection("JAXA/ALOS/PALSAR-2/Level2_2/ScanSAR").filterBounds(ee.Geometry.Point(143, -5)) + image = collection.first() + Map.addLayer(image.select(["HH"]), {"min": 0, "max": 8000}, "HH polarization") + Map.centerObject(image) + + elif cod =="JAXA/ALOS/PALSAR/YEARLY/FNF": + dataset = ee.ImageCollection("JAXA/ALOS/PALSAR/YEARLY/FNF").filterDate("2017-01-01", "2017-12-31") + forestNonForest = dataset.select("fnf") + forestNonForestVis = { + "min": 1.0, + "max": 3.0, + "palette": ["006400", "FEFF99", "0000FF"], + } + Map.setCenter(136.85, 37.37, 4) + Map.addLayer(forestNonForest, forestNonForestVis, "Forest/Non-Forest") + + elif cod == "JAXA/ALOS/PALSAR/YEARLY/FNF4": + dataset = ee.ImageCollection("JAXA/ALOS/PALSAR/YEARLY/FNF4").filterDate("2018-01-01", "2018-12-31") + forestNonForest = dataset.select("fnf") + forestNonForestVis = { + "min": 1.0, + "max": 4.0, + "palette": ["00B200","83EF62","FFFF99","0000FF"], + } + Map.setCenter(136.85, 37.37, 4) + Map.addLayer(forestNonForest, forestNonForestVis, "Forest/Non-Forest") + + elif cod == "JAXA/ALOS/PALSAR/YEARLY/SAR": + dataset = ee.ImageCollection("JAXA/ALOS/PALSAR/YEARLY/SAR").filter(ee.Filter.date("2017-01-01", "2018-01-01")) + sarHh = dataset.select("HH") + sarHhVis = { + "min": 0.0, + "max": 10000.0, + } + Map.setCenter(136.85, 37.37, 4) + Map.addLayer(sarHh, sarHhVis, "SAR HH") + + elif cod == "JAXA/ALOS/PALSAR/YEARLY/SAR_EPOCH": + dataset = ee.ImageCollection("JAXA/ALOS/PALSAR/YEARLY/SAR_EPOCH").filter(ee.Filter.date("2017-01-01", "2018-01-01")) + sarHh = dataset.select("HH") + sarHhVis = { + "min": 0.0, + "max": 10000.0, + } + Map.setCenter(136.85, 37.37, 4) + Map.addLayer(sarHh, sarHhVis, "SAR HH") + + elif cod == "JAXA/GCOM-C/L3/LAND/LAI/V1": + dataset = ee.ImageCollection("JAXA/GCOM-C/L3/LAND/LAI/V1").filterDate("2020-01-01", "2020-02-01").filter(ee.Filter.eq("SATELLITE_DIRECTION", "D")) + dataset = dataset.mean().multiply(0.001) + visualization = { + "bands": ["LAI_AVE"], + "min": -7, + "max": 7, + "palette": [ + "040274","040281","0502a3","0502b8","0502ce","0502e6", + "0602ff","235cb1","307ef3","269db1","30c8e2","32d3ef", + "3be285","3ff38f","86e26f","3ae237","b5e22e","d6e21f", + "fff705","ffd611","ffb613","ff8b13","ff6e08","ff500d", + "ff0000","de0101","c21301","a71001","911003", + ] + } + Map.setCenter(128.45, 33.33, 5) + Map.addLayer(dataset, visualization, "Leaf Area Index") + + elif cod == "JAXA/GCOM-C/L3/LAND/LAI/V2": + dataset = ee.ImageCollection("JAXA/GCOM-C/L3/LAND/LAI/V2").filterDate("2020-01-01", "2020-02-01").filter(ee.Filter.eq("SATELLITE_DIRECTION", "D")) + dataset = dataset.mean().multiply(0.001) + visualization = { + "bands": ["LAI_AVE"], + "min": -7, + "max": 7, + "palette": [ + "040274","040281","0502a3","0502b8","0502ce","0502e6", + "0602ff","235cb1","307ef3","269db1","30c8e2","32d3ef", + "3be285","3ff38f","86e26f","3ae237","b5e22e","d6e21f", + "fff705","ffd611","ffb613","ff8b13","ff6e08","ff500d", + "ff0000","de0101","c21301","a71001","911003", + ] + } + Map.setCenter(128.45, 33.33, 5) + Map.addLayer(dataset, visualization, "Leaf Area Index") + + elif cod == "JAXA/GCOM-C/L3/LAND/LAI/V3": + dataset = ee.ImageCollection("JAXA/GCOM-C/L3/LAND/LAI/V3").filterDate("2021-12-01", "2022-01-01").filter(ee.Filter.eq("SATELLITE_DIRECTION", "D")) + dataset = dataset.mean().multiply(0.001) + visualization = { + "bands": ["LAI_AVE"], + "min": -7, + "max": 7, + "palette": [ + "040274","040281","0502a3","0502b8","0502ce","0502e6", + "0602ff","235cb1","307ef3","269db1","30c8e2","32d3ef", + "3be285","3ff38f","86e26f","3ae237","b5e22e","d6e21f", + "fff705","ffd611","ffb613","ff8b13","ff6e08","ff500d", + "ff0000","de0101","c21301","a71001","911003", + ] + } + Map.setCenter(128.45, 33.33, 5) + Map.addLayer(dataset, visualization, "Leaf Area Index") + + elif cod == "JAXA/GCOM-C/L3/LAND/LST/V1": + dataset = ee.ImageCollection("JAXA/GCOM-C/L3/LAND/LST/V1").filterDate("2020-01-01", "2020-02-01").filter(ee.Filter.eq("SATELLITE_DIRECTION", "D")) + dataset = dataset.mean().multiply(0.02) + visualization = { + "bands": ["LST_AVE"], + "min": 250, + "max": 316, + "palette": [ + "040274","040281","0502a3","0502b8","0502ce","0502e6", + "0602ff","235cb1","307ef3","269db1","30c8e2","32d3ef", + "3be285","3ff38f","86e26f","3ae237","b5e22e","d6e21f", + "fff705","ffd611","ffb613","ff8b13","ff6e08","ff500d", + "ff0000","de0101","c21301","a71001","911003", + ] + } + Map.setCenter(128.45, 33.33, 5) + Map.addLayer(dataset, visualization, "Land Surface Temperature") + + elif cod == "JAXA/GCOM-C/L3/LAND/LST/V2": + dataset = ee.ImageCollection("JAXA/GCOM-C/L3/LAND/LST/V2").filterDate("2020-01-01", "2020-02-01").filter(ee.Filter.eq("SATELLITE_DIRECTION", "D")) + dataset = dataset.mean().multiply(0.02) + visualization = { + "bands": ["LST_AVE"], + "min": 250, + "max": 316, + "palette": [ + "040274","040281","0502a3","0502b8","0502ce","0502e6", + "0602ff","235cb1","307ef3","269db1","30c8e2","32d3ef", + "3be285","3ff38f","86e26f","3ae237","b5e22e","d6e21f", + "fff705","ffd611","ffb613","ff8b13","ff6e08","ff500d", + "ff0000","de0101","c21301","a71001","911003", + ] + } + Map.setCenter(128.45, 33.33, 5) + Map.addLayer(dataset, visualization, "Land Surface Temperature") + + elif cod == "JAXA/GCOM-C/L3/LAND/LST/V3": + dataset = ee.ImageCollection("JAXA/GCOM-C/L3/LAND/LST/V3").filterDate("2021-12-01", "2022-01-01").filter(ee.Filter.eq("SATELLITE_DIRECTION", "D")) + dataset = dataset.mean().multiply(0.02) + visualization = { + "bands": ["LST_AVE"], + "min": 250, + "max": 316, + "palette": [ + "040274","040281","0502a3","0502b8","0502ce","0502e6", + "0602ff","235cb1","307ef3","269db1","30c8e2","32d3ef", + "3be285","3ff38f","86e26f","3ae237","b5e22e","d6e21f", + "fff705","ffd611","ffb613","ff8b13","ff6e08","ff500d", + "ff0000","de0101","c21301","a71001","911003", + ] + } + Map.setCenter(128.45, 33.33, 5) + Map.addLayer(dataset, visualization, "Land Surface Temperature") + + elif cod == "JAXA/GCOM-C/L3/OCEAN/CHLA/V1": + dataset = ee.ImageCollection("JAXA/GCOM-C/L3/OCEAN/CHLA/V1").filterDate("2020-01-01", "2020-02-01").filter(ee.Filter.eq("SATELLITE_DIRECTION", "D")) + image = dataset.mean().multiply(0.0016).log10() + vis = { + "bands": ["CHLA_AVE"], + "min": -2, + "max": 2, + "palette": [ + "3500a8","0800ba","003fd6", + "00aca9","77f800","ff8800", + "b30000","920000","880000" + ] + } + Map.addLayer(image, vis, "Chlorophyll-a concentration") + Map.setCenter(128.45, 33.33, 5) + + elif cod == "JAXA/GCOM-C/L3/OCEAN/CHLA/V2": + dataset = ee.ImageCollection("JAXA/GCOM-C/L3/OCEAN/CHLA/V2").filterDate("2020-01-01", "2020-02-01").filter(ee.Filter.eq("SATELLITE_DIRECTION", "D")) + image = dataset.mean().multiply(0.0016).log10() + vis = { + "bands": ["CHLA_AVE"], + "min": -2, + "max": 2, + "palette": [ + "3500a8","0800ba","003fd6", + "00aca9","77f800","ff8800", + "b30000","920000","880000" + ] + } + Map.addLayer(image, vis, "Chlorophyll-a concentration") + Map.setCenter(128.45, 33.33, 5) + + elif cod == "JAXA/GCOM-C/L3/OCEAN/CHLA/V3": + dataset = ee.ImageCollection("JAXA/GCOM-C/L3/OCEAN/CHLA/V3").filterDate("2021-12-01", "2022-01-01").filter(ee.Filter.eq("SATELLITE_DIRECTION", "D")) + image = dataset.mean().multiply(0.0016).log10() + vis = { + "bands": ["CHLA_AVE"], + "min": -2, + "max": 2, + "palette": [ + "3500a8","0800ba","003fd6", + "00aca9","77f800","ff8800", + "b30000","920000","880000" + ] + } + Map.addLayer(image, vis, "Chlorophyll-a concentration") + Map.setCenter(128.45, 33.33, 5) + + elif cod == "JAXA/GCOM-C/L3/OCEAN/SST/V1": + dataset = ee.ImageCollection("JAXA/GCOM-C/L3/OCEAN/SST/V1").filterDate("2020-01-01", "2020-02-01").filter(ee.Filter.eq("SATELLITE_DIRECTION", "D")) + dataset = dataset.mean().multiply(0.0012).add(-10) + vis = { + "bands": ["SST_AVE"], + "min": 0, + "max": 30, + "palette": ["000000", "005aff", "43c8c8", "fff700", "ff0000"], + } + Map.setCenter(128.45, 33.33, 5) + Map.addLayer(dataset, vis, "Sea Surface Temperature") + + elif cod == "JAXA/GCOM-C/L3/OCEAN/SST/V2": + dataset = ee.ImageCollection("JAXA/GCOM-C/L3/OCEAN/SST/V2").filterDate("2020-01-01", "2020-02-01").filter(ee.Filter.eq("SATELLITE_DIRECTION", "D")) + dataset = dataset.mean().multiply(0.0012).add(-10) + vis = { + "bands": ["SST_AVE"], + "min": 0, + "max": 30, + "palette": ["000000", "005aff", "43c8c8", "fff700", "ff0000"], + } + Map.setCenter(128.45, 33.33, 5) + Map.addLayer(dataset, vis, "Sea Surface Temperature") + + elif cod == "JAXA/GCOM-C/L3/OCEAN/SST/V3": + dataset = ee.ImageCollection("JAXA/GCOM-C/L3/OCEAN/SST/V3").filterDate("2021-12-01", "2022-01-01").filter(ee.Filter.eq("SATELLITE_DIRECTION", "D")) + dataset = dataset.mean().multiply(0.0012).add(-10) + vis = { + "bands": ["SST_AVE"], + "min": 0, + "max": 30, + "palette": ["000000", "005aff", "43c8c8", "fff700", "ff0000"], + } + Map.setCenter(128.45, 33.33, 5) + Map.addLayer(dataset, vis, "Sea Surface Temperature") + + elif cod == "JAXA/GPM_L3/GSMaP/v6/operational": + dataset = ee.ImageCollection("JAXA/GPM_L3/GSMaP/v6/operational").filter(ee.Filter.date("2018-08-06", "2018-08-07")) + precipitation = dataset.select("hourlyPrecipRate") + precipitationVis = { + "min": 0.0, + "max": 30.0, + "palette": + ["1621a2", "ffffff", "03ffff", "13ff03", "efff00", "ffb103", "ff2300"], + } + Map.setCenter(-90.7, 26.12, 2) + Map.addLayer(precipitation, precipitationVis, "Precipitation") + + elif cod == "JAXA/GPM_L3/GSMaP/v6/reanalysis": + dataset = ee.ImageCollection("JAXA/GPM_L3/GSMaP/v6/reanalysis").filter(ee.Filter.date("2014-02-01", "2014-02-02")) + precipitation = dataset.select("hourlyPrecipRate") + precipitationVis = { + "min": 0.0, + "max": 30.0, + "palette": + ["1621a2", "ffffff", "03ffff", "13ff03", "efff00", "ffb103", "ff2300"], + } + Map.setCenter(-90.7, 26.12, 2) + Map.addLayer(precipitation, precipitationVis, "Precipitation") + + elif cod == "JCU/Murray/GIC/global_tidal_wetland_change/2019": + dataset = ee.Image("JCU/Murray/GIC/global_tidal_wetland_change/2019") + Map.setCenter(103.7, 1.3, 12) + Map.setOptions("SATELLITE") + plasma = [ + "0d0887", "3d049b", "6903a5", "8d0fa1", "ae2891", "cb4679", "df6363", + "f0844c", "faa638", "fbcc27", "f0f921" + ] + Map.addLayer(dataset.select("twprobabilityStart"), {"palette": plasma, "min": 0, "max": 100},"twprobabilityStart", False, 1) + Map.addLayer(dataset.select("twprobabilityEnd"), {"palette": plasma, "min": 0, "max": 100},"twprobabilityEnd", False, 1) + lossPalette = ["FE4A49"] + gainPalette = ["2AB7CA"] + Map.addLayer(dataset.select("loss"), {"palette": lossPalette, "min": 1, "max": 1},"Tidal wetland loss", True, 1) + Map.addLayer(dataset.select("gain"), {"palette": gainPalette, "min": 1, "max": 1},"Tidal wetland gain", True, 1) + viridis = ["440154", "414487", "2a788e", "22a884", "7ad151", "fde725"] + Map.addLayer(dataset.select("lossYear"), {"palette": viridis, "min": 4, "max": 19},"Year of loss", False, 0.9) + Map.addLayer(dataset.select("gainYear"), {"palette": viridis, "min": 4, "max": 19},"Year of gain", False, 0.9) + classPalette = ["9e9d9d", "ededed", "FF9900", "009966", "960000", "006699"] + classNames = ["None", "None", "Tidal flat", "Mangrove", "None", "Tidal marsh"] + Map.addLayer(dataset.select("lossType"), {"palette": classPalette, "min": 0, "max": 5}, "Loss type", False, 0.9) + Map.addLayer(dataset.select("gainType"), {"palette": classPalette, "min": 0, "max": 5}, "Gain type", False, 0.9) + + elif cod == "JRC/D5/EUCROPMAP/V1": + image = ee.Image("JRC/D5/EUCROPMAP/V1/2018") + Map.addLayer(image, {}, "EUCROPMAP 2018") + Map.setCenter(10, 48, 4) + + elif cod == "JRC/GHSL/P2016/BUILT_LDSMT_GLOBE_V1": + dataset = ee.Image("JRC/GHSL/P2016/BUILT_LDSMT_GLOBE_V1") + builtUpMultitemporal = dataset.select("built") + visParams = { + "min": 1.0, + "max": 6.0, + "palette": ["0c1d60", "000000", "448564", "70daa4", "83ffbf", "ffffff"], + } + Map.setCenter(8.9957, 45.5718, 12) + Map.addLayer(builtUpMultitemporal, visParams, "Built-Up Multitemporal") + + elif cod == "JRC/GHSL/P2016/POP_GPW_GLOBE_V1": + dataset = ee.ImageCollection("JRC/GHSL/P2016/POP_GPW_GLOBE_V1").filter(ee.Filter.date("2015-01-01", "2015-12-31")) + populationCount = dataset.select("population_count") + populationCountVis = { + "min": 0.0, + "max": 200.0, + "palette": ["060606", "337663", "337663", "ffffff"], + } + Map.setCenter(78.22, 22.59, 3) + Map.addLayer(populationCount, populationCountVis, "Population Count") + + elif cod == "JRC/GHSL/P2016/SMOD_POP_GLOBE_V1": + dataset = ee.ImageCollection("JRC/GHSL/P2016/SMOD_POP_GLOBE_V1").filter(ee.Filter.date("2015-01-01", "2015-12-31")) + degreeOfUrbanization = dataset.select("smod_code") + visParams = { + "min": 0.0, + "max": 3.0, + "palette": ["000000", "448564", "70daa4", "ffffff"], + } + Map.setCenter(114.96, 31.13, 4) + Map.addLayer(degreeOfUrbanization, visParams, "Degree of Urbanization") + + elif cod == "JRC/GSW1_4/GlobalSurfaceWater": + dataset = ee.Image("JRC/GSW1_4/GlobalSurfaceWater") + visualization = { + "bands": ["occurrence"], + "min": 0.0, + "max": 100.0, + "palette": ["ffffff", "ffbbbb", "0000ff"] + } + Map.setCenter(59.414, 45.182, 6) + Map.addLayer(dataset, visualization, "Occurrence") + + elif cod == "JRC/GSW1_4/Metadata": + dataset = ee.Image("JRC/GSW1_4/Metadata") + visualization = { + "bands": ["detections", "valid_obs", "total_obs"], + "min": 100.0, + "max": 900.0, + } + Map.setCenter(71.72, 52.48, 0) + Map.addLayer(dataset, visualization, "Detections/Observations") + + elif cod == "JRC/GSW1_4/MonthlyHistory": + dataset = ee.Image("JRC/GSW1_4/MonthlyHistory/2020_06") + visualization = { + "bands": ["water"], + "min": 0.0, + "max": 2.0, + "palette": ["ffffff", "fffcb8", "0905ff"] + } + Map.setCenter(-121.234, 38.109, 7) + Map.addLayer(dataset, visualization, "Water") + + elif cod == "JRC/GSW1_4/MonthlyRecurrence": + dataset = ee.ImageCollection("JRC/GSW1_4/MonthlyRecurrence") + visualization = { + "bands": ["monthly_recurrence"], + "min": 0.0, + "max": 100.0, + "palette": ["ffffff", "ffbbbb", "0000ff"] + } + Map.setCenter(-51.482, -0.835, 6) + Map.addLayer(dataset, visualization, "Monthly Recurrence") + + elif cod == "JRC/GSW1_4/YearlyHistory": + dataset = ee.ImageCollection("JRC/GSW1_4/YearlyHistory") + visualization = { + "bands": ["waterClass"], + "min": 0.0, + "max": 3.0, + "palette": ["cccccc", "ffffff", "99d9ea", "0000ff"] + } + Map.setCenter(59.414, 45.182, 7) + Map.addLayer(dataset, visualization, "Water Class") + + elif cod == "JRC/GWIS/GlobFire/v2/DailyPerimeters": + folder = "JRC/GWIS/GlobFire/v2/DailyPerimeters" + def printAssetList(listAssetsOutput): + print("Asset list:", listAssetsOutput["assets"]) + ee.data.listAssets(folder, {}, printAssetList) + + tableName = "JRC/GWIS/GlobFire/v2/DailyPerimeters/2020" + computeArea = lambda f: f.set({"area": f.area()}) + + features = ee.FeatureCollection(tableName).map(computeArea) + visParams = { + "palette": ["f5ff64", "b5ffb4", "beeaff", "ffc0e8", "8e8dff", "adadad"], + "min": 0.0, + "max": 600000000.0, + "opacity": 0.8, + } + image = ee.Image().float().paint(features, "area") + Map.addLayer(image, visParams, "GlobFire 2020") + Map.addLayer(features, None, "For Inspector", False) + Map.setCenter(-121.23, 39.7, 12) + + elif cod == "JRC/GWIS/GlobFire/v2/FinalPerimeters": + dataset = ee.FeatureCollection("JRC/GWIS/GlobFire/v2/FinalPerimeters") + visParams = { + "palette": ["f5ff64", "b5ffb4", "beeaff", "ffc0e8", "8e8dff", "adadad"], + "min": 0.0, + "max": 600000000.0, + "opacity": 0.8, + } + image = ee.Image().float().paint(dataset, "area") + Map.addLayer(image, visParams, "GlobFire Final") + Map.addLayer(dataset, None, "for Inspector", False) + Map.setCenter(-122.121, 38.56, 12) + + elif cod == "JRC/LUCAS_HARMO/COPERNICUS_POLYGONS/V1/2018": + dataset = ee.FeatureCollection("JRC/LUCAS_HARMO/COPERNICUS_POLYGONS/V1/2018") + visParams = { + "min": 35, + "max": 60 + } + dataset2 = dataset.map(lambda f: ee.Feature(f.buffer(5000))) + image = ee.Image().float().paint(dataset2, "gps_lat").randomVisualizer() + Map.addLayer(ee.Image(1), {"min":0, "max":1}, "background") + Map.addLayer(image, visParams, "LUCAS Polygons") + Map.addLayer(dataset, None, "for Inspector", False) + Map.setCenter(19.514, 51.82, 8) + + elif cod == "JRC/LUCAS_HARMO/THLOC/V1": + dataset = ee.FeatureCollection("JRC/LUCAS_HARMO/THLOC/V1") + Map.addLayer(dataset, {}, "LUCAS Points (data)", False) + dataset = dataset.style({ + "color": "489734", + "pointSize": 3 + }) + Map.setCenter(-3.8233, 40.609, 10) + Map.addLayer(dataset, {}, "LUCAS Points (styled green)") + + elif cod == "KNTU/LiDARLab/IranLandCover/V1": + dataset = ee.Image("KNTU/LiDARLab/IranLandCover/V1") + visualization = { + "bands": ["classification"] + } + Map.setCenter(54.0, 33.0, 5) + Map.addLayer(dataset, visualization, "Classification") + + elif cod == "LANDFIRE/Fire/FRG/v1_2_0": + dataset = ee.ImageCollection("LANDFIRE/Fire/FRG/v1_2_0") + visualization = { + "bands": ["FRG"] + } + Map.setCenter(-121.671, 40.699, 5) + Map.addLayer(dataset, visualization, "FRG") + + elif cod == "LANDFIRE/Fire/MFRI/v1_2_0": + dataset = ee.ImageCollection("LANDFIRE/Fire/MFRI/v1_2_0") + visualization = { + "bands": ["MFRI"] + } + Map.setCenter(-121.671, 40.699, 5) + Map.addLayer(dataset, visualization, "MFRI") + + elif cod == "LANDFIRE/Fire/PLS/v1_2_0": + dataset = ee.ImageCollection("LANDFIRE/Fire/PLS/v1_2_0") + visualization = { + "bands": ["PLS"] + } + Map.setCenter(-121.671, 40.699, 5) + Map.addLayer(dataset, visualization, "PLS") + + elif cod == "LANDFIRE/Fire/PMS/v1_2_0": + dataset = ee.ImageCollection("LANDFIRE/Fire/PMS/v1_2_0") + visualization = { + "bands": ["PMS"] + } + Map.setCenter(-121.671, 40.699, 5) + Map.addLayer(dataset, visualization, "PMS") + + elif cod == "LANDFIRE/Fire/PRS/v1_2_0": + dataset = ee.ImageCollection("LANDFIRE/Fire/PRS/v1_2_0") + visualization = { + "bands": ["PRS"] + } + Map.setCenter(-121.671, 40.699, 5) + Map.addLayer(dataset, visualization, "PRS") + + elif cod == "LANDFIRE/Fire/SClass/v1_4_0": + dataset = ee.ImageCollection("LANDFIRE/Fire/SClass/v1_4_0") + visualization = { + "bands": ["SClass"] + } + Map.setCenter(-121.671, 40.699, 5) + Map.addLayer(dataset, visualization, "SClass") + + elif cod == "LANDFIRE/Fire/VCC/v1_4_0": + dataset = ee.ImageCollection("LANDFIRE/Fire/VCC/v1_4_0") + visualization = { + "bands": ["VCC"] + } + Map.setCenter(-121.671, 40.699, 5) + Map.addLayer(dataset, visualization, "VCC") + + elif cod == "LANDFIRE/Fire/VDep/v1_4_0": + dataset = ee.ImageCollection("LANDFIRE/Fire/VDep/v1_4_0") + visualization = { + "bands": ["VDep"] + } + Map.setCenter(-121.671, 40.699, 5) + Map.addLayer(dataset, visualization, "VDep") + + elif cod == "LANDFIRE/Vegetation/BPS/v1_4_0": + dataset = ee.ImageCollection("LANDFIRE/Vegetation/BPS/v1_4_0") + visualization = { + "bands": ["BPS"] + } + Map.setCenter(-121.671, 40.699, 5) + Map.addLayer(dataset, visualization, "BPS") + + elif cod == "LANDFIRE/Vegetation/ESP/v1_2_0/AK": + dataset = ee.Image("LANDFIRE/Vegetation/ESP/v1_2_0/AK") + visualization = { + "bands": ["ESP"] + } + Map.setCenter(-151.011, 63.427, 8) + Map.addLayer(dataset, visualization, "ESP") + + elif cod == "LANDFIRE/Vegetation/ESP/v1_2_0/CONUS": + dataset = ee.Image("LANDFIRE/Vegetation/ESP/v1_2_0/CONUS") + visualization = { + "bands": ["ESP"] + } + Map.setCenter(-121.671, 40.699, 5) + Map.addLayer(dataset, visualization, "ESP") + + elif cod == "LANDFIRE/Vegetation/ESP/v1_2_0/HI": + dataset = ee.Image("LANDFIRE/Vegetation/ESP/v1_2_0/HI") + visualization = { + "bands": ["ESP"] + } + Map.setCenter(-155.3, 19.627, 8) + Map.addLayer(dataset, visualization, "ESP") + + elif cod == "LANDFIRE/Vegetation/EVC/v1_4_0": + dataset = ee.ImageCollection("LANDFIRE/Vegetation/EVC/v1_4_0") + visualization = { + "bands": ["EVC"] + } + Map.setCenter(-121.671, 40.699, 5) + Map.addLayer(dataset, visualization, "EVC") + + elif cod == "LANDFIRE/Vegetation/EVH/v1_4_0": + dataset = ee.ImageCollection("LANDFIRE/Vegetation/EVH/v1_4_0") + visualization = { + "bands": ["EVH"] + } + Map.setCenter(-121.671, 40.699, 5) + Map.addLayer(dataset, visualization, "EVH") + + elif cod == "LANDFIRE/Vegetation/EVT/v1_4_0": + dataset = ee.ImageCollection("LANDFIRE/Vegetation/EVT/v1_4_0") + visualization = { + "bands": ["EVT"] + } + Map.setCenter(-121.671, 40.699, 5) + Map.addLayer(dataset, visualization, "EVT") + + elif cod == "LANDSAT/GLS1975": + dataset = ee.ImageCollection("LANDSAT/GLS1975") + FalseColor = dataset.select(["30", "20", "10"]) + FalseColorVis = { + "gamma": 1.6 + } + Map.setCenter(44.517, 25.998, 5) + Map.addLayer(FalseColor, FalseColorVis, "False Color") + + elif cod == "LANDSAT/GLS2005": + dataset = ee.ImageCollection("LANDSAT/GLS2005") + trueColor321 = dataset.select(["30", "20", "10"]) + Map.setCenter(6.746, 46.529, 6) + Map.addLayer(trueColor321, {}, "True Color (321)") + + elif cod == "LANDSAT/GLS2005_L5": + dataset = ee.ImageCollection("LANDSAT/GLS2005_L5") + trueColor321 = dataset.select(["30", "20", "10"]) + Map.setCenter(6.746, 46.529, 6) + Map.addLayer(trueColor321, {}, "True Color (321)") + + elif cod == "LANDSAT/GLS2005_L7": + dataset = ee.ImageCollection("LANDSAT/GLS2005_L7") + trueColor321 = dataset.select(["30", "20", "10"]) + Map.setCenter(6.746, 46.529, 6) + Map.addLayer(trueColor321, {}, "True Color (321)") + + elif cod == "LANDSAT/LC08/C02/T1": + dataset = ee.ImageCollection("LANDSAT/LC08/C02/T1").filterDate("2017-01-01", "2017-12-31") + trueColor432 = dataset.select(["B4", "B3", "B2"]) + trueColor432Vis = { + "min": 0.0, + "max": 30000.0 + } + Map.setCenter(6.746, 46.529, 6) + Map.addLayer(trueColor432, trueColor432Vis, "True Color (432)") + + elif cod == "LANDSAT/LC08/C02/T1_L2": + dataset = ee.ImageCollection("LANDSAT/LC08/C02/T1_L2").filterDate("2021-05-01", "2021-06-01") + def applyScaleFactors(image): + opticalBands = image.select("SR_B.").multiply(0.0000275).add(-0.2) + thermalBands = image.select("ST_B.*").multiply(0.00341802).add(149.0) + return image.addBands(opticalBands, None, True).addBands(thermalBands, None, True) + dataset = dataset.map(applyScaleFactors) + visualization = { + "bands": ["SR_B4", "SR_B3", "SR_B2"], + "min": 0.0, + "max": 0.3 + } + Map.setCenter(-114.2579, 38.9275, 8) + Map.addLayer(dataset, visualization, "True Color (432)") + + elif cod == "LANDSAT/LC08/C02/T1_RT": + dataset = ee.ImageCollection("LANDSAT/LC08/C02/T1_RT").filterDate("2017-01-01", "2017-12-31") + trueColor432 = dataset.select(["B4", "B3", "B2"]) + trueColor432Vis = { + "min": 0.0, + "max": 30000.0 + } + Map.setCenter(6.746, 46.529, 6) + Map.addLayer(trueColor432, trueColor432Vis, "True Color (432)") + + elif cod == "LANDSAT/LC08/C02/T1_RT_TOA": + dataset = ee.ImageCollection("LANDSAT/LC08/C02/T1_RT_TOA").filterDate("2017-01-01", "2017-12-31") + trueColor432 = dataset.select(["B4", "B3", "B2"]) + trueColor432Vis = { + "min": 0.0, + "max": 0.4 + } + Map.setCenter(6.746, 46.529, 6) + Map.addLayer(trueColor432, trueColor432Vis, "True Color (432)") + + elif cod == "LANDSAT/LC08/C02/T1_TOA": + dataset = ee.ImageCollection("LANDSAT/LC08/C02/T1_TOA").filterDate("2017-01-01", "2017-12-31") + trueColor432 = dataset.select(["B4", "B3", "B2"]) + trueColor432Vis = { + "min": 0.0, + "max": 0.4} + Map.setCenter(6.746, 46.529, 6) + Map.addLayer(trueColor432, trueColor432Vis, "True Color (432)") + + elif cod == "LANDSAT/LC08/C02/T2": + dataset = ee.ImageCollection("LANDSAT/LC08/C02/T2").filterDate("2017-01-01", "2017-12-31") + trueColor432 = dataset.select(["B4", "B3", "B2"]) + trueColor432Vis = { + "min": 0.0, + "max": 30000.0 + } + Map.setCenter(6.746, 46.529, 6) + Map.addLayer(trueColor432, trueColor432Vis, "True Color (432)") + + elif cod == "LANDSAT/LC08/C02/T2_L2": + dataset = ee.ImageCollection("LANDSAT/LC08/C02/T2_L2").filterDate("2021-05-01", "2021-06-01") + def applyScaleFactors(image): + opticalBands = image.select("SR_B.").multiply(0.0000275).add(-0.2) + thermalBands = image.select("ST_B.*").multiply(0.00341802).add(149.0) + return image.addBands(opticalBands, None, True) .addBands(thermalBands, None, True) + dataset = dataset.map(applyScaleFactors) + visualization = { + "bands": ["SR_B4", "SR_B3", "SR_B2"], + "min": 0.0, + "max": 0.3 + } + Map.setCenter(-83, 24, 8) + Map.addLayer(dataset, visualization, "True Color (432)") + + elif cod == "LANDSAT/LC08/C02/T2_TOA": + dataset = ee.ImageCollection("LANDSAT/LC08/C02/T2_TOA").filterDate("2017-01-01", "2017-12-31") + trueColor432 = dataset.select(["B4", "B3", "B2"]) + trueColor432Vis = { + "min": 0.0, + "max": 0.4 + } + Map.setCenter(6.746, 46.529, 6) + Map.addLayer(trueColor432, trueColor432Vis, "True Color (432)") + + elif cod == "LANDSAT/LC09/C02/T1": + dataset = ee.ImageCollection("LANDSAT/LC09/C02/T1").filterDate("2022-01-01", "2022-02-01") + trueColor432 = dataset.select(["B4", "B3", "B2"]) + trueColor432Vis = { + "min": 0.0, + "max": 30000.0 + } + Map.setCenter(6.746, 46.529, 6) + Map.addLayer(trueColor432, trueColor432Vis, "True Color (432)") + + elif cod == "LANDSAT/LC09/C02/T1_L2": + dataset = ee.ImageCollection("LANDSAT/LC09/C02/T1_L2").filterDate("2022-01-01", "2022-02-01") + def applyScaleFactors(image): + opticalBands = image.select("SR_B.").multiply(0.0000275).add(-0.2) + thermalBands = image.select("ST_B.*").multiply(0.00341802).add(149.0) + return image.addBands(opticalBands, None, True).addBands(thermalBands, None, True) + dataset = dataset.map(applyScaleFactors) + visualization = { + "bands": ["SR_B4", "SR_B3", "SR_B2"], + "min": 0.0, + "max": 0.3 + } + Map.setCenter(-114.2579, 38.9275, 8) + Map.addLayer(dataset, visualization, "True Color (432)") + + elif cod == "LANDSAT/LC09/C02/T1_TOA": + dataset = ee.ImageCollection("LANDSAT/LC09/C02/T1_TOA").filterDate("2022-01-01", "2022-02-01") + trueColor432 = dataset.select(["B4", "B3", "B2"]) + trueColor432Vis = { + "min": 0.0, + "max": 0.4} + Map.setCenter(6.746, 46.529, 6) + Map.addLayer(trueColor432, trueColor432Vis, "True Color (432)") + + elif cod == "LANDSAT/LC09/C02/T2": + dataset = ee.ImageCollection("LANDSAT/LC09/C02/T2").filterDate("2022-01-01", "2022-02-01") + trueColor432 = dataset.select(["B4", "B3", "B2"]) + trueColor432Vis = { + "min": 0.0, + "max": 30000.0} + Map.setCenter(6.746, 46.529, 6) + Map.addLayer(trueColor432, trueColor432Vis, "True Color (432)") + + elif cod == "LANDSAT/LC09/C02/T2_L2": + dataset = ee.ImageCollection("LANDSAT/LC09/C02/T2_L2").filterDate("2022-01-01", "2022-02-01") + def applyScaleFactors(image): + opticalBands = image.select("SR_B.").multiply(0.0000275).add(-0.2) + thermalBands = image.select("ST_B.*").multiply(0.00341802).add(149.0) + return image.addBands(opticalBands, None, True).addBands(thermalBands, None, True) + dataset = dataset.map(applyScaleFactors) + visualization = { + "bands": ["SR_B4", "SR_B3", "SR_B2"], + "min": 0.0, + "max": 0.3} + Map.setCenter(-83, 24, 8) + Map.addLayer(dataset, visualization, "True Color (432)") + + elif cod == "LANDSAT/LC09/C02/T2_TOA": + dataset = ee.ImageCollection("LANDSAT/LC09/C02/T2_TOA").filterDate("2022-01-01", "2022-02-01") + trueColor432 = dataset.select(["B4", "B3", "B2"]) + trueColor432Vis = { + "min": 0.0, + "max": 0.4} + Map.setCenter(6.746, 46.529, 6) + Map.addLayer(trueColor432, trueColor432Vis, "True Color (432)") + + elif cod == "LANDSAT/LE07/C02/T1": + dataset = ee.ImageCollection("LANDSAT/LE07/C02/T1").filterDate("1999-01-01", "2002-12-31") + trueColor321 = dataset.select(["B3", "B2", "B1"]) + Map.setCenter(6.746, 46.529, 6) + Map.addLayer(trueColor321, {}, "True Color (321)") + + elif cod == "LANDSAT/LE07/C02/T1_L2": + dataset = ee.ImageCollection("LANDSAT/LE07/C02/T1_L2").filterDate("2017-06-01", "2017-07-01") + def applyScaleFactors(image): + opticalBands = image.select("SR_B.").multiply(0.0000275).add(-0.2) + thermalBand = image.select("ST_B6").multiply(0.00341802).add(149.0) + return image.addBands(opticalBands, None, True).addBands(thermalBand, None, True) + dataset = dataset.map(applyScaleFactors) + visualization = { + "bands": ["SR_B3", "SR_B2", "SR_B1"], + "min": 0.0, + "max": 0.3} + Map.setCenter(-114.2579, 38.9275, 8) + Map.addLayer(dataset, visualization, "True Color (321)") + + elif cod == "LANDSAT/LE07/C02/T1_RT": + dataset = ee.ImageCollection("LANDSAT/LE07/C02/T1_RT").filterDate("1999-01-01", "2002-12-31") + trueColor321 = dataset.select(["B3", "B2", "B1"]) + Map.setCenter(6.746, 46.529, 6) + Map.addLayer(trueColor321, {}, "True Color (321)") + + elif cod == "LANDSAT/LE07/C02/T1_RT_TOA": + dataset = ee.ImageCollection("LANDSAT/LE07/C02/T1_RT_TOA").filterDate("1999-01-01", "2002-12-31") + trueColor321 = dataset.select(["B3", "B2", "B1"]) + trueColor321Vis = { + "min": 0.0, + "max": 0.4, + "gamma": 1.2} + Map.setCenter(6.746, 46.529, 6) + Map.addLayer(trueColor321, trueColor321Vis, "True Color (321)") + + elif cod == "LANDSAT/LE07/C02/T1_TOA": + dataset = ee.ImageCollection("LANDSAT/LE07/C02/T1_TOA").filterDate("1999-01-01", "2002-12-31") + trueColor321 = dataset.select(["B3", "B2", "B1"]) + trueColor321Vis = { + "min": 0.0, + "max": 0.4, + "gamma": 1.2} + Map.setCenter(6.746, 46.529, 6) + Map.addLayer(trueColor321, trueColor321Vis, "True Color (321)") + + elif cod == "LANDSAT/LE07/C02/T2": + dataset = ee.ImageCollection("LANDSAT/LE07/C02/T2").filterDate("1999-01-01", "2002-12-31") + trueColor321 = dataset.select(["B3", "B2", "B1"]) + Map.setCenter(6.746, 46.529, 6) + Map.addLayer(trueColor321, {}, "True Color (321)") + + elif cod == "LANDSAT/LE07/C02/T2_L2": + dataset = ee.ImageCollection("LANDSAT/LE07/C02/T2_L2").filterDate("2017-06-01", "2017-07-01") + def applyScaleFactors(image): + opticalBands = image.select("SR_B.").multiply(0.0000275).add(-0.2) + thermalBand = image.select("ST_B6").multiply(0.00341802).add(149.0) + return image.addBands(opticalBands, None, True).addBands(thermalBand, None, True) + dataset = dataset.map(applyScaleFactors) + visualization = { + "bands": ["SR_B3", "SR_B2", "SR_B1"], + "min": 0.0, + "max": 0.3} + Map.setCenter(-83, 24, 8) + Map.addLayer(dataset, visualization, "True Color (321)") + + elif cod == "LANDSAT/LE07/C02/T2_TOA": + dataset = ee.ImageCollection("LANDSAT/LE07/C02/T2_TOA").filterDate("1999-01-01", "2002-12-31") + trueColor321 = dataset.select(["B3", "B2", "B1"]) + trueColor321Vis = { + "min": 0.0, + "max": 0.4, + "gamma": 1.2} + Map.setCenter(6.746, 46.529, 6) + Map.addLayer(trueColor321, trueColor321Vis, "True Color (321)") + + elif cod == "LANDSAT/LM01/C02/T1": + dataset = ee.ImageCollection("LANDSAT/LM01/C02/T1").filterDate("1974-01-01", "1978-12-31") + nearInfrared321 = dataset.select(["B6", "B5", "B4"]) + Map.setCenter(6.746, 46.529, 6) + Map.addLayer(nearInfrared321, {}, "Near Infrared (321)") + + elif cod == "LANDSAT/LM01/C02/T2": + dataset = ee.ImageCollection("LANDSAT/LM01/C02/T2").filterDate("1974-01-01", "1978-12-31") + nearInfrared321 = dataset.select(["B6", "B5", "B4"]) + Map.setCenter(6.746, 46.529, 6) + Map.addLayer(nearInfrared321, {}, "Near Infrared (321)") + + elif cod == "LANDSAT/LM02/C02/T1": + dataset = ee.ImageCollection("LANDSAT/LM02/C02/T1").filterDate("1978-01-01", "1980-12-31") + nearInfrared321 = dataset.select(["B6", "B5", "B4"]) + Map.setCenter(6.746, 46.529, 6) + Map.addLayer(nearInfrared321, {}, "Near Infrared (321)") + + elif cod == "LANDSAT/LM02/C02/T2": + dataset = ee.ImageCollection("LANDSAT/LM02/C02/T2").filterDate("1978-01-01", "1980-12-31") + nearInfrared321 = dataset.select(["B6", "B5", "B4"]) + Map.setCenter(6.746, 46.529, 6) + Map.addLayer(nearInfrared321, {}, "Near Infrared (321)") + + elif cod == "LANDSAT/LM03/C02/T1": + dataset = ee.ImageCollection("LANDSAT/LM03/C02/T1").filterDate("1978-01-01", "1980-12-31") + nearInfrared321 = dataset.select(["B6", "B5", "B4"]) + Map.setCenter(6.746, 46.529, 6) + Map.addLayer(nearInfrared321, {}, "Near Infrared (321)") + + elif cod == "LANDSAT/LM03/C02/T2": + dataset = ee.ImageCollection("LANDSAT/LM03/C02/T2").filterDate("1978-01-01", "1980-12-31") + nearInfrared321 = dataset.select(["B6", "B5", "B4"]) + Map.setCenter(6.746, 46.529, 6) + Map.addLayer(nearInfrared321, {}, "Near Infrared (321)") + + elif cod == "LANDSAT/LM04/C02/T1": + dataset = ee.ImageCollection("LANDSAT/LM04/C02/T1").filterDate("1989-01-01", "1992-12-31") + nearInfrared321 = dataset.select(["B3", "B2", "B1"]) + Map.setCenter(6.746, 46.529, 6) + Map.addLayer(nearInfrared321, {}, "Near Infrared (321)") + + elif cod == "LANDSAT/LM04/C02/T2": + dataset = ee.ImageCollection("LANDSAT/LM04/C02/T2").filterDate("1989-01-01", "1992-12-31") + nearInfrared321 = dataset.select(["B3", "B2", "B1"]) + Map.setCenter(6.746, 46.529, 6) + Map.addLayer(nearInfrared321, {}, "Near Infrared (321)") + + elif cod == "LANDSAT/LM05/C02/T1": + dataset = ee.ImageCollection("LANDSAT/LM05/C02/T1").filterDate("1985-01-01", "1989-12-31") + nearInfrared321 = dataset.select(["B3", "B2", "B1"]) + Map.setCenter(6.746, 46.529, 6) + Map.addLayer(nearInfrared321, {}, "Near Infrared (321)") + + elif cod == "LANDSAT/LM05/C02/T2": + dataset = ee.ImageCollection("LANDSAT/LM05/C02/T2").filterDate("1985-01-01", "1989-12-31") + nearInfrared321 = dataset.select(["B3", "B2", "B1"]) + nearInfrared321Vis = {} + Map.setCenter(6.746, 46.529, 6) + Map.addLayer(nearInfrared321, nearInfrared321Vis, "Near Infrared (321)") + + elif cod == "LANDSAT/LT04/C02/T1": + dataset = ee.ImageCollection("LANDSAT/LT04/C02/T1").filterDate("1989-01-01", "1992-12-31") + trueColor321 = dataset.select(["B3", "B2", "B1"]) + trueColor321Vis = {} + Map.setCenter(6.746, 46.529, 6) + Map.addLayer(trueColor321, trueColor321Vis, "True Color (321)") + + elif cod == "LANDSAT/LT04/C02/T1_L2": + dataset = ee.ImageCollection("LANDSAT/LT04/C02/T1_L2").filterDate("1990-04-01", "1990-05-01") + def applyScaleFactors(image): + opticalBands = image.select("SR_B.").multiply(0.0000275).add(-0.2) + thermalBand = image.select("ST_B6").multiply(0.00341802).add(149.0) + return image.addBands(opticalBands, None, True).addBands(thermalBand, None, True) + dataset = dataset.map(applyScaleFactors) + visualization = { + "bands": ["SR_B3", "SR_B2", "SR_B1"], + "min": 0.0, + "max": 0.3, + } + Map.setCenter(15, 53, 8) + Map.addLayer(dataset, visualization, "True Color (321)") + + elif cod == "LANDSAT/LT04/C02/T1_TOA": + dataset = ee.ImageCollection("LANDSAT/LT04/C02/T1_TOA").filterDate("1989-01-01", "1992-12-31") + trueColor321 = dataset.select(["B3", "B2", "B1"]) + trueColor321Vis = { + "min": 0.0, + "max": 0.4, + "gamma": 1.2, + } + Map.setCenter(6.746, 46.529, 6) + Map.addLayer(trueColor321, trueColor321Vis, "True Color (321)") + + elif cod == "LANDSAT/LT04/C02/T2": + dataset = ee.ImageCollection("LANDSAT/LT04/C02/T2").filterDate("1989-01-01", "1992-12-31") + trueColor321 = dataset.select(["B3", "B2", "B1"]) + trueColor321Vis = {} + Map.setCenter(6.746, 46.529, 6) + Map.addLayer(trueColor321, trueColor321Vis, "True Color (321)") + + elif cod == "LANDSAT/LT04/C02/T2_L2": + dataset = ee.ImageCollection("LANDSAT/LT04/C02/T2_L2").filterDate("1990-04-01", "1990-05-01") + def applyScaleFactors(image): + opticalBands = image.select("SR_B.").multiply(0.0000275).add(-0.2) + thermalBand = image.select("ST_B6").multiply(0.00341802).add(149.0) + return image.addBands(opticalBands, None, True).addBands(thermalBand, None, True) + dataset = dataset.map(applyScaleFactors) + visualization = { + "bands": ["SR_B3", "SR_B2", "SR_B1"], + "min": 0.0, + "max": 0.3, + } + Map.setCenter(-83, 24, 8) + Map.addLayer(dataset, visualization, "True Color (321)") + + elif cod == "LANDSAT/LT04/C02/T2_TOA": + dataset = ee.ImageCollection("LANDSAT/LT04/C02/T2_TOA").filterDate("1989-01-01", "1992-12-31") + trueColor321 = dataset.select(["B3", "B2", "B1"]) + trueColor321Vis = { + "min": 0.0, + "max": 0.4, + "gamma": 1.2, + } + Map.setCenter(6.746, 46.529, 6) + Map.addLayer(trueColor321, trueColor321Vis, "True Color (321)") + + elif cod == "LANDSAT/LT05/C02/T1": + dataset = ee.ImageCollection("LANDSAT/LT05/C02/T1").filterDate("2011-01-01", "2011-12-31") + trueColor321 = dataset.select(["B3", "B2", "B1"]) + trueColor321Vis = {} + Map.setCenter(6.746, 46.529, 6) + Map.addLayer(trueColor321, trueColor321Vis, "True Color (321)") + + elif cod == "LANDSAT/LT05/C02/T1_L2": + dataset = ee.ImageCollection("LANDSAT/LT05/C02/T1_L2").filterDate("2000-06-01", "2000-07-01") + def applyScaleFactors(image): + opticalBands = image.select("SR_B.").multiply(0.0000275).add(-0.2) + thermalBand = image.select("ST_B6").multiply(0.00341802).add(149.0) + return image.addBands(opticalBands, None, True).addBands(thermalBand, None, True) + dataset = dataset.map(applyScaleFactors) + visualization = { + "bands": ["SR_B3", "SR_B2", "SR_B1"], + "min": 0.0, + "max": 0.3, + } + Map.setCenter(-114.2579, 38.9275, 8) + Map.addLayer(dataset, visualization, "True Color (321)") + + elif cod == "LANDSAT/LT05/C02/T1_TOA": + dataset = ee.ImageCollection("LANDSAT/LT05/C02/T1_TOA").filterDate("2011-01-01", "2011-12-31") + trueColor321 = dataset.select(["B3", "B2", "B1"]) + trueColor321Vis = { + "min": 0.0, + "max": 0.4, + "gamma": 1.2, + } + Map.setCenter(6.746, 46.529, 6) + Map.addLayer(trueColor321, trueColor321Vis, "True Color (321)") + + elif cod == "LANDSAT/LT05/C02/T2": + dataset = ee.ImageCollection("LANDSAT/LT05/C02/T2").filterDate("2011-01-01", "2011-12-31") + trueColor321 = dataset.select(["B3", "B2", "B1"]) + trueColor321Vis = {} + Map.setCenter(6.746, 46.529, 6) + Map.addLayer(trueColor321, trueColor321Vis, "True Color (321)") + + elif cod == "LANDSAT/LT05/C02/T2_L2": + dataset = ee.ImageCollection("LANDSAT/LT05/C02/T2_L2").filterDate("2000-06-01", "2000-07-01") + def applyScaleFactors(image): + opticalBands = image.select("SR_B.").multiply(0.0000275).add(-0.2) + thermalBand = image.select("ST_B6").multiply(0.00341802).add(149.0) + return image.addBands(opticalBands, None, True).addBands(thermalBand, None, True) + dataset = dataset.map(applyScaleFactors) + visualization = { + "bands": ["SR_B3", "SR_B2", "SR_B1"], + "min": 0.0, + "max": 0.3, + } + Map.setCenter(-83, 24, 8) + Map.addLayer(dataset, visualization, "True Color (321)") + + elif cod == "LANDSAT/LT05/C02/T2_TOA": + dataset = ee.ImageCollection("LANDSAT/LT05/C02/T2_TOA").filterDate("2011-01-01", "2011-12-31") + trueColor321 = dataset.select(["B3", "B2", "B1"]) + trueColor321Vis = { + "min": 0.0, + "max": 0.4, + "gamma": 1.2, + } + Map.setCenter(6.746, 46.529, 6) + Map.addLayer(trueColor321, trueColor321Vis, "True Color (321)") + + elif cod == "LANDSAT/MANGROVE_FORESTS": + dataset = ee.ImageCollection("LANDSAT/MANGROVE_FORESTS") + mangrovesVis = { + "min": 0, + "max": 1.0, + "palette": ["d40115"], + } + Map.setCenter(-44.5626, -2.0164, 9) + Map.addLayer(dataset, mangrovesVis, "Mangroves") + + elif cod == "LARSE/GEDI/GEDI02_A_002/GEDI02_A_2021244154857_O15413_04_T05622_02_003_02_V002": + dataset = ee.FeatureCollection("LARSE/GEDI/GEDI02_A_002/GEDI02_A_2021244154857_O15413_04_T05622_02_003_02_V002") + dataset = dataset.style({"color": "black", "pointSize": 1}) + Map.setCenter(-64.88, -31.77, 15) + Map.addLayer(dataset) + + elif cod == "LARSE/GEDI/GEDI02_A_002_INDEX": + rectangle = ee.Geometry.Rectangle([-111.22, 24.06, -6.54, 51.9]) + filter_index = ee.FeatureCollection("LARSE/GEDI/GEDI02_A_002_INDEX").filter("time_start > 2020-10-10T15:57:18Z" & "time_end < 2020-10-11T01:20:45Z").filterBounds(rectangle) + Map.addLayer(filter_index) + + elif cod == "LARSE/GEDI/GEDI02_A_002_MONTHLY": + qualityMask = lambda im: im.updateMask(im.select("quality_flag").eq(1)).updateMask(im.select("degrade_flag").eq(0)) + dataset = ee.ImageCollection("LARSE/GEDI/GEDI02_A_002_MONTHLY").map(qualityMask).select("rh98") + gediVis = { + "min": 1, + "max": 60, + "palette": "darkred,red,orange,green,darkgreen", + } + Map.setCenter(-74.803466, -9.342209, 10) + Map.addLayer(dataset, gediVis, "rh98") + + elif cod == "LARSE/GEDI/GEDI02_B_002/GEDI02_B_2021043114136_O12295_03_T07619_02_003_01_V002": + dataset = ee.FeatureCollection("LARSE/GEDI/GEDI02_B_002/GEDI02_B_2021043114136_O12295_03_T07619_02_003_01_V002") + Map.setCenter(12.60033, 51.01051, 14) + Map.addLayer(dataset) + + elif cod == "LARSE/GEDI/GEDI02_B_002_INDEX": + rectangle = ee.Geometry.Rectangle([-111.22, 24.06, -6.54, 51.9]) + filter_index = ee.FeatureCollection("LARSE/GEDI/GEDI02_B_002_INDEX").filter("time_start > 2020-10-10T15:57:18Z" & "time_end < 2020-10-11T01:20:45Z").filterBounds(rectangle) + Map.addLayer(filter_index) + + elif cod == "LARSE/GEDI/GEDI02_B_002_MONTHLY": + qualityMask = lambda im: im.updateMask(im.select("l2b_quality_flag").eq(1)).updateMask(im.select("degrade_flag").eq(0)) + dataset = ee.ImageCollection("LARSE/GEDI/GEDI02_B_002_MONTHLY").map(qualityMask).select("solar_elevation") + gediVis = { + "min": 1, + "max": 60, + "palette": "red, green, blue", + } + Map.setCenter(12.60033, 51.01051, 12) + Map.addLayer(dataset, gediVis, "Solar Elevation") + + elif cod == "LARSE/GEDI/GEDI04_A_002/GEDI04_A_2022157233128_O19728_03_T11129_02_003_01_V002": + dataset = ee.FeatureCollection("LARSE/GEDI/GEDI04_A_002/GEDI04_A_2022157233128_O19728_03_T11129_02_003_01_V002") + Map.setCenter(-94.77616, 38.9587, 14) + Map.addLayer(dataset) + + elif cod == "LARSE/GEDI/GEDI04_A_002_INDEX": + rectangle = ee.Geometry.Rectangle([-111.22, 24.06, -6.54, 51.9]) + filter_index = ee.FeatureCollection("LARSE/GEDI/GEDI04_A_002_INDEX").filter("time_start > 2020-10-10T15:57:18Z" & "time_end < 2020-10-11T01:20:45Z").filterBounds(rectangle) + Map.addLayer(filter_index) + + elif cod == "LARSE/GEDI/GEDI04_A_002_MONTHLY": + qualityMask = lambda im : im.updateMask(im.select("l4_quality_flag").eq(1)).updateMask(im.select("degrade_flag").eq(0)) + dataset = ee.ImageCollection("LARSE/GEDI/GEDI04_A_002_MONTHLY").map(qualityMask).select("solar_elevation") + gediVis = { + "min": 1, + "max": 60, + "palette": "red, green, blue", + } + Map.setCenter(5.0198, 51.7564, 12) + Map.addLayer(dataset, gediVis, "Solar Elevation") + + elif cod == "LARSE/GEDI/GEDI04_B_002": + l4b = ee.Image("LARSE/GEDI/GEDI04_B_002") + Map.addLayer( + l4b.select("MU"), {"min": 10, "max": 250, "palette": "440154,414387,2a788e,23a884,7ad151,fde725"}, "Mean Biomass" + ) + Map.addLayer( l4b.select("SE"), {"min": 10, "max": 50, "palette": "000004,3b0f6f,8c2981,dd4a69,fe9f6d,fcfdbf"}, "Standard Error" + ) + + elif cod == "MERIT/DEM/v1_0_3": + dataset = ee.Image("MERIT/DEM/v1_0_3") + visualization = { + "bands": ["dem"], + "min": -3, + "max": 18, + "palette": ["000000", "478FCD", "86C58E", "AFC35E", "8F7131", + "B78D4F", "E2B8A6", "FFFFFF"] + } + Map.setCenter(90.301, 23.052, 10) + Map.addLayer(dataset, visualization, "Elevation") + + elif cod == "MERIT/Hydro/v1_0_1": + dataset = ee.Image("MERIT/Hydro/v1_0_1") + visualization = { + "bands": ["viswth"], + } + Map.setCenter(90.301, 23.052, 10) + Map.addLayer(dataset, visualization, "River width") + + elif cod == "MERIT/Hydro_reduced/v1_0_1": + dataset = ee.Image("MERIT/Hydro_reduced/v1_0_1") + visualization = { + "bands": "wth", + "min": 0, + "max": 400 + } + Map.setCenter(90.301, 23.052, 10) + Map.addLayer(dataset, visualization, "River width") + + elif cod == "MODIS/006/MCD19A2_GRANULES": + collection = ee.ImageCollection("MODIS/006/MCD19A2_GRANULES").select("Optical_Depth_047").filterDate("2019-01-01", "2019-01-15") + band_viz = { + "min": 0, + "max": 500, + "palette": ["black", "blue", "purple", "cyan", "green", "yellow", "red"] + } + Map.addLayer(collection.mean(), band_viz, "Optical Depth 047") + Map.setCenter(76, 13, 6) + + elif cod == "MODIS/006/MOD10A1": + dataset = ee.ImageCollection("MODIS/006/MOD10A1").filter(ee.Filter.date("2018-01-01", "2018-05-01")) + snowCover = dataset.select("NDSI_Snow_Cover") + snowCoverVis = { + "min": 0.0, + "max": 100.0, + "palette": ["black", "0dffff", "0524ff", "ffffff"], + } + Map.setCenter(-41.13, 76.35, 2) + Map.addLayer(snowCover, snowCoverVis, "Snow Cover") + + elif cod == "MODIS/006/MOD16A2": + dataset = ee.ImageCollection("MODIS/006/MOD16A2").filter(ee.Filter.date("2018-01-01", "2018-05-01")) + evapotranspiration = dataset.select("ET") + evapotranspirationVis = { + "min": 0.0, + "max": 300.0, + "palette": [ + "ffffff", "fcd163", "99b718", "66a000", "3e8601", "207401", "056201", + "004c00", "011301" + ], + } + Map.setCenter(6.746, 46.529, 2) + Map.addLayer(evapotranspiration, evapotranspirationVis, "Evapotranspiration") + + elif cod == "MODIS/006/MOD17A2H": + dataset = ee.ImageCollection("MODIS/006/MOD17A2H").filter(ee.Filter.date("2018-01-01", "2018-05-01")) + gpp = dataset.select("Gpp") + gppVis = { + "min": 0.0, + "max": 600.0, + "palette": ["bbe029", "0a9501", "074b03"], + } + Map.setCenter(6.746, 46.529, 2) + Map.addLayer(gpp, gppVis, "GPP") + + elif cod == "MODIS/006/MOD44B": + dataset = ee.ImageCollection("MODIS/006/MOD44B") + visualization = { + "bands": ["Percent_Tree_Cover"], + "min": 0.0, + "max": 100.0, + "palette": ["bbe029", "0a9501", "074b03"] + } + Map.centerObject(dataset) + Map.addLayer(dataset, visualization, "Percent Tree Cover") + + elif cod == "MODIS/006/MOD44W": + dataset = ee.ImageCollection("MODIS/006/MOD44W").filter(ee.Filter.date("2015-01-01", "2015-05-01")) + waterMask = dataset.select("water_mask") + waterMaskVis = { + "min": 0.0, + "max": 1.0, + "palette": ["bcba99", "2d0491"], + } + Map.setCenter(6.746, 46.529, 2) + Map.addLayer(waterMask, waterMaskVis, "Water Mask") + + elif cod == "MODIS/006/MOD44W": + dataset = ee.ImageCollection("MODIS/006/MOD44W").filter(ee.Filter.date("2015-01-01", "2015-05-01")) + waterMask = dataset.select("water_mask") + waterMaskVis = { + "min": 0.0, + "max": 1.0, + "palette": ["bcba99", "2d0491"], + } + Map.setCenter(6.746, 46.529, 2) + Map.addLayer(waterMask, waterMaskVis, "Water Mask") + + elif cod == "MODIS/006/MODOCGA": + dataset = ee.ImageCollection("MODIS/006/MODOCGA").filter(ee.Filter.date("2018-01-01", "2018-05-01")) + FalseColor = dataset.select(["sur_refl_b11", "sur_refl_b10", "sur_refl_b09"]) + FalseColorVis = { + "min": 0.0, + "max": 2000.0} + Map.setCenter(6.746, 46.529, 2) + Map.addLayer(FalseColor, FalseColorVis, "False Color") + + elif cod == "MODIS/006/MYD10A1": + dataset = ee.ImageCollection("MODIS/006/MYD10A1").filter(ee.Filter.date("2018-01-01", "2018-05-01")) + snowCover = dataset.select("NDSI_Snow_Cover") + snowCoverVis = { + "min": 0.0, + "max": 100.0, + "palette": ["black", "0dffff", "0524ff", "ffffff"], + } + Map.setCenter(-38.13, 40, 2) + Map.addLayer(snowCover, snowCoverVis, "Snow Cover") + + elif cod == "MODIS/006/MYD17A2H": + dataset = ee.ImageCollection("MODIS/006/MYD17A2H").filter(ee.Filter.date("2018-01-01", "2018-05-01")) + gpp = dataset.select("Gpp") + gppVis = { + "min": 0.0, + "max": 600.0, + "palette": ["bbe029", "0a9501", "074b03"], + } + Map.setCenter(6.746, 46.529, 2) + Map.addLayer(gpp, gppVis, "GPP") + + elif cod == "MODIS/006/MYDOCGA": + dataset = ee.ImageCollection("MODIS/006/MYDOCGA").filter(ee.Filter.date("2018-01-01", "2018-05-01")) + FalseColor = dataset.select(["sur_refl_b11", "sur_refl_b10", "sur_refl_b09"]) + FalseColorVis = { + "min": 0.0, + "max": 2000.0, + } + Map.setCenter(6.746, 46.529, 2) + Map.addLayer(FalseColor, FalseColorVis, "False Color") + + elif cod == "MODIS/061/MCD12Q1": + dataset = ee.ImageCollection("MODIS/061/MCD12Q1") + igbpLandCover = dataset.select("LC_Type1") + igbpLandCoverVis = { + "min": 1.0, + "max": 17.0, + "palette": [ + "05450a", "086a10", "54a708", "78d203", "009900", "c6b044", "dcd159", + "dade48", "fbff13", "b6ff05", "27ff87", "c24f44", "a5a5a5", "ff6d4c", + "69fff8", "f9ffa4", "1c0dff" + ], + } + Map.setCenter(6.746, 46.529, 6) + Map.addLayer(igbpLandCover, igbpLandCoverVis, "IGBP Land Cover") + + elif cod == "MODIS/061/MCD12Q2": + dataset = ee.ImageCollection("MODIS/061/MCD12Q2").filter(ee.Filter.date("2001-01-01", "2002-01-01")) + vegetationPeak = dataset.select("Peak_1") + vegetationPeakVis = { + "min": 11400, + "max": 11868, + "palette": ["0f17ff", "b11406", "f1ff23"], + } + Map.setCenter(6.746, 46.529, 2) + Map.addLayer(vegetationPeak, vegetationPeakVis, "Vegetation Peak 2001") + + elif cod == "MODIS/061/MCD15A3H": + dataset = ee.ImageCollection("MODIS/061/MCD15A3H") + defaultVisualization = dataset.first().select("Fpar") + defaultVisualizationVis = { + "min": 0.0, + "max": 100.0, + "palette": ["e1e4b4", "999d60", "2ec409", "0a4b06"], + } + Map.setCenter(6.746, 46.529, 6) + Map.addLayer( + defaultVisualization, defaultVisualizationVis, "Default visualization") + + elif cod == "MODIS/061/MCD18C2": + dataset = ee.ImageCollection("MODIS/061/MCD18C2").filter(ee.Filter.date("2001-01-01", "2001-02-01")) + gmt_1200_par = dataset.select("GMT_1200_PAR") + gmt_1200_par_vis = { + "min": -236, + "max": 316, + "palette": ["0f17ff", "b11406", "f1ff23"], + } + Map.setCenter(6.746, 46.529, 2) + Map.addLayer(gmt_1200_par, gmt_1200_par_vis,"Total PAR at GMT 12:00") + + elif cod == "COPERNICUS/CORINE/V20/100m": + dataset = ee.Image('COPERNICUS/CORINE/V20/100m/2012') + landCover = dataset.select('landcover') + Map.setCenter(16.436, 39.825, 6) + Map.addLayer(landCover, {}, 'Land Cover') + + elif cod == "LANDSAT/GLS1975_MOSAIC": + dataset = ee.ImageCollection('LANDSAT/GLS1975_MOSAIC') + falseColor = dataset.select(['30', '20', '10']) + falseColorVis = { + "gamma": 1.6, + } + Map.setCenter(-72.882406,5.181746, 5); + Map.addLayer(falseColor, falseColorVis, 'False Color') + + elif cod == "LANDSAT/LC08/C01/T1_8DAY_BAI": + dataset = ee.ImageCollection('LANDSAT/LC08/C01/T1_8DAY_BAI').filterDate('2017-01-01', '2017-12-31') + scaled = dataset.select('BAI') + scaledVis = { + "min": 0.0, + "max": 100.0, + } + Map.setCenter(-72.882406,5.181746, 6) + Map.addLayer(scaled, scaledVis, 'Scaled') + + elif cod == "LANDSAT/LC08/C01/T1_8DAY_EVI": + dataset = ee.ImageCollection('LANDSAT/LC08/C01/T1_8DAY_EVI').filterDate('2017-01-01', '2017-12-31') + colorized = dataset.select('EVI') + colorizedVis = { + "min": 0.0, + "max": 1.0, + "palette": [ + 'FFFFFF', 'CE7E45', 'DF923D', 'F1B555', 'FCD163', '99B718', '74A901', + '66A000', '529400', '3E8601', '207401', '056201', '004C00', '023B01', + '012E01', '011D01', '011301'] + } + Map.setCenter(-72.882406,5.181746, 6) + Map.addLayer(colorized, colorizedVis, 'Colorized') + + elif cod == "LANDSAT/LC08/C01/T1_8DAY_NDSI": + dataset = ee.ImageCollection('LANDSAT/LC08/C01/T1_8DAY_NDSI').filterDate('2017-01-01', '2017-12-31') + colorized = dataset.select('NDSI') + colorizedVis = { + "palette": ['000088', '0000FF', '8888FF', 'FFFFFF'], + } + Map.setCenter(-72.882406,5.181746, 6); + Map.addLayer(colorized, colorizedVis, 'Colorized') + + elif cod == "LANDSAT/LC08/C01/T1_8DAY_NDVI": + dataset = ee.ImageCollection('LANDSAT/LC08/C01/T1_8DAY_NDVI').filterDate('2017-01-01', '2017-12-31') + colorized = dataset.select('NDVI') + colorizedVis = { + "min": 0.0, + "max": 1.0, + "palette": [ + 'FFFFFF', 'CE7E45', 'DF923D', 'F1B555', 'FCD163', '99B718', '74A901', + '66A000', '529400', '3E8601', '207401', '056201', '004C00', '023B01', + '012E01', '011D01', '011301']} + Map.setCenter(-72.882406,5.181746, 6) + Map.addLayer(colorized, colorizedVis, 'Colorized') + + elif cod == "LANDSAT/LC08/C01/T1_8DAY_NDWI": + dataset = ee.ImageCollection('LANDSAT/LC08/C01/T1_8DAY_NDWI').filterDate('2017-01-01', '2017-12-31') + colorized = dataset.select('NDWI') + colorizedVis = { + "min": 0.0, + "max": 1.0, + "palette": ['0000ff', '00ffff', 'ffff00', 'ff0000', 'ffffff'], + }; + Map.setCenter(-72.882406,5.181746, 6) + Map.addLayer(colorized, colorizedVis, 'Colorized') + + elif cod == "LANDSAT/LC08/C01/T1_8DAY_RAW": + dataset = ee.ImageCollection('LANDSAT/LC08/C01/T1_8DAY_RAW').filterDate('2017-01-01', '2017-12-31') + visParams = { + "min": 0, + "max": 20000, + "gamma": 1.2, + "bands": ['B4', 'B3', 'B2'], + } + Map.setCenter(-72.882406,5.181746, 6) + Map.addLayer(dataset, visParams, 'LANDSAT/LC08/C01/T1_8DAY_RAW') + + elif cod == "LANDSAT/LC08/C01/T1_8DAY_TOA": + dataset = ee.ImageCollection('LANDSAT/LC08/C01/T1_8DAY_TOA').filterDate('2017-01-01', '2017-12-31') + trueColor = dataset.select(['B4', 'B3', 'B2']) + trueColorVis = { + "min": 0, + "max": 0.4, + "gamma": 1.2, + } + Map.setCenter(-72.882406,5.181746, 6) + Map.addLayer(trueColor, trueColorVis, 'True Color (432)') + + elif cod == "LANDSAT/LC08/C01/T1_32DAY_BAI": + dataset = ee.ImageCollection('LANDSAT/LC08/C01/T1_32DAY_BAI').filterDate('2017-01-01', '2017-12-31') + scaled = dataset.select('BAI') + scaledVis = { + "min": 0.0, + "max": 100.0, + } + Map.setCenter(-72.882406,5.181746, 6) + Map.addLayer(scaled, scaledVis, 'Scaled') + + elif cod == "LANDSAT/LC08/C01/T1_32DAY_EVI": + dataset = ee.ImageCollection('LANDSAT/LC08/C01/T1_32DAY_EVI').filterDate('2017-01-01', '2017-12-31') + colorized = dataset.select('EVI') + colorizedVis = { + "min": 0.0, + "max": 1.0, + "palette": [ + 'FFFFFF', 'CE7E45', 'DF923D', 'F1B555', 'FCD163', '99B718', '74A901', + '66A000', '529400', '3E8601', '207401', '056201', '004C00', '023B01', + '012E01', '011D01', '011301'] + } + Map.setCenter(-72.882406,5.181746, 6) + Map.addLayer(colorized, colorizedVis, 'Colorized') + + elif cod == "LANDSAT/LC08/C01/T1_32DAY_NBRT": + dataset = ee.ImageCollection('LANDSAT/LC08/C01/T1_32DAY_NBRT').filterDate('2017-01-01', '2017-12-31') + colorized = dataset.select('NBRT') + colorizedVis = { + "min": 0.9, + "max": 1.0, + "palette": ['000000', 'FFFFFF'], + } + Map.setCenter(-72.882406,5.181746, 6) + Map.addLayer(colorized, colorizedVis, 'Colorized') + + elif cod == "LANDSAT/LC08/C01/T1_32DAY_NDSI": + dataset = ee.ImageCollection('LANDSAT/LC08/C01/T1_32DAY_NDSI').filterDate('2017-01-01', '2017-12-31') + colorized = dataset.select('NDSI') + colorizedVis = { + "palette": ['000088', '0000FF', '8888FF', 'FFFFFF'], + }; + Map.setCenter(-72.882406,5.181746, 6) + Map.addLayer(colorized, colorizedVis, 'Colorized') + + elif cod == "LANDSAT/LC08/C01/T1_32DAY_NDVI": + dataset = ee.ImageCollection('LANDSAT/LC08/C01/T1_32DAY_NDVI').filterDate('2017-01-01', '2017-12-31') + colorized = dataset.select('NDVI') + colorizedVis = { + "min": 0.0, + "max": 1.0, + "palette": [ + 'FFFFFF', 'CE7E45', 'DF923D', 'F1B555', 'FCD163', '99B718', '74A901', + '66A000', '529400', '3E8601', '207401', '056201', '004C00', '023B01', + '012E01', '011D01', '011301'] + } + Map.setCenter(-72.882406,5.181746, 6) + Map.addLayer(colorized, colorizedVis, 'Colorized') + + elif cod == "LANDSAT/LC08/C01/T1_32DAY_NDWI": + dataset = ee.ImageCollection('LANDSAT/LC08/C01/T1_32DAY_NDWI').filterDate('2017-01-01', '2017-12-31') + colorized = dataset.select('NDWI'); + colorizedVis = { + "min": 0.0, + "max": 1.0, + "palette": ['0000ff', '00ffff', 'ffff00', 'ff0000', 'ffffff'] + } + Map.setCenter(-72.882406,5.181746, 6) + Map.addLayer(colorized, colorizedVis, 'Colorized') + + elif cod == "LANDSAT/LC08/C01/T1_32DAY_RAW": + dataset = ee.ImageCollection('LANDSAT/LC08/C01/T1_32DAY_RAW').filterDate('2017-01-01', '2017-12-31') + visParams = { + "min": 0, + "max": 20000, + "gamma": 1.2, + "bands": ['B4', 'B3', 'B2'] + } + Map.setCenter(-72.882406,5.181746, 6) + Map.addLayer(dataset, visParams, 'LANDSAT/LC08/C01/T1_32DAY_RAW') + + elif cod == "LANDSAT/LC08/C01/T1_32DAY_TOA": + dataset = ee.ImageCollection('LANDSAT/LC08/C01/T1_32DAY_TOA').filterDate('2017-01-01', '2017-12-31') + trueColor = dataset.select(['B4', 'B3', 'B2']) + trueColorVis = { + "min": 0, + "max": 0.4, + "gamma": 1.2, + } + Map.setCenter(-72.882406,5.181746, 6) + Map.addLayer(trueColor, trueColorVis, 'True Color (432)') + + elif cod == "LANDSAT/LC08/C01/T1_ANNUAL_BAI": + dataset = ee.ImageCollection('LANDSAT/LC08/C01/T1_ANNUAL_BAI') \ + .filterDate('2017-01-01', '2017-12-31') + scaled = dataset.select('BAI') + scaledVis = { + "min": 0.0, + "max": 100.0, + } + Map.setCenter(-72.882406,5.181746, 6) + Map.addLayer(scaled, scaledVis, 'Scaled') + + elif cod == "NOAA/DMSP-OLS/CALIBRATED_LIGHTS_V4": + dataset = ee.ImageCollection('NOAA/DMSP-OLS/CALIBRATED_LIGHTS_V4')\ + .filterDate('2010-01-01', '2010-12-31') + nighttimeLights = dataset.select('avg_vis') + nighttimeLightsVis = { + "min": 3.0, + "max": 60.0, + } + Map.setCenter(7.82, 49.1, 4) + Map.addLayer(nighttimeLights, nighttimeLightsVis, 'Nighttime Lights') + + elif cod == "NOAA/VIIRS/DNB/MONTHLY_V1/VCMCFG": + dataset = ee.ImageCollection('NOAA/VIIRS/DNB/MONTHLY_V1/VCMCFG').filterDate('2022-01-01', '2023-12-31') + nighttime = dataset.select('avg_rad') + nighttimeVis = { + "min": 0.0, + "max": 60.0, + } + Map.setCenter(67.1056, 24.8904, 8) + Map.addLayer(nighttime, nighttimeVis, 'Nighttime') diff --git a/y/gee/migrations/__init__.py b/y/gee/migrations/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/y/gee/migrations/__pycache__/__init__.cpython-311.pyc b/y/gee/migrations/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..325009ccc8b8f3b0367cbbde924b1c7d3a9a2712 Binary files /dev/null and b/y/gee/migrations/__pycache__/__init__.cpython-311.pyc differ diff --git a/y/gee/migrations/__pycache__/__init__.cpython-312.pyc b/y/gee/migrations/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b752af3ba63095dd0cf426211cc5473c2f91de58 Binary files /dev/null and b/y/gee/migrations/__pycache__/__init__.cpython-312.pyc differ diff --git a/y/gee/migrations/__pycache__/__init__.cpython-39.pyc b/y/gee/migrations/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..96415c0e5c9985e1f5d6b6b16c90a1e6f6f09b3d Binary files /dev/null and b/y/gee/migrations/__pycache__/__init__.cpython-39.pyc differ diff --git a/y/gee/models.py b/y/gee/models.py new file mode 100644 index 0000000000000000000000000000000000000000..71a836239075aa6e6e4ecb700e9c42c95c022d91 --- /dev/null +++ b/y/gee/models.py @@ -0,0 +1,3 @@ +from django.db import models + +# Create your models here. diff --git a/y/gee/tests.py b/y/gee/tests.py new file mode 100644 index 0000000000000000000000000000000000000000..7ce503c2dd97ba78597f6ff6e4393132753573f6 --- /dev/null +++ b/y/gee/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/y/gee/views.py b/y/gee/views.py new file mode 100644 index 0000000000000000000000000000000000000000..7a0cb4e6dd02d5cac29f5a4364d3d4b1d3770863 --- /dev/null +++ b/y/gee/views.py @@ -0,0 +1,1064 @@ +from django.shortcuts import render,redirect +import geopandas as gpd +from folium import GeoJson +import json +import geemap +import os +# generic base view +from django.views.generic import TemplateView + +# folium +import folium +from folium import plugins + +# gee +import ee + +#--- +from .forms import * +from django.http import HttpResponse +from django.shortcuts import render +from django.http import JsonResponse +from .gee import type_map, data_gee +from django.contrib.auth.decorators import login_required +import geemap.foliumap as geemap +from django.views.decorators.csrf import csrf_exempt +from django.contrib.auth import login as auth_login +from django.urls import reverse_lazy +from django.views.generic import UpdateView +from django.shortcuts import render +import ee +import pandas as pd +import numpy as np +from scipy import optimize +import matplotlib.pyplot as plt +import matplotlib.pyplot as plt +import numpy as np +from scipy import optimize + + +from django.shortcuts import render +import ee +import pandas as pd +import numpy as np +from scipy import optimize +from django.http import JsonResponse +import plotly.graph_objs as go +from datetime import datetime + + + + + + +#e.Authenticate() + ## Credenciales de EE + + +# D:\Desktop\Django_app_12_sep-2023\gee\ee-muzzamil.json + +def index(request): + + print("I am in index") + return render (request, "index.html") + +# ee.Initialize() +@csrf_exempt + +@login_required +def home(request): + template_name = 'home.html' + + + + if request.method == 'GET': + selected_dataset = request.GET.get('dataset') + selected_shapefile = request.GET.get('shapefile') + selected_date_range_From = request.GET.get('dateRangeFrom') + selected_date_range_To = request.GET.get('dateRangeTo') + + print(f'Selected Dataset: {selected_dataset}') + print(f'Selected Dataset: {selected_shapefile}') + + figure = folium.Figure() + + m = folium.Map( + location=[25.5973518, 65.54495724], + zoom_start=7, + ) + m.add_to(figure) + +#----------------------------------------------------------------------------------------------------------------------# + if selected_dataset == "Modis": + if selected_shapefile != None: + + shapefile_path = ('C:\\Users\\piv\\Desktop\\y\\media\\shp') + + + + roi_gdf = gpd.read_file(shapefile_path) + roi_geojson = roi_gdf.to_crs("EPSG:4326").to_json() + + # Create a folium GeoJson layer for visualization + roi_geojson_layer = folium.GeoJson(roi_geojson, name='ROI GeoJSON') + roi_geojson_layer.add_to(m) + + # Convert the GeoJSON content to Earth Engine object + ee_object = geemap.geojson_to_ee(json.loads(roi_geojson)) + if selected_date_range_From != None: + if selected_date_range_To != None: + print("I am here") + F = selected_date_range_From + T = selected_date_range_To + print(F,"==>",T) + + + dataset = ee.ImageCollection('MODIS/006/MOD13Q1').filter(ee.Filter.date(F, T)).filterBounds(ee_object) + + modisndvi = dataset.select('NDVI') + + modisndvi = modisndvi.clip(ee_object) + + + + vis_paramsNDVI = { + 'min': 0, + 'max': 9000, + 'palette': ['FE8374', 'C0E5DE', '3A837C', '034B48']} + + map_id_dict = ee.Image(modisndvi).getMapId(vis_paramsNDVI) + folium.raster_layers.TileLayer( + tiles=map_id_dict['tile_fetcher'].url_format, + attr='Google Earth Engine', + name='NDVI', + overlay=True, + control=True + ).add_to(m) + + + + m.add_child(folium.LayerControl()) + figure.render() + + else: + F = "2015-07-01" + T = "2019-11-30" + print("Date TO is Missing") + else: + F = "2015-07-01" + T = "2019-11-30" + print("Date From is Missing") + + else: + pass + + + + + + + + +#--------------------------------------------------------------------------------------------------------------------------------# + elif selected_dataset == "dataset_nighttime": + if selected_shapefile != None: + + shapefile_path = ('C:\\Users\\piv\\Desktop\\y\\media\\shp') + + # D:\Desktop\final_working1-New-2023\final\media + + roi_gdf = gpd.read_file(shapefile_path) + roi_geojson = roi_gdf.to_crs("EPSG:4326").to_json() + + # Create a folium GeoJson layer for visualization + roi_geojson_layer = folium.GeoJson(roi_geojson, name='ROI GeoJSON') + roi_geojson_layer.add_to(m) + + # Convert the GeoJSON content to Earth Engine object + ee_object = geemap.geojson_to_ee(json.loads(roi_geojson)) + if selected_date_range_From != None: + if selected_date_range_To != None: + print("I am here") + F = selected_date_range_From + T = selected_date_range_To + print(F,"==>",T) + + + dataset_nighttime = ee.ImageCollection('NOAA/VIIRS/DNB/MONTHLY_V1/VCMCFG').filter(ee.Filter.date(F, T)) + + + + # Mosaic the image collection to a single image + nighttime = dataset_nighttime.select('avg_rad').mosaic() + + # Clip the nighttime lights image to the defined region + nighttime_clipped = nighttime.clip(ee_object) + + nighttimeVis = {'min': 0.0, 'max': 60.0,'palette': ['1a3678', '2955bc', '5699ff', '8dbae9', 'acd1ff', 'caebff', 'e5f9ff', + 'fdffb4', 'ffe6a2', 'ffc969', 'ffa12d', 'ff7c1f', 'ca531a', 'ff0000', + 'ab0000']} + nighttime_layer = folium.TileLayer( + tiles=nighttime_clipped.getMapId(nighttimeVis)['tile_fetcher'].url_format, + attr='Google Earth Engine', + name='Nighttime Lights', + overlay=True, + control=True + ).add_to(m) + + m.add_child(folium.LayerControl()) + figure.render() + + else: + F = "2015-07-01" + T = "2023-09-30" + print("Date TO is Missing") + else: + F = "2015-07-01" + T = "2023-09-30" + print("Date From is Missing") + + else: + pass +#------------------------------------------------------------------------------------------------------------------------------------# + +#------------------------------------------------------------------------------------------------------------------------------------# + elif selected_dataset == "precipitation": + if selected_shapefile != None: + + shapefile_path = ('C:\\Users\\piv\\Desktop\\y\\media\\shp') + + + + roi_gdf = gpd.read_file(shapefile_path) + roi_geojson = roi_gdf.to_crs("EPSG:4326").to_json() + + # Create a folium GeoJson layer for visualization + roi_geojson_layer = folium.GeoJson(roi_geojson, name='ROI GeoJSON') + roi_geojson_layer.add_to(m) + + # Convert the GeoJSON content to Earth Engine object + ee_object = geemap.geojson_to_ee(json.loads(roi_geojson)) + if selected_date_range_From != None: + if selected_date_range_To != None: + print("I am here") + F = selected_date_range_From + T = selected_date_range_To + print(F,"==>",T) + + + + # Load the dataset + dataset = (ee.ImageCollection('UCSB-CHG/CHIRPS/DAILY').filterBounds(ee_object).filter(ee.Filter.date(F, T))) + + + + + # Calculate the sum of the dataset + dataset1 = dataset.sum() + + # Clip the summed dataset to the defined region + dataset2 = dataset1.clip(ee_object) + + # Select the 'precipitation' band + precipitation = dataset2.select('precipitation') + + # Define visualization parameters + imageVisParam = { + 'min': 80, + 'max': 460, + 'palette': ["001137","0aab1e","e7eb05","ff4a2d","e90000"] + } + + # Clip the precipitation data to the region + precipitation_clipped = precipitation.clip(ee_object) + + # Add precipitation layer to the map + folium.TileLayer( + tiles=precipitation_clipped.getMapId(imageVisParam)['tile_fetcher'].url_format, + attr='Google Earth Engine', + name='Precipitation', + overlay=True, + control=True + ).add_to(m) + + m.add_child(folium.LayerControl()) + figure.render() + + else: + F = "2015-07-01" + T = "2023-09-30" + print("Date TO is Missing") + else: + F = "2015-07-01" + T = "2023-09-30" + print("Date From is Missing") + + else: + pass + +#------------------------------------------------------------------------------------------------------------------------------------# + + +#------------------------------------------------------------------------------------------------------------------------------------# + + + +#to be rendered + dataset_options = ['Modis', + 'dataset_nighttime', + 'precipitation', + 'GlobalSurfaceWater', + 'WorldPop', + 'COPERNICUS'] + + + + + shapes_options = ['District_Boundary', + 'hydro_basins', + 'karachi', + 'National_Constituency_with_Projected_2010_Population', + 'Provincial_Boundary', + 'Provincial_Constituency', + 'Tehsil_Boundary', + 'Union_Council'] + # print(figure) + # map_html = m._repr_html_() + m.save('ndvi_map.html') + + + + + context = {"map": figure,"dataset_options":dataset_options,"shapes_options": shapes_options} + return render(request, template_name , context) +@login_required +def generate_ndvi_map(request): + # Create a response object for the HTML file + response = HttpResponse(content_type='text/html') + # Open and read the HTML file + with open('ndvi_map.html', 'rb') as html_file: + response.write(html_file.read()) + + # Set the Content-Disposition header to suggest a filename for download + response['Content-Disposition'] = 'attachment; filename="ndvi_map.html"' + + return response +@login_required +def generate_chart(request): + template_name = 'results.html' + + water_threshold=0.2 + if request.method == 'GET': + selected_dataset = request.GET.get('dataset') + selected_shapefile = request.GET.get('shapefile') + selected_date_range_From = request.GET.get('dateRangeFrom') + selected_date_range_To = request.GET.get('dateRangeTo') + + print(f'Selected Dataset: {selected_dataset}') + print(f'Selected Dataset: {selected_shapefile}') + + figure = folium.Figure() + + m = folium.Map( + location=[25.5973518, 65.54495724], + zoom_start=7, + ) + m.add_to(figure) + + +#----------------------------------------------------------------------------------------------------------------------# + if selected_dataset == "Modis": + if selected_shapefile != None: + + shapefile_path = ('C:\\Users\\piv\\Desktop\\y\\media\\shp') + + + roi_gdf = gpd.read_file(shapefile_path) + roi_geojson = roi_gdf.to_crs("EPSG:4326").to_json() + + # Create a folium GeoJson layer for visualization + roi_geojson_layer = folium.GeoJson(roi_geojson, name='ROI GeoJSON') + roi_geojson_layer.add_to(m) + + # Convert the GeoJSON content to Earth Engine object + ee_object = geemap.geojson_to_ee(json.loads(roi_geojson)) + if selected_date_range_From != None: + if selected_date_range_To != None: + print("I am here") + F = selected_date_range_From + T = selected_date_range_To + print(F,"==>",T) + + + dataset = ee.ImageCollection('MODIS/006/MOD13Q1').filter(ee.Filter.date(F, T)).filterBounds(ee_object).first() + + modisndvi = dataset.select('NDVI') + + def water_function(image): + ndwi = image.normalizedDifference(['B3', 'B5']).rename('NDWI') + ndwi1 = ndwi.select('NDWI') + water01 = ndwi1.gt(water_threshold) + image = image.updateMask(water01).addBands(ndwi1) + area = ee.Image.pixelArea() + water_area = water01.multiply(area).rename('waterArea') + image = image.addBands(water_area) + stats = water_area.reduceRegion({ + 'reducer': ee.Reducer.sum(), + 'geometry': shapefile_path, + 'scale': 30, + }) + return image.set(stats) + + + + modisndvi = modisndvi.clip(ee_object) + + vis_paramsNDVI = { + 'min': 0, + 'max': 9000, + 'palette': ['FE8374', 'C0E5DE', '3A837C', '034B48']} + + map_id_dict = ee.Image(modisndvi).getMapId(vis_paramsNDVI) + folium.raster_layers.TileLayer( + tiles=map_id_dict['tile_fetcher'].url_format, + attr='Google Earth Engine', + name='NDVI', + overlay=True, + control=True + ).add_to(m) + + m.add_child(folium.LayerControl()) + figure.render() + + else: + F = "2015-07-01" + T = "2019-11-30" + print("Date TO is Missing") + else: + F = "2015-07-01" + T = "2019-11-30" + print("Date From is Missing") + + else: + pass + + + + +#--------------------------------------------------------------------------------------------------------------------------------# + elif selected_dataset == "dataset_nighttime": + if selected_shapefile != None: + + shapefile_path =('C:\\Users\\piv\\Desktop\\y\\media\\shp') + # D:\Desktop\final_working1-New-2023\final\media + + roi_gdf = gpd.read_file(shapefile_path) + roi_geojson = roi_gdf.to_crs("EPSG:4326").to_json() + + # Create a folium GeoJson layer for visualization + roi_geojson_layer = folium.GeoJson(roi_geojson, name='ROI GeoJSON') + roi_geojson_layer.add_to(m) + + # Convert the GeoJSON content to Earth Engine object + ee_object = geemap.geojson_to_ee(json.loads(roi_geojson)) + if selected_date_range_From != None: + if selected_date_range_To != None: + print("I am here") + F = selected_date_range_From + T = selected_date_range_To + print(F,"==>",T) + + + dataset_nighttime = ee.ImageCollection('NOAA/VIIRS/DNB/MONTHLY_V1/VCMCFG').filter(ee.Filter.date(F, T)) + + + + # Mosaic the image collection to a single image + nighttime = dataset_nighttime.select('avg_rad').mosaic() + + # Clip the nighttime lights image to the defined region + nighttime_clipped = nighttime.clip(ee_object) + + nighttimeVis = {'min': 0.0, 'max': 60.0,'palette': ['1a3678', '2955bc', '5699ff', '8dbae9', 'acd1ff', 'caebff', 'e5f9ff', + 'fdffb4', 'ffe6a2', 'ffc969', 'ffa12d', 'ff7c1f', 'ca531a', 'ff0000', + 'ab0000']} + nighttime_layer = folium.TileLayer( + tiles=nighttime_clipped.getMapId(nighttimeVis)['tile_fetcher'].url_format, + attr='Google Earth Engine', + name='Nighttime Lights', + overlay=True, + control=True + ).add_to(m) + + m.add_child(folium.LayerControl()) + figure.render() + + else: + F = "2015-07-01" + T = "2023-09-30" + print("Date TO is Missing") + else: + F = "2015-07-01" + T = "2023-09-30" + print("Date From is Missing") + + else: + pass + + elif selected_dataset == "precipitation": + if selected_shapefile != None: + shapefile_path = ('C:\\Users\\piv\\Desktop\\y\\media\\shp') + + roi_gdf = gpd.read_file(shapefile_path) + roi_geojson = roi_gdf.to_crs("EPSG:4326").to_json() + + # Create a folium GeoJson layer for visualization + roi_geojson_layer = folium.GeoJson(roi_geojson, name='ROI GeoJSON') + roi_geojson_layer.add_to(m) + + # Convert the GeoJSON content to Earth Engine object + ee_object = geemap.geojson_to_ee(json.loads(roi_geojson)) + if selected_date_range_From != None: + if selected_date_range_To != None: + print("I am here") + F = selected_date_range_From + T = selected_date_range_To + print(F, "=>", T) + + # Load the dataset + dataset = (ee.ImageCollection('UCSB-CHG/CHIRPS/DAILY').filterBounds(ee_object).filter(ee.Filter.date(F, T))) + + # Calculate the sum of the dataset + dataset1 = dataset.sum() + + # Clip the summed dataset to the defined region + dataset2 = dataset1.clip(ee_object) + + # Select the 'precipitation' band + precipitation = dataset2.select('precipitation') + + # Define visualization parameters + imageVisParam = { + 'min': 80, + 'max': 460, + 'palette': ["001137", "0aab1e", "e7eb05", "ff4a2d", "e90000"] + } + + # Clip the precipitation data to the region + precipitation_clipped = precipitation.clip(ee_object) + + # Add precipitation layer to the map + folium.TileLayer( + tiles=precipitation_clipped.getMapId(imageVisParam)['tile_fetcher'].url_format, + attr='Google Earth Engine', + name='Precipitation', + overlay=True, + control=True + ).add_to(m) + + m.add_child(folium.LayerControl()) + figure.render() + else: + F = "2015-07-01" + T = "2023-09-30" + print("Date TO is Missing") + else: + F = "2015-07-01" + T = "2023-09-30" + print("Date From is Missing") + + + + elif selected_dataset == "WorldPop": + shapefile_path = ('C:\\Users\\piv\\Desktop\\y\\media\\shp') + + roi_gdf = gpd.read_file(shapefile_path) + roi_geojson = roi_gdf.to_crs("EPSG:4326").to_json() + + # Create a folium GeoJson layer for visualization + m = folium.Map(location=[25.5, 61], zoom_start=6) + roi_geojson_layer = folium.GeoJson(roi_geojson, name='ROI GeoJSON') + roi_geojson_layer.add_to(m) + + # Convert the GeoJSON content to Earth Engine object + ee_object = geemap.geojson_to_ee(json.loads(roi_geojson)) + + if selected_date_range_From and selected_date_range_To: + F = selected_date_range_From + T = selected_date_range_To + + # Load the image collection + collection = (ee.ImageCollection("WorldPop/GP/100m/pop") + .filterBounds(ee_object) + .filter(ee.Filter.date(F, T))) + + # Calculate the sum of population for the specified region and time range + s2median = collection.sum() + + # Clip the result to the ROI + roi = s2median.clip(ee_object) + + # Create an image time series chart + chart = (ee.Image.cat(collection) + .reduceRegion(ee.Reducer.sum(), roi, 200) + .getInfo()) + + # Return the chart as JSON and map HTML as a response + clipped_image_url = roi.getThumbUrl({ + 'min': 0, + 'max': 2000, + 'dimensions': 512, + 'palette': ['000000', 'ffffff'] + }) + + # Add the clipped population image as a layer to the map + folium.TileLayer( + tiles=clipped_image_url, + attr="Population year17", + overlay=True, + control=True, + ).add_to(m) + + # Return the folium map as HTML in the JSON response + map_html = m.get_root().render() + response_data = {'chart': chart, 'map_html': map_html} + return JsonResponse(response_data) + + + +#to be rendered + dataset_options = ['Modis', + 'dataset_nighttime', + 'precipitation', + 'GlobalSurfaceWater', + 'WorldPop', + 'COPERNICUS'] + + + + + shapes_options = ['District_Boundary', + 'hydro_basins', + 'karachi', + 'National_Constituency_with_Projected_2010_Population', + 'Provincial_Boundary', + 'Provincial_Constituency', + 'Tehsil_Boundary', + 'Union_Council'] + # print(figure) + # map_html = m._repr_html_() + m.save('ndvi_map.html') + + + + + context = {"map": figure,"dataset_options":dataset_options,"shapes_options": shapes_options} + return render(request, template_name , context) + # You can continue with the existing code or add more logic as needed +@login_required +def map (request): + template_name='map.html' + + + return render(request,template_name) + +@login_required +def GEE(request): + if request.method == 'POST': + formulario = dataset_geemap(data=request.POST) + if formulario.is_valid(): + option = formulario.cleaned_data['option'] + + # Apply custom styles to the form fields or widgets + formulario.fields['option'].widget.attrs['class'] = 'custom-select' + + figure = folium.Figure() + Map = geemap.Map( + plugin_Draw = True, + Draw_export = False, + plugin_LayerControl = False, + location = [25, 67], + zoom_start = 10, + plugin_LatLngPopup = False) + Map.add_basemap('HYBRID') + type_map(Map, option) + file, url_d = data_gee() + Map.add_layer_control() + url = url_d[url_d['id'] == option].reset_index() + url = url['asset_url'].iloc[0] + form = dataset_geemap(data=request.POST) + else: + form = dataset_geemap() + + figure = folium.Figure() + Map = geemap.Map( + plugin_Draw = True, + Draw_export = False, + plugin_LayerControl = False, + location = [25, 67], + zoom_start = 10, + plugin_LatLngPopup = False) + Map.add_basemap('HYBRID') + dataset = ee.ImageCollection('BIOPAMA/GlobalOilPalm/v1') + opClass = dataset.select('classification') + mosaic = opClass.mosaic() + classificationVis = { + 'min': 1, + 'max': 3, + 'palette': ['ff0000','ef00ff', '696969'] + } + mask = mosaic.neq(3) + mask = mask.where(mask.eq(0), 0.6) + + Map.addLayer(mosaic.updateMask(mask), + classificationVis, 'Oil palm plantation type', True) + Map.setCenter(25,67,8) + + url = 'https://developers.google.com/earth-engine/datasets/catalog/BIOPAMA_GlobalOilPalm_v1#terms-of-use' + + + Map.add_to(figure) + figure = figure._repr_html_() #updated + + return render(request, 'gee.html', {'form':form, 'map':figure, 'url':url}) + + + + + + + +# Define your ee_array_to_df, t_modis_to_celsius, and fit_func functions here + + +def result_options(request): + + return render (request, "result_options.html" ) + +def temp_result(request): + + if request.method == 'GET': + selected_shapefile = request.GET.get('shapefile') + selected_date_range_From = request.GET.get('dateRangeFrom') + selected_date_range_To = request.GET.get('dateRangeTo') + + print(selected_shapefile) + print(selected_date_range_From) + print(selected_date_range_To) + + if selected_date_range_From == None or selected_date_range_To == None: + i_date ='2022-06-24' + f_date ='2023-09-19' + else: + i_date = selected_date_range_From + f_date = selected_date_range_To + + # Import the MODIS land surface temperature collection. + lst = ee.ImageCollection('MODIS/006/MOD11A1') + + # Selection of appropriate bands and dates for LST. + lst = lst.select('LST_Day_1km', 'QC_Day').filterDate(i_date, f_date) + + if selected_shapefile == None: + u_lon = 4.8148 + u_lat = 45.7758 + u_poi = ee.Geometry.Point(u_lon, u_lat) + else: + shapefile_path = ('C:\\Users\\piv\\Desktop\\y\\media\\shp') + + + roi_gdf = gpd.read_file(shapefile_path) + roi_geojson = roi_gdf.to_crs("EPSG:4326").to_json() + + # Create a folium GeoJson layer for visualization + ee_object = geemap.geojson_to_ee(json.loads(roi_geojson)) + + u_poi = ee_object + + # Get the data for the pixel intersecting the point in the urban area. + scale = 1000 # scale in meters + lst_u_poi = lst.getRegion(u_poi, scale).getInfo() + + # Convert the Earth Engine data to a DataFrame using the provided function. + lst_df_urban = ee_array_to_df(lst_u_poi, ['LST_Day_1km']) + + # Apply the function to convert temperature units to Celsius. + lst_df_urban['LST_Day_1km'] = lst_df_urban['LST_Day_1km'].apply(t_modis_to_celsius) + + # Fitting curves. + ## First, extract x values (times) from the df. + x_data_u = np.asanyarray(lst_df_urban['time'].apply(float)) + + ## Then, extract y values (LST) from the df. + y_data_u = np.asanyarray(lst_df_urban['LST_Day_1km'].apply(float)) + + ## Define the fitting function with parameters. + def fit_func(t, lst0, delta_lst, tau, phi): + return lst0 + (delta_lst/2)*np.sin(2*np.pi*t/tau + phi) + + ## Optimize the parameters using a good start p0. + lst0 = 20 + delta_lst = 40 + tau = 365*24*3600*1000 # milliseconds in a year + phi = 2*np.pi*4*30.5*3600*1000/tau # offset regarding when we expect LST(t)=LST0 + + params_u, params_covariance_u = optimize.curve_fit( + fit_func, x_data_u, y_data_u, p0=[lst0, delta_lst, tau, phi]) + + + x_data_u_formatted = [datetime.utcfromtimestamp(ts / 1000).strftime('%d %m %Y') for ts in x_data_u] + # x_data_r_formatted = [datetime.utcfromtimestamp(ts / 1000).strftime('%d %m %Y') for ts in x_data_r] + + # return render(request, 'chart.html', {'chart_data': chart_data}) + urban_trace = go.Scatter( + x=x_data_u_formatted, # Use the formatted dates + y=fit_func(x_data_u, *params_u), # Use your fit_func to generate y values + mode='lines', + name='Urban Area' + ) + + # Create a Plotly figure for the rural data + + + data = [urban_trace] + + layout = go.Layout( + title='Land Surface Temperature over Time', + xaxis=dict(title='Time'), + yaxis=dict(title='LST (°C)'), + showlegend=True + ) + + fig = go.Figure(data=data, layout=layout) + + # Convert the Plotly figure to HTML + plot_div = fig.to_html(full_html=False, default_height=500, default_width=700) + + shapes_options = ['District_Boundary', + 'hydro_basins', + 'karachi', + 'National_Constituency_with_Projected_2010_Population', + 'Provincial_Boundary', + 'Provincial_Constituency', + 'Tehsil_Boundary', + 'Union_Council'] + + + context={ + "shapes_options":shapes_options, + "plot_div":plot_div + + } + + + + return render(request, "temp_result.html",context ) + + + else: + + + + + + shapes_options = ['District_Boundary', + 'hydro_basins', + 'karachi', + 'National_Constituency_with_Projected_2010_Population', + 'Provincial_Boundary', + 'Provincial_Constituency', + 'Tehsil_Boundary', + 'Union_Council'] + + + context={ + "shapes_options":shapes_options + + } + + + + return render(request, "temp_result.html",context ) + + +def chart(request): +# Define the date range of interest. + + + #replaceble with dates + i_date = '2017-01-01' + f_date = '2020-01-01' + + # Import the MODIS land surface temperature collection. + lst = ee.ImageCollection('MODIS/006/MOD11A1') + + # Selection of appropriate bands and dates for LST. + lst = lst.select('LST_Day_1km', 'QC_Day').filterDate(i_date, f_date) + + # Define the urban location of interest as a point near Lyon, France. + #replaceble with shapefile + u_lon = 4.8148 + u_lat = 45.7758 + u_poi = ee.Geometry.Point(u_lon, u_lat) + + # Get the data for the pixel intersecting the point in the urban area. + scale = 1000 # scale in meters + lst_u_poi = lst.getRegion(u_poi, scale).getInfo() + + # Convert the Earth Engine data to a DataFrame using the provided function. + lst_df_urban = ee_array_to_df(lst_u_poi, ['LST_Day_1km']) + + # Apply the function to convert temperature units to Celsius. + lst_df_urban['LST_Day_1km'] = lst_df_urban['LST_Day_1km'].apply(t_modis_to_celsius) + + # Fitting curves. + ## First, extract x values (times) from the df. + x_data_u = np.asanyarray(lst_df_urban['time'].apply(float)) + + ## Then, extract y values (LST) from the df. + y_data_u = np.asanyarray(lst_df_urban['LST_Day_1km'].apply(float)) + + ## Define the fitting function with parameters. + def fit_func(t, lst0, delta_lst, tau, phi): + return lst0 + (delta_lst/2)*np.sin(2*np.pi*t/tau + phi) + + ## Optimize the parameters using a good start p0. + lst0 = 20 + delta_lst = 40 + tau = 365*24*3600*1000 # milliseconds in a year + phi = 2*np.pi*4*30.5*3600*1000/tau # offset regarding when we expect LST(t)=LST0 + + params_u, params_covariance_u = optimize.curve_fit( + fit_func, x_data_u, y_data_u, p0=[lst0, delta_lst, tau, phi]) + + + x_data_u_formatted = [datetime.utcfromtimestamp(ts / 1000).strftime('%d %m %Y') for ts in x_data_u] + # x_data_r_formatted = [datetime.utcfromtimestamp(ts / 1000).strftime('%d %m %Y') for ts in x_data_r] + + # return render(request, 'chart.html', {'chart_data': chart_data}) + urban_trace = go.Scatter( + x=x_data_u_formatted, # Use the formatted dates + y=fit_func(x_data_u, *params_u), # Use your fit_func to generate y values + mode='lines', + name='Urban Area' + ) + + # Create a Plotly figure for the rural data + + + data = [urban_trace] + + layout = go.Layout( + title='Land Surface Temperature over Time', + xaxis=dict(title='Time'), + yaxis=dict(title='LST (°C)'), + showlegend=True + ) + + fig = go.Figure(data=data, layout=layout) + + # Convert the Plotly figure to HTML + plot_div = fig.to_html(full_html=False, default_height=500, default_width=700) + + return render(request, 'chart.html', {'plot_div': plot_div}) + + + + + + + + + + +#Auth +def signup (request): + form = SignUpForm() + if request.method == "POST": + + form = SignUpForm(request.POST) + if form.is_valid(): + user = form.save() + auth_login(request,user) + return redirect('index') + + + + return render(request, 'signup.html', {'form':form}) + + +class UserUpdateView(UpdateView): + model=User + fields =('first_name','last_name', 'email',) + template_name = 'my_account.html' + success_url = reverse_lazy('my_account') + + def get_object(self): + return self.request.user + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +def ee_array_to_df(arr, list_of_bands): + """Transforms client-side ee.Image.getRegion array to pandas.DataFrame.""" + df = pd.DataFrame(arr) + + # Rearrange the header. + headers = df.iloc[0] + df = pd.DataFrame(df.values[1:], columns=headers) + + # Remove rows without data inside. + df = df[['longitude', 'latitude', 'time', *list_of_bands]].dropna() + + # Convert the data to numeric values. + for band in list_of_bands: + df[band] = pd.to_numeric(df[band], errors='coerce') + + # Convert the time field into a datetime. + df['datetime'] = pd.to_datetime(df['time'], unit='ms') + + # Keep the columns of interest. + df = df[['time', 'datetime', *list_of_bands]] + print(df) + + return df + +def t_modis_to_celsius(t_modis): + """Converts MODIS LST units to degrees Celsius.""" + t_celsius = 0.02 * t_modis - 273.15 + return t_celsius + +def fit_func(t, lst0, delta_lst, tau, phi): + """Fitting function for the curve.""" + return lst0 + (delta_lst / 2) * np.sin(2 * np.pi * t / tau + phi) \ No newline at end of file diff --git a/y/gee/views2.py b/y/gee/views2.py new file mode 100644 index 0000000000000000000000000000000000000000..1b620dd3c3b726a4513b61b2c03b4a3f8683a69d --- /dev/null +++ b/y/gee/views2.py @@ -0,0 +1,70 @@ +from django.shortcuts import render + +# generic base view +from django.views.generic import TemplateView + + +#folium +import folium +from folium import plugins + + +#gee +import ee + +ee.Initialize() + + +#home +class home(TemplateView): + template_name = 'index.html' + + # Define a method for displaying Earth Engine image tiles on a folium map. + def get_context_data(self, **kwargs): + + figure = folium.Figure() + + #create Folium Object + m = folium.Map( + location=[28.5973518, 83.54495724], + zoom_start=8 + ) + + #add map to figure + m.add_to(figure) + + + #select the Dataset Here's used the MODIS data + dataset = (ee.ImageCollection('MODIS/006/MOD13Q1') + .filter(ee.Filter.date('2019-07-01', '2019-11-30')) + .first()) + modisndvi = dataset.select('NDVI') + + #Styling + vis_paramsNDVI = { + 'min': 0, + 'max': 9000, + 'palette': [ 'FE8374', 'C0E5DE', '3A837C','034B48',]} + + + #add the map to the the folium map + map_id_dict = ee.Image(modisndvi).getMapId(vis_paramsNDVI) + + #GEE raster data to TileLayer + folium.raster_layers.TileLayer( + tiles = map_id_dict['tile_fetcher'].url_format, + attr = 'Google Earth Engine', + name = 'NDVI', + overlay = True, + control = True + ).add_to(m) + + + #add Layer control + m.add_child(folium.LayerControl()) + + #figure + figure.render() + + #return map + return {"map": figure} \ No newline at end of file diff --git a/y/gee/views3.py b/y/gee/views3.py new file mode 100644 index 0000000000000000000000000000000000000000..a0d41b9b3e6c05545587bebfeb3a157fbcacc051 --- /dev/null +++ b/y/gee/views3.py @@ -0,0 +1,71 @@ +from django.shortcuts import render +import os +import folium +import geopandas as gpd +from folium import GeoJson +import ee +import geemap + +def home(request): + shp_dir = os.path.join(os.getcwd(), 'media', 'shp') + + m = folium.Map(location=[25, 67], zoom_start=5) + + # Styling for different layers + style_pakistan_districts_dd = {'fillColor': '#228B22', 'color': '#228B22'} + # Define other styles as needed... + + # Load GeoJSON data from shapefiles + layers = [ + ('Pakistan_Districts', 'District_Boundary.shp', style_pakistan_districts_dd), + # Add other layers here... + ] + + for name, shapefile, style in layers: + data = gpd.read_file(os.path.join(shp_dir, shapefile)) + data_geojson = data.to_crs("EPSG:4326").to_json() + + # Create a style function that takes feature and style as arguments + def style_function(feature, style=style): + return { + 'fillColor': style['fillColor'], + 'color': style['color'] + } + + GeoJson(data_geojson, name=name, style_function=style_function).add_to(m) + + # Earth Engine and geemap code (uncommented if authentication is resolved) + # Authenticate the API using your credentials (only need to run this once) + ee.Authenticate() + + # Initialize the Earth Engine API + ee.Initialize() + + # Define the region of interest (ROI) as a geometry + roi = ee.Geometry.Rectangle([67.56084171593015, 26.467647606743032, + 67.71053043663328, 28.467647606743032]) + + # Load Sentinel-2 dataset + s2_dataset = ee.ImageCollection('COPERNICUS/S2').filterBounds(roi) \ + .filterDate('2019-01-01', '2020-01-01') # Define the date range + + # Get the first image in the collection + image = s2_dataset.first() + + # Select the bands you need + bands = ['B2', 'B3', 'B4'] # Customize according to your needs + + # Select the region and scale of the image + image = image.select(bands).clip(roi) # Adjust scale as needed + + # Use geemap to display the image (optional) + Map = geemap.Map() + Map.centerObject(roi, zoom=10) + Map.addLayer(image, {'bands': bands, 'min': 0, 'max': 3000}, 'Sentinel-2 Image') + # Map + + folium.LayerControl().add_to(m) + + m = m._repr_html_() + context = {'my_map': m} + return render(request, 'geoApp/home.html', context) diff --git a/y/gee/views4.py b/y/gee/views4.py new file mode 100644 index 0000000000000000000000000000000000000000..8414d12391c0c79834267460b95c8b984fa68430 --- /dev/null +++ b/y/gee/views4.py @@ -0,0 +1,52 @@ +from django.shortcuts import render, redirect +import os +import folium +import geopandas as gpd +from folium import GeoJson + +# Create your views here. +def home(request): + shp_dir = os.path.join(os.getcwd(), 'media', 'shp') + + m = folium.Map(location=[0.0236, 37.9062], zoom_start=6) + + #styling + style_Kenya_county_dd = {'fillColor': '#228B22', 'color': '#228B22'} + style_kenya_wetlands = {'color': 'blue'} + style_kenya_all_towns = {'color': 'red'} + style_kenya_highland_roads = {'color': 'yellow'} + style_kenya_forestranges = {'color': 'green'} + + Kenya_county_dd = gpd.read_file(os.path.join(shp_dir, 'Kenya_county_dd.shp')) + Kenya_county_dd_geojson = Kenya_county_dd.to_crs("EPSG:4326").to_json() + + kenya_wetlands = gpd.read_file(os.path.join(shp_dir, 'kenya_wetlands.shp')) + kenya_wetlands_geojson = kenya_wetlands.to_crs("EPSG:4326").to_json() + + kenya_all_towns = gpd.read_file(os.path.join(shp_dir, 'kenya_all_towns.shp')) + kenya_all_towns_geojson = kenya_all_towns.to_crs("EPSG:4326").to_json() + + kenya_highland_roads = gpd.read_file(os.path.join(shp_dir, 'kenya_highland_roads.shp')) + kenya_highland_roads_geojson = kenya_highland_roads.to_crs("EPSG:4326").to_json() + + kenya_forestranges = gpd.read_file(os.path.join(shp_dir, 'kenya_forestranges.shp')) + kenya_forestranges_geojson = kenya_forestranges.to_crs("EPSG:4326").to_json() + + GeoJson(Kenya_county_dd_geojson, name='Kenya_counties', style_function=lambda x: style_Kenya_county_dd).add_to(m) + GeoJson(kenya_wetlands_geojson, name='kenya_wetlands', style_function=lambda x: style_kenya_wetlands).add_to(m) + + # Create a feature group for kenya_all_towns layer + kenya_all_towns_fg = folium.FeatureGroup(name='kenya_all_towns') + # Iterate over the points and add colored circles to the feature group + for _, row in kenya_all_towns.iterrows(): + folium.CircleMarker(location=[row['geometry'].y, row['geometry'].x], radius=2, fill=True, color='red', fill_opacity=1).add_to(kenya_all_towns_fg) + kenya_all_towns_fg.add_to(m) + + GeoJson(kenya_highland_roads_geojson, name='kenya_highland_roads', style_function=lambda x: style_kenya_highland_roads).add_to(m) + GeoJson(kenya_forestranges_geojson, name='kenya_forestranges', style_function=lambda x: style_kenya_forestranges).add_to(m) + + folium.LayerControl().add_to(m) + + m = m._repr_html_() + context = {'my_map': m} + return render(request, 'geoApp/home.html', context) diff --git a/y/gee/viewsN.py b/y/gee/viewsN.py new file mode 100644 index 0000000000000000000000000000000000000000..89134cf7994a5b124f73a65c2744b3a33d06d6ed --- /dev/null +++ b/y/gee/viewsN.py @@ -0,0 +1,85 @@ +from django.shortcuts import render +import geopandas as gpd +from folium import GeoJson +import json +import geemap +import folium +import ee + +# Generic base view +from django.views.generic import TemplateView + +ee.Initialize() + +# Frontend +# Home +class Home(TemplateView): + template_name = 'index.html' + + def get_context_data(self, **kwargs): + figure = folium.Figure() + + m = folium.Map( + location=[25.5973518, 65.54495724], + zoom_start=7, + ) + m.add_to(figure) + + style_roi = {'fillColor': '#228B22', 'color': '#228B22'} + roi_gdf = gpd.read_file(r'C:\Users\piv\Desktop\y\media\shp') + roi_geojson = roi_gdf.to_crs("EPSG:4326").to_json() + + # Create a folium GeoJson layer for visualization + roi_geojson_layer = GeoJson(roi_geojson, name='ROI GeoJSON') + roi_geojson_layer.add_to(m) + + # Convert the GeoJSON content to an Earth Engine object + ee_object = geemap.geojson_to_ee(json.loads(roi_geojson)) + + # Get the selected dataset and year from the request + selected_dataset = self.request.GET.get('dataset', 'landsat8') + selected_year = self.request.GET.get('year', '2022') + + # Define date range based on the selected year + date_start = selected_year + '-01-01' + date_end = selected_year + '-12-31' + date_range = ee.DateRange(ee.Date(date_start), ee.Date(date_end)) + + if selected_dataset == 'landsat8': + # Add your logic to handle Landsat 8 data + # Example: + dataset = ee.ImageCollection('LANDSAT/LC08/C01/T1_TOA').filterDate(date_range) + # Clip the Landsat layer to the region defined by ee_object + dataset_clipped = dataset.map(lambda image: image.clip(ee_object)) + # Add the Landsat layer to the map + map_info = dataset_clipped.first().getMapId({'bands': ['B4', 'B3', 'B2'], 'min': 0, 'max': 0.3}) + tms_url = map_info['tile_fetcher']['url_format'] # Updated line + folium.raster_layers.TileLayer( + tiles=tms_url, + attr='Google Earth Engine', + name='Landsat 8', + overlay=True, + control=True + ).add_to(m) + + elif selected_dataset == 'sentinel2': + # Add your logic to handle Sentinel 2 data + # Example: + dataset = ee.ImageCollection('COPERNICUS/S2').filterDate(date_range) + # Clip the Sentinel 2 layer to the region defined by ee_object + dataset_clipped = dataset.map(lambda image: image.clip(ee_object)) + # Add the Sentinel 2 layer to the map + map_info = dataset_clipped.first().getMapId({'bands': ['B4', 'B3', 'B2'], 'min': 0, 'max': 3000}) + tms_url = map_info['tile_fetcher']['url_format'] # Updated line + folium.raster_layers.TileLayer( + tiles=tms_url, + attr='Google Earth Engine', + name='Sentinel 2', + overlay=True, + control=True + ).add_to(m) + + m.add_child(folium.LayerControl()) + figure.render() + + return {"map": figure} diff --git a/y/index.html b/y/index.html new file mode 100644 index 0000000000000000000000000000000000000000..0da08933f7b6d4d1462635f19796a309daced3c1 --- /dev/null +++ b/y/index.html @@ -0,0 +1,29 @@ + + + + Run Command + + +

Run Command

+ +

+
+    
+
+
diff --git a/y/jaw.py b/y/jaw.py
new file mode 100644
index 0000000000000000000000000000000000000000..d6d469c6912b09691171665e6514bb2221d19db5
--- /dev/null
+++ b/y/jaw.py
@@ -0,0 +1,20 @@
+import streamlit as st
+
+st.title("HOME PAGE")
+
+st.title("Streamlit for Geospatial Applications")
+
+
+PAGES = {
+    "Home": "jaw.py",
+    "Folium Map": "folium_Map.py",
+   
+}
+
+# Sidebar for navigation
+st.sidebar.title("Navigation")
+selection = st.sidebar.radio("Go to", list(PAGES.keys()))
+
+# Load the selected page
+page = PAGES[selection]
+exec(open(page).read())
\ No newline at end of file
diff --git a/y/manage.py b/y/manage.py
new file mode 100644
index 0000000000000000000000000000000000000000..b5df0b648713d7bc24f5835f1a373ff81bebc23e
--- /dev/null
+++ b/y/manage.py
@@ -0,0 +1,59 @@
+#!/usr/bin/env python
+#!/usr/bin/env python
+import os
+import sys
+import ee
+import google.auth.exceptions
+
+
+# Function to initialize GEE
+# def initialize_gee():
+#     service = os.getenv('SA')
+#     file = r"D:\Desktop\Django_app_12_sep-2023\gee\ee-muzzamil.json"
+#     credentials = ee.ServiceAccountCredentials(service, file)
+#     ee.Initialize(credentials)
+    
+
+# Function to refresh GEE token
+# def refresh_gee_token():
+#     if not ee.data.getAssetRoots():
+#         initialize_gee()
+from google.auth.transport.requests import Request
+
+
+
+
+def inv():
+    service = os.getenv('SA')
+    file = os.path.join(os.path.dirname(os.path.abspath(__file__)),'gee','ee-muzzamil1-37ebc3dece52.json')
+    print(file)
+    credentials = ee.ServiceAccountCredentials(service, file)
+    try:
+        ee.Initialize(credentials)
+    except google.auth.exceptions.RefreshError as e:
+        # If the token has expired, refresh it
+        request = Request()
+        credentials.refresh(request)
+        ee.Initialize(credentials)
+
+
+
+if __name__ == "__main__":
+    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "djangoGEE.settings")
+    # initialize_gee()
+    # refresh_gee_token()
+    inv()
+    
+    try:
+        from django.core.management import execute_from_command_line
+    except ImportError as exc:
+        raise ImportError(
+            "Couldn't import Django. Are you sure it's installed and "
+            "available on your PYTHONPATH environment variable? Did you "
+            "forget to activate a virtual environment?"
+        ) from exc
+
+    # Add a call to refresh_gee_token() before executing Django commands
+    # refresh_gee_token()
+
+    execute_from_command_line(sys.argv)
diff --git a/y/media/.DS_Store b/y/media/.DS_Store
new file mode 100644
index 0000000000000000000000000000000000000000..1704d0970daa4f476f058d4a624a7d895f64c3fd
Binary files /dev/null and b/y/media/.DS_Store differ
diff --git a/y/media/shp/District_Boundary.cpg b/y/media/shp/District_Boundary.cpg
new file mode 100644
index 0000000000000000000000000000000000000000..3ad133c048f2189041151425a73485649e6c32c0
--- /dev/null
+++ b/y/media/shp/District_Boundary.cpg
@@ -0,0 +1 @@
+UTF-8
\ No newline at end of file
diff --git a/y/media/shp/District_Boundary.dbf b/y/media/shp/District_Boundary.dbf
new file mode 100644
index 0000000000000000000000000000000000000000..1b02cb13f511d5837b68217fa185dec46f0396cf
Binary files /dev/null and b/y/media/shp/District_Boundary.dbf differ
diff --git a/y/media/shp/District_Boundary.prj b/y/media/shp/District_Boundary.prj
new file mode 100644
index 0000000000000000000000000000000000000000..8958e93fbd3405f4913d25296503cc22b0092706
--- /dev/null
+++ b/y/media/shp/District_Boundary.prj
@@ -0,0 +1 @@
+GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],VERTCS["WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PARAMETER["Vertical_Shift",0.0],PARAMETER["Direction",1.0],UNIT["Meter",1.0]]
\ No newline at end of file
diff --git a/y/media/shp/District_Boundary.sbn b/y/media/shp/District_Boundary.sbn
new file mode 100644
index 0000000000000000000000000000000000000000..c7a45cc7f74e243c8ea943a264fbbb4dd483152e
Binary files /dev/null and b/y/media/shp/District_Boundary.sbn differ
diff --git a/y/media/shp/District_Boundary.sbx b/y/media/shp/District_Boundary.sbx
new file mode 100644
index 0000000000000000000000000000000000000000..4ffd1ea8b1caf25d90742dddcb9ec0d7bf04dc11
Binary files /dev/null and b/y/media/shp/District_Boundary.sbx differ
diff --git a/y/media/shp/District_Boundary.shp b/y/media/shp/District_Boundary.shp
new file mode 100644
index 0000000000000000000000000000000000000000..4604cd869a803d2c5f7f95d75ab4f22902df2337
--- /dev/null
+++ b/y/media/shp/District_Boundary.shp
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:2f36c0ccf9905e27bf12abe869867c2b44faff0dd3cbccb45e83d25195241f9f
+size 1876924
diff --git a/y/media/shp/District_Boundary.shp.xml b/y/media/shp/District_Boundary.shp.xml
new file mode 100644
index 0000000000000000000000000000000000000000..662d40629cbf68a3cb392e21d8a61066e0f1dce5
--- /dev/null
+++ b/y/media/shp/District_Boundary.shp.xml
@@ -0,0 +1 @@
+20150325161455001.0FGDC CSDGM MetadataFALSECalculateField Administrative_Boundaries URDU [URDU_1] VB #CalculateField Administrative_Boundaries DISTRICT "NOWSHERA" VB #CalculateField District_Boundary 2010_DIST "" VB #CalculateField District_Boundary 2011_DIST "" VB #CalculateField District_Boundary 2012_DIST "" VB #CalculateField District_Boundary 2013_DIST "" VB #CalculateField District_Boundary 2014_DIST "" VB #CalculateField District_Boundary 2014_DIST "" VB #FeatureClassToFeatureClass "C:\Users\Muneeb\Desktop\Final UC\UNION COUNCIL\District_Boundary.shp" "C:\Users\Muneeb\Desktop\Final UC\GEO DATA ADMINBDY\ADMINBDY.gdb\DATA" District_Boundary # "OBJECTID "OBJECTID" true true false 9 Long 0 9 ,First,#,C:\Users\Muneeb\Desktop\Final UC\UNION COUNCIL\District_Boundary.shp,OBJECTID,-1,-1;PROVINCE "PROVINCE" true true false 30 Text 0 0 ,First,#,C:\Users\Muneeb\Desktop\Final UC\UNION COUNCIL\District_Boundary.shp,PROVINCE,-1,-1;DISTRICT "DISTRICT" true true false 30 Text 0 0 ,First,#,C:\Users\Muneeb\Desktop\Final UC\UNION COUNCIL\District_Boundary.shp,DISTRICT,-1,-1;Shape_Leng "Shape_Leng" true true false 19 Double 0 0 ,First,#,C:\Users\Muneeb\Desktop\Final UC\UNION COUNCIL\District_Boundary.shp,Shape_Leng,-1,-1;Shape_Area "Shape_Area" true true false 19 Double 0 0 ,First,#,C:\Users\Muneeb\Desktop\Final UC\UNION COUNCIL\District_Boundary.shp,Shape_Area,-1,-1;Area "Area" true true false 50 Text 0 0 ,First,#,C:\Users\Muneeb\Desktop\Final UC\UNION COUNCIL\District_Boundary.shp,Area,-1,-1;Area_42N_U "Area_42N_U" true true false 19 Double 0 0 ,First,#,C:\Users\Muneeb\Desktop\Final UC\UNION COUNCIL\District_Boundary.shp,Area_42N_U,-1,-1;URDU "URDU" true true false 254 Text 0 0 ,First,#,C:\Users\Muneeb\Desktop\Final UC\UNION COUNCIL\District_Boundary.shp,URDU,-1,-1;2010_DIST "2010_DIST" true true false 10 Text 0 0 ,First,#,C:\Users\Muneeb\Desktop\Final UC\UNION COUNCIL\District_Boundary.shp,2010_DIST,-1,-1;2011_DIST "2011_DIST" true true false 10 Text 0 0 ,First,#,C:\Users\Muneeb\Desktop\Final UC\UNION COUNCIL\District_Boundary.shp,2011_DIST,-1,-1;2012_DIST "2012_DIST" true true false 10 Text 0 0 ,First,#,C:\Users\Muneeb\Desktop\Final UC\UNION COUNCIL\District_Boundary.shp,2012_DIST,-1,-1;2013_DIST "2013_DIST" true true false 10 Text 0 0 ,First,#,C:\Users\Muneeb\Desktop\Final UC\UNION COUNCIL\District_Boundary.shp,2013_DIST,-1,-1;2014_DIST "2014_DIST" true true false 10 Text 0 0 ,First,#,C:\Users\Muneeb\Desktop\Final UC\UNION COUNCIL\District_Boundary.shp,2014_DIST,-1,-1" #CalculateField Adminbdy\District_Boundary PROVINCE "INDIAN OCCUPIED KASHMIR" VB #CalculateField Adminbdy\District_Boundary DISTRICT "INDIAN OCCUPIED KASHMIR" VB #CalculateField District_Boundary DISTRICT "HATTIAN BALA" VB #CalculateField District_Boundary F_2010 [_DIST] VB #CalculateField District_Boundary F_2011 [_DIST_1] VB #CalculateField District_Boundary F_2012 [_DIST_12] VB #CalculateField District_Boundary F_2013 [_DIST_12_13] VB #CalculateField District_Boundary F_2014 [_DIST_12_13_14] VB #CalculateField District_Boundary ADMIN_UNIT "CANTONMENT" VB #CalculateField District_Boundary ADMIN_UNIT "AGENCY" VB #CalculateField District_Boundary ADMIN_UNIT "FEDERAL CAPITAL TERRITORY" VB #CalculateField District_Boundary ADMIN_UNIT "INDIAN OCCUPIED KASHMIR" VB #CalculateField District_Boundary ADMIN_UNIT "DISTRICT" VB #FeatureClassToFeatureClass "C:\Users\Muneeb\Desktop\Final UC\GEO DATA ADMINBDY\ADMINBDY.gdb\DATA\District_Boundary" "D:\BACKUP FILES\ALL ALHASAN GEO DATABASE\GEO DATA\Data.gdb\Adminbdy" District_Boundary_2015 # "OBJECTID "OBJECTID" true true false 4 Long 0 0 ,First,#,C:\Users\Muneeb\Desktop\Final UC\GEO DATA ADMINBDY\ADMINBDY.gdb\DATA\District_Boundary,OBJECTID,-1,-1;PROVINCE "PROVINCE" true true false 30 Text 0 0 ,First,#,C:\Users\Muneeb\Desktop\Final UC\GEO DATA ADMINBDY\ADMINBDY.gdb\DATA\District_Boundary,PROVINCE,-1,-1;DISTRICT "DISTRICT" true true false 30 Text 0 0 ,First,#,C:\Users\Muneeb\Desktop\Final UC\GEO DATA ADMINBDY\ADMINBDY.gdb\DATA\District_Boundary,DISTRICT,-1,-1;Shape_Leng "Shape_Leng" true true false 8 Double 0 0 ,First,#,C:\Users\Muneeb\Desktop\Final UC\GEO DATA ADMINBDY\ADMINBDY.gdb\DATA\District_Boundary,Shape_Leng,-1,-1;Area "Area" true true false 50 Text 0 0 ,First,#,C:\Users\Muneeb\Desktop\Final UC\GEO DATA ADMINBDY\ADMINBDY.gdb\DATA\District_Boundary,Area,-1,-1;Area_42N_U "Area_42N_U" true true false 8 Double 0 0 ,First,#,C:\Users\Muneeb\Desktop\Final UC\GEO DATA ADMINBDY\ADMINBDY.gdb\DATA\District_Boundary,Area_42N_U,-1,-1;URDU "URDU" true true false 254 Text 0 0 ,First,#,C:\Users\Muneeb\Desktop\Final UC\GEO DATA ADMINBDY\ADMINBDY.gdb\DATA\District_Boundary,URDU,-1,-1;Shape_Length "Shape_Length" false true true 8 Double 0 0 ,First,#,C:\Users\Muneeb\Desktop\Final UC\GEO DATA ADMINBDY\ADMINBDY.gdb\DATA\District_Boundary,Shape_Length,-1,-1;Shape_Area "Shape_Area" false true true 8 Double 0 0 ,First,#,C:\Users\Muneeb\Desktop\Final UC\GEO DATA ADMINBDY\ADMINBDY.gdb\DATA\District_Boundary,Shape_Area,-1,-1;PBS_AR_SQ_KM "PBS_AR_SQ_KM" true true false 8 Double 0 0 ,First,#,C:\Users\Muneeb\Desktop\Final UC\GEO DATA ADMINBDY\ADMINBDY.gdb\DATA\District_Boundary,PBS_AR_SQ_KM,-1,-1;F_2010 "F_2010" true true false 50 Text 0 0 ,First,#,C:\Users\Muneeb\Desktop\Final UC\GEO DATA ADMINBDY\ADMINBDY.gdb\DATA\District_Boundary,F_2010,-1,-1;F_2011 "F_2011" true true false 50 Text 0 0 ,First,#,C:\Users\Muneeb\Desktop\Final UC\GEO DATA ADMINBDY\ADMINBDY.gdb\DATA\District_Boundary,F_2011,-1,-1;F_2012 "F_2012" true true false 50 Text 0 0 ,First,#,C:\Users\Muneeb\Desktop\Final UC\GEO DATA ADMINBDY\ADMINBDY.gdb\DATA\District_Boundary,F_2012,-1,-1;F_2013 "F_2013" true true false 50 Text 0 0 ,First,#,C:\Users\Muneeb\Desktop\Final UC\GEO DATA ADMINBDY\ADMINBDY.gdb\DATA\District_Boundary,F_2013,-1,-1;F_2014 "F_2014" true true false 50 Text 0 0 ,First,#,C:\Users\Muneeb\Desktop\Final UC\GEO DATA ADMINBDY\ADMINBDY.gdb\DATA\District_Boundary,F_2014,-1,-1;R_2010 "R_2010" true true false 50 Text 0 0 ,First,#,C:\Users\Muneeb\Desktop\Final UC\GEO DATA ADMINBDY\ADMINBDY.gdb\DATA\District_Boundary,R_2010,-1,-1;R_2011 "R_2011" true true false 50 Text 0 0 ,First,#,C:\Users\Muneeb\Desktop\Final UC\GEO DATA ADMINBDY\ADMINBDY.gdb\DATA\District_Boundary,R_2011,-1,-1;R_2012 "R_2012" true true false 50 Text 0 0 ,First,#,C:\Users\Muneeb\Desktop\Final UC\GEO DATA ADMINBDY\ADMINBDY.gdb\DATA\District_Boundary,R_2012,-1,-1;R_2013 "R_2013" true true false 50 Text 0 0 ,First,#,C:\Users\Muneeb\Desktop\Final UC\GEO DATA ADMINBDY\ADMINBDY.gdb\DATA\District_Boundary,R_2013,-1,-1;R_2014 "R_2014" true true false 50 Text 0 0 ,First,#,C:\Users\Muneeb\Desktop\Final UC\GEO DATA ADMINBDY\ADMINBDY.gdb\DATA\District_Boundary,R_2014,-1,-1;ADMIN_UNIT "ADMIN_UNIT" true true false 254 Text 0 0 ,First,#,C:\Users\Muneeb\Desktop\Final UC\GEO DATA ADMINBDY\ADMINBDY.gdb\DATA\District_Boundary,ADMIN_UNIT,-1,-1" #CopyFeatures "D:\BACKUP FILES\ALL ALHASAN GEO DATABASE\GEO DATA\Data.gdb\Adminbdy\District_Boundary_2015" "D:\BACKUP FILES\ALL ALHASAN GEO DATABASE\GEO DATA\Shapefile\District_Boundary_2015.shp" # 0 0 0DeleteField District_Boundary_2015 Area;Area_42N_U;URDU;PBS_AR_SQ_;F_2010;F_2011;F_2012;F_2013;F_2014;R_2010;R_2011;R_2012;R_2013;R_2014FeatureClassToFeatureClass "D:\BACKUP FILES\ALL ALHASAN GEO DATABASE\GEO DATA\Shapefile\District_Boundary_2015.shp" "D:\ALHASAN PUBLIC DATABASE\Geodatabase.gdb\Pakistan_Geodatabase_Alhasan_Systems" District_Boundaryy # "OBJECTID "OBJECTID" true true false 9 Long 0 9 ,First,#,D:\BACKUP FILES\ALL ALHASAN GEO DATABASE\GEO DATA\Shapefile\District_Boundary_2015.shp,OBJECTID,-1,-1;PROVINCE "PROVINCE" true true false 30 Text 0 0 ,First,#,D:\BACKUP FILES\ALL ALHASAN GEO DATABASE\GEO DATA\Shapefile\District_Boundary_2015.shp,PROVINCE,-1,-1;DISTRICT "DISTRICT" true true false 30 Text 0 0 ,First,#,D:\BACKUP FILES\ALL ALHASAN GEO DATABASE\GEO DATA\Shapefile\District_Boundary_2015.shp,DISTRICT,-1,-1;Shape_Leng "Shape_Leng" true true false 19 Double 0 0 ,First,#,D:\BACKUP FILES\ALL ALHASAN GEO DATABASE\GEO DATA\Shapefile\District_Boundary_2015.shp,Shape_Leng,-1,-1;ADMIN_UNIT "ADMIN_UNIT" true true false 254 Text 0 0 ,First,#,D:\BACKUP FILES\ALL ALHASAN GEO DATABASE\GEO DATA\Shapefile\District_Boundary_2015.shp,ADMIN_UNIT,-1,-1;Shape_Le_1 "Shape_Le_1" true true false 19 Double 0 0 ,First,#,D:\BACKUP FILES\ALL ALHASAN GEO DATABASE\GEO DATA\Shapefile\District_Boundary_2015.shp,Shape_Le_1,-1,-1;Shape_Area "Shape_Area" true true false 19 Double 0 0 ,First,#,D:\BACKUP FILES\ALL ALHASAN GEO DATABASE\GEO DATA\Shapefile\District_Boundary_2015.shp,Shape_Area,-1,-1" #CopyFeatures "D:\ALHASAN PUBLIC DATABASE\Pakistan_Geodatabase_Alhasan_Systems.gdb\Pakistan_Geodatabase_Alhasan_Systems\District_Boundary" "D:\ALHASAN PUBLIC DATABASE\Adminbdy Shapefile\District_Boundary.shp" # 0 0 0District_Boundary002file://\\MUNEEB-PC\D$\ALHASAN PUBLIC DATABASE\Adminbdy Shapefile\District_Boundary.shpLocal Area Network0.000GeographicGCS_WGS_1984Angular Unit: Degree (0.017453)<GeographicCoordinateSystem xsi:type='typens:GeographicCoordinateSystem' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xs='http://www.w3.org/2001/XMLSchema' xmlns:typens='http://www.esri.com/schemas/ArcGIS/10.1'><WKT>GEOGCS[&quot;GCS_WGS_1984&quot;,DATUM[&quot;D_WGS_1984&quot;,SPHEROID[&quot;WGS_1984&quot;,6378137.0,298.257223563]],PRIMEM[&quot;Greenwich&quot;,0.0],UNIT[&quot;Degree&quot;,0.0174532925199433],AUTHORITY[&quot;EPSG&quot;,4326]],VERTCS[&quot;WGS_1984&quot;,DATUM[&quot;D_WGS_1984&quot;,SPHEROID[&quot;WGS_1984&quot;,6378137.0,298.257223563]],PARAMETER[&quot;Vertical_Shift&quot;,0.0],PARAMETER[&quot;Direction&quot;,1.0],UNIT[&quot;Meter&quot;,1.0],AUTHORITY[&quot;ESRI&quot;,115700]]</WKT><XOrigin>-400</XOrigin><YOrigin>-400</YOrigin><XYScale>11258999068426.238</XYScale><ZOrigin>-100000</ZOrigin><ZScale>10000</ZScale><MOrigin>-100000</MOrigin><MScale>10000</MScale><XYTolerance>8.983152841195215e-009</XYTolerance><ZTolerance>0.001</ZTolerance><MTolerance>0.001</MTolerance><HighPrecision>true</HighPrecision><LeftLongitude>-180</LeftLongitude><WKID>4326</WKID><LatestWKID>4326</LatestWKID><VCSWKID>115700</VCSWKID><LatestVCSWKID>115700</LatestVCSWKID></GeographicCoordinateSystem>20170813135803002017081313580300Microsoft Windows 7 Version 6.1 (Build 7601) Service Pack 1; Esri ArcGIS 10.1.0.3035District_BoundaryShapefile0.000datasetEPSG7.9.40SimpleFALSE0FALSEFALSEDistrict_BoundaryFeature Class0FIDFIDOID400Internal feature number.EsriSequential unique whole numbers that are automatically generated.ShapeShapeGeometry000Feature geometry.EsriCoordinates defining the features.OBJECTIDOBJECTIDInteger990PROVINCEPROVINCEString3000DISTRICTDISTRICTString3000Shape_LengShape_LengDouble1900ADMIN_UNITADMIN_UNITString25400Shape_Le_1Shape_Le_1Double1900Shape_Le_2Shape_Le_2Double1900Shape_AreaShape_AreaDouble1900Area of feature in internal units squared.EsriPositive real numbers that are automatically generated.20170813
diff --git a/y/media/shp/District_Boundary.shx b/y/media/shp/District_Boundary.shx
new file mode 100644
index 0000000000000000000000000000000000000000..9d7e937317c901d3ffe1018c80271f3006e8f867
Binary files /dev/null and b/y/media/shp/District_Boundary.shx differ
diff --git a/y/media/shp/Kenya_All_towns.doc b/y/media/shp/Kenya_All_towns.doc
new file mode 100644
index 0000000000000000000000000000000000000000..8c074b620b4c5b0511833be9c8b33563977125e6
Binary files /dev/null and b/y/media/shp/Kenya_All_towns.doc differ
diff --git a/y/media/shp/Kenya_Highland roads.doc b/y/media/shp/Kenya_Highland roads.doc
new file mode 100644
index 0000000000000000000000000000000000000000..700ba25384cbecd2b7b7e10bd3363ca55b165728
Binary files /dev/null and b/y/media/shp/Kenya_Highland roads.doc differ
diff --git a/y/media/shp/Kenya_county_dd.dbf b/y/media/shp/Kenya_county_dd.dbf
new file mode 100644
index 0000000000000000000000000000000000000000..fdc2d6d26ee9b04360b4bd69726ce6f70812e4b1
Binary files /dev/null and b/y/media/shp/Kenya_county_dd.dbf differ
diff --git a/y/media/shp/Kenya_county_dd.prj b/y/media/shp/Kenya_county_dd.prj
new file mode 100644
index 0000000000000000000000000000000000000000..f45cbadf0074d8b7b2669559a93bc50bb95f82d4
--- /dev/null
+++ b/y/media/shp/Kenya_county_dd.prj
@@ -0,0 +1 @@
+GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]]
\ No newline at end of file
diff --git a/y/media/shp/Kenya_county_dd.sbn b/y/media/shp/Kenya_county_dd.sbn
new file mode 100644
index 0000000000000000000000000000000000000000..6ac0a904f964ae24256f1f0ccfc1aa7c8600bb47
Binary files /dev/null and b/y/media/shp/Kenya_county_dd.sbn differ
diff --git a/y/media/shp/Kenya_county_dd.sbx b/y/media/shp/Kenya_county_dd.sbx
new file mode 100644
index 0000000000000000000000000000000000000000..0ff1911f727bc650bc25a5a1a8d58480b64cd205
Binary files /dev/null and b/y/media/shp/Kenya_county_dd.sbx differ
diff --git a/y/media/shp/Kenya_county_dd.shx b/y/media/shp/Kenya_county_dd.shx
new file mode 100644
index 0000000000000000000000000000000000000000..d58effe6f1d9c98feab09f1fbb142effe81750ef
Binary files /dev/null and b/y/media/shp/Kenya_county_dd.shx differ
diff --git a/y/media/shp/Kenya_forest_ranges.doc b/y/media/shp/Kenya_forest_ranges.doc
new file mode 100644
index 0000000000000000000000000000000000000000..99c1d92e25d76c89285c4a877e9a08c977256a30
Binary files /dev/null and b/y/media/shp/Kenya_forest_ranges.doc differ
diff --git a/y/media/shp/Kenya_forestranges.prj b/y/media/shp/Kenya_forestranges.prj
new file mode 100644
index 0000000000000000000000000000000000000000..f45cbadf0074d8b7b2669559a93bc50bb95f82d4
--- /dev/null
+++ b/y/media/shp/Kenya_forestranges.prj
@@ -0,0 +1 @@
+GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]]
\ No newline at end of file
diff --git a/y/media/shp/Kenya_healthfacilities.doc b/y/media/shp/Kenya_healthfacilities.doc
new file mode 100644
index 0000000000000000000000000000000000000000..e5092cd3e65deff863a8c8c1cd8746df261fc9cf
Binary files /dev/null and b/y/media/shp/Kenya_healthfacilities.doc differ
diff --git a/y/media/shp/Kenya_wetlands.doc b/y/media/shp/Kenya_wetlands.doc
new file mode 100644
index 0000000000000000000000000000000000000000..14239a4948ad8e068115c618d5a73db1311d3b39
Binary files /dev/null and b/y/media/shp/Kenya_wetlands.doc differ
diff --git a/y/media/shp/National_Constituency_with_Projected_2010_Population.cpg b/y/media/shp/National_Constituency_with_Projected_2010_Population.cpg
new file mode 100644
index 0000000000000000000000000000000000000000..3ad133c048f2189041151425a73485649e6c32c0
--- /dev/null
+++ b/y/media/shp/National_Constituency_with_Projected_2010_Population.cpg
@@ -0,0 +1 @@
+UTF-8
\ No newline at end of file
diff --git a/y/media/shp/National_Constituency_with_Projected_2010_Population.dbf b/y/media/shp/National_Constituency_with_Projected_2010_Population.dbf
new file mode 100644
index 0000000000000000000000000000000000000000..74ed13087c21d7af66b5d9ea790f673aa19bb14f
Binary files /dev/null and b/y/media/shp/National_Constituency_with_Projected_2010_Population.dbf differ
diff --git a/y/media/shp/National_Constituency_with_Projected_2010_Population.prj b/y/media/shp/National_Constituency_with_Projected_2010_Population.prj
new file mode 100644
index 0000000000000000000000000000000000000000..8958e93fbd3405f4913d25296503cc22b0092706
--- /dev/null
+++ b/y/media/shp/National_Constituency_with_Projected_2010_Population.prj
@@ -0,0 +1 @@
+GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],VERTCS["WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PARAMETER["Vertical_Shift",0.0],PARAMETER["Direction",1.0],UNIT["Meter",1.0]]
\ No newline at end of file
diff --git a/y/media/shp/National_Constituency_with_Projected_2010_Population.sbn b/y/media/shp/National_Constituency_with_Projected_2010_Population.sbn
new file mode 100644
index 0000000000000000000000000000000000000000..5fec0470655a36423d143ab13324a41b1b78f216
Binary files /dev/null and b/y/media/shp/National_Constituency_with_Projected_2010_Population.sbn differ
diff --git a/y/media/shp/National_Constituency_with_Projected_2010_Population.sbx b/y/media/shp/National_Constituency_with_Projected_2010_Population.sbx
new file mode 100644
index 0000000000000000000000000000000000000000..c7f4494e234f993f8f5d336ccd74e067b165382d
Binary files /dev/null and b/y/media/shp/National_Constituency_with_Projected_2010_Population.sbx differ
diff --git a/y/media/shp/National_Constituency_with_Projected_2010_Population.shp b/y/media/shp/National_Constituency_with_Projected_2010_Population.shp
new file mode 100644
index 0000000000000000000000000000000000000000..c113dff78c7ca436ad666e344cf62ee9805924d5
--- /dev/null
+++ b/y/media/shp/National_Constituency_with_Projected_2010_Population.shp
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:b2e619618831b33fdbe96a82ac91014c9b4e604e51be26b3d2f9077a97621afd
+size 1554208
diff --git a/y/media/shp/National_Constituency_with_Projected_2010_Population.shp.xml b/y/media/shp/National_Constituency_with_Projected_2010_Population.shp.xml
new file mode 100644
index 0000000000000000000000000000000000000000..741c81580706fb59a550400957ddd4d1baeeab98
--- /dev/null
+++ b/y/media/shp/National_Constituency_with_Projected_2010_Population.shp.xml
@@ -0,0 +1 @@
+20130504203109001.0ISO 19139 Metadata Implementation SpecificationFALSECalculateField National_Constituency_with_Projected_2010_Population Pop_2010_E [SUM] VB #CalculateField National_Constituency_with_Projected_2010_Population Pop_2010_E [SUM] VB #CalculateField National_Constituency_with_Projected_2010_Population NA_Cons LTrim( [NA_Cons] ) VB #CalculateField National_Constituency_with_Projected_2010_Population District LTrim( [District] ) VB #CalculateField National_Constituency_with_Projected_2010_Population Emp_Name "Hassan Ali" VB #CalculateField National_Constituency_with_Projected_2010_Population District "Mohmand Agency" VB #CalculateField National_Constituency_with_Projected_2010_Population District "NANKANA SAHIB" VB #CalculateField National_Constituency_with_Projected_2010_Population District Bahawalnagar VB #CalculateField National_Constituency_with_Projected_2010_Population District "Bahawalnagar" VB #FeatureClassToFeatureClass "C:\Users\Muneeb\Desktop\Final UC\UNION COUNCIL\National_Constituency_with_Projected_2010_Population.shp" "C:\Users\Muneeb\Desktop\Final UC\GEO DATA ADMINBDY\ADMINBDY.gdb\DATA" National_Constituency_with_Projected_2010_Population # "Id "Id" true true false 6 Long 0 6 ,First,#,C:\Users\Muneeb\Desktop\Final UC\UNION COUNCIL\National_Constituency_with_Projected_2010_Population.shp,Id,-1,-1;NA_Cons "NA_Cons" true true false 50 Text 0 0 ,First,#,C:\Users\Muneeb\Desktop\Final UC\UNION COUNCIL\National_Constituency_with_Projected_2010_Population.shp,NA_Cons,-1,-1;WON "WON" true true false 50 Text 0 0 ,First,#,C:\Users\Muneeb\Desktop\Final UC\UNION COUNCIL\National_Constituency_with_Projected_2010_Population.shp,WON,-1,-1;District "District" true true false 50 Text 0 0 ,First,#,C:\Users\Muneeb\Desktop\Final UC\UNION COUNCIL\National_Constituency_with_Projected_2010_Population.shp,District,-1,-1;Preovence "Preovence" true true false 50 Text 0 0 ,First,#,C:\Users\Muneeb\Desktop\Final UC\UNION COUNCIL\National_Constituency_with_Projected_2010_Population.shp,Preovence,-1,-1;AREA "AREA" true true false 13 Float 0 0 ,First,#,C:\Users\Muneeb\Desktop\Final UC\UNION COUNCIL\National_Constituency_with_Projected_2010_Population.shp,AREA,-1,-1;Pop_2010_E "Pop_2010_E" true true false 13 Float 0 0 ,First,#,C:\Users\Muneeb\Desktop\Final UC\UNION COUNCIL\National_Constituency_with_Projected_2010_Population.shp,Pop_2010_E,-1,-1;Emp_Name "Emp_Name" true true false 50 Text 0 0 ,First,#,C:\Users\Muneeb\Desktop\Final UC\UNION COUNCIL\National_Constituency_with_Projected_2010_Population.shp,Emp_Name,-1,-1" #CalculateField National_Constituency_with_Projected_2010_Population District "JAMSHORO" VB #FeatureClassToFeatureClass "C:\Users\Muneeb\Desktop\Final UC\GEO DATA ADMINBDY\ADMINBDY.gdb\DATA\National_Constituency_with_Projected_2010_Population" "D:\BACKUP FILES\ALL ALHASAN GEO DATABASE\GEO DATA\Data.gdb\Adminbdy" National_Constituency_with_Projected_2010_Population_Update # "Id "Id" true true false 4 Long 0 0 ,First,#,C:\Users\Muneeb\Desktop\Final UC\GEO DATA ADMINBDY\ADMINBDY.gdb\DATA\National_Constituency_with_Projected_2010_Population,Id,-1,-1;NA_Cons "NA_Cons" true true false 50 Text 0 0 ,First,#,C:\Users\Muneeb\Desktop\Final UC\GEO DATA ADMINBDY\ADMINBDY.gdb\DATA\National_Constituency_with_Projected_2010_Population,NA_Cons,-1,-1;WON "WON" true true false 50 Text 0 0 ,First,#,C:\Users\Muneeb\Desktop\Final UC\GEO DATA ADMINBDY\ADMINBDY.gdb\DATA\National_Constituency_with_Projected_2010_Population,WON,-1,-1;District "District" true true false 50 Text 0 0 ,First,#,C:\Users\Muneeb\Desktop\Final UC\GEO DATA ADMINBDY\ADMINBDY.gdb\DATA\National_Constituency_with_Projected_2010_Population,District,-1,-1;Preovence "Preovence" true true false 50 Text 0 0 ,First,#,C:\Users\Muneeb\Desktop\Final UC\GEO DATA ADMINBDY\ADMINBDY.gdb\DATA\National_Constituency_with_Projected_2010_Population,Preovence,-1,-1;AREA "AREA" true true false 4 Float 0 0 ,First,#,C:\Users\Muneeb\Desktop\Final UC\GEO DATA ADMINBDY\ADMINBDY.gdb\DATA\National_Constituency_with_Projected_2010_Population,AREA,-1,-1;Pop_2010_E "Pop_2010_E" true true false 4 Float 0 0 ,First,#,C:\Users\Muneeb\Desktop\Final UC\GEO DATA ADMINBDY\ADMINBDY.gdb\DATA\National_Constituency_with_Projected_2010_Population,Pop_2010_E,-1,-1;Emp_Name "Emp_Name" true true false 50 Text 0 0 ,First,#,C:\Users\Muneeb\Desktop\Final UC\GEO DATA ADMINBDY\ADMINBDY.gdb\DATA\National_Constituency_with_Projected_2010_Population,Emp_Name,-1,-1;Shape_Length "Shape_Length" false true true 8 Double 0 0 ,First,#,C:\Users\Muneeb\Desktop\Final UC\GEO DATA ADMINBDY\ADMINBDY.gdb\DATA\National_Constituency_with_Projected_2010_Population,Shape_Length,-1,-1;Shape_Area "Shape_Area" false true true 8 Double 0 0 ,First,#,C:\Users\Muneeb\Desktop\Final UC\GEO DATA ADMINBDY\ADMINBDY.gdb\DATA\National_Constituency_with_Projected_2010_Population,Shape_Area,-1,-1" #FeatureClassToFeatureClass "D:\BACKUP FILES\ALL ALHASAN GEO DATABASE\GEO DATA\Data.gdb\Adminbdy\National_Constituency_with_Projected_2010_Population_Update" "D:\ALHASAN PUBLIC DATABASE\Geodatabase.gdb\Pakistan_Alhasan_Systems" National_Constituency_with_Projected_2010_Population # "Id "Id" true true false 4 Long 0 0 ,First,#,D:\BACKUP FILES\ALL ALHASAN GEO DATABASE\GEO DATA\Data.gdb\Adminbdy\National_Constituency_with_Projected_2010_Population_Update,Id,-1,-1;NA_Cons "NA_Cons" true true false 50 Text 0 0 ,First,#,D:\BACKUP FILES\ALL ALHASAN GEO DATABASE\GEO DATA\Data.gdb\Adminbdy\National_Constituency_with_Projected_2010_Population_Update,NA_Cons,-1,-1;WON "WON" true true false 50 Text 0 0 ,First,#,D:\BACKUP FILES\ALL ALHASAN GEO DATABASE\GEO DATA\Data.gdb\Adminbdy\National_Constituency_with_Projected_2010_Population_Update,WON,-1,-1;District "District" true true false 50 Text 0 0 ,First,#,D:\BACKUP FILES\ALL ALHASAN GEO DATABASE\GEO DATA\Data.gdb\Adminbdy\National_Constituency_with_Projected_2010_Population_Update,District,-1,-1;Preovence "Preovence" true true false 50 Text 0 0 ,First,#,D:\BACKUP FILES\ALL ALHASAN GEO DATABASE\GEO DATA\Data.gdb\Adminbdy\National_Constituency_with_Projected_2010_Population_Update,Preovence,-1,-1;AREA "AREA" true true false 4 Float 0 0 ,First,#,D:\BACKUP FILES\ALL ALHASAN GEO DATABASE\GEO DATA\Data.gdb\Adminbdy\National_Constituency_with_Projected_2010_Population_Update,AREA,-1,-1;Pop_2010_E "Pop_2010_E" true true false 4 Float 0 0 ,First,#,D:\BACKUP FILES\ALL ALHASAN GEO DATABASE\GEO DATA\Data.gdb\Adminbdy\National_Constituency_with_Projected_2010_Population_Update,Pop_2010_E,-1,-1;Emp_Name "Emp_Name" true true false 50 Text 0 0 ,First,#,D:\BACKUP FILES\ALL ALHASAN GEO DATABASE\GEO DATA\Data.gdb\Adminbdy\National_Constituency_with_Projected_2010_Population_Update,Emp_Name,-1,-1;Shape_Length "Shape_Length" false true true 8 Double 0 0 ,First,#,D:\BACKUP FILES\ALL ALHASAN GEO DATABASE\GEO DATA\Data.gdb\Adminbdy\National_Constituency_with_Projected_2010_Population_Update,Shape_Length,-1,-1;Shape_Area "Shape_Area" false true true 8 Double 0 0 ,First,#,D:\BACKUP FILES\ALL ALHASAN GEO DATABASE\GEO DATA\Data.gdb\Adminbdy\National_Constituency_with_Projected_2010_Population_Update,Shape_Area,-1,-1" #CopyFeatures "D:\ALHASAN PUBLIC DATABASE\Pakistan_Geodatabase_Alhasan_Systems.gdb\Pakistan_Geodatabase_Alhasan_Systems\National_Constituency_with_Projected_2010_Population" "D:\ALHASAN PUBLIC DATABASE\Adminbdy Shapefile\National_Constituency_with_Projected_2010_Population.shp" # 0 0 0National_Constituency_with_Projected_2010_Population002file://\\MUNEEB-PC\D$\ALHASAN PUBLIC DATABASE\Adminbdy Shapefile\National_Constituency_with_Projected_2010_Population.shpLocal Area Network0.000GeographicGCS_WGS_1984Angular Unit: Degree (0.017453)<GeographicCoordinateSystem xsi:type='typens:GeographicCoordinateSystem' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xs='http://www.w3.org/2001/XMLSchema' xmlns:typens='http://www.esri.com/schemas/ArcGIS/10.1'><WKT>GEOGCS[&quot;GCS_WGS_1984&quot;,DATUM[&quot;D_WGS_1984&quot;,SPHEROID[&quot;WGS_1984&quot;,6378137.0,298.257223563]],PRIMEM[&quot;Greenwich&quot;,0.0],UNIT[&quot;Degree&quot;,0.0174532925199433],AUTHORITY[&quot;EPSG&quot;,4326]],VERTCS[&quot;WGS_1984&quot;,DATUM[&quot;D_WGS_1984&quot;,SPHEROID[&quot;WGS_1984&quot;,6378137.0,298.257223563]],PARAMETER[&quot;Vertical_Shift&quot;,0.0],PARAMETER[&quot;Direction&quot;,1.0],UNIT[&quot;Meter&quot;,1.0],AUTHORITY[&quot;ESRI&quot;,115700]]</WKT><XOrigin>-400</XOrigin><YOrigin>-400</YOrigin><XYScale>11258999068426.238</XYScale><ZOrigin>-100000</ZOrigin><ZScale>10000</ZScale><MOrigin>-100000</MOrigin><MScale>10000</MScale><XYTolerance>8.983152841195215e-009</XYTolerance><ZTolerance>0.001</ZTolerance><MTolerance>0.001</MTolerance><HighPrecision>true</HighPrecision><LeftLongitude>-180</LeftLongitude><WKID>4326</WKID><LatestWKID>4326</LatestWKID><VCSWKID>115700</VCSWKID><LatestVCSWKID>115700</LatestVCSWKID></GeographicCoordinateSystem>20170813135808002017081313580800Microsoft Windows 7 Version 6.1 (Build 7601) Service Pack 1; Esri ArcGIS 10.1.0.3035National_Constituency_with_Projected_2010_PopulationShapefile0.000datasetEPSG7.9.40SimpleFALSE0FALSEFALSENational_Constituency_with_Projected_2010_PopulationFeature Class0FIDFIDOID400Internal feature number.EsriSequential unique whole numbers that are automatically generated.ShapeShapeGeometry000Feature geometry.EsriCoordinates defining the features.IdIdInteger990NA_ConsNA_ConsString5000WONWONString5000DistrictDistrictString5000PreovencePreovenceString5000AREAAREASingle1300Pop_2010_EPop_2010_ESingle1300Emp_NameEmp_NameString5000Shape_LengShape_LengDouble1900Shape_AreaShape_AreaDouble1900Area of feature in internal units squared.EsriPositive real numbers that are automatically generated.20170813
diff --git a/y/media/shp/National_Constituency_with_Projected_2010_Population.shx b/y/media/shp/National_Constituency_with_Projected_2010_Population.shx
new file mode 100644
index 0000000000000000000000000000000000000000..5ec63bc9e190b27fb8a7995565e5a1bfaa22bf66
Binary files /dev/null and b/y/media/shp/National_Constituency_with_Projected_2010_Population.shx differ
diff --git a/y/media/shp/Provincial_Boundary.cpg b/y/media/shp/Provincial_Boundary.cpg
new file mode 100644
index 0000000000000000000000000000000000000000..3ad133c048f2189041151425a73485649e6c32c0
--- /dev/null
+++ b/y/media/shp/Provincial_Boundary.cpg
@@ -0,0 +1 @@
+UTF-8
\ No newline at end of file
diff --git a/y/media/shp/Provincial_Boundary.dbf b/y/media/shp/Provincial_Boundary.dbf
new file mode 100644
index 0000000000000000000000000000000000000000..486763d3eb5d9e0325b59226596aaac68bbebdd3
Binary files /dev/null and b/y/media/shp/Provincial_Boundary.dbf differ
diff --git a/y/media/shp/Provincial_Boundary.prj b/y/media/shp/Provincial_Boundary.prj
new file mode 100644
index 0000000000000000000000000000000000000000..8958e93fbd3405f4913d25296503cc22b0092706
--- /dev/null
+++ b/y/media/shp/Provincial_Boundary.prj
@@ -0,0 +1 @@
+GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],VERTCS["WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PARAMETER["Vertical_Shift",0.0],PARAMETER["Direction",1.0],UNIT["Meter",1.0]]
\ No newline at end of file
diff --git a/y/media/shp/Provincial_Boundary.sbn b/y/media/shp/Provincial_Boundary.sbn
new file mode 100644
index 0000000000000000000000000000000000000000..65dbdc09302b031695761cb776ce4c79b2126ff3
Binary files /dev/null and b/y/media/shp/Provincial_Boundary.sbn differ
diff --git a/y/media/shp/Provincial_Boundary.sbx b/y/media/shp/Provincial_Boundary.sbx
new file mode 100644
index 0000000000000000000000000000000000000000..d9282104294b6c5bb0a984e80834ff9017321595
Binary files /dev/null and b/y/media/shp/Provincial_Boundary.sbx differ
diff --git a/y/media/shp/Provincial_Boundary.shp b/y/media/shp/Provincial_Boundary.shp
new file mode 100644
index 0000000000000000000000000000000000000000..b0f314ee6f856c4cf60f8ddf4704509e8de055ad
Binary files /dev/null and b/y/media/shp/Provincial_Boundary.shp differ
diff --git a/y/media/shp/Provincial_Boundary.shp.xml b/y/media/shp/Provincial_Boundary.shp.xml
new file mode 100644
index 0000000000000000000000000000000000000000..0813c26bb6eeb6cdf4eecfd21042af13ed0e3ca5
--- /dev/null
+++ b/y/media/shp/Provincial_Boundary.shp.xml
@@ -0,0 +1,63 @@
+
+OCHA PAKISTAN24 March 2011Pak_adm1_pco_20110324vector digital dataPakistan Administrative Boundaries (PCO)V 1.2IslamabadOCHA - Pakistanhttp:\\pakresponse.infoPak_adm1_pco_20110324Level 1 (Provinces) of Pakistan (Country wide coverage)Create a country wide administrative boundary dataset based on PCO (Population Census Organisation) data.This dataset fits to GAUL (Global Administrative Unit Layer) level 0 boundaries and holds the PCO (Population Census Organisation) administrative boundaries, level 1en24 March 2011publication dateIn workContinually60.87859779.30735237.08942423.69468360.87859779.30735223.69468337.089424Level 1Pakistan Administrative BoundaryNot for resale, freely available for the Humanitarian Community
+For use by the Humanitarian community.
+GAUL, OCHA and PCO  are credited as the source of the data on any maps produced using this data.
+OCHA PAKISTANOCHA GIS UNITgis.ocha.pk@gmail.comOCHA (Office for Coordination of Humanitarian Affairs), PCO (Population census Organisation), GAUL (Global Administrative Unit Layer).Microsoft Windows 7 ; ESRI ArcCatalog 9.3.1.3000ShapefileVariablepaperGAUL, OCHA, PCO
+Population Census Organistation
+Office for Coordination of Humanitarian Affairs - Pakistan
+Global Administrative Unit Layer (FAO)
+Dataset copied.D:\GIS\Mauza's\PCO_Admin1_2_3_Boundaries\admin 1 2 3 fitted to GAUL 0\Pak_adm3_pco_coded_20110223_GAP_eliminate2011032409225400Dataset copied.2011030117352200Dataset moved.C:\PCO\Pakistan_Boundaries\Pak_adm3_pco_coded_FATA_201112011030118130600Dataset copied.C:\PCO\Pakistan_Boundaries\Edits\Pak_adm3_pco_coded_FATA_20102032011030315480900Dataset copied.C:\PCO\Pakistan_Boundaries\Pak_adm3_pco_coded_FATA_20102032011030409514300Metadata imported.C:\Users\Bernard\AppData\Local\Temp\xml143E.tmp2011032813050400VectorSimpleFALSE0TRUEFALSE0.0000000.000000Decimal degreesD_WGS_1984WGS_19846378137.000000298.257224GCS_WGS_1984Pak_adm1_pco_20110303Feature Class0OBJECTIDOBJECTIDOID400Internal feature number.EsriSequential unique whole numbers that are automatically generated.ShapeFeature geometry.ESRICoordinates defining the features.ShapeGeometry000PROVINCEPROVINCEString3000Area_Sq_KmArea_Sq_KmDouble800Ar_Sq_KMAr_Sq_KMDouble800Ar_SqUtm41Ar_SqUtm41Double800Ar_SqUtm43Ar_SqUtm43Double800Shape_LengthShape_LengthDouble800Length of feature in internal units.EsriPositive real numbers that are automatically generated.Shape_AreaShape_AreaDouble800Area of feature in internal units squared.EsriPositive real numbers that are automatically generated.OCHA PAKISTANGIS UNITgis.ocha.pk@gmail.comDownloadable Data0.3080.2372011030820110307On EditingOCHA PakistanOCHA PAKISTAN GIS UNITGIS UNITREQUIRED: The mailing and/or physical address for the organization or individual.REQUIRED: The city of the address.REQUIRED: The state or province of the address.REQUIRED: The ZIP or other postal code of the address.gis.ocha.pk@gmail.comREQUIRED: The telephone number by which individuals can speak to the organization or individual.FGDC Content Standards for Digital Geospatial MetadataFGDC-STD-001-1998local timehttp://www.esri.com/metadata/esriprof80.htmlESRI Metadata Profileen2021082821212600FALSE201505190949250020150519094925001.0FGDC CSDGM Metadatafile://\\MUNEEB-PC\C$\Users\Muneeb\Desktop\Final UC\GEO DATA ADMINBDY\ADMINBDY.gdbLocal Area NetworkProvincial_Boundary00260.87859779.30735223.69468337.08942410.239GeographicGCS_WGS_1984<GeographicCoordinateSystem xsi:type='typens:GeographicCoordinateSystem' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xs='http://www.w3.org/2001/XMLSchema' xmlns:typens='http://www.esri.com/schemas/ArcGIS/10.1'><WKT>GEOGCS[&quot;GCS_WGS_1984&quot;,DATUM[&quot;D_WGS_1984&quot;,SPHEROID[&quot;WGS_1984&quot;,6378137.0,298.257223563]],PRIMEM[&quot;Greenwich&quot;,0.0],UNIT[&quot;Degree&quot;,0.0174532925199433],AUTHORITY[&quot;EPSG&quot;,4326]],VERTCS[&quot;WGS_1984&quot;,DATUM[&quot;D_WGS_1984&quot;,SPHEROID[&quot;WGS_1984&quot;,6378137.0,298.257223563]],PARAMETER[&quot;Vertical_Shift&quot;,0.0],PARAMETER[&quot;Direction&quot;,1.0],UNIT[&quot;Meter&quot;,1.0],AUTHORITY[&quot;ESRI&quot;,115700]]</WKT><XOrigin>-400</XOrigin><YOrigin>-400</YOrigin><XYScale>999999999.99999988</XYScale><ZOrigin>-100000</ZOrigin><ZScale>10000</ZScale><MOrigin>-100000</MOrigin><MScale>10000</MScale><XYTolerance>8.983152841195215e-009</XYTolerance><ZTolerance>0.001</ZTolerance><MTolerance>0.001</MTolerance><HighPrecision>true</HighPrecision><LeftLongitude>-180</LeftLongitude><WKID>4326</WKID><LatestWKID>4326</LatestWKID><VCSWKID>115700</VCSWKID><LatestVCSWKID>115700</LatestVCSWKID></GeographicCoordinateSystem>Angular Unit: Degree (0.017453)CalculateField Provincial_Boundary PROVINCE UCase( [PROVINCE] ) VB #FeatureClassToFeatureClass Provincial_Boundary "C:\Users\Muneeb\Desktop\Final UC\GEO DATA ADMINBDY\ADMINBDY.gdb\DATA" Provincial_Boundary # "PROVINCE "PROVINCE" true true false 30 Text 0 0 ,First,#,D:\Alhasan Project Detail\Start Project\Pakistan Administrative alignment Project\Deliverd Data Final 3 April 2015\Adminbdy\Provincial_Boundary.shp,PROVINCE,-1,-1;Area_Sq_Km "Area_Sq_Km" true true false 19 Double 0 0 ,First,#,D:\Alhasan Project Detail\Start Project\Pakistan Administrative alignment Project\Deliverd Data Final 3 April 2015\Adminbdy\Provincial_Boundary.shp,Area_Sq_Km,-1,-1;Ar_Sq_KM "Ar_Sq_KM" true true false 19 Double 0 0 ,First,#,D:\Alhasan Project Detail\Start Project\Pakistan Administrative alignment Project\Deliverd Data Final 3 April 2015\Adminbdy\Provincial_Boundary.shp,Ar_Sq_KM,-1,-1;Ar_SqUtm41 "Ar_SqUtm41" true true false 19 Double 0 0 ,First,#,D:\Alhasan Project Detail\Start Project\Pakistan Administrative alignment Project\Deliverd Data Final 3 April 2015\Adminbdy\Provincial_Boundary.shp,Ar_SqUtm41,-1,-1;Ar_SqUtm43 "Ar_SqUtm43" true true false 19 Double 0 0 ,First,#,D:\Alhasan Project Detail\Start Project\Pakistan Administrative alignment Project\Deliverd Data Final 3 April 2015\Adminbdy\Provincial_Boundary.shp,Ar_SqUtm43,-1,-1" #ISO19139Microsoft Windows 7 Version 6.1 (Build 7601) Service Pack 1; Esri ArcGIS 10.1.0.3035Provincial_Boundary20110324M. Imran KhanUNOCHAIMO-GIS (Nat'l)Serena Business Complex, 2nd level, khayaban-e-SuharwardyIslamabad44000khanm@un.orgPakistan+92 51 8354842+92 51 83559818:30-17:30  GMT +560.87859779.30735237.08942423.694683160.87859779.30735237.08942423.6946831002Create a country wide administrative boundary dataset based on PCO (Population Census Organisation) data.<DIV STYLE="text-align:Left;"><DIV><DIV><P><SPAN>Level 1 (Provinces) of Pakistan (Country wide coverage)</SPAN></P></DIV></DIV></DIV>OCHA (Office for Coordination of Humanitarian Affairs), PCO (Population census Organisation), GAUL (Global Administrative Unit Layer).Pakistan Administrative BoundaryFor use of humanitarian organizationsISO 19115 Geographic Information - MetadataDIS_ESRI1.0dataset002file://\\172.18.155.152\information management\admin1_5_pco_20110303\Pak_adm1_pco_20110324.shpLocal Area Network0.237ShapefileFile Geodatabase Feature Class0.239GCS_WGS_1984EPSG7.9.4020150519False0False0FalseFalseFalseFalseFalseFalseFalse/9j/4AAQSkZJRgABAQEAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0a
+HBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIy
+MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCACFAMgDASIA
+AhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQA
+AAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3
+ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWm
+p6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEA
+AwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSEx
+BhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElK
+U1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3
+uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD3+iii
+gAooooAKKKKACiiigAooooAKKKKACiimySLEhdzhR7ZoAdR0qiXuJ/vHyYz2U/P16E9uPTnn2qB7
+eOZ2jWNflYb5G5J4zgHOc4I5rjnjYRdo6lKLNLzovM2eYm/+7uGaikvbaJtrSgnnIUFsY6k46D3N
+VRYWwKny87fu5YnH51YACgAAADgAVi8w7RHyEsVxDMSI5FZhyVB5H4VLVJ4VkdWJcMoIBVyvB69D
+7CpLGYzW2WbcysyFvXBIz9eK6cPiVW0tqJxsWaKKK6SQooooAKKKKACiiigAooooAKKKKACiiigA
+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
+KACiiigAooooAKKKKACiiigAooooAKKKKAP/2Q==
diff --git a/y/media/shp/Provincial_Boundary.shx b/y/media/shp/Provincial_Boundary.shx
new file mode 100644
index 0000000000000000000000000000000000000000..40304f8860ff0f2d661c77887e7cc68a2365997a
Binary files /dev/null and b/y/media/shp/Provincial_Boundary.shx differ
diff --git a/y/media/shp/Provincial_Constituency.cpg b/y/media/shp/Provincial_Constituency.cpg
new file mode 100644
index 0000000000000000000000000000000000000000..3ad133c048f2189041151425a73485649e6c32c0
--- /dev/null
+++ b/y/media/shp/Provincial_Constituency.cpg
@@ -0,0 +1 @@
+UTF-8
\ No newline at end of file
diff --git a/y/media/shp/Provincial_Constituency.dbf b/y/media/shp/Provincial_Constituency.dbf
new file mode 100644
index 0000000000000000000000000000000000000000..d8e7a9695add08608f63bc293545291378214cf4
Binary files /dev/null and b/y/media/shp/Provincial_Constituency.dbf differ
diff --git a/y/media/shp/Provincial_Constituency.prj b/y/media/shp/Provincial_Constituency.prj
new file mode 100644
index 0000000000000000000000000000000000000000..8958e93fbd3405f4913d25296503cc22b0092706
--- /dev/null
+++ b/y/media/shp/Provincial_Constituency.prj
@@ -0,0 +1 @@
+GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],VERTCS["WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PARAMETER["Vertical_Shift",0.0],PARAMETER["Direction",1.0],UNIT["Meter",1.0]]
\ No newline at end of file
diff --git a/y/media/shp/Provincial_Constituency.sbn b/y/media/shp/Provincial_Constituency.sbn
new file mode 100644
index 0000000000000000000000000000000000000000..46c07360fc5612790772f67f78aeb8f98eb2deeb
Binary files /dev/null and b/y/media/shp/Provincial_Constituency.sbn differ
diff --git a/y/media/shp/Provincial_Constituency.sbx b/y/media/shp/Provincial_Constituency.sbx
new file mode 100644
index 0000000000000000000000000000000000000000..b24751b68d2c113d1d9649fbea4cafc671c44f17
Binary files /dev/null and b/y/media/shp/Provincial_Constituency.sbx differ
diff --git a/y/media/shp/Provincial_Constituency.shp b/y/media/shp/Provincial_Constituency.shp
new file mode 100644
index 0000000000000000000000000000000000000000..ca5ce57e33086ca91559dfcde1d0a707037473b7
--- /dev/null
+++ b/y/media/shp/Provincial_Constituency.shp
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:b7308f8ec6e5788efbe078ad486066ea982564ff5de8d6c6d1e43ba92e4b5311
+size 2044848
diff --git a/y/media/shp/Provincial_Constituency.shp.xml b/y/media/shp/Provincial_Constituency.shp.xml
new file mode 100644
index 0000000000000000000000000000000000000000..1a4ff3e40746315df2524d68cae1d6cc08cbd87c
--- /dev/null
+++ b/y/media/shp/Provincial_Constituency.shp.xml
@@ -0,0 +1,1159 @@
+2013050210223600FALSE20170813135814002017081313581400Dissolve PAKISTAN_MAUZAField_Sequence "F:\Arslan Data\Arslan's Work\Pakistan_Mauza.gdb\PAKISTAN_FINAL\PAKISTAN_DISTRICTS" PROVINCE;DISTRICT # MULTI_PART DISSOLVE_LINESFeatureClassToFeatureClass D:\PAKISTAN_FINAL.gdb\PAKISTAN_FINAL\PAKISTAN_DISTRICTS D:\PAKISTAN_MAUZA.gdb\PAKISTAN PAKISTAN_DISTRICT # "PROVINCE 'PROVINCE' true true false 30 Text 0 0 ,First,#,D:\PAKISTAN_FINAL.gdb\PAKISTAN_FINAL\PAKISTAN_DISTRICTS,PROVINCE,-1,-1;DISTRICT 'DISTRICT' true true false 30 Text 0 0 ,First,#,D:\PAKISTAN_FINAL.gdb\PAKISTAN_FINAL\PAKISTAN_DISTRICTS,DISTRICT,-1,-1;SHAPE_Length 'SHAPE_Length' false true true 8 Double 0 0 ,First,#,D:\PAKISTAN_FINAL.gdb\PAKISTAN_FINAL\PAKISTAN_DISTRICTS,SHAPE_Length,-1,-1;SHAPE_Area 'SHAPE_Area' false true true 8 Double 0 0 ,First,#,D:\PAKISTAN_FINAL.gdb\PAKISTAN_FINAL\PAKISTAN_DISTRICTS,SHAPE_Area,-1,-1" # D:\PAKISTAN_MAUZA.gdb\PAKISTAN\PAKISTAN_DISTRICTCopyFeatures "Z:\G I S\TRANSIT.gdb\PAKISTAN_DISTRICT" "C:\PAKISTAN MAUZA\PAKISTAN_MAUZA.gdb\PAKISTAN_FINAL\PAKISTAN_DISTRICT" # 0 0 0FeatureClassToFeatureClass Provincial_constituency "C:\Users\Muneeb\Desktop\Final UC\GEO DATA ADMINBDY\ADMINBDY.gdb\DATA" Provincial_Constituency # "OBJECTID "OBJECTID" true true false 9 Long 0 9 ,First,#,D:\OFFICE DOCUMENTS\Al Hasan Systems Pvt Ltd\Provincial Constituency\Provincial_constituency.shp,OBJECTID,-1,-1;PROVINCE "PROVINCE" true true false 30 Text 0 0 ,First,#,D:\OFFICE DOCUMENTS\Al Hasan Systems Pvt Ltd\Provincial Constituency\Provincial_constituency.shp,PROVINCE,-1,-1;DISTRICT "DISTRICT" true true false 30 Text 0 0 ,First,#,D:\OFFICE DOCUMENTS\Al Hasan Systems Pvt Ltd\Provincial Constituency\Provincial_constituency.shp,DISTRICT,-1,-1;PA "PA" true true false 50 Text 0 0 ,First,#,D:\OFFICE DOCUMENTS\Al Hasan Systems Pvt Ltd\Provincial Constituency\Provincial_constituency.shp,PA,-1,-1" #FeatureClassToFeatureClass "C:\Users\Muneeb\Desktop\Final UC\GEO DATA ADMINBDY\ADMINBDY.gdb\DATA\Provincial_Constituency" "D:\BACKUP FILES\ALL ALHASAN GEO DATABASE\GEO DATA\Data.gdb\Adminbdy" Provincial_Constituency_Update # "OBJECTID "OBJECTID" true true false 4 Long 0 0 ,First,#,C:\Users\Muneeb\Desktop\Final UC\GEO DATA ADMINBDY\ADMINBDY.gdb\DATA\Provincial_Constituency,OBJECTID,-1,-1;PROVINCE "PROVINCE" true true false 30 Text 0 0 ,First,#,C:\Users\Muneeb\Desktop\Final UC\GEO DATA ADMINBDY\ADMINBDY.gdb\DATA\Provincial_Constituency,PROVINCE,-1,-1;DISTRICT "DISTRICT" true true false 30 Text 0 0 ,First,#,C:\Users\Muneeb\Desktop\Final UC\GEO DATA ADMINBDY\ADMINBDY.gdb\DATA\Provincial_Constituency,DISTRICT,-1,-1;PA "PA" true true false 50 Text 0 0 ,First,#,C:\Users\Muneeb\Desktop\Final UC\GEO DATA ADMINBDY\ADMINBDY.gdb\DATA\Provincial_Constituency,PA,-1,-1;Shape_Length "Shape_Length" false true true 8 Double 0 0 ,First,#,C:\Users\Muneeb\Desktop\Final UC\GEO DATA ADMINBDY\ADMINBDY.gdb\DATA\Provincial_Constituency,Shape_Length,-1,-1;Shape_Area "Shape_Area" false true true 8 Double 0 0 ,First,#,C:\Users\Muneeb\Desktop\Final UC\GEO DATA ADMINBDY\ADMINBDY.gdb\DATA\Provincial_Constituency,Shape_Area,-1,-1" #FeatureClassToFeatureClass "D:\BACKUP FILES\ALL ALHASAN GEO DATABASE\GEO DATA\Data.gdb\Adminbdy\Provincial_Constituency_Update" "D:\ALHASAN PUBLIC DATABASE\Geodatabase.gdb\Pakistan_Alhasan_Systems" Provincial_Constituency # "OBJECTID "OBJECTID" true true false 4 Long 0 0 ,First,#,D:\BACKUP FILES\ALL ALHASAN GEO DATABASE\GEO DATA\Data.gdb\Adminbdy\Provincial_Constituency_Update,OBJECTID,-1,-1;PROVINCE "PROVINCE" true true false 30 Text 0 0 ,First,#,D:\BACKUP FILES\ALL ALHASAN GEO DATABASE\GEO DATA\Data.gdb\Adminbdy\Provincial_Constituency_Update,PROVINCE,-1,-1;DISTRICT "DISTRICT" true true false 30 Text 0 0 ,First,#,D:\BACKUP FILES\ALL ALHASAN GEO DATABASE\GEO DATA\Data.gdb\Adminbdy\Provincial_Constituency_Update,DISTRICT,-1,-1;PA "PA" true true false 50 Text 0 0 ,First,#,D:\BACKUP FILES\ALL ALHASAN GEO DATABASE\GEO DATA\Data.gdb\Adminbdy\Provincial_Constituency_Update,PA,-1,-1;Shape_Length "Shape_Length" false true true 8 Double 0 0 ,First,#,D:\BACKUP FILES\ALL ALHASAN GEO DATABASE\GEO DATA\Data.gdb\Adminbdy\Provincial_Constituency_Update,Shape_Length,-1,-1;Shape_Area "Shape_Area" false true true 8 Double 0 0 ,First,#,D:\BACKUP FILES\ALL ALHASAN GEO DATABASE\GEO DATA\Data.gdb\Adminbdy\Provincial_Constituency_Update,Shape_Area,-1,-1" #CopyFeatures "D:\ALHASAN PUBLIC DATABASE\Pakistan_Geodatabase_Alhasan_Systems.gdb\Pakistan_Geodatabase_Alhasan_Systems\Provincial_Constituency" "D:\ALHASAN PUBLIC DATABASE\Adminbdy Shapefile\Provincial_Constituency.shp" # 0 0 0file://\\MUNEEB-PC\D$\ALHASAN PUBLIC DATABASE\Adminbdy Shapefile\Provincial_Constituency.shpLocal Area NetworkProvincial_Constituency0.000GeographicGCS_WGS_1984Angular Unit: Degree (0.017453)<GeographicCoordinateSystem xsi:type='typens:GeographicCoordinateSystem' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xs='http://www.w3.org/2001/XMLSchema' xmlns:typens='http://www.esri.com/schemas/ArcGIS/10.1'><WKT>GEOGCS[&quot;GCS_WGS_1984&quot;,DATUM[&quot;D_WGS_1984&quot;,SPHEROID[&quot;WGS_1984&quot;,6378137.0,298.257223563]],PRIMEM[&quot;Greenwich&quot;,0.0],UNIT[&quot;Degree&quot;,0.0174532925199433],AUTHORITY[&quot;EPSG&quot;,4326]],VERTCS[&quot;WGS_1984&quot;,DATUM[&quot;D_WGS_1984&quot;,SPHEROID[&quot;WGS_1984&quot;,6378137.0,298.257223563]],PARAMETER[&quot;Vertical_Shift&quot;,0.0],PARAMETER[&quot;Direction&quot;,1.0],UNIT[&quot;Meter&quot;,1.0],AUTHORITY[&quot;ESRI&quot;,115700]]</WKT><XOrigin>-400</XOrigin><YOrigin>-400</YOrigin><XYScale>11258999068426.238</XYScale><ZOrigin>-100000</ZOrigin><ZScale>10000</ZScale><MOrigin>-100000</MOrigin><MScale>10000</MScale><XYTolerance>8.983152841195215e-009</XYTolerance><ZTolerance>0.001</ZTolerance><MTolerance>0.001</MTolerance><HighPrecision>true</HighPrecision><LeftLongitude>-180</LeftLongitude><WKID>4326</WKID><LatestWKID>4326</LatestWKID><VCSWKID>115700</VCSWKID><LatestVCSWKID>115700</LatestVCSWKID></GeographicCoordinateSystem>1.0ISO 19139 Metadata Implementation Specification200000005000ISO19139Microsoft Windows XP Version 5.1 (Build 2600) Service Pack 3; ESRI ArcCatalog 9.3.0.1770enREQUIRED: A brief narrative summary of the data set.REQUIRED: A summary of the intentions with which the data set was developed.REQUIRED: The name of an organization or individual that developed the data set.REQUIRED: The date when the data set is published or otherwise made available for release.District_BoundaryDistrict_Boundaryvector digital data\\172.18.155.152\Information Management\admin1_5_pco\OLD\PCO_Boundaries\District_Boundary.shpREQUIRED: The basis on which the time period of content information is determined.REQUIRED: The year (and optionally month, or month and day) for which the data set corresponds to the ground.REQUIRED: The state of the data set.REQUIRED: The frequency with which changes and additions are made to the data set after the initial data set is completed.60.89185679.30573837.09759023.70306960.89185679.30573823.70306937.097590REQUIRED: Reference to a formally registered thesaurus or a similar authoritative source of theme keywords.REQUIRED: Common-use word or phrase used to describe the subject of the data set.REQUIRED: Restrictions and legal prerequisites for accessing the data set.REQUIRED: Restrictions and legal prerequisites for using the data set after access is granted.ShapefileMicrosoft Windows 7 Version 6.1 (Build 7601) Service Pack 1; Esri ArcGIS 10.1.0.3035Provincial_Constituency60.89185679.30573837.0975923.703069160.89185679.30573837.0975923.7030691Constituency boundaries drafted by Election commision of Pakistan has been downloaded in readable format and has been converted to supported image format in GIS environment, Polling stations data has been clustered based on locations and has been geotaged using google earth spatial database and freely available settlements, Constituency boundaries spatial reference has been assigned after cross checking and varification of its spatial locations, All the imageries has been merged and digitized using standard procedures and spatial projection systems. These can be used for thematic mapping of election studies and campaign.<DIV STYLE="text-align:Left;"><DIV><DIV><P STYLE="margin:0 0 14 0;"><SPAN><SPAN>Constituency boundaries of pakistan which are prepared by ALHASAN as free service. These boundaries can be used in Election maping</SPAN></SPAN></P><P><SPAN /></P></DIV></DIV></DIV>Provincial assembly constituency bounaryProvincial Constituency Boundarycover Whole Pakistan. except FATA, Azad Kashmir and Captial IslamabadMahdi Bokhari Alhasan Pvt System OwnerMahdi Bokhari Mahdi Bokhari Alhasan Pvt System OwnerMahdi Bokhari Mahdi Bokhari enFGDC Content Standards for Digital Geospatial MetadataFGDC-STD-001-1998local timeREQUIRED: The person responsible for the metadata information.REQUIRED: The organization responsible for the metadata information.REQUIRED: The mailing and/or physical address for the organization or individual.REQUIRED: The city of the address.REQUIRED: The state or province of the address.REQUIRED: The ZIP or other postal code of the address.REQUIRED: The telephone number by which individuals can speak to the organization or individual.20111129ISO 19115 Geographic Information - MetadataDIS_ESRI1.0datasetDownloadable Data1.4201.420002file://\\172.18.155.152\Information Management\admin1_5_pco\OLD\PCO_Boundaries\District_Boundary.shpLocal Area Network1.420ShapefileShapefile0.000VectorSimpleFALSE0FALSEFALSEGCS_WGS_1984Decimal degrees0.0000000.000000D_WGS_1984WGS_19846378137.000000298.257224Explicit elevation coordinate included with horizontal coordinates0.000100GCS_WGS_1984EPSG7.9.40Provincial_ConstituencyFeature Class0FIDFIDOID400Internal feature number.EsriSequential unique whole numbers that are automatically generated.OBJECTIDOBJECTIDInteger9Internal feature number.ESRISequential unique whole numbers that are automatically generated.90SHAPEShapeGeometry000Feature geometry.ESRICoordinates defining the features.PROVINCEPROVINCEString3000DISTRICTDISTRICTString3000PAPAString5000Shape_LengShape_LengDouble1900SHAPE_AreaShape_AreaDouble1900Area of feature in internal units squared.ESRIPositive real numbers that are automatically generated.province textprovince in which constituency lies Districttextdistrict in which constituency lies PAtextconstituency number20170813Dataset copied.\\ARSLAN004\F$\Arslan Data\Arslan's Work\Pakistan_Mauza.gdb2011061714591100Dataset copied.\\JAVED-PC\D$\PAKISTAN_MAUZA.gdb2011062815341800Dataset copied.\\UNH-PAK-2332\F$\PAKISTAN MAUZA\PAKISTAN_MAUZA.gdb2011112911412500/9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAMCAgMCAgMDAwMEAwMEBQgFBQQEBQoHBwYIDAoMDAsK
+CwsNDhIQDQ4RDgsLEBYQERMUFRUVDA8XGBYUGBIUFRT/2wBDAQMEBAUEBQkFBQkUDQsNFBQUFBQU
+FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBT/wAARCAIIAjsDASIA
+AhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQA
+AAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3
+ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWm
+p6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEA
+AwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSEx
+BhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElK
+U1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3
+uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD9U6KK
+KCAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKK
+ACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAorkT8
+VNAY5iGr3UR+5PaaHfTwyDsySJCVdT1DKSCCCCQaQ/FDSZBtt7DX7mduI4RoN5F5jdl3yRKi5PG5
+2VR1JAyawdekt5r70VyvsdfRXGN401+5Ie18HXMMMXMyalf28Uzr6QLE0qu2AeJHiGSvzYJKg8Ye
+I7dTDc+ETLdv/q5tP1KKSzXPA82SQRyrg8tshfC4I3HKjm/tHCXt7WP3or2cux2dFcV/wkPjX/oX
+NB/8H0//AMh1c8O+P7TWbqPT7u1u9J1cvJE1vdWsyQySIW3CGd0VJgQrOu07igLFVwwW6ONw9d8t
+KabE4SjujqaKKK7SAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAC
+iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK
+KKACiiigAooooAKKKKACiisPxn4pj8H+HrrUPs8l9dqji00+AM0t5MEZliQKrMSdpJIU7VDMeFJC
+bSV2M3Kqarq9joVhLfale2+n2UWPMubuVYo0yQBlmIAySB9SK8t8XfEjxb4O8L6quraP5t6wS30/
+WPD0ZnSSSWcxJm2fLJIisjhGZo3YbPMUsoOp4N8GaYkq+J7m2uL7X9R2XjX+tWkCX9vugSMRHy41
+Ee1F2lR3LZJya8TFZvQw9JVIe9fa369jWNJydmU5vEdz8V73RH0q21G28HZnuZtWt9TFo12QNkKx
++RKZSpLSFo3ERBRMkFTG1y7+E3hzVGuptUt7nV7+7hFvPqF7dytcFPm3KjBh5KtvcMkQRCHK7dvF
+djRXxGKzXE4mfMpOK7Jvp+p1xpxigoorlfEviXVU8QW/hzw5b6Xd61cafcXxOpXjxJbojxxozIkb
+swZpDgfLny2AbPTz6FCpiaipUldstyUVdjL+48QeJPEeseHNOubfw+lrZQXaaxGRcznzfNVFEDoE
+XDwsWJZsqAAAz7o9OPwNqmpn/ie+JbmeLo1posR0+GReoJcO84bPOUmUEAArjdu0PBvg2LwpbTzT
+T/2nrl95b6lq0kKRSXkiIEUlUACqqjCoOAMk5YszdFX6VhMrw9CnBTgnJbu19fn/AF6HDKpJvRnD
+3HgXxFbyQS6d44vZJEcmSHV9PtbiCRCrDBWFIHByVIIf+HBBzWd4k+HXijxZpb6ZqfiDQbjTpsi4
+tW0CUrOu0gKxN3lcMVcMhVgyKQeoPpNFdLy/CcykqaTXZW/In2ku5neHdNn0bw/pmn3V7JqVzaWs
+UEt7NnfcOqBWkbJJyxBJyT16mtGiivQMwooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAC
+iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK
+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
+4BMgLBcgccKoAGD4o8Cad4N1BdIufFfiqLwsulRzTC0lnu5NNe2kjMT/ACrIsKSbHfdsXa1swR1U
+sldb4M+FC31nLdeM7W41GV7w3dnpeqaxPqkNlG0Kr5TCTEbsrNKA21iAw+diN1d74f8ADVh4ZhuY
+7Fbj/SpvtE0l1dS3MkkmxUyXlZm+6iDGcYUVjLF+yfxyk+u1vK29mu+t35bvlv0Kl/rWg2Hhe3k1
+rWbCbSbyFYPtupTQrDeq6HqfljbeoJwowRnAxXz3q2ur8L/EPiS78D3Edvfa2wFjLeXFzdHUBJGP
+uW7BpJZvOR3huMPA4uJFL5wtekeM/Dvhv4cXEU/hTw5YW3jbxDMLDTHgiX/RpPLZWuAmG8uONCWk
+MaYORv65GNqjQfDTUJ/B+g61aeHr57Btbv8AxRqsYu9RuohJcSSYjEYWd12nJdshGbarEEjqwE/q
+79pRbd+myst3ZX0W3W+tkiZrm0Z5X4H+NXjBvG8+s6/4jjfxDpiCwh0HVoY7OG7iaTNzGZTsjtnX
+y1be3zMyIvzY2n1zx14q0vxj43t/+EpsdTf4d2dzbtp199nQ6VcXIRt1xcSFA4hJuIo0IJifaTll
+zjoPDdnnwnoGi6b4Eu7K2skiksbvxDFZ+XayKMi4kjjlMnm8s2AisXYgtHksvEeIvhl4ovta0vwf
+pviTV7uwWzh/4SXUr3VpWkuoJ5JM+XE+9Y8fZXQbeSJlVty72PrzzT26lSb5U93daLytt6O7u7bb
+ZqnbU39e+H3g/Q/h8niXwTa6RFN4e8zWLK/ihjvUuWhEjNFJIxLOp+YZDgoyqVIKAV75XzrPoF/8
+LfhxJp1tf6Zr/gqx1AyzzXt79lljt/tGJLRtkUiyASAiQnLSK0sSxbitfRVd+TOTp1Lz5lzO19/n
+1v5GdXdaBRRRX0BgFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAU
+UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRR
+RQAUUUUAFeZeIviD8M/HGkadbXer22trcTRXNna6WZpr6OVVMiyLHbgzxMoVsthSvIOMkGXx/GPi
+Pey+Df7P+0+Ho5k/t29ebyyrII54raID5izboWZ8BQhYBt5+TwjxL8Qki8X29jZ+O5JDbuLnRNUv
+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 Bokhari Alhasan Pvt System OwnerMahdi Bokhari Alhasan Pvt System OwnerMahdi Bokhari Mahdi Bokhari I8 /2 IslamabadIslamabadPunjab44000connect@alhasan.gmail.comPK
diff --git a/y/media/shp/Provincial_Constituency.shx b/y/media/shp/Provincial_Constituency.shx
new file mode 100644
index 0000000000000000000000000000000000000000..a4537143b7f4d53fb8ac718de07c1921c2e7cb8f
Binary files /dev/null and b/y/media/shp/Provincial_Constituency.shx differ
diff --git a/y/media/shp/Tehsil_Boundary.cpg b/y/media/shp/Tehsil_Boundary.cpg
new file mode 100644
index 0000000000000000000000000000000000000000..3ad133c048f2189041151425a73485649e6c32c0
--- /dev/null
+++ b/y/media/shp/Tehsil_Boundary.cpg
@@ -0,0 +1 @@
+UTF-8
\ No newline at end of file
diff --git a/y/media/shp/Tehsil_Boundary.dbf b/y/media/shp/Tehsil_Boundary.dbf
new file mode 100644
index 0000000000000000000000000000000000000000..43d33e6e56d467ee3dd35e2902126bf012b57b7c
Binary files /dev/null and b/y/media/shp/Tehsil_Boundary.dbf differ
diff --git a/y/media/shp/Tehsil_Boundary.prj b/y/media/shp/Tehsil_Boundary.prj
new file mode 100644
index 0000000000000000000000000000000000000000..8958e93fbd3405f4913d25296503cc22b0092706
--- /dev/null
+++ b/y/media/shp/Tehsil_Boundary.prj
@@ -0,0 +1 @@
+GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],VERTCS["WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PARAMETER["Vertical_Shift",0.0],PARAMETER["Direction",1.0],UNIT["Meter",1.0]]
\ No newline at end of file
diff --git a/y/media/shp/hydro_basins.cpg b/y/media/shp/hydro_basins.cpg
new file mode 100644
index 0000000000000000000000000000000000000000..3ad133c048f2189041151425a73485649e6c32c0
--- /dev/null
+++ b/y/media/shp/hydro_basins.cpg
@@ -0,0 +1 @@
+UTF-8
\ No newline at end of file
diff --git a/y/media/shp/hydro_basins.dbf b/y/media/shp/hydro_basins.dbf
new file mode 100644
index 0000000000000000000000000000000000000000..7561bad8f892e5b0c5604478b7fcd0f935f88d9e
Binary files /dev/null and b/y/media/shp/hydro_basins.dbf differ
diff --git a/y/media/shp/hydro_basins.prj b/y/media/shp/hydro_basins.prj
new file mode 100644
index 0000000000000000000000000000000000000000..a30c00a55de19be195abf9e942f6cff93bf0a825
--- /dev/null
+++ b/y/media/shp/hydro_basins.prj
@@ -0,0 +1 @@
+GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137,298.257223563]],PRIMEM["Greenwich",0],UNIT["Degree",0.017453292519943295]]
\ No newline at end of file
diff --git a/y/media/shp/hydro_basins.qpj b/y/media/shp/hydro_basins.qpj
new file mode 100644
index 0000000000000000000000000000000000000000..5fbc831e743348854289f8b0cacd8b553b1262cc
--- /dev/null
+++ b/y/media/shp/hydro_basins.qpj
@@ -0,0 +1 @@
+GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]]
diff --git a/y/media/shp/hydro_basins.shp b/y/media/shp/hydro_basins.shp
new file mode 100644
index 0000000000000000000000000000000000000000..3b6a3df093faa3f16158e6c776bcf273840f3919
--- /dev/null
+++ b/y/media/shp/hydro_basins.shp
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:f1fb4a1bf9f7ac63a02f6c2d75e04e228f6828dbf7624a53f07b4d2980c02b6b
+size 7104900
diff --git a/y/media/shp/hydro_basins.shx b/y/media/shp/hydro_basins.shx
new file mode 100644
index 0000000000000000000000000000000000000000..9bf65f55e3ccd2555015519cee7c3f062127f7fd
Binary files /dev/null and b/y/media/shp/hydro_basins.shx differ
diff --git a/y/media/shp/karachi.cpg b/y/media/shp/karachi.cpg
new file mode 100644
index 0000000000000000000000000000000000000000..3ad133c048f2189041151425a73485649e6c32c0
--- /dev/null
+++ b/y/media/shp/karachi.cpg
@@ -0,0 +1 @@
+UTF-8
\ No newline at end of file
diff --git a/y/media/shp/karachi.dbf b/y/media/shp/karachi.dbf
new file mode 100644
index 0000000000000000000000000000000000000000..a97cfe2234d66e8d0c595773ebc850c89f8a91c3
Binary files /dev/null and b/y/media/shp/karachi.dbf differ
diff --git a/y/media/shp/karachi.prj b/y/media/shp/karachi.prj
new file mode 100644
index 0000000000000000000000000000000000000000..f45cbadf0074d8b7b2669559a93bc50bb95f82d4
--- /dev/null
+++ b/y/media/shp/karachi.prj
@@ -0,0 +1 @@
+GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]]
\ No newline at end of file
diff --git a/y/media/shp/karachi.shp b/y/media/shp/karachi.shp
new file mode 100644
index 0000000000000000000000000000000000000000..c9153e7061e0cd30f876336baf84a297be03a2bd
Binary files /dev/null and b/y/media/shp/karachi.shp differ
diff --git a/y/media/shp/karachi.shx b/y/media/shp/karachi.shx
new file mode 100644
index 0000000000000000000000000000000000000000..9809496dc4af736a835788b05c1f81d8931f0e56
Binary files /dev/null and b/y/media/shp/karachi.shx differ
diff --git a/y/media/shp/kenya_all_towns.cpg b/y/media/shp/kenya_all_towns.cpg
new file mode 100644
index 0000000000000000000000000000000000000000..a70e9b05db1fe52268db29ef84f346d210d95cec
--- /dev/null
+++ b/y/media/shp/kenya_all_towns.cpg
@@ -0,0 +1 @@
+ANSI 1252
\ No newline at end of file
diff --git a/y/media/shp/kenya_all_towns.dbf b/y/media/shp/kenya_all_towns.dbf
new file mode 100644
index 0000000000000000000000000000000000000000..9b9a67767f696d51a2a620a406332a36489db7f9
Binary files /dev/null and b/y/media/shp/kenya_all_towns.dbf differ
diff --git a/y/media/shp/kenya_all_towns.prj b/y/media/shp/kenya_all_towns.prj
new file mode 100644
index 0000000000000000000000000000000000000000..f45cbadf0074d8b7b2669559a93bc50bb95f82d4
--- /dev/null
+++ b/y/media/shp/kenya_all_towns.prj
@@ -0,0 +1 @@
+GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]]
\ No newline at end of file
diff --git a/y/media/shp/kenya_all_towns.sbn b/y/media/shp/kenya_all_towns.sbn
new file mode 100644
index 0000000000000000000000000000000000000000..a6e132f8daede3f42d6ede284fa8dd01cadf1bc5
Binary files /dev/null and b/y/media/shp/kenya_all_towns.sbn differ
diff --git a/y/media/shp/kenya_all_towns.sbx b/y/media/shp/kenya_all_towns.sbx
new file mode 100644
index 0000000000000000000000000000000000000000..d9415f54e3c51db2c4e8665d8edf6a460310e197
Binary files /dev/null and b/y/media/shp/kenya_all_towns.sbx differ
diff --git a/y/media/shp/kenya_all_towns.shp b/y/media/shp/kenya_all_towns.shp
new file mode 100644
index 0000000000000000000000000000000000000000..cafd9e631a0b5e8521e12208f0974815ea8c0f51
Binary files /dev/null and b/y/media/shp/kenya_all_towns.shp differ
diff --git a/y/media/shp/kenya_all_towns.shp.LAPTOP-0J6G9G3Q.11684.17100.sr.lock b/y/media/shp/kenya_all_towns.shp.LAPTOP-0J6G9G3Q.11684.17100.sr.lock
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/y/media/shp/kenya_all_towns.shp.LAPTOP-0J6G9G3Q.19240.17100.sr.lock b/y/media/shp/kenya_all_towns.shp.LAPTOP-0J6G9G3Q.19240.17100.sr.lock
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/y/media/shp/kenya_all_towns.shp.LAPTOP-0J6G9G3Q.68536.63216.sr.lock b/y/media/shp/kenya_all_towns.shp.LAPTOP-0J6G9G3Q.68536.63216.sr.lock
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/y/media/shp/kenya_all_towns.shp.LAPTOP-0J6G9G3Q.72832.63216.sr.lock b/y/media/shp/kenya_all_towns.shp.LAPTOP-0J6G9G3Q.72832.63216.sr.lock
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/y/media/shp/kenya_all_towns.shp.LAPTOP-0J6G9G3Q.77808.63216.sr.lock b/y/media/shp/kenya_all_towns.shp.LAPTOP-0J6G9G3Q.77808.63216.sr.lock
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/y/media/shp/kenya_all_towns.shp.LAPTOP-0J6G9G3Q.8664.17100.sr.lock b/y/media/shp/kenya_all_towns.shp.LAPTOP-0J6G9G3Q.8664.17100.sr.lock
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/y/media/shp/kenya_all_towns.shp.xml b/y/media/shp/kenya_all_towns.shp.xml
new file mode 100644
index 0000000000000000000000000000000000000000..bfcfddc62dbc82e9bc9c8405d928349555dc0efc
--- /dev/null
+++ b/y/media/shp/kenya_all_towns.shp.xml
@@ -0,0 +1,2 @@
+
+20170323095755001.0FALSEkenya_all_towns00234.01492041.877476-4.6580024.90349810.043file://\\runshi\rsrg_kuria\D_backup\Gladys data\Kenya\Kenya_all_towns\kenya_all_towns.shpLocal Area NetworkGeographicGCS_WGS_1984Angular Unit: Degree (0.017453)<GeographicCoordinateSystem xsi:type='typens:GeographicCoordinateSystem' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xs='http://www.w3.org/2001/XMLSchema' xmlns:typens='http://www.esri.com/schemas/ArcGIS/10.3'><WKT>GEOGCS[&quot;GCS_WGS_1984&quot;,DATUM[&quot;D_WGS_1984&quot;,SPHEROID[&quot;WGS_1984&quot;,6378137.0,298.257223563]],PRIMEM[&quot;Greenwich&quot;,0.0],UNIT[&quot;Degree&quot;,0.0174532925199433],AUTHORITY[&quot;EPSG&quot;,4326]]</WKT><XOrigin>-400</XOrigin><YOrigin>-400</YOrigin><XYScale>11258999068426.238</XYScale><ZOrigin>-100000</ZOrigin><ZScale>10000</ZScale><MOrigin>-100000</MOrigin><MScale>10000</MScale><XYTolerance>8.983152841195215e-009</XYTolerance><ZTolerance>0.001</ZTolerance><MTolerance>0.001</MTolerance><HighPrecision>true</HighPrecision><LeftLongitude>-180</LeftLongitude><WKID>4326</WKID><LatestWKID>4326</LatestWKID></GeographicCoordinateSystem>20170323095756002017032309575600 Version 6.2 (Build 9200) ; Esri ArcGIS 10.3.1.4959kenya_all_towns134.01492041.8774764.903498-4.658002Shapefile0.043datasetEPSG8.6.21620SimpleFALSE1620TRUEFALSEkenya_all_townsFeature Class1620FIDFIDOID400Internal feature number.EsriSequential unique whole numbers that are automatically generated.ShapeShapeGeometry000Feature geometry.EsriCoordinates defining the features.AREAAREADouble13126PERIMETERPERIMETERDouble13126TOWN_NAMETOWN_NAMEString1300TOWN_IDTOWN_IDDouble13130TOWN_TYPETOWN_TYPEString140020170323
diff --git a/y/media/shp/kenya_all_towns.shx b/y/media/shp/kenya_all_towns.shx
new file mode 100644
index 0000000000000000000000000000000000000000..b4ac3e4e5cd3b73d89d86a9156993ab06b1baa42
Binary files /dev/null and b/y/media/shp/kenya_all_towns.shx differ
diff --git a/y/media/shp/kenya_forestranges.dbf b/y/media/shp/kenya_forestranges.dbf
new file mode 100644
index 0000000000000000000000000000000000000000..d618950e7596c6f3e04a2fb01e080ef8671050d4
Binary files /dev/null and b/y/media/shp/kenya_forestranges.dbf differ
diff --git a/y/media/shp/kenya_forestranges.sbn b/y/media/shp/kenya_forestranges.sbn
new file mode 100644
index 0000000000000000000000000000000000000000..f0e14d77862cd1af9ed1f7024a667b98c83c922f
Binary files /dev/null and b/y/media/shp/kenya_forestranges.sbn differ
diff --git a/y/media/shp/kenya_forestranges.sbx b/y/media/shp/kenya_forestranges.sbx
new file mode 100644
index 0000000000000000000000000000000000000000..9dbfc01ec17b42cd5e9072edb58a56b579c885c8
Binary files /dev/null and b/y/media/shp/kenya_forestranges.sbx differ
diff --git a/y/media/shp/kenya_forestranges.shp b/y/media/shp/kenya_forestranges.shp
new file mode 100644
index 0000000000000000000000000000000000000000..491e6d1c9fd1d791bbc87a13493433883f4ce5a2
Binary files /dev/null and b/y/media/shp/kenya_forestranges.shp differ
diff --git a/y/media/shp/kenya_forestranges.shx b/y/media/shp/kenya_forestranges.shx
new file mode 100644
index 0000000000000000000000000000000000000000..7f895321062cce0c59979342f23d40c4ed6bee0d
Binary files /dev/null and b/y/media/shp/kenya_forestranges.shx differ
diff --git a/y/media/shp/kenya_forestranges_.dbf b/y/media/shp/kenya_forestranges_.dbf
new file mode 100644
index 0000000000000000000000000000000000000000..d618950e7596c6f3e04a2fb01e080ef8671050d4
Binary files /dev/null and b/y/media/shp/kenya_forestranges_.dbf differ
diff --git a/y/media/shp/kenya_forestranges_.evf b/y/media/shp/kenya_forestranges_.evf
new file mode 100644
index 0000000000000000000000000000000000000000..7e364c29c3be663b79115d83f63db40f10cc121c
Binary files /dev/null and b/y/media/shp/kenya_forestranges_.evf differ
diff --git a/y/media/shp/kenya_health.dbf b/y/media/shp/kenya_health.dbf
new file mode 100644
index 0000000000000000000000000000000000000000..5f43ec79533471de8c9fb4c5067b2ec455523db9
Binary files /dev/null and b/y/media/shp/kenya_health.dbf differ
diff --git a/y/media/shp/kenya_health.sbn b/y/media/shp/kenya_health.sbn
new file mode 100644
index 0000000000000000000000000000000000000000..d57fb9c16543effafab6655f435064e062b6ed6d
Binary files /dev/null and b/y/media/shp/kenya_health.sbn differ
diff --git a/y/media/shp/kenya_health.sbx b/y/media/shp/kenya_health.sbx
new file mode 100644
index 0000000000000000000000000000000000000000..01088c26ed4f78af64961b4d270dd6b433bbc3c8
Binary files /dev/null and b/y/media/shp/kenya_health.sbx differ
diff --git a/y/media/shp/kenya_health.shp b/y/media/shp/kenya_health.shp
new file mode 100644
index 0000000000000000000000000000000000000000..4ff530a5e8c55323b16530b39fd22949203d3957
Binary files /dev/null and b/y/media/shp/kenya_health.shp differ
diff --git a/y/media/shp/kenya_health.shp.xml b/y/media/shp/kenya_health.shp.xml
new file mode 100644
index 0000000000000000000000000000000000000000..19623a5ff425c541f8647921ac4c0598cc4dbd79
--- /dev/null
+++ b/y/media/shp/kenya_health.shp.xml
@@ -0,0 +1,3 @@
+
+
+{FCD8D56D-B95F-4D4B-8CA9-07D8FC1FB402}2009051517040200FALSE20111111154959002011111115495900Microsoft Windows Vista Version 6.1 (Build 7600) ; ESRI ArcCatalog 9.3.1.3500enREQUIRED: A brief narrative summary of the data set.REQUIRED: A summary of the intentions with which the data set was developed.REQUIRED: The name of an organization or individual that developed the data set.REQUIRED: The date when the data set is published or otherwise made available for release.kenya_healthkenya_healthvector digital data\\icipedudugis\GIS\Data\ILRI\Kenya\Kenya_healthfacilities\kenya_health.shpREQUIRED: The basis on which the time period of content information is determined.REQUIRED: The year (and optionally month, or month and day) for which the data set corresponds to the ground.REQUIRED: The state of the data set.REQUIRED: The frequency with which changes and additions are made to the data set after the initial data set is completed.REQUIRED: Western-most coordinate of the limit of coverage expressed in longitude.REQUIRED: Eastern-most coordinate of the limit of coverage expressed in longitude.REQUIRED: Northern-most coordinate of the limit of coverage expressed in latitude.REQUIRED: Southern-most coordinate of the limit of coverage expressed in latitude.33.97580541.861814-4.6622705.387024REQUIRED: Reference to a formally registered thesaurus or a similar authoritative source of theme keywords.REQUIRED: Common-use word or phrase used to describe the subject of the data set.REQUIRED: Restrictions and legal prerequisites for accessing the data set.REQUIRED: Restrictions and legal prerequisites for using the data set after access is granted.ShapefileMicrosoft Windows Vista Version 6.1 (Build 7600) ; ESRI ArcCatalog 9.3.1.3500kenya_health33.97580541.8618145.387024-4.662271enFGDC Content Standards for Digital Geospatial MetadataFGDC-STD-001-1998local timeREQUIRED: The person responsible for the metadata information.REQUIRED: The organization responsible for the metadata information.REQUIRED: The mailing and/or physical address for the organization or individual.REQUIRED: The city of the address.REQUIRED: The state or province of the address.REQUIRED: The ZIP or other postal code of the address.REQUIRED: The telephone number by which individuals can speak to the organization or individual.20111111http://www.esri.com/metadata/esriprof80.htmlESRI Metadata ProfileISO 19115 Geographic Information - MetadataDIS_ESRI1.0datasetDownloadable Data0.0800.080002file://\\icipedudugis\GIS\Data\ILRI\Kenya\Kenya_healthfacilities\kenya_health.shpLocal Area Network0.080ShapefileVectorSimplePointFALSE3175TRUEFALSEEntity point31753175kenya_healthFeature Class3175FIDFIDOID400Internal feature number.ESRISequential unique whole numbers that are automatically generated.ShapeShapeGeometry000Feature geometry.ESRICoordinates defining the features.FNOFNONumber4F_NAMEF_NAMEString32HMIS_HMIS_Number6PROVPROVString12DISTDISTString16DIVISIONDIVISIONString23LOCATIONLOCATIONString24SUB_LOCATISUB_LOCATIString26LONGLONGNumber106LATLATNumber96SPATIAL_RESPATIAL_REString35F_TYPEF_TYPENumber7AGENCYAGENCYString8N14N14String9N15N15String920111111
diff --git a/y/media/shp/kenya_health.shx b/y/media/shp/kenya_health.shx
new file mode 100644
index 0000000000000000000000000000000000000000..b749db39b2b24854bf67147037a6b6d6009030df
Binary files /dev/null and b/y/media/shp/kenya_health.shx differ
diff --git a/y/media/shp/kenya_highland_roads.dbf b/y/media/shp/kenya_highland_roads.dbf
new file mode 100644
index 0000000000000000000000000000000000000000..263edc1c187bcd390f1da89e461f0f8764912e29
Binary files /dev/null and b/y/media/shp/kenya_highland_roads.dbf differ
diff --git a/y/media/shp/kenya_highland_roads.prj b/y/media/shp/kenya_highland_roads.prj
new file mode 100644
index 0000000000000000000000000000000000000000..12a92f82ee38a029fb8725cf9ba22b8b7e5d92e9
--- /dev/null
+++ b/y/media/shp/kenya_highland_roads.prj
@@ -0,0 +1 @@
+GEOGCS["GCS_WGS_1984",DATUM["D_Arc_1960",SPHEROID["Clarke_1880_RGS",6378249.145,293.465]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]]
\ No newline at end of file
diff --git a/y/media/shp/kenya_highland_roads.sbn b/y/media/shp/kenya_highland_roads.sbn
new file mode 100644
index 0000000000000000000000000000000000000000..00e5a002c21354de4783eb42c704378f9099c2e0
Binary files /dev/null and b/y/media/shp/kenya_highland_roads.sbn differ
diff --git a/y/media/shp/kenya_highland_roads.sbx b/y/media/shp/kenya_highland_roads.sbx
new file mode 100644
index 0000000000000000000000000000000000000000..43dd26392205b4f8282d30e9eb9f3e23e573abdd
Binary files /dev/null and b/y/media/shp/kenya_highland_roads.sbx differ
diff --git a/y/media/shp/kenya_highland_roads.shp b/y/media/shp/kenya_highland_roads.shp
new file mode 100644
index 0000000000000000000000000000000000000000..c8d8ee9e7c7589277856880ef5d80c6179e3df64
--- /dev/null
+++ b/y/media/shp/kenya_highland_roads.shp
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:56dde2f07ff26cab0f3711f7aeb61b835dfd717259e0b313bb8440e8a18f7521
+size 4055140
diff --git a/y/media/shp/kenya_highland_roads.shp.xml b/y/media/shp/kenya_highland_roads.shp.xml
new file mode 100644
index 0000000000000000000000000000000000000000..cdf69fbfaae2bac8a448e6c27a73e37cce1f49a4
--- /dev/null
+++ b/y/media/shp/kenya_highland_roads.shp.xml
@@ -0,0 +1,3 @@
+
+
+{4082E0E4-ABFC-40BD-8B38-21F9D7499247}2012052915271400FALSE20120529152714002012052915271400Microsoft Windows Vista Version 6.1 (Build 7600) ; ESRI ArcCatalog 9.3.1.3000enREQUIRED: A brief narrative summary of the data set.REQUIRED: A summary of the intentions with which the data set was developed.REQUIRED: The name of an organization or individual that developed the data set.REQUIRED: The date when the data set is published or otherwise made available for release.kenya_highland_roadskenya_highland_roadsvector digital data\\Icipedudugis\gis\Data\ILRI\Kenya\highlandRoads\kenya_highland_roads.shpREQUIRED: The basis on which the time period of content information is determined.REQUIRED: The year (and optionally month, or month and day) for which the data set corresponds to the ground.REQUIRED: The state of the data set.REQUIRED: The frequency with which changes and additions are made to the data set after the initial data set is completed.34.00001938.2502050.948474-1.99996634.00001938.250205-1.9999660.948474REQUIRED: Reference to a formally registered thesaurus or a similar authoritative source of theme keywords.REQUIRED: Common-use word or phrase used to describe the subject of the data set.REQUIRED: Restrictions and legal prerequisites for accessing the data set.REQUIRED: Restrictions and legal prerequisites for using the data set after access is granted.ShapefileMicrosoft Windows Vista Version 6.1 (Build 7600) ; ESRI ArcCatalog 9.3.1.3000kenya_highland_roads34.00001938.2502050.948474-1.999966134.00001938.2502050.948474-1.9999661enFGDC Content Standards for Digital Geospatial MetadataFGDC-STD-001-1998local timehttp://www.esri.com/metadata/esriprof80.htmlESRI Metadata ProfileREQUIRED: The person responsible for the metadata information.REQUIRED: The organization responsible for the metadata information.REQUIRED: The mailing and/or physical address for the organization or individual.REQUIRED: The city of the address.REQUIRED: The state or province of the address.REQUIRED: The ZIP or other postal code of the address.REQUIRED: The telephone number by which individuals can speak to the organization or individual.20120529ISO 19115 Geographic Information - MetadataDIS_ESRI1.0datasetDownloadable Data3.8673.867002file://\\Icipedudugis\gis\Data\ILRI\Kenya\highlandRoads\kenya_highland_roads.shpLocal Area Network3.867ShapefileVectorSimplePolylineFALSE19884FALSEFALSEString19884GCS_WGS_1984Decimal degrees0.0000000.000000D_Arc_1960Clarke_1880_RGS6378249.145000293.465000GCS_WGS_198419884kenya_highland_roadsFeature Class19884FIDFIDOID400Internal feature number.ESRISequential unique whole numbers that are automatically generated.ShapeShapeGeometry000Feature geometry.ESRICoordinates defining the features.LENGTHLENGTHNumber123ROADUPDATEROADUPDATENumber11SPEEDSPEEDNumber8TRAVELTIMETRAVELTIMENumber10420120529
diff --git a/y/media/shp/kenya_highland_roads.shx b/y/media/shp/kenya_highland_roads.shx
new file mode 100644
index 0000000000000000000000000000000000000000..70f6f8114289192a21fa896dc3c7ea39227846ac
Binary files /dev/null and b/y/media/shp/kenya_highland_roads.shx differ
diff --git a/y/media/shp/kenya_wetlands.dbf b/y/media/shp/kenya_wetlands.dbf
new file mode 100644
index 0000000000000000000000000000000000000000..81c1c4769082a5a52be1e1b15efe15fc01eac80d
Binary files /dev/null and b/y/media/shp/kenya_wetlands.dbf differ
diff --git a/y/media/shp/kenya_wetlands.prj b/y/media/shp/kenya_wetlands.prj
new file mode 100644
index 0000000000000000000000000000000000000000..f45cbadf0074d8b7b2669559a93bc50bb95f82d4
--- /dev/null
+++ b/y/media/shp/kenya_wetlands.prj
@@ -0,0 +1 @@
+GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]]
\ No newline at end of file
diff --git a/y/media/shp/kenya_wetlands.sbn b/y/media/shp/kenya_wetlands.sbn
new file mode 100644
index 0000000000000000000000000000000000000000..d1c4eeafabe433f66c3c1b625a78cef71a26ea38
Binary files /dev/null and b/y/media/shp/kenya_wetlands.sbn differ
diff --git a/y/media/shp/kenya_wetlands.sbx b/y/media/shp/kenya_wetlands.sbx
new file mode 100644
index 0000000000000000000000000000000000000000..f41c35d23b73d8d9ee6fd5438d28cadb147186eb
Binary files /dev/null and b/y/media/shp/kenya_wetlands.sbx differ
diff --git a/y/media/shp/kenya_wetlands.shp b/y/media/shp/kenya_wetlands.shp
new file mode 100644
index 0000000000000000000000000000000000000000..82808c513410e9e42eeac981d8ba88f71a4cb0bf
Binary files /dev/null and b/y/media/shp/kenya_wetlands.shp differ
diff --git a/y/media/shp/kenya_wetlands.shp.xml b/y/media/shp/kenya_wetlands.shp.xml
new file mode 100644
index 0000000000000000000000000000000000000000..8ffef31982eb54da817ab8e688af87a21337810d
--- /dev/null
+++ b/y/media/shp/kenya_wetlands.shp.xml
@@ -0,0 +1,3 @@
+
+
+{8D45D80C-A3DB-43C2-87D3-E1C84ABF69ED}2009112710395300FALSE20091127103954002009112710395400DefineProjection kenya_wetlands GEOGCS['GCS_WGS_1984',DATUM['D_WGS_1984',SPHEROID['WGS_1984',6378137.0,298.257223563]],PRIMEM['Greenwich',0.0],UNIT['Degree',0.0174532925199433]]Microsoft Windows XP Version 5.1 (Build 2600) Service Pack 3; ESRI ArcCatalog 9.3.1.3000enREQUIRED: A brief narrative summary of the data set.REQUIRED: A summary of the intentions with which the data set was developed.REQUIRED: The name of an organization or individual that developed the data set.REQUIRED: The date when the data set is published or otherwise made available for release.kenya_wetlandskenya_wetlandsvector digital data\\Kupe\DATA\GIS\raw\ILRI\Kenya\Kenya_wetlands\kenya_wetlands.shpREQUIRED: The basis on which the time period of content information is determined.REQUIRED: The year (and optionally month, or month and day) for which the data set corresponds to the ground.REQUIRED: The state of the data set.REQUIRED: The frequency with which changes and additions are made to the data set after the initial data set is completed.REQUIRED: Western-most coordinate of the limit of coverage expressed in longitude.REQUIRED: Eastern-most coordinate of the limit of coverage expressed in longitude.REQUIRED: Northern-most coordinate of the limit of coverage expressed in latitude.REQUIRED: Southern-most coordinate of the limit of coverage expressed in latitude.33.90886041.515280-4.6644984.615069REQUIRED: Reference to a formally registered thesaurus or a similar authoritative source of theme keywords.REQUIRED: Common-use word or phrase used to describe the subject of the data set.REQUIRED: Restrictions and legal prerequisites for accessing the data set.REQUIRED: Restrictions and legal prerequisites for using the data set after access is granted.ShapefileMicrosoft Windows XP Version 5.1 (Build 2600) Service Pack 3; ESRI ArcCatalog 9.3.1.3000kenya_wetlands33.9088641.515284.615069-4.6644981enFGDC Content Standards for Digital Geospatial MetadataFGDC-STD-001-1998local timehttp://www.esri.com/metadata/esriprof80.htmlESRI Metadata ProfileREQUIRED: The person responsible for the metadata information.REQUIRED: The organization responsible for the metadata information.REQUIRED: The mailing and/or physical address for the organization or individual.REQUIRED: The city of the address.REQUIRED: The state or province of the address.REQUIRED: The ZIP or other postal code of the address.REQUIRED: The telephone number by which individuals can speak to the organization or individual.20091127ISO 19115 Geographic Information - MetadataDIS_ESRI1.0datasetDownloadable Data0.3770.377002file://\\Kupe\DATA\GIS\raw\ILRI\Kenya\Kenya_wetlands\kenya_wetlands.shpLocal Area Network0.377ShapefileVectorSimplePolygonFALSE141TRUEFALSEG-polygon141141kenya_wetlandsFeature Class141FIDFIDOID400Internal feature number.ESRISequential unique whole numbers that are automatically generated.ShapeShapeGeometry000Feature geometry.ESRICoordinates defining the features.KENWETLANDKENWETLANDNumber11AREAAREANumber196PERIMETERPERIMETERNumber196WETLANDS_WETLANDS_Number11WETLANDS_IWETLANDS_INumber11CLASSCLASSString3CLASSTXCLASSTXString50NAMENAMEString121DESCRIPDESCRIPString25120091127
diff --git a/y/media/shp/kenya_wetlands.shx b/y/media/shp/kenya_wetlands.shx
new file mode 100644
index 0000000000000000000000000000000000000000..93684918feeabdf9ac86cbb933845744d7da904a
Binary files /dev/null and b/y/media/shp/kenya_wetlands.shx differ
diff --git a/y/media/shp/kenya_wetlands_.dbf b/y/media/shp/kenya_wetlands_.dbf
new file mode 100644
index 0000000000000000000000000000000000000000..81c1c4769082a5a52be1e1b15efe15fc01eac80d
Binary files /dev/null and b/y/media/shp/kenya_wetlands_.dbf differ
diff --git a/y/media/shp/kenya_wetlands_.evf b/y/media/shp/kenya_wetlands_.evf
new file mode 100644
index 0000000000000000000000000000000000000000..1e67f75d6c86c767c9296b29d8ee3bf3f814f86a
Binary files /dev/null and b/y/media/shp/kenya_wetlands_.evf differ
diff --git a/y/myapp/__init__.py b/y/myapp/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/y/myapp/admin.py b/y/myapp/admin.py
new file mode 100644
index 0000000000000000000000000000000000000000..ea5d68b7c457cb7f92da9c00a5c4df77ace36cef
--- /dev/null
+++ b/y/myapp/admin.py
@@ -0,0 +1,3 @@
+from django.contrib import admin
+
+# Register your models here.
diff --git a/y/myapp/apps.py b/y/myapp/apps.py
new file mode 100644
index 0000000000000000000000000000000000000000..85156c7918c7fca8048409d7aed9b87a70660222
--- /dev/null
+++ b/y/myapp/apps.py
@@ -0,0 +1,6 @@
+from django.apps import AppConfig
+
+
+class MyappConfig(AppConfig):
+    default_auto_field = "django.db.models.BigAutoField"
+    name = "myapp"
diff --git a/y/myapp/migrations/__init__.py b/y/myapp/migrations/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/y/myapp/models.py b/y/myapp/models.py
new file mode 100644
index 0000000000000000000000000000000000000000..fd18c6eac0dc9ffbdf025c31d136901350a0d9f2
--- /dev/null
+++ b/y/myapp/models.py
@@ -0,0 +1,3 @@
+from django.db import models
+
+# Create your models here.
diff --git a/y/myapp/tests.py b/y/myapp/tests.py
new file mode 100644
index 0000000000000000000000000000000000000000..de8bdc00eb2fed53494a534d48e400faa830dbd9
--- /dev/null
+++ b/y/myapp/tests.py
@@ -0,0 +1,3 @@
+from django.test import TestCase
+
+# Create your tests here.
diff --git a/y/myapp/views.py b/y/myapp/views.py
new file mode 100644
index 0000000000000000000000000000000000000000..c60c790437030748012ed3b77ed8708956de9957
--- /dev/null
+++ b/y/myapp/views.py
@@ -0,0 +1,3 @@
+from django.shortcuts import render
+
+# Create your views here.
diff --git a/y/ndvi_map.html b/y/ndvi_map.html
new file mode 100644
index 0000000000000000000000000000000000000000..719a84f5175336ed8bb696f05290d3d23fe924d2
--- /dev/null
+++ b/y/ndvi_map.html
@@ -0,0 +1,72 @@
+
+
+
+    
+    
+    
+        
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+            
+            
+        
+
+
+    
+    
+            
+ + + + \ No newline at end of file diff --git a/y/newone/geo/__init__.py b/y/newone/geo/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/y/newone/geo/__pycache__/__init__.cpython-310.pyc b/y/newone/geo/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..299add5dbc539ee49441fd82ce8e9d9299293598 Binary files /dev/null and b/y/newone/geo/__pycache__/__init__.cpython-310.pyc differ diff --git a/y/newone/geo/__pycache__/__init__.cpython-39.pyc b/y/newone/geo/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..fdfb8872a586d1abd665364380a7672b1c0acc3b Binary files /dev/null and b/y/newone/geo/__pycache__/__init__.cpython-39.pyc differ diff --git a/y/newone/geo/__pycache__/settings.cpython-310.pyc b/y/newone/geo/__pycache__/settings.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e5b02567f7bba35fd83991f8851bcdb92731ffbf Binary files /dev/null and b/y/newone/geo/__pycache__/settings.cpython-310.pyc differ diff --git a/y/newone/geo/__pycache__/settings.cpython-39.pyc b/y/newone/geo/__pycache__/settings.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8f1507627b081dca98d238d5deb57627448bf433 Binary files /dev/null and b/y/newone/geo/__pycache__/settings.cpython-39.pyc differ diff --git a/y/newone/geo/__pycache__/urls.cpython-310.pyc b/y/newone/geo/__pycache__/urls.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..46f60f9e0cd22d6ff2b6655b62ef5883ce412811 Binary files /dev/null and b/y/newone/geo/__pycache__/urls.cpython-310.pyc differ diff --git a/y/newone/geo/__pycache__/urls.cpython-39.pyc b/y/newone/geo/__pycache__/urls.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..122564b418dfb2dfd98d91a917015bc806fe2d7d Binary files /dev/null and b/y/newone/geo/__pycache__/urls.cpython-39.pyc differ diff --git a/y/newone/geo/__pycache__/wsgi.cpython-310.pyc b/y/newone/geo/__pycache__/wsgi.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4ff74395b0654ff647f1afdc2b7862a0526afe91 Binary files /dev/null and b/y/newone/geo/__pycache__/wsgi.cpython-310.pyc differ diff --git a/y/newone/geo/__pycache__/wsgi.cpython-39.pyc b/y/newone/geo/__pycache__/wsgi.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2012acafcbe918d99899e04b226e657033e4f5f0 Binary files /dev/null and b/y/newone/geo/__pycache__/wsgi.cpython-39.pyc differ diff --git a/y/newone/geo/asgi.py b/y/newone/geo/asgi.py new file mode 100644 index 0000000000000000000000000000000000000000..02da638b292a674e54a5fdf820a809b142078d5c --- /dev/null +++ b/y/newone/geo/asgi.py @@ -0,0 +1,16 @@ +""" +ASGI config for geo project. + +It exposes the ASGI callable as a module-level variable named ``application``. + +For more information on this file, see +https://docs.djangoproject.com/en/4.2/howto/deployment/asgi/ +""" + +import os + +from django.core.asgi import get_asgi_application + +os.environ.setdefault("DJANGO_SETTINGS_MODULE", "geo.settings") + +application = get_asgi_application() diff --git a/y/newone/geo/geoApp/__init__.py b/y/newone/geo/geoApp/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/y/newone/geo/geoApp/admin.py b/y/newone/geo/geoApp/admin.py new file mode 100644 index 0000000000000000000000000000000000000000..ea5d68b7c457cb7f92da9c00a5c4df77ace36cef --- /dev/null +++ b/y/newone/geo/geoApp/admin.py @@ -0,0 +1,3 @@ +from django.contrib import admin + +# Register your models here. diff --git a/y/newone/geo/geoApp/apps.py b/y/newone/geo/geoApp/apps.py new file mode 100644 index 0000000000000000000000000000000000000000..7d7a1b993e238cf92776b7167ac62ccb97d6126c --- /dev/null +++ b/y/newone/geo/geoApp/apps.py @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class GeoappConfig(AppConfig): + default_auto_field = "django.db.models.BigAutoField" + name = "geoApp" diff --git a/y/newone/geo/geoApp/migrations/__init__.py b/y/newone/geo/geoApp/migrations/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/y/newone/geo/geoApp/models.py b/y/newone/geo/geoApp/models.py new file mode 100644 index 0000000000000000000000000000000000000000..fd18c6eac0dc9ffbdf025c31d136901350a0d9f2 --- /dev/null +++ b/y/newone/geo/geoApp/models.py @@ -0,0 +1,3 @@ +from django.db import models + +# Create your models here. diff --git a/y/newone/geo/geoApp/tests.py b/y/newone/geo/geoApp/tests.py new file mode 100644 index 0000000000000000000000000000000000000000..de8bdc00eb2fed53494a534d48e400faa830dbd9 --- /dev/null +++ b/y/newone/geo/geoApp/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/y/newone/geo/geoApp/views.py b/y/newone/geo/geoApp/views.py new file mode 100644 index 0000000000000000000000000000000000000000..c60c790437030748012ed3b77ed8708956de9957 --- /dev/null +++ b/y/newone/geo/geoApp/views.py @@ -0,0 +1,3 @@ +from django.shortcuts import render + +# Create your views here. diff --git a/y/newone/geo/manage.py b/y/newone/geo/manage.py new file mode 100644 index 0000000000000000000000000000000000000000..f1765afff2693b00ef8cd00241f2ff8e6c20e6a2 --- /dev/null +++ b/y/newone/geo/manage.py @@ -0,0 +1,22 @@ +#!/usr/bin/env python +"""Django's command-line utility for administrative tasks.""" +import os +import sys + + +def main(): + """Run administrative tasks.""" + os.environ.setdefault("DJANGO_SETTINGS_MODULE", "geo.settings") + try: + from django.core.management import execute_from_command_line + except ImportError as exc: + raise ImportError( + "Couldn't import Django. Are you sure it's installed and " + "available on your PYTHONPATH environment variable? Did you " + "forget to activate a virtual environment?" + ) from exc + execute_from_command_line(sys.argv) + + +if __name__ == "__main__": + main() diff --git a/y/newone/geo/settings.py b/y/newone/geo/settings.py new file mode 100644 index 0000000000000000000000000000000000000000..886d96e563889b489360653eed6fcc03ff7ce157 --- /dev/null +++ b/y/newone/geo/settings.py @@ -0,0 +1,135 @@ +""" +Django settings for geo project. + +Generated by 'django-admin startproject' using Django 4.2.2. + +For more information on this file, see +https://docs.djangoproject.com/en/4.2/topics/settings/ + +For the full list of settings and their values, see +https://docs.djangoproject.com/en/4.2/ref/settings/ +""" + +from pathlib import Path +import os + +# Build paths inside the project like this: BASE_DIR / 'subdir'. +BASE_DIR = Path(__file__).resolve().parent.parent + + +# Quick-start development settings - unsuitable for production +# See https://docs.djangoproject.com/en/4.2/howto/deployment/checklist/ + +# SECURITY WARNING: keep the secret key used in production secret! +SECRET_KEY = "django-insecure-br!o5h&&w)jchonkw*tv%#%=_ked$_kpfr!_vf$vsg7$u-l^#z" + +# SECURITY WARNING: don't run with debug turned on in production! +DEBUG = True + +ALLOWED_HOSTS = [] + + +# Application definition + +INSTALLED_APPS = [ + "django.contrib.admin", + "django.contrib.auth", + "django.contrib.contenttypes", + "django.contrib.sessions", + "django.contrib.messages", + "django.contrib.staticfiles", + "geoApp", +] + +MIDDLEWARE = [ + "django.middleware.security.SecurityMiddleware", + "django.contrib.sessions.middleware.SessionMiddleware", + "django.middleware.common.CommonMiddleware", + "django.middleware.csrf.CsrfViewMiddleware", + "django.contrib.auth.middleware.AuthenticationMiddleware", + "django.contrib.messages.middleware.MessageMiddleware", + "django.middleware.clickjacking.XFrameOptionsMiddleware", +] + +ROOT_URLCONF = "geo.urls" + +TEMPLATES = [ + { + "BACKEND": "django.template.backends.django.DjangoTemplates", + "DIRS": [ + os.path.join(BASE_DIR, 'geoApp', 'templates') + ], + "APP_DIRS": True, + "OPTIONS": { + "context_processors": [ + "django.template.context_processors.debug", + "django.template.context_processors.request", + "django.contrib.auth.context_processors.auth", + "django.contrib.messages.context_processors.messages", + ], + }, + }, +] + +WSGI_APPLICATION = "geo.wsgi.application" + + +# Database +# https://docs.djangoproject.com/en/4.2/ref/settings/#databases + +DATABASES = { + "default": { + "ENGINE": "django.db.backends.sqlite3", + "NAME": BASE_DIR / "db.sqlite3", + } +} + + +# Password validation +# https://docs.djangoproject.com/en/4.2/ref/settings/#auth-password-validators + +AUTH_PASSWORD_VALIDATORS = [ + { + "NAME": "django.contrib.auth.password_validation.UserAttributeSimilarityValidator", + }, + { + "NAME": "django.contrib.auth.password_validation.MinimumLengthValidator", + }, + { + "NAME": "django.contrib.auth.password_validation.CommonPasswordValidator", + }, + { + "NAME": "django.contrib.auth.password_validation.NumericPasswordValidator", + }, +] + + +# Internationalization +# https://docs.djangoproject.com/en/4.2/topics/i18n/ + +LANGUAGE_CODE = "en-us" + +TIME_ZONE = "UTC" + +USE_I18N = True + +USE_TZ = True + + +# Static files (CSS, JavaScript, Images) +# https://docs.djangoproject.com/en/4.2/howto/static-files/ + +STATIC_URL = "static/" + +MEDIA_URL = "media/" + +STATICFILES_DIRS = [ + os.path.join(BASE_DIR,'static') +] + +MEDIA_ROOT = os.path.join(BASE_DIR, 'media') + +# Default primary key field type +# https://docs.djangoproject.com/en/4.2/ref/settings/#default-auto-field + +DEFAULT_AUTO_FIELD = "django.db.models.BigAutoField" diff --git a/y/newone/geo/urls.py b/y/newone/geo/urls.py new file mode 100644 index 0000000000000000000000000000000000000000..0e8388224093ec308bbde484f66681e2727771a3 --- /dev/null +++ b/y/newone/geo/urls.py @@ -0,0 +1,23 @@ +""" +URL configuration for geo project. + +The `urlpatterns` list routes URLs to views. For more information please see: + https://docs.djangoproject.com/en/4.2/topics/http/urls/ +Examples: +Function views + 1. Add an import: from my_app import views + 2. Add a URL to urlpatterns: path('', views.home, name='home') +Class-based views + 1. Add an import: from other_app.views import Home + 2. Add a URL to urlpatterns: path('', Home.as_view(), name='home') +Including another URLconf + 1. Import the include() function: from django.urls import include, path + 2. Add a URL to urlpatterns: path('blog/', include('blog.urls')) +""" +from django.contrib import admin +from django.urls import path, include + +urlpatterns = [ + path("admin/", admin.site.urls), + path('', include('geoApp.urls')), +] diff --git a/y/newone/geo/wsgi.py b/y/newone/geo/wsgi.py new file mode 100644 index 0000000000000000000000000000000000000000..4c22bc48e32ebbc9c80cfb051eddf668554bd7d2 --- /dev/null +++ b/y/newone/geo/wsgi.py @@ -0,0 +1,16 @@ +""" +WSGI config for geo project. + +It exposes the WSGI callable as a module-level variable named ``application``. + +For more information on this file, see +https://docs.djangoproject.com/en/4.2/howto/deployment/wsgi/ +""" + +import os + +from django.core.wsgi import get_wsgi_application + +os.environ.setdefault("DJANGO_SETTINGS_MODULE", "geo.settings") + +application = get_wsgi_application() diff --git a/y/newone/geoApp/__init__.py b/y/newone/geoApp/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/y/newone/geoApp/__pycache__/__init__.cpython-310.pyc b/y/newone/geoApp/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e19430b71d2aa57278bf978cec9ad41f1d00b8a2 Binary files /dev/null and b/y/newone/geoApp/__pycache__/__init__.cpython-310.pyc differ diff --git a/y/newone/geoApp/__pycache__/__init__.cpython-39.pyc b/y/newone/geoApp/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2411a82eb85b9b83099fb708a0fd097aa1dffb8f Binary files /dev/null and b/y/newone/geoApp/__pycache__/__init__.cpython-39.pyc differ diff --git a/y/newone/geoApp/__pycache__/admin.cpython-310.pyc b/y/newone/geoApp/__pycache__/admin.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..387d03403aec2097d1d3c11e891abdab530a51f8 Binary files /dev/null and b/y/newone/geoApp/__pycache__/admin.cpython-310.pyc differ diff --git a/y/newone/geoApp/__pycache__/admin.cpython-39.pyc b/y/newone/geoApp/__pycache__/admin.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3f6491a036813f20f940330a7c382b96270e61e0 Binary files /dev/null and b/y/newone/geoApp/__pycache__/admin.cpython-39.pyc differ diff --git a/y/newone/geoApp/__pycache__/apps.cpython-310.pyc b/y/newone/geoApp/__pycache__/apps.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..40bba6c3f3eb7f6c8c4bd7e0f33c64d66fb1dcba Binary files /dev/null and b/y/newone/geoApp/__pycache__/apps.cpython-310.pyc differ diff --git a/y/newone/geoApp/__pycache__/apps.cpython-39.pyc b/y/newone/geoApp/__pycache__/apps.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f82bbbdb810ad79cfdb629f47886bb753fdc45f2 Binary files /dev/null and b/y/newone/geoApp/__pycache__/apps.cpython-39.pyc differ diff --git a/y/newone/geoApp/__pycache__/models.cpython-310.pyc b/y/newone/geoApp/__pycache__/models.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7e58d565081e1b47d1a630623eacbaf0175e0beb Binary files /dev/null and b/y/newone/geoApp/__pycache__/models.cpython-310.pyc differ diff --git a/y/newone/geoApp/__pycache__/models.cpython-39.pyc b/y/newone/geoApp/__pycache__/models.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..78c291d03c35e613e3cc13e4b0c83d0f264b40a7 Binary files /dev/null and b/y/newone/geoApp/__pycache__/models.cpython-39.pyc differ diff --git a/y/newone/geoApp/__pycache__/urls.cpython-310.pyc b/y/newone/geoApp/__pycache__/urls.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b4f2931e3bd8485a7c9c8dc36a6814a66f0b1155 Binary files /dev/null and b/y/newone/geoApp/__pycache__/urls.cpython-310.pyc differ diff --git a/y/newone/geoApp/__pycache__/urls.cpython-39.pyc b/y/newone/geoApp/__pycache__/urls.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0fd37b7bfc91edb605cf77651dddf4955983aaa1 Binary files /dev/null and b/y/newone/geoApp/__pycache__/urls.cpython-39.pyc differ diff --git a/y/newone/geoApp/__pycache__/views.cpython-310.pyc b/y/newone/geoApp/__pycache__/views.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3c54541350df6d5c00c09984d1eb606aedc163f6 Binary files /dev/null and b/y/newone/geoApp/__pycache__/views.cpython-310.pyc differ diff --git a/y/newone/geoApp/__pycache__/views.cpython-39.pyc b/y/newone/geoApp/__pycache__/views.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d8f90213a6929160f7ab097b817113f498f9c15c Binary files /dev/null and b/y/newone/geoApp/__pycache__/views.cpython-39.pyc differ diff --git a/y/newone/geoApp/admin.py b/y/newone/geoApp/admin.py new file mode 100644 index 0000000000000000000000000000000000000000..8c38f3f3dad51e4585f3984282c2a4bec5349c1e --- /dev/null +++ b/y/newone/geoApp/admin.py @@ -0,0 +1,3 @@ +from django.contrib import admin + +# Register your models here. diff --git a/y/newone/geoApp/apps.py b/y/newone/geoApp/apps.py new file mode 100644 index 0000000000000000000000000000000000000000..473cf4d69b63864b4264a57ae6094a0cf5590987 --- /dev/null +++ b/y/newone/geoApp/apps.py @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class GeoappConfig(AppConfig): + default_auto_field = "django.db.models.BigAutoField" + name = "geoApp" diff --git a/y/newone/geoApp/geoApp/__init__.py b/y/newone/geoApp/geoApp/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/y/newone/geoApp/geoApp/admin.py b/y/newone/geoApp/geoApp/admin.py new file mode 100644 index 0000000000000000000000000000000000000000..ea5d68b7c457cb7f92da9c00a5c4df77ace36cef --- /dev/null +++ b/y/newone/geoApp/geoApp/admin.py @@ -0,0 +1,3 @@ +from django.contrib import admin + +# Register your models here. diff --git a/y/newone/geoApp/geoApp/apps.py b/y/newone/geoApp/geoApp/apps.py new file mode 100644 index 0000000000000000000000000000000000000000..7d7a1b993e238cf92776b7167ac62ccb97d6126c --- /dev/null +++ b/y/newone/geoApp/geoApp/apps.py @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class GeoappConfig(AppConfig): + default_auto_field = "django.db.models.BigAutoField" + name = "geoApp" diff --git a/y/newone/geoApp/geoApp/migrations/__init__.py b/y/newone/geoApp/geoApp/migrations/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/y/newone/geoApp/geoApp/models.py b/y/newone/geoApp/geoApp/models.py new file mode 100644 index 0000000000000000000000000000000000000000..fd18c6eac0dc9ffbdf025c31d136901350a0d9f2 --- /dev/null +++ b/y/newone/geoApp/geoApp/models.py @@ -0,0 +1,3 @@ +from django.db import models + +# Create your models here. diff --git a/y/newone/geoApp/geoApp/tests.py b/y/newone/geoApp/geoApp/tests.py new file mode 100644 index 0000000000000000000000000000000000000000..de8bdc00eb2fed53494a534d48e400faa830dbd9 --- /dev/null +++ b/y/newone/geoApp/geoApp/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/y/newone/geoApp/geoApp/views.py b/y/newone/geoApp/geoApp/views.py new file mode 100644 index 0000000000000000000000000000000000000000..c60c790437030748012ed3b77ed8708956de9957 --- /dev/null +++ b/y/newone/geoApp/geoApp/views.py @@ -0,0 +1,3 @@ +from django.shortcuts import render + +# Create your views here. diff --git a/y/newone/geoApp/manage.py b/y/newone/geoApp/manage.py new file mode 100644 index 0000000000000000000000000000000000000000..f1765afff2693b00ef8cd00241f2ff8e6c20e6a2 --- /dev/null +++ b/y/newone/geoApp/manage.py @@ -0,0 +1,22 @@ +#!/usr/bin/env python +"""Django's command-line utility for administrative tasks.""" +import os +import sys + + +def main(): + """Run administrative tasks.""" + os.environ.setdefault("DJANGO_SETTINGS_MODULE", "geo.settings") + try: + from django.core.management import execute_from_command_line + except ImportError as exc: + raise ImportError( + "Couldn't import Django. Are you sure it's installed and " + "available on your PYTHONPATH environment variable? Did you " + "forget to activate a virtual environment?" + ) from exc + execute_from_command_line(sys.argv) + + +if __name__ == "__main__": + main() diff --git a/y/newone/geoApp/migrations/__init__.py b/y/newone/geoApp/migrations/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/y/newone/geoApp/migrations/__pycache__/__init__.cpython-310.pyc b/y/newone/geoApp/migrations/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c8f75feb399b019bde0babf16131555947bced2a Binary files /dev/null and b/y/newone/geoApp/migrations/__pycache__/__init__.cpython-310.pyc differ diff --git a/y/newone/geoApp/migrations/__pycache__/__init__.cpython-39.pyc b/y/newone/geoApp/migrations/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7f3ed68bb5c8e164b911545c0e964aa6893d1ecb Binary files /dev/null and b/y/newone/geoApp/migrations/__pycache__/__init__.cpython-39.pyc differ diff --git a/y/newone/geoApp/models.py b/y/newone/geoApp/models.py new file mode 100644 index 0000000000000000000000000000000000000000..71a836239075aa6e6e4ecb700e9c42c95c022d91 --- /dev/null +++ b/y/newone/geoApp/models.py @@ -0,0 +1,3 @@ +from django.db import models + +# Create your models here. diff --git a/y/newone/geoApp/templates/geoApp/bgdesert.jpg b/y/newone/geoApp/templates/geoApp/bgdesert.jpg new file mode 100644 index 0000000000000000000000000000000000000000..da810b4776738e3c0770315a57049cdc973ba347 Binary files /dev/null and b/y/newone/geoApp/templates/geoApp/bgdesert.jpg differ diff --git a/y/newone/geoApp/templates/geoApp/home.html b/y/newone/geoApp/templates/geoApp/home.html new file mode 100644 index 0000000000000000000000000000000000000000..0e30724409e2eeebe62bacd746005916b94adbb9 --- /dev/null +++ b/y/newone/geoApp/templates/geoApp/home.html @@ -0,0 +1,77 @@ +{% load static %} + + + + + + + + + + + + GeoGida + + + + + + + + + + + + + + + + +
+
+ +
+

Geospatial Application

+

You´ll be seeing shapefiles stored in the Database

+ + {{ my_map|safe }} + +
    +
  • Developed by Lawrence Kimutai
  • +
  • 2023
  • +
  • Contact: +254759629059
  • +
+
+
+
+ + + + + + + + diff --git a/y/newone/geoApp/templates/geoApp/home1.html b/y/newone/geoApp/templates/geoApp/home1.html new file mode 100644 index 0000000000000000000000000000000000000000..5601382e205f3fd116b49c373861f33317bfbb0f --- /dev/null +++ b/y/newone/geoApp/templates/geoApp/home1.html @@ -0,0 +1,27 @@ + + + + + + + Django and GEE + + {{ map.header.render|safe }} + + + + + +
+
+ {{map.html.render|safe}} +
+
+ {{ my_map|safe }} + + + \ No newline at end of file diff --git a/y/newone/geoApp/tests.py b/y/newone/geoApp/tests.py new file mode 100644 index 0000000000000000000000000000000000000000..7ce503c2dd97ba78597f6ff6e4393132753573f6 --- /dev/null +++ b/y/newone/geoApp/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/y/newone/geoApp/urls.py b/y/newone/geoApp/urls.py new file mode 100644 index 0000000000000000000000000000000000000000..9d22d49158430254bb9151aa7f747ae22e1e3a01 --- /dev/null +++ b/y/newone/geoApp/urls.py @@ -0,0 +1,7 @@ +from django.urls import path +from django.contrib.auth import views as auth_views +from . import views + +urlpatterns = [ + path('',views.home, name='home'), +] diff --git a/y/newone/geoApp/views3.py b/y/newone/geoApp/views3.py new file mode 100644 index 0000000000000000000000000000000000000000..a0d41b9b3e6c05545587bebfeb3a157fbcacc051 --- /dev/null +++ b/y/newone/geoApp/views3.py @@ -0,0 +1,71 @@ +from django.shortcuts import render +import os +import folium +import geopandas as gpd +from folium import GeoJson +import ee +import geemap + +def home(request): + shp_dir = os.path.join(os.getcwd(), 'media', 'shp') + + m = folium.Map(location=[25, 67], zoom_start=5) + + # Styling for different layers + style_pakistan_districts_dd = {'fillColor': '#228B22', 'color': '#228B22'} + # Define other styles as needed... + + # Load GeoJSON data from shapefiles + layers = [ + ('Pakistan_Districts', 'District_Boundary.shp', style_pakistan_districts_dd), + # Add other layers here... + ] + + for name, shapefile, style in layers: + data = gpd.read_file(os.path.join(shp_dir, shapefile)) + data_geojson = data.to_crs("EPSG:4326").to_json() + + # Create a style function that takes feature and style as arguments + def style_function(feature, style=style): + return { + 'fillColor': style['fillColor'], + 'color': style['color'] + } + + GeoJson(data_geojson, name=name, style_function=style_function).add_to(m) + + # Earth Engine and geemap code (uncommented if authentication is resolved) + # Authenticate the API using your credentials (only need to run this once) + ee.Authenticate() + + # Initialize the Earth Engine API + ee.Initialize() + + # Define the region of interest (ROI) as a geometry + roi = ee.Geometry.Rectangle([67.56084171593015, 26.467647606743032, + 67.71053043663328, 28.467647606743032]) + + # Load Sentinel-2 dataset + s2_dataset = ee.ImageCollection('COPERNICUS/S2').filterBounds(roi) \ + .filterDate('2019-01-01', '2020-01-01') # Define the date range + + # Get the first image in the collection + image = s2_dataset.first() + + # Select the bands you need + bands = ['B2', 'B3', 'B4'] # Customize according to your needs + + # Select the region and scale of the image + image = image.select(bands).clip(roi) # Adjust scale as needed + + # Use geemap to display the image (optional) + Map = geemap.Map() + Map.centerObject(roi, zoom=10) + Map.addLayer(image, {'bands': bands, 'min': 0, 'max': 3000}, 'Sentinel-2 Image') + # Map + + folium.LayerControl().add_to(m) + + m = m._repr_html_() + context = {'my_map': m} + return render(request, 'geoApp/home.html', context) diff --git a/y/newone/geoApp/views4.py b/y/newone/geoApp/views4.py new file mode 100644 index 0000000000000000000000000000000000000000..8414d12391c0c79834267460b95c8b984fa68430 --- /dev/null +++ b/y/newone/geoApp/views4.py @@ -0,0 +1,52 @@ +from django.shortcuts import render, redirect +import os +import folium +import geopandas as gpd +from folium import GeoJson + +# Create your views here. +def home(request): + shp_dir = os.path.join(os.getcwd(), 'media', 'shp') + + m = folium.Map(location=[0.0236, 37.9062], zoom_start=6) + + #styling + style_Kenya_county_dd = {'fillColor': '#228B22', 'color': '#228B22'} + style_kenya_wetlands = {'color': 'blue'} + style_kenya_all_towns = {'color': 'red'} + style_kenya_highland_roads = {'color': 'yellow'} + style_kenya_forestranges = {'color': 'green'} + + Kenya_county_dd = gpd.read_file(os.path.join(shp_dir, 'Kenya_county_dd.shp')) + Kenya_county_dd_geojson = Kenya_county_dd.to_crs("EPSG:4326").to_json() + + kenya_wetlands = gpd.read_file(os.path.join(shp_dir, 'kenya_wetlands.shp')) + kenya_wetlands_geojson = kenya_wetlands.to_crs("EPSG:4326").to_json() + + kenya_all_towns = gpd.read_file(os.path.join(shp_dir, 'kenya_all_towns.shp')) + kenya_all_towns_geojson = kenya_all_towns.to_crs("EPSG:4326").to_json() + + kenya_highland_roads = gpd.read_file(os.path.join(shp_dir, 'kenya_highland_roads.shp')) + kenya_highland_roads_geojson = kenya_highland_roads.to_crs("EPSG:4326").to_json() + + kenya_forestranges = gpd.read_file(os.path.join(shp_dir, 'kenya_forestranges.shp')) + kenya_forestranges_geojson = kenya_forestranges.to_crs("EPSG:4326").to_json() + + GeoJson(Kenya_county_dd_geojson, name='Kenya_counties', style_function=lambda x: style_Kenya_county_dd).add_to(m) + GeoJson(kenya_wetlands_geojson, name='kenya_wetlands', style_function=lambda x: style_kenya_wetlands).add_to(m) + + # Create a feature group for kenya_all_towns layer + kenya_all_towns_fg = folium.FeatureGroup(name='kenya_all_towns') + # Iterate over the points and add colored circles to the feature group + for _, row in kenya_all_towns.iterrows(): + folium.CircleMarker(location=[row['geometry'].y, row['geometry'].x], radius=2, fill=True, color='red', fill_opacity=1).add_to(kenya_all_towns_fg) + kenya_all_towns_fg.add_to(m) + + GeoJson(kenya_highland_roads_geojson, name='kenya_highland_roads', style_function=lambda x: style_kenya_highland_roads).add_to(m) + GeoJson(kenya_forestranges_geojson, name='kenya_forestranges', style_function=lambda x: style_kenya_forestranges).add_to(m) + + folium.LayerControl().add_to(m) + + m = m._repr_html_() + context = {'my_map': m} + return render(request, 'geoApp/home.html', context) diff --git a/y/newone/geoApp/views_org.py b/y/newone/geoApp/views_org.py new file mode 100644 index 0000000000000000000000000000000000000000..8414d12391c0c79834267460b95c8b984fa68430 --- /dev/null +++ b/y/newone/geoApp/views_org.py @@ -0,0 +1,52 @@ +from django.shortcuts import render, redirect +import os +import folium +import geopandas as gpd +from folium import GeoJson + +# Create your views here. +def home(request): + shp_dir = os.path.join(os.getcwd(), 'media', 'shp') + + m = folium.Map(location=[0.0236, 37.9062], zoom_start=6) + + #styling + style_Kenya_county_dd = {'fillColor': '#228B22', 'color': '#228B22'} + style_kenya_wetlands = {'color': 'blue'} + style_kenya_all_towns = {'color': 'red'} + style_kenya_highland_roads = {'color': 'yellow'} + style_kenya_forestranges = {'color': 'green'} + + Kenya_county_dd = gpd.read_file(os.path.join(shp_dir, 'Kenya_county_dd.shp')) + Kenya_county_dd_geojson = Kenya_county_dd.to_crs("EPSG:4326").to_json() + + kenya_wetlands = gpd.read_file(os.path.join(shp_dir, 'kenya_wetlands.shp')) + kenya_wetlands_geojson = kenya_wetlands.to_crs("EPSG:4326").to_json() + + kenya_all_towns = gpd.read_file(os.path.join(shp_dir, 'kenya_all_towns.shp')) + kenya_all_towns_geojson = kenya_all_towns.to_crs("EPSG:4326").to_json() + + kenya_highland_roads = gpd.read_file(os.path.join(shp_dir, 'kenya_highland_roads.shp')) + kenya_highland_roads_geojson = kenya_highland_roads.to_crs("EPSG:4326").to_json() + + kenya_forestranges = gpd.read_file(os.path.join(shp_dir, 'kenya_forestranges.shp')) + kenya_forestranges_geojson = kenya_forestranges.to_crs("EPSG:4326").to_json() + + GeoJson(Kenya_county_dd_geojson, name='Kenya_counties', style_function=lambda x: style_Kenya_county_dd).add_to(m) + GeoJson(kenya_wetlands_geojson, name='kenya_wetlands', style_function=lambda x: style_kenya_wetlands).add_to(m) + + # Create a feature group for kenya_all_towns layer + kenya_all_towns_fg = folium.FeatureGroup(name='kenya_all_towns') + # Iterate over the points and add colored circles to the feature group + for _, row in kenya_all_towns.iterrows(): + folium.CircleMarker(location=[row['geometry'].y, row['geometry'].x], radius=2, fill=True, color='red', fill_opacity=1).add_to(kenya_all_towns_fg) + kenya_all_towns_fg.add_to(m) + + GeoJson(kenya_highland_roads_geojson, name='kenya_highland_roads', style_function=lambda x: style_kenya_highland_roads).add_to(m) + GeoJson(kenya_forestranges_geojson, name='kenya_forestranges', style_function=lambda x: style_kenya_forestranges).add_to(m) + + folium.LayerControl().add_to(m) + + m = m._repr_html_() + context = {'my_map': m} + return render(request, 'geoApp/home.html', context) diff --git a/y/newone/manage.py b/y/newone/manage.py new file mode 100644 index 0000000000000000000000000000000000000000..f1765afff2693b00ef8cd00241f2ff8e6c20e6a2 --- /dev/null +++ b/y/newone/manage.py @@ -0,0 +1,22 @@ +#!/usr/bin/env python +"""Django's command-line utility for administrative tasks.""" +import os +import sys + + +def main(): + """Run administrative tasks.""" + os.environ.setdefault("DJANGO_SETTINGS_MODULE", "geo.settings") + try: + from django.core.management import execute_from_command_line + except ImportError as exc: + raise ImportError( + "Couldn't import Django. Are you sure it's installed and " + "available on your PYTHONPATH environment variable? Did you " + "forget to activate a virtual environment?" + ) from exc + execute_from_command_line(sys.argv) + + +if __name__ == "__main__": + main() diff --git a/y/requirements.txt b/y/requirements.txt new file mode 100644 index 0000000000000000000000000000000000000000..af44ec6d2ba7a6da8f0591366782b53767cc8940 --- /dev/null +++ b/y/requirements.txt @@ -0,0 +1,14 @@ +streamlit==1.15.2 +folium==0.12.1.post1 +geopandas==0.12.2 +geemap==0.11.3 +earthengine-api==0.1.328 +pandas==1.5.3 +google-auth==2.17.3 +shapely==2.0.1 +fiona==1.8.22 +streamlit +folium +earthengine-api +pandas +numpy \ No newline at end of file diff --git a/y/satellite_image.png b/y/satellite_image.png new file mode 100644 index 0000000000000000000000000000000000000000..f63e3b64b7148340a81b13e9f819817c49be1fe8 Binary files /dev/null and b/y/satellite_image.png differ diff --git a/y/static/chart.txt b/y/static/chart.txt new file mode 100644 index 0000000000000000000000000000000000000000..7e4df87fad195871890242a1d10775ace992c234 --- /dev/null +++ b/y/static/chart.txt @@ -0,0 +1 @@ +{"urban_dates": ["2017-01-04T00:00:00", "2017-01-05T00:00:00", "2017-01-06T00:00:00", "2017-01-07T00:00:00", "2017-01-16T00:00:00", "2017-01-17T00:00:00", "2017-01-18T00:00:00", "2017-01-19T00:00:00", "2017-01-20T00:00:00", "2017-01-21T00:00:00", "2017-01-23T00:00:00", "2017-01-28T00:00:00", "2017-02-01T00:00:00", "2017-02-10T00:00:00", "2017-02-11T00:00:00", "2017-02-13T00:00:00", "2017-02-16T00:00:00", "2017-02-17T00:00:00", "2017-02-18T00:00:00", "2017-02-19T00:00:00", "2017-02-20T00:00:00", "2017-02-25T00:00:00", "2017-02-26T00:00:00", "2017-02-27T00:00:00", "2017-03-06T00:00:00", "2017-03-10T00:00:00", "2017-03-11T00:00:00", "2017-03-13T00:00:00", "2017-03-14T00:00:00", "2017-03-15T00:00:00", "2017-03-16T00:00:00", "2017-03-17T00:00:00", "2017-03-25T00:00:00", "2017-03-26T00:00:00", "2017-03-27T00:00:00", "2017-03-28T00:00:00", "2017-03-29T00:00:00", "2017-03-30T00:00:00", "2017-04-03T00:00:00", "2017-04-04T00:00:00", "2017-04-05T00:00:00", "2017-04-06T00:00:00", "2017-04-07T00:00:00", "2017-04-08T00:00:00", "2017-04-09T00:00:00", "2017-04-10T00:00:00", "2017-04-11T00:00:00", "2017-04-12T00:00:00", "2017-04-13T00:00:00", "2017-04-14T00:00:00", "2017-04-17T00:00:00", "2017-04-18T00:00:00", "2017-04-19T00:00:00", "2017-04-20T00:00:00", "2017-04-21T00:00:00", "2017-04-22T00:00:00", "2017-04-23T00:00:00", "2017-04-29T00:00:00", "2017-04-30T00:00:00", "2017-05-05T00:00:00", "2017-05-10T00:00:00", "2017-05-14T00:00:00", "2017-05-15T00:00:00", "2017-05-16T00:00:00", "2017-05-17T00:00:00", "2017-05-18T00:00:00", "2017-05-22T00:00:00", "2017-05-24T00:00:00", "2017-05-25T00:00:00", "2017-05-26T00:00:00", "2017-05-27T00:00:00", "2017-05-28T00:00:00", "2017-05-29T00:00:00", "2017-06-02T00:00:00", "2017-06-03T00:00:00", "2017-06-06T00:00:00", "2017-06-07T00:00:00", "2017-06-08T00:00:00", "2017-06-10T00:00:00", "2017-06-11T00:00:00", "2017-06-12T00:00:00", "2017-06-13T00:00:00", "2017-06-16T00:00:00", "2017-06-17T00:00:00", "2017-06-18T00:00:00", "2017-06-19T00:00:00", "2017-06-20T00:00:00", "2017-06-21T00:00:00", "2017-06-22T00:00:00", "2017-06-23T00:00:00", "2017-06-25T00:00:00", "2017-07-03T00:00:00", "2017-07-04T00:00:00", "2017-07-05T00:00:00", "2017-07-06T00:00:00", "2017-07-07T00:00:00", "2017-07-13T00:00:00", "2017-07-15T00:00:00", "2017-07-16T00:00:00", "2017-07-18T00:00:00", "2017-07-21T00:00:00", "2017-07-24T00:00:00", "2017-07-29T00:00:00", "2017-07-30T00:00:00", "2017-08-02T00:00:00", "2017-08-03T00:00:00", "2017-08-04T00:00:00", "2017-08-05T00:00:00", "2017-08-06T00:00:00", "2017-08-07T00:00:00", "2017-08-14T00:00:00", "2017-08-15T00:00:00", "2017-08-17T00:00:00", "2017-08-18T00:00:00", "2017-08-19T00:00:00", "2017-08-20T00:00:00", "2017-08-21T00:00:00", "2017-08-22T00:00:00", "2017-08-23T00:00:00", "2017-08-25T00:00:00", "2017-08-26T00:00:00", "2017-08-29T00:00:00", "2017-09-03T00:00:00", "2017-09-04T00:00:00", "2017-09-06T00:00:00", "2017-09-08T00:00:00", "2017-09-13T00:00:00", "2017-09-20T00:00:00", "2017-09-21T00:00:00", "2017-09-22T00:00:00", "2017-09-23T00:00:00", "2017-09-24T00:00:00", "2017-09-26T00:00:00", "2017-09-27T00:00:00", "2017-09-29T00:00:00", "2017-10-05T00:00:00", "2017-10-06T00:00:00", "2017-10-07T00:00:00", "2017-10-09T00:00:00", "2017-10-10T00:00:00", "2017-10-11T00:00:00", "2017-10-12T00:00:00", "2017-10-13T00:00:00", "2017-10-14T00:00:00", "2017-10-15T00:00:00", "2017-10-16T00:00:00", "2017-10-17T00:00:00", "2017-10-18T00:00:00", "2017-10-26T00:00:00", "2017-10-28T00:00:00", "2017-10-30T00:00:00", "2017-10-31T00:00:00", "2017-11-02T00:00:00", "2017-11-03T00:00:00", "2017-11-13T00:00:00", "2017-11-14T00:00:00", "2017-11-17T00:00:00", "2017-11-20T00:00:00", "2017-11-21T00:00:00", "2017-11-22T00:00:00", "2017-11-27T00:00:00", "2017-12-07T00:00:00", "2017-12-08T00:00:00", "2017-12-14T00:00:00", "2017-12-16T00:00:00", "2017-12-25T00:00:00", "2018-01-06T00:00:00", "2018-01-17T00:00:00", "2018-01-19T00:00:00", "2018-01-23T00:00:00", "2018-01-24T00:00:00", "2018-01-28T00:00:00", "2018-01-31T00:00:00", "2018-02-01T00:00:00", "2018-02-02T00:00:00", "2018-02-06T00:00:00", "2018-02-09T00:00:00", "2018-02-10T00:00:00", "2018-02-13T00:00:00", "2018-02-20T00:00:00", "2018-02-21T00:00:00", "2018-02-23T00:00:00", "2018-02-26T00:00:00", "2018-02-27T00:00:00", "2018-03-04T00:00:00", "2018-03-06T00:00:00", "2018-03-14T00:00:00", "2018-03-16T00:00:00", "2018-03-19T00:00:00", "2018-03-21T00:00:00", "2018-03-22T00:00:00", "2018-03-24T00:00:00", "2018-03-31T00:00:00", "2018-04-01T00:00:00", "2018-04-06T00:00:00", "2018-04-07T00:00:00", "2018-04-12T00:00:00", "2018-04-16T00:00:00", "2018-04-17T00:00:00", "2018-04-18T00:00:00", "2018-04-19T00:00:00", "2018-04-20T00:00:00", "2018-04-21T00:00:00", "2018-04-22T00:00:00", "2018-04-24T00:00:00", "2018-04-25T00:00:00", "2018-04-27T00:00:00", "2018-04-30T00:00:00", "2018-05-02T00:00:00", "2018-05-04T00:00:00", "2018-05-05T00:00:00", "2018-05-06T00:00:00", "2018-05-07T00:00:00", "2018-05-09T00:00:00", "2018-05-11T00:00:00", "2018-05-12T00:00:00", "2018-05-18T00:00:00", "2018-05-19T00:00:00", "2018-05-20T00:00:00", "2018-05-21T00:00:00", "2018-05-22T00:00:00", "2018-05-24T00:00:00", "2018-05-25T00:00:00", "2018-06-09T00:00:00", "2018-06-10T00:00:00", "2018-06-14T00:00:00", "2018-06-16T00:00:00", "2018-06-19T00:00:00", "2018-06-20T00:00:00", "2018-06-21T00:00:00", "2018-06-22T00:00:00", "2018-06-23T00:00:00", "2018-06-24T00:00:00", "2018-06-25T00:00:00", "2018-06-26T00:00:00", "2018-06-27T00:00:00", "2018-06-28T00:00:00", "2018-06-29T00:00:00", "2018-06-30T00:00:00", "2018-07-01T00:00:00", "2018-07-02T00:00:00", "2018-07-03T00:00:00", "2018-07-04T00:00:00", "2018-07-07T00:00:00", "2018-07-08T00:00:00", "2018-07-09T00:00:00", "2018-07-10T00:00:00", "2018-07-11T00:00:00", "2018-07-13T00:00:00", "2018-07-14T00:00:00", "2018-07-15T00:00:00", "2018-07-16T00:00:00", "2018-07-17T00:00:00", "2018-07-18T00:00:00", "2018-07-19T00:00:00", "2018-07-20T00:00:00", "2018-07-22T00:00:00", "2018-07-23T00:00:00", "2018-07-24T00:00:00", "2018-07-25T00:00:00", "2018-07-26T00:00:00", "2018-07-27T00:00:00", "2018-07-29T00:00:00", "2018-07-30T00:00:00", "2018-07-31T00:00:00", "2018-08-01T00:00:00", "2018-08-02T00:00:00", "2018-08-03T00:00:00", "2018-08-04T00:00:00", "2018-08-05T00:00:00", "2018-08-06T00:00:00", "2018-08-07T00:00:00", "2018-08-08T00:00:00", "2018-08-11T00:00:00", "2018-08-12T00:00:00", "2018-08-14T00:00:00", "2018-08-15T00:00:00", "2018-08-16T00:00:00", "2018-08-18T00:00:00", "2018-08-19T00:00:00", "2018-08-20T00:00:00", "2018-08-21T00:00:00", "2018-08-22T00:00:00", "2018-08-23T00:00:00", "2018-08-26T00:00:00", "2018-08-27T00:00:00", "2018-08-28T00:00:00", "2018-08-31T00:00:00", "2018-09-01T00:00:00", "2018-09-02T00:00:00", "2018-09-04T00:00:00", "2018-09-05T00:00:00", "2018-09-07T00:00:00", "2018-09-08T00:00:00", "2018-09-10T00:00:00", "2018-09-11T00:00:00", "2018-09-12T00:00:00", "2018-09-15T00:00:00", "2018-09-17T00:00:00", "2018-09-18T00:00:00", "2018-09-19T00:00:00", "2018-09-20T00:00:00", "2018-09-22T00:00:00", "2018-09-23T00:00:00", "2018-09-25T00:00:00", "2018-09-26T00:00:00", "2018-09-27T00:00:00", "2018-09-28T00:00:00", "2018-10-05T00:00:00", "2018-10-06T00:00:00", "2018-10-10T00:00:00", "2018-10-11T00:00:00", "2018-10-12T00:00:00", "2018-10-13T00:00:00", "2018-10-15T00:00:00", "2018-10-16T00:00:00", "2018-10-17T00:00:00", "2018-10-18T00:00:00", "2018-10-19T00:00:00", "2018-10-20T00:00:00", "2018-10-22T00:00:00", "2018-10-23T00:00:00", "2018-10-24T00:00:00", "2018-10-26T00:00:00", "2018-11-02T00:00:00", "2018-11-04T00:00:00", "2018-11-05T00:00:00", "2018-11-12T00:00:00", "2018-11-15T00:00:00", "2018-11-24T00:00:00", "2018-12-07T00:00:00", "2018-12-09T00:00:00", "2018-12-10T00:00:00", "2018-12-11T00:00:00", "2018-12-17T00:00:00", "2018-12-18T00:00:00", "2018-12-20T00:00:00", "2019-01-03T00:00:00", "2019-01-04T00:00:00", "2019-01-10T00:00:00", "2019-01-11T00:00:00", "2019-01-15T00:00:00", "2019-01-16T00:00:00", "2019-01-19T00:00:00", "2019-01-20T00:00:00", "2019-01-22T00:00:00", "2019-01-27T00:00:00", "2019-01-29T00:00:00", "2019-02-04T00:00:00", "2019-02-05T00:00:00", "2019-02-06T00:00:00", "2019-02-12T00:00:00", "2019-02-13T00:00:00", "2019-02-14T00:00:00", "2019-02-15T00:00:00", "2019-02-16T00:00:00", "2019-02-17T00:00:00", "2019-02-18T00:00:00", "2019-02-19T00:00:00", "2019-02-20T00:00:00", "2019-02-21T00:00:00", "2019-02-22T00:00:00", "2019-02-23T00:00:00", "2019-02-25T00:00:00", "2019-02-26T00:00:00", "2019-02-27T00:00:00", "2019-02-28T00:00:00", "2019-03-04T00:00:00", "2019-03-05T00:00:00", "2019-03-13T00:00:00", "2019-03-16T00:00:00", "2019-03-19T00:00:00", "2019-03-20T00:00:00", "2019-03-21T00:00:00", "2019-03-22T00:00:00", "2019-03-23T00:00:00", "2019-03-24T00:00:00", "2019-03-25T00:00:00", "2019-03-26T00:00:00", "2019-03-27T00:00:00", "2019-03-28T00:00:00", "2019-03-29T00:00:00", "2019-03-30T00:00:00", "2019-03-31T00:00:00", "2019-04-01T00:00:00", "2019-04-02T00:00:00", "2019-04-04T00:00:00", "2019-04-09T00:00:00", "2019-04-12T00:00:00", "2019-04-13T00:00:00", "2019-04-14T00:00:00", "2019-04-15T00:00:00", "2019-04-17T00:00:00", "2019-04-19T00:00:00", "2019-04-20T00:00:00", "2019-04-26T00:00:00", "2019-04-30T00:00:00", "2019-05-01T00:00:00", "2019-05-06T00:00:00", "2019-05-07T00:00:00", "2019-05-09T00:00:00", "2019-05-11T00:00:00", "2019-05-13T00:00:00", "2019-05-14T00:00:00", "2019-05-15T00:00:00", "2019-05-16T00:00:00", "2019-05-21T00:00:00", "2019-05-22T00:00:00", "2019-05-23T00:00:00", "2019-05-24T00:00:00", "2019-05-25T00:00:00", "2019-05-26T00:00:00", "2019-05-30T00:00:00", "2019-05-31T00:00:00", "2019-06-01T00:00:00", "2019-06-02T00:00:00", "2019-06-04T00:00:00", "2019-06-08T00:00:00", "2019-06-13T00:00:00", "2019-06-16T00:00:00", "2019-06-17T00:00:00", "2019-06-19T00:00:00", "2019-06-23T00:00:00", "2019-06-26T00:00:00", "2019-06-27T00:00:00", "2019-06-28T00:00:00", "2019-06-29T00:00:00", "2019-06-30T00:00:00", "2019-07-01T00:00:00", "2019-07-03T00:00:00", "2019-07-04T00:00:00", "2019-07-05T00:00:00", "2019-07-07T00:00:00", "2019-07-08T00:00:00", "2019-07-09T00:00:00", "2019-07-10T00:00:00", "2019-07-12T00:00:00", "2019-07-13T00:00:00", "2019-07-14T00:00:00", "2019-07-15T00:00:00", "2019-07-16T00:00:00", "2019-07-17T00:00:00", "2019-07-19T00:00:00", "2019-07-21T00:00:00", "2019-07-22T00:00:00", "2019-07-23T00:00:00", "2019-07-24T00:00:00", "2019-07-25T00:00:00", "2019-07-26T00:00:00", "2019-07-29T00:00:00", "2019-07-30T00:00:00", "2019-08-01T00:00:00", "2019-08-02T00:00:00", "2019-08-03T00:00:00", "2019-08-04T00:00:00", "2019-08-05T00:00:00", "2019-08-06T00:00:00", "2019-08-08T00:00:00", "2019-08-09T00:00:00", "2019-08-10T00:00:00", "2019-08-11T00:00:00", "2019-08-14T00:00:00", "2019-08-17T00:00:00", "2019-08-18T00:00:00", "2019-08-21T00:00:00", "2019-08-22T00:00:00", "2019-08-23T00:00:00", "2019-08-24T00:00:00", "2019-08-25T00:00:00", "2019-08-26T00:00:00", "2019-08-28T00:00:00", "2019-08-29T00:00:00", "2019-08-30T00:00:00", "2019-08-31T00:00:00", "2019-09-02T00:00:00", "2019-09-03T00:00:00", "2019-09-04T00:00:00", "2019-09-09T00:00:00", "2019-09-12T00:00:00", "2019-09-13T00:00:00", "2019-09-14T00:00:00", "2019-09-15T00:00:00", "2019-09-16T00:00:00", "2019-09-17T00:00:00", "2019-09-19T00:00:00", "2019-09-20T00:00:00", "2019-09-21T00:00:00", "2019-09-22T00:00:00", "2019-09-26T00:00:00", "2019-09-27T00:00:00", "2019-09-29T00:00:00", "2019-09-30T00:00:00", "2019-10-02T00:00:00", "2019-10-03T00:00:00", "2019-10-07T00:00:00", "2019-10-08T00:00:00", "2019-10-11T00:00:00", "2019-10-13T00:00:00", "2019-10-14T00:00:00", "2019-10-16T00:00:00", "2019-10-24T00:00:00", "2019-10-25T00:00:00", "2019-10-26T00:00:00", "2019-10-27T00:00:00", "2019-11-04T00:00:00", "2019-11-08T00:00:00", "2019-11-12T00:00:00", "2019-11-17T00:00:00", "2019-11-18T00:00:00", "2019-11-20T00:00:00", "2019-11-21T00:00:00", "2019-11-25T00:00:00", "2019-11-26T00:00:00", "2019-11-28T00:00:00", "2019-12-04T00:00:00", "2019-12-06T00:00:00", "2019-12-09T00:00:00", "2019-12-10T00:00:00", "2019-12-12T00:00:00", "2019-12-13T00:00:00", "2019-12-19T00:00:00", "2019-12-21T00:00:00", "2019-12-22T00:00:00", "2019-12-30T00:00:00", "2019-12-31T00:00:00"], "urban_observed": [13808, 13777, 13702, 13652, 13774, 13663, 13673, 13651, 13700, 13792, 13561, 13926, 14337, 14088, 14185, 14057, 14382, 14184, 14313, 14258, 14248, 14190, 13976, 14466, 14086, 14420, 14409, 14582, 14540, 14337, 14720, 14773, 14524, 14415, 14777, 14532, 14567, 14836, 14769, 14712, 14832, 14614, 14834, 15003, 14985, 15207, 14664, 14914, 14927, 15020, 14613, 14622, 14659, 14457, 14940, 14896, 14942, 14732, 14476, 14704, 14158, 15028, 14985, 15345, 15259, 15223, 14779, 15135, 15281, 15376, 15331, 15526, 15275, 15329, 15400, 14862, 14856, 15364, 15402, 15438, 15355, 15488, 15197, 15372, 15391, 15562, 15631, 15418, 15751, 15348, 15156, 15175, 15367, 15524, 15608, 15460, 15341, 15369, 15190, 15431, 15369, 15059, 15313, 14650, 15449, 15398, 15420, 15369, 15290, 15430, 15317, 15000, 15290, 15498, 15090, 15093, 15226, 15381, 15379, 15409, 15272, 15454, 14956, 15057, 14856, 14995, 14608, 14539, 14851, 14448, 14927, 14990, 14838, 14711, 14965, 14826, 14456, 14626, 14614, 14760, 14666, 14822, 14411, 14759, 14862, 14852, 14780, 14780, 14691, 14485, 14380, 14307, 14170, 14332, 14022, 14101, 14035, 13969, 14045, 14065, 13681, 13988, 14055, 14051, 13575, 14010, 14144, 13991, 14115, 14265, 14064, 14186, 14184, 14118, 13975, 13928, 13704, 13993, 13931, 14111, 13880, 13692, 13781, 13408, 14371, 14212, 14374, 14503, 14325, 14187, 13808, 14487, 14322, 14444, 14839, 14588, 14123, 14349, 15110, 14977, 15206, 15258, 15170, 15317, 15266, 14936, 15088, 14676, 14492, 14902, 15105, 15293, 15210, 14889, 15029, 15106, 14880, 15246, 15176, 15126, 15247, 15225, 14852, 15348, 15008, 14899, 15028, 15199, 15586, 15402, 14941, 15245, 15338, 15348, 15209, 15544, 15308, 15437, 15547, 15485, 15594, 15285, 15493, 15395, 15382, 15432, 15157, 15354, 15610, 15525, 15395, 15373, 15387, 15588, 15377, 15148, 15376, 15399, 15498, 15572, 15497, 15769, 15571, 15220, 15584, 15352, 15464, 15628, 15298, 15682, 15372, 15631, 15298, 15053, 15423, 15026, 15134, 15160, 15192, 15393, 15274, 15468, 15324, 15514, 15039, 15183, 15427, 14763, 15040, 15075, 15229, 14974, 14683, 15147, 15312, 15363, 15051, 15166, 15116, 15269, 15212, 15350, 14922, 15130, 14746, 14877, 15053, 15009, 14852, 14617, 14635, 14629, 14895, 14944, 14720, 14767, 14775, 14763, 14443, 14714, 14566, 14506, 14619, 14386, 14400, 14266, 14299, 14548, 14427, 14199, 14333, 14198, 14032, 14082, 14115, 13850, 13836, 13870, 13840, 13846, 13800, 14015, 13930, 13789, 13828, 13680, 14064, 13729, 13944, 13991, 13937, 13829, 14139, 14220, 14249, 14338, 14353, 14138, 14133, 14292, 14368, 14496, 14396, 14307, 14361, 14498, 14568, 14384, 14543, 14171, 14582, 14416, 14500, 14622, 14722, 14811, 14877, 14517, 14531, 14559, 14678, 14736, 14701, 14899, 14771, 14786, 14330, 14717, 14657, 14661, 14539, 14610, 14770, 15038, 15141, 14610, 14728, 14953, 14777, 14478, 14525, 14888, 14925, 14831, 14904, 14868, 14702, 15200, 15149, 15285, 15213, 15114, 15092, 15321, 15473, 15387, 14835, 15230, 15110, 15150, 15299, 15454, 15285, 15576, 15559, 15774, 15494, 15784, 15540, 15395, 15408, 15626, 15606, 15364, 15302, 15352, 15542, 15192, 15456, 15009, 15546, 14905, 15483, 15384, 15171, 15805, 15525, 15777, 15658, 15218, 15382, 15313, 15319, 15453, 15511, 15463, 15364, 15436, 15365, 15211, 15182, 15126, 15375, 15255, 14921, 15161, 15082, 15352, 15258, 15450, 15323, 15297, 15143, 15403, 15155, 15088, 15277, 14646, 15166, 15177, 15107, 14881, 15271, 15137, 14874, 14928, 15101, 14932, 14826, 14934, 14929, 14809, 14687, 14475, 14468, 14637, 14707, 14914, 14909, 14565, 14247, 14509, 14648, 14290, 14085, 14240, 14203, 13787, 14034, 14102, 14105, 13923, 14047, 14281, 13905, 13836, 13876, 14045, 13992, 14127, 14399, 14251, 14141, 13922, 13772], "urban_fitted": [13940.388302793981, 13940.08964310477, 13940.00854102062, 13940.145020341273, 13951.136845179783, 13953.43642114117, 13955.949638040598, 13958.6757583642, 13961.61398212075, 13964.763447076382, 13971.692341972548, 13992.63908201807, 14013.041427307979, 14070.247571024449, 14077.527142762869, 14092.615776024768, 14116.538860434606, 14124.847947414954, 14133.320373914505, 14141.953653664756, 14150.74525319424, 14196.986166625791, 14206.67193393246, 14216.497029172227, 14288.926751915646, 14332.916615536153, 14344.177931423224, 14366.994158167145, 14378.542373508262, 14390.179480693672, 14401.902064766275, 14413.706685685536, 14510.676702884748, 14523.061219828869, 14535.492218966174, 14547.966052368813, 14560.479059538926, 14573.027568482947, 14623.50284020507, 14636.17345135801, 14648.857351453611, 14661.5508183492, 14674.250127094518, 14686.951551025157, 14699.651362855875, 14712.34583577451, 14725.031244535747, 14737.703866554064, 14750.359982996257, 14762.995879872879, 14800.745208743254, 14813.263222441901, 14825.74255736003, 14838.179551385463, 14850.57055483096, 14862.911931505574, 14875.200059781417, 14947.609903684212, 14959.425332859566, 15017.210432168016, 15072.53377860802, 15114.746724852841, 15124.989738739465, 15135.102596414663, 15145.082330218636, 15154.926011557436, 15192.883055478222, 15210.972132921048, 15219.784905365219, 15228.43970356566, 15236.933987736136, 15245.265265193926, 15253.431091091375, 15284.392696124682, 15291.696315147326, 15312.524400814678, 15319.099380962112, 15325.487242623565, 15337.694167772159, 15343.509649086765, 15349.130848621668, 15354.556116812659, 15369.640702919689, 15374.266906936416, 15378.68980332934, 15382.908094181275, 15386.920541617412, 15390.7259681685, 15394.32325711642, 15397.711352821932, 15403.856049183474, 15419.898678080584, 15420.933718262453, 15421.751756252404, 15422.35255199382, 15422.735929180712, 15420.468571206775, 15417.975783374819, 15416.404989432993, 15412.616906142166, 15405.327352372826, 15396.126370646896, 15376.612030096714, 15372.092289791466, 15357.322654345082, 15352.000786855851, 15346.482145827507, 15340.76835072804, 15334.861078294132, 15328.762062039244, 15280.85741690882, 15273.293494347521, 15257.646890176167, 15249.568800126543, 15241.323995626515, 15232.914896147893, 15224.3439693756, 15215.613730483452, 15206.726741395974, 15188.49298956313, 15179.151577587356, 15150.262218884074, 15099.401532755906, 15088.849323128254, 15067.389383572468, 15045.476464652047, 14988.88239576844, 14905.960061991434, 14893.822361877808, 14881.622342572266, 14869.363584220671, 14857.049684206224, 14832.27092856879, 14819.813344373728, 14794.780040805323, 14719.000348411999, 14706.310164996326, 14693.612688615638, 14668.210762513185, 14655.513767091285, 14642.824385116726, 14630.14634034099, 14617.483353188485, 14604.839139665062, 14592.217410267207, 14579.621868893473, 14567.056211757428, 14554.524126302866, 14455.914768382747, 14431.852525002088, 14408.083251169042, 14396.317210513113, 14373.039584674663, 14361.534830407458, 14252.19349222672, 14241.900594400142, 14211.807732380246, 14182.955015014903, 14173.62629673755, 14164.446603771788, 14120.876227747669, 14046.355437555647, 14039.894468184953, 14005.14477353618, 13995.131943057366, 13960.190379304617, 13940.303571967186, 13949.493965471525, 13953.973499126145, 13965.487918477547, 13968.894051497751, 13984.598717913632, 13998.528252535238, 14003.574124003086, 14008.818923293453, 14031.755750481276, 14050.965974257291, 14057.741983743059, 14079.159982695317, 14135.214648630477, 14143.88313821613, 14161.690787982012, 14189.539409309307, 14199.114669830555, 14249.056522949999, 14269.942289859622, 14358.061973423566, 14381.106747176309, 14416.326337565892, 14440.200827845852, 14452.246026829613, 14476.534659955661, 14563.249466816867, 14575.805325462572, 14638.975694929833, 14651.66202990019, 14715.150337093251, 14765.78542918368, 14778.391610580064, 14790.969346414235, 14803.51494569769, 14816.024726872698, 14828.495018892374, 14840.92216229809, 14865.632429814348, 14877.908302594968, 14902.283515231185, 14938.351495370664, 14962.02576498484, 14985.370723713433, 14996.911132799756, 15008.358970869389, 15019.710878507141, 15042.113606559291, 15064.093022193947, 15074.915905768035, 15137.3197710466, 15147.269686733573, 15157.082908066524, 15166.756555315273, 15176.287789708133, 15194.911874618523, 15203.99925982161, 15320.52733049949, 15326.873582414186, 15350.346805028448, 15360.912435055478, 15375.26195476169, 15379.63974110071, 15383.812643135625, 15387.779436311099, 15391.538956555321, 15395.09010062161, 15398.43182641208, 15401.563153283545, 15404.483162335222, 15407.190996678408, 15409.685861687974, 15411.967025235492, 15414.033817904112, 15415.885633185017, 15417.521927655378, 15418.942221137831, 15421.903245395153, 15422.456002602828, 15422.791310897974, 15422.90907188299, 15422.809251000426, 15421.957044645666, 15421.204909256934, 15420.235692094173, 15419.049677578148, 15417.647213749711, 15416.028712167657, 15414.194647787934, 15412.1455588243, 15407.404775323103, 15404.714471987998, 15401.811926065631, 15398.697989320066, 15395.373575548907, 15391.839660315041, 15384.147534801943, 15379.991581808632, 15375.630641262085, 15371.065992898293, 15366.298976232101, 15361.330990164213, 15356.163492570631, 15350.797999874787, 15345.236086602663, 15339.479384920593, 15333.529584156428, 15314.53932754487, 15307.835149260876, 15293.8773751501, 15286.6278752897, 15279.200785840505, 15263.822607690678, 15255.876031779773, 15247.760890535345, 15239.47956537898, 15231.034486499706, 15222.42813214075, 15195.66690406141, 15186.441165555812, 15177.067237664292, 15148.084038430246, 15138.145283857297, 15128.072512523986, 15107.53678162171, 15097.07984834758, 15075.803188403735, 15064.989705457536, 15043.02829899113, 15031.886820136127, 15020.642506504912, 14986.325698923485, 14962.994907603343, 14951.203866759923, 14939.333667885447, 14927.387794338736, 14903.28306667003, 14891.131286179796, 14866.646720791285, 14854.32112098971, 14841.944793798077, 14829.521371100687, 14741.546448259405, 14728.878442247506, 14678.10449049712, 14665.40414596217, 14652.70851250216, 14640.021315702972, 14614.687120959652, 14602.047557439339, 14589.431297245943, 14576.842042673059, 14564.283488089242, 14551.759318854138, 14526.82882633737, 14514.429819011446, 14502.079826798928, 14477.541368891201, 14393.727978252915, 14370.489019756227, 14359.004724762597, 14281.449271459813, 14249.907718181044, 14162.438185722945, 14058.308889758155, 14044.91139393452, 14038.491872542452, 14032.261032215602, 13998.936744637958, 13994.074702604395, 13984.957132529857, 13944.501303324148, 13943.213088375744, 13940.042036327197, 13940.274681602847, 13943.378655888513, 13944.696859129723, 13949.946838015858, 13952.126908873173, 13957.128423689872, 13973.336398874004, 13981.2812889291, 14010.004759717256, 14015.4903589589, 14021.171389154782, 14059.264310089586, 14066.263529687785, 14073.443280644016, 14080.801456030751, 14088.335896561168, 14096.044391222566, 14103.924677925415, 14111.97444416716, 14120.191327710692, 14128.572917277645, 14137.116753256068, 14145.820328422029, 14163.696433790077, 14172.863718175311, 14182.18025165396, 14191.643300250842, 14230.904478676048, 14241.057617175838, 14326.67725317445, 14360.590358898111, 14395.350738272871, 14407.110009795313, 14418.949789871405, 14430.866604069004, 14442.856955349673, 14454.917325095648, 14467.044174141565, 14479.233943813591, 14491.483056973657, 14503.787919068982, 14516.144919187032, 14528.550431115276, 14541.000814405068, 14553.49241544008, 14566.021568508586, 14591.17781387865, 14654.467135445579, 14692.565518351212, 14705.26342980512, 14717.954355462809, 14730.6345711198, 14755.947992420532, 14781.173982576, 14793.74493335471, 14868.350288147758, 14917.039086822286, 14929.047340095756, 14987.929055211687, 14999.449295849692, 15022.206476294423, 15044.563709924963, 15066.494755377245, 15077.292393061607, 15087.973871517173, 15098.536056220142, 15149.450366255263, 15159.23298691869, 15168.875402548381, 15178.374783537698, 15187.728342254204, 15196.93333385751, 15232.214274803797, 15240.636811621946, 15248.89525511845, 15256.98718181911, 15272.66203595771, 15301.912418317905, 15334.365417981035, 15351.553173513434, 15356.891325674565, 15366.971495595611, 15384.707124465293, 15395.846714849864, 15399.142022824666, 15402.22672347039, 15405.099911568908, 15407.76074397135, 15410.208439845472, 15414.461611619558, 15416.265839408747, 15417.854434814297, 15420.382927170052, 15421.322082123756, 15422.044120918566, 15422.548831669223, 15422.905740419556, 15422.757833682888, 15422.392389460114, 15421.809514992348, 15421.00938132651, 15419.992223265113, 15417.308091511673, 15413.760270178984, 15411.6637377548, 15409.352923452683, 15406.828505390624, 15404.091224369491, 15401.141883655688, 15391.030467927018, 15387.242161783543, 15379.04537617201, 15374.639302084497, 15370.02981109228, 15365.218255869515, 15360.20604838688, 15354.994659497337, 15343.980512713535, 15338.180986966045, 15332.188743156712, 15326.005539734138, 15306.328593630727, 15285.00163276525, 15277.535586664862, 15254.09693961549, 15245.944863499488, 15237.627136392193, 15229.146199164936, 15220.504540583644, 15211.70469657867, 15193.640827362033, 15184.38210306721, 15174.975793626902, 15165.424659361315, 15145.899169310236, 15135.930543360239, 15125.82855057464, 15073.42316137947, 15040.574950544025, 15029.410461750584, 15018.143864878466, 15006.778466156995, 14995.317600809192, 14983.764632073267, 14960.395971535474, 14948.587137363314, 14936.699913050164, 14924.73778695091, 14876.210779425677, 14863.927202847663, 14839.203031068248, 14826.76969127691, 14801.77874589438, 14789.228473999066, 14738.748091570029, 14726.076689889656, 14687.998815669054, 14662.597759529117, 14649.903670011454, 14624.546992652056, 14524.08449926989, 14511.696012003751, 14499.357342097916, 14487.072110385956, 14391.14287034516, 14345.11093645559, 14300.657662337737, 14247.628130022504, 14237.391877831082, 14217.313278194792, 14207.476822897705, 14169.55016729023, 14160.437207358664, 14142.672603975923, 14093.252795194376, 14078.135312501407, 14056.792165785026, 14050.041674347995, 14037.098493243886, 14030.909601806625, 13997.844897011706, 13988.411756166837, 13983.999574439757, 13956.166374956338, 13953.635574523289], "rural_dates": ["2017-01-07T00:00:00", "2017-01-11T00:00:00", "2017-01-18T00:00:00", "2017-01-20T00:00:00", "2017-01-21T00:00:00", "2017-02-01T00:00:00", "2017-02-10T00:00:00", "2017-02-12T00:00:00", "2017-02-16T00:00:00", "2017-02-18T00:00:00", "2017-02-19T00:00:00", "2017-02-27T00:00:00", "2017-03-10T00:00:00", "2017-03-11T00:00:00", "2017-03-14T00:00:00", "2017-03-15T00:00:00", "2017-03-16T00:00:00", "2017-03-17T00:00:00", "2017-03-26T00:00:00", "2017-03-27T00:00:00", "2017-03-28T00:00:00", "2017-03-29T00:00:00", "2017-03-30T00:00:00", "2017-04-03T00:00:00", "2017-04-04T00:00:00", "2017-04-07T00:00:00", "2017-04-08T00:00:00", "2017-04-09T00:00:00", "2017-04-10T00:00:00", "2017-04-12T00:00:00", "2017-04-13T00:00:00", "2017-04-14T00:00:00", "2017-04-17T00:00:00", "2017-04-18T00:00:00", "2017-04-19T00:00:00", "2017-04-20T00:00:00", "2017-04-21T00:00:00", "2017-04-22T00:00:00", "2017-04-23T00:00:00", "2017-04-28T00:00:00", "2017-04-29T00:00:00", "2017-05-05T00:00:00", "2017-05-15T00:00:00", "2017-05-16T00:00:00", "2017-05-17T00:00:00", "2017-05-20T00:00:00", "2017-05-22T00:00:00", "2017-05-23T00:00:00", "2017-05-24T00:00:00", "2017-05-25T00:00:00", "2017-05-26T00:00:00", "2017-05-27T00:00:00", "2017-05-28T00:00:00", "2017-05-29T00:00:00", "2017-06-02T00:00:00", "2017-06-03T00:00:00", "2017-06-08T00:00:00", "2017-06-10T00:00:00", "2017-06-11T00:00:00", "2017-06-12T00:00:00", "2017-06-13T00:00:00", "2017-06-14T00:00:00", "2017-06-15T00:00:00", "2017-06-16T00:00:00", "2017-06-17T00:00:00", "2017-06-18T00:00:00", "2017-06-19T00:00:00", "2017-06-20T00:00:00", "2017-06-21T00:00:00", "2017-06-22T00:00:00", "2017-06-23T00:00:00", "2017-06-24T00:00:00", "2017-06-25T00:00:00", "2017-06-28T00:00:00", "2017-07-05T00:00:00", "2017-07-06T00:00:00", "2017-07-07T00:00:00", "2017-07-12T00:00:00", "2017-07-13T00:00:00", "2017-07-15T00:00:00", "2017-07-16T00:00:00", "2017-07-17T00:00:00", "2017-07-18T00:00:00", "2017-07-20T00:00:00", "2017-07-26T00:00:00", "2017-08-02T00:00:00", "2017-08-03T00:00:00", "2017-08-04T00:00:00", "2017-08-05T00:00:00", "2017-08-06T00:00:00", "2017-08-07T00:00:00", "2017-08-12T00:00:00", "2017-08-14T00:00:00", "2017-08-17T00:00:00", "2017-08-18T00:00:00", "2017-08-19T00:00:00", "2017-08-20T00:00:00", "2017-08-21T00:00:00", "2017-08-22T00:00:00", "2017-08-25T00:00:00", "2017-08-26T00:00:00", "2017-08-27T00:00:00", "2017-08-29T00:00:00", "2017-09-03T00:00:00", "2017-09-04T00:00:00", "2017-09-05T00:00:00", "2017-09-06T00:00:00", "2017-09-08T00:00:00", "2017-09-10T00:00:00", "2017-09-15T00:00:00", "2017-09-20T00:00:00", "2017-09-21T00:00:00", "2017-09-22T00:00:00", "2017-09-23T00:00:00", "2017-09-24T00:00:00", "2017-09-27T00:00:00", "2017-09-29T00:00:00", "2017-10-05T00:00:00", "2017-10-06T00:00:00", "2017-10-07T00:00:00", "2017-10-10T00:00:00", "2017-10-11T00:00:00", "2017-10-12T00:00:00", "2017-10-13T00:00:00", "2017-10-14T00:00:00", "2017-10-15T00:00:00", "2017-10-16T00:00:00", "2017-10-17T00:00:00", "2017-10-25T00:00:00", "2017-10-26T00:00:00", "2017-10-28T00:00:00", "2017-10-31T00:00:00", "2017-11-02T00:00:00", "2017-11-11T00:00:00", "2017-11-14T00:00:00", "2017-11-21T00:00:00", "2017-11-22T00:00:00", "2017-11-23T00:00:00", "2017-11-27T00:00:00", "2017-12-07T00:00:00", "2017-12-09T00:00:00", "2017-12-14T00:00:00", "2017-12-15T00:00:00", "2017-12-31T00:00:00", "2018-01-11T00:00:00", "2018-01-15T00:00:00", "2018-01-23T00:00:00", "2018-01-24T00:00:00", "2018-01-31T00:00:00", "2018-02-06T00:00:00", "2018-02-13T00:00:00", "2018-02-20T00:00:00", "2018-02-24T00:00:00", "2018-03-04T00:00:00", "2018-03-07T00:00:00", "2018-03-08T00:00:00", "2018-03-14T00:00:00", "2018-03-19T00:00:00", "2018-03-21T00:00:00", "2018-03-22T00:00:00", "2018-03-24T00:00:00", "2018-03-31T00:00:00", "2018-04-06T00:00:00", "2018-04-13T00:00:00", "2018-04-17T00:00:00", "2018-04-18T00:00:00", "2018-04-19T00:00:00", "2018-04-20T00:00:00", "2018-04-21T00:00:00", "2018-04-22T00:00:00", "2018-04-24T00:00:00", "2018-04-27T00:00:00", "2018-04-30T00:00:00", "2018-05-05T00:00:00", "2018-05-06T00:00:00", "2018-05-07T00:00:00", "2018-05-08T00:00:00", "2018-05-11T00:00:00", "2018-05-12T00:00:00", "2018-05-18T00:00:00", "2018-05-19T00:00:00", "2018-05-20T00:00:00", "2018-05-21T00:00:00", "2018-05-22T00:00:00", "2018-05-24T00:00:00", "2018-05-25T00:00:00", "2018-06-02T00:00:00", "2018-06-07T00:00:00", "2018-06-09T00:00:00", "2018-06-11T00:00:00", "2018-06-14T00:00:00", "2018-06-18T00:00:00", "2018-06-19T00:00:00", "2018-06-20T00:00:00", "2018-06-21T00:00:00", "2018-06-22T00:00:00", "2018-06-23T00:00:00", "2018-06-24T00:00:00", "2018-06-25T00:00:00", "2018-06-26T00:00:00", "2018-06-27T00:00:00", "2018-06-28T00:00:00", "2018-06-30T00:00:00", "2018-07-01T00:00:00", "2018-07-02T00:00:00", "2018-07-03T00:00:00", "2018-07-04T00:00:00", "2018-07-07T00:00:00", "2018-07-08T00:00:00", "2018-07-09T00:00:00", "2018-07-10T00:00:00", "2018-07-11T00:00:00", "2018-07-12T00:00:00", "2018-07-13T00:00:00", "2018-07-14T00:00:00", "2018-07-15T00:00:00", "2018-07-16T00:00:00", "2018-07-17T00:00:00", "2018-07-18T00:00:00", "2018-07-19T00:00:00", "2018-07-21T00:00:00", "2018-07-22T00:00:00", "2018-07-23T00:00:00", "2018-07-24T00:00:00", "2018-07-25T00:00:00", "2018-07-26T00:00:00", "2018-07-27T00:00:00", "2018-07-29T00:00:00", "2018-07-31T00:00:00", "2018-08-01T00:00:00", "2018-08-02T00:00:00", "2018-08-03T00:00:00", "2018-08-04T00:00:00", "2018-08-05T00:00:00", "2018-08-06T00:00:00", "2018-08-07T00:00:00", "2018-08-10T00:00:00", "2018-08-11T00:00:00", "2018-08-12T00:00:00", "2018-08-15T00:00:00", "2018-08-16T00:00:00", "2018-08-19T00:00:00", "2018-08-20T00:00:00", "2018-08-21T00:00:00", "2018-08-22T00:00:00", "2018-08-23T00:00:00", "2018-08-26T00:00:00", "2018-08-27T00:00:00", "2018-08-28T00:00:00", "2018-09-04T00:00:00", "2018-09-08T00:00:00", "2018-09-10T00:00:00", "2018-09-11T00:00:00", "2018-09-12T00:00:00", "2018-09-13T00:00:00", "2018-09-15T00:00:00", "2018-09-18T00:00:00", "2018-09-19T00:00:00", "2018-09-20T00:00:00", "2018-09-22T00:00:00", "2018-09-23T00:00:00", "2018-09-25T00:00:00", "2018-09-26T00:00:00", "2018-09-27T00:00:00", "2018-09-28T00:00:00", "2018-10-11T00:00:00", "2018-10-13T00:00:00", "2018-10-16T00:00:00", "2018-10-17T00:00:00", "2018-10-18T00:00:00", "2018-10-20T00:00:00", "2018-10-23T00:00:00", "2018-10-24T00:00:00", "2018-11-05T00:00:00", "2018-11-09T00:00:00", "2018-11-11T00:00:00", "2018-11-12T00:00:00", "2018-11-15T00:00:00", "2018-11-22T00:00:00", "2018-11-24T00:00:00", "2018-12-07T00:00:00", "2018-12-18T00:00:00", "2018-12-20T00:00:00", "2018-12-25T00:00:00", "2018-12-27T00:00:00", "2019-01-02T00:00:00", "2019-01-03T00:00:00", "2019-01-11T00:00:00", "2019-01-15T00:00:00", "2019-01-16T00:00:00", "2019-01-19T00:00:00", "2019-01-25T00:00:00", "2019-01-28T00:00:00", "2019-01-30T00:00:00", "2019-02-04T00:00:00", "2019-02-05T00:00:00", "2019-02-06T00:00:00", "2019-02-13T00:00:00", "2019-02-14T00:00:00", "2019-02-15T00:00:00", "2019-02-16T00:00:00", "2019-02-18T00:00:00", "2019-02-19T00:00:00", "2019-02-20T00:00:00", "2019-02-21T00:00:00", "2019-02-22T00:00:00", "2019-02-23T00:00:00", "2019-02-24T00:00:00", "2019-02-25T00:00:00", "2019-02-27T00:00:00", "2019-02-28T00:00:00", "2019-03-05T00:00:00", "2019-03-16T00:00:00", "2019-03-19T00:00:00", "2019-03-20T00:00:00", "2019-03-21T00:00:00", "2019-03-22T00:00:00", "2019-03-23T00:00:00", "2019-03-24T00:00:00", "2019-03-25T00:00:00", "2019-03-26T00:00:00", "2019-03-27T00:00:00", "2019-03-28T00:00:00", "2019-03-29T00:00:00", "2019-03-30T00:00:00", "2019-03-31T00:00:00", "2019-04-01T00:00:00", "2019-04-02T00:00:00", "2019-04-05T00:00:00", "2019-04-08T00:00:00", "2019-04-09T00:00:00", "2019-04-13T00:00:00", "2019-04-14T00:00:00", "2019-04-15T00:00:00", "2019-04-17T00:00:00", "2019-04-19T00:00:00", "2019-04-20T00:00:00", "2019-04-23T00:00:00", "2019-04-26T00:00:00", "2019-05-01T00:00:00", "2019-05-02T00:00:00", "2019-05-03T00:00:00", "2019-05-06T00:00:00", "2019-05-07T00:00:00", "2019-05-09T00:00:00", "2019-05-10T00:00:00", "2019-05-13T00:00:00", "2019-05-14T00:00:00", "2019-05-15T00:00:00", "2019-05-16T00:00:00", "2019-05-22T00:00:00", "2019-05-23T00:00:00", "2019-05-25T00:00:00", "2019-05-26T00:00:00", "2019-05-27T00:00:00", "2019-05-30T00:00:00", "2019-05-31T00:00:00", "2019-06-01T00:00:00", "2019-06-02T00:00:00", "2019-06-03T00:00:00", "2019-06-07T00:00:00", "2019-06-08T00:00:00", "2019-06-12T00:00:00", "2019-06-13T00:00:00", "2019-06-17T00:00:00", "2019-06-19T00:00:00", "2019-06-20T00:00:00", "2019-06-23T00:00:00", "2019-06-24T00:00:00", "2019-06-26T00:00:00", "2019-06-27T00:00:00", "2019-06-28T00:00:00", "2019-06-29T00:00:00", "2019-06-30T00:00:00", "2019-07-01T00:00:00", "2019-07-02T00:00:00", "2019-07-03T00:00:00", "2019-07-04T00:00:00", "2019-07-05T00:00:00", "2019-07-07T00:00:00", "2019-07-08T00:00:00", "2019-07-09T00:00:00", "2019-07-10T00:00:00", "2019-07-12T00:00:00", "2019-07-13T00:00:00", "2019-07-14T00:00:00", "2019-07-16T00:00:00", "2019-07-19T00:00:00", "2019-07-20T00:00:00", "2019-07-21T00:00:00", "2019-07-22T00:00:00", "2019-07-23T00:00:00", "2019-07-24T00:00:00", "2019-07-25T00:00:00", "2019-07-26T00:00:00", "2019-07-30T00:00:00", "2019-08-01T00:00:00", "2019-08-02T00:00:00", "2019-08-03T00:00:00", "2019-08-04T00:00:00", "2019-08-05T00:00:00", "2019-08-06T00:00:00", "2019-08-08T00:00:00", "2019-08-09T00:00:00", "2019-08-11T00:00:00", "2019-08-14T00:00:00", "2019-08-22T00:00:00", "2019-08-23T00:00:00", "2019-08-24T00:00:00", "2019-08-25T00:00:00", "2019-08-26T00:00:00", "2019-08-28T00:00:00", "2019-08-29T00:00:00", "2019-08-30T00:00:00", "2019-08-31T00:00:00", "2019-09-02T00:00:00", "2019-09-03T00:00:00", "2019-09-04T00:00:00", "2019-09-07T00:00:00", "2019-09-12T00:00:00", "2019-09-13T00:00:00", "2019-09-14T00:00:00", "2019-09-15T00:00:00", "2019-09-16T00:00:00", "2019-09-17T00:00:00", "2019-09-18T00:00:00", "2019-09-19T00:00:00", "2019-09-20T00:00:00", "2019-09-21T00:00:00", "2019-09-27T00:00:00", "2019-09-29T00:00:00", "2019-10-01T00:00:00", "2019-10-08T00:00:00", "2019-10-11T00:00:00", "2019-10-13T00:00:00", "2019-10-14T00:00:00", "2019-10-16T00:00:00", "2019-10-25T00:00:00", "2019-10-26T00:00:00", "2019-11-02T00:00:00", "2019-11-04T00:00:00", "2019-11-05T00:00:00", "2019-11-08T00:00:00", "2019-11-12T00:00:00", "2019-11-18T00:00:00", "2019-11-20T00:00:00", "2019-11-22T00:00:00", "2019-11-28T00:00:00", "2019-12-04T00:00:00", "2019-12-06T00:00:00", "2019-12-07T00:00:00", "2019-12-08T00:00:00", "2019-12-19T00:00:00", "2019-12-21T00:00:00", "2019-12-30T00:00:00", "2019-12-31T00:00:00"], "rural_observed": [13530, 13819, 13563, 13661, 13680, 14220, 14132, 14214, 14356, 14173, 14319, 14306, 14365, 14431, 14332, 14337, 14603, 14701, 14420, 14589, 14517, 14555, 14614, 14600, 14541, 14567, 14772, 14781, 14992, 14604, 14699, 14781, 14670, 14445, 14498, 14362, 14676, 14748, 14747, 14252, 14562, 14429, 14800, 14984, 14946, 14457, 14714, 14749, 14928, 14722, 15108, 15016, 15023, 15021, 15072, 15096, 15012, 15083, 15266, 15130, 15006, 14899, 15203, 14993, 15069, 15135, 15197, 15332, 15252, 15496, 15250, 15172, 15110, 15029, 15296, 15410, 15313, 15208, 15067, 15197, 15130, 15434, 15287, 15327, 14832, 15528, 15469, 15516, 15513, 15153, 15444, 14852, 15211, 15085, 15399, 14821, 14894, 15073, 15215, 15149, 15107, 15214, 15382, 14787, 14936, 15163, 14874, 14933, 14623, 14672, 14404, 14691, 14605, 14763, 14886, 14698, 14917, 14745, 14338, 14444, 14632, 14680, 14762, 14638, 14799, 14771, 14763, 14579, 14433, 14699, 14351, 14221, 14459, 13302, 13946, 14096, 14184, 14007, 14007, 14039, 13683, 13912, 13989, 13838, 13989, 13915, 14159, 13994, 14061, 14036, 13789, 13910, 13700, 14270, 14293, 14184, 14295, 14208, 14027, 13969, 14328, 14101, 14632, 14529, 14758, 14925, 14983, 15015, 14955, 14984, 14928, 14855, 14473, 14840, 14977, 14963, 14976, 14769, 14951, 14663, 14768, 14820, 14924, 14740, 14930, 14915, 14920, 14786, 14967, 14919, 14676, 14891, 14980, 15170, 15112, 14670, 14967, 14877, 15065, 15018, 15211, 15089, 15321, 15283, 15320, 15016, 15316, 15123, 15073, 15198, 15070, 15142, 15007, 15410, 15274, 15295, 15030, 15124, 15306, 15216, 14845, 15120, 15156, 15304, 15354, 15273, 15347, 15396, 15421, 15354, 15349, 15533, 15226, 15560, 15357, 15503, 15058, 14967, 15357, 15076, 15320, 15210, 15148, 15365, 15332, 15246, 15041, 15142, 15442, 15250, 15048, 15235, 15340, 14875, 15274, 15121, 15213, 15231, 15387, 14996, 15275, 14813, 15003, 15172, 15020, 14757, 14804, 14706, 14772, 14687, 14614, 14325, 14496, 14526, 14498, 14406, 14470, 14245, 13968, 14193, 14276, 13861, 13923, 13875, 13747, 13803, 13693, 13544, 13985, 13930, 13764, 13480, 13806, 13921, 13705, 13775, 13858, 14040, 14280, 14283, 14327, 14240, 14205, 14291, 14319, 14331, 14300, 14344, 14235, 14465, 14497, 14414, 14462, 14270, 14373, 14424, 14597, 14589, 14630, 14346, 14348, 14456, 14514, 14588, 14633, 14781, 14073, 14262, 14447, 14077, 14530, 14426, 14371, 14494, 14613, 14861, 14914, 14575, 14459, 14614, 14635, 14379, 14474, 14359, 14516, 14507, 14600, 14608, 14600, 14642, 14813, 14591, 14895, 14782, 14831, 14772, 14959, 15129, 15071, 15077, 14999, 15015, 14788, 14895, 15029, 15082, 14848, 15023, 14603, 15284, 15224, 15418, 15335, 15454, 15332, 15004, 15126, 15122, 15348, 15285, 15093, 14905, 15082, 15295, 15052, 15237, 15283, 15350, 15167, 15427, 15243, 15671, 15321, 15532, 15585, 15153, 15014, 15211, 15297, 15394, 15390, 15338, 15184, 15204, 15104, 14965, 14924, 14936, 15278, 15235, 15373, 15284, 15249, 15112, 15419, 14929, 15093, 15261, 15058, 15160, 15211, 15168, 15128, 15347, 15154, 15001, 14888, 15070, 14680, 14912, 14847, 14663, 14660, 14617, 14677, 14781, 14518, 14402, 14624, 14368, 13995, 14208, 14038, 14149, 13742, 14034, 13975, 14051, 13732, 13943, 14135, 13986, 14268, 14202, 13917, 13910], "rural_fitted": [14923.26531463626, 14908.019024116013, 14875.008883923201, 14864.290362298432, 14858.74402399438, 14791.399223122035, 14731.857184979805, 14718.64430125315, 14692.661336541043, 14680.00187601876, 14673.778904713468, 14627.413189537023, 14577.655847275526, 14574.139697015115, 14564.721898083115, 14561.970656735855, 14559.418483125795, 14557.068094396567, 14545.335010224984, 14545.10351790264, 14545.089050731875, 14545.291624115005, 14545.711022384497, 14549.544483265958, 14551.036713328665, 14556.770179700157, 14559.093478008679, 14561.618907211172, 14564.343778637121, 14570.380034896061, 14573.684993294999, 14577.176547891198, 14588.732647074527, 14592.931488032751, 14597.296434618642, 14601.822839739714, 14606.50588440836, 14611.34058287248, 14616.321787923325, 14643.234661916431, 14648.97848442044, 14685.454985346145, 14750.908591769245, 14757.558831596005, 14764.199908354463, 14783.997550647435, 14797.021146279898, 14803.459634387833, 14809.840091641163, 14816.15572515602, 14822.39981106249, 14828.565701662985, 14834.646832509628, 14840.63672939322, 14863.558034498217, 14868.998283272733, 14894.171488978443, 14903.195004415556, 14907.462801845908, 14911.561842589974, 14915.487762648963, 14919.236382335135, 14922.803710721653, 14926.185949891456, 14929.37949898073, 14932.380958012445, 14935.18713151615, 14937.795031930014, 14940.201882781454, 14942.405121643103, 14944.40240286087, 14946.191600051208, 14947.770808364947, 14951.232815490108, 14951.756173038806, 14950.964691157955, 14949.958138781403, 14941.744769352912, 14939.478218549875, 14934.339221309494, 14931.472246049196, 14928.410952711132, 14925.158600467654, 14918.094769311514, 14892.71808755881, 14856.24952542651, 14850.536441390683, 14844.715206693896, 14838.792018849914, 14832.773183915659, 14826.665109777756, 14795.016687325533, 14781.966343720698, 14762.144819448371, 14755.500148904313, 14748.848507045952, 14742.1969754708, 14735.552635659009, 14728.92256143416, 14709.188397635384, 14702.68570766876, 14696.232274703487, 14683.500602327953, 14653.006131847447, 14647.188172173854, 14641.478554344189, 14635.88335704042, 14625.059923313971, 14614.763950926726, 14591.613296742486, 14572.641458008642, 14569.395004370515, 14566.3397142193, 14563.47884033613, 14560.815428519014, 14554.037252170649, 14550.552024871142, 14545.205704539287, 14545.07032826859, 14545.152012484452, 14546.697403755456, 14547.644152228846, 14548.80522099534, 14550.179373935813, 14551.765148073398, 14553.560855131062, 14555.56458332897, 14557.774199419864, 14582.536030512132, 14586.46740577018, 14594.844749247333, 14608.62903838088, 14618.57369270351, 14669.529255429898, 14688.2618492929, 14733.910883162067, 14740.552351999995, 14747.20276353167, 14773.752246334088, 14837.311734158784, 14849.10621149042, 14876.621586854839, 14881.739679575097, 14941.203086706517, 14952.79673541938, 14950.545307601398, 14935.850843826069, 14933.093449216052, 14908.49270636542, 14880.749654176965, 14842.103697309163, 14798.618932951129, 14772.460288309754, 14719.39506812088, 14699.820630162734, 14693.39121501929, 14656.291686783756, 14628.023421169717, 14617.576035514176, 14612.559399899557, 14602.966941940897, 14574.531505741525, 14557.325963454396, 14546.537389291287, 14545.079731253194, 14545.25754979116, 14545.652229492345, 14546.263350165336, 14547.090261187206, 14548.132082196202, 14550.855789901636, 14556.518081178616, 14564.022918852264, 14580.422658694342, 14584.255845302774, 14588.264373966806, 14592.443977050314, 14605.963853082605, 14610.781507022017, 14642.586408148023, 14648.317696944532, 14654.156125048768, 14660.09547664232, 14666.129428459624, 14678.455342967096, 14684.734183007555, 14736.851210083672, 14770.06999077326, 14783.24961483255, 14796.283219850937, 14815.438686446847, 14839.958176734788, 14845.861917710856, 14851.66248470634, 14857.353702211256, 14862.929511133283, 14868.38397524858, 14873.711287521777, 14878.905776288248, 14883.96191129253, 14888.874309575918, 14893.637741207453, 14902.697583168816, 14906.984348037242, 14911.10286559998, 14915.04875112246, 14918.81780366092, 14929.024803311613, 14932.048342589133, 14934.876950454005, 14937.507615459905, 14939.937536898173, 14942.164127779588, 14944.185017588603, 14945.998054807036, 14947.601309204696, 14948.99307389437, 14950.17186714904, 14951.136433979398, 14951.885747469947, 14952.735653454476, 14952.835341105369, 14952.717966693612, 14952.383655180582, 14951.83276248737, 14951.065875115839, 14950.083809524214, 14947.478553836158, 14944.028087097839, 14941.990351282804, 14939.747099404602, 14937.300719716746, 14934.653816730552, 14931.809208442237, 14928.76992333284, 14925.539197143904, 14914.733764565806, 14910.773651584559, 14906.64125705716, 14893.255268077766, 14888.479505232574, 14873.282061744321, 14867.944173781745, 14862.47960220684, 14856.894164815829, 14851.193808083395, 14833.464482908308, 14827.366262859232, 14821.184560025738, 14776.137365603612, 14749.607497290963, 14736.310077215423, 14729.678018416298, 14723.066479550916, 14716.48249952156, 14703.425217416803, 14684.219872934977, 14677.946899848797, 14671.74952166444, 14659.607854378213, 14653.67649176933, 14642.124275697768, 14636.515721175283, 14631.026870804604, 14625.663568230124, 14569.755783627861, 14563.795304062216, 14556.339644881842, 14554.261237280747, 14552.390105165723, 14549.277412920615, 14546.205464006513, 14545.611959796694, 14555.325538274665, 14565.283002152608, 14571.446124477807, 14574.812846891375, 14586.01006652744, 14617.991076011229, 14628.460323649973, 14706.832640429318, 14779.591082234043, 14792.670962953896, 14824.436540638273, 14836.627113034965, 14870.759770902636, 14876.028939587473, 14912.87227384421, 14927.257206591981, 14930.387948278389, 14938.608890323765, 14949.541582949429, 14952.148653525082, 14952.806588916572, 14950.657352985541, 14949.580293337238, 14948.289637077194, 14933.417994980731, 14930.486767276756, 14927.362270674183, 14924.047831634023, 14916.863439429117, 14913.00113504872, 14908.964177656313, 14904.756865154328, 14900.383676811853, 14895.849268495927, 14891.158467714591, 14886.316268477503, 14876.198451109592, 14870.933604802056, 14842.778192061714, 14773.214052937688, 14753.31304555381, 14746.660658310104, 14740.010710618817, 14733.370282273767, 14726.746442934258, 14720.146244598138, 14713.576714094204, 14707.04484560109, 14700.557593200909, 14694.12186347581, 14687.74450815489, 14681.432316819511, 14675.192009674956, 14669.03023039586, 14662.953539052893, 14645.298193307011, 14628.635328665856, 14623.329471302326, 14603.497786725582, 14598.914196593918, 14594.490342664889, 14586.140507569306, 14578.48383021614, 14574.925731637297, 14565.377249736574, 14557.586488120822, 14548.702613132766, 14547.558966069551, 14546.629729991953, 14545.137233255991, 14545.073237094826, 14545.596253986667, 14546.182710215473, 14549.233690411294, 14550.67761174868, 14552.332623839753, 14554.196964694054, 14569.652447980705, 14572.914329890033, 14579.996671477507, 14583.809591018366, 14587.79832771451, 14600.776066498776, 14605.423803327934, 14610.224345978271, 14615.172583604734, 14620.26324812038, 14641.939628425069, 14647.65830408829, 14671.548854277547, 14677.743656806997, 14703.213859510191, 14716.268426246712, 14722.851389795662, 14742.738833069738, 14749.390638703491, 14762.685768022275, 14769.314937193676, 14775.922427287896, 14782.501203713044, 14789.044262446989, 14795.544637493982, 14801.995408300992, 14808.389707125665, 14814.720726347881, 14820.981725717385, 14833.267083723582, 14839.278362888597, 14845.19347718251, 14851.006129143736, 14862.299408237366, 14867.76801210397, 14873.110119906883, 14883.392238383298, 14897.729206768645, 14902.198031274016, 14906.50370417334, 14910.641641479182, 14914.60743778197, 14918.396870940143, 14922.005906575274, 14925.43070236714, 14937.217585934573, 14941.920456329613, 14943.964926723811, 14945.801778844761, 14947.429057107982, 14948.845029049528, 14950.048187170394, 14951.811166167316, 14952.369110107116, 14952.834937457319, 14951.906540358812, 14940.013336168719, 14937.59000304726, 14934.965838645128, 14932.143636750174, 14929.126401988698, 14922.519887149494, 14918.937640625327, 14915.174420853602, 14911.234234304957, 14902.839924322245, 14898.394737798248, 14893.790448802909, 14879.072801492755, 14851.849757881802, 14846.052658580964, 14840.152182229405, 14834.154610704587, 14828.06632925522, 14821.893819703404, 14815.643653543764, 14809.322484947097, 14802.937043676293, 14796.494127921376, 14757.017153068578, 14743.714298029568, 14730.43374250398, 14684.940040619258, 14666.327635478046, 14654.348172047223, 14648.506355547004, 14637.149643484898, 14592.583047892687, 14588.397942232283, 14564.114333742966, 14558.896553722429, 14556.589838913915, 14550.907203404666, 14546.286906637324, 14545.829350117303, 14547.409217713444, 14549.847138523792, 14562.187442668568, 14581.66367442108, 14589.620255281185, 14593.855156076723, 14598.25517912687, 14656.098569950063, 14668.133399631788, 14725.776655341639, 14732.397467759123]} \ No newline at end of file diff --git a/y/static/custom.js b/y/static/custom.js new file mode 100644 index 0000000000000000000000000000000000000000..4aca78779e29d5eb49b54f80efe5a9189772e29b --- /dev/null +++ b/y/static/custom.js @@ -0,0 +1,9 @@ +/* custom.js */ + +document.addEventListener("DOMContentLoaded", function () { + // Add a fade-in effect to elements with class "fade-in" + const elements = document.querySelectorAll(".fade-in"); + elements.forEach(function (element) { + element.classList.add("fade"); + }); +}); diff --git a/y/static/icon/map_icon.png b/y/static/icon/map_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..771ecb493efa486a790da8d9589ab6768ba8eb1e Binary files /dev/null and b/y/static/icon/map_icon.png differ diff --git a/y/static/icon/userIcon.png b/y/static/icon/userIcon.png new file mode 100644 index 0000000000000000000000000000000000000000..b40d2817f9594d7fb93672d8006f2074e1bc81fc Binary files /dev/null and b/y/static/icon/userIcon.png differ diff --git a/y/static/satellite_image.png b/y/static/satellite_image.png new file mode 100644 index 0000000000000000000000000000000000000000..f63e3b64b7148340a81b13e9f819817c49be1fe8 Binary files /dev/null and b/y/static/satellite_image.png differ diff --git a/y/static/style.css b/y/static/style.css new file mode 100644 index 0000000000000000000000000000000000000000..ec2be6e533dddd6c7e96e17895ac66783d4d915e --- /dev/null +++ b/y/static/style.css @@ -0,0 +1,80 @@ +/* styles.css */ + +/* Header styles */ +body { + background-image: url('{% static "satellite_image.png" %}'); + background-size: cover; + background-repeat: no-repeat; + background-attachment: fixed; + font-family: 'Roboto', sans-serif; + color: #333; +} + +/* Navbar Styles */ +.navbar { + background-color: #333; +} + +.navbar a { + color: #fff; + text-decoration: none; +} + +/* Sidebar Styles */ +.sidebar { + background-color: #f8f9fa; +} + +/* Main Content Styles */ +.main-content { + background-color: rgba(255, 255, 255, 0.9); /* Semi-transparent white background */ + padding: 20px; + border-radius: 10px; +} + +/* Additional Content Styles */ +.additional-content { + background-color: #fff; + padding: 20px; + border-radius: 10px; +} + +/* Form Styles */ +.form-control { + margin-bottom: 15px; +} + +/* Button Styles */ +.btn-primary { + background-color: #007BFF; + color: #fff; +} + +/* Header Styles */ +.header { + background-color: #333; + color: #fff; + text-align: center; + padding: 20px 0; +} + +/* Map Container Styles */ +#map-container { + width: 100%; + height: 500px; + margin: 0 auto; + display: flex; + justify-content: center; + align-items: center; +} + +/* About Section Styles */ +#about { + background-color: #f9f9f9; + padding: 20px; + margin-top: 20px; + border-radius: 10px; +} + + +/* Add more CSS styles as needed */ diff --git a/y/static/temp_service.jpg b/y/static/temp_service.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9b2a6677f455dd47c0fff28deee5091f6067c0da Binary files /dev/null and b/y/static/temp_service.jpg differ diff --git a/y/static_root/admin/css/autocomplete.css b/y/static_root/admin/css/autocomplete.css new file mode 100644 index 0000000000000000000000000000000000000000..69c94e73477467d7a9376ebbdf20955c2defb9cb --- /dev/null +++ b/y/static_root/admin/css/autocomplete.css @@ -0,0 +1,275 @@ +select.admin-autocomplete { + width: 20em; +} + +.select2-container--admin-autocomplete.select2-container { + min-height: 30px; +} + +.select2-container--admin-autocomplete .select2-selection--single, +.select2-container--admin-autocomplete .select2-selection--multiple { + min-height: 30px; + padding: 0; +} + +.select2-container--admin-autocomplete.select2-container--focus .select2-selection, +.select2-container--admin-autocomplete.select2-container--open .select2-selection { + border-color: var(--body-quiet-color); + min-height: 30px; +} + +.select2-container--admin-autocomplete.select2-container--focus .select2-selection.select2-selection--single, +.select2-container--admin-autocomplete.select2-container--open .select2-selection.select2-selection--single { + padding: 0; +} + +.select2-container--admin-autocomplete.select2-container--focus .select2-selection.select2-selection--multiple, +.select2-container--admin-autocomplete.select2-container--open .select2-selection.select2-selection--multiple { + padding: 0; +} + +.select2-container--admin-autocomplete .select2-selection--single { + background-color: var(--body-bg); + border: 1px solid var(--border-color); + border-radius: 4px; +} + +.select2-container--admin-autocomplete .select2-selection--single .select2-selection__rendered { + color: var(--body-fg); + line-height: 30px; +} + +.select2-container--admin-autocomplete .select2-selection--single .select2-selection__clear { + cursor: pointer; + float: right; + font-weight: bold; +} + +.select2-container--admin-autocomplete .select2-selection--single .select2-selection__placeholder { + color: var(--body-quiet-color); +} + +.select2-container--admin-autocomplete .select2-selection--single .select2-selection__arrow { + height: 26px; + position: absolute; + top: 1px; + right: 1px; + width: 20px; +} + +.select2-container--admin-autocomplete .select2-selection--single .select2-selection__arrow b { + border-color: #888 transparent transparent transparent; + border-style: solid; + border-width: 5px 4px 0 4px; + height: 0; + left: 50%; + margin-left: -4px; + margin-top: -2px; + position: absolute; + top: 50%; + width: 0; +} + +.select2-container--admin-autocomplete[dir="rtl"] .select2-selection--single .select2-selection__clear { + float: left; +} + +.select2-container--admin-autocomplete[dir="rtl"] .select2-selection--single .select2-selection__arrow { + left: 1px; + right: auto; +} + +.select2-container--admin-autocomplete.select2-container--disabled .select2-selection--single { + background-color: var(--darkened-bg); + cursor: default; +} + +.select2-container--admin-autocomplete.select2-container--disabled .select2-selection--single .select2-selection__clear { + display: none; +} + +.select2-container--admin-autocomplete.select2-container--open .select2-selection--single .select2-selection__arrow b { + border-color: transparent transparent #888 transparent; + border-width: 0 4px 5px 4px; +} + +.select2-container--admin-autocomplete .select2-selection--multiple { + background-color: var(--body-bg); + border: 1px solid var(--border-color); + border-radius: 4px; + cursor: text; +} + +.select2-container--admin-autocomplete .select2-selection--multiple .select2-selection__rendered { + box-sizing: border-box; + list-style: none; + margin: 0; + padding: 0 10px 5px 5px; + width: 100%; + display: flex; + flex-wrap: wrap; +} + +.select2-container--admin-autocomplete .select2-selection--multiple .select2-selection__rendered li { + list-style: none; +} + +.select2-container--admin-autocomplete .select2-selection--multiple .select2-selection__placeholder { + color: var(--body-quiet-color); + margin-top: 5px; + float: left; +} + +.select2-container--admin-autocomplete .select2-selection--multiple .select2-selection__clear { + cursor: pointer; + float: right; + font-weight: bold; + margin: 5px; + position: absolute; + right: 0; +} + +.select2-container--admin-autocomplete .select2-selection--multiple .select2-selection__choice { + background-color: var(--darkened-bg); + border: 1px solid var(--border-color); + border-radius: 4px; + cursor: default; + float: left; + margin-right: 5px; + margin-top: 5px; + padding: 0 5px; +} + +.select2-container--admin-autocomplete .select2-selection--multiple .select2-selection__choice__remove { + color: var(--body-quiet-color); + cursor: pointer; + display: inline-block; + font-weight: bold; + margin-right: 2px; +} + +.select2-container--admin-autocomplete .select2-selection--multiple .select2-selection__choice__remove:hover { + color: var(--body-fg); +} + +.select2-container--admin-autocomplete[dir="rtl"] .select2-selection--multiple .select2-selection__choice, .select2-container--admin-autocomplete[dir="rtl"] .select2-selection--multiple .select2-selection__placeholder, .select2-container--admin-autocomplete[dir="rtl"] .select2-selection--multiple .select2-search--inline { + float: right; +} + +.select2-container--admin-autocomplete[dir="rtl"] .select2-selection--multiple .select2-selection__choice { + margin-left: 5px; + margin-right: auto; +} + +.select2-container--admin-autocomplete[dir="rtl"] .select2-selection--multiple .select2-selection__choice__remove { + margin-left: 2px; + margin-right: auto; +} + +.select2-container--admin-autocomplete.select2-container--focus .select2-selection--multiple { + border: solid var(--body-quiet-color) 1px; + outline: 0; +} + +.select2-container--admin-autocomplete.select2-container--disabled .select2-selection--multiple { + background-color: var(--darkened-bg); + cursor: default; +} + +.select2-container--admin-autocomplete.select2-container--disabled .select2-selection__choice__remove { + display: none; +} + +.select2-container--admin-autocomplete.select2-container--open.select2-container--above .select2-selection--single, .select2-container--admin-autocomplete.select2-container--open.select2-container--above .select2-selection--multiple { + border-top-left-radius: 0; + border-top-right-radius: 0; +} + +.select2-container--admin-autocomplete.select2-container--open.select2-container--below .select2-selection--single, .select2-container--admin-autocomplete.select2-container--open.select2-container--below .select2-selection--multiple { + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; +} + +.select2-container--admin-autocomplete .select2-search--dropdown { + background: var(--darkened-bg); +} + +.select2-container--admin-autocomplete .select2-search--dropdown .select2-search__field { + background: var(--body-bg); + color: var(--body-fg); + border: 1px solid var(--border-color); + border-radius: 4px; +} + +.select2-container--admin-autocomplete .select2-search--inline .select2-search__field { + background: transparent; + color: var(--body-fg); + border: none; + outline: 0; + box-shadow: none; + -webkit-appearance: textfield; +} + +.select2-container--admin-autocomplete .select2-results > .select2-results__options { + max-height: 200px; + overflow-y: auto; + color: var(--body-fg); + background: var(--body-bg); +} + +.select2-container--admin-autocomplete .select2-results__option[role=group] { + padding: 0; +} + +.select2-container--admin-autocomplete .select2-results__option[aria-disabled=true] { + color: var(--body-quiet-color); +} + +.select2-container--admin-autocomplete .select2-results__option[aria-selected=true] { + background-color: var(--selected-bg); + color: var(--body-fg); +} + +.select2-container--admin-autocomplete .select2-results__option .select2-results__option { + padding-left: 1em; +} + +.select2-container--admin-autocomplete .select2-results__option .select2-results__option .select2-results__group { + padding-left: 0; +} + +.select2-container--admin-autocomplete .select2-results__option .select2-results__option .select2-results__option { + margin-left: -1em; + padding-left: 2em; +} + +.select2-container--admin-autocomplete .select2-results__option .select2-results__option .select2-results__option .select2-results__option { + margin-left: -2em; + padding-left: 3em; +} + +.select2-container--admin-autocomplete .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option { + margin-left: -3em; + padding-left: 4em; +} + +.select2-container--admin-autocomplete .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option { + margin-left: -4em; + padding-left: 5em; +} + +.select2-container--admin-autocomplete .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option { + margin-left: -5em; + padding-left: 6em; +} + +.select2-container--admin-autocomplete .select2-results__option--highlighted[aria-selected] { + background-color: var(--primary); + color: var(--primary-fg); +} + +.select2-container--admin-autocomplete .select2-results__group { + cursor: default; + display: block; + padding: 6px; +} diff --git a/y/static_root/admin/css/base.css b/y/static_root/admin/css/base.css new file mode 100644 index 0000000000000000000000000000000000000000..72f4ae169b30e7851f8a8a81b9bfa0ff4936f9de --- /dev/null +++ b/y/static_root/admin/css/base.css @@ -0,0 +1,1138 @@ +/* + DJANGO Admin styles +*/ + +/* VARIABLE DEFINITIONS */ +html[data-theme="light"], +:root { + --primary: #79aec8; + --secondary: #417690; + --accent: #f5dd5d; + --primary-fg: #fff; + + --body-fg: #333; + --body-bg: #fff; + --body-quiet-color: #666; + --body-loud-color: #000; + + --header-color: #ffc; + --header-branding-color: var(--accent); + --header-bg: var(--secondary); + --header-link-color: var(--primary-fg); + + --breadcrumbs-fg: #c4dce8; + --breadcrumbs-link-fg: var(--body-bg); + --breadcrumbs-bg: var(--primary); + + --link-fg: #417893; + --link-hover-color: #036; + --link-selected-fg: #5b80b2; + + --hairline-color: #e8e8e8; + --border-color: #ccc; + + --error-fg: #ba2121; + + --message-success-bg: #dfd; + --message-warning-bg: #ffc; + --message-error-bg: #ffefef; + + --darkened-bg: #f8f8f8; /* A bit darker than --body-bg */ + --selected-bg: #e4e4e4; /* E.g. selected table cells */ + --selected-row: #ffc; + + --button-fg: #fff; + --button-bg: var(--primary); + --button-hover-bg: #609ab6; + --default-button-bg: var(--secondary); + --default-button-hover-bg: #205067; + --close-button-bg: #747474; + --close-button-hover-bg: #333; + --delete-button-bg: #ba2121; + --delete-button-hover-bg: #a41515; + + --object-tools-fg: var(--button-fg); + --object-tools-bg: var(--close-button-bg); + --object-tools-hover-bg: var(--close-button-hover-bg); + + --font-family-primary: + -apple-system, + BlinkMacSystemFont, + "Segoe UI", + system-ui, + Roboto, + "Helvetica Neue", + Arial, + sans-serif, + "Apple Color Emoji", + "Segoe UI Emoji", + "Segoe UI Symbol", + "Noto Color Emoji"; + --font-family-monospace: + ui-monospace, + Menlo, + Monaco, + "Cascadia Mono", + "Segoe UI Mono", + "Roboto Mono", + "Oxygen Mono", + "Ubuntu Monospace", + "Source Code Pro", + "Fira Mono", + "Droid Sans Mono", + "Courier New", + monospace, + "Apple Color Emoji", + "Segoe UI Emoji", + "Segoe UI Symbol", + "Noto Color Emoji"; +} + +html, body { + height: 100%; +} + +body { + margin: 0; + padding: 0; + font-size: 0.875rem; + font-family: var(--font-family-primary); + color: var(--body-fg); + background: var(--body-bg); +} + +/* LINKS */ + +a:link, a:visited { + color: var(--link-fg); + text-decoration: none; + transition: color 0.15s, background 0.15s; +} + +a:focus, a:hover { + color: var(--link-hover-color); +} + +a:focus { + text-decoration: underline; +} + +a img { + border: none; +} + +a.section:link, a.section:visited { + color: var(--header-link-color); + text-decoration: none; +} + +a.section:focus, a.section:hover { + text-decoration: underline; +} + +/* GLOBAL DEFAULTS */ + +p, ol, ul, dl { + margin: .2em 0 .8em 0; +} + +p { + padding: 0; + line-height: 140%; +} + +h1,h2,h3,h4,h5 { + font-weight: bold; +} + +h1 { + margin: 0 0 20px; + font-weight: 300; + font-size: 1.25rem; + color: var(--body-quiet-color); +} + +h2 { + font-size: 1rem; + margin: 1em 0 .5em 0; +} + +h2.subhead { + font-weight: normal; + margin-top: 0; +} + +h3 { + font-size: 0.875rem; + margin: .8em 0 .3em 0; + color: var(--body-quiet-color); + font-weight: bold; +} + +h4 { + font-size: 0.75rem; + margin: 1em 0 .8em 0; + padding-bottom: 3px; +} + +h5 { + font-size: 0.625rem; + margin: 1.5em 0 .5em 0; + color: var(--body-quiet-color); + text-transform: uppercase; + letter-spacing: 1px; +} + +ul > li { + list-style-type: square; + padding: 1px 0; +} + +li ul { + margin-bottom: 0; +} + +li, dt, dd { + font-size: 0.8125rem; + line-height: 1.25rem; +} + +dt { + font-weight: bold; + margin-top: 4px; +} + +dd { + margin-left: 0; +} + +form { + margin: 0; + padding: 0; +} + +fieldset { + margin: 0; + min-width: 0; + padding: 0; + border: none; + border-top: 1px solid var(--hairline-color); +} + +blockquote { + font-size: 0.6875rem; + color: #777; + margin-left: 2px; + padding-left: 10px; + border-left: 5px solid #ddd; +} + +code, pre { + font-family: var(--font-family-monospace); + color: var(--body-quiet-color); + font-size: 0.75rem; + overflow-x: auto; +} + +pre.literal-block { + margin: 10px; + background: var(--darkened-bg); + padding: 6px 8px; +} + +code strong { + color: #930; +} + +hr { + clear: both; + color: var(--hairline-color); + background-color: var(--hairline-color); + height: 1px; + border: none; + margin: 0; + padding: 0; + line-height: 1px; +} + +/* TEXT STYLES & MODIFIERS */ + +.small { + font-size: 0.6875rem; +} + +.mini { + font-size: 0.625rem; +} + +.help, p.help, form p.help, div.help, form div.help, div.help li { + font-size: 0.6875rem; + color: var(--body-quiet-color); +} + +div.help ul { + margin-bottom: 0; +} + +.help-tooltip { + cursor: help; +} + +p img, h1 img, h2 img, h3 img, h4 img, td img { + vertical-align: middle; +} + +.quiet, a.quiet:link, a.quiet:visited { + color: var(--body-quiet-color); + font-weight: normal; +} + +.clear { + clear: both; +} + +.nowrap { + white-space: nowrap; +} + +.hidden { + display: none !important; +} + +/* TABLES */ + +table { + border-collapse: collapse; + border-color: var(--border-color); +} + +td, th { + font-size: 0.8125rem; + line-height: 1rem; + border-bottom: 1px solid var(--hairline-color); + vertical-align: top; + padding: 8px; +} + +th { + font-weight: 600; + text-align: left; +} + +thead th, +tfoot td { + color: var(--body-quiet-color); + padding: 5px 10px; + font-size: 0.6875rem; + background: var(--body-bg); + border: none; + border-top: 1px solid var(--hairline-color); + border-bottom: 1px solid var(--hairline-color); +} + +tfoot td { + border-bottom: none; + border-top: 1px solid var(--hairline-color); +} + +thead th.required { + color: var(--body-loud-color); +} + +tr.alt { + background: var(--darkened-bg); +} + +tr:nth-child(odd), .row-form-errors { + background: var(--body-bg); +} + +tr:nth-child(even), +tr:nth-child(even) .errorlist, +tr:nth-child(odd) + .row-form-errors, +tr:nth-child(odd) + .row-form-errors .errorlist { + background: var(--darkened-bg); +} + +/* SORTABLE TABLES */ + +thead th { + padding: 5px 10px; + line-height: normal; + text-transform: uppercase; + background: var(--darkened-bg); +} + +thead th a:link, thead th a:visited { + color: var(--body-quiet-color); +} + +thead th.sorted { + background: var(--selected-bg); +} + +thead th.sorted .text { + padding-right: 42px; +} + +table thead th .text span { + padding: 8px 10px; + display: block; +} + +table thead th .text a { + display: block; + cursor: pointer; + padding: 8px 10px; +} + +table thead th .text a:focus, table thead th .text a:hover { + background: var(--selected-bg); +} + +thead th.sorted a.sortremove { + visibility: hidden; +} + +table thead th.sorted:hover a.sortremove { + visibility: visible; +} + +table thead th.sorted .sortoptions { + display: block; + padding: 9px 5px 0 5px; + float: right; + text-align: right; +} + +table thead th.sorted .sortpriority { + font-size: .8em; + min-width: 12px; + text-align: center; + vertical-align: 3px; + margin-left: 2px; + margin-right: 2px; +} + +table thead th.sorted .sortoptions a { + position: relative; + width: 14px; + height: 14px; + display: inline-block; + background: url(../img/sorting-icons.svg) 0 0 no-repeat; + background-size: 14px auto; +} + +table thead th.sorted .sortoptions a.sortremove { + background-position: 0 0; +} + +table thead th.sorted .sortoptions a.sortremove:after { + content: '\\'; + position: absolute; + top: -6px; + left: 3px; + font-weight: 200; + font-size: 1.125rem; + color: var(--body-quiet-color); +} + +table thead th.sorted .sortoptions a.sortremove:focus:after, +table thead th.sorted .sortoptions a.sortremove:hover:after { + color: var(--link-fg); +} + +table thead th.sorted .sortoptions a.sortremove:focus, +table thead th.sorted .sortoptions a.sortremove:hover { + background-position: 0 -14px; +} + +table thead th.sorted .sortoptions a.ascending { + background-position: 0 -28px; +} + +table thead th.sorted .sortoptions a.ascending:focus, +table thead th.sorted .sortoptions a.ascending:hover { + background-position: 0 -42px; +} + +table thead th.sorted .sortoptions a.descending { + top: 1px; + background-position: 0 -56px; +} + +table thead th.sorted .sortoptions a.descending:focus, +table thead th.sorted .sortoptions a.descending:hover { + background-position: 0 -70px; +} + +/* FORM DEFAULTS */ + +input, textarea, select, .form-row p, form .button { + margin: 2px 0; + padding: 2px 3px; + vertical-align: middle; + font-family: var(--font-family-primary); + font-weight: normal; + font-size: 0.8125rem; +} +.form-row div.help { + padding: 2px 3px; +} + +textarea { + vertical-align: top; +} + +input[type=text], input[type=password], input[type=email], input[type=url], +input[type=number], input[type=tel], textarea, select, .vTextField { + border: 1px solid var(--border-color); + border-radius: 4px; + padding: 5px 6px; + margin-top: 0; + color: var(--body-fg); + background-color: var(--body-bg); +} + +input[type=text]:focus, input[type=password]:focus, input[type=email]:focus, +input[type=url]:focus, input[type=number]:focus, input[type=tel]:focus, +textarea:focus, select:focus, .vTextField:focus { + border-color: var(--body-quiet-color); +} + +select { + height: 1.875rem; +} + +select[multiple] { + /* Allow HTML size attribute to override the height in the rule above. */ + height: auto; + min-height: 150px; +} + +/* FORM BUTTONS */ + +.button, input[type=submit], input[type=button], .submit-row input, a.button { + background: var(--button-bg); + padding: 10px 15px; + border: none; + border-radius: 4px; + color: var(--button-fg); + cursor: pointer; + transition: background 0.15s; +} + +a.button { + padding: 4px 5px; +} + +.button:active, input[type=submit]:active, input[type=button]:active, +.button:focus, input[type=submit]:focus, input[type=button]:focus, +.button:hover, input[type=submit]:hover, input[type=button]:hover { + background: var(--button-hover-bg); +} + +.button[disabled], input[type=submit][disabled], input[type=button][disabled] { + opacity: 0.4; +} + +.button.default, input[type=submit].default, .submit-row input.default { + border: none; + font-weight: 400; + background: var(--default-button-bg); +} + +.button.default:active, input[type=submit].default:active, +.button.default:focus, input[type=submit].default:focus, +.button.default:hover, input[type=submit].default:hover { + background: var(--default-button-hover-bg); +} + +.button[disabled].default, +input[type=submit][disabled].default, +input[type=button][disabled].default { + opacity: 0.4; +} + + +/* MODULES */ + +.module { + border: none; + margin-bottom: 30px; + background: var(--body-bg); +} + +.module p, .module ul, .module h3, .module h4, .module dl, .module pre { + padding-left: 10px; + padding-right: 10px; +} + +.module blockquote { + margin-left: 12px; +} + +.module ul, .module ol { + margin-left: 1.5em; +} + +.module h3 { + margin-top: .6em; +} + +.module h2, .module caption, .inline-group h2 { + margin: 0; + padding: 8px; + font-weight: 400; + font-size: 0.8125rem; + text-align: left; + background: var(--primary); + color: var(--header-link-color); +} + +.module caption, +.inline-group h2 { + font-size: 0.75rem; + letter-spacing: 0.5px; + text-transform: uppercase; +} + +.module table { + border-collapse: collapse; +} + +/* MESSAGES & ERRORS */ + +ul.messagelist { + padding: 0; + margin: 0; +} + +ul.messagelist li { + display: block; + font-weight: 400; + font-size: 0.8125rem; + padding: 10px 10px 10px 65px; + margin: 0 0 10px 0; + background: var(--message-success-bg) url(../img/icon-yes.svg) 40px 12px no-repeat; + background-size: 16px auto; + color: var(--body-fg); + word-break: break-word; +} + +ul.messagelist li.warning { + background: var(--message-warning-bg) url(../img/icon-alert.svg) 40px 14px no-repeat; + background-size: 14px auto; +} + +ul.messagelist li.error { + background: var(--message-error-bg) url(../img/icon-no.svg) 40px 12px no-repeat; + background-size: 16px auto; +} + +.errornote { + font-size: 0.875rem; + font-weight: 700; + display: block; + padding: 10px 12px; + margin: 0 0 10px 0; + color: var(--error-fg); + border: 1px solid var(--error-fg); + border-radius: 4px; + background-color: var(--body-bg); + background-position: 5px 12px; + overflow-wrap: break-word; +} + +ul.errorlist { + margin: 0 0 4px; + padding: 0; + color: var(--error-fg); + background: var(--body-bg); +} + +ul.errorlist li { + font-size: 0.8125rem; + display: block; + margin-bottom: 4px; + overflow-wrap: break-word; +} + +ul.errorlist li:first-child { + margin-top: 0; +} + +ul.errorlist li a { + color: inherit; + text-decoration: underline; +} + +td ul.errorlist { + margin: 0; + padding: 0; +} + +td ul.errorlist li { + margin: 0; +} + +.form-row.errors { + margin: 0; + border: none; + border-bottom: 1px solid var(--hairline-color); + background: none; +} + +.form-row.errors ul.errorlist li { + padding-left: 0; +} + +.errors input, .errors select, .errors textarea, +td ul.errorlist + input, td ul.errorlist + select, td ul.errorlist + textarea { + border: 1px solid var(--error-fg); +} + +.description { + font-size: 0.75rem; + padding: 5px 0 0 12px; +} + +/* BREADCRUMBS */ + +div.breadcrumbs { + background: var(--breadcrumbs-bg); + padding: 10px 40px; + border: none; + color: var(--breadcrumbs-fg); + text-align: left; +} + +div.breadcrumbs a { + color: var(--breadcrumbs-link-fg); +} + +div.breadcrumbs a:focus, div.breadcrumbs a:hover { + color: var(--breadcrumbs-fg); +} + +/* ACTION ICONS */ + +.viewlink, .inlineviewlink { + padding-left: 16px; + background: url(../img/icon-viewlink.svg) 0 1px no-repeat; +} + +.addlink { + padding-left: 16px; + background: url(../img/icon-addlink.svg) 0 1px no-repeat; +} + +.changelink, .inlinechangelink { + padding-left: 16px; + background: url(../img/icon-changelink.svg) 0 1px no-repeat; +} + +.deletelink { + padding-left: 16px; + background: url(../img/icon-deletelink.svg) 0 1px no-repeat; +} + +a.deletelink:link, a.deletelink:visited { + color: #CC3434; /* XXX Probably unused? */ +} + +a.deletelink:focus, a.deletelink:hover { + color: #993333; /* XXX Probably unused? */ + text-decoration: none; +} + +/* OBJECT TOOLS */ + +.object-tools { + font-size: 0.625rem; + font-weight: bold; + padding-left: 0; + float: right; + position: relative; + margin-top: -48px; +} + +.object-tools li { + display: block; + float: left; + margin-left: 5px; + height: 1rem; +} + +.object-tools a { + border-radius: 15px; +} + +.object-tools a:link, .object-tools a:visited { + display: block; + float: left; + padding: 3px 12px; + background: var(--object-tools-bg); + color: var(--object-tools-fg); + font-weight: 400; + font-size: 0.6875rem; + text-transform: uppercase; + letter-spacing: 0.5px; +} + +.object-tools a:focus, .object-tools a:hover { + background-color: var(--object-tools-hover-bg); +} + +.object-tools a:focus{ + text-decoration: none; +} + +.object-tools a.viewsitelink, .object-tools a.addlink { + background-repeat: no-repeat; + background-position: right 7px center; + padding-right: 26px; +} + +.object-tools a.viewsitelink { + background-image: url(../img/tooltag-arrowright.svg); +} + +.object-tools a.addlink { + background-image: url(../img/tooltag-add.svg); +} + +/* OBJECT HISTORY */ + +#change-history table { + width: 100%; +} + +#change-history table tbody th { + width: 16em; +} + +#change-history .paginator { + color: var(--body-quiet-color); + border-bottom: 1px solid var(--hairline-color); + background: var(--body-bg); + overflow: hidden; +} + +/* PAGE STRUCTURE */ + +#container { + position: relative; + width: 100%; + min-width: 980px; + padding: 0; + display: flex; + flex-direction: column; + height: 100%; +} + +#container > div { + flex-shrink: 0; +} + +#container > .main { + display: flex; + flex: 1 0 auto; +} + +.main > .content { + flex: 1 0; + max-width: 100%; +} + +.skip-to-content-link { + position: absolute; + top: -999px; + margin: 5px; + padding: 5px; + background: var(--body-bg); + z-index: 1; +} + +.skip-to-content-link:focus { + left: 0px; + top: 0px; +} + +#content { + padding: 20px 40px; +} + +.dashboard #content { + width: 600px; +} + +#content-main { + float: left; + width: 100%; +} + +#content-related { + float: right; + width: 260px; + position: relative; + margin-right: -300px; +} + +#footer { + clear: both; + padding: 10px; +} + +/* COLUMN TYPES */ + +.colMS { + margin-right: 300px; +} + +.colSM { + margin-left: 300px; +} + +.colSM #content-related { + float: left; + margin-right: 0; + margin-left: -300px; +} + +.colSM #content-main { + float: right; +} + +.popup .colM { + width: auto; +} + +/* HEADER */ + +#header { + width: auto; + height: auto; + display: flex; + justify-content: space-between; + align-items: center; + padding: 10px 40px; + background: var(--header-bg); + color: var(--header-color); + overflow: hidden; +} + +#header a:link, #header a:visited, #logout-form button { + color: var(--header-link-color); +} + +#header a:focus , #header a:hover { + text-decoration: underline; +} + +#branding { + display: flex; +} + +#branding h1 { + padding: 0; + margin: 0; + margin-inline-end: 20px; + font-weight: 300; + font-size: 1.5rem; + color: var(--header-branding-color); +} + +#branding h1 a:link, #branding h1 a:visited { + color: var(--accent); +} + +#branding h2 { + padding: 0 10px; + font-size: 0.875rem; + margin: -8px 0 8px 0; + font-weight: normal; + color: var(--header-color); +} + +#branding a:hover { + text-decoration: none; +} + +#logout-form { + display: inline; +} + +#logout-form button { + background: none; + border: 0; + cursor: pointer; + font-family: var(--font-family-primary); +} + +#user-tools { + float: right; + margin: 0 0 0 20px; + text-align: right; +} + +#user-tools, #logout-form button{ + padding: 0; + font-weight: 300; + font-size: 0.6875rem; + letter-spacing: 0.5px; + text-transform: uppercase; +} + +#user-tools a, #logout-form button { + border-bottom: 1px solid rgba(255, 255, 255, 0.25); +} + +#user-tools a:focus, #user-tools a:hover, +#logout-form button:active, #logout-form button:hover { + text-decoration: none; + border-bottom: 0; +} + +#logout-form button:active, #logout-form button:hover { + margin-bottom: 1px; +} + +/* SIDEBAR */ + +#content-related { + background: var(--darkened-bg); +} + +#content-related .module { + background: none; +} + +#content-related h3 { + color: var(--body-quiet-color); + padding: 0 16px; + margin: 0 0 16px; +} + +#content-related h4 { + font-size: 0.8125rem; +} + +#content-related p { + padding-left: 16px; + padding-right: 16px; +} + +#content-related .actionlist { + padding: 0; + margin: 16px; +} + +#content-related .actionlist li { + line-height: 1.2; + margin-bottom: 10px; + padding-left: 18px; +} + +#content-related .module h2 { + background: none; + padding: 16px; + margin-bottom: 16px; + border-bottom: 1px solid var(--hairline-color); + font-size: 1.125rem; + color: var(--body-fg); +} + +.delete-confirmation form input[type="submit"] { + background: var(--delete-button-bg); + border-radius: 4px; + padding: 10px 15px; + color: var(--button-fg); +} + +.delete-confirmation form input[type="submit"]:active, +.delete-confirmation form input[type="submit"]:focus, +.delete-confirmation form input[type="submit"]:hover { + background: var(--delete-button-hover-bg); +} + +.delete-confirmation form .cancel-link { + display: inline-block; + vertical-align: middle; + height: 0.9375rem; + line-height: 0.9375rem; + border-radius: 4px; + padding: 10px 15px; + color: var(--button-fg); + background: var(--close-button-bg); + margin: 0 0 0 10px; +} + +.delete-confirmation form .cancel-link:active, +.delete-confirmation form .cancel-link:focus, +.delete-confirmation form .cancel-link:hover { + background: var(--close-button-hover-bg); +} + +/* POPUP */ +.popup #content { + padding: 20px; +} + +.popup #container { + min-width: 0; +} + +.popup #header { + padding: 10px 20px; +} + +/* PAGINATOR */ + +.paginator { + font-size: 0.8125rem; + padding-top: 10px; + padding-bottom: 10px; + line-height: 22px; + margin: 0; + border-top: 1px solid var(--hairline-color); + width: 100%; +} + +.paginator a:link, .paginator a:visited { + padding: 2px 6px; + background: var(--button-bg); + text-decoration: none; + color: var(--button-fg); +} + +.paginator a.showall { + border: none; + background: none; + color: var(--link-fg); +} + +.paginator a.showall:focus, .paginator a.showall:hover { + background: none; + color: var(--link-hover-color); +} + +.paginator .end { + margin-right: 6px; +} + +.paginator .this-page { + padding: 2px 6px; + font-weight: bold; + font-size: 0.8125rem; + vertical-align: top; +} + +.paginator a:focus, .paginator a:hover { + color: white; + background: var(--link-hover-color); +} + +.base-svgs { + display: none; +} diff --git a/y/static_root/admin/css/changelists.css b/y/static_root/admin/css/changelists.css new file mode 100644 index 0000000000000000000000000000000000000000..a7545131a3917bb3e56774126bc78ab2b97e68a3 --- /dev/null +++ b/y/static_root/admin/css/changelists.css @@ -0,0 +1,328 @@ +/* CHANGELISTS */ + +#changelist { + display: flex; + align-items: flex-start; + justify-content: space-between; +} + +#changelist .changelist-form-container { + flex: 1 1 auto; + min-width: 0; +} + +#changelist table { + width: 100%; +} + +.change-list .hiddenfields { display:none; } + +.change-list .filtered table { + border-right: none; +} + +.change-list .filtered { + min-height: 400px; +} + +.change-list .filtered .results, .change-list .filtered .paginator, +.filtered #toolbar, .filtered div.xfull { + width: auto; +} + +.change-list .filtered table tbody th { + padding-right: 1em; +} + +#changelist-form .results { + overflow-x: auto; + width: 100%; +} + +#changelist .toplinks { + border-bottom: 1px solid var(--hairline-color); +} + +#changelist .paginator { + color: var(--body-quiet-color); + border-bottom: 1px solid var(--hairline-color); + background: var(--body-bg); + overflow: hidden; +} + +/* CHANGELIST TABLES */ + +#changelist table thead th { + padding: 0; + white-space: nowrap; + vertical-align: middle; +} + +#changelist table thead th.action-checkbox-column { + width: 1.5em; + text-align: center; +} + +#changelist table tbody td.action-checkbox { + text-align: center; +} + +#changelist table tfoot { + color: var(--body-quiet-color); +} + +/* TOOLBAR */ + +#toolbar { + padding: 8px 10px; + margin-bottom: 15px; + border-top: 1px solid var(--hairline-color); + border-bottom: 1px solid var(--hairline-color); + background: var(--darkened-bg); + color: var(--body-quiet-color); +} + +#toolbar form input { + border-radius: 4px; + font-size: 0.875rem; + padding: 5px; + color: var(--body-fg); +} + +#toolbar #searchbar { + height: 1.1875rem; + border: 1px solid var(--border-color); + padding: 2px 5px; + margin: 0; + vertical-align: top; + font-size: 0.8125rem; + max-width: 100%; +} + +#toolbar #searchbar:focus { + border-color: var(--body-quiet-color); +} + +#toolbar form input[type="submit"] { + border: 1px solid var(--border-color); + font-size: 0.8125rem; + padding: 4px 8px; + margin: 0; + vertical-align: middle; + background: var(--body-bg); + box-shadow: 0 -15px 20px -10px rgba(0, 0, 0, 0.15) inset; + cursor: pointer; + color: var(--body-fg); +} + +#toolbar form input[type="submit"]:focus, +#toolbar form input[type="submit"]:hover { + border-color: var(--body-quiet-color); +} + +#changelist-search img { + vertical-align: middle; + margin-right: 4px; +} + +#changelist-search .help { + word-break: break-word; +} + +/* FILTER COLUMN */ + +#changelist-filter { + flex: 0 0 240px; + order: 1; + background: var(--darkened-bg); + border-left: none; + margin: 0 0 0 30px; +} + +#changelist-filter h2 { + font-size: 0.875rem; + text-transform: uppercase; + letter-spacing: 0.5px; + padding: 5px 15px; + margin-bottom: 12px; + border-bottom: none; +} + +#changelist-filter h3, +#changelist-filter details summary { + font-weight: 400; + padding: 0 15px; + margin-bottom: 10px; +} + +#changelist-filter details summary > * { + display: inline; +} + +#changelist-filter details > summary { + list-style-type: none; +} + +#changelist-filter details > summary::-webkit-details-marker { + display: none; +} + +#changelist-filter details > summary::before { + content: '→'; + font-weight: bold; + color: var(--link-hover-color); +} + +#changelist-filter details[open] > summary::before { + content: '↓'; +} + +#changelist-filter ul { + margin: 5px 0; + padding: 0 15px 15px; + border-bottom: 1px solid var(--hairline-color); +} + +#changelist-filter ul:last-child { + border-bottom: none; +} + +#changelist-filter li { + list-style-type: none; + margin-left: 0; + padding-left: 0; +} + +#changelist-filter a { + display: block; + color: var(--body-quiet-color); + word-break: break-word; +} + +#changelist-filter li.selected { + border-left: 5px solid var(--hairline-color); + padding-left: 10px; + margin-left: -15px; +} + +#changelist-filter li.selected a { + color: var(--link-selected-fg); +} + +#changelist-filter a:focus, #changelist-filter a:hover, +#changelist-filter li.selected a:focus, +#changelist-filter li.selected a:hover { + color: var(--link-hover-color); +} + +#changelist-filter #changelist-filter-clear a { + font-size: 0.8125rem; + padding-bottom: 10px; + border-bottom: 1px solid var(--hairline-color); +} + +/* DATE DRILLDOWN */ + +.change-list .toplinks { + display: flex; + padding-bottom: 5px; + flex-wrap: wrap; + gap: 3px 17px; + font-weight: bold; +} + +.change-list .toplinks a { + font-size: 0.8125rem; +} + +.change-list .toplinks .date-back { + color: var(--body-quiet-color); +} + +.change-list .toplinks .date-back:focus, +.change-list .toplinks .date-back:hover { + color: var(--link-hover-color); +} + +/* ACTIONS */ + +.filtered .actions { + border-right: none; +} + +#changelist table input { + margin: 0; + vertical-align: baseline; +} + +/* Once the :has() pseudo-class is supported by all browsers, the tr.selected + selector and the JS adding the class can be removed. */ +#changelist tbody tr.selected { + background-color: var(--selected-row); +} + +#changelist tbody tr:has(.action-select:checked) { + background-color: var(--selected-row); +} + +#changelist .actions { + padding: 10px; + background: var(--body-bg); + border-top: none; + border-bottom: none; + line-height: 1.5rem; + color: var(--body-quiet-color); + width: 100%; +} + +#changelist .actions span.all, +#changelist .actions span.action-counter, +#changelist .actions span.clear, +#changelist .actions span.question { + font-size: 0.8125rem; + margin: 0 0.5em; +} + +#changelist .actions:last-child { + border-bottom: none; +} + +#changelist .actions select { + vertical-align: top; + height: 1.5rem; + color: var(--body-fg); + border: 1px solid var(--border-color); + border-radius: 4px; + font-size: 0.875rem; + padding: 0 0 0 4px; + margin: 0; + margin-left: 10px; +} + +#changelist .actions select:focus { + border-color: var(--body-quiet-color); +} + +#changelist .actions label { + display: inline-block; + vertical-align: middle; + font-size: 0.8125rem; +} + +#changelist .actions .button { + font-size: 0.8125rem; + border: 1px solid var(--border-color); + border-radius: 4px; + background: var(--body-bg); + box-shadow: 0 -15px 20px -10px rgba(0, 0, 0, 0.15) inset; + cursor: pointer; + height: 1.5rem; + line-height: 1; + padding: 4px 8px; + margin: 0; + color: var(--body-fg); +} + +#changelist .actions .button:focus, #changelist .actions .button:hover { + border-color: var(--body-quiet-color); +} diff --git a/y/static_root/admin/css/dark_mode.css b/y/static_root/admin/css/dark_mode.css new file mode 100644 index 0000000000000000000000000000000000000000..6d08233aaebcd6708c5c5fbc55738610cd5e911d --- /dev/null +++ b/y/static_root/admin/css/dark_mode.css @@ -0,0 +1,137 @@ +@media (prefers-color-scheme: dark) { + :root { + --primary: #264b5d; + --primary-fg: #f7f7f7; + + --body-fg: #eeeeee; + --body-bg: #121212; + --body-quiet-color: #e0e0e0; + --body-loud-color: #ffffff; + + --breadcrumbs-link-fg: #e0e0e0; + --breadcrumbs-bg: var(--primary); + + --link-fg: #81d4fa; + --link-hover-color: #4ac1f7; + --link-selected-fg: #6f94c6; + + --hairline-color: #272727; + --border-color: #353535; + + --error-fg: #e35f5f; + --message-success-bg: #006b1b; + --message-warning-bg: #583305; + --message-error-bg: #570808; + + --darkened-bg: #212121; + --selected-bg: #1b1b1b; + --selected-row: #00363a; + + --close-button-bg: #333333; + --close-button-hover-bg: #666666; + } + } + + +html[data-theme="dark"] { + --primary: #264b5d; + --primary-fg: #f7f7f7; + + --body-fg: #eeeeee; + --body-bg: #121212; + --body-quiet-color: #e0e0e0; + --body-loud-color: #ffffff; + + --breadcrumbs-link-fg: #e0e0e0; + --breadcrumbs-bg: var(--primary); + + --link-fg: #81d4fa; + --link-hover-color: #4ac1f7; + --link-selected-fg: #6f94c6; + + --hairline-color: #272727; + --border-color: #353535; + + --error-fg: #e35f5f; + --message-success-bg: #006b1b; + --message-warning-bg: #583305; + --message-error-bg: #570808; + + --darkened-bg: #212121; + --selected-bg: #1b1b1b; + --selected-row: #00363a; + + --close-button-bg: #333333; + --close-button-hover-bg: #666666; +} + +/* THEME SWITCH */ +.theme-toggle { + cursor: pointer; + border: none; + padding: 0; + background: transparent; + vertical-align: middle; + margin-inline-start: 5px; + margin-top: -1px; +} + +.theme-toggle svg { + vertical-align: middle; + height: 1rem; + width: 1rem; + display: none; +} + +/* +Fully hide screen reader text so we only show the one matching the current +theme. +*/ +.theme-toggle .visually-hidden { + display: none; +} + +html[data-theme="auto"] .theme-toggle .theme-label-when-auto { + display: block; +} + +html[data-theme="dark"] .theme-toggle .theme-label-when-dark { + display: block; +} + +html[data-theme="light"] .theme-toggle .theme-label-when-light { + display: block; +} + +/* ICONS */ +.theme-toggle svg.theme-icon-when-auto, +.theme-toggle svg.theme-icon-when-dark, +.theme-toggle svg.theme-icon-when-light { + fill: var(--header-link-color); + color: var(--header-bg); +} + +html[data-theme="auto"] .theme-toggle svg.theme-icon-when-auto { + display: block; +} + +html[data-theme="dark"] .theme-toggle svg.theme-icon-when-dark { + display: block; +} + +html[data-theme="light"] .theme-toggle svg.theme-icon-when-light { + display: block; +} + +.visually-hidden { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + overflow: hidden; + clip: rect(0,0,0,0); + white-space: nowrap; + border: 0; + color: var(--body-fg); + background-color: var(--body-bg); +} diff --git a/y/static_root/admin/css/dashboard.css b/y/static_root/admin/css/dashboard.css new file mode 100644 index 0000000000000000000000000000000000000000..242b81a45f8540831ef7c40536f79530b6652c62 --- /dev/null +++ b/y/static_root/admin/css/dashboard.css @@ -0,0 +1,29 @@ +/* DASHBOARD */ +.dashboard td, .dashboard th { + word-break: break-word; +} + +.dashboard .module table th { + width: 100%; +} + +.dashboard .module table td { + white-space: nowrap; +} + +.dashboard .module table td a { + display: block; + padding-right: .6em; +} + +/* RECENT ACTIONS MODULE */ + +.module ul.actionlist { + margin-left: 0; +} + +ul.actionlist li { + list-style-type: none; + overflow: hidden; + text-overflow: ellipsis; +} diff --git a/y/static_root/admin/css/forms.css b/y/static_root/admin/css/forms.css new file mode 100644 index 0000000000000000000000000000000000000000..e45abe1c07e9875c703d20bbf44890019fa8e1d5 --- /dev/null +++ b/y/static_root/admin/css/forms.css @@ -0,0 +1,530 @@ +@import url('widgets.css'); + +/* FORM ROWS */ + +.form-row { + overflow: hidden; + padding: 10px; + font-size: 0.8125rem; + border-bottom: 1px solid var(--hairline-color); +} + +.form-row img, .form-row input { + vertical-align: middle; +} + +.form-row label input[type="checkbox"] { + margin-top: 0; + vertical-align: 0; +} + +form .form-row p { + padding-left: 0; +} + +.flex-container { + display: flex; + flex-wrap: wrap; +} + +.form-multiline > div { + padding-bottom: 10px; +} + +/* FORM LABELS */ + +label { + font-weight: normal; + color: var(--body-quiet-color); + font-size: 0.8125rem; +} + +.required label, label.required { + font-weight: bold; + color: var(--body-fg); +} + +/* RADIO BUTTONS */ + +form div.radiolist div { + padding-right: 7px; +} + +form div.radiolist.inline div { + display: inline-block; +} + +form div.radiolist label { + width: auto; +} + +form div.radiolist input[type="radio"] { + margin: -2px 4px 0 0; + padding: 0; +} + +form ul.inline { + margin-left: 0; + padding: 0; +} + +form ul.inline li { + float: left; + padding-right: 7px; +} + +/* ALIGNED FIELDSETS */ + +.aligned label { + display: block; + padding: 4px 10px 0 0; + width: 160px; + word-wrap: break-word; + line-height: 1; +} + +.aligned label:not(.vCheckboxLabel):after { + content: ''; + display: inline-block; + vertical-align: middle; + height: 1.625rem; +} + +.aligned label + p, .aligned .checkbox-row + div.help, .aligned label + div.readonly { + padding: 6px 0; + margin-top: 0; + margin-bottom: 0; + margin-left: 0; + overflow-wrap: break-word; +} + +.aligned ul label { + display: inline; + float: none; + width: auto; +} + +.aligned .form-row input { + margin-bottom: 0; +} + +.colMS .aligned .vLargeTextField, .colMS .aligned .vXMLLargeTextField { + width: 350px; +} + +form .aligned ul { + margin-left: 160px; + padding-left: 10px; +} + +form .aligned div.radiolist { + display: inline-block; + margin: 0; + padding: 0; +} + +form .aligned p.help, +form .aligned div.help { + margin-top: 0; + margin-left: 160px; + padding-left: 10px; +} + +form .aligned p.date div.help.timezonewarning, +form .aligned p.datetime div.help.timezonewarning, +form .aligned p.time div.help.timezonewarning { + margin-left: 0; + padding-left: 0; + font-weight: normal; +} + +form .aligned p.help:last-child, +form .aligned div.help:last-child { + margin-bottom: 0; + padding-bottom: 0; +} + +form .aligned input + p.help, +form .aligned textarea + p.help, +form .aligned select + p.help, +form .aligned input + div.help, +form .aligned textarea + div.help, +form .aligned select + div.help { + margin-left: 160px; + padding-left: 10px; +} + +form .aligned ul li { + list-style: none; +} + +form .aligned table p { + margin-left: 0; + padding-left: 0; +} + +.aligned .vCheckboxLabel { + float: none; + width: auto; + display: inline-block; + vertical-align: -3px; + padding: 0 0 5px 5px; +} + +.aligned .vCheckboxLabel + p.help, +.aligned .vCheckboxLabel + div.help { + margin-top: -4px; +} + +.colM .aligned .vLargeTextField, .colM .aligned .vXMLLargeTextField { + width: 610px; +} + +fieldset .fieldBox { + margin-right: 20px; +} + +/* WIDE FIELDSETS */ + +.wide label { + width: 200px; +} + +form .wide p, +form .wide ul.errorlist, +form .wide input + p.help, +form .wide input + div.help { + margin-left: 200px; +} + +form .wide p.help, +form .wide div.help { + padding-left: 50px; +} + +form div.help ul { + padding-left: 0; + margin-left: 0; +} + +.colM fieldset.wide .vLargeTextField, .colM fieldset.wide .vXMLLargeTextField { + width: 450px; +} + +/* COLLAPSED FIELDSETS */ + +fieldset.collapsed * { + display: none; +} + +fieldset.collapsed h2, fieldset.collapsed { + display: block; +} + +fieldset.collapsed { + border: 1px solid var(--hairline-color); + border-radius: 4px; + overflow: hidden; +} + +fieldset.collapsed h2 { + background: var(--darkened-bg); + color: var(--body-quiet-color); +} + +fieldset .collapse-toggle { + color: var(--header-link-color); +} + +fieldset.collapsed .collapse-toggle { + background: transparent; + display: inline; + color: var(--link-fg); +} + +/* MONOSPACE TEXTAREAS */ + +fieldset.monospace textarea { + font-family: var(--font-family-monospace); +} + +/* SUBMIT ROW */ + +.submit-row { + padding: 12px 14px 12px; + margin: 0 0 20px; + background: var(--darkened-bg); + border: 1px solid var(--hairline-color); + border-radius: 4px; + overflow: hidden; + display: flex; + gap: 10px; + flex-wrap: wrap; +} + +body.popup .submit-row { + overflow: auto; +} + +.submit-row input { + height: 2.1875rem; + line-height: 0.9375rem; +} + +.submit-row input, .submit-row a { + margin: 0; +} + +.submit-row input.default { + text-transform: uppercase; +} + +.submit-row a.deletelink { + margin-left: auto; +} + +.submit-row a.deletelink { + display: block; + background: var(--delete-button-bg); + border-radius: 4px; + padding: 0.625rem 0.9375rem; + height: 0.9375rem; + line-height: 0.9375rem; + color: var(--button-fg); +} + +.submit-row a.closelink { + display: inline-block; + background: var(--close-button-bg); + border-radius: 4px; + padding: 10px 15px; + height: 0.9375rem; + line-height: 0.9375rem; + color: var(--button-fg); +} + +.submit-row a.deletelink:focus, +.submit-row a.deletelink:hover, +.submit-row a.deletelink:active { + background: var(--delete-button-hover-bg); + text-decoration: none; +} + +.submit-row a.closelink:focus, +.submit-row a.closelink:hover, +.submit-row a.closelink:active { + background: var(--close-button-hover-bg); + text-decoration: none; +} + +/* CUSTOM FORM FIELDS */ + +.vSelectMultipleField { + vertical-align: top; +} + +.vCheckboxField { + border: none; +} + +.vDateField, .vTimeField { + margin-right: 2px; + margin-bottom: 4px; +} + +.vDateField { + min-width: 6.85em; +} + +.vTimeField { + min-width: 4.7em; +} + +.vURLField { + width: 30em; +} + +.vLargeTextField, .vXMLLargeTextField { + width: 48em; +} + +.flatpages-flatpage #id_content { + height: 40.2em; +} + +.module table .vPositiveSmallIntegerField { + width: 2.2em; +} + +.vIntegerField { + width: 5em; +} + +.vBigIntegerField { + width: 10em; +} + +.vForeignKeyRawIdAdminField { + width: 5em; +} + +.vTextField, .vUUIDField { + width: 20em; +} + +/* INLINES */ + +.inline-group { + padding: 0; + margin: 0 0 30px; +} + +.inline-group thead th { + padding: 8px 10px; +} + +.inline-group .aligned label { + width: 160px; +} + +.inline-related { + position: relative; +} + +.inline-related h3 { + margin: 0; + color: var(--body-quiet-color); + padding: 5px; + font-size: 0.8125rem; + background: var(--darkened-bg); + border-top: 1px solid var(--hairline-color); + border-bottom: 1px solid var(--hairline-color); +} + +.inline-related h3 span.delete { + float: right; +} + +.inline-related h3 span.delete label { + margin-left: 2px; + font-size: 0.6875rem; +} + +.inline-related fieldset { + margin: 0; + background: var(--body-bg); + border: none; + width: 100%; +} + +.inline-related fieldset.module h3 { + margin: 0; + padding: 2px 5px 3px 5px; + font-size: 0.6875rem; + text-align: left; + font-weight: bold; + background: #bcd; + color: var(--body-bg); +} + +.inline-group .tabular fieldset.module { + border: none; +} + +.inline-related.tabular fieldset.module table { + width: 100%; + overflow-x: scroll; +} + +.last-related fieldset { + border: none; +} + +.inline-group .tabular tr.has_original td { + padding-top: 2em; +} + +.inline-group .tabular tr td.original { + padding: 2px 0 0 0; + width: 0; + _position: relative; +} + +.inline-group .tabular th.original { + width: 0px; + padding: 0; +} + +.inline-group .tabular td.original p { + position: absolute; + left: 0; + height: 1.1em; + padding: 2px 9px; + overflow: hidden; + font-size: 0.5625rem; + font-weight: bold; + color: var(--body-quiet-color); + _width: 700px; +} + +.inline-group ul.tools { + padding: 0; + margin: 0; + list-style: none; +} + +.inline-group ul.tools li { + display: inline; + padding: 0 5px; +} + +.inline-group div.add-row, +.inline-group .tabular tr.add-row td { + color: var(--body-quiet-color); + background: var(--darkened-bg); + padding: 8px 10px; + border-bottom: 1px solid var(--hairline-color); +} + +.inline-group .tabular tr.add-row td { + padding: 8px 10px; + border-bottom: 1px solid var(--hairline-color); +} + +.inline-group ul.tools a.add, +.inline-group div.add-row a, +.inline-group .tabular tr.add-row td a { + background: url(../img/icon-addlink.svg) 0 1px no-repeat; + padding-left: 16px; + font-size: 0.75rem; +} + +.empty-form { + display: none; +} + +/* RELATED FIELD ADD ONE / LOOKUP */ + +.related-lookup { + margin-left: 5px; + display: inline-block; + vertical-align: middle; + background-repeat: no-repeat; + background-size: 14px; +} + +.related-lookup { + width: 1rem; + height: 1rem; + background-image: url(../img/search.svg); +} + +form .related-widget-wrapper ul { + display: inline-block; + margin-left: 0; + padding-left: 0; +} + +.clearable-file-input input { + margin-top: 0; +} diff --git a/y/static_root/admin/css/login.css b/y/static_root/admin/css/login.css new file mode 100644 index 0000000000000000000000000000000000000000..389772f5bcec0fc5dce54cab9afdf5a8545bb713 --- /dev/null +++ b/y/static_root/admin/css/login.css @@ -0,0 +1,61 @@ +/* LOGIN FORM */ + +.login { + background: var(--darkened-bg); + height: auto; +} + +.login #header { + height: auto; + padding: 15px 16px; + justify-content: center; +} + +.login #header h1 { + font-size: 1.125rem; + margin: 0; +} + +.login #header h1 a { + color: var(--header-link-color); +} + +.login #content { + padding: 20px 20px 0; +} + +.login #container { + background: var(--body-bg); + border: 1px solid var(--hairline-color); + border-radius: 4px; + overflow: hidden; + width: 28em; + min-width: 300px; + margin: 100px auto; + height: auto; +} + +.login .form-row { + padding: 4px 0; +} + +.login .form-row label { + display: block; + line-height: 2em; +} + +.login .form-row #id_username, .login .form-row #id_password { + padding: 8px; + width: 100%; + box-sizing: border-box; +} + +.login .submit-row { + padding: 1em 0 0 0; + margin: 0; + text-align: center; +} + +.login .password-reset-link { + text-align: center; +} diff --git a/y/static_root/admin/css/nav_sidebar.css b/y/static_root/admin/css/nav_sidebar.css new file mode 100644 index 0000000000000000000000000000000000000000..f76e6ce485911e70589d28d63e01dad0c82331ad --- /dev/null +++ b/y/static_root/admin/css/nav_sidebar.css @@ -0,0 +1,144 @@ +.sticky { + position: sticky; + top: 0; + max-height: 100vh; +} + +.toggle-nav-sidebar { + z-index: 20; + left: 0; + display: flex; + align-items: center; + justify-content: center; + flex: 0 0 23px; + width: 23px; + border: 0; + border-right: 1px solid var(--hairline-color); + background-color: var(--body-bg); + cursor: pointer; + font-size: 1.25rem; + color: var(--link-fg); + padding: 0; +} + +[dir="rtl"] .toggle-nav-sidebar { + border-left: 1px solid var(--hairline-color); + border-right: 0; +} + +.toggle-nav-sidebar:hover, +.toggle-nav-sidebar:focus { + background-color: var(--darkened-bg); +} + +#nav-sidebar { + z-index: 15; + flex: 0 0 275px; + left: -276px; + margin-left: -276px; + border-top: 1px solid transparent; + border-right: 1px solid var(--hairline-color); + background-color: var(--body-bg); + overflow: auto; +} + +[dir="rtl"] #nav-sidebar { + border-left: 1px solid var(--hairline-color); + border-right: 0; + left: 0; + margin-left: 0; + right: -276px; + margin-right: -276px; +} + +.toggle-nav-sidebar::before { + content: '\00BB'; +} + +.main.shifted .toggle-nav-sidebar::before { + content: '\00AB'; +} + +.main > #nav-sidebar { + visibility: hidden; +} + +.main.shifted > #nav-sidebar { + margin-left: 0; + visibility: visible; +} + +[dir="rtl"] .main.shifted > #nav-sidebar { + margin-right: 0; +} + +#nav-sidebar .module th { + width: 100%; + overflow-wrap: anywhere; +} + +#nav-sidebar .module th, +#nav-sidebar .module caption { + padding-left: 16px; +} + +#nav-sidebar .module td { + white-space: nowrap; +} + +[dir="rtl"] #nav-sidebar .module th, +[dir="rtl"] #nav-sidebar .module caption { + padding-left: 8px; + padding-right: 16px; +} + +#nav-sidebar .current-app .section:link, +#nav-sidebar .current-app .section:visited { + color: var(--header-color); + font-weight: bold; +} + +#nav-sidebar .current-model { + background: var(--selected-row); +} + +.main > #nav-sidebar + .content { + max-width: calc(100% - 23px); +} + +.main.shifted > #nav-sidebar + .content { + max-width: calc(100% - 299px); +} + +@media (max-width: 767px) { + #nav-sidebar, #toggle-nav-sidebar { + display: none; + } + + .main > #nav-sidebar + .content, + .main.shifted > #nav-sidebar + .content { + max-width: 100%; + } +} + +#nav-filter { + width: 100%; + box-sizing: border-box; + padding: 2px 5px; + margin: 5px 0; + border: 1px solid var(--border-color); + background-color: var(--darkened-bg); + color: var(--body-fg); +} + +#nav-filter:focus { + border-color: var(--body-quiet-color); +} + +#nav-filter.no-results { + background: var(--message-error-bg); +} + +#nav-sidebar table { + width: 100%; +} diff --git a/y/static_root/admin/css/responsive.css b/y/static_root/admin/css/responsive.css new file mode 100644 index 0000000000000000000000000000000000000000..9ce4f67bf22373e4f2ead9d18b4e300aee5eab53 --- /dev/null +++ b/y/static_root/admin/css/responsive.css @@ -0,0 +1,998 @@ +/* Tablets */ + +input[type="submit"], button { + -webkit-appearance: none; + appearance: none; +} + +@media (max-width: 1024px) { + /* Basic */ + + html { + -webkit-text-size-adjust: 100%; + } + + td, th { + padding: 10px; + font-size: 0.875rem; + } + + .small { + font-size: 0.75rem; + } + + /* Layout */ + + #container { + min-width: 0; + } + + #content { + padding: 15px 20px 20px; + } + + div.breadcrumbs { + padding: 10px 30px; + } + + /* Header */ + + #header { + flex-direction: column; + padding: 15px 30px; + justify-content: flex-start; + } + + #branding h1 { + margin: 0 0 8px; + line-height: 1.2; + } + + #user-tools { + margin: 0; + font-weight: 400; + line-height: 1.85; + text-align: left; + } + + #user-tools a { + display: inline-block; + line-height: 1.4; + } + + /* Dashboard */ + + .dashboard #content { + width: auto; + } + + #content-related { + margin-right: -290px; + } + + .colSM #content-related { + margin-left: -290px; + } + + .colMS { + margin-right: 290px; + } + + .colSM { + margin-left: 290px; + } + + .dashboard .module table td a { + padding-right: 0; + } + + td .changelink, td .addlink { + font-size: 0.8125rem; + } + + /* Changelist */ + + #toolbar { + border: none; + padding: 15px; + } + + #changelist-search > div { + display: flex; + flex-wrap: nowrap; + max-width: 480px; + } + + #changelist-search label { + line-height: 1.375rem; + } + + #toolbar form #searchbar { + flex: 1 0 auto; + width: 0; + height: 1.375rem; + margin: 0 10px 0 6px; + } + + #toolbar form input[type=submit] { + flex: 0 1 auto; + } + + #changelist-search .quiet { + width: 0; + flex: 1 0 auto; + margin: 5px 0 0 25px; + } + + #changelist .actions { + display: flex; + flex-wrap: wrap; + padding: 15px 0; + } + + #changelist .actions label { + display: flex; + } + + #changelist .actions select { + background: var(--body-bg); + } + + #changelist .actions .button { + min-width: 48px; + margin: 0 10px; + } + + #changelist .actions span.all, + #changelist .actions span.clear, + #changelist .actions span.question, + #changelist .actions span.action-counter { + font-size: 0.6875rem; + margin: 0 10px 0 0; + } + + #changelist-filter { + flex-basis: 200px; + } + + .change-list .filtered .results, + .change-list .filtered .paginator, + .filtered #toolbar, + .filtered .actions, + + #changelist .paginator { + border-top-color: var(--hairline-color); /* XXX Is this used at all? */ + } + + #changelist .results + .paginator { + border-top: none; + } + + /* Forms */ + + label { + font-size: 0.875rem; + } + + .form-row input[type=text], + .form-row input[type=password], + .form-row input[type=email], + .form-row input[type=url], + .form-row input[type=tel], + .form-row input[type=number], + .form-row textarea, + .form-row select, + .form-row .vTextField { + box-sizing: border-box; + margin: 0; + padding: 6px 8px; + min-height: 2.25rem; + font-size: 0.875rem; + } + + .form-row select { + height: 2.25rem; + } + + .form-row select[multiple] { + height: auto; + min-height: 0; + } + + fieldset .fieldBox + .fieldBox { + margin-top: 10px; + padding-top: 10px; + border-top: 1px solid var(--hairline-color); + } + + textarea { + max-width: 100%; + max-height: 120px; + } + + .aligned label { + padding-top: 6px; + } + + .aligned .related-lookup, + .aligned .datetimeshortcuts, + .aligned .related-lookup + strong { + align-self: center; + margin-left: 15px; + } + + form .aligned div.radiolist { + margin-left: 2px; + } + + .submit-row { + padding: 8px; + } + + .submit-row a.deletelink { + padding: 10px 7px; + } + + .button, input[type=submit], input[type=button], .submit-row input, a.button { + padding: 7px; + } + + /* Related widget */ + + .related-widget-wrapper { + float: none; + } + + .related-widget-wrapper-link + .selector { + max-width: calc(100% - 30px); + margin-right: 15px; + } + + select + .related-widget-wrapper-link, + .related-widget-wrapper-link + .related-widget-wrapper-link { + margin-left: 10px; + } + + /* Selector */ + + .selector { + display: flex; + width: 100%; + } + + .selector .selector-filter { + display: flex; + align-items: center; + } + + .selector .selector-filter label { + margin: 0 8px 0 0; + } + + .selector .selector-filter input { + width: auto; + min-height: 0; + flex: 1 1; + } + + .selector-available, .selector-chosen { + width: auto; + flex: 1 1; + display: flex; + flex-direction: column; + } + + .selector select { + width: 100%; + flex: 1 0 auto; + margin-bottom: 5px; + } + + .selector ul.selector-chooser { + width: 26px; + height: 52px; + padding: 2px 0; + margin: auto 15px; + border-radius: 20px; + transform: translateY(-10px); + } + + .selector-add, .selector-remove { + width: 20px; + height: 20px; + background-size: 20px auto; + } + + .selector-add { + background-position: 0 -120px; + } + + .selector-remove { + background-position: 0 -80px; + } + + a.selector-chooseall, a.selector-clearall { + align-self: center; + } + + .stacked { + flex-direction: column; + max-width: 480px; + } + + .stacked > * { + flex: 0 1 auto; + } + + .stacked select { + margin-bottom: 0; + } + + .stacked .selector-available, .stacked .selector-chosen { + width: auto; + } + + .stacked ul.selector-chooser { + width: 52px; + height: 26px; + padding: 0 2px; + margin: 15px auto; + transform: none; + } + + .stacked .selector-chooser li { + padding: 3px; + } + + .stacked .selector-add, .stacked .selector-remove { + background-size: 20px auto; + } + + .stacked .selector-add { + background-position: 0 -40px; + } + + .stacked .active.selector-add { + background-position: 0 -40px; + } + + .active.selector-add:focus, .active.selector-add:hover { + background-position: 0 -140px; + } + + .stacked .active.selector-add:focus, .stacked .active.selector-add:hover { + background-position: 0 -60px; + } + + .stacked .selector-remove { + background-position: 0 0; + } + + .stacked .active.selector-remove { + background-position: 0 0; + } + + .active.selector-remove:focus, .active.selector-remove:hover { + background-position: 0 -100px; + } + + .stacked .active.selector-remove:focus, .stacked .active.selector-remove:hover { + background-position: 0 -20px; + } + + .help-tooltip, .selector .help-icon { + display: none; + } + + .datetime input { + width: 50%; + max-width: 120px; + } + + .datetime span { + font-size: 0.8125rem; + } + + .datetime .timezonewarning { + display: block; + font-size: 0.6875rem; + color: var(--body-quiet-color); + } + + .datetimeshortcuts { + color: var(--border-color); /* XXX Redundant, .datetime span also sets #ccc */ + } + + .form-row .datetime input.vDateField, .form-row .datetime input.vTimeField { + width: 75%; + } + + .inline-group { + overflow: auto; + } + + /* Messages */ + + ul.messagelist li { + padding-left: 55px; + background-position: 30px 12px; + } + + ul.messagelist li.error { + background-position: 30px 12px; + } + + ul.messagelist li.warning { + background-position: 30px 14px; + } + + /* Login */ + + .login #header { + padding: 15px 20px; + } + + .login #branding h1 { + margin: 0; + } + + /* GIS */ + + div.olMap { + max-width: calc(100vw - 30px); + max-height: 300px; + } + + .olMap + .clear_features { + display: block; + margin-top: 10px; + } + + /* Docs */ + + .module table.xfull { + width: 100%; + } + + pre.literal-block { + overflow: auto; + } +} + +/* Mobile */ + +@media (max-width: 767px) { + /* Layout */ + + #header, #content, #footer { + padding: 15px; + } + + #footer:empty { + padding: 0; + } + + div.breadcrumbs { + padding: 10px 15px; + } + + /* Dashboard */ + + .colMS, .colSM { + margin: 0; + } + + #content-related, .colSM #content-related { + width: 100%; + margin: 0; + } + + #content-related .module { + margin-bottom: 0; + } + + #content-related .module h2 { + padding: 10px 15px; + font-size: 1rem; + } + + /* Changelist */ + + #changelist { + align-items: stretch; + flex-direction: column; + } + + #toolbar { + padding: 10px; + } + + #changelist-filter { + margin-left: 0; + } + + #changelist .actions label { + flex: 1 1; + } + + #changelist .actions select { + flex: 1 0; + width: 100%; + } + + #changelist .actions span { + flex: 1 0 100%; + } + + #changelist-filter { + position: static; + width: auto; + margin-top: 30px; + } + + .object-tools { + float: none; + margin: 0 0 15px; + padding: 0; + overflow: hidden; + } + + .object-tools li { + height: auto; + margin-left: 0; + } + + .object-tools li + li { + margin-left: 15px; + } + + /* Forms */ + + .form-row { + padding: 15px 0; + } + + .aligned .form-row, + .aligned .form-row > div { + max-width: 100vw; + } + + .aligned .form-row > div { + width: calc(100vw - 30px); + } + + .flex-container { + flex-flow: column; + } + + textarea { + max-width: none; + } + + .vURLField { + width: auto; + } + + fieldset .fieldBox + .fieldBox { + margin-top: 15px; + padding-top: 15px; + } + + fieldset.collapsed .form-row { + display: none; + } + + .aligned label { + width: 100%; + padding: 0 0 10px; + } + + .aligned label:after { + max-height: 0; + } + + .aligned .form-row input, + .aligned .form-row select, + .aligned .form-row textarea { + flex: 1 1 auto; + max-width: 100%; + } + + .aligned .checkbox-row { + align-items: center; + } + + .aligned .checkbox-row input { + flex: 0 1 auto; + margin: 0; + } + + .aligned .vCheckboxLabel { + flex: 1 0; + padding: 1px 0 0 5px; + } + + .aligned label + p, + .aligned label + div.help, + .aligned label + div.readonly { + padding: 0; + margin-left: 0; + } + + .aligned p.file-upload { + font-size: 0.8125rem; + } + + span.clearable-file-input { + margin-left: 15px; + } + + span.clearable-file-input label { + font-size: 0.8125rem; + padding-bottom: 0; + } + + .aligned .timezonewarning { + flex: 1 0 100%; + margin-top: 5px; + } + + form .aligned .form-row div.help { + width: 100%; + margin: 5px 0 0; + padding: 0; + } + + form .aligned ul, + form .aligned ul.errorlist { + margin-left: 0; + padding-left: 0; + } + + form .aligned div.radiolist { + margin-top: 5px; + margin-right: 15px; + margin-bottom: -3px; + } + + form .aligned div.radiolist:not(.inline) div + div { + margin-top: 5px; + } + + /* Related widget */ + + .related-widget-wrapper { + width: 100%; + display: flex; + align-items: flex-start; + } + + .related-widget-wrapper .selector { + order: 1; + } + + .related-widget-wrapper > a { + order: 2; + } + + .related-widget-wrapper .radiolist ~ a { + align-self: flex-end; + } + + .related-widget-wrapper > select ~ a { + align-self: center; + } + + select + .related-widget-wrapper-link, + .related-widget-wrapper-link + .related-widget-wrapper-link { + margin-left: 15px; + } + + /* Selector */ + + .selector { + flex-direction: column; + } + + .selector > * { + float: none; + } + + .selector-available, .selector-chosen { + margin-bottom: 0; + flex: 1 1 auto; + } + + .selector select { + max-height: 96px; + } + + .selector ul.selector-chooser { + display: block; + float: none; + width: 52px; + height: 26px; + padding: 0 2px; + margin: 15px auto 20px; + transform: none; + } + + .selector ul.selector-chooser li { + float: left; + } + + .selector-remove { + background-position: 0 0; + } + + .active.selector-remove:focus, .active.selector-remove:hover { + background-position: 0 -20px; + } + + .selector-add { + background-position: 0 -40px; + } + + .active.selector-add:focus, .active.selector-add:hover { + background-position: 0 -60px; + } + + /* Inlines */ + + .inline-group[data-inline-type="stacked"] .inline-related { + border: 1px solid var(--hairline-color); + border-radius: 4px; + margin-top: 15px; + overflow: auto; + } + + .inline-group[data-inline-type="stacked"] .inline-related > * { + box-sizing: border-box; + } + + .inline-group[data-inline-type="stacked"] .inline-related .module { + padding: 0 10px; + } + + .inline-group[data-inline-type="stacked"] .inline-related .module .form-row { + border-top: 1px solid var(--hairline-color); + border-bottom: none; + } + + .inline-group[data-inline-type="stacked"] .inline-related .module .form-row:first-child { + border-top: none; + } + + .inline-group[data-inline-type="stacked"] .inline-related h3 { + padding: 10px; + border-top-width: 0; + border-bottom-width: 2px; + display: flex; + flex-wrap: wrap; + align-items: center; + } + + .inline-group[data-inline-type="stacked"] .inline-related h3 .inline_label { + margin-right: auto; + } + + .inline-group[data-inline-type="stacked"] .inline-related h3 span.delete { + float: none; + flex: 1 1 100%; + margin-top: 5px; + } + + .inline-group[data-inline-type="stacked"] .aligned .form-row > div:not([class]) { + width: 100%; + } + + .inline-group[data-inline-type="stacked"] .aligned label { + width: 100%; + } + + .inline-group[data-inline-type="stacked"] div.add-row { + margin-top: 15px; + border: 1px solid var(--hairline-color); + border-radius: 4px; + } + + .inline-group div.add-row, + .inline-group .tabular tr.add-row td { + padding: 0; + } + + .inline-group div.add-row a, + .inline-group .tabular tr.add-row td a { + display: block; + padding: 8px 10px 8px 26px; + background-position: 8px 9px; + } + + /* Submit row */ + + .submit-row { + padding: 10px; + margin: 0 0 15px; + flex-direction: column; + gap: 8px; + } + + .submit-row input, .submit-row input.default, .submit-row a { + text-align: center; + } + + .submit-row a.closelink { + padding: 10px 0; + text-align: center; + } + + .submit-row a.deletelink { + margin: 0; + } + + /* Messages */ + + ul.messagelist li { + padding-left: 40px; + background-position: 15px 12px; + } + + ul.messagelist li.error { + background-position: 15px 12px; + } + + ul.messagelist li.warning { + background-position: 15px 14px; + } + + /* Paginator */ + + .paginator .this-page, .paginator a:link, .paginator a:visited { + padding: 4px 10px; + } + + /* Login */ + + body.login { + padding: 0 15px; + } + + .login #container { + width: auto; + max-width: 480px; + margin: 50px auto; + } + + .login #header, + .login #content { + padding: 15px; + } + + .login #content-main { + float: none; + } + + .login .form-row { + padding: 0; + } + + .login .form-row + .form-row { + margin-top: 15px; + } + + .login .form-row label { + margin: 0 0 5px; + line-height: 1.2; + } + + .login .submit-row { + padding: 15px 0 0; + } + + .login br { + display: none; + } + + .login .submit-row input { + margin: 0; + text-transform: uppercase; + } + + .errornote { + margin: 0 0 20px; + padding: 8px 12px; + font-size: 0.8125rem; + } + + /* Calendar and clock */ + + .calendarbox, .clockbox { + position: fixed !important; + top: 50% !important; + left: 50% !important; + transform: translate(-50%, -50%); + margin: 0; + border: none; + overflow: visible; + } + + .calendarbox:before, .clockbox:before { + content: ''; + position: fixed; + top: 50%; + left: 50%; + width: 100vw; + height: 100vh; + background: rgba(0, 0, 0, 0.75); + transform: translate(-50%, -50%); + } + + .calendarbox > *, .clockbox > * { + position: relative; + z-index: 1; + } + + .calendarbox > div:first-child { + z-index: 2; + } + + .calendarbox .calendar, .clockbox h2 { + border-radius: 4px 4px 0 0; + overflow: hidden; + } + + .calendarbox .calendar-cancel, .clockbox .calendar-cancel { + border-radius: 0 0 4px 4px; + overflow: hidden; + } + + .calendar-shortcuts { + padding: 10px 0; + font-size: 0.75rem; + line-height: 0.75rem; + } + + .calendar-shortcuts a { + margin: 0 4px; + } + + .timelist a { + background: var(--body-bg); + padding: 4px; + } + + .calendar-cancel { + padding: 8px 10px; + } + + .clockbox h2 { + padding: 8px 15px; + } + + .calendar caption { + padding: 10px; + } + + .calendarbox .calendarnav-previous, .calendarbox .calendarnav-next { + z-index: 1; + top: 10px; + } + + /* History */ + + table#change-history tbody th, table#change-history tbody td { + font-size: 0.8125rem; + word-break: break-word; + } + + table#change-history tbody th { + width: auto; + } + + /* Docs */ + + table.model tbody th, table.model tbody td { + font-size: 0.8125rem; + word-break: break-word; + } +} diff --git a/y/static_root/admin/css/responsive_rtl.css b/y/static_root/admin/css/responsive_rtl.css new file mode 100644 index 0000000000000000000000000000000000000000..639e20b2d18eb13614837b3f2c0d1c71202aa9cc --- /dev/null +++ b/y/static_root/admin/css/responsive_rtl.css @@ -0,0 +1,81 @@ +/* TABLETS */ + +@media (max-width: 1024px) { + [dir="rtl"] .colMS { + margin-right: 0; + } + + [dir="rtl"] #user-tools { + text-align: right; + } + + [dir="rtl"] #changelist .actions label { + padding-left: 10px; + padding-right: 0; + } + + [dir="rtl"] #changelist .actions select { + margin-left: 0; + margin-right: 15px; + } + + [dir="rtl"] .change-list .filtered .results, + [dir="rtl"] .change-list .filtered .paginator, + [dir="rtl"] .filtered #toolbar, + [dir="rtl"] .filtered div.xfull, + [dir="rtl"] .filtered .actions, + [dir="rtl"] #changelist-filter { + margin-left: 0; + } + + [dir="rtl"] .inline-group ul.tools a.add, + [dir="rtl"] .inline-group div.add-row a, + [dir="rtl"] .inline-group .tabular tr.add-row td a { + padding: 8px 26px 8px 10px; + background-position: calc(100% - 8px) 9px; + } + + [dir="rtl"] .related-widget-wrapper-link + .selector { + margin-right: 0; + margin-left: 15px; + } + + [dir="rtl"] .selector .selector-filter label { + margin-right: 0; + margin-left: 8px; + } + + [dir="rtl"] .object-tools li { + float: right; + } + + [dir="rtl"] .object-tools li + li { + margin-left: 0; + margin-right: 15px; + } + + [dir="rtl"] .dashboard .module table td a { + padding-left: 0; + padding-right: 16px; + } +} + +/* MOBILE */ + +@media (max-width: 767px) { + [dir="rtl"] .aligned .related-lookup, + [dir="rtl"] .aligned .datetimeshortcuts { + margin-left: 0; + margin-right: 15px; + } + + [dir="rtl"] .aligned ul, + [dir="rtl"] form .aligned ul.errorlist { + margin-right: 0; + } + + [dir="rtl"] #changelist-filter { + margin-left: 0; + margin-right: 0; + } +} diff --git a/y/static_root/admin/css/rtl.css b/y/static_root/admin/css/rtl.css new file mode 100644 index 0000000000000000000000000000000000000000..53a6dd6ca93e02a2de08db55bbe2ab3004d22647 --- /dev/null +++ b/y/static_root/admin/css/rtl.css @@ -0,0 +1,288 @@ +/* GLOBAL */ + +th { + text-align: right; +} + +.module h2, .module caption { + text-align: right; +} + +.module ul, .module ol { + margin-left: 0; + margin-right: 1.5em; +} + +.viewlink, .addlink, .changelink { + padding-left: 0; + padding-right: 16px; + background-position: 100% 1px; +} + +.deletelink { + padding-left: 0; + padding-right: 16px; + background-position: 100% 1px; +} + +.object-tools { + float: left; +} + +thead th:first-child, +tfoot td:first-child { + border-left: none; +} + +/* LAYOUT */ + +#user-tools { + right: auto; + left: 0; + text-align: left; +} + +div.breadcrumbs { + text-align: right; +} + +#content-main { + float: right; +} + +#content-related { + float: left; + margin-left: -300px; + margin-right: auto; +} + +.colMS { + margin-left: 300px; + margin-right: 0; +} + +/* SORTABLE TABLES */ + +table thead th.sorted .sortoptions { + float: left; +} + +thead th.sorted .text { + padding-right: 0; + padding-left: 42px; +} + +/* dashboard styles */ + +.dashboard .module table td a { + padding-left: .6em; + padding-right: 16px; +} + +/* changelists styles */ + +.change-list .filtered table { + border-left: none; + border-right: 0px none; +} + +#changelist-filter { + border-left: none; + border-right: none; + margin-left: 0; + margin-right: 30px; +} + +#changelist-filter li.selected { + border-left: none; + padding-left: 10px; + margin-left: 0; + border-right: 5px solid var(--hairline-color); + padding-right: 10px; + margin-right: -15px; +} + +#changelist table tbody td:first-child, #changelist table tbody th:first-child { + border-right: none; + border-left: none; +} + +/* FORMS */ + +.aligned label { + padding: 0 0 3px 1em; +} + +.submit-row a.deletelink { + margin-left: 0; + margin-right: auto; +} + +.vDateField, .vTimeField { + margin-left: 2px; +} + +.aligned .form-row input { + margin-left: 5px; +} + +form .aligned ul { + margin-right: 163px; + padding-right: 10px; + margin-left: 0; + padding-left: 0; +} + +form ul.inline li { + float: right; + padding-right: 0; + padding-left: 7px; +} + +form .aligned p.help, +form .aligned div.help { + margin-right: 160px; + padding-right: 10px; +} + +form div.help ul, +form .aligned .checkbox-row + .help, +form .aligned p.date div.help.timezonewarning, +form .aligned p.datetime div.help.timezonewarning, +form .aligned p.time div.help.timezonewarning { + margin-right: 0; + padding-right: 0; +} + +form .wide p.help, form .wide div.help { + padding-left: 0; + padding-right: 50px; +} + +form .wide p, +form .wide ul.errorlist, +form .wide input + p.help, +form .wide input + div.help { + margin-right: 200px; + margin-left: 0px; +} + +.submit-row { + text-align: right; +} + +fieldset .fieldBox { + margin-left: 20px; + margin-right: 0; +} + +.errorlist li { + background-position: 100% 12px; + padding: 0; +} + +.errornote { + background-position: 100% 12px; + padding: 10px 12px; +} + +/* WIDGETS */ + +.calendarnav-previous { + top: 0; + left: auto; + right: 10px; + background: url(../img/calendar-icons.svg) 0 -30px no-repeat; +} + +.calendarbox .calendarnav-previous:focus, +.calendarbox .calendarnav-previous:hover { + background-position: 0 -45px; +} + +.calendarnav-next { + top: 0; + right: auto; + left: 10px; + background: url(../img/calendar-icons.svg) 0 0 no-repeat; +} + +.calendarbox .calendarnav-next:focus, +.calendarbox .calendarnav-next:hover { + background-position: 0 -15px; +} + +.calendar caption, .calendarbox h2 { + text-align: center; +} + +.selector { + float: right; +} + +.selector .selector-filter { + text-align: right; +} + +.selector-add { + background: url(../img/selector-icons.svg) 0 -64px no-repeat; +} + +.active.selector-add:focus, .active.selector-add:hover { + background-position: 0 -80px; +} + +.selector-remove { + background: url(../img/selector-icons.svg) 0 -96px no-repeat; +} + +.active.selector-remove:focus, .active.selector-remove:hover { + background-position: 0 -112px; +} + +a.selector-chooseall { + background: url(../img/selector-icons.svg) right -128px no-repeat; +} + +a.active.selector-chooseall:focus, a.active.selector-chooseall:hover { + background-position: 100% -144px; +} + +a.selector-clearall { + background: url(../img/selector-icons.svg) 0 -160px no-repeat; +} + +a.active.selector-clearall:focus, a.active.selector-clearall:hover { + background-position: 0 -176px; +} + +.inline-deletelink { + float: left; +} + +form .form-row p.datetime { + overflow: hidden; +} + +.related-widget-wrapper { + float: right; +} + +/* MISC */ + +.inline-related h2, .inline-group h2 { + text-align: right +} + +.inline-related h3 span.delete { + padding-right: 20px; + padding-left: inherit; + left: 10px; + right: inherit; + float:left; +} + +.inline-related h3 span.delete label { + margin-left: inherit; + margin-right: 2px; +} diff --git a/y/static_root/admin/css/vendor/select2/LICENSE-SELECT2.md b/y/static_root/admin/css/vendor/select2/LICENSE-SELECT2.md new file mode 100644 index 0000000000000000000000000000000000000000..8cb8a2b12cb7207f971f93f5e3f6fcfff8863d4c --- /dev/null +++ b/y/static_root/admin/css/vendor/select2/LICENSE-SELECT2.md @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2012-2017 Kevin Brown, Igor Vaynberg, and Select2 contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/y/static_root/admin/css/vendor/select2/select2.css b/y/static_root/admin/css/vendor/select2/select2.css new file mode 100644 index 0000000000000000000000000000000000000000..750b3207aeb800f8e76420253229bd1c5c135d0d --- /dev/null +++ b/y/static_root/admin/css/vendor/select2/select2.css @@ -0,0 +1,481 @@ +.select2-container { + box-sizing: border-box; + display: inline-block; + margin: 0; + position: relative; + vertical-align: middle; } + .select2-container .select2-selection--single { + box-sizing: border-box; + cursor: pointer; + display: block; + height: 28px; + user-select: none; + -webkit-user-select: none; } + .select2-container .select2-selection--single .select2-selection__rendered { + display: block; + padding-left: 8px; + padding-right: 20px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; } + .select2-container .select2-selection--single .select2-selection__clear { + position: relative; } + .select2-container[dir="rtl"] .select2-selection--single .select2-selection__rendered { + padding-right: 8px; + padding-left: 20px; } + .select2-container .select2-selection--multiple { + box-sizing: border-box; + cursor: pointer; + display: block; + min-height: 32px; + user-select: none; + -webkit-user-select: none; } + .select2-container .select2-selection--multiple .select2-selection__rendered { + display: inline-block; + overflow: hidden; + padding-left: 8px; + text-overflow: ellipsis; + white-space: nowrap; } + .select2-container .select2-search--inline { + float: left; } + .select2-container .select2-search--inline .select2-search__field { + box-sizing: border-box; + border: none; + font-size: 100%; + margin-top: 5px; + padding: 0; } + .select2-container .select2-search--inline .select2-search__field::-webkit-search-cancel-button { + -webkit-appearance: none; } + +.select2-dropdown { + background-color: white; + border: 1px solid #aaa; + border-radius: 4px; + box-sizing: border-box; + display: block; + position: absolute; + left: -100000px; + width: 100%; + z-index: 1051; } + +.select2-results { + display: block; } + +.select2-results__options { + list-style: none; + margin: 0; + padding: 0; } + +.select2-results__option { + padding: 6px; + user-select: none; + -webkit-user-select: none; } + .select2-results__option[aria-selected] { + cursor: pointer; } + +.select2-container--open .select2-dropdown { + left: 0; } + +.select2-container--open .select2-dropdown--above { + border-bottom: none; + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; } + +.select2-container--open .select2-dropdown--below { + border-top: none; + border-top-left-radius: 0; + border-top-right-radius: 0; } + +.select2-search--dropdown { + display: block; + padding: 4px; } + .select2-search--dropdown .select2-search__field { + padding: 4px; + width: 100%; + box-sizing: border-box; } + .select2-search--dropdown .select2-search__field::-webkit-search-cancel-button { + -webkit-appearance: none; } + .select2-search--dropdown.select2-search--hide { + display: none; } + +.select2-close-mask { + border: 0; + margin: 0; + padding: 0; + display: block; + position: fixed; + left: 0; + top: 0; + min-height: 100%; + min-width: 100%; + height: auto; + width: auto; + opacity: 0; + z-index: 99; + background-color: #fff; + filter: alpha(opacity=0); } + +.select2-hidden-accessible { + border: 0 !important; + clip: rect(0 0 0 0) !important; + -webkit-clip-path: inset(50%) !important; + clip-path: inset(50%) !important; + height: 1px !important; + overflow: hidden !important; + padding: 0 !important; + position: absolute !important; + width: 1px !important; + white-space: nowrap !important; } + +.select2-container--default .select2-selection--single { + background-color: #fff; + border: 1px solid #aaa; + border-radius: 4px; } + .select2-container--default .select2-selection--single .select2-selection__rendered { + color: #444; + line-height: 28px; } + .select2-container--default .select2-selection--single .select2-selection__clear { + cursor: pointer; + float: right; + font-weight: bold; } + .select2-container--default .select2-selection--single .select2-selection__placeholder { + color: #999; } + .select2-container--default .select2-selection--single .select2-selection__arrow { + height: 26px; + position: absolute; + top: 1px; + right: 1px; + width: 20px; } + .select2-container--default .select2-selection--single .select2-selection__arrow b { + border-color: #888 transparent transparent transparent; + border-style: solid; + border-width: 5px 4px 0 4px; + height: 0; + left: 50%; + margin-left: -4px; + margin-top: -2px; + position: absolute; + top: 50%; + width: 0; } + +.select2-container--default[dir="rtl"] .select2-selection--single .select2-selection__clear { + float: left; } + +.select2-container--default[dir="rtl"] .select2-selection--single .select2-selection__arrow { + left: 1px; + right: auto; } + +.select2-container--default.select2-container--disabled .select2-selection--single { + background-color: #eee; + cursor: default; } + .select2-container--default.select2-container--disabled .select2-selection--single .select2-selection__clear { + display: none; } + +.select2-container--default.select2-container--open .select2-selection--single .select2-selection__arrow b { + border-color: transparent transparent #888 transparent; + border-width: 0 4px 5px 4px; } + +.select2-container--default .select2-selection--multiple { + background-color: white; + border: 1px solid #aaa; + border-radius: 4px; + cursor: text; } + .select2-container--default .select2-selection--multiple .select2-selection__rendered { + box-sizing: border-box; + list-style: none; + margin: 0; + padding: 0 5px; + width: 100%; } + .select2-container--default .select2-selection--multiple .select2-selection__rendered li { + list-style: none; } + .select2-container--default .select2-selection--multiple .select2-selection__clear { + cursor: pointer; + float: right; + font-weight: bold; + margin-top: 5px; + margin-right: 10px; + padding: 1px; } + .select2-container--default .select2-selection--multiple .select2-selection__choice { + background-color: #e4e4e4; + border: 1px solid #aaa; + border-radius: 4px; + cursor: default; + float: left; + margin-right: 5px; + margin-top: 5px; + padding: 0 5px; } + .select2-container--default .select2-selection--multiple .select2-selection__choice__remove { + color: #999; + cursor: pointer; + display: inline-block; + font-weight: bold; + margin-right: 2px; } + .select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover { + color: #333; } + +.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice, .select2-container--default[dir="rtl"] .select2-selection--multiple .select2-search--inline { + float: right; } + +.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice { + margin-left: 5px; + margin-right: auto; } + +.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice__remove { + margin-left: 2px; + margin-right: auto; } + +.select2-container--default.select2-container--focus .select2-selection--multiple { + border: solid black 1px; + outline: 0; } + +.select2-container--default.select2-container--disabled .select2-selection--multiple { + background-color: #eee; + cursor: default; } + +.select2-container--default.select2-container--disabled .select2-selection__choice__remove { + display: none; } + +.select2-container--default.select2-container--open.select2-container--above .select2-selection--single, .select2-container--default.select2-container--open.select2-container--above .select2-selection--multiple { + border-top-left-radius: 0; + border-top-right-radius: 0; } + +.select2-container--default.select2-container--open.select2-container--below .select2-selection--single, .select2-container--default.select2-container--open.select2-container--below .select2-selection--multiple { + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; } + +.select2-container--default .select2-search--dropdown .select2-search__field { + border: 1px solid #aaa; } + +.select2-container--default .select2-search--inline .select2-search__field { + background: transparent; + border: none; + outline: 0; + box-shadow: none; + -webkit-appearance: textfield; } + +.select2-container--default .select2-results > .select2-results__options { + max-height: 200px; + overflow-y: auto; } + +.select2-container--default .select2-results__option[role=group] { + padding: 0; } + +.select2-container--default .select2-results__option[aria-disabled=true] { + color: #999; } + +.select2-container--default .select2-results__option[aria-selected=true] { + background-color: #ddd; } + +.select2-container--default .select2-results__option .select2-results__option { + padding-left: 1em; } + .select2-container--default .select2-results__option .select2-results__option .select2-results__group { + padding-left: 0; } + .select2-container--default .select2-results__option .select2-results__option .select2-results__option { + margin-left: -1em; + padding-left: 2em; } + .select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option { + margin-left: -2em; + padding-left: 3em; } + .select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option { + margin-left: -3em; + padding-left: 4em; } + .select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option { + margin-left: -4em; + padding-left: 5em; } + .select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option { + margin-left: -5em; + padding-left: 6em; } + +.select2-container--default .select2-results__option--highlighted[aria-selected] { + background-color: #5897fb; + color: white; } + +.select2-container--default .select2-results__group { + cursor: default; + display: block; + padding: 6px; } + +.select2-container--classic .select2-selection--single { + background-color: #f7f7f7; + border: 1px solid #aaa; + border-radius: 4px; + outline: 0; + background-image: -webkit-linear-gradient(top, white 50%, #eeeeee 100%); + background-image: -o-linear-gradient(top, white 50%, #eeeeee 100%); + background-image: linear-gradient(to bottom, white 50%, #eeeeee 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFFFF', endColorstr='#FFEEEEEE', GradientType=0); } + .select2-container--classic .select2-selection--single:focus { + border: 1px solid #5897fb; } + .select2-container--classic .select2-selection--single .select2-selection__rendered { + color: #444; + line-height: 28px; } + .select2-container--classic .select2-selection--single .select2-selection__clear { + cursor: pointer; + float: right; + font-weight: bold; + margin-right: 10px; } + .select2-container--classic .select2-selection--single .select2-selection__placeholder { + color: #999; } + .select2-container--classic .select2-selection--single .select2-selection__arrow { + background-color: #ddd; + border: none; + border-left: 1px solid #aaa; + border-top-right-radius: 4px; + border-bottom-right-radius: 4px; + height: 26px; + position: absolute; + top: 1px; + right: 1px; + width: 20px; + background-image: -webkit-linear-gradient(top, #eeeeee 50%, #cccccc 100%); + background-image: -o-linear-gradient(top, #eeeeee 50%, #cccccc 100%); + background-image: linear-gradient(to bottom, #eeeeee 50%, #cccccc 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFEEEEEE', endColorstr='#FFCCCCCC', GradientType=0); } + .select2-container--classic .select2-selection--single .select2-selection__arrow b { + border-color: #888 transparent transparent transparent; + border-style: solid; + border-width: 5px 4px 0 4px; + height: 0; + left: 50%; + margin-left: -4px; + margin-top: -2px; + position: absolute; + top: 50%; + width: 0; } + +.select2-container--classic[dir="rtl"] .select2-selection--single .select2-selection__clear { + float: left; } + +.select2-container--classic[dir="rtl"] .select2-selection--single .select2-selection__arrow { + border: none; + border-right: 1px solid #aaa; + border-radius: 0; + border-top-left-radius: 4px; + border-bottom-left-radius: 4px; + left: 1px; + right: auto; } + +.select2-container--classic.select2-container--open .select2-selection--single { + border: 1px solid #5897fb; } + .select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow { + background: transparent; + border: none; } + .select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow b { + border-color: transparent transparent #888 transparent; + border-width: 0 4px 5px 4px; } + +.select2-container--classic.select2-container--open.select2-container--above .select2-selection--single { + border-top: none; + border-top-left-radius: 0; + border-top-right-radius: 0; + background-image: -webkit-linear-gradient(top, white 0%, #eeeeee 50%); + background-image: -o-linear-gradient(top, white 0%, #eeeeee 50%); + background-image: linear-gradient(to bottom, white 0%, #eeeeee 50%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFFFF', endColorstr='#FFEEEEEE', GradientType=0); } + +.select2-container--classic.select2-container--open.select2-container--below .select2-selection--single { + border-bottom: none; + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; + background-image: -webkit-linear-gradient(top, #eeeeee 50%, white 100%); + background-image: -o-linear-gradient(top, #eeeeee 50%, white 100%); + background-image: linear-gradient(to bottom, #eeeeee 50%, white 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFEEEEEE', endColorstr='#FFFFFFFF', GradientType=0); } + +.select2-container--classic .select2-selection--multiple { + background-color: white; + border: 1px solid #aaa; + border-radius: 4px; + cursor: text; + outline: 0; } + .select2-container--classic .select2-selection--multiple:focus { + border: 1px solid #5897fb; } + .select2-container--classic .select2-selection--multiple .select2-selection__rendered { + list-style: none; + margin: 0; + padding: 0 5px; } + .select2-container--classic .select2-selection--multiple .select2-selection__clear { + display: none; } + .select2-container--classic .select2-selection--multiple .select2-selection__choice { + background-color: #e4e4e4; + border: 1px solid #aaa; + border-radius: 4px; + cursor: default; + float: left; + margin-right: 5px; + margin-top: 5px; + padding: 0 5px; } + .select2-container--classic .select2-selection--multiple .select2-selection__choice__remove { + color: #888; + cursor: pointer; + display: inline-block; + font-weight: bold; + margin-right: 2px; } + .select2-container--classic .select2-selection--multiple .select2-selection__choice__remove:hover { + color: #555; } + +.select2-container--classic[dir="rtl"] .select2-selection--multiple .select2-selection__choice { + float: right; + margin-left: 5px; + margin-right: auto; } + +.select2-container--classic[dir="rtl"] .select2-selection--multiple .select2-selection__choice__remove { + margin-left: 2px; + margin-right: auto; } + +.select2-container--classic.select2-container--open .select2-selection--multiple { + border: 1px solid #5897fb; } + +.select2-container--classic.select2-container--open.select2-container--above .select2-selection--multiple { + border-top: none; + border-top-left-radius: 0; + border-top-right-radius: 0; } + +.select2-container--classic.select2-container--open.select2-container--below .select2-selection--multiple { + border-bottom: none; + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; } + +.select2-container--classic .select2-search--dropdown .select2-search__field { + border: 1px solid #aaa; + outline: 0; } + +.select2-container--classic .select2-search--inline .select2-search__field { + outline: 0; + box-shadow: none; } + +.select2-container--classic .select2-dropdown { + background-color: white; + border: 1px solid transparent; } + +.select2-container--classic .select2-dropdown--above { + border-bottom: none; } + +.select2-container--classic .select2-dropdown--below { + border-top: none; } + +.select2-container--classic .select2-results > .select2-results__options { + max-height: 200px; + overflow-y: auto; } + +.select2-container--classic .select2-results__option[role=group] { + padding: 0; } + +.select2-container--classic .select2-results__option[aria-disabled=true] { + color: grey; } + +.select2-container--classic .select2-results__option--highlighted[aria-selected] { + background-color: #3875d7; + color: white; } + +.select2-container--classic .select2-results__group { + cursor: default; + display: block; + padding: 6px; } + +.select2-container--classic.select2-container--open .select2-dropdown { + border-color: #5897fb; } diff --git a/y/static_root/admin/css/vendor/select2/select2.min.css b/y/static_root/admin/css/vendor/select2/select2.min.css new file mode 100644 index 0000000000000000000000000000000000000000..7c18ad59dfc37f537cfd158e9222062fa9196e37 --- /dev/null +++ b/y/static_root/admin/css/vendor/select2/select2.min.css @@ -0,0 +1 @@ +.select2-container{box-sizing:border-box;display:inline-block;margin:0;position:relative;vertical-align:middle}.select2-container .select2-selection--single{box-sizing:border-box;cursor:pointer;display:block;height:28px;user-select:none;-webkit-user-select:none}.select2-container .select2-selection--single .select2-selection__rendered{display:block;padding-left:8px;padding-right:20px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.select2-container .select2-selection--single .select2-selection__clear{position:relative}.select2-container[dir="rtl"] .select2-selection--single .select2-selection__rendered{padding-right:8px;padding-left:20px}.select2-container .select2-selection--multiple{box-sizing:border-box;cursor:pointer;display:block;min-height:32px;user-select:none;-webkit-user-select:none}.select2-container .select2-selection--multiple .select2-selection__rendered{display:inline-block;overflow:hidden;padding-left:8px;text-overflow:ellipsis;white-space:nowrap}.select2-container .select2-search--inline{float:left}.select2-container .select2-search--inline .select2-search__field{box-sizing:border-box;border:none;font-size:100%;margin-top:5px;padding:0}.select2-container .select2-search--inline .select2-search__field::-webkit-search-cancel-button{-webkit-appearance:none}.select2-dropdown{background-color:white;border:1px solid #aaa;border-radius:4px;box-sizing:border-box;display:block;position:absolute;left:-100000px;width:100%;z-index:1051}.select2-results{display:block}.select2-results__options{list-style:none;margin:0;padding:0}.select2-results__option{padding:6px;user-select:none;-webkit-user-select:none}.select2-results__option[aria-selected]{cursor:pointer}.select2-container--open .select2-dropdown{left:0}.select2-container--open .select2-dropdown--above{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--open .select2-dropdown--below{border-top:none;border-top-left-radius:0;border-top-right-radius:0}.select2-search--dropdown{display:block;padding:4px}.select2-search--dropdown .select2-search__field{padding:4px;width:100%;box-sizing:border-box}.select2-search--dropdown .select2-search__field::-webkit-search-cancel-button{-webkit-appearance:none}.select2-search--dropdown.select2-search--hide{display:none}.select2-close-mask{border:0;margin:0;padding:0;display:block;position:fixed;left:0;top:0;min-height:100%;min-width:100%;height:auto;width:auto;opacity:0;z-index:99;background-color:#fff;filter:alpha(opacity=0)}.select2-hidden-accessible{border:0 !important;clip:rect(0 0 0 0) !important;-webkit-clip-path:inset(50%) !important;clip-path:inset(50%) !important;height:1px !important;overflow:hidden !important;padding:0 !important;position:absolute !important;width:1px !important;white-space:nowrap !important}.select2-container--default .select2-selection--single{background-color:#fff;border:1px solid #aaa;border-radius:4px}.select2-container--default .select2-selection--single .select2-selection__rendered{color:#444;line-height:28px}.select2-container--default .select2-selection--single .select2-selection__clear{cursor:pointer;float:right;font-weight:bold}.select2-container--default .select2-selection--single .select2-selection__placeholder{color:#999}.select2-container--default .select2-selection--single .select2-selection__arrow{height:26px;position:absolute;top:1px;right:1px;width:20px}.select2-container--default .select2-selection--single .select2-selection__arrow b{border-color:#888 transparent transparent transparent;border-style:solid;border-width:5px 4px 0 4px;height:0;left:50%;margin-left:-4px;margin-top:-2px;position:absolute;top:50%;width:0}.select2-container--default[dir="rtl"] .select2-selection--single .select2-selection__clear{float:left}.select2-container--default[dir="rtl"] .select2-selection--single .select2-selection__arrow{left:1px;right:auto}.select2-container--default.select2-container--disabled .select2-selection--single{background-color:#eee;cursor:default}.select2-container--default.select2-container--disabled .select2-selection--single .select2-selection__clear{display:none}.select2-container--default.select2-container--open .select2-selection--single .select2-selection__arrow b{border-color:transparent transparent #888 transparent;border-width:0 4px 5px 4px}.select2-container--default .select2-selection--multiple{background-color:white;border:1px solid #aaa;border-radius:4px;cursor:text}.select2-container--default .select2-selection--multiple .select2-selection__rendered{box-sizing:border-box;list-style:none;margin:0;padding:0 5px;width:100%}.select2-container--default .select2-selection--multiple .select2-selection__rendered li{list-style:none}.select2-container--default .select2-selection--multiple .select2-selection__clear{cursor:pointer;float:right;font-weight:bold;margin-top:5px;margin-right:10px;padding:1px}.select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#e4e4e4;border:1px solid #aaa;border-radius:4px;cursor:default;float:left;margin-right:5px;margin-top:5px;padding:0 5px}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:#999;cursor:pointer;display:inline-block;font-weight:bold;margin-right:2px}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#333}.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice,.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-search--inline{float:right}.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice{margin-left:5px;margin-right:auto}.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice__remove{margin-left:2px;margin-right:auto}.select2-container--default.select2-container--focus .select2-selection--multiple{border:solid black 1px;outline:0}.select2-container--default.select2-container--disabled .select2-selection--multiple{background-color:#eee;cursor:default}.select2-container--default.select2-container--disabled .select2-selection__choice__remove{display:none}.select2-container--default.select2-container--open.select2-container--above .select2-selection--single,.select2-container--default.select2-container--open.select2-container--above .select2-selection--multiple{border-top-left-radius:0;border-top-right-radius:0}.select2-container--default.select2-container--open.select2-container--below .select2-selection--single,.select2-container--default.select2-container--open.select2-container--below .select2-selection--multiple{border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--default .select2-search--dropdown .select2-search__field{border:1px solid #aaa}.select2-container--default .select2-search--inline .select2-search__field{background:transparent;border:none;outline:0;box-shadow:none;-webkit-appearance:textfield}.select2-container--default .select2-results>.select2-results__options{max-height:200px;overflow-y:auto}.select2-container--default .select2-results__option[role=group]{padding:0}.select2-container--default .select2-results__option[aria-disabled=true]{color:#999}.select2-container--default .select2-results__option[aria-selected=true]{background-color:#ddd}.select2-container--default .select2-results__option .select2-results__option{padding-left:1em}.select2-container--default .select2-results__option .select2-results__option .select2-results__group{padding-left:0}.select2-container--default .select2-results__option .select2-results__option .select2-results__option{margin-left:-1em;padding-left:2em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-2em;padding-left:3em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-3em;padding-left:4em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-4em;padding-left:5em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-5em;padding-left:6em}.select2-container--default .select2-results__option--highlighted[aria-selected]{background-color:#5897fb;color:white}.select2-container--default .select2-results__group{cursor:default;display:block;padding:6px}.select2-container--classic .select2-selection--single{background-color:#f7f7f7;border:1px solid #aaa;border-radius:4px;outline:0;background-image:-webkit-linear-gradient(top, #fff 50%, #eee 100%);background-image:-o-linear-gradient(top, #fff 50%, #eee 100%);background-image:linear-gradient(to bottom, #fff 50%, #eee 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFFFF', endColorstr='#FFEEEEEE', GradientType=0)}.select2-container--classic .select2-selection--single:focus{border:1px solid #5897fb}.select2-container--classic .select2-selection--single .select2-selection__rendered{color:#444;line-height:28px}.select2-container--classic .select2-selection--single .select2-selection__clear{cursor:pointer;float:right;font-weight:bold;margin-right:10px}.select2-container--classic .select2-selection--single .select2-selection__placeholder{color:#999}.select2-container--classic .select2-selection--single .select2-selection__arrow{background-color:#ddd;border:none;border-left:1px solid #aaa;border-top-right-radius:4px;border-bottom-right-radius:4px;height:26px;position:absolute;top:1px;right:1px;width:20px;background-image:-webkit-linear-gradient(top, #eee 50%, #ccc 100%);background-image:-o-linear-gradient(top, #eee 50%, #ccc 100%);background-image:linear-gradient(to bottom, #eee 50%, #ccc 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFEEEEEE', endColorstr='#FFCCCCCC', GradientType=0)}.select2-container--classic .select2-selection--single .select2-selection__arrow b{border-color:#888 transparent transparent transparent;border-style:solid;border-width:5px 4px 0 4px;height:0;left:50%;margin-left:-4px;margin-top:-2px;position:absolute;top:50%;width:0}.select2-container--classic[dir="rtl"] .select2-selection--single .select2-selection__clear{float:left}.select2-container--classic[dir="rtl"] .select2-selection--single .select2-selection__arrow{border:none;border-right:1px solid #aaa;border-radius:0;border-top-left-radius:4px;border-bottom-left-radius:4px;left:1px;right:auto}.select2-container--classic.select2-container--open .select2-selection--single{border:1px solid #5897fb}.select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow{background:transparent;border:none}.select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow b{border-color:transparent transparent #888 transparent;border-width:0 4px 5px 4px}.select2-container--classic.select2-container--open.select2-container--above .select2-selection--single{border-top:none;border-top-left-radius:0;border-top-right-radius:0;background-image:-webkit-linear-gradient(top, #fff 0%, #eee 50%);background-image:-o-linear-gradient(top, #fff 0%, #eee 50%);background-image:linear-gradient(to bottom, #fff 0%, #eee 50%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFFFF', endColorstr='#FFEEEEEE', GradientType=0)}.select2-container--classic.select2-container--open.select2-container--below .select2-selection--single{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0;background-image:-webkit-linear-gradient(top, #eee 50%, #fff 100%);background-image:-o-linear-gradient(top, #eee 50%, #fff 100%);background-image:linear-gradient(to bottom, #eee 50%, #fff 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFEEEEEE', endColorstr='#FFFFFFFF', GradientType=0)}.select2-container--classic .select2-selection--multiple{background-color:white;border:1px solid #aaa;border-radius:4px;cursor:text;outline:0}.select2-container--classic .select2-selection--multiple:focus{border:1px solid #5897fb}.select2-container--classic .select2-selection--multiple .select2-selection__rendered{list-style:none;margin:0;padding:0 5px}.select2-container--classic .select2-selection--multiple .select2-selection__clear{display:none}.select2-container--classic .select2-selection--multiple .select2-selection__choice{background-color:#e4e4e4;border:1px solid #aaa;border-radius:4px;cursor:default;float:left;margin-right:5px;margin-top:5px;padding:0 5px}.select2-container--classic .select2-selection--multiple .select2-selection__choice__remove{color:#888;cursor:pointer;display:inline-block;font-weight:bold;margin-right:2px}.select2-container--classic .select2-selection--multiple .select2-selection__choice__remove:hover{color:#555}.select2-container--classic[dir="rtl"] .select2-selection--multiple .select2-selection__choice{float:right;margin-left:5px;margin-right:auto}.select2-container--classic[dir="rtl"] .select2-selection--multiple .select2-selection__choice__remove{margin-left:2px;margin-right:auto}.select2-container--classic.select2-container--open .select2-selection--multiple{border:1px solid #5897fb}.select2-container--classic.select2-container--open.select2-container--above .select2-selection--multiple{border-top:none;border-top-left-radius:0;border-top-right-radius:0}.select2-container--classic.select2-container--open.select2-container--below .select2-selection--multiple{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--classic .select2-search--dropdown .select2-search__field{border:1px solid #aaa;outline:0}.select2-container--classic .select2-search--inline .select2-search__field{outline:0;box-shadow:none}.select2-container--classic .select2-dropdown{background-color:#fff;border:1px solid transparent}.select2-container--classic .select2-dropdown--above{border-bottom:none}.select2-container--classic .select2-dropdown--below{border-top:none}.select2-container--classic .select2-results>.select2-results__options{max-height:200px;overflow-y:auto}.select2-container--classic .select2-results__option[role=group]{padding:0}.select2-container--classic .select2-results__option[aria-disabled=true]{color:grey}.select2-container--classic .select2-results__option--highlighted[aria-selected]{background-color:#3875d7;color:#fff}.select2-container--classic .select2-results__group{cursor:default;display:block;padding:6px}.select2-container--classic.select2-container--open .select2-dropdown{border-color:#5897fb} diff --git a/y/static_root/admin/css/widgets.css b/y/static_root/admin/css/widgets.css new file mode 100644 index 0000000000000000000000000000000000000000..5f7adcb22139b37f80d7d6c7b296047f1b569fa6 --- /dev/null +++ b/y/static_root/admin/css/widgets.css @@ -0,0 +1,603 @@ +/* SELECTOR (FILTER INTERFACE) */ + +.selector { + width: 800px; + float: left; + display: flex; +} + +.selector select { + width: 380px; + height: 17.2em; + flex: 1 0 auto; +} + +.selector-available, .selector-chosen { + width: 380px; + text-align: center; + margin-bottom: 5px; + display: flex; + flex-direction: column; +} + +.selector-available h2, .selector-chosen h2 { + border: 1px solid var(--border-color); + border-radius: 4px 4px 0 0; +} + +.selector-chosen .list-footer-display { + border: 1px solid var(--border-color); + border-top: none; + border-radius: 0 0 4px 4px; + margin: 0 0 10px; + padding: 8px; + text-align: center; + background: var(--primary); + color: var(--header-link-color); + cursor: pointer; +} +.selector-chosen .list-footer-display__clear { + color: var(--breadcrumbs-fg); +} + +.selector-chosen h2 { + background: var(--primary); + color: var(--header-link-color); +} + +.selector .selector-available h2 { + background: var(--darkened-bg); + color: var(--body-quiet-color); +} + +.selector .selector-filter { + border: 1px solid var(--border-color); + border-width: 0 1px; + padding: 8px; + color: var(--body-quiet-color); + font-size: 0.625rem; + margin: 0; + text-align: left; +} + +.selector .selector-filter label, +.inline-group .aligned .selector .selector-filter label { + float: left; + margin: 7px 0 0; + width: 18px; + height: 18px; + padding: 0; + overflow: hidden; + line-height: 1; +} + +.selector .selector-available input, +.selector .selector-chosen input { + width: 320px; + margin-left: 8px; +} + +.selector ul.selector-chooser { + align-self: center; + width: 22px; + background-color: var(--selected-bg); + border-radius: 10px; + margin: 0 5px; + padding: 0; + transform: translateY(-17px); +} + +.selector-chooser li { + margin: 0; + padding: 3px; + list-style-type: none; +} + +.selector select { + padding: 0 10px; + margin: 0 0 10px; + border-radius: 0 0 4px 4px; +} +.selector .selector-chosen--with-filtered select { + margin: 0; + border-radius: 0; + height: 14em; +} + +.selector .selector-chosen:not(.selector-chosen--with-filtered) .list-footer-display { + display: none; +} + +.selector-add, .selector-remove { + width: 16px; + height: 16px; + display: block; + text-indent: -3000px; + overflow: hidden; + cursor: default; + opacity: 0.55; +} + +.active.selector-add, .active.selector-remove { + opacity: 1; +} + +.active.selector-add:hover, .active.selector-remove:hover { + cursor: pointer; +} + +.selector-add { + background: url(../img/selector-icons.svg) 0 -96px no-repeat; +} + +.active.selector-add:focus, .active.selector-add:hover { + background-position: 0 -112px; +} + +.selector-remove { + background: url(../img/selector-icons.svg) 0 -64px no-repeat; +} + +.active.selector-remove:focus, .active.selector-remove:hover { + background-position: 0 -80px; +} + +a.selector-chooseall, a.selector-clearall { + display: inline-block; + height: 16px; + text-align: left; + margin: 1px auto 3px; + overflow: hidden; + font-weight: bold; + line-height: 16px; + color: var(--body-quiet-color); + text-decoration: none; + opacity: 0.55; +} + +a.active.selector-chooseall:focus, a.active.selector-clearall:focus, +a.active.selector-chooseall:hover, a.active.selector-clearall:hover { + color: var(--link-fg); +} + +a.active.selector-chooseall, a.active.selector-clearall { + opacity: 1; +} + +a.active.selector-chooseall:hover, a.active.selector-clearall:hover { + cursor: pointer; +} + +a.selector-chooseall { + padding: 0 18px 0 0; + background: url(../img/selector-icons.svg) right -160px no-repeat; + cursor: default; +} + +a.active.selector-chooseall:focus, a.active.selector-chooseall:hover { + background-position: 100% -176px; +} + +a.selector-clearall { + padding: 0 0 0 18px; + background: url(../img/selector-icons.svg) 0 -128px no-repeat; + cursor: default; +} + +a.active.selector-clearall:focus, a.active.selector-clearall:hover { + background-position: 0 -144px; +} + +/* STACKED SELECTORS */ + +.stacked { + float: left; + width: 490px; + display: block; +} + +.stacked select { + width: 480px; + height: 10.1em; +} + +.stacked .selector-available, .stacked .selector-chosen { + width: 480px; +} + +.stacked .selector-available { + margin-bottom: 0; +} + +.stacked .selector-available input { + width: 422px; +} + +.stacked ul.selector-chooser { + height: 22px; + width: 50px; + margin: 0 0 10px 40%; + background-color: #eee; + border-radius: 10px; + transform: none; +} + +.stacked .selector-chooser li { + float: left; + padding: 3px 3px 3px 5px; +} + +.stacked .selector-chooseall, .stacked .selector-clearall { + display: none; +} + +.stacked .selector-add { + background: url(../img/selector-icons.svg) 0 -32px no-repeat; + cursor: default; +} + +.stacked .active.selector-add { + background-position: 0 -32px; + cursor: pointer; +} + +.stacked .active.selector-add:focus, .stacked .active.selector-add:hover { + background-position: 0 -48px; + cursor: pointer; +} + +.stacked .selector-remove { + background: url(../img/selector-icons.svg) 0 0 no-repeat; + cursor: default; +} + +.stacked .active.selector-remove { + background-position: 0 0px; + cursor: pointer; +} + +.stacked .active.selector-remove:focus, .stacked .active.selector-remove:hover { + background-position: 0 -16px; + cursor: pointer; +} + +.selector .help-icon { + background: url(../img/icon-unknown.svg) 0 0 no-repeat; + display: inline-block; + vertical-align: middle; + margin: -2px 0 0 2px; + width: 13px; + height: 13px; +} + +.selector .selector-chosen .help-icon { + background: url(../img/icon-unknown-alt.svg) 0 0 no-repeat; +} + +.selector .search-label-icon { + background: url(../img/search.svg) 0 0 no-repeat; + display: inline-block; + height: 1.125rem; + width: 1.125rem; +} + +/* DATE AND TIME */ + +p.datetime { + line-height: 20px; + margin: 0; + padding: 0; + color: var(--body-quiet-color); + font-weight: bold; +} + +.datetime span { + white-space: nowrap; + font-weight: normal; + font-size: 0.6875rem; + color: var(--body-quiet-color); +} + +.datetime input, .form-row .datetime input.vDateField, .form-row .datetime input.vTimeField { + margin-left: 5px; + margin-bottom: 4px; +} + +table p.datetime { + font-size: 0.6875rem; + margin-left: 0; + padding-left: 0; +} + +.datetimeshortcuts .clock-icon, .datetimeshortcuts .date-icon { + position: relative; + display: inline-block; + vertical-align: middle; + height: 16px; + width: 16px; + overflow: hidden; +} + +.datetimeshortcuts .clock-icon { + background: url(../img/icon-clock.svg) 0 0 no-repeat; +} + +.datetimeshortcuts a:focus .clock-icon, +.datetimeshortcuts a:hover .clock-icon { + background-position: 0 -16px; +} + +.datetimeshortcuts .date-icon { + background: url(../img/icon-calendar.svg) 0 0 no-repeat; + top: -1px; +} + +.datetimeshortcuts a:focus .date-icon, +.datetimeshortcuts a:hover .date-icon { + background-position: 0 -16px; +} + +.timezonewarning { + font-size: 0.6875rem; + color: var(--body-quiet-color); +} + +/* URL */ + +p.url { + line-height: 20px; + margin: 0; + padding: 0; + color: var(--body-quiet-color); + font-size: 0.6875rem; + font-weight: bold; +} + +.url a { + font-weight: normal; +} + +/* FILE UPLOADS */ + +p.file-upload { + line-height: 20px; + margin: 0; + padding: 0; + color: var(--body-quiet-color); + font-size: 0.6875rem; + font-weight: bold; +} + +.file-upload a { + font-weight: normal; +} + +.file-upload .deletelink { + margin-left: 5px; +} + +span.clearable-file-input label { + color: var(--body-fg); + font-size: 0.6875rem; + display: inline; + float: none; +} + +/* CALENDARS & CLOCKS */ + +.calendarbox, .clockbox { + margin: 5px auto; + font-size: 0.75rem; + width: 19em; + text-align: center; + background: var(--body-bg); + color: var(--body-fg); + border: 1px solid var(--hairline-color); + border-radius: 4px; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.15); + overflow: hidden; + position: relative; +} + +.clockbox { + width: auto; +} + +.calendar { + margin: 0; + padding: 0; +} + +.calendar table { + margin: 0; + padding: 0; + border-collapse: collapse; + background: white; + width: 100%; +} + +.calendar caption, .calendarbox h2 { + margin: 0; + text-align: center; + border-top: none; + font-weight: 700; + font-size: 0.75rem; + color: #333; + background: var(--accent); +} + +.calendar th { + padding: 8px 5px; + background: var(--darkened-bg); + border-bottom: 1px solid var(--border-color); + font-weight: 400; + font-size: 0.75rem; + text-align: center; + color: var(--body-quiet-color); +} + +.calendar td { + font-weight: 400; + font-size: 0.75rem; + text-align: center; + padding: 0; + border-top: 1px solid var(--hairline-color); + border-bottom: none; +} + +.calendar td.selected a { + background: var(--primary); + color: var(--button-fg); +} + +.calendar td.nonday { + background: var(--darkened-bg); +} + +.calendar td.today a { + font-weight: 700; +} + +.calendar td a, .timelist a { + display: block; + font-weight: 400; + padding: 6px; + text-decoration: none; + color: var(--body-quiet-color); +} + +.calendar td a:focus, .timelist a:focus, +.calendar td a:hover, .timelist a:hover { + background: var(--primary); + color: white; +} + +.calendar td a:active, .timelist a:active { + background: var(--header-bg); + color: white; +} + +.calendarnav { + font-size: 0.625rem; + text-align: center; + color: #ccc; + margin: 0; + padding: 1px 3px; +} + +.calendarnav a:link, #calendarnav a:visited, +#calendarnav a:focus, #calendarnav a:hover { + color: var(--body-quiet-color); +} + +.calendar-shortcuts { + background: var(--body-bg); + color: var(--body-quiet-color); + font-size: 0.6875rem; + line-height: 0.6875rem; + border-top: 1px solid var(--hairline-color); + padding: 8px 0; +} + +.calendarbox .calendarnav-previous, .calendarbox .calendarnav-next { + display: block; + position: absolute; + top: 8px; + width: 15px; + height: 15px; + text-indent: -9999px; + padding: 0; +} + +.calendarnav-previous { + left: 10px; + background: url(../img/calendar-icons.svg) 0 0 no-repeat; +} + +.calendarbox .calendarnav-previous:focus, +.calendarbox .calendarnav-previous:hover { + background-position: 0 -15px; +} + +.calendarnav-next { + right: 10px; + background: url(../img/calendar-icons.svg) 0 -30px no-repeat; +} + +.calendarbox .calendarnav-next:focus, +.calendarbox .calendarnav-next:hover { + background-position: 0 -45px; +} + +.calendar-cancel { + margin: 0; + padding: 4px 0; + font-size: 0.75rem; + background: #eee; + border-top: 1px solid var(--border-color); + color: var(--body-fg); +} + +.calendar-cancel:focus, .calendar-cancel:hover { + background: #ddd; +} + +.calendar-cancel a { + color: black; + display: block; +} + +ul.timelist, .timelist li { + list-style-type: none; + margin: 0; + padding: 0; +} + +.timelist a { + padding: 2px; +} + +/* EDIT INLINE */ + +.inline-deletelink { + float: right; + text-indent: -9999px; + background: url(../img/inline-delete.svg) 0 0 no-repeat; + width: 16px; + height: 16px; + border: 0px none; +} + +.inline-deletelink:focus, .inline-deletelink:hover { + cursor: pointer; +} + +/* RELATED WIDGET WRAPPER */ +.related-widget-wrapper { + float: left; /* display properly in form rows with multiple fields */ + overflow: hidden; /* clear floated contents */ +} + +.related-widget-wrapper-link { + opacity: 0.3; +} + +.related-widget-wrapper-link:link { + opacity: .8; +} + +.related-widget-wrapper-link:link:focus, +.related-widget-wrapper-link:link:hover { + opacity: 1; +} + +select + .related-widget-wrapper-link, +.related-widget-wrapper-link + .related-widget-wrapper-link { + margin-left: 7px; +} + +/* GIS MAPS */ +.dj_map { + width: 600px; + height: 400px; +} diff --git a/y/static_root/admin/img/LICENSE b/y/static_root/admin/img/LICENSE new file mode 100644 index 0000000000000000000000000000000000000000..a4faaa1dfa226ac68c6a7898f7161d0e2956dcb3 --- /dev/null +++ b/y/static_root/admin/img/LICENSE @@ -0,0 +1,20 @@ +The MIT License (MIT) + +Copyright (c) 2014 Code Charm Ltd + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/y/static_root/admin/img/README.txt b/y/static_root/admin/img/README.txt new file mode 100644 index 0000000000000000000000000000000000000000..4eb2e492a9be5f85a3b2cf039257b500273c2bc0 --- /dev/null +++ b/y/static_root/admin/img/README.txt @@ -0,0 +1,7 @@ +All icons are taken from Font Awesome (http://fontawesome.io/) project. +The Font Awesome font is licensed under the SIL OFL 1.1: +- https://scripts.sil.org/OFL + +SVG icons source: https://github.com/encharm/Font-Awesome-SVG-PNG +Font-Awesome-SVG-PNG is licensed under the MIT license (see file license +in current folder). diff --git a/y/static_root/admin/img/calendar-icons.svg b/y/static_root/admin/img/calendar-icons.svg new file mode 100644 index 0000000000000000000000000000000000000000..dbf21c39d238c60288c0206a3969eb8a50d3a278 --- /dev/null +++ b/y/static_root/admin/img/calendar-icons.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/y/static_root/admin/img/gis/move_vertex_off.svg b/y/static_root/admin/img/gis/move_vertex_off.svg new file mode 100644 index 0000000000000000000000000000000000000000..228854f3b00be502dbb2deed17020bbfe915556d --- /dev/null +++ b/y/static_root/admin/img/gis/move_vertex_off.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/y/static_root/admin/img/gis/move_vertex_on.svg b/y/static_root/admin/img/gis/move_vertex_on.svg new file mode 100644 index 0000000000000000000000000000000000000000..96b87fdd708ef19fc3c6e466c44d7c212efa1d14 --- /dev/null +++ b/y/static_root/admin/img/gis/move_vertex_on.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/y/static_root/admin/img/icon-addlink.svg b/y/static_root/admin/img/icon-addlink.svg new file mode 100644 index 0000000000000000000000000000000000000000..e004fb162633a3cab16d650492698785194cb66f --- /dev/null +++ b/y/static_root/admin/img/icon-addlink.svg @@ -0,0 +1,3 @@ + + + diff --git a/y/static_root/admin/img/icon-alert.svg b/y/static_root/admin/img/icon-alert.svg new file mode 100644 index 0000000000000000000000000000000000000000..e51ea83f5bb0e420a11f6b91c18654d0a227da97 --- /dev/null +++ b/y/static_root/admin/img/icon-alert.svg @@ -0,0 +1,3 @@ + + + diff --git a/y/static_root/admin/img/icon-calendar.svg b/y/static_root/admin/img/icon-calendar.svg new file mode 100644 index 0000000000000000000000000000000000000000..97910a9949126a13793506efed884f378fc8449a --- /dev/null +++ b/y/static_root/admin/img/icon-calendar.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/y/static_root/admin/img/icon-changelink.svg b/y/static_root/admin/img/icon-changelink.svg new file mode 100644 index 0000000000000000000000000000000000000000..bbb137aa0866379ef81fd5a0e8a6d3207628b0ac --- /dev/null +++ b/y/static_root/admin/img/icon-changelink.svg @@ -0,0 +1,3 @@ + + + diff --git a/y/static_root/admin/img/icon-clock.svg b/y/static_root/admin/img/icon-clock.svg new file mode 100644 index 0000000000000000000000000000000000000000..bf9985d3f44610bd43d9daada9876db12100d504 --- /dev/null +++ b/y/static_root/admin/img/icon-clock.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/y/static_root/admin/img/icon-deletelink.svg b/y/static_root/admin/img/icon-deletelink.svg new file mode 100644 index 0000000000000000000000000000000000000000..4059b15544994e5e73e9b219c31627055dfa17bc --- /dev/null +++ b/y/static_root/admin/img/icon-deletelink.svg @@ -0,0 +1,3 @@ + + + diff --git a/y/static_root/admin/img/icon-no.svg b/y/static_root/admin/img/icon-no.svg new file mode 100644 index 0000000000000000000000000000000000000000..2e0d3832c9299c3994f627cd64ed0341a5da7b14 --- /dev/null +++ b/y/static_root/admin/img/icon-no.svg @@ -0,0 +1,3 @@ + + + diff --git a/y/static_root/admin/img/icon-unknown-alt.svg b/y/static_root/admin/img/icon-unknown-alt.svg new file mode 100644 index 0000000000000000000000000000000000000000..1c6b99fc0946c3f41df99174e3621eb88d3c23e7 --- /dev/null +++ b/y/static_root/admin/img/icon-unknown-alt.svg @@ -0,0 +1,3 @@ + + + diff --git a/y/static_root/admin/img/icon-unknown.svg b/y/static_root/admin/img/icon-unknown.svg new file mode 100644 index 0000000000000000000000000000000000000000..50b4f97276b46f2d3cd7102aaede3c526d3887b6 --- /dev/null +++ b/y/static_root/admin/img/icon-unknown.svg @@ -0,0 +1,3 @@ + + + diff --git a/y/static_root/admin/img/icon-viewlink.svg b/y/static_root/admin/img/icon-viewlink.svg new file mode 100644 index 0000000000000000000000000000000000000000..a1ca1d3f4e246eb6b7bc4bc078b0cce37cc27e42 --- /dev/null +++ b/y/static_root/admin/img/icon-viewlink.svg @@ -0,0 +1,3 @@ + + + diff --git a/y/static_root/admin/img/icon-yes.svg b/y/static_root/admin/img/icon-yes.svg new file mode 100644 index 0000000000000000000000000000000000000000..5883d877e89b89d42fa121725ae7b726dbfa5f50 --- /dev/null +++ b/y/static_root/admin/img/icon-yes.svg @@ -0,0 +1,3 @@ + + + diff --git a/y/static_root/admin/img/inline-delete.svg b/y/static_root/admin/img/inline-delete.svg new file mode 100644 index 0000000000000000000000000000000000000000..17d1ad67cdcca17f6ddcdbb4edf062a9f2b49b60 --- /dev/null +++ b/y/static_root/admin/img/inline-delete.svg @@ -0,0 +1,3 @@ + + + diff --git a/y/static_root/admin/img/search.svg b/y/static_root/admin/img/search.svg new file mode 100644 index 0000000000000000000000000000000000000000..c8c69b2acc1cd0104aa9fbcd61893d9eeace8f25 --- /dev/null +++ b/y/static_root/admin/img/search.svg @@ -0,0 +1,3 @@ + + + diff --git a/y/static_root/admin/img/selector-icons.svg b/y/static_root/admin/img/selector-icons.svg new file mode 100644 index 0000000000000000000000000000000000000000..926b8e21b524c4bdd8a2f094d7f8b3043196112a --- /dev/null +++ b/y/static_root/admin/img/selector-icons.svg @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/y/static_root/admin/img/sorting-icons.svg b/y/static_root/admin/img/sorting-icons.svg new file mode 100644 index 0000000000000000000000000000000000000000..7c31ec91145538b8f985d8991489b076daec514c --- /dev/null +++ b/y/static_root/admin/img/sorting-icons.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/y/static_root/admin/img/tooltag-add.svg b/y/static_root/admin/img/tooltag-add.svg new file mode 100644 index 0000000000000000000000000000000000000000..1ca64ae5b08ed18efda27c9a58a8496d31afac2a --- /dev/null +++ b/y/static_root/admin/img/tooltag-add.svg @@ -0,0 +1,3 @@ + + + diff --git a/y/static_root/admin/img/tooltag-arrowright.svg b/y/static_root/admin/img/tooltag-arrowright.svg new file mode 100644 index 0000000000000000000000000000000000000000..b664d61937be6fa51d59453a7c21228b5d2ace7a --- /dev/null +++ b/y/static_root/admin/img/tooltag-arrowright.svg @@ -0,0 +1,3 @@ + + + diff --git a/y/static_root/admin/js/SelectBox.js b/y/static_root/admin/js/SelectBox.js new file mode 100644 index 0000000000000000000000000000000000000000..3db4ec7fa6612625ec731a2103a489bcdbce4637 --- /dev/null +++ b/y/static_root/admin/js/SelectBox.js @@ -0,0 +1,116 @@ +'use strict'; +{ + const SelectBox = { + cache: {}, + init: function(id) { + const box = document.getElementById(id); + SelectBox.cache[id] = []; + const cache = SelectBox.cache[id]; + for (const node of box.options) { + cache.push({value: node.value, text: node.text, displayed: 1}); + } + }, + redisplay: function(id) { + // Repopulate HTML select box from cache + const box = document.getElementById(id); + const scroll_value_from_top = box.scrollTop; + box.innerHTML = ''; + for (const node of SelectBox.cache[id]) { + if (node.displayed) { + const new_option = new Option(node.text, node.value, false, false); + // Shows a tooltip when hovering over the option + new_option.title = node.text; + box.appendChild(new_option); + } + } + box.scrollTop = scroll_value_from_top; + }, + filter: function(id, text) { + // Redisplay the HTML select box, displaying only the choices containing ALL + // the words in text. (It's an AND search.) + const tokens = text.toLowerCase().split(/\s+/); + for (const node of SelectBox.cache[id]) { + node.displayed = 1; + const node_text = node.text.toLowerCase(); + for (const token of tokens) { + if (!node_text.includes(token)) { + node.displayed = 0; + break; // Once the first token isn't found we're done + } + } + } + SelectBox.redisplay(id); + }, + get_hidden_node_count(id) { + const cache = SelectBox.cache[id] || []; + return cache.filter(node => node.displayed === 0).length; + }, + delete_from_cache: function(id, value) { + let delete_index = null; + const cache = SelectBox.cache[id]; + for (const [i, node] of cache.entries()) { + if (node.value === value) { + delete_index = i; + break; + } + } + cache.splice(delete_index, 1); + }, + add_to_cache: function(id, option) { + SelectBox.cache[id].push({value: option.value, text: option.text, displayed: 1}); + }, + cache_contains: function(id, value) { + // Check if an item is contained in the cache + for (const node of SelectBox.cache[id]) { + if (node.value === value) { + return true; + } + } + return false; + }, + move: function(from, to) { + const from_box = document.getElementById(from); + for (const option of from_box.options) { + const option_value = option.value; + if (option.selected && SelectBox.cache_contains(from, option_value)) { + SelectBox.add_to_cache(to, {value: option_value, text: option.text, displayed: 1}); + SelectBox.delete_from_cache(from, option_value); + } + } + SelectBox.redisplay(from); + SelectBox.redisplay(to); + }, + move_all: function(from, to) { + const from_box = document.getElementById(from); + for (const option of from_box.options) { + const option_value = option.value; + if (SelectBox.cache_contains(from, option_value)) { + SelectBox.add_to_cache(to, {value: option_value, text: option.text, displayed: 1}); + SelectBox.delete_from_cache(from, option_value); + } + } + SelectBox.redisplay(from); + SelectBox.redisplay(to); + }, + sort: function(id) { + SelectBox.cache[id].sort(function(a, b) { + a = a.text.toLowerCase(); + b = b.text.toLowerCase(); + if (a > b) { + return 1; + } + if (a < b) { + return -1; + } + return 0; + } ); + }, + select_all: function(id) { + const box = document.getElementById(id); + for (const option of box.options) { + option.selected = true; + } + } + }; + window.SelectBox = SelectBox; +} diff --git a/y/static_root/admin/js/SelectFilter2.js b/y/static_root/admin/js/SelectFilter2.js new file mode 100644 index 0000000000000000000000000000000000000000..9a4e0a3a91bbd381cc12b71f66f4c6648c97806a --- /dev/null +++ b/y/static_root/admin/js/SelectFilter2.js @@ -0,0 +1,283 @@ +/*global SelectBox, gettext, interpolate, quickElement, SelectFilter*/ +/* +SelectFilter2 - Turns a multiple-select box into a filter interface. + +Requires core.js and SelectBox.js. +*/ +'use strict'; +{ + window.SelectFilter = { + init: function(field_id, field_name, is_stacked) { + if (field_id.match(/__prefix__/)) { + // Don't initialize on empty forms. + return; + } + const from_box = document.getElementById(field_id); + from_box.id += '_from'; // change its ID + from_box.className = 'filtered'; + + for (const p of from_box.parentNode.getElementsByTagName('p')) { + if (p.classList.contains("info")) { + // Remove

, because it just gets in the way. + from_box.parentNode.removeChild(p); + } else if (p.classList.contains("help")) { + // Move help text up to the top so it isn't below the select + // boxes or wrapped off on the side to the right of the add + // button: + from_box.parentNode.insertBefore(p, from_box.parentNode.firstChild); + } + } + + //

or
+ const selector_div = quickElement('div', from_box.parentNode); + selector_div.className = is_stacked ? 'selector stacked' : 'selector'; + + //
+ const selector_available = quickElement('div', selector_div); + selector_available.className = 'selector-available'; + const title_available = quickElement('h2', selector_available, interpolate(gettext('Available %s') + ' ', [field_name])); + quickElement( + 'span', title_available, '', + 'class', 'help help-tooltip help-icon', + 'title', interpolate( + gettext( + 'This is the list of available %s. You may choose some by ' + + 'selecting them in the box below and then clicking the ' + + '"Choose" arrow between the two boxes.' + ), + [field_name] + ) + ); + + const filter_p = quickElement('p', selector_available, '', 'id', field_id + '_filter'); + filter_p.className = 'selector-filter'; + + const search_filter_label = quickElement('label', filter_p, '', 'for', field_id + '_input'); + + quickElement( + 'span', search_filter_label, '', + 'class', 'help-tooltip search-label-icon', + 'title', interpolate(gettext("Type into this box to filter down the list of available %s."), [field_name]) + ); + + filter_p.appendChild(document.createTextNode(' ')); + + const filter_input = quickElement('input', filter_p, '', 'type', 'text', 'placeholder', gettext("Filter")); + filter_input.id = field_id + '_input'; + + selector_available.appendChild(from_box); + const choose_all = quickElement('a', selector_available, gettext('Choose all'), 'title', interpolate(gettext('Click to choose all %s at once.'), [field_name]), 'href', '#', 'id', field_id + '_add_all_link'); + choose_all.className = 'selector-chooseall'; + + //
    + const selector_chooser = quickElement('ul', selector_div); + selector_chooser.className = 'selector-chooser'; + const add_link = quickElement('a', quickElement('li', selector_chooser), gettext('Choose'), 'title', gettext('Choose'), 'href', '#', 'id', field_id + '_add_link'); + add_link.className = 'selector-add'; + const remove_link = quickElement('a', quickElement('li', selector_chooser), gettext('Remove'), 'title', gettext('Remove'), 'href', '#', 'id', field_id + '_remove_link'); + remove_link.className = 'selector-remove'; + + //
    + const selector_chosen = quickElement('div', selector_div, '', 'id', field_id + '_selector_chosen'); + selector_chosen.className = 'selector-chosen'; + const title_chosen = quickElement('h2', selector_chosen, interpolate(gettext('Chosen %s') + ' ', [field_name])); + quickElement( + 'span', title_chosen, '', + 'class', 'help help-tooltip help-icon', + 'title', interpolate( + gettext( + 'This is the list of chosen %s. You may remove some by ' + + 'selecting them in the box below and then clicking the ' + + '"Remove" arrow between the two boxes.' + ), + [field_name] + ) + ); + + const filter_selected_p = quickElement('p', selector_chosen, '', 'id', field_id + '_filter_selected'); + filter_selected_p.className = 'selector-filter'; + + const search_filter_selected_label = quickElement('label', filter_selected_p, '', 'for', field_id + '_selected_input'); + + quickElement( + 'span', search_filter_selected_label, '', + 'class', 'help-tooltip search-label-icon', + 'title', interpolate(gettext("Type into this box to filter down the list of selected %s."), [field_name]) + ); + + filter_selected_p.appendChild(document.createTextNode(' ')); + + const filter_selected_input = quickElement('input', filter_selected_p, '', 'type', 'text', 'placeholder', gettext("Filter")); + filter_selected_input.id = field_id + '_selected_input'; + + const to_box = quickElement('select', selector_chosen, '', 'id', field_id + '_to', 'multiple', '', 'size', from_box.size, 'name', from_box.name); + to_box.className = 'filtered'; + + const warning_footer = quickElement('div', selector_chosen, '', 'class', 'list-footer-display'); + quickElement('span', warning_footer, '', 'id', field_id + '_list-footer-display-text'); + quickElement('span', warning_footer, ' (click to clear)', 'class', 'list-footer-display__clear'); + + const clear_all = quickElement('a', selector_chosen, gettext('Remove all'), 'title', interpolate(gettext('Click to remove all chosen %s at once.'), [field_name]), 'href', '#', 'id', field_id + '_remove_all_link'); + clear_all.className = 'selector-clearall'; + + from_box.name = from_box.name + '_old'; + + // Set up the JavaScript event handlers for the select box filter interface + const move_selection = function(e, elem, move_func, from, to) { + if (elem.classList.contains('active')) { + move_func(from, to); + SelectFilter.refresh_icons(field_id); + SelectFilter.refresh_filtered_selects(field_id); + SelectFilter.refresh_filtered_warning(field_id); + } + e.preventDefault(); + }; + choose_all.addEventListener('click', function(e) { + move_selection(e, this, SelectBox.move_all, field_id + '_from', field_id + '_to'); + }); + add_link.addEventListener('click', function(e) { + move_selection(e, this, SelectBox.move, field_id + '_from', field_id + '_to'); + }); + remove_link.addEventListener('click', function(e) { + move_selection(e, this, SelectBox.move, field_id + '_to', field_id + '_from'); + }); + clear_all.addEventListener('click', function(e) { + move_selection(e, this, SelectBox.move_all, field_id + '_to', field_id + '_from'); + }); + warning_footer.addEventListener('click', function(e) { + filter_selected_input.value = ''; + SelectBox.filter(field_id + '_to', ''); + SelectFilter.refresh_filtered_warning(field_id); + SelectFilter.refresh_icons(field_id); + }); + filter_input.addEventListener('keypress', function(e) { + SelectFilter.filter_key_press(e, field_id, '_from', '_to'); + }); + filter_input.addEventListener('keyup', function(e) { + SelectFilter.filter_key_up(e, field_id, '_from'); + }); + filter_input.addEventListener('keydown', function(e) { + SelectFilter.filter_key_down(e, field_id, '_from', '_to'); + }); + filter_selected_input.addEventListener('keypress', function(e) { + SelectFilter.filter_key_press(e, field_id, '_to', '_from'); + }); + filter_selected_input.addEventListener('keyup', function(e) { + SelectFilter.filter_key_up(e, field_id, '_to', '_selected_input'); + }); + filter_selected_input.addEventListener('keydown', function(e) { + SelectFilter.filter_key_down(e, field_id, '_to', '_from'); + }); + selector_div.addEventListener('change', function(e) { + if (e.target.tagName === 'SELECT') { + SelectFilter.refresh_icons(field_id); + } + }); + selector_div.addEventListener('dblclick', function(e) { + if (e.target.tagName === 'OPTION') { + if (e.target.closest('select').id === field_id + '_to') { + SelectBox.move(field_id + '_to', field_id + '_from'); + } else { + SelectBox.move(field_id + '_from', field_id + '_to'); + } + SelectFilter.refresh_icons(field_id); + } + }); + from_box.closest('form').addEventListener('submit', function() { + SelectBox.filter(field_id + '_to', ''); + SelectBox.select_all(field_id + '_to'); + }); + SelectBox.init(field_id + '_from'); + SelectBox.init(field_id + '_to'); + // Move selected from_box options to to_box + SelectBox.move(field_id + '_from', field_id + '_to'); + + // Initial icon refresh + SelectFilter.refresh_icons(field_id); + }, + any_selected: function(field) { + // Temporarily add the required attribute and check validity. + field.required = true; + const any_selected = field.checkValidity(); + field.required = false; + return any_selected; + }, + refresh_filtered_warning: function(field_id) { + const count = SelectBox.get_hidden_node_count(field_id + '_to'); + const selector = document.getElementById(field_id + '_selector_chosen'); + const warning = document.getElementById(field_id + '_list-footer-display-text'); + selector.className = selector.className.replace('selector-chosen--with-filtered', ''); + warning.textContent = interpolate(ngettext( + '%s selected option not visible', + '%s selected options not visible', + count + ), [count]); + if(count > 0) { + selector.className += ' selector-chosen--with-filtered'; + } + }, + refresh_filtered_selects: function(field_id) { + SelectBox.filter(field_id + '_from', document.getElementById(field_id + "_input").value); + SelectBox.filter(field_id + '_to', document.getElementById(field_id + "_selected_input").value); + }, + refresh_icons: function(field_id) { + const from = document.getElementById(field_id + '_from'); + const to = document.getElementById(field_id + '_to'); + // Active if at least one item is selected + document.getElementById(field_id + '_add_link').classList.toggle('active', SelectFilter.any_selected(from)); + document.getElementById(field_id + '_remove_link').classList.toggle('active', SelectFilter.any_selected(to)); + // Active if the corresponding box isn't empty + document.getElementById(field_id + '_add_all_link').classList.toggle('active', from.querySelector('option')); + document.getElementById(field_id + '_remove_all_link').classList.toggle('active', to.querySelector('option')); + SelectFilter.refresh_filtered_warning(field_id); + }, + filter_key_press: function(event, field_id, source, target) { + const source_box = document.getElementById(field_id + source); + // don't submit form if user pressed Enter + if ((event.which && event.which === 13) || (event.keyCode && event.keyCode === 13)) { + source_box.selectedIndex = 0; + SelectBox.move(field_id + source, field_id + target); + source_box.selectedIndex = 0; + event.preventDefault(); + } + }, + filter_key_up: function(event, field_id, source, filter_input) { + const input = filter_input || '_input'; + const source_box = document.getElementById(field_id + source); + const temp = source_box.selectedIndex; + SelectBox.filter(field_id + source, document.getElementById(field_id + input).value); + source_box.selectedIndex = temp; + SelectFilter.refresh_filtered_warning(field_id); + SelectFilter.refresh_icons(field_id); + }, + filter_key_down: function(event, field_id, source, target) { + const source_box = document.getElementById(field_id + source); + // right key (39) or left key (37) + const direction = source === '_from' ? 39 : 37; + // right arrow -- move across + if ((event.which && event.which === direction) || (event.keyCode && event.keyCode === direction)) { + const old_index = source_box.selectedIndex; + SelectBox.move(field_id + source, field_id + target); + SelectFilter.refresh_filtered_selects(field_id); + SelectFilter.refresh_filtered_warning(field_id); + source_box.selectedIndex = (old_index === source_box.length) ? source_box.length - 1 : old_index; + return; + } + // down arrow -- wrap around + if ((event.which && event.which === 40) || (event.keyCode && event.keyCode === 40)) { + source_box.selectedIndex = (source_box.length === source_box.selectedIndex + 1) ? 0 : source_box.selectedIndex + 1; + } + // up arrow -- wrap around + if ((event.which && event.which === 38) || (event.keyCode && event.keyCode === 38)) { + source_box.selectedIndex = (source_box.selectedIndex === 0) ? source_box.length - 1 : source_box.selectedIndex - 1; + } + } + }; + + window.addEventListener('load', function(e) { + document.querySelectorAll('select.selectfilter, select.selectfilterstacked').forEach(function(el) { + const data = el.dataset; + SelectFilter.init(el.id, data.fieldName, parseInt(data.isStacked, 10)); + }); + }); +} diff --git a/y/static_root/admin/js/actions.js b/y/static_root/admin/js/actions.js new file mode 100644 index 0000000000000000000000000000000000000000..20a5c14353affa7d83a241f85c0b7ca0a434c58a --- /dev/null +++ b/y/static_root/admin/js/actions.js @@ -0,0 +1,201 @@ +/*global gettext, interpolate, ngettext*/ +'use strict'; +{ + function show(selector) { + document.querySelectorAll(selector).forEach(function(el) { + el.classList.remove('hidden'); + }); + } + + function hide(selector) { + document.querySelectorAll(selector).forEach(function(el) { + el.classList.add('hidden'); + }); + } + + function showQuestion(options) { + hide(options.acrossClears); + show(options.acrossQuestions); + hide(options.allContainer); + } + + function showClear(options) { + show(options.acrossClears); + hide(options.acrossQuestions); + document.querySelector(options.actionContainer).classList.remove(options.selectedClass); + show(options.allContainer); + hide(options.counterContainer); + } + + function reset(options) { + hide(options.acrossClears); + hide(options.acrossQuestions); + hide(options.allContainer); + show(options.counterContainer); + } + + function clearAcross(options) { + reset(options); + const acrossInputs = document.querySelectorAll(options.acrossInput); + acrossInputs.forEach(function(acrossInput) { + acrossInput.value = 0; + }); + document.querySelector(options.actionContainer).classList.remove(options.selectedClass); + } + + function checker(actionCheckboxes, options, checked) { + if (checked) { + showQuestion(options); + } else { + reset(options); + } + actionCheckboxes.forEach(function(el) { + el.checked = checked; + el.closest('tr').classList.toggle(options.selectedClass, checked); + }); + } + + function updateCounter(actionCheckboxes, options) { + const sel = Array.from(actionCheckboxes).filter(function(el) { + return el.checked; + }).length; + const counter = document.querySelector(options.counterContainer); + // data-actions-icnt is defined in the generated HTML + // and contains the total amount of objects in the queryset + const actions_icnt = Number(counter.dataset.actionsIcnt); + counter.textContent = interpolate( + ngettext('%(sel)s of %(cnt)s selected', '%(sel)s of %(cnt)s selected', sel), { + sel: sel, + cnt: actions_icnt + }, true); + const allToggle = document.getElementById(options.allToggleId); + allToggle.checked = sel === actionCheckboxes.length; + if (allToggle.checked) { + showQuestion(options); + } else { + clearAcross(options); + } + } + + const defaults = { + actionContainer: "div.actions", + counterContainer: "span.action-counter", + allContainer: "div.actions span.all", + acrossInput: "div.actions input.select-across", + acrossQuestions: "div.actions span.question", + acrossClears: "div.actions span.clear", + allToggleId: "action-toggle", + selectedClass: "selected" + }; + + window.Actions = function(actionCheckboxes, options) { + options = Object.assign({}, defaults, options); + let list_editable_changed = false; + let lastChecked = null; + let shiftPressed = false; + + document.addEventListener('keydown', (event) => { + shiftPressed = event.shiftKey; + }); + + document.addEventListener('keyup', (event) => { + shiftPressed = event.shiftKey; + }); + + document.getElementById(options.allToggleId).addEventListener('click', function(event) { + checker(actionCheckboxes, options, this.checked); + updateCounter(actionCheckboxes, options); + }); + + document.querySelectorAll(options.acrossQuestions + " a").forEach(function(el) { + el.addEventListener('click', function(event) { + event.preventDefault(); + const acrossInputs = document.querySelectorAll(options.acrossInput); + acrossInputs.forEach(function(acrossInput) { + acrossInput.value = 1; + }); + showClear(options); + }); + }); + + document.querySelectorAll(options.acrossClears + " a").forEach(function(el) { + el.addEventListener('click', function(event) { + event.preventDefault(); + document.getElementById(options.allToggleId).checked = false; + clearAcross(options); + checker(actionCheckboxes, options, false); + updateCounter(actionCheckboxes, options); + }); + }); + + function affectedCheckboxes(target, withModifier) { + const multiSelect = (lastChecked && withModifier && lastChecked !== target); + if (!multiSelect) { + return [target]; + } + const checkboxes = Array.from(actionCheckboxes); + const targetIndex = checkboxes.findIndex(el => el === target); + const lastCheckedIndex = checkboxes.findIndex(el => el === lastChecked); + const startIndex = Math.min(targetIndex, lastCheckedIndex); + const endIndex = Math.max(targetIndex, lastCheckedIndex); + const filtered = checkboxes.filter((el, index) => (startIndex <= index) && (index <= endIndex)); + return filtered; + }; + + Array.from(document.getElementById('result_list').tBodies).forEach(function(el) { + el.addEventListener('change', function(event) { + const target = event.target; + if (target.classList.contains('action-select')) { + const checkboxes = affectedCheckboxes(target, shiftPressed); + checker(checkboxes, options, target.checked); + updateCounter(actionCheckboxes, options); + lastChecked = target; + } else { + list_editable_changed = true; + } + }); + }); + + document.querySelector('#changelist-form button[name=index]').addEventListener('click', function(event) { + if (list_editable_changed) { + const confirmed = confirm(gettext("You have unsaved changes on individual editable fields. If you run an action, your unsaved changes will be lost.")); + if (!confirmed) { + event.preventDefault(); + } + } + }); + + const el = document.querySelector('#changelist-form input[name=_save]'); + // The button does not exist if no fields are editable. + if (el) { + el.addEventListener('click', function(event) { + if (document.querySelector('[name=action]').value) { + const text = list_editable_changed + ? gettext("You have selected an action, but you haven’t saved your changes to individual fields yet. Please click OK to save. You’ll need to re-run the action.") + : gettext("You have selected an action, and you haven’t made any changes on individual fields. You’re probably looking for the Go button rather than the Save button."); + if (!confirm(text)) { + event.preventDefault(); + } + } + }); + } + }; + + // Call function fn when the DOM is loaded and ready. If it is already + // loaded, call the function now. + // http://youmightnotneedjquery.com/#ready + function ready(fn) { + if (document.readyState !== 'loading') { + fn(); + } else { + document.addEventListener('DOMContentLoaded', fn); + } + } + + ready(function() { + const actionsEls = document.querySelectorAll('tr input.action-select'); + if (actionsEls.length > 0) { + Actions(actionsEls); + } + }); +} diff --git a/y/static_root/admin/js/admin/DateTimeShortcuts.js b/y/static_root/admin/js/admin/DateTimeShortcuts.js new file mode 100644 index 0000000000000000000000000000000000000000..aa1cae9eeb451b0aefffeb7f5c6ea75753b6a190 --- /dev/null +++ b/y/static_root/admin/js/admin/DateTimeShortcuts.js @@ -0,0 +1,408 @@ +/*global Calendar, findPosX, findPosY, get_format, gettext, gettext_noop, interpolate, ngettext, quickElement*/ +// Inserts shortcut buttons after all of the following: +// +// +'use strict'; +{ + const DateTimeShortcuts = { + calendars: [], + calendarInputs: [], + clockInputs: [], + clockHours: { + default_: [ + [gettext_noop('Now'), -1], + [gettext_noop('Midnight'), 0], + [gettext_noop('6 a.m.'), 6], + [gettext_noop('Noon'), 12], + [gettext_noop('6 p.m.'), 18] + ] + }, + dismissClockFunc: [], + dismissCalendarFunc: [], + calendarDivName1: 'calendarbox', // name of calendar
    that gets toggled + calendarDivName2: 'calendarin', // name of
    that contains calendar + calendarLinkName: 'calendarlink', // name of the link that is used to toggle + clockDivName: 'clockbox', // name of clock
    that gets toggled + clockLinkName: 'clocklink', // name of the link that is used to toggle + shortCutsClass: 'datetimeshortcuts', // class of the clock and cal shortcuts + timezoneWarningClass: 'timezonewarning', // class of the warning for timezone mismatch + timezoneOffset: 0, + init: function() { + const serverOffset = document.body.dataset.adminUtcOffset; + if (serverOffset) { + const localOffset = new Date().getTimezoneOffset() * -60; + DateTimeShortcuts.timezoneOffset = localOffset - serverOffset; + } + + for (const inp of document.getElementsByTagName('input')) { + if (inp.type === 'text' && inp.classList.contains('vTimeField')) { + DateTimeShortcuts.addClock(inp); + DateTimeShortcuts.addTimezoneWarning(inp); + } + else if (inp.type === 'text' && inp.classList.contains('vDateField')) { + DateTimeShortcuts.addCalendar(inp); + DateTimeShortcuts.addTimezoneWarning(inp); + } + } + }, + // Return the current time while accounting for the server timezone. + now: function() { + const serverOffset = document.body.dataset.adminUtcOffset; + if (serverOffset) { + const localNow = new Date(); + const localOffset = localNow.getTimezoneOffset() * -60; + localNow.setTime(localNow.getTime() + 1000 * (serverOffset - localOffset)); + return localNow; + } else { + return new Date(); + } + }, + // Add a warning when the time zone in the browser and backend do not match. + addTimezoneWarning: function(inp) { + const warningClass = DateTimeShortcuts.timezoneWarningClass; + let timezoneOffset = DateTimeShortcuts.timezoneOffset / 3600; + + // Only warn if there is a time zone mismatch. + if (!timezoneOffset) { + return; + } + + // Check if warning is already there. + if (inp.parentNode.querySelectorAll('.' + warningClass).length) { + return; + } + + let message; + if (timezoneOffset > 0) { + message = ngettext( + 'Note: You are %s hour ahead of server time.', + 'Note: You are %s hours ahead of server time.', + timezoneOffset + ); + } + else { + timezoneOffset *= -1; + message = ngettext( + 'Note: You are %s hour behind server time.', + 'Note: You are %s hours behind server time.', + timezoneOffset + ); + } + message = interpolate(message, [timezoneOffset]); + + const warning = document.createElement('div'); + warning.classList.add('help', warningClass); + warning.textContent = message; + inp.parentNode.appendChild(warning); + }, + // Add clock widget to a given field + addClock: function(inp) { + const num = DateTimeShortcuts.clockInputs.length; + DateTimeShortcuts.clockInputs[num] = inp; + DateTimeShortcuts.dismissClockFunc[num] = function() { DateTimeShortcuts.dismissClock(num); return true; }; + + // Shortcut links (clock icon and "Now" link) + const shortcuts_span = document.createElement('span'); + shortcuts_span.className = DateTimeShortcuts.shortCutsClass; + inp.parentNode.insertBefore(shortcuts_span, inp.nextSibling); + const now_link = document.createElement('a'); + now_link.href = "#"; + now_link.textContent = gettext('Now'); + now_link.addEventListener('click', function(e) { + e.preventDefault(); + DateTimeShortcuts.handleClockQuicklink(num, -1); + }); + const clock_link = document.createElement('a'); + clock_link.href = '#'; + clock_link.id = DateTimeShortcuts.clockLinkName + num; + clock_link.addEventListener('click', function(e) { + e.preventDefault(); + // avoid triggering the document click handler to dismiss the clock + e.stopPropagation(); + DateTimeShortcuts.openClock(num); + }); + + quickElement( + 'span', clock_link, '', + 'class', 'clock-icon', + 'title', gettext('Choose a Time') + ); + shortcuts_span.appendChild(document.createTextNode('\u00A0')); + shortcuts_span.appendChild(now_link); + shortcuts_span.appendChild(document.createTextNode('\u00A0|\u00A0')); + shortcuts_span.appendChild(clock_link); + + // Create clock link div + // + // Markup looks like: + //
    + //

    Choose a time

    + // + //

    Cancel

    + //
    + + const clock_box = document.createElement('div'); + clock_box.style.display = 'none'; + clock_box.style.position = 'absolute'; + clock_box.className = 'clockbox module'; + clock_box.id = DateTimeShortcuts.clockDivName + num; + document.body.appendChild(clock_box); + clock_box.addEventListener('click', function(e) { e.stopPropagation(); }); + + quickElement('h2', clock_box, gettext('Choose a time')); + const time_list = quickElement('ul', clock_box); + time_list.className = 'timelist'; + // The list of choices can be overridden in JavaScript like this: + // DateTimeShortcuts.clockHours.name = [['3 a.m.', 3]]; + // where name is the name attribute of the . + const name = typeof DateTimeShortcuts.clockHours[inp.name] === 'undefined' ? 'default_' : inp.name; + DateTimeShortcuts.clockHours[name].forEach(function(element) { + const time_link = quickElement('a', quickElement('li', time_list), gettext(element[0]), 'href', '#'); + time_link.addEventListener('click', function(e) { + e.preventDefault(); + DateTimeShortcuts.handleClockQuicklink(num, element[1]); + }); + }); + + const cancel_p = quickElement('p', clock_box); + cancel_p.className = 'calendar-cancel'; + const cancel_link = quickElement('a', cancel_p, gettext('Cancel'), 'href', '#'); + cancel_link.addEventListener('click', function(e) { + e.preventDefault(); + DateTimeShortcuts.dismissClock(num); + }); + + document.addEventListener('keyup', function(event) { + if (event.which === 27) { + // ESC key closes popup + DateTimeShortcuts.dismissClock(num); + event.preventDefault(); + } + }); + }, + openClock: function(num) { + const clock_box = document.getElementById(DateTimeShortcuts.clockDivName + num); + const clock_link = document.getElementById(DateTimeShortcuts.clockLinkName + num); + + // Recalculate the clockbox position + // is it left-to-right or right-to-left layout ? + if (window.getComputedStyle(document.body).direction !== 'rtl') { + clock_box.style.left = findPosX(clock_link) + 17 + 'px'; + } + else { + // since style's width is in em, it'd be tough to calculate + // px value of it. let's use an estimated px for now + clock_box.style.left = findPosX(clock_link) - 110 + 'px'; + } + clock_box.style.top = Math.max(0, findPosY(clock_link) - 30) + 'px'; + + // Show the clock box + clock_box.style.display = 'block'; + document.addEventListener('click', DateTimeShortcuts.dismissClockFunc[num]); + }, + dismissClock: function(num) { + document.getElementById(DateTimeShortcuts.clockDivName + num).style.display = 'none'; + document.removeEventListener('click', DateTimeShortcuts.dismissClockFunc[num]); + }, + handleClockQuicklink: function(num, val) { + let d; + if (val === -1) { + d = DateTimeShortcuts.now(); + } + else { + d = new Date(1970, 1, 1, val, 0, 0, 0); + } + DateTimeShortcuts.clockInputs[num].value = d.strftime(get_format('TIME_INPUT_FORMATS')[0]); + DateTimeShortcuts.clockInputs[num].focus(); + DateTimeShortcuts.dismissClock(num); + }, + // Add calendar widget to a given field. + addCalendar: function(inp) { + const num = DateTimeShortcuts.calendars.length; + + DateTimeShortcuts.calendarInputs[num] = inp; + DateTimeShortcuts.dismissCalendarFunc[num] = function() { DateTimeShortcuts.dismissCalendar(num); return true; }; + + // Shortcut links (calendar icon and "Today" link) + const shortcuts_span = document.createElement('span'); + shortcuts_span.className = DateTimeShortcuts.shortCutsClass; + inp.parentNode.insertBefore(shortcuts_span, inp.nextSibling); + const today_link = document.createElement('a'); + today_link.href = '#'; + today_link.appendChild(document.createTextNode(gettext('Today'))); + today_link.addEventListener('click', function(e) { + e.preventDefault(); + DateTimeShortcuts.handleCalendarQuickLink(num, 0); + }); + const cal_link = document.createElement('a'); + cal_link.href = '#'; + cal_link.id = DateTimeShortcuts.calendarLinkName + num; + cal_link.addEventListener('click', function(e) { + e.preventDefault(); + // avoid triggering the document click handler to dismiss the calendar + e.stopPropagation(); + DateTimeShortcuts.openCalendar(num); + }); + quickElement( + 'span', cal_link, '', + 'class', 'date-icon', + 'title', gettext('Choose a Date') + ); + shortcuts_span.appendChild(document.createTextNode('\u00A0')); + shortcuts_span.appendChild(today_link); + shortcuts_span.appendChild(document.createTextNode('\u00A0|\u00A0')); + shortcuts_span.appendChild(cal_link); + + // Create calendarbox div. + // + // Markup looks like: + // + //
    + //

    + // + // February 2003 + //

    + //
    + // + //
    + //
    + // Yesterday | Today | Tomorrow + //
    + //

    Cancel

    + //
    + const cal_box = document.createElement('div'); + cal_box.style.display = 'none'; + cal_box.style.position = 'absolute'; + cal_box.className = 'calendarbox module'; + cal_box.id = DateTimeShortcuts.calendarDivName1 + num; + document.body.appendChild(cal_box); + cal_box.addEventListener('click', function(e) { e.stopPropagation(); }); + + // next-prev links + const cal_nav = quickElement('div', cal_box); + const cal_nav_prev = quickElement('a', cal_nav, '<', 'href', '#'); + cal_nav_prev.className = 'calendarnav-previous'; + cal_nav_prev.addEventListener('click', function(e) { + e.preventDefault(); + DateTimeShortcuts.drawPrev(num); + }); + + const cal_nav_next = quickElement('a', cal_nav, '>', 'href', '#'); + cal_nav_next.className = 'calendarnav-next'; + cal_nav_next.addEventListener('click', function(e) { + e.preventDefault(); + DateTimeShortcuts.drawNext(num); + }); + + // main box + const cal_main = quickElement('div', cal_box, '', 'id', DateTimeShortcuts.calendarDivName2 + num); + cal_main.className = 'calendar'; + DateTimeShortcuts.calendars[num] = new Calendar(DateTimeShortcuts.calendarDivName2 + num, DateTimeShortcuts.handleCalendarCallback(num)); + DateTimeShortcuts.calendars[num].drawCurrent(); + + // calendar shortcuts + const shortcuts = quickElement('div', cal_box); + shortcuts.className = 'calendar-shortcuts'; + let day_link = quickElement('a', shortcuts, gettext('Yesterday'), 'href', '#'); + day_link.addEventListener('click', function(e) { + e.preventDefault(); + DateTimeShortcuts.handleCalendarQuickLink(num, -1); + }); + shortcuts.appendChild(document.createTextNode('\u00A0|\u00A0')); + day_link = quickElement('a', shortcuts, gettext('Today'), 'href', '#'); + day_link.addEventListener('click', function(e) { + e.preventDefault(); + DateTimeShortcuts.handleCalendarQuickLink(num, 0); + }); + shortcuts.appendChild(document.createTextNode('\u00A0|\u00A0')); + day_link = quickElement('a', shortcuts, gettext('Tomorrow'), 'href', '#'); + day_link.addEventListener('click', function(e) { + e.preventDefault(); + DateTimeShortcuts.handleCalendarQuickLink(num, +1); + }); + + // cancel bar + const cancel_p = quickElement('p', cal_box); + cancel_p.className = 'calendar-cancel'; + const cancel_link = quickElement('a', cancel_p, gettext('Cancel'), 'href', '#'); + cancel_link.addEventListener('click', function(e) { + e.preventDefault(); + DateTimeShortcuts.dismissCalendar(num); + }); + document.addEventListener('keyup', function(event) { + if (event.which === 27) { + // ESC key closes popup + DateTimeShortcuts.dismissCalendar(num); + event.preventDefault(); + } + }); + }, + openCalendar: function(num) { + const cal_box = document.getElementById(DateTimeShortcuts.calendarDivName1 + num); + const cal_link = document.getElementById(DateTimeShortcuts.calendarLinkName + num); + const inp = DateTimeShortcuts.calendarInputs[num]; + + // Determine if the current value in the input has a valid date. + // If so, draw the calendar with that date's year and month. + if (inp.value) { + const format = get_format('DATE_INPUT_FORMATS')[0]; + const selected = inp.value.strptime(format); + const year = selected.getUTCFullYear(); + const month = selected.getUTCMonth() + 1; + const re = /\d{4}/; + if (re.test(year.toString()) && month >= 1 && month <= 12) { + DateTimeShortcuts.calendars[num].drawDate(month, year, selected); + } + } + + // Recalculate the clockbox position + // is it left-to-right or right-to-left layout ? + if (window.getComputedStyle(document.body).direction !== 'rtl') { + cal_box.style.left = findPosX(cal_link) + 17 + 'px'; + } + else { + // since style's width is in em, it'd be tough to calculate + // px value of it. let's use an estimated px for now + cal_box.style.left = findPosX(cal_link) - 180 + 'px'; + } + cal_box.style.top = Math.max(0, findPosY(cal_link) - 75) + 'px'; + + cal_box.style.display = 'block'; + document.addEventListener('click', DateTimeShortcuts.dismissCalendarFunc[num]); + }, + dismissCalendar: function(num) { + document.getElementById(DateTimeShortcuts.calendarDivName1 + num).style.display = 'none'; + document.removeEventListener('click', DateTimeShortcuts.dismissCalendarFunc[num]); + }, + drawPrev: function(num) { + DateTimeShortcuts.calendars[num].drawPreviousMonth(); + }, + drawNext: function(num) { + DateTimeShortcuts.calendars[num].drawNextMonth(); + }, + handleCalendarCallback: function(num) { + const format = get_format('DATE_INPUT_FORMATS')[0]; + return function(y, m, d) { + DateTimeShortcuts.calendarInputs[num].value = new Date(y, m - 1, d).strftime(format); + DateTimeShortcuts.calendarInputs[num].focus(); + document.getElementById(DateTimeShortcuts.calendarDivName1 + num).style.display = 'none'; + }; + }, + handleCalendarQuickLink: function(num, offset) { + const d = DateTimeShortcuts.now(); + d.setDate(d.getDate() + offset); + DateTimeShortcuts.calendarInputs[num].value = d.strftime(get_format('DATE_INPUT_FORMATS')[0]); + DateTimeShortcuts.calendarInputs[num].focus(); + DateTimeShortcuts.dismissCalendar(num); + } + }; + + window.addEventListener('load', DateTimeShortcuts.init); + window.DateTimeShortcuts = DateTimeShortcuts; +} diff --git a/y/static_root/admin/js/admin/RelatedObjectLookups.js b/y/static_root/admin/js/admin/RelatedObjectLookups.js new file mode 100644 index 0000000000000000000000000000000000000000..afb6b66c2565d19e62b6393a23bd2bfadd0d8226 --- /dev/null +++ b/y/static_root/admin/js/admin/RelatedObjectLookups.js @@ -0,0 +1,238 @@ +/*global SelectBox, interpolate*/ +// Handles related-objects functionality: lookup link for raw_id_fields +// and Add Another links. +'use strict'; +{ + const $ = django.jQuery; + let popupIndex = 0; + const relatedWindows = []; + + function dismissChildPopups() { + relatedWindows.forEach(function(win) { + if(!win.closed) { + win.dismissChildPopups(); + win.close(); + } + }); + } + + function setPopupIndex() { + if(document.getElementsByName("_popup").length > 0) { + const index = window.name.lastIndexOf("__") + 2; + popupIndex = parseInt(window.name.substring(index)); + } else { + popupIndex = 0; + } + } + + function addPopupIndex(name) { + return name + "__" + (popupIndex + 1); + } + + function removePopupIndex(name) { + return name.replace(new RegExp("__" + (popupIndex + 1) + "$"), ''); + } + + function showAdminPopup(triggeringLink, name_regexp, add_popup) { + const name = addPopupIndex(triggeringLink.id.replace(name_regexp, '')); + const href = new URL(triggeringLink.href); + if (add_popup) { + href.searchParams.set('_popup', 1); + } + const win = window.open(href, name, 'height=500,width=800,resizable=yes,scrollbars=yes'); + relatedWindows.push(win); + win.focus(); + return false; + } + + function showRelatedObjectLookupPopup(triggeringLink) { + return showAdminPopup(triggeringLink, /^lookup_/, true); + } + + function dismissRelatedLookupPopup(win, chosenId) { + const name = removePopupIndex(win.name); + const elem = document.getElementById(name); + if (elem.classList.contains('vManyToManyRawIdAdminField') && elem.value) { + elem.value += ',' + chosenId; + } else { + document.getElementById(name).value = chosenId; + } + const index = relatedWindows.indexOf(win); + if (index > -1) { + relatedWindows.splice(index, 1); + } + win.close(); + } + + function showRelatedObjectPopup(triggeringLink) { + return showAdminPopup(triggeringLink, /^(change|add|delete)_/, false); + } + + function updateRelatedObjectLinks(triggeringLink) { + const $this = $(triggeringLink); + const siblings = $this.nextAll('.view-related, .change-related, .delete-related'); + if (!siblings.length) { + return; + } + const value = $this.val(); + if (value) { + siblings.each(function() { + const elm = $(this); + elm.attr('href', elm.attr('data-href-template').replace('__fk__', value)); + }); + } else { + siblings.removeAttr('href'); + } + } + + function updateRelatedSelectsOptions(currentSelect, win, objId, newRepr, newId) { + // After create/edit a model from the options next to the current + // select (+ or :pencil:) update ForeignKey PK of the rest of selects + // in the page. + + const path = win.location.pathname; + // Extract the model from the popup url '...//add/' or + // '...///change/' depending the action (add or change). + const modelName = path.split('/')[path.split('/').length - (objId ? 4 : 3)]; + // Exclude autocomplete selects. + const selectsRelated = document.querySelectorAll(`[data-model-ref="${modelName}"] select:not(.admin-autocomplete)`); + + selectsRelated.forEach(function(select) { + if (currentSelect === select) { + return; + } + + let option = select.querySelector(`option[value="${objId}"]`); + + if (!option) { + option = new Option(newRepr, newId); + select.options.add(option); + return; + } + + option.textContent = newRepr; + option.value = newId; + }); + } + + function dismissAddRelatedObjectPopup(win, newId, newRepr) { + const name = removePopupIndex(win.name); + const elem = document.getElementById(name); + if (elem) { + const elemName = elem.nodeName.toUpperCase(); + if (elemName === 'SELECT') { + elem.options[elem.options.length] = new Option(newRepr, newId, true, true); + updateRelatedSelectsOptions(elem, win, null, newRepr, newId); + } else if (elemName === 'INPUT') { + if (elem.classList.contains('vManyToManyRawIdAdminField') && elem.value) { + elem.value += ',' + newId; + } else { + elem.value = newId; + } + } + // Trigger a change event to update related links if required. + $(elem).trigger('change'); + } else { + const toId = name + "_to"; + const o = new Option(newRepr, newId); + SelectBox.add_to_cache(toId, o); + SelectBox.redisplay(toId); + } + const index = relatedWindows.indexOf(win); + if (index > -1) { + relatedWindows.splice(index, 1); + } + win.close(); + } + + function dismissChangeRelatedObjectPopup(win, objId, newRepr, newId) { + const id = removePopupIndex(win.name.replace(/^edit_/, '')); + const selectsSelector = interpolate('#%s, #%s_from, #%s_to', [id, id, id]); + const selects = $(selectsSelector); + selects.find('option').each(function() { + if (this.value === objId) { + this.textContent = newRepr; + this.value = newId; + } + }).trigger('change'); + updateRelatedSelectsOptions(selects[0], win, objId, newRepr, newId); + selects.next().find('.select2-selection__rendered').each(function() { + // The element can have a clear button as a child. + // Use the lastChild to modify only the displayed value. + this.lastChild.textContent = newRepr; + this.title = newRepr; + }); + const index = relatedWindows.indexOf(win); + if (index > -1) { + relatedWindows.splice(index, 1); + } + win.close(); + } + + function dismissDeleteRelatedObjectPopup(win, objId) { + const id = removePopupIndex(win.name.replace(/^delete_/, '')); + const selectsSelector = interpolate('#%s, #%s_from, #%s_to', [id, id, id]); + const selects = $(selectsSelector); + selects.find('option').each(function() { + if (this.value === objId) { + $(this).remove(); + } + }).trigger('change'); + const index = relatedWindows.indexOf(win); + if (index > -1) { + relatedWindows.splice(index, 1); + } + win.close(); + } + + window.showRelatedObjectLookupPopup = showRelatedObjectLookupPopup; + window.dismissRelatedLookupPopup = dismissRelatedLookupPopup; + window.showRelatedObjectPopup = showRelatedObjectPopup; + window.updateRelatedObjectLinks = updateRelatedObjectLinks; + window.dismissAddRelatedObjectPopup = dismissAddRelatedObjectPopup; + window.dismissChangeRelatedObjectPopup = dismissChangeRelatedObjectPopup; + window.dismissDeleteRelatedObjectPopup = dismissDeleteRelatedObjectPopup; + window.dismissChildPopups = dismissChildPopups; + + // Kept for backward compatibility + window.showAddAnotherPopup = showRelatedObjectPopup; + window.dismissAddAnotherPopup = dismissAddRelatedObjectPopup; + + window.addEventListener('unload', function(evt) { + window.dismissChildPopups(); + }); + + $(document).ready(function() { + setPopupIndex(); + $("a[data-popup-opener]").on('click', function(event) { + event.preventDefault(); + opener.dismissRelatedLookupPopup(window, $(this).data("popup-opener")); + }); + $('body').on('click', '.related-widget-wrapper-link[data-popup="yes"]', function(e) { + e.preventDefault(); + if (this.href) { + const event = $.Event('django:show-related', {href: this.href}); + $(this).trigger(event); + if (!event.isDefaultPrevented()) { + showRelatedObjectPopup(this); + } + } + }); + $('body').on('change', '.related-widget-wrapper select', function(e) { + const event = $.Event('django:update-related'); + $(this).trigger(event); + if (!event.isDefaultPrevented()) { + updateRelatedObjectLinks(this); + } + }); + $('.related-widget-wrapper select').trigger('change'); + $('body').on('click', '.related-lookup', function(e) { + e.preventDefault(); + const event = $.Event('django:lookup-related'); + $(this).trigger(event); + if (!event.isDefaultPrevented()) { + showRelatedObjectLookupPopup(this); + } + }); + }); +} diff --git a/y/static_root/admin/js/autocomplete.js b/y/static_root/admin/js/autocomplete.js new file mode 100644 index 0000000000000000000000000000000000000000..d3daeab8909597077addecf34ab05800705f77c8 --- /dev/null +++ b/y/static_root/admin/js/autocomplete.js @@ -0,0 +1,33 @@ +'use strict'; +{ + const $ = django.jQuery; + + $.fn.djangoAdminSelect2 = function() { + $.each(this, function(i, element) { + $(element).select2({ + ajax: { + data: (params) => { + return { + term: params.term, + page: params.page, + app_label: element.dataset.appLabel, + model_name: element.dataset.modelName, + field_name: element.dataset.fieldName + }; + } + } + }); + }); + return this; + }; + + $(function() { + // Initialize all autocomplete widgets except the one in the template + // form used when a new formset is added. + $('.admin-autocomplete').not('[name*=__prefix__]').djangoAdminSelect2(); + }); + + document.addEventListener('formset:added', (event) => { + $(event.target).find('.admin-autocomplete').djangoAdminSelect2(); + }); +} diff --git a/y/static_root/admin/js/calendar.js b/y/static_root/admin/js/calendar.js new file mode 100644 index 0000000000000000000000000000000000000000..a62d10a75980b7a73e79542b0da2b6f3c66ea829 --- /dev/null +++ b/y/static_root/admin/js/calendar.js @@ -0,0 +1,221 @@ +/*global gettext, pgettext, get_format, quickElement, removeChildren*/ +/* +calendar.js - Calendar functions by Adrian Holovaty +depends on core.js for utility functions like removeChildren or quickElement +*/ +'use strict'; +{ + // CalendarNamespace -- Provides a collection of HTML calendar-related helper functions + const CalendarNamespace = { + monthsOfYear: [ + gettext('January'), + gettext('February'), + gettext('March'), + gettext('April'), + gettext('May'), + gettext('June'), + gettext('July'), + gettext('August'), + gettext('September'), + gettext('October'), + gettext('November'), + gettext('December') + ], + monthsOfYearAbbrev: [ + pgettext('abbrev. month January', 'Jan'), + pgettext('abbrev. month February', 'Feb'), + pgettext('abbrev. month March', 'Mar'), + pgettext('abbrev. month April', 'Apr'), + pgettext('abbrev. month May', 'May'), + pgettext('abbrev. month June', 'Jun'), + pgettext('abbrev. month July', 'Jul'), + pgettext('abbrev. month August', 'Aug'), + pgettext('abbrev. month September', 'Sep'), + pgettext('abbrev. month October', 'Oct'), + pgettext('abbrev. month November', 'Nov'), + pgettext('abbrev. month December', 'Dec') + ], + daysOfWeek: [ + pgettext('one letter Sunday', 'S'), + pgettext('one letter Monday', 'M'), + pgettext('one letter Tuesday', 'T'), + pgettext('one letter Wednesday', 'W'), + pgettext('one letter Thursday', 'T'), + pgettext('one letter Friday', 'F'), + pgettext('one letter Saturday', 'S') + ], + firstDayOfWeek: parseInt(get_format('FIRST_DAY_OF_WEEK')), + isLeapYear: function(year) { + return (((year % 4) === 0) && ((year % 100) !== 0 ) || ((year % 400) === 0)); + }, + getDaysInMonth: function(month, year) { + let days; + if (month === 1 || month === 3 || month === 5 || month === 7 || month === 8 || month === 10 || month === 12) { + days = 31; + } + else if (month === 4 || month === 6 || month === 9 || month === 11) { + days = 30; + } + else if (month === 2 && CalendarNamespace.isLeapYear(year)) { + days = 29; + } + else { + days = 28; + } + return days; + }, + draw: function(month, year, div_id, callback, selected) { // month = 1-12, year = 1-9999 + const today = new Date(); + const todayDay = today.getDate(); + const todayMonth = today.getMonth() + 1; + const todayYear = today.getFullYear(); + let todayClass = ''; + + // Use UTC functions here because the date field does not contain time + // and using the UTC function variants prevent the local time offset + // from altering the date, specifically the day field. For example: + // + // ``` + // var x = new Date('2013-10-02'); + // var day = x.getDate(); + // ``` + // + // The day variable above will be 1 instead of 2 in, say, US Pacific time + // zone. + let isSelectedMonth = false; + if (typeof selected !== 'undefined') { + isSelectedMonth = (selected.getUTCFullYear() === year && (selected.getUTCMonth() + 1) === month); + } + + month = parseInt(month); + year = parseInt(year); + const calDiv = document.getElementById(div_id); + removeChildren(calDiv); + const calTable = document.createElement('table'); + quickElement('caption', calTable, CalendarNamespace.monthsOfYear[month - 1] + ' ' + year); + const tableBody = quickElement('tbody', calTable); + + // Draw days-of-week header + let tableRow = quickElement('tr', tableBody); + for (let i = 0; i < 7; i++) { + quickElement('th', tableRow, CalendarNamespace.daysOfWeek[(i + CalendarNamespace.firstDayOfWeek) % 7]); + } + + const startingPos = new Date(year, month - 1, 1 - CalendarNamespace.firstDayOfWeek).getDay(); + const days = CalendarNamespace.getDaysInMonth(month, year); + + let nonDayCell; + + // Draw blanks before first of month + tableRow = quickElement('tr', tableBody); + for (let i = 0; i < startingPos; i++) { + nonDayCell = quickElement('td', tableRow, ' '); + nonDayCell.className = "nonday"; + } + + function calendarMonth(y, m) { + function onClick(e) { + e.preventDefault(); + callback(y, m, this.textContent); + } + return onClick; + } + + // Draw days of month + let currentDay = 1; + for (let i = startingPos; currentDay <= days; i++) { + if (i % 7 === 0 && currentDay !== 1) { + tableRow = quickElement('tr', tableBody); + } + if ((currentDay === todayDay) && (month === todayMonth) && (year === todayYear)) { + todayClass = 'today'; + } else { + todayClass = ''; + } + + // use UTC function; see above for explanation. + if (isSelectedMonth && currentDay === selected.getUTCDate()) { + if (todayClass !== '') { + todayClass += " "; + } + todayClass += "selected"; + } + + const cell = quickElement('td', tableRow, '', 'class', todayClass); + const link = quickElement('a', cell, currentDay, 'href', '#'); + link.addEventListener('click', calendarMonth(year, month)); + currentDay++; + } + + // Draw blanks after end of month (optional, but makes for valid code) + while (tableRow.childNodes.length < 7) { + nonDayCell = quickElement('td', tableRow, ' '); + nonDayCell.className = "nonday"; + } + + calDiv.appendChild(calTable); + } + }; + + // Calendar -- A calendar instance + function Calendar(div_id, callback, selected) { + // div_id (string) is the ID of the element in which the calendar will + // be displayed + // callback (string) is the name of a JavaScript function that will be + // called with the parameters (year, month, day) when a day in the + // calendar is clicked + this.div_id = div_id; + this.callback = callback; + this.today = new Date(); + this.currentMonth = this.today.getMonth() + 1; + this.currentYear = this.today.getFullYear(); + if (typeof selected !== 'undefined') { + this.selected = selected; + } + } + Calendar.prototype = { + drawCurrent: function() { + CalendarNamespace.draw(this.currentMonth, this.currentYear, this.div_id, this.callback, this.selected); + }, + drawDate: function(month, year, selected) { + this.currentMonth = month; + this.currentYear = year; + + if(selected) { + this.selected = selected; + } + + this.drawCurrent(); + }, + drawPreviousMonth: function() { + if (this.currentMonth === 1) { + this.currentMonth = 12; + this.currentYear--; + } + else { + this.currentMonth--; + } + this.drawCurrent(); + }, + drawNextMonth: function() { + if (this.currentMonth === 12) { + this.currentMonth = 1; + this.currentYear++; + } + else { + this.currentMonth++; + } + this.drawCurrent(); + }, + drawPreviousYear: function() { + this.currentYear--; + this.drawCurrent(); + }, + drawNextYear: function() { + this.currentYear++; + this.drawCurrent(); + } + }; + window.Calendar = Calendar; + window.CalendarNamespace = CalendarNamespace; +} diff --git a/y/static_root/admin/js/cancel.js b/y/static_root/admin/js/cancel.js new file mode 100644 index 0000000000000000000000000000000000000000..3069c6f27bfdec0b246d21311f50951e5ed6c356 --- /dev/null +++ b/y/static_root/admin/js/cancel.js @@ -0,0 +1,29 @@ +'use strict'; +{ + // Call function fn when the DOM is loaded and ready. If it is already + // loaded, call the function now. + // http://youmightnotneedjquery.com/#ready + function ready(fn) { + if (document.readyState !== 'loading') { + fn(); + } else { + document.addEventListener('DOMContentLoaded', fn); + } + } + + ready(function() { + function handleClick(event) { + event.preventDefault(); + const params = new URLSearchParams(window.location.search); + if (params.has('_popup')) { + window.close(); // Close the popup. + } else { + window.history.back(); // Otherwise, go back. + } + } + + document.querySelectorAll('.cancel-link').forEach(function(el) { + el.addEventListener('click', handleClick); + }); + }); +} diff --git a/y/static_root/admin/js/change_form.js b/y/static_root/admin/js/change_form.js new file mode 100644 index 0000000000000000000000000000000000000000..96a4c62ef4c353109f22c5d4c7bf7827fe74597b --- /dev/null +++ b/y/static_root/admin/js/change_form.js @@ -0,0 +1,16 @@ +'use strict'; +{ + const inputTags = ['BUTTON', 'INPUT', 'SELECT', 'TEXTAREA']; + const modelName = document.getElementById('django-admin-form-add-constants').dataset.modelName; + if (modelName) { + const form = document.getElementById(modelName + '_form'); + for (const element of form.elements) { + // HTMLElement.offsetParent returns null when the element is not + // rendered. + if (inputTags.includes(element.tagName) && !element.disabled && element.offsetParent) { + element.focus(); + break; + } + } + } +} diff --git a/y/static_root/admin/js/collapse.js b/y/static_root/admin/js/collapse.js new file mode 100644 index 0000000000000000000000000000000000000000..c6c7b0f68a2d96cbbcbe783498dd9b2bb5e7e064 --- /dev/null +++ b/y/static_root/admin/js/collapse.js @@ -0,0 +1,43 @@ +/*global gettext*/ +'use strict'; +{ + window.addEventListener('load', function() { + // Add anchor tag for Show/Hide link + const fieldsets = document.querySelectorAll('fieldset.collapse'); + for (const [i, elem] of fieldsets.entries()) { + // Don't hide if fields in this fieldset have errors + if (elem.querySelectorAll('div.errors, ul.errorlist').length === 0) { + elem.classList.add('collapsed'); + const h2 = elem.querySelector('h2'); + const link = document.createElement('a'); + link.id = 'fieldsetcollapser' + i; + link.className = 'collapse-toggle'; + link.href = '#'; + link.textContent = gettext('Show'); + h2.appendChild(document.createTextNode(' (')); + h2.appendChild(link); + h2.appendChild(document.createTextNode(')')); + } + } + // Add toggle to hide/show anchor tag + const toggleFunc = function(ev) { + if (ev.target.matches('.collapse-toggle')) { + ev.preventDefault(); + ev.stopPropagation(); + const fieldset = ev.target.closest('fieldset'); + if (fieldset.classList.contains('collapsed')) { + // Show + ev.target.textContent = gettext('Hide'); + fieldset.classList.remove('collapsed'); + } else { + // Hide + ev.target.textContent = gettext('Show'); + fieldset.classList.add('collapsed'); + } + } + }; + document.querySelectorAll('fieldset.module').forEach(function(el) { + el.addEventListener('click', toggleFunc); + }); + }); +} diff --git a/y/static_root/admin/js/core.js b/y/static_root/admin/js/core.js new file mode 100644 index 0000000000000000000000000000000000000000..0344a13f42af20cc292f40ccc2e23a5d8e1115dc --- /dev/null +++ b/y/static_root/admin/js/core.js @@ -0,0 +1,170 @@ +// Core JavaScript helper functions +'use strict'; + +// quickElement(tagType, parentReference [, textInChildNode, attribute, attributeValue ...]); +function quickElement() { + const obj = document.createElement(arguments[0]); + if (arguments[2]) { + const textNode = document.createTextNode(arguments[2]); + obj.appendChild(textNode); + } + const len = arguments.length; + for (let i = 3; i < len; i += 2) { + obj.setAttribute(arguments[i], arguments[i + 1]); + } + arguments[1].appendChild(obj); + return obj; +} + +// "a" is reference to an object +function removeChildren(a) { + while (a.hasChildNodes()) { + a.removeChild(a.lastChild); + } +} + +// ---------------------------------------------------------------------------- +// Find-position functions by PPK +// See https://www.quirksmode.org/js/findpos.html +// ---------------------------------------------------------------------------- +function findPosX(obj) { + let curleft = 0; + if (obj.offsetParent) { + while (obj.offsetParent) { + curleft += obj.offsetLeft - obj.scrollLeft; + obj = obj.offsetParent; + } + } else if (obj.x) { + curleft += obj.x; + } + return curleft; +} + +function findPosY(obj) { + let curtop = 0; + if (obj.offsetParent) { + while (obj.offsetParent) { + curtop += obj.offsetTop - obj.scrollTop; + obj = obj.offsetParent; + } + } else if (obj.y) { + curtop += obj.y; + } + return curtop; +} + +//----------------------------------------------------------------------------- +// Date object extensions +// ---------------------------------------------------------------------------- +{ + Date.prototype.getTwelveHours = function() { + return this.getHours() % 12 || 12; + }; + + Date.prototype.getTwoDigitMonth = function() { + return (this.getMonth() < 9) ? '0' + (this.getMonth() + 1) : (this.getMonth() + 1); + }; + + Date.prototype.getTwoDigitDate = function() { + return (this.getDate() < 10) ? '0' + this.getDate() : this.getDate(); + }; + + Date.prototype.getTwoDigitTwelveHour = function() { + return (this.getTwelveHours() < 10) ? '0' + this.getTwelveHours() : this.getTwelveHours(); + }; + + Date.prototype.getTwoDigitHour = function() { + return (this.getHours() < 10) ? '0' + this.getHours() : this.getHours(); + }; + + Date.prototype.getTwoDigitMinute = function() { + return (this.getMinutes() < 10) ? '0' + this.getMinutes() : this.getMinutes(); + }; + + Date.prototype.getTwoDigitSecond = function() { + return (this.getSeconds() < 10) ? '0' + this.getSeconds() : this.getSeconds(); + }; + + Date.prototype.getAbbrevMonthName = function() { + return typeof window.CalendarNamespace === "undefined" + ? this.getTwoDigitMonth() + : window.CalendarNamespace.monthsOfYearAbbrev[this.getMonth()]; + }; + + Date.prototype.getFullMonthName = function() { + return typeof window.CalendarNamespace === "undefined" + ? this.getTwoDigitMonth() + : window.CalendarNamespace.monthsOfYear[this.getMonth()]; + }; + + Date.prototype.strftime = function(format) { + const fields = { + b: this.getAbbrevMonthName(), + B: this.getFullMonthName(), + c: this.toString(), + d: this.getTwoDigitDate(), + H: this.getTwoDigitHour(), + I: this.getTwoDigitTwelveHour(), + m: this.getTwoDigitMonth(), + M: this.getTwoDigitMinute(), + p: (this.getHours() >= 12) ? 'PM' : 'AM', + S: this.getTwoDigitSecond(), + w: '0' + this.getDay(), + x: this.toLocaleDateString(), + X: this.toLocaleTimeString(), + y: ('' + this.getFullYear()).substr(2, 4), + Y: '' + this.getFullYear(), + '%': '%' + }; + let result = '', i = 0; + while (i < format.length) { + if (format.charAt(i) === '%') { + result += fields[format.charAt(i + 1)]; + ++i; + } + else { + result += format.charAt(i); + } + ++i; + } + return result; + }; + + // ---------------------------------------------------------------------------- + // String object extensions + // ---------------------------------------------------------------------------- + String.prototype.strptime = function(format) { + const split_format = format.split(/[.\-/]/); + const date = this.split(/[.\-/]/); + let i = 0; + let day, month, year; + while (i < split_format.length) { + switch (split_format[i]) { + case "%d": + day = date[i]; + break; + case "%m": + month = date[i] - 1; + break; + case "%Y": + year = date[i]; + break; + case "%y": + // A %y value in the range of [00, 68] is in the current + // century, while [69, 99] is in the previous century, + // according to the Open Group Specification. + if (parseInt(date[i], 10) >= 69) { + year = date[i]; + } else { + year = (new Date(Date.UTC(date[i], 0))).getUTCFullYear() + 100; + } + break; + } + ++i; + } + // Create Date object from UTC since the parsed value is supposed to be + // in UTC, not local time. Also, the calendar uses UTC functions for + // date extraction. + return new Date(Date.UTC(year, month, day)); + }; +} diff --git a/y/static_root/admin/js/filters.js b/y/static_root/admin/js/filters.js new file mode 100644 index 0000000000000000000000000000000000000000..f5536ebc2d3b10ded6750bd5d9eba59566733ea7 --- /dev/null +++ b/y/static_root/admin/js/filters.js @@ -0,0 +1,30 @@ +/** + * Persist changelist filters state (collapsed/expanded). + */ +'use strict'; +{ + // Init filters. + let filters = JSON.parse(sessionStorage.getItem('django.admin.filtersState')); + + if (!filters) { + filters = {}; + } + + Object.entries(filters).forEach(([key, value]) => { + const detailElement = document.querySelector(`[data-filter-title='${CSS.escape(key)}']`); + + // Check if the filter is present, it could be from other view. + if (detailElement) { + value ? detailElement.setAttribute('open', '') : detailElement.removeAttribute('open'); + } + }); + + // Save filter state when clicks. + const details = document.querySelectorAll('details'); + details.forEach(detail => { + detail.addEventListener('toggle', event => { + filters[`${event.target.dataset.filterTitle}`] = detail.open; + sessionStorage.setItem('django.admin.filtersState', JSON.stringify(filters)); + }); + }); +} diff --git a/y/static_root/admin/js/inlines.js b/y/static_root/admin/js/inlines.js new file mode 100644 index 0000000000000000000000000000000000000000..e9a1dfe12299e9d7e436e832c0c393e05b311c73 --- /dev/null +++ b/y/static_root/admin/js/inlines.js @@ -0,0 +1,359 @@ +/*global DateTimeShortcuts, SelectFilter*/ +/** + * Django admin inlines + * + * Based on jQuery Formset 1.1 + * @author Stanislaus Madueke (stan DOT madueke AT gmail DOT com) + * @requires jQuery 1.2.6 or later + * + * Copyright (c) 2009, Stanislaus Madueke + * All rights reserved. + * + * Spiced up with Code from Zain Memon's GSoC project 2009 + * and modified for Django by Jannis Leidel, Travis Swicegood and Julien Phalip. + * + * Licensed under the New BSD License + * See: https://opensource.org/licenses/bsd-license.php + */ +'use strict'; +{ + const $ = django.jQuery; + $.fn.formset = function(opts) { + const options = $.extend({}, $.fn.formset.defaults, opts); + const $this = $(this); + const $parent = $this.parent(); + const updateElementIndex = function(el, prefix, ndx) { + const id_regex = new RegExp("(" + prefix + "-(\\d+|__prefix__))"); + const replacement = prefix + "-" + ndx; + if ($(el).prop("for")) { + $(el).prop("for", $(el).prop("for").replace(id_regex, replacement)); + } + if (el.id) { + el.id = el.id.replace(id_regex, replacement); + } + if (el.name) { + el.name = el.name.replace(id_regex, replacement); + } + }; + const totalForms = $("#id_" + options.prefix + "-TOTAL_FORMS").prop("autocomplete", "off"); + let nextIndex = parseInt(totalForms.val(), 10); + const maxForms = $("#id_" + options.prefix + "-MAX_NUM_FORMS").prop("autocomplete", "off"); + const minForms = $("#id_" + options.prefix + "-MIN_NUM_FORMS").prop("autocomplete", "off"); + let addButton; + + /** + * The "Add another MyModel" button below the inline forms. + */ + const addInlineAddButton = function() { + if (addButton === null) { + if ($this.prop("tagName") === "TR") { + // If forms are laid out as table rows, insert the + // "add" button in a new table row: + const numCols = $this.eq(-1).children().length; + $parent.append('' + options.addText + ""); + addButton = $parent.find("tr:last a"); + } else { + // Otherwise, insert it immediately after the last form: + $this.filter(":last").after('"); + addButton = $this.filter(":last").next().find("a"); + } + } + addButton.on('click', addInlineClickHandler); + }; + + const addInlineClickHandler = function(e) { + e.preventDefault(); + const template = $("#" + options.prefix + "-empty"); + const row = template.clone(true); + row.removeClass(options.emptyCssClass) + .addClass(options.formCssClass) + .attr("id", options.prefix + "-" + nextIndex); + addInlineDeleteButton(row); + row.find("*").each(function() { + updateElementIndex(this, options.prefix, totalForms.val()); + }); + // Insert the new form when it has been fully edited. + row.insertBefore($(template)); + // Update number of total forms. + $(totalForms).val(parseInt(totalForms.val(), 10) + 1); + nextIndex += 1; + // Hide the add button if there's a limit and it's been reached. + if ((maxForms.val() !== '') && (maxForms.val() - totalForms.val()) <= 0) { + addButton.parent().hide(); + } + // Show the remove buttons if there are more than min_num. + toggleDeleteButtonVisibility(row.closest('.inline-group')); + + // Pass the new form to the post-add callback, if provided. + if (options.added) { + options.added(row); + } + row.get(0).dispatchEvent(new CustomEvent("formset:added", { + bubbles: true, + detail: { + formsetName: options.prefix + } + })); + }; + + /** + * The "X" button that is part of every unsaved inline. + * (When saved, it is replaced with a "Delete" checkbox.) + */ + const addInlineDeleteButton = function(row) { + if (row.is("tr")) { + // If the forms are laid out in table rows, insert + // the remove button into the last table cell: + row.children(":last").append('"); + } else if (row.is("ul") || row.is("ol")) { + // If they're laid out as an ordered/unordered list, + // insert an
  • after the last list item: + row.append('
  • ' + options.deleteText + "
  • "); + } else { + // Otherwise, just insert the remove button as the + // last child element of the form's container: + row.children(":first").append('' + options.deleteText + ""); + } + // Add delete handler for each row. + row.find("a." + options.deleteCssClass).on('click', inlineDeleteHandler.bind(this)); + }; + + const inlineDeleteHandler = function(e1) { + e1.preventDefault(); + const deleteButton = $(e1.target); + const row = deleteButton.closest('.' + options.formCssClass); + const inlineGroup = row.closest('.inline-group'); + // Remove the parent form containing this button, + // and also remove the relevant row with non-field errors: + const prevRow = row.prev(); + if (prevRow.length && prevRow.hasClass('row-form-errors')) { + prevRow.remove(); + } + row.remove(); + nextIndex -= 1; + // Pass the deleted form to the post-delete callback, if provided. + if (options.removed) { + options.removed(row); + } + document.dispatchEvent(new CustomEvent("formset:removed", { + detail: { + formsetName: options.prefix + } + })); + // Update the TOTAL_FORMS form count. + const forms = $("." + options.formCssClass); + $("#id_" + options.prefix + "-TOTAL_FORMS").val(forms.length); + // Show add button again once below maximum number. + if ((maxForms.val() === '') || (maxForms.val() - forms.length) > 0) { + addButton.parent().show(); + } + // Hide the remove buttons if at min_num. + toggleDeleteButtonVisibility(inlineGroup); + // Also, update names and ids for all remaining form controls so + // they remain in sequence: + let i, formCount; + const updateElementCallback = function() { + updateElementIndex(this, options.prefix, i); + }; + for (i = 0, formCount = forms.length; i < formCount; i++) { + updateElementIndex($(forms).get(i), options.prefix, i); + $(forms.get(i)).find("*").each(updateElementCallback); + } + }; + + const toggleDeleteButtonVisibility = function(inlineGroup) { + if ((minForms.val() !== '') && (minForms.val() - totalForms.val()) >= 0) { + inlineGroup.find('.inline-deletelink').hide(); + } else { + inlineGroup.find('.inline-deletelink').show(); + } + }; + + $this.each(function(i) { + $(this).not("." + options.emptyCssClass).addClass(options.formCssClass); + }); + + // Create the delete buttons for all unsaved inlines: + $this.filter('.' + options.formCssClass + ':not(.has_original):not(.' + options.emptyCssClass + ')').each(function() { + addInlineDeleteButton($(this)); + }); + toggleDeleteButtonVisibility($this); + + // Create the add button, initially hidden. + addButton = options.addButton; + addInlineAddButton(); + + // Show the add button if allowed to add more items. + // Note that max_num = None translates to a blank string. + const showAddButton = maxForms.val() === '' || (maxForms.val() - totalForms.val()) > 0; + if ($this.length && showAddButton) { + addButton.parent().show(); + } else { + addButton.parent().hide(); + } + + return this; + }; + + /* Setup plugin defaults */ + $.fn.formset.defaults = { + prefix: "form", // The form prefix for your django formset + addText: "add another", // Text for the add link + deleteText: "remove", // Text for the delete link + addCssClass: "add-row", // CSS class applied to the add link + deleteCssClass: "delete-row", // CSS class applied to the delete link + emptyCssClass: "empty-row", // CSS class applied to the empty row + formCssClass: "dynamic-form", // CSS class applied to each form in a formset + added: null, // Function called each time a new form is added + removed: null, // Function called each time a form is deleted + addButton: null // Existing add button to use + }; + + + // Tabular inlines --------------------------------------------------------- + $.fn.tabularFormset = function(selector, options) { + const $rows = $(this); + + const reinitDateTimeShortCuts = function() { + // Reinitialize the calendar and clock widgets by force + if (typeof DateTimeShortcuts !== "undefined") { + $(".datetimeshortcuts").remove(); + DateTimeShortcuts.init(); + } + }; + + const updateSelectFilter = function() { + // If any SelectFilter widgets are a part of the new form, + // instantiate a new SelectFilter instance for it. + if (typeof SelectFilter !== 'undefined') { + $('.selectfilter').each(function(index, value) { + SelectFilter.init(value.id, this.dataset.fieldName, false); + }); + $('.selectfilterstacked').each(function(index, value) { + SelectFilter.init(value.id, this.dataset.fieldName, true); + }); + } + }; + + const initPrepopulatedFields = function(row) { + row.find('.prepopulated_field').each(function() { + const field = $(this), + input = field.find('input, select, textarea'), + dependency_list = input.data('dependency_list') || [], + dependencies = []; + $.each(dependency_list, function(i, field_name) { + dependencies.push('#' + row.find('.field-' + field_name).find('input, select, textarea').attr('id')); + }); + if (dependencies.length) { + input.prepopulate(dependencies, input.attr('maxlength')); + } + }); + }; + + $rows.formset({ + prefix: options.prefix, + addText: options.addText, + formCssClass: "dynamic-" + options.prefix, + deleteCssClass: "inline-deletelink", + deleteText: options.deleteText, + emptyCssClass: "empty-form", + added: function(row) { + initPrepopulatedFields(row); + reinitDateTimeShortCuts(); + updateSelectFilter(); + }, + addButton: options.addButton + }); + + return $rows; + }; + + // Stacked inlines --------------------------------------------------------- + $.fn.stackedFormset = function(selector, options) { + const $rows = $(this); + const updateInlineLabel = function(row) { + $(selector).find(".inline_label").each(function(i) { + const count = i + 1; + $(this).html($(this).html().replace(/(#\d+)/g, "#" + count)); + }); + }; + + const reinitDateTimeShortCuts = function() { + // Reinitialize the calendar and clock widgets by force, yuck. + if (typeof DateTimeShortcuts !== "undefined") { + $(".datetimeshortcuts").remove(); + DateTimeShortcuts.init(); + } + }; + + const updateSelectFilter = function() { + // If any SelectFilter widgets were added, instantiate a new instance. + if (typeof SelectFilter !== "undefined") { + $(".selectfilter").each(function(index, value) { + SelectFilter.init(value.id, this.dataset.fieldName, false); + }); + $(".selectfilterstacked").each(function(index, value) { + SelectFilter.init(value.id, this.dataset.fieldName, true); + }); + } + }; + + const initPrepopulatedFields = function(row) { + row.find('.prepopulated_field').each(function() { + const field = $(this), + input = field.find('input, select, textarea'), + dependency_list = input.data('dependency_list') || [], + dependencies = []; + $.each(dependency_list, function(i, field_name) { + // Dependency in a fieldset. + let field_element = row.find('.form-row .field-' + field_name); + // Dependency without a fieldset. + if (!field_element.length) { + field_element = row.find('.form-row.field-' + field_name); + } + dependencies.push('#' + field_element.find('input, select, textarea').attr('id')); + }); + if (dependencies.length) { + input.prepopulate(dependencies, input.attr('maxlength')); + } + }); + }; + + $rows.formset({ + prefix: options.prefix, + addText: options.addText, + formCssClass: "dynamic-" + options.prefix, + deleteCssClass: "inline-deletelink", + deleteText: options.deleteText, + emptyCssClass: "empty-form", + removed: updateInlineLabel, + added: function(row) { + initPrepopulatedFields(row); + reinitDateTimeShortCuts(); + updateSelectFilter(); + updateInlineLabel(row); + }, + addButton: options.addButton + }); + + return $rows; + }; + + $(document).ready(function() { + $(".js-inline-admin-formset").each(function() { + const data = $(this).data(), + inlineOptions = data.inlineFormset; + let selector; + switch(data.inlineType) { + case "stacked": + selector = inlineOptions.name + "-group .inline-related"; + $(selector).stackedFormset(selector, inlineOptions.options); + break; + case "tabular": + selector = inlineOptions.name + "-group .tabular.inline-related tbody:first > tr.form-row"; + $(selector).tabularFormset(selector, inlineOptions.options); + break; + } + }); + }); +} diff --git a/y/static_root/admin/js/jquery.init.js b/y/static_root/admin/js/jquery.init.js new file mode 100644 index 0000000000000000000000000000000000000000..f40b27f47da411062930b3758fc7b242e932f91e --- /dev/null +++ b/y/static_root/admin/js/jquery.init.js @@ -0,0 +1,8 @@ +/*global jQuery:false*/ +'use strict'; +/* Puts the included jQuery into our own namespace using noConflict and passing + * it 'true'. This ensures that the included jQuery doesn't pollute the global + * namespace (i.e. this preserves pre-existing values for both window.$ and + * window.jQuery). + */ +window.django = {jQuery: jQuery.noConflict(true)}; diff --git a/y/static_root/admin/js/nav_sidebar.js b/y/static_root/admin/js/nav_sidebar.js new file mode 100644 index 0000000000000000000000000000000000000000..7e735db15cf33805b1ab498b4476f218d4f690a5 --- /dev/null +++ b/y/static_root/admin/js/nav_sidebar.js @@ -0,0 +1,79 @@ +'use strict'; +{ + const toggleNavSidebar = document.getElementById('toggle-nav-sidebar'); + if (toggleNavSidebar !== null) { + const navSidebar = document.getElementById('nav-sidebar'); + const main = document.getElementById('main'); + let navSidebarIsOpen = localStorage.getItem('django.admin.navSidebarIsOpen'); + if (navSidebarIsOpen === null) { + navSidebarIsOpen = 'true'; + } + main.classList.toggle('shifted', navSidebarIsOpen === 'true'); + navSidebar.setAttribute('aria-expanded', navSidebarIsOpen); + + toggleNavSidebar.addEventListener('click', function() { + if (navSidebarIsOpen === 'true') { + navSidebarIsOpen = 'false'; + } else { + navSidebarIsOpen = 'true'; + } + localStorage.setItem('django.admin.navSidebarIsOpen', navSidebarIsOpen); + main.classList.toggle('shifted'); + navSidebar.setAttribute('aria-expanded', navSidebarIsOpen); + }); + } + + function initSidebarQuickFilter() { + const options = []; + const navSidebar = document.getElementById('nav-sidebar'); + if (!navSidebar) { + return; + } + navSidebar.querySelectorAll('th[scope=row] a').forEach((container) => { + options.push({title: container.innerHTML, node: container}); + }); + + function checkValue(event) { + let filterValue = event.target.value; + if (filterValue) { + filterValue = filterValue.toLowerCase(); + } + if (event.key === 'Escape') { + filterValue = ''; + event.target.value = ''; // clear input + } + let matches = false; + for (const o of options) { + let displayValue = ''; + if (filterValue) { + if (o.title.toLowerCase().indexOf(filterValue) === -1) { + displayValue = 'none'; + } else { + matches = true; + } + } + // show/hide parent + o.node.parentNode.parentNode.style.display = displayValue; + } + if (!filterValue || matches) { + event.target.classList.remove('no-results'); + } else { + event.target.classList.add('no-results'); + } + sessionStorage.setItem('django.admin.navSidebarFilterValue', filterValue); + } + + const nav = document.getElementById('nav-filter'); + nav.addEventListener('change', checkValue, false); + nav.addEventListener('input', checkValue, false); + nav.addEventListener('keyup', checkValue, false); + + const storedValue = sessionStorage.getItem('django.admin.navSidebarFilterValue'); + if (storedValue) { + nav.value = storedValue; + checkValue({target: nav, key: ''}); + } + } + window.initSidebarQuickFilter = initSidebarQuickFilter; + initSidebarQuickFilter(); +} diff --git a/y/static_root/admin/js/popup_response.js b/y/static_root/admin/js/popup_response.js new file mode 100644 index 0000000000000000000000000000000000000000..2b1d3dd31d7acba2456e79bd3430c7e075883676 --- /dev/null +++ b/y/static_root/admin/js/popup_response.js @@ -0,0 +1,16 @@ +/*global opener */ +'use strict'; +{ + const initData = JSON.parse(document.getElementById('django-admin-popup-response-constants').dataset.popupResponse); + switch(initData.action) { + case 'change': + opener.dismissChangeRelatedObjectPopup(window, initData.value, initData.obj, initData.new_value); + break; + case 'delete': + opener.dismissDeleteRelatedObjectPopup(window, initData.value); + break; + default: + opener.dismissAddRelatedObjectPopup(window, initData.value, initData.obj); + break; + } +} diff --git a/y/static_root/admin/js/prepopulate.js b/y/static_root/admin/js/prepopulate.js new file mode 100644 index 0000000000000000000000000000000000000000..89e95ab44dc74c5be08339a937908a73c15c86ab --- /dev/null +++ b/y/static_root/admin/js/prepopulate.js @@ -0,0 +1,43 @@ +/*global URLify*/ +'use strict'; +{ + const $ = django.jQuery; + $.fn.prepopulate = function(dependencies, maxLength, allowUnicode) { + /* + Depends on urlify.js + Populates a selected field with the values of the dependent fields, + URLifies and shortens the string. + dependencies - array of dependent fields ids + maxLength - maximum length of the URLify'd string + allowUnicode - Unicode support of the URLify'd string + */ + return this.each(function() { + const prepopulatedField = $(this); + + const populate = function() { + // Bail if the field's value has been changed by the user + if (prepopulatedField.data('_changed')) { + return; + } + + const values = []; + $.each(dependencies, function(i, field) { + field = $(field); + if (field.val().length > 0) { + values.push(field.val()); + } + }); + prepopulatedField.val(URLify(values.join(' '), maxLength, allowUnicode)); + }; + + prepopulatedField.data('_changed', false); + prepopulatedField.on('change', function() { + prepopulatedField.data('_changed', true); + }); + + if (!prepopulatedField.val()) { + $(dependencies.join(',')).on('keyup change focus', populate); + } + }); + }; +} diff --git a/y/static_root/admin/js/prepopulate_init.js b/y/static_root/admin/js/prepopulate_init.js new file mode 100644 index 0000000000000000000000000000000000000000..a58841f004129659c58f6cfa9c05174e0e63c63b --- /dev/null +++ b/y/static_root/admin/js/prepopulate_init.js @@ -0,0 +1,15 @@ +'use strict'; +{ + const $ = django.jQuery; + const fields = $('#django-admin-prepopulated-fields-constants').data('prepopulatedFields'); + $.each(fields, function(index, field) { + $( + '.empty-form .form-row .field-' + field.name + + ', .empty-form.form-row .field-' + field.name + + ', .empty-form .form-row.field-' + field.name + ).addClass('prepopulated_field'); + $(field.id).data('dependency_list', field.dependency_list).prepopulate( + field.dependency_ids, field.maxLength, field.allowUnicode + ); + }); +} diff --git a/y/static_root/admin/js/theme.js b/y/static_root/admin/js/theme.js new file mode 100644 index 0000000000000000000000000000000000000000..794cd15f701aed5214280a6404e9beb21d751a6c --- /dev/null +++ b/y/static_root/admin/js/theme.js @@ -0,0 +1,56 @@ +'use strict'; +{ + window.addEventListener('load', function(e) { + + function setTheme(mode) { + if (mode !== "light" && mode !== "dark" && mode !== "auto") { + console.error(`Got invalid theme mode: ${mode}. Resetting to auto.`); + mode = "auto"; + } + document.documentElement.dataset.theme = mode; + localStorage.setItem("theme", mode); + } + + function cycleTheme() { + const currentTheme = localStorage.getItem("theme") || "auto"; + const prefersDark = window.matchMedia("(prefers-color-scheme: dark)").matches; + + if (prefersDark) { + // Auto (dark) -> Light -> Dark + if (currentTheme === "auto") { + setTheme("light"); + } else if (currentTheme === "light") { + setTheme("dark"); + } else { + setTheme("auto"); + } + } else { + // Auto (light) -> Dark -> Light + if (currentTheme === "auto") { + setTheme("dark"); + } else if (currentTheme === "dark") { + setTheme("light"); + } else { + setTheme("auto"); + } + } + } + + function initTheme() { + // set theme defined in localStorage if there is one, or fallback to auto mode + const currentTheme = localStorage.getItem("theme"); + currentTheme ? setTheme(currentTheme) : setTheme("auto"); + } + + function setupTheme() { + // Attach event handlers for toggling themes + const buttons = document.getElementsByClassName("theme-toggle"); + Array.from(buttons).forEach((btn) => { + btn.addEventListener("click", cycleTheme); + }); + initTheme(); + } + + setupTheme(); + }); +} diff --git a/y/static_root/admin/js/urlify.js b/y/static_root/admin/js/urlify.js new file mode 100644 index 0000000000000000000000000000000000000000..9fc04094964786db564c511b439244ee7015ccea --- /dev/null +++ b/y/static_root/admin/js/urlify.js @@ -0,0 +1,169 @@ +/*global XRegExp*/ +'use strict'; +{ + const LATIN_MAP = { + 'À': 'A', 'Á': 'A', 'Â': 'A', 'Ã': 'A', 'Ä': 'A', 'Å': 'A', 'Æ': 'AE', + 'Ç': 'C', 'È': 'E', 'É': 'E', 'Ê': 'E', 'Ë': 'E', 'Ì': 'I', 'Í': 'I', + 'Î': 'I', 'Ï': 'I', 'Ð': 'D', 'Ñ': 'N', 'Ò': 'O', 'Ó': 'O', 'Ô': 'O', + 'Õ': 'O', 'Ö': 'O', 'Ő': 'O', 'Ø': 'O', 'Ù': 'U', 'Ú': 'U', 'Û': 'U', + 'Ü': 'U', 'Ű': 'U', 'Ý': 'Y', 'Þ': 'TH', 'Ÿ': 'Y', 'ß': 'ss', 'à': 'a', + 'á': 'a', 'â': 'a', 'ã': 'a', 'ä': 'a', 'å': 'a', 'æ': 'ae', 'ç': 'c', + 'è': 'e', 'é': 'e', 'ê': 'e', 'ë': 'e', 'ì': 'i', 'í': 'i', 'î': 'i', + 'ï': 'i', 'ð': 'd', 'ñ': 'n', 'ò': 'o', 'ó': 'o', 'ô': 'o', 'õ': 'o', + 'ö': 'o', 'ő': 'o', 'ø': 'o', 'ù': 'u', 'ú': 'u', 'û': 'u', 'ü': 'u', + 'ű': 'u', 'ý': 'y', 'þ': 'th', 'ÿ': 'y' + }; + const LATIN_SYMBOLS_MAP = { + '©': '(c)' + }; + const GREEK_MAP = { + 'α': 'a', 'β': 'b', 'γ': 'g', 'δ': 'd', 'ε': 'e', 'ζ': 'z', 'η': 'h', + 'θ': '8', 'ι': 'i', 'κ': 'k', 'λ': 'l', 'μ': 'm', 'ν': 'n', 'ξ': '3', + 'ο': 'o', 'π': 'p', 'ρ': 'r', 'σ': 's', 'τ': 't', 'υ': 'y', 'φ': 'f', + 'χ': 'x', 'ψ': 'ps', 'ω': 'w', 'ά': 'a', 'έ': 'e', 'ί': 'i', 'ό': 'o', + 'ύ': 'y', 'ή': 'h', 'ώ': 'w', 'ς': 's', 'ϊ': 'i', 'ΰ': 'y', 'ϋ': 'y', + 'ΐ': 'i', 'Α': 'A', 'Β': 'B', 'Γ': 'G', 'Δ': 'D', 'Ε': 'E', 'Ζ': 'Z', + 'Η': 'H', 'Θ': '8', 'Ι': 'I', 'Κ': 'K', 'Λ': 'L', 'Μ': 'M', 'Ν': 'N', + 'Ξ': '3', 'Ο': 'O', 'Π': 'P', 'Ρ': 'R', 'Σ': 'S', 'Τ': 'T', 'Υ': 'Y', + 'Φ': 'F', 'Χ': 'X', 'Ψ': 'PS', 'Ω': 'W', 'Ά': 'A', 'Έ': 'E', 'Ί': 'I', + 'Ό': 'O', 'Ύ': 'Y', 'Ή': 'H', 'Ώ': 'W', 'Ϊ': 'I', 'Ϋ': 'Y' + }; + const TURKISH_MAP = { + 'ş': 's', 'Ş': 'S', 'ı': 'i', 'İ': 'I', 'ç': 'c', 'Ç': 'C', 'ü': 'u', + 'Ü': 'U', 'ö': 'o', 'Ö': 'O', 'ğ': 'g', 'Ğ': 'G' + }; + const ROMANIAN_MAP = { + 'ă': 'a', 'î': 'i', 'ș': 's', 'ț': 't', 'â': 'a', + 'Ă': 'A', 'Î': 'I', 'Ș': 'S', 'Ț': 'T', 'Â': 'A' + }; + const RUSSIAN_MAP = { + 'а': 'a', 'б': 'b', 'в': 'v', 'г': 'g', 'д': 'd', 'е': 'e', 'ё': 'yo', + 'ж': 'zh', 'з': 'z', 'и': 'i', 'й': 'j', 'к': 'k', 'л': 'l', 'м': 'm', + 'н': 'n', 'о': 'o', 'п': 'p', 'р': 'r', 'с': 's', 'т': 't', 'у': 'u', + 'ф': 'f', 'х': 'h', 'ц': 'c', 'ч': 'ch', 'ш': 'sh', 'щ': 'sh', 'ъ': '', + 'ы': 'y', 'ь': '', 'э': 'e', 'ю': 'yu', 'я': 'ya', + 'А': 'A', 'Б': 'B', 'В': 'V', 'Г': 'G', 'Д': 'D', 'Е': 'E', 'Ё': 'Yo', + 'Ж': 'Zh', 'З': 'Z', 'И': 'I', 'Й': 'J', 'К': 'K', 'Л': 'L', 'М': 'M', + 'Н': 'N', 'О': 'O', 'П': 'P', 'Р': 'R', 'С': 'S', 'Т': 'T', 'У': 'U', + 'Ф': 'F', 'Х': 'H', 'Ц': 'C', 'Ч': 'Ch', 'Ш': 'Sh', 'Щ': 'Sh', 'Ъ': '', + 'Ы': 'Y', 'Ь': '', 'Э': 'E', 'Ю': 'Yu', 'Я': 'Ya' + }; + const UKRAINIAN_MAP = { + 'Є': 'Ye', 'І': 'I', 'Ї': 'Yi', 'Ґ': 'G', 'є': 'ye', 'і': 'i', + 'ї': 'yi', 'ґ': 'g' + }; + const CZECH_MAP = { + 'č': 'c', 'ď': 'd', 'ě': 'e', 'ň': 'n', 'ř': 'r', 'š': 's', 'ť': 't', + 'ů': 'u', 'ž': 'z', 'Č': 'C', 'Ď': 'D', 'Ě': 'E', 'Ň': 'N', 'Ř': 'R', + 'Š': 'S', 'Ť': 'T', 'Ů': 'U', 'Ž': 'Z' + }; + const SLOVAK_MAP = { + 'á': 'a', 'ä': 'a', 'č': 'c', 'ď': 'd', 'é': 'e', 'í': 'i', 'ľ': 'l', + 'ĺ': 'l', 'ň': 'n', 'ó': 'o', 'ô': 'o', 'ŕ': 'r', 'š': 's', 'ť': 't', + 'ú': 'u', 'ý': 'y', 'ž': 'z', + 'Á': 'a', 'Ä': 'A', 'Č': 'C', 'Ď': 'D', 'É': 'E', 'Í': 'I', 'Ľ': 'L', + 'Ĺ': 'L', 'Ň': 'N', 'Ó': 'O', 'Ô': 'O', 'Ŕ': 'R', 'Š': 'S', 'Ť': 'T', + 'Ú': 'U', 'Ý': 'Y', 'Ž': 'Z' + }; + const POLISH_MAP = { + 'ą': 'a', 'ć': 'c', 'ę': 'e', 'ł': 'l', 'ń': 'n', 'ó': 'o', 'ś': 's', + 'ź': 'z', 'ż': 'z', + 'Ą': 'A', 'Ć': 'C', 'Ę': 'E', 'Ł': 'L', 'Ń': 'N', 'Ó': 'O', 'Ś': 'S', + 'Ź': 'Z', 'Ż': 'Z' + }; + const LATVIAN_MAP = { + 'ā': 'a', 'č': 'c', 'ē': 'e', 'ģ': 'g', 'ī': 'i', 'ķ': 'k', 'ļ': 'l', + 'ņ': 'n', 'š': 's', 'ū': 'u', 'ž': 'z', + 'Ā': 'A', 'Č': 'C', 'Ē': 'E', 'Ģ': 'G', 'Ī': 'I', 'Ķ': 'K', 'Ļ': 'L', + 'Ņ': 'N', 'Š': 'S', 'Ū': 'U', 'Ž': 'Z' + }; + const ARABIC_MAP = { + 'أ': 'a', 'ب': 'b', 'ت': 't', 'ث': 'th', 'ج': 'g', 'ح': 'h', 'خ': 'kh', 'د': 'd', + 'ذ': 'th', 'ر': 'r', 'ز': 'z', 'س': 's', 'ش': 'sh', 'ص': 's', 'ض': 'd', 'ط': 't', + 'ظ': 'th', 'ع': 'aa', 'غ': 'gh', 'ف': 'f', 'ق': 'k', 'ك': 'k', 'ل': 'l', 'م': 'm', + 'ن': 'n', 'ه': 'h', 'و': 'o', 'ي': 'y' + }; + const LITHUANIAN_MAP = { + 'ą': 'a', 'č': 'c', 'ę': 'e', 'ė': 'e', 'į': 'i', 'š': 's', 'ų': 'u', + 'ū': 'u', 'ž': 'z', + 'Ą': 'A', 'Č': 'C', 'Ę': 'E', 'Ė': 'E', 'Į': 'I', 'Š': 'S', 'Ų': 'U', + 'Ū': 'U', 'Ž': 'Z' + }; + const SERBIAN_MAP = { + 'ђ': 'dj', 'ј': 'j', 'љ': 'lj', 'њ': 'nj', 'ћ': 'c', 'џ': 'dz', + 'đ': 'dj', 'Ђ': 'Dj', 'Ј': 'j', 'Љ': 'Lj', 'Њ': 'Nj', 'Ћ': 'C', + 'Џ': 'Dz', 'Đ': 'Dj' + }; + const AZERBAIJANI_MAP = { + 'ç': 'c', 'ə': 'e', 'ğ': 'g', 'ı': 'i', 'ö': 'o', 'ş': 's', 'ü': 'u', + 'Ç': 'C', 'Ə': 'E', 'Ğ': 'G', 'İ': 'I', 'Ö': 'O', 'Ş': 'S', 'Ü': 'U' + }; + const GEORGIAN_MAP = { + 'ა': 'a', 'ბ': 'b', 'გ': 'g', 'დ': 'd', 'ე': 'e', 'ვ': 'v', 'ზ': 'z', + 'თ': 't', 'ი': 'i', 'კ': 'k', 'ლ': 'l', 'მ': 'm', 'ნ': 'n', 'ო': 'o', + 'პ': 'p', 'ჟ': 'j', 'რ': 'r', 'ს': 's', 'ტ': 't', 'უ': 'u', 'ფ': 'f', + 'ქ': 'q', 'ღ': 'g', 'ყ': 'y', 'შ': 'sh', 'ჩ': 'ch', 'ც': 'c', 'ძ': 'dz', + 'წ': 'w', 'ჭ': 'ch', 'ხ': 'x', 'ჯ': 'j', 'ჰ': 'h' + }; + + const ALL_DOWNCODE_MAPS = [ + LATIN_MAP, + LATIN_SYMBOLS_MAP, + GREEK_MAP, + TURKISH_MAP, + ROMANIAN_MAP, + RUSSIAN_MAP, + UKRAINIAN_MAP, + CZECH_MAP, + SLOVAK_MAP, + POLISH_MAP, + LATVIAN_MAP, + ARABIC_MAP, + LITHUANIAN_MAP, + SERBIAN_MAP, + AZERBAIJANI_MAP, + GEORGIAN_MAP + ]; + + const Downcoder = { + 'Initialize': function() { + if (Downcoder.map) { // already made + return; + } + Downcoder.map = {}; + for (const lookup of ALL_DOWNCODE_MAPS) { + Object.assign(Downcoder.map, lookup); + } + Downcoder.regex = new RegExp(Object.keys(Downcoder.map).join('|'), 'g'); + } + }; + + function downcode(slug) { + Downcoder.Initialize(); + return slug.replace(Downcoder.regex, function(m) { + return Downcoder.map[m]; + }); + } + + + function URLify(s, num_chars, allowUnicode) { + // changes, e.g., "Petty theft" to "petty-theft" + if (!allowUnicode) { + s = downcode(s); + } + s = s.toLowerCase(); // convert to lowercase + // if downcode doesn't hit, the char will be stripped here + if (allowUnicode) { + // Keep Unicode letters including both lowercase and uppercase + // characters, whitespace, and dash; remove other characters. + s = XRegExp.replace(s, XRegExp('[^-_\\p{L}\\p{N}\\s]', 'g'), ''); + } else { + s = s.replace(/[^-\w\s]/g, ''); // remove unneeded chars + } + s = s.replace(/^\s+|\s+$/g, ''); // trim leading/trailing spaces + s = s.replace(/[-\s]+/g, '-'); // convert spaces to hyphens + s = s.substring(0, num_chars); // trim to first num_chars chars + return s.replace(/-+$/g, ''); // trim any trailing hyphens + } + window.URLify = URLify; +} diff --git a/y/static_root/admin/js/vendor/jquery/LICENSE.txt b/y/static_root/admin/js/vendor/jquery/LICENSE.txt new file mode 100644 index 0000000000000000000000000000000000000000..f642c3f7a77a5833bc3dfee643ad8ca6387b23e7 --- /dev/null +++ b/y/static_root/admin/js/vendor/jquery/LICENSE.txt @@ -0,0 +1,20 @@ +Copyright OpenJS Foundation and other contributors, https://openjsf.org/ + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/y/static_root/admin/js/vendor/jquery/jquery.js b/y/static_root/admin/js/vendor/jquery/jquery.js new file mode 100644 index 0000000000000000000000000000000000000000..7f35c11bdf388b4516df3bc03ec3488e8b2654b2 --- /dev/null +++ b/y/static_root/admin/js/vendor/jquery/jquery.js @@ -0,0 +1,10965 @@ +/*! + * jQuery JavaScript Library v3.6.4 + * https://jquery.com/ + * + * Includes Sizzle.js + * https://sizzlejs.com/ + * + * Copyright OpenJS Foundation and other contributors + * Released under the MIT license + * https://jquery.org/license + * + * Date: 2023-03-08T15:28Z + */ +( function( global, factory ) { + + "use strict"; + + if ( typeof module === "object" && typeof module.exports === "object" ) { + + // For CommonJS and CommonJS-like environments where a proper `window` + // is present, execute the factory and get jQuery. + // For environments that do not have a `window` with a `document` + // (such as Node.js), expose a factory as module.exports. + // This accentuates the need for the creation of a real `window`. + // e.g. var jQuery = require("jquery")(window); + // See ticket trac-14549 for more info. + module.exports = global.document ? + factory( global, true ) : + function( w ) { + if ( !w.document ) { + throw new Error( "jQuery requires a window with a document" ); + } + return factory( w ); + }; + } else { + factory( global ); + } + +// Pass this if window is not defined yet +} )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) { + +// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1 +// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode +// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common +// enough that all such attempts are guarded in a try block. +"use strict"; + +var arr = []; + +var getProto = Object.getPrototypeOf; + +var slice = arr.slice; + +var flat = arr.flat ? function( array ) { + return arr.flat.call( array ); +} : function( array ) { + return arr.concat.apply( [], array ); +}; + + +var push = arr.push; + +var indexOf = arr.indexOf; + +var class2type = {}; + +var toString = class2type.toString; + +var hasOwn = class2type.hasOwnProperty; + +var fnToString = hasOwn.toString; + +var ObjectFunctionString = fnToString.call( Object ); + +var support = {}; + +var isFunction = function isFunction( obj ) { + + // Support: Chrome <=57, Firefox <=52 + // In some browsers, typeof returns "function" for HTML elements + // (i.e., `typeof document.createElement( "object" ) === "function"`). + // We don't want to classify *any* DOM node as a function. + // Support: QtWeb <=3.8.5, WebKit <=534.34, wkhtmltopdf tool <=0.12.5 + // Plus for old WebKit, typeof returns "function" for HTML collections + // (e.g., `typeof document.getElementsByTagName("div") === "function"`). (gh-4756) + return typeof obj === "function" && typeof obj.nodeType !== "number" && + typeof obj.item !== "function"; + }; + + +var isWindow = function isWindow( obj ) { + return obj != null && obj === obj.window; + }; + + +var document = window.document; + + + + var preservedScriptAttributes = { + type: true, + src: true, + nonce: true, + noModule: true + }; + + function DOMEval( code, node, doc ) { + doc = doc || document; + + var i, val, + script = doc.createElement( "script" ); + + script.text = code; + if ( node ) { + for ( i in preservedScriptAttributes ) { + + // Support: Firefox 64+, Edge 18+ + // Some browsers don't support the "nonce" property on scripts. + // On the other hand, just using `getAttribute` is not enough as + // the `nonce` attribute is reset to an empty string whenever it + // becomes browsing-context connected. + // See https://github.com/whatwg/html/issues/2369 + // See https://html.spec.whatwg.org/#nonce-attributes + // The `node.getAttribute` check was added for the sake of + // `jQuery.globalEval` so that it can fake a nonce-containing node + // via an object. + val = node[ i ] || node.getAttribute && node.getAttribute( i ); + if ( val ) { + script.setAttribute( i, val ); + } + } + } + doc.head.appendChild( script ).parentNode.removeChild( script ); + } + + +function toType( obj ) { + if ( obj == null ) { + return obj + ""; + } + + // Support: Android <=2.3 only (functionish RegExp) + return typeof obj === "object" || typeof obj === "function" ? + class2type[ toString.call( obj ) ] || "object" : + typeof obj; +} +/* global Symbol */ +// Defining this global in .eslintrc.json would create a danger of using the global +// unguarded in another place, it seems safer to define global only for this module + + + +var + version = "3.6.4", + + // Define a local copy of jQuery + jQuery = function( selector, context ) { + + // The jQuery object is actually just the init constructor 'enhanced' + // Need init if jQuery is called (just allow error to be thrown if not included) + return new jQuery.fn.init( selector, context ); + }; + +jQuery.fn = jQuery.prototype = { + + // The current version of jQuery being used + jquery: version, + + constructor: jQuery, + + // The default length of a jQuery object is 0 + length: 0, + + toArray: function() { + return slice.call( this ); + }, + + // Get the Nth element in the matched element set OR + // Get the whole matched element set as a clean array + get: function( num ) { + + // Return all the elements in a clean array + if ( num == null ) { + return slice.call( this ); + } + + // Return just the one element from the set + return num < 0 ? this[ num + this.length ] : this[ num ]; + }, + + // Take an array of elements and push it onto the stack + // (returning the new matched element set) + pushStack: function( elems ) { + + // Build a new jQuery matched element set + var ret = jQuery.merge( this.constructor(), elems ); + + // Add the old object onto the stack (as a reference) + ret.prevObject = this; + + // Return the newly-formed element set + return ret; + }, + + // Execute a callback for every element in the matched set. + each: function( callback ) { + return jQuery.each( this, callback ); + }, + + map: function( callback ) { + return this.pushStack( jQuery.map( this, function( elem, i ) { + return callback.call( elem, i, elem ); + } ) ); + }, + + slice: function() { + return this.pushStack( slice.apply( this, arguments ) ); + }, + + first: function() { + return this.eq( 0 ); + }, + + last: function() { + return this.eq( -1 ); + }, + + even: function() { + return this.pushStack( jQuery.grep( this, function( _elem, i ) { + return ( i + 1 ) % 2; + } ) ); + }, + + odd: function() { + return this.pushStack( jQuery.grep( this, function( _elem, i ) { + return i % 2; + } ) ); + }, + + eq: function( i ) { + var len = this.length, + j = +i + ( i < 0 ? len : 0 ); + return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] ); + }, + + end: function() { + return this.prevObject || this.constructor(); + }, + + // For internal use only. + // Behaves like an Array's method, not like a jQuery method. + push: push, + sort: arr.sort, + splice: arr.splice +}; + +jQuery.extend = jQuery.fn.extend = function() { + var options, name, src, copy, copyIsArray, clone, + target = arguments[ 0 ] || {}, + i = 1, + length = arguments.length, + deep = false; + + // Handle a deep copy situation + if ( typeof target === "boolean" ) { + deep = target; + + // Skip the boolean and the target + target = arguments[ i ] || {}; + i++; + } + + // Handle case when target is a string or something (possible in deep copy) + if ( typeof target !== "object" && !isFunction( target ) ) { + target = {}; + } + + // Extend jQuery itself if only one argument is passed + if ( i === length ) { + target = this; + i--; + } + + for ( ; i < length; i++ ) { + + // Only deal with non-null/undefined values + if ( ( options = arguments[ i ] ) != null ) { + + // Extend the base object + for ( name in options ) { + copy = options[ name ]; + + // Prevent Object.prototype pollution + // Prevent never-ending loop + if ( name === "__proto__" || target === copy ) { + continue; + } + + // Recurse if we're merging plain objects or arrays + if ( deep && copy && ( jQuery.isPlainObject( copy ) || + ( copyIsArray = Array.isArray( copy ) ) ) ) { + src = target[ name ]; + + // Ensure proper type for the source value + if ( copyIsArray && !Array.isArray( src ) ) { + clone = []; + } else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) { + clone = {}; + } else { + clone = src; + } + copyIsArray = false; + + // Never move original objects, clone them + target[ name ] = jQuery.extend( deep, clone, copy ); + + // Don't bring in undefined values + } else if ( copy !== undefined ) { + target[ name ] = copy; + } + } + } + } + + // Return the modified object + return target; +}; + +jQuery.extend( { + + // Unique for each copy of jQuery on the page + expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ), + + // Assume jQuery is ready without the ready module + isReady: true, + + error: function( msg ) { + throw new Error( msg ); + }, + + noop: function() {}, + + isPlainObject: function( obj ) { + var proto, Ctor; + + // Detect obvious negatives + // Use toString instead of jQuery.type to catch host objects + if ( !obj || toString.call( obj ) !== "[object Object]" ) { + return false; + } + + proto = getProto( obj ); + + // Objects with no prototype (e.g., `Object.create( null )`) are plain + if ( !proto ) { + return true; + } + + // Objects with prototype are plain iff they were constructed by a global Object function + Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor; + return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString; + }, + + isEmptyObject: function( obj ) { + var name; + + for ( name in obj ) { + return false; + } + return true; + }, + + // Evaluates a script in a provided context; falls back to the global one + // if not specified. + globalEval: function( code, options, doc ) { + DOMEval( code, { nonce: options && options.nonce }, doc ); + }, + + each: function( obj, callback ) { + var length, i = 0; + + if ( isArrayLike( obj ) ) { + length = obj.length; + for ( ; i < length; i++ ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } else { + for ( i in obj ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } + + return obj; + }, + + // results is for internal usage only + makeArray: function( arr, results ) { + var ret = results || []; + + if ( arr != null ) { + if ( isArrayLike( Object( arr ) ) ) { + jQuery.merge( ret, + typeof arr === "string" ? + [ arr ] : arr + ); + } else { + push.call( ret, arr ); + } + } + + return ret; + }, + + inArray: function( elem, arr, i ) { + return arr == null ? -1 : indexOf.call( arr, elem, i ); + }, + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + merge: function( first, second ) { + var len = +second.length, + j = 0, + i = first.length; + + for ( ; j < len; j++ ) { + first[ i++ ] = second[ j ]; + } + + first.length = i; + + return first; + }, + + grep: function( elems, callback, invert ) { + var callbackInverse, + matches = [], + i = 0, + length = elems.length, + callbackExpect = !invert; + + // Go through the array, only saving the items + // that pass the validator function + for ( ; i < length; i++ ) { + callbackInverse = !callback( elems[ i ], i ); + if ( callbackInverse !== callbackExpect ) { + matches.push( elems[ i ] ); + } + } + + return matches; + }, + + // arg is for internal usage only + map: function( elems, callback, arg ) { + var length, value, + i = 0, + ret = []; + + // Go through the array, translating each of the items to their new values + if ( isArrayLike( elems ) ) { + length = elems.length; + for ( ; i < length; i++ ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + + // Go through every key on the object, + } else { + for ( i in elems ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + } + + // Flatten any nested arrays + return flat( ret ); + }, + + // A global GUID counter for objects + guid: 1, + + // jQuery.support is not used in Core but other projects attach their + // properties to it so it needs to exist. + support: support +} ); + +if ( typeof Symbol === "function" ) { + jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ]; +} + +// Populate the class2type map +jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ), + function( _i, name ) { + class2type[ "[object " + name + "]" ] = name.toLowerCase(); + } ); + +function isArrayLike( obj ) { + + // Support: real iOS 8.2 only (not reproducible in simulator) + // `in` check used to prevent JIT error (gh-2145) + // hasOwn isn't used here due to false negatives + // regarding Nodelist length in IE + var length = !!obj && "length" in obj && obj.length, + type = toType( obj ); + + if ( isFunction( obj ) || isWindow( obj ) ) { + return false; + } + + return type === "array" || length === 0 || + typeof length === "number" && length > 0 && ( length - 1 ) in obj; +} +var Sizzle = +/*! + * Sizzle CSS Selector Engine v2.3.10 + * https://sizzlejs.com/ + * + * Copyright JS Foundation and other contributors + * Released under the MIT license + * https://js.foundation/ + * + * Date: 2023-02-14 + */ +( function( window ) { +var i, + support, + Expr, + getText, + isXML, + tokenize, + compile, + select, + outermostContext, + sortInput, + hasDuplicate, + + // Local document vars + setDocument, + document, + docElem, + documentIsHTML, + rbuggyQSA, + rbuggyMatches, + matches, + contains, + + // Instance-specific data + expando = "sizzle" + 1 * new Date(), + preferredDoc = window.document, + dirruns = 0, + done = 0, + classCache = createCache(), + tokenCache = createCache(), + compilerCache = createCache(), + nonnativeSelectorCache = createCache(), + sortOrder = function( a, b ) { + if ( a === b ) { + hasDuplicate = true; + } + return 0; + }, + + // Instance methods + hasOwn = ( {} ).hasOwnProperty, + arr = [], + pop = arr.pop, + pushNative = arr.push, + push = arr.push, + slice = arr.slice, + + // Use a stripped-down indexOf as it's faster than native + // https://jsperf.com/thor-indexof-vs-for/5 + indexOf = function( list, elem ) { + var i = 0, + len = list.length; + for ( ; i < len; i++ ) { + if ( list[ i ] === elem ) { + return i; + } + } + return -1; + }, + + booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|" + + "ismap|loop|multiple|open|readonly|required|scoped", + + // Regular expressions + + // http://www.w3.org/TR/css3-selectors/#whitespace + whitespace = "[\\x20\\t\\r\\n\\f]", + + // https://www.w3.org/TR/css-syntax-3/#ident-token-diagram + identifier = "(?:\\\\[\\da-fA-F]{1,6}" + whitespace + + "?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+", + + // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors + attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace + + + // Operator (capture 2) + "*([*^$|!~]?=)" + whitespace + + + // "Attribute values must be CSS identifiers [capture 5] + // or strings [capture 3 or capture 4]" + "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + + whitespace + "*\\]", + + pseudos = ":(" + identifier + ")(?:\\((" + + + // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments: + // 1. quoted (capture 3; capture 4 or capture 5) + "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + + + // 2. simple (capture 6) + "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" + + + // 3. anything else (capture 2) + ".*" + + ")\\)|)", + + // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter + rwhitespace = new RegExp( whitespace + "+", "g" ), + rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + + whitespace + "+$", "g" ), + + rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), + rleadingCombinator = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + + "*" ), + rdescend = new RegExp( whitespace + "|>" ), + + rpseudo = new RegExp( pseudos ), + ridentifier = new RegExp( "^" + identifier + "$" ), + + matchExpr = { + "ID": new RegExp( "^#(" + identifier + ")" ), + "CLASS": new RegExp( "^\\.(" + identifier + ")" ), + "TAG": new RegExp( "^(" + identifier + "|[*])" ), + "ATTR": new RegExp( "^" + attributes ), + "PSEUDO": new RegExp( "^" + pseudos ), + "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + + whitespace + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + + whitespace + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), + "bool": new RegExp( "^(?:" + booleans + ")$", "i" ), + + // For use in libraries implementing .is() + // We use this for POS matching in `select` + "needsContext": new RegExp( "^" + whitespace + + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + whitespace + + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) + }, + + rhtml = /HTML$/i, + rinputs = /^(?:input|select|textarea|button)$/i, + rheader = /^h\d$/i, + + rnative = /^[^{]+\{\s*\[native \w/, + + // Easily-parseable/retrievable ID or TAG or CLASS selectors + rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, + + rsibling = /[+~]/, + + // CSS escapes + // http://www.w3.org/TR/CSS21/syndata.html#escaped-characters + runescape = new RegExp( "\\\\[\\da-fA-F]{1,6}" + whitespace + "?|\\\\([^\\r\\n\\f])", "g" ), + funescape = function( escape, nonHex ) { + var high = "0x" + escape.slice( 1 ) - 0x10000; + + return nonHex ? + + // Strip the backslash prefix from a non-hex escape sequence + nonHex : + + // Replace a hexadecimal escape sequence with the encoded Unicode code point + // Support: IE <=11+ + // For values outside the Basic Multilingual Plane (BMP), manually construct a + // surrogate pair + high < 0 ? + String.fromCharCode( high + 0x10000 ) : + String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); + }, + + // CSS string/identifier serialization + // https://drafts.csswg.org/cssom/#common-serializing-idioms + rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g, + fcssescape = function( ch, asCodePoint ) { + if ( asCodePoint ) { + + // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER + if ( ch === "\0" ) { + return "\uFFFD"; + } + + // Control characters and (dependent upon position) numbers get escaped as code points + return ch.slice( 0, -1 ) + "\\" + + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " "; + } + + // Other potentially-special ASCII characters get backslash-escaped + return "\\" + ch; + }, + + // Used for iframes + // See setDocument() + // Removing the function wrapper causes a "Permission Denied" + // error in IE + unloadHandler = function() { + setDocument(); + }, + + inDisabledFieldset = addCombinator( + function( elem ) { + return elem.disabled === true && elem.nodeName.toLowerCase() === "fieldset"; + }, + { dir: "parentNode", next: "legend" } + ); + +// Optimize for push.apply( _, NodeList ) +try { + push.apply( + ( arr = slice.call( preferredDoc.childNodes ) ), + preferredDoc.childNodes + ); + + // Support: Android<4.0 + // Detect silently failing push.apply + // eslint-disable-next-line no-unused-expressions + arr[ preferredDoc.childNodes.length ].nodeType; +} catch ( e ) { + push = { apply: arr.length ? + + // Leverage slice if possible + function( target, els ) { + pushNative.apply( target, slice.call( els ) ); + } : + + // Support: IE<9 + // Otherwise append directly + function( target, els ) { + var j = target.length, + i = 0; + + // Can't trust NodeList.length + while ( ( target[ j++ ] = els[ i++ ] ) ) {} + target.length = j - 1; + } + }; +} + +function Sizzle( selector, context, results, seed ) { + var m, i, elem, nid, match, groups, newSelector, + newContext = context && context.ownerDocument, + + // nodeType defaults to 9, since context defaults to document + nodeType = context ? context.nodeType : 9; + + results = results || []; + + // Return early from calls with invalid selector or context + if ( typeof selector !== "string" || !selector || + nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) { + + return results; + } + + // Try to shortcut find operations (as opposed to filters) in HTML documents + if ( !seed ) { + setDocument( context ); + context = context || document; + + if ( documentIsHTML ) { + + // If the selector is sufficiently simple, try using a "get*By*" DOM method + // (excepting DocumentFragment context, where the methods don't exist) + if ( nodeType !== 11 && ( match = rquickExpr.exec( selector ) ) ) { + + // ID selector + if ( ( m = match[ 1 ] ) ) { + + // Document context + if ( nodeType === 9 ) { + if ( ( elem = context.getElementById( m ) ) ) { + + // Support: IE, Opera, Webkit + // TODO: identify versions + // getElementById can match elements by name instead of ID + if ( elem.id === m ) { + results.push( elem ); + return results; + } + } else { + return results; + } + + // Element context + } else { + + // Support: IE, Opera, Webkit + // TODO: identify versions + // getElementById can match elements by name instead of ID + if ( newContext && ( elem = newContext.getElementById( m ) ) && + contains( context, elem ) && + elem.id === m ) { + + results.push( elem ); + return results; + } + } + + // Type selector + } else if ( match[ 2 ] ) { + push.apply( results, context.getElementsByTagName( selector ) ); + return results; + + // Class selector + } else if ( ( m = match[ 3 ] ) && support.getElementsByClassName && + context.getElementsByClassName ) { + + push.apply( results, context.getElementsByClassName( m ) ); + return results; + } + } + + // Take advantage of querySelectorAll + if ( support.qsa && + !nonnativeSelectorCache[ selector + " " ] && + ( !rbuggyQSA || !rbuggyQSA.test( selector ) ) && + + // Support: IE 8 only + // Exclude object elements + ( nodeType !== 1 || context.nodeName.toLowerCase() !== "object" ) ) { + + newSelector = selector; + newContext = context; + + // qSA considers elements outside a scoping root when evaluating child or + // descendant combinators, which is not what we want. + // In such cases, we work around the behavior by prefixing every selector in the + // list with an ID selector referencing the scope context. + // The technique has to be used as well when a leading combinator is used + // as such selectors are not recognized by querySelectorAll. + // Thanks to Andrew Dupont for this technique. + if ( nodeType === 1 && + ( rdescend.test( selector ) || rleadingCombinator.test( selector ) ) ) { + + // Expand context for sibling selectors + newContext = rsibling.test( selector ) && testContext( context.parentNode ) || + context; + + // We can use :scope instead of the ID hack if the browser + // supports it & if we're not changing the context. + if ( newContext !== context || !support.scope ) { + + // Capture the context ID, setting it first if necessary + if ( ( nid = context.getAttribute( "id" ) ) ) { + nid = nid.replace( rcssescape, fcssescape ); + } else { + context.setAttribute( "id", ( nid = expando ) ); + } + } + + // Prefix every selector in the list + groups = tokenize( selector ); + i = groups.length; + while ( i-- ) { + groups[ i ] = ( nid ? "#" + nid : ":scope" ) + " " + + toSelector( groups[ i ] ); + } + newSelector = groups.join( "," ); + } + + try { + push.apply( results, + newContext.querySelectorAll( newSelector ) + ); + return results; + } catch ( qsaError ) { + nonnativeSelectorCache( selector, true ); + } finally { + if ( nid === expando ) { + context.removeAttribute( "id" ); + } + } + } + } + } + + // All others + return select( selector.replace( rtrim, "$1" ), context, results, seed ); +} + +/** + * Create key-value caches of limited size + * @returns {function(string, object)} Returns the Object data after storing it on itself with + * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) + * deleting the oldest entry + */ +function createCache() { + var keys = []; + + function cache( key, value ) { + + // Use (key + " ") to avoid collision with native prototype properties (see Issue #157) + if ( keys.push( key + " " ) > Expr.cacheLength ) { + + // Only keep the most recent entries + delete cache[ keys.shift() ]; + } + return ( cache[ key + " " ] = value ); + } + return cache; +} + +/** + * Mark a function for special use by Sizzle + * @param {Function} fn The function to mark + */ +function markFunction( fn ) { + fn[ expando ] = true; + return fn; +} + +/** + * Support testing using an element + * @param {Function} fn Passed the created element and returns a boolean result + */ +function assert( fn ) { + var el = document.createElement( "fieldset" ); + + try { + return !!fn( el ); + } catch ( e ) { + return false; + } finally { + + // Remove from its parent by default + if ( el.parentNode ) { + el.parentNode.removeChild( el ); + } + + // release memory in IE + el = null; + } +} + +/** + * Adds the same handler for all of the specified attrs + * @param {String} attrs Pipe-separated list of attributes + * @param {Function} handler The method that will be applied + */ +function addHandle( attrs, handler ) { + var arr = attrs.split( "|" ), + i = arr.length; + + while ( i-- ) { + Expr.attrHandle[ arr[ i ] ] = handler; + } +} + +/** + * Checks document order of two siblings + * @param {Element} a + * @param {Element} b + * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b + */ +function siblingCheck( a, b ) { + var cur = b && a, + diff = cur && a.nodeType === 1 && b.nodeType === 1 && + a.sourceIndex - b.sourceIndex; + + // Use IE sourceIndex if available on both nodes + if ( diff ) { + return diff; + } + + // Check if b follows a + if ( cur ) { + while ( ( cur = cur.nextSibling ) ) { + if ( cur === b ) { + return -1; + } + } + } + + return a ? 1 : -1; +} + +/** + * Returns a function to use in pseudos for input types + * @param {String} type + */ +function createInputPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for buttons + * @param {String} type + */ +function createButtonPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return ( name === "input" || name === "button" ) && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for :enabled/:disabled + * @param {Boolean} disabled true for :disabled; false for :enabled + */ +function createDisabledPseudo( disabled ) { + + // Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable + return function( elem ) { + + // Only certain elements can match :enabled or :disabled + // https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled + // https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled + if ( "form" in elem ) { + + // Check for inherited disabledness on relevant non-disabled elements: + // * listed form-associated elements in a disabled fieldset + // https://html.spec.whatwg.org/multipage/forms.html#category-listed + // https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled + // * option elements in a disabled optgroup + // https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled + // All such elements have a "form" property. + if ( elem.parentNode && elem.disabled === false ) { + + // Option elements defer to a parent optgroup if present + if ( "label" in elem ) { + if ( "label" in elem.parentNode ) { + return elem.parentNode.disabled === disabled; + } else { + return elem.disabled === disabled; + } + } + + // Support: IE 6 - 11 + // Use the isDisabled shortcut property to check for disabled fieldset ancestors + return elem.isDisabled === disabled || + + // Where there is no isDisabled, check manually + /* jshint -W018 */ + elem.isDisabled !== !disabled && + inDisabledFieldset( elem ) === disabled; + } + + return elem.disabled === disabled; + + // Try to winnow out elements that can't be disabled before trusting the disabled property. + // Some victims get caught in our net (label, legend, menu, track), but it shouldn't + // even exist on them, let alone have a boolean value. + } else if ( "label" in elem ) { + return elem.disabled === disabled; + } + + // Remaining elements are neither :enabled nor :disabled + return false; + }; +} + +/** + * Returns a function to use in pseudos for positionals + * @param {Function} fn + */ +function createPositionalPseudo( fn ) { + return markFunction( function( argument ) { + argument = +argument; + return markFunction( function( seed, matches ) { + var j, + matchIndexes = fn( [], seed.length, argument ), + i = matchIndexes.length; + + // Match elements found at the specified indexes + while ( i-- ) { + if ( seed[ ( j = matchIndexes[ i ] ) ] ) { + seed[ j ] = !( matches[ j ] = seed[ j ] ); + } + } + } ); + } ); +} + +/** + * Checks a node for validity as a Sizzle context + * @param {Element|Object=} context + * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value + */ +function testContext( context ) { + return context && typeof context.getElementsByTagName !== "undefined" && context; +} + +// Expose support vars for convenience +support = Sizzle.support = {}; + +/** + * Detects XML nodes + * @param {Element|Object} elem An element or a document + * @returns {Boolean} True iff elem is a non-HTML XML node + */ +isXML = Sizzle.isXML = function( elem ) { + var namespace = elem && elem.namespaceURI, + docElem = elem && ( elem.ownerDocument || elem ).documentElement; + + // Support: IE <=8 + // Assume HTML when documentElement doesn't yet exist, such as inside loading iframes + // https://bugs.jquery.com/ticket/4833 + return !rhtml.test( namespace || docElem && docElem.nodeName || "HTML" ); +}; + +/** + * Sets document-related variables once based on the current document + * @param {Element|Object} [doc] An element or document object to use to set the document + * @returns {Object} Returns the current document + */ +setDocument = Sizzle.setDocument = function( node ) { + var hasCompare, subWindow, + doc = node ? node.ownerDocument || node : preferredDoc; + + // Return early if doc is invalid or already selected + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( doc == document || doc.nodeType !== 9 || !doc.documentElement ) { + return document; + } + + // Update global variables + document = doc; + docElem = document.documentElement; + documentIsHTML = !isXML( document ); + + // Support: IE 9 - 11+, Edge 12 - 18+ + // Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936) + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( preferredDoc != document && + ( subWindow = document.defaultView ) && subWindow.top !== subWindow ) { + + // Support: IE 11, Edge + if ( subWindow.addEventListener ) { + subWindow.addEventListener( "unload", unloadHandler, false ); + + // Support: IE 9 - 10 only + } else if ( subWindow.attachEvent ) { + subWindow.attachEvent( "onunload", unloadHandler ); + } + } + + // Support: IE 8 - 11+, Edge 12 - 18+, Chrome <=16 - 25 only, Firefox <=3.6 - 31 only, + // Safari 4 - 5 only, Opera <=11.6 - 12.x only + // IE/Edge & older browsers don't support the :scope pseudo-class. + // Support: Safari 6.0 only + // Safari 6.0 supports :scope but it's an alias of :root there. + support.scope = assert( function( el ) { + docElem.appendChild( el ).appendChild( document.createElement( "div" ) ); + return typeof el.querySelectorAll !== "undefined" && + !el.querySelectorAll( ":scope fieldset div" ).length; + } ); + + // Support: Chrome 105 - 110+, Safari 15.4 - 16.3+ + // Make sure the the `:has()` argument is parsed unforgivingly. + // We include `*` in the test to detect buggy implementations that are + // _selectively_ forgiving (specifically when the list includes at least + // one valid selector). + // Note that we treat complete lack of support for `:has()` as if it were + // spec-compliant support, which is fine because use of `:has()` in such + // environments will fail in the qSA path and fall back to jQuery traversal + // anyway. + support.cssHas = assert( function() { + try { + document.querySelector( ":has(*,:jqfake)" ); + return false; + } catch ( e ) { + return true; + } + } ); + + /* Attributes + ---------------------------------------------------------------------- */ + + // Support: IE<8 + // Verify that getAttribute really returns attributes and not properties + // (excepting IE8 booleans) + support.attributes = assert( function( el ) { + el.className = "i"; + return !el.getAttribute( "className" ); + } ); + + /* getElement(s)By* + ---------------------------------------------------------------------- */ + + // Check if getElementsByTagName("*") returns only elements + support.getElementsByTagName = assert( function( el ) { + el.appendChild( document.createComment( "" ) ); + return !el.getElementsByTagName( "*" ).length; + } ); + + // Support: IE<9 + support.getElementsByClassName = rnative.test( document.getElementsByClassName ); + + // Support: IE<10 + // Check if getElementById returns elements by name + // The broken getElementById methods don't pick up programmatically-set names, + // so use a roundabout getElementsByName test + support.getById = assert( function( el ) { + docElem.appendChild( el ).id = expando; + return !document.getElementsByName || !document.getElementsByName( expando ).length; + } ); + + // ID filter and find + if ( support.getById ) { + Expr.filter[ "ID" ] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + return elem.getAttribute( "id" ) === attrId; + }; + }; + Expr.find[ "ID" ] = function( id, context ) { + if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { + var elem = context.getElementById( id ); + return elem ? [ elem ] : []; + } + }; + } else { + Expr.filter[ "ID" ] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + var node = typeof elem.getAttributeNode !== "undefined" && + elem.getAttributeNode( "id" ); + return node && node.value === attrId; + }; + }; + + // Support: IE 6 - 7 only + // getElementById is not reliable as a find shortcut + Expr.find[ "ID" ] = function( id, context ) { + if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { + var node, i, elems, + elem = context.getElementById( id ); + + if ( elem ) { + + // Verify the id attribute + node = elem.getAttributeNode( "id" ); + if ( node && node.value === id ) { + return [ elem ]; + } + + // Fall back on getElementsByName + elems = context.getElementsByName( id ); + i = 0; + while ( ( elem = elems[ i++ ] ) ) { + node = elem.getAttributeNode( "id" ); + if ( node && node.value === id ) { + return [ elem ]; + } + } + } + + return []; + } + }; + } + + // Tag + Expr.find[ "TAG" ] = support.getElementsByTagName ? + function( tag, context ) { + if ( typeof context.getElementsByTagName !== "undefined" ) { + return context.getElementsByTagName( tag ); + + // DocumentFragment nodes don't have gEBTN + } else if ( support.qsa ) { + return context.querySelectorAll( tag ); + } + } : + + function( tag, context ) { + var elem, + tmp = [], + i = 0, + + // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too + results = context.getElementsByTagName( tag ); + + // Filter out possible comments + if ( tag === "*" ) { + while ( ( elem = results[ i++ ] ) ) { + if ( elem.nodeType === 1 ) { + tmp.push( elem ); + } + } + + return tmp; + } + return results; + }; + + // Class + Expr.find[ "CLASS" ] = support.getElementsByClassName && function( className, context ) { + if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) { + return context.getElementsByClassName( className ); + } + }; + + /* QSA/matchesSelector + ---------------------------------------------------------------------- */ + + // QSA and matchesSelector support + + // matchesSelector(:active) reports false when true (IE9/Opera 11.5) + rbuggyMatches = []; + + // qSa(:focus) reports false when true (Chrome 21) + // We allow this because of a bug in IE8/9 that throws an error + // whenever `document.activeElement` is accessed on an iframe + // So, we allow :focus to pass through QSA all the time to avoid the IE error + // See https://bugs.jquery.com/ticket/13378 + rbuggyQSA = []; + + if ( ( support.qsa = rnative.test( document.querySelectorAll ) ) ) { + + // Build QSA regex + // Regex strategy adopted from Diego Perini + assert( function( el ) { + + var input; + + // Select is set to empty string on purpose + // This is to test IE's treatment of not explicitly + // setting a boolean content attribute, + // since its presence should be enough + // https://bugs.jquery.com/ticket/12359 + docElem.appendChild( el ).innerHTML = "" + + ""; + + // Support: IE8, Opera 11-12.16 + // Nothing should be selected when empty strings follow ^= or $= or *= + // The test attribute must be unknown in Opera but "safe" for WinRT + // https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section + if ( el.querySelectorAll( "[msallowcapture^='']" ).length ) { + rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" ); + } + + // Support: IE8 + // Boolean attributes and "value" are not treated correctly + if ( !el.querySelectorAll( "[selected]" ).length ) { + rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); + } + + // Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+ + if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) { + rbuggyQSA.push( "~=" ); + } + + // Support: IE 11+, Edge 15 - 18+ + // IE 11/Edge don't find elements on a `[name='']` query in some cases. + // Adding a temporary attribute to the document before the selection works + // around the issue. + // Interestingly, IE 10 & older don't seem to have the issue. + input = document.createElement( "input" ); + input.setAttribute( "name", "" ); + el.appendChild( input ); + if ( !el.querySelectorAll( "[name='']" ).length ) { + rbuggyQSA.push( "\\[" + whitespace + "*name" + whitespace + "*=" + + whitespace + "*(?:''|\"\")" ); + } + + // Webkit/Opera - :checked should return selected option elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + // IE8 throws error here and will not see later tests + if ( !el.querySelectorAll( ":checked" ).length ) { + rbuggyQSA.push( ":checked" ); + } + + // Support: Safari 8+, iOS 8+ + // https://bugs.webkit.org/show_bug.cgi?id=136851 + // In-page `selector#id sibling-combinator selector` fails + if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) { + rbuggyQSA.push( ".#.+[+~]" ); + } + + // Support: Firefox <=3.6 - 5 only + // Old Firefox doesn't throw on a badly-escaped identifier. + el.querySelectorAll( "\\\f" ); + rbuggyQSA.push( "[\\r\\n\\f]" ); + } ); + + assert( function( el ) { + el.innerHTML = "" + + ""; + + // Support: Windows 8 Native Apps + // The type and name attributes are restricted during .innerHTML assignment + var input = document.createElement( "input" ); + input.setAttribute( "type", "hidden" ); + el.appendChild( input ).setAttribute( "name", "D" ); + + // Support: IE8 + // Enforce case-sensitivity of name attribute + if ( el.querySelectorAll( "[name=d]" ).length ) { + rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" ); + } + + // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled) + // IE8 throws error here and will not see later tests + if ( el.querySelectorAll( ":enabled" ).length !== 2 ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + // Support: IE9-11+ + // IE's :disabled selector does not pick up the children of disabled fieldsets + docElem.appendChild( el ).disabled = true; + if ( el.querySelectorAll( ":disabled" ).length !== 2 ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + // Support: Opera 10 - 11 only + // Opera 10-11 does not throw on post-comma invalid pseudos + el.querySelectorAll( "*,:x" ); + rbuggyQSA.push( ",.*:" ); + } ); + } + + if ( ( support.matchesSelector = rnative.test( ( matches = docElem.matches || + docElem.webkitMatchesSelector || + docElem.mozMatchesSelector || + docElem.oMatchesSelector || + docElem.msMatchesSelector ) ) ) ) { + + assert( function( el ) { + + // Check to see if it's possible to do matchesSelector + // on a disconnected node (IE 9) + support.disconnectedMatch = matches.call( el, "*" ); + + // This should fail with an exception + // Gecko does not error, returns false instead + matches.call( el, "[s!='']:x" ); + rbuggyMatches.push( "!=", pseudos ); + } ); + } + + if ( !support.cssHas ) { + + // Support: Chrome 105 - 110+, Safari 15.4 - 16.3+ + // Our regular `try-catch` mechanism fails to detect natively-unsupported + // pseudo-classes inside `:has()` (such as `:has(:contains("Foo"))`) + // in browsers that parse the `:has()` argument as a forgiving selector list. + // https://drafts.csswg.org/selectors/#relational now requires the argument + // to be parsed unforgivingly, but browsers have not yet fully adjusted. + rbuggyQSA.push( ":has" ); + } + + rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join( "|" ) ); + rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join( "|" ) ); + + /* Contains + ---------------------------------------------------------------------- */ + hasCompare = rnative.test( docElem.compareDocumentPosition ); + + // Element contains another + // Purposefully self-exclusive + // As in, an element does not contain itself + contains = hasCompare || rnative.test( docElem.contains ) ? + function( a, b ) { + + // Support: IE <9 only + // IE doesn't have `contains` on `document` so we need to check for + // `documentElement` presence. + // We need to fall back to `a` when `documentElement` is missing + // as `ownerDocument` of elements within `