diff --git a/__init__.py b/__init__.py index 6f6ba6c..b8d0a32 100644 --- a/__init__.py +++ b/__init__.py @@ -2,4 +2,4 @@ __email__ = "ian.housman@gmail.com" # Version format yyyy.m.n -__version__ = "2024.9.2" +__version__ = "2024.9.3" diff --git a/docs/build/doctrees/environment.pickle b/docs/build/doctrees/environment.pickle index 17a9fc8..590a6f4 100644 Binary files a/docs/build/doctrees/environment.pickle and b/docs/build/doctrees/environment.pickle differ diff --git a/docs/build/doctrees/info/geeViz.getImagesLib.doctree b/docs/build/doctrees/info/geeViz.getImagesLib.doctree index aa750de..0523675 100644 Binary files a/docs/build/doctrees/info/geeViz.getImagesLib.doctree and b/docs/build/doctrees/info/geeViz.getImagesLib.doctree differ diff --git a/docs/build/doctrees/modules.doctree b/docs/build/doctrees/modules.doctree index 484b6c0..914613b 100644 Binary files a/docs/build/doctrees/modules.doctree and b/docs/build/doctrees/modules.doctree differ diff --git a/docs/build/html/.buildinfo b/docs/build/html/.buildinfo index 8617936..c494752 100644 --- a/docs/build/html/.buildinfo +++ b/docs/build/html/.buildinfo @@ -1,4 +1,4 @@ # Sphinx build info version 1 # This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. -config: 6f394410546ca07ce177a1bc194997f9 +config: 834f1fea9f4797126bd80511dd60619c tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/docs/build/html/_modules/geeViz/changeDetectionLib.html b/docs/build/html/_modules/geeViz/changeDetectionLib.html index 7324227..b8d0cbb 100644 --- a/docs/build/html/_modules/geeViz/changeDetectionLib.html +++ b/docs/build/html/_modules/geeViz/changeDetectionLib.html @@ -5,7 +5,7 @@ - geeViz.changeDetectionLib - geeViz "2024.9.2" docs + geeViz.changeDetectionLib - geeViz "2024.9.3" docs @@ -141,7 +141,7 @@
-
geeViz "2024.9.2" docs
+
geeViz "2024.9.3" docs
@@ -167,7 +167,7 @@
- geeViz "2024.9.2" docs + geeViz "2024.9.3" docs
+ diff --git a/docs/build/html/_modules/geeViz/cloudStorageManagerLib.html b/docs/build/html/_modules/geeViz/cloudStorageManagerLib.html index aa46d1c..baf3d67 100644 --- a/docs/build/html/_modules/geeViz/cloudStorageManagerLib.html +++ b/docs/build/html/_modules/geeViz/cloudStorageManagerLib.html @@ -5,7 +5,7 @@ - geeViz.cloudStorageManagerLib - geeViz "2024.9.2" docs + geeViz.cloudStorageManagerLib - geeViz "2024.9.3" docs @@ -141,7 +141,7 @@
-
geeViz "2024.9.2" docs
+
geeViz "2024.9.3" docs
@@ -167,7 +167,7 @@
- geeViz "2024.9.2" docs + geeViz "2024.9.3" docs @@ -364,7 +364,7 @@

Source code for geeViz.cloudStorageManagerLib

-
+ diff --git a/docs/build/html/_modules/geeViz/geeView.html b/docs/build/html/_modules/geeViz/geeView.html index 24e3feb..c9fa16f 100644 --- a/docs/build/html/_modules/geeViz/geeView.html +++ b/docs/build/html/_modules/geeViz/geeView.html @@ -5,7 +5,7 @@ - geeViz.geeView - geeViz "2024.9.2" docs + geeViz.geeView - geeViz "2024.9.3" docs @@ -141,7 +141,7 @@
-
geeViz "2024.9.2" docs
+
geeViz "2024.9.3" docs
@@ -167,7 +167,7 @@
- geeViz "2024.9.2" docs + geeViz "2024.9.3" docs @@ -414,19 +414,17 @@

Source code for geeViz.geeView

 robustInitializer()
 ######################################################################
 # Set up GEE and paths
-# robustInitializer()
 geeVizFolder = "geeViz"
 geeViewFolder = "geeView"
+
 # Set up template web viewer
 # Do not change
 cwd = os.getcwd()
 
 paths = sys.path
 
-# gee_py_modules_dir = site.getsitepackages()[-1]
-# py_viz_dir = os.path.join(gee_py_modules_dir,geeVizFolder)
 py_viz_dir = os.path.dirname(__file__)
-# os.chdir(py_viz_dir)
+
 print("geeViz package folder:", py_viz_dir)
 
 # Specify location of files to run
@@ -439,15 +437,13 @@ 

Source code for geeViz.geeView

 ######################################################################
 ######################################################################
 # Functions
-
-
 ######################################################################
 # Linear color gradient functions
 ##############################################################
 ##############################################################
 
[docs] -def color_dict_maker(gradient): +def color_dict_maker(gradient: list[list[int]]) -> dict: """Takes in a list of RGB sub-lists and returns dictionary of colors in RGB and hex form for use in a graphing function defined later on""" @@ -463,7 +459,7 @@

Source code for geeViz.geeView

 # color functions adapted from bsou.io/posts/color-gradients-with-python
 
[docs] -def hex_to_rgb(value): +def hex_to_rgb(value: str) -> tuple: """Return (red, green, blue) for the color given as #rrggbb.""" value = value.lstrip("#") lv = len(value) @@ -477,7 +473,7 @@

Source code for geeViz.geeView

 
 
[docs] -def RGB_to_hex(RGB): +def RGB_to_hex(RGB: list[int]) -> str: """[255,255,255] -> "#FFFFFF" """ # Components need to be integers for hex to make sense RGB = [int(x) for x in RGB] @@ -487,7 +483,7 @@

Source code for geeViz.geeView

 
 
[docs] -def linear_gradient(start_hex, finish_hex="#FFFFFF", n=10): +def linear_gradient(start_hex: str, finish_hex: str = "#FFFFFF", n: int = 10) -> dict: """returns a gradient list of (n) colors between two hex colors. start_hex and finish_hex should be the full six-digit color string, @@ -511,20 +507,18 @@

Source code for geeViz.geeView

 
 
[docs] -def polylinear_gradient(colors, n): +def polylinear_gradient(colors: list[str], n: int): """returns a list of colors forming linear gradients between all sequential pairs of colors. "n" specifies the total number of desired output colors""" # The number of colors per individual linear gradient n_out = int(float(n) / (len(colors) - 1)) + 1 - # print(('n',n)) - # print(('n_out',n_out)) + # If we don't have an even number of color values, we will remove equally spaced values at the end. apply_offset = False if n % n_out != 0: apply_offset = True n_out = n_out + 1 - # print(('new n_out',n_out)) # returns dictionary defined by color_dict() gradient_dict = linear_gradient(colors[0], colors[1], n_out) @@ -538,27 +532,22 @@

Source code for geeViz.geeView

 
     # Remove equally spaced values here.
     if apply_offset:
-        # indList = list(range(len(gradient_dict['hex'])))
         offset = len(gradient_dict["hex"]) - n
         sliceval = []
-        # print(('len(gradient_dict)',len(gradient_dict['hex'])))
-        # print(('offset',offset))
 
         for i in range(1, offset + 1):
             sliceval.append(int(len(gradient_dict["hex"]) * i / float(offset + 2)))
-        print(gradient_dict["hex"])
-        print(("sliceval", sliceval))
+
         for k in ("hex", "r", "g", "b"):
             gradient_dict[k] = [i for j, i in enumerate(gradient_dict[k]) if j not in sliceval]
-        # print(('new len dict', len(gradient_dict['hex'])))
-    print(gradient_dict["hex"], len(gradient_dict["hex"]))
+
     return gradient_dict
[docs] -def get_poly_gradient_ct(palette, min, max): +def get_poly_gradient_ct(palette: list[str], min: int, max: int) -> list[str]: """ Take a palette and a set of min and max stretch values to get a 1:1 value to color hex list @@ -571,15 +560,18 @@

Source code for geeViz.geeView

 
     Returns:
         list: A list of linearly interpolated hex codes where there is 1:1 color to value from min-max (inclusive)
+
+    >>> import geeViz.geeView as gv
+    >>> viz = {"palette": ["#FFFF00", "00F", "0FF", "FF0000"], "min": 1, "max": 20}
+    >>> color_ramp = gv.get_poly_gradient_ct(viz["palette"], viz["min"], viz["max"])
+    >>> print("Color ramp:", color_ramp)
+
     """
     ramp = polylinear_gradient(palette, max - min + 1)
     return ramp["hex"]
-# print(get_poly_gradient_ct(["#FFFF00", "00F", "0FF", "FF0000"], 1, 2)) - - ############################################################## ###################################################################### # Function to check if being run inside a notebook @@ -686,7 +678,7 @@

Source code for geeViz.geeView

 # Function for running local web server
 
[docs] -def run_local_server(port=8001): +def run_local_server(port: int = 8001): """ Start a local webserver using the Python http.server @@ -715,7 +707,7 @@

Source code for geeViz.geeView

 # Function to see if port is active
 
[docs] -def isPortActive(port=8001): +def isPortActive(port: int = 8001): """ See if a given port number is currently active @@ -762,7 +754,7 @@

Source code for geeViz.geeView

         turnOffLayersWhenTimeLapseIsOn (bool, default True): Whether all other layers should be turned off when a time lapse is turned on. This is set to True by default to avoid confusing layer order rendering that can occur when time lapses and non-time lapses are visible at the same time. Often this confusion is fine and visualizing time lapses and other layers is desired. Set `Map.turnOffLayersWhenTimeLapseIsOn` to False in this instance.
     """
 
-    def __init__(self, port=8001):
+    def __init__(self, port: int = 8001):
         self.port = port
         self.layerNumber = 1
         self.idDictList = []
@@ -798,7 +790,7 @@ 

Source code for geeViz.geeView

     # Function for adding a layer to the map
 
[docs] - def addLayer(self, image, viz={}, name=None, visible=True): + def addLayer(self, image: ee.Image | ee.ImageCollection | ee.Geometry | ee.Feature | ee.FeatureCollection, viz: dict = {}, name: str | None = None, visible: bool = True): """ Adds GEE object to the mapper object that will then be added to the map user interface with a `view` call. @@ -896,10 +888,13 @@

Source code for geeViz.geeView

 
         """
         if name == None:
-            name = "Layer " + str(self.layerNumber)
+            name = f"Layer {self.layerNumber}"
             self.layerNumber += 1
         print("Adding layer: " + name)
 
+        # Make sure not to update viz dictionary elsewhere
+        viz = dict(viz)
+
         # Handle reducer if ee object is given
         if "reducer" in viz.keys():
 
@@ -928,7 +923,7 @@ 

Source code for geeViz.geeView

             imageType = type(image).__name__
             layerType = self.typeLookup[imageType]
             viz["layerType"] = layerType
-            # print("Type:", imageType, viz["layerType"])
+
         if not isinstance(image, dict):
             image = image.serialize()
             idDict["item"] = image
@@ -950,7 +945,7 @@ 

Source code for geeViz.geeView

     # Function for adding a layer to the map
 
[docs] - def addTimeLapse(self, image, viz={}, name=None, visible=True): + def addTimeLapse(self, image: ee.ImageCollection, viz: dict = {}, name: str | None = None, visible: bool = True): """ Adds GEE ImageCollection object to the mapper object that will then be added as an interactive time lapse in the map user interface with a `view` call. @@ -1051,6 +1046,9 @@

Source code for geeViz.geeView

             self.layerNumber += 1
         print("Adding layer: " + name)
 
+        # Make sure not to update viz dictionary elsewhere
+        viz = dict(viz)
+
         # Handle reducer if ee object is given - delete it
         if "reducer" in viz.keys():
             del viz["reducer"]
@@ -1082,7 +1080,7 @@ 

Source code for geeViz.geeView

     # Function for adding a select layer to the map
 
[docs] - def addSelectLayer(self, featureCollection, viz={}, name=None): + def addSelectLayer(self, featureCollection: ee.FeatureCollection, viz: dict = {}, name: str | None = None): """ Adds GEE featureCollection to the mapper object that will then be added as an interactive selection layer in the map user interface with a `view` call. This layer will be availble for selecting areas to include in area summary charts. @@ -1116,6 +1114,10 @@

Source code for geeViz.geeView

         if name == None:
             name = "Layer " + str(self.layerNumber)
             self.layerNumber += 1
+
+        # Make sure not to update viz dictionary elsewhere
+        viz = dict(viz)
+
         print("Adding layer: " + name)
 
         # Get the id and populate dictionary
@@ -1133,7 +1135,7 @@ 

Source code for geeViz.geeView

     # Function for centering on a GEE object that has a geometry
 
[docs] - def setCenter(self, lng, lat, zoom=None): + def setCenter(self, lng: float, lat: float, zoom: int | None = None): """ Center the map on a specified point and optional zoom on loading @@ -1141,6 +1143,10 @@

Source code for geeViz.geeView

             lng (int or float): The longitude to center the map on
             lat (int or float): The latitude to center the map on
             zoom (int, optional): If provided, will force the map to zoom to this level after centering it on the provided coordinates. If not provided, the current zoom level will be used.
+
+        >>> from geeViz.geeView import *
+        >>> Map.setCenter(-111,41,10)
+        >>> Map.view()
         """
 
         command = f"Map.setCenter({lng},{lat},{json.dumps(zoom)})"
@@ -1152,12 +1158,16 @@ 

Source code for geeViz.geeView

     # Function for setting the map zoom
 
[docs] - def setZoom(self, zoom): + def setZoom(self, zoom: int): """ Set the map zoom level Args: zoom (int): The zoom level to set the map to on loading. + + >>> from geeViz.geeView import * + >>> Map.setZoom(10) + >>> Map.view() """ self.mapCommandList.append(f"map.setZoom({zoom})")
@@ -1166,13 +1176,20 @@

Source code for geeViz.geeView

     # Function for centering on a GEE object that has a geometry
 
[docs] - def centerObject(self, feature, zoom=None): + def centerObject(self, feature: ee.Geometry | ee.Feature | ee.FeatureCollection | ee.Image, zoom: int | None = None): """ Center the map on an object on loading Args: feature (Feature, FeatureCollection, or Geometry): The object to center the map on zoom (int, optional): If provided, will force the map to zoom to this level after centering it on the object. If not provided, the highest zoom level that allows the feature to be viewed fully will be used. + + >>> from geeViz.geeView import * + >>> pt = ee.Geometry.Point([-111, 41]) + >>> Map.addLayer(pt.buffer(10), {}, "Plot") + >>> Map.centerObject(pt) + >>> Map.view() + """ try: bounds = json.dumps(feature.geometry().bounds(100, "EPSG:4326").getInfo()) @@ -1190,7 +1207,7 @@

Source code for geeViz.geeView

     # Function for launching the web map after all adding to the map has been completed
 
[docs] - def view(self, open_browser=None, open_iframe=None, iframe_height=525): + def view(self, open_browser: bool | None = None, open_iframe: bool | None = None, iframe_height: int = 525): """ Compiles all map objects and commands and starts the map server @@ -1200,6 +1217,12 @@

Source code for geeViz.geeView

             open_iframe (bool): Whether or not to open an iframe. If unspecified, will automatically be selected depending on whether geeViz is being used in a notebook (True) or not (False).
 
             iframe_height (int, default 525): The height of the iframe shown if running inside a notebook
+
+        >>> from geeViz.geeView import *
+        >>> lcms = ee.ImageCollection("USFS/GTAC/LCMS/v2023-9").filter('study_area=="CONUS"')
+        >>> Map.addLayer(lcms, {"autoViz": True, "canAreaChart": True, "areaChartParams": {"line": True, "sankey": True}}, "LCMS")
+        >>> Map.turnOnInspector()
+        >>> Map.view()
         """
         print("Starting webmap")
 
@@ -1254,22 +1277,8 @@ 

Source code for geeViz.geeView

         oo = open(self.ee_run, "w")
         oo.writelines(lines)
         oo.close()
-        # time.sleep(5)
-
-        # if not self.isNotebook:
-        #     self.Map.save(os.path.join(folium_html_folder,folium_html))
-        #     if not geeView.isPortActive(self.port):
-        #         print('Starting local web server at: http://localhost:{}/{}/'.format(self.port,geeView.geeViewFolder))
-        #         geeView.run_local_server(self.port)
-        #         print('Done')
-        #     else:
-        #         print('Local web server at: http://localhost:{}/{}/ already serving.'.format(self.port,geeView.geeViewFolder))
-        #     if open_browser:
-        #         geeView.webbrowser.open('http://localhost:{}/{}/{}'.format(self.port,geeView.geeViewFolder,folium_html),new = 1)
-
-        # else:
-        #     display(self.Map)
 
+        # Find if port is already active and only start it if it is not
         if not isPortActive(self.port):
             print("Starting local web server at: http://localhost:{}/{}/".format(self.port, geeViewFolder))
             run_local_server(self.port)
@@ -1277,8 +1286,8 @@ 

Source code for geeViz.geeView

 
         else:
             print("Local web server at: http://localhost:{}/{}/ already serving.".format(self.port, geeViewFolder))
-            # print('Refresh browser instance')
 
+        # Open viewer in browser or iframe in notebook
         print("cwd", os.getcwd())
         if IS_COLAB:
             proxy_js = "google.colab.kernel.proxyPort({})".format(self.port)
@@ -1313,6 +1322,13 @@ 

Source code for geeViz.geeView

     def clearMap(self):
         """
         Removes all map layers and commands - useful if running geeViz in a notebook and don't want layers/commands from a prior code block to still be included.
+
+        >>> from geeViz.geeView import *
+        >>> lcms = ee.ImageCollection("USFS/GTAC/LCMS/v2023-9").filter('study_area=="CONUS"')
+        >>> Map.addLayer(lcms, {"autoViz": True}, "LCMS") # Layer
+        >>> Map.turnOnInspector() # Command
+        >>> Map.clearMap() # Clear map layer and commands
+        >>> Map.view()
         """
         self.layerNumber = 1
         self.idDictList = []
@@ -1324,6 +1340,13 @@ 

Source code for geeViz.geeView

     def clearMapLayers(self):
         """
         Removes all map layers - useful if running geeViz in a notebook and don't want layers from a prior code block to still be included, but want commands to remain.
+
+        >>> from geeViz.geeView import *
+        >>> lcms = ee.ImageCollection("USFS/GTAC/LCMS/v2023-9").filter('study_area=="CONUS"')
+        >>> Map.addLayer(lcms, {"autoViz": True}, "LCMS") # Layer - this will be removed
+        >>> Map.turnOnInspector() # Command - this will remain (even though there will be no layers to query)
+        >>> Map.clearMapLayers() # Clear map layer only and leave commands
+        >>> Map.view()
         """
         self.layerNumber = 1
         self.idDictList = []
@@ -1334,6 +1357,13 @@

Source code for geeViz.geeView

     def clearMapCommands(self):
         """
         Removes all map commands - useful if running geeViz in a notebook and don't want commands from a prior code block to still be included, but want layers to remain.
+
+        >>> from geeViz.geeView import *
+        >>> lcms = ee.ImageCollection("USFS/GTAC/LCMS/v2023-9").filter('study_area=="CONUS"')
+        >>> Map.addLayer(lcms, {"autoViz": True}, "LCMS") # Layer
+        >>> Map.turnOnInspector() # Command - this will be removed
+        >>> Map.clearMapCommands() # Clear map comands only and leave layers
+        >>> Map.view()
         """
         self.mapCommandList = []
@@ -1347,6 +1377,13 @@

Source code for geeViz.geeView

 
         Args:
             title (str, default geeViz Data Explorer): The title to appear in the header on the left sidebar as well as the title of the viewer webpage.
+
+        >>> from geeViz.geeView import *
+        >>> lcms = ee.ImageCollection("USFS/GTAC/LCMS/v2023-9").filter('study_area=="CONUS"')
+        >>> Map.addLayer(lcms, {"autoViz": True}, "LCMS")
+        >>> Map.turnOnInspector()
+        >>> Map.setMapTitle("<h2>A Custom Title!!!</h2>")  # Set custom map title
+        >>> Map.view()
         """
         title_command = f'Map.setTitle("{title}")'
         if title_command not in self.mapCommandList:
@@ -1358,10 +1395,18 @@ 

Source code for geeViz.geeView

 [docs]
     def setTitle(self, title):
         """
+        Redundant function for setMapTitle.
         Set the title that appears in the left sidebar header and the page title
 
         Args:
             title (str, default geeViz Data Explorer): The title to appear in the header on the left sidebar as well as the title of the viewer webpage.
+
+        >>> from geeViz.geeView import *
+        >>> lcms = ee.ImageCollection("USFS/GTAC/LCMS/v2023-9").filter('study_area=="CONUS"')
+        >>> Map.addLayer(lcms, {"autoViz": True}, "LCMS")
+        >>> Map.turnOnInspector()
+        >>> Map.setMapTitle("<h2>A Custom Title!!!</h2>")  # Set custom map title
+        >>> Map.view()
         """
         self.setMapTitle(title)
@@ -1370,15 +1415,27 @@

Source code for geeViz.geeView

     # Functions to set various click query properties
 
[docs] - def setQueryCRS(self, crs): + def setQueryCRS(self, crs: str): """ The coordinate reference system string to query layers with Args: crs (str, default "EPSG:5070"): Which projection (CRS) to use for querying map layers. + + >>> import geeViz.getImagesLib as gil + >>> from geeViz.geeView import * + >>> crs = gil.common_projections["NLCD_AK"]["crs"] + >>> transform = gil.common_projections["NLCD_AK"]["transform"] + >>> lcms = ee.ImageCollection("USFS/GTAC/LCMS/v2023-9").filter('study_area=="SEAK"') + >>> Map.addLayer(lcms, {"autoViz": True}, "LCMS") + >>> Map.turnOnInspector() + >>> Map.setQueryCRS(crs) + >>> Map.setQueryTransform(transform) + >>> Map.setCenter(-144.36390353, 60.20479529215, 8) + >>> Map.view() """ print("Setting click query crs to: {}".format(crs)) - cmd = f'Map.setQueryCRS("{crs}");' + cmd = f"Map.setQueryCRS('{crs}');" if cmd not in self.mapCommandList: self.mapCommandList.append(cmd)
@@ -1386,12 +1443,24 @@

Source code for geeViz.geeView

     ######################################################################
 
[docs] - def setQueryScale(self, scale): + def setQueryScale(self, scale: int): """ What scale to query map layers with. Will also update the size of the box drawn on the map query layers are queried. Args: scale (int, default None): The spatial resolution to use for querying map layers in meters. If set, the query transform will be set to None in the map viewer. + + >>> import geeViz.getImagesLib as gil + >>> from geeViz.geeView import * + >>> s2s = gil.superSimpleGetS2(ee.Geometry.Point([-107.61, 37.85]), "2024-01-01", "2024-12-31", 190, 250) + >>> projection = s2s.first().select(["nir"]).projection().getInfo() + >>> Map.addLayer(s2s.median(), gil.vizParamsFalse10k, "Sentinel-2 Composite") + >>> Map.turnOnInspector() + >>> Map.setQueryCRS(projection["crs"]) + >>> Map.setQueryScale(projection["transform"][0]) + >>> Map.centerObject(s2s.first()) + >>> Map.view() + """ print("Setting click query scale to: {}".format(scale)) cmd = f"Map.setQueryScale({scale});" @@ -1402,12 +1471,24 @@

Source code for geeViz.geeView

     ######################################################################
 
[docs] - def setQueryTransform(self, transform): + def setQueryTransform(self, transform: list[int]): """ What transform to query map layers with. Will also update the size of the box drawn on the map query layers are queried. Args: transform (list, default [30, 0, -2361915, 0, -30, 3177735]): The snap to grid to use for querying layers on the map. If set, the query scale will be set to None in the map viewer. + + >>> import geeViz.getImagesLib as gil + >>> from geeViz.geeView import * + >>> s2s = gil.superSimpleGetS2(ee.Geometry.Point([-107.61, 37.85]), "2024-01-01", "2024-12-31", 190, 250) + >>> projection = s2s.first().select(["nir"]).projection().getInfo() + >>> Map.addLayer(s2s.median(), gil.vizParamsFalse10k, "Sentinel-2 Composite") + >>> Map.turnOnInspector() + >>> Map.setQueryCRS(projection["crs"]) + >>> Map.setQueryTransform(projection["transform"]) + >>> Map.centerObject(s2s.first()) + >>> Map.view() + """ print("Setting click query transform to: {}".format(transform)) cmd = f"Map.setQueryTransform({transform});" @@ -1418,13 +1499,27 @@

Source code for geeViz.geeView

     ######################################################################
 
[docs] - def setQueryPrecision(self, chartPrecision=3, chartDecimalProportion=0.25): + def setQueryPrecision(self, chartPrecision: int = 3, chartDecimalProportion: float = 0.25): """ What level of precision to show for queried layers. This avoids showing too many digits after the decimal. Args: chartPrecision (int, default 3): Will show the larger of `chartPrecision` decimal places or ceiling(`chartDecimalProportion` * total decimal places). E.g. if the number is 1.12345678, 0.25 of 8 decimal places is 2, so 3 will be used and yield 1.123. chartDecimalProportion (float, default 0.25): Will show the larger of `chartPrecision` decimal places or `chartDecimalProportion` * total decimal places. E.g. if the number is 1.1234567891234, ceiling(0.25 of 13) decimal places is 4, so 4 will be used and yield 1.1235. + + >>> import geeViz.getImagesLib as gil + >>> from geeViz.geeView import * + >>> s2s = gil.superSimpleGetS2(ee.Geometry.Point([-107.61, 37.85]), "2024-01-01", "2024-12-31", 190, 250).select(["blue", "green", "red", "nir", "swir1", "swir2"]) + >>> projection = s2s.first().select(["nir"]).projection().getInfo() + >>> s2s = s2s.map(lambda img: ee.Image(img).divide(10000).set("system:time_start",img.date().millis())) + >>> Map.addLayer(s2s, gil.vizParamsFalse, "Sentinel-2 Images") + >>> Map.addLayer(s2s.median(), gil.vizParamsFalse, "Sentinel-2 Composite") + >>> Map.turnOnInspector() + >>> Map.setQueryCRS(projection["crs"]) + >>> Map.setQueryTransform(projection["transform"]) + >>> Map.setQueryPrecision(chartPrecision=2, chartDecimalProportion=0.1) + >>> Map.centerObject(s2s.first()) + >>> Map.view() """ print("Setting click query precision to: {}".format(chartPrecision)) cmd = f"Map.setQueryPrecision({chartPrecision},{chartDecimalProportion});" @@ -1435,12 +1530,21 @@

Source code for geeViz.geeView

     ######################################################################
 
[docs] - def setQueryDateFormat(self, defaultQueryDateFormat="YYYY-MM-dd"): + def setQueryDateFormat(self, defaultQueryDateFormat: str = "YYYY-MM-dd"): """ Set the date format to be used for any dates when querying. Args: defaultQueryDateFormat (str, default "YYYY-MM-dd"): The date format string to use for query outputs with dates. To simplify date outputs, "YYYY" is often used instead of the default. + + >>> from geeViz.geeView import * + >>> lcms = ee.ImageCollection("USFS/GTAC/LCMS/v2023-9").filter('study_area=="CONUS"') + >>> Map.addLayer(lcms.select([1]), {"autoViz": True}, "LCMS Land Cover") + >>> Map.addLayer(lcms.select([0]), {"autoViz": True}, "LCMS Change") + >>> Map.turnOnInspector() + >>> Map.setQueryDateFormat("YYYY") + >>> Map.view() + """ print("Setting default query date format to: {}".format(defaultQueryDateFormat)) cmd = f'Map.setQueryDateFormat("{defaultQueryDateFormat}");' @@ -1451,12 +1555,19 @@

Source code for geeViz.geeView

     ######################################################################
 
[docs] - def setQueryBoxColor(self, color): + def setQueryBoxColor(self, color: str): """ Set the color of the query box to something other than yellow Args: color (str, default "FFFF00"): Set the default query box color shown on the map by providing a hex color. + + >>> from geeViz.geeView import * + >>> lcms = ee.ImageCollection("USFS/GTAC/LCMS/v2023-9").filter('study_area=="CONUS"') + >>> Map.addLayer(lcms.select([1]), {"autoViz": True}, "LCMS Land Cover") + >>> Map.turnOnInspector() + >>> Map.setQueryBoxColor("0FF") + >>> Map.view() """ print("Setting click query box color to: {}".format(color)) cmd = f'Map.setQueryBoxColor("{color}");' @@ -1474,6 +1585,13 @@

Source code for geeViz.geeView

     def setQueryToInfoWindow(self):
         """
         Set the location of query outputs to an info window popup over the map
+
+        >>> from geeViz.geeView import *
+        >>> lcms = ee.ImageCollection("USFS/GTAC/LCMS/v2023-9").filter('study_area=="CONUS"')
+        >>> Map.addLayer(lcms.select([1]), {"autoViz": True}, "LCMS Land Cover")
+        >>> Map.turnOnInspector()
+        >>> Map.setQueryToInfoWindow()
+        >>> Map.view()
         """
         self.setQueryWindowMode("infoWindow")
@@ -1483,6 +1601,13 @@

Source code for geeViz.geeView

     def setQueryToSidePane(self):
         """
         Set the location of query outputs to the right sidebar above the legend
+
+        >>> from geeViz.geeView import *
+        >>> lcms = ee.ImageCollection("USFS/GTAC/LCMS/v2023-9").filter('study_area=="CONUS"')
+        >>> Map.addLayer(lcms.select([1]), {"autoViz": True}, "LCMS Land Cover")
+        >>> Map.turnOnInspector()
+        >>> Map.setQueryToSidePane()
+        >>> Map.view()
         """
         self.setQueryWindowMode("sidePane")
@@ -1494,6 +1619,12 @@

Source code for geeViz.geeView

     def turnOnInspector(self):
         """
         Turn on the query inspector tool upon map loading. This is used frequently so map layers can be queried as soon as the map viewer loads.
+
+        >>> from geeViz.geeView import *
+        >>> lcms = ee.ImageCollection("USFS/GTAC/LCMS/v2023-9").filter('study_area=="CONUS"')
+        >>> Map.addLayer(lcms.select([1]), {"autoViz": True}, "LCMS Land Cover")
+        >>> Map.turnOnInspector()
+        >>> Map.view()
         """
         query_command = "Map.turnOnInspector();"
         if query_command not in self.mapCommandList:
@@ -1506,6 +1637,12 @@ 

Source code for geeViz.geeView

     def turnOnAutoAreaCharting(self):
         """
         Turn on automatic area charting upon map loading. This will automatically update charts by summarizing any visible layers with "canAreaChart" : True any time the map finishes panning or zooming.
+
+        >>> from geeViz.geeView import *
+        >>> lcms = ee.ImageCollection("USFS/GTAC/LCMS/v2023-9").filter('study_area=="CONUS"')
+        >>> Map.addLayer(lcms.select([1]), {"autoViz": True,'canAreaChart':True}, "LCMS Land Cover")
+        >>> Map.turnOnAutoAreaCharting()
+        >>> Map.view()
         """
         query_command = "Map.turnOnAutoAreaCharting();"
         if query_command not in self.mapCommandList:
@@ -1517,6 +1654,12 @@ 

Source code for geeViz.geeView

     def turnOnUserDefinedAreaCharting(self):
         """
         Turn on area charting by a user defined area upon map loading. This will update charts by summarizing any visible layers with "canAreaChart" : True when the user draws an area to summarize and hits the `Chart Selected Areas` button in the user interface under `Area Tools -> User-Defined Area`.
+
+        >>> from geeViz.geeView import *
+        >>> lcms = ee.ImageCollection("USFS/GTAC/LCMS/v2023-9").filter('study_area=="CONUS"')
+        >>> Map.addLayer(lcms.select([1]), {"autoViz": True,'canAreaChart':True}, "LCMS Land Cover")
+        >>> Map.turnOnUserDefinedAreaCharting()
+        >>> Map.view()
         """
         query_command = "Map.turnOnUserDefinedAreaCharting();"
         if query_command not in self.mapCommandList:
@@ -1528,6 +1671,15 @@ 

Source code for geeViz.geeView

     def turnOnSelectionAreaCharting(self):
         """
         Turn on area charting by a user selected area upon map loading. This will update charts by summarizing any visible layers with "canAreaChart" : True when the user selects selection areas to summarize and hits the `Chart Selected Areas` button in the user interface under `Area Tools -> Select an Area on Map`.
+
+        >>> from geeViz.geeView import *
+        >>> lcms = ee.ImageCollection("USFS/GTAC/LCMS/v2023-9").filter('study_area=="CONUS"')
+        >>> Map.addLayer(lcms.select([1]), {"autoViz": True,'canAreaChart':True}, "LCMS Land Cover")
+        >>> mtbsBoundaries = ee.FeatureCollection("USFS/GTAC/MTBS/burned_area_boundaries/v1")
+        >>> mtbsBoundaries = mtbsBoundaries.map(lambda f: f.set("system:time_start", f.get("Ig_Date")))
+        >>> Map.addSelectLayer(mtbsBoundaries, {"strokeColor": "00F", "selectLayerNameProperty": "Incid_Name"}, "MTBS Fire Boundaries")
+        >>> Map.turnOnSelectionAreaCharting()
+        >>> Map.view()
         """
         query_command = "Map.turnOnSelectionAreaCharting();"
         if query_command not in self.mapCommandList:
@@ -1536,7 +1688,7 @@ 

Source code for geeViz.geeView

 
 
[docs] - def addAreaChartLayer(self, image, params={}, name=None, shouldChart=True): + def addAreaChartLayer(self, image: ee.Image | ee.ImageCollection, params: dict = {}, name: str | None = None, shouldChart: bool = True): """ Use this method to add a layer for area charting that you do not want as a map layer as well. Once you add all area chart layers to the map, you can turn them on using the `Map.populateAreaChartLayerSelect` method. This will create a selection menu inside the `Area Tools -> Area Tools Parameters` menu. You can then turn layers to include in any area charts on and off from that menu. @@ -1621,6 +1773,17 @@

Source code for geeViz.geeView

     def populateAreaChartLayerSelect(self):
         """
         Once you add all area chart layers to the map, you can turn them on using this method- `Map.populateAreaChartLayerSelect`. This will create a selection menu inside the `Area Tools -> Area Tools Parameters` menu. You can then turn layers to include in any area charts on and off from that menu.
+
+        >>> import geeViz.geeView as gv
+        >>> Map = gv.Map
+        >>> ee = gv.ee
+        >>> lcms = ee.ImageCollection("USFS/GTAC/LCMS/v2023-9").filter('study_area=="CONUS"')
+        >>> Map.addLayer(lcms.select(["Change_Raw_Probability.*"]), {"reducer": ee.Reducer.stdDev(), "min": 0, "max": 10}, "LCMS Change Prob")
+        >>> Map.addAreaChartLayer(lcms, {"line": True, "layerType": "ImageCollection"}, "LCMS All Thematic Classes Line", True)
+        >>> Map.addAreaChartLayer(lcms, {"sankey": True}, "LCMS All Thematic Classes Sankey", True)
+        >>> Map.populateAreaChartLayerSelect()
+        >>> Map.turnOnAutoAreaCharting()
+        >>> Map.view()
         """
         query_command = "areaChart.populateChartLayerSelect();"
 
@@ -1629,15 +1792,49 @@ 

Source code for geeViz.geeView

 
 
     # Functions to handle setting query output y labels
-    def setYLabelMaxLength(self, maxLength):
+
+[docs] + def setYLabelMaxLength(self, maxLength: int): + """ + Set the maximum length a Y axis label can have in charts + + Args: + maxLength (int, default 30): Maximum number of characters in a Y axis label. + + >>> from geeViz.geeView import * + >>> lcms = ee.ImageCollection("USFS/GTAC/LCMS/v2023-9").filter('study_area=="CONUS"') + >>> Map.addLayer(lcms.select([1]), {"autoViz": True}, "LCMS Land Cover") + >>> Map.setYLabelMaxLength(10) # Double-click on map to inspect area. Change to a larger number and rerun to see how Y labels are impacted + >>> Map.turnOnInspector() + >>> Map.setCenter(-109.446, 43.620, 12) + >>> Map.view() + """ command = f"yLabelMaxLength = {maxLength}" if command not in self.mapCommandList: - self.mapCommandList.append(command) + self.mapCommandList.append(command)
+ - def setYLabelBreakLength(self, maxLength): +
+[docs] + def setYLabelBreakLength(self, maxLength: int): + """ + Set the maximum length per line a Y axis label can have in charts + + Args: + maxLength (int, default 10): Maximum number of characters in each line of a Y axis label. Will break total characters (setYLabelMaxLength) until maxLines (setYLabelMaxLines) is reached + + >>> from geeViz.geeView import * + >>> lcms = ee.ImageCollection("USFS/GTAC/LCMS/v2023-9").filter('study_area=="CONUS"') + >>> Map.addLayer(lcms.select([1]), {"autoViz": True}, "LCMS Land Cover") + >>> Map.setYLabelBreakLength(5) # Double-click on map to inspect area. Change to a larger number and rerun to see how Y labels are impacted + >>> Map.turnOnInspector() + >>> Map.setCenter(-109.446, 43.620, 12) + >>> Map.view() + """ command = f"yLabelBreakLength = {maxLength}" if command not in self.mapCommandList: - self.mapCommandList.append(command) + self.mapCommandList.append(command)
+
[docs] @@ -1647,6 +1844,14 @@

Source code for geeViz.geeView

 
         Args:
             maxLines (int, default 5): The maximum number of lines each y-axis label can have. Will simply exclude any remaining lines.
+
+        >>> from geeViz.geeView import *
+        >>> lcms = ee.ImageCollection("USFS/GTAC/LCMS/v2023-9").filter('study_area=="CONUS"')
+        >>> Map.addLayer(lcms.select([1]), {"autoViz": True}, "LCMS Land Cover")
+        >>> Map.setYLabelMaxLines(3)  # Double-click on map to inspect area. Change to a larger number and rerun to see how Y labels are impacted
+        >>> Map.turnOnInspector()
+        >>> Map.setCenter(-109.446, 43.620, 12)
+        >>> Map.view()
         """
         command = f"yLabelMaxLines = {maxLines}"
         if command not in self.mapCommandList:
@@ -1655,12 +1860,20 @@ 

Source code for geeViz.geeView

 
 
[docs] - def setYLabelFontSize(self, fontSize): + def setYLabelFontSize(self, fontSize: int): """ Set the size of the font on the y-axis labels. Useful when y-axis labels are too large to fit on the chart. Args: fontSize (int, default 10): The font size used on the y-axis labels for query charting. + + >>> from geeViz.geeView import * + >>> lcms = ee.ImageCollection("USFS/GTAC/LCMS/v2023-9").filter('study_area=="CONUS"') + >>> Map.addLayer(lcms.select([1]), {"autoViz": True}, "LCMS Land Cover") + >>> Map.setYLabelFontSize(8) # Double-click on map to inspect area. Change to a different number and rerun to see how Y labels are impacted + >>> Map.turnOnInspector() + >>> Map.setCenter(-109.446, 43.620, 12) + >>> Map.view() """ command = f"yLabelFontSize = {fontSize}" if command not in self.mapCommandList: @@ -1670,12 +1883,22 @@

Source code for geeViz.geeView

     # Specify whether layers can be re-ordered by the user
 
[docs] - def setCanReorderLayers(self, canReorderLayers): + def setCanReorderLayers(self, canReorderLayers: bool): """ Set whether layers can be reordered by dragging layer user interface objects. By default all non timelapse and non geojson layers can be reordereed by dragging. Args: - canReorderLayers (bool): Set whether layers can be reordered by dragging layer user interface objects. By default all non timelapse and non geojson layers can be reordereed by dragging. + canReorderLayers (bool, default True): Set whether layers can be reordered by dragging layer user interface objects. By default all non timelapse and non geojson layers can be reordereed by dragging. + + >>> from geeViz.geeView import * + >>> lcms = ee.ImageCollection("USFS/GTAC/LCMS/v2023-9").filter('study_area=="CONUS"') + >>> Map.addLayer(lcms.select([2]), {"autoViz": True}, "LCMS Land Use") + >>> Map.addLayer(lcms.select([1]), {"autoViz": True}, "LCMS Land Cover") + >>> Map.addLayer(lcms.select([0]), {"autoViz": True}, "LCMS Change") + >>> Map.turnOnInspector() + >>> Map.setCanReorderLayers(False) # Notice you cannot drag and reorder layers. Change to True and rerun and notice you now can drag layers to reorder + >>> Map.setCenter(-109.446, 43.620, 12) + >>> Map.view() """ command = f"Map.canReorderLayers = {str(canReorderLayers).lower()};" if command not in self.mapCommandList: @@ -1687,7 +1910,20 @@

Source code for geeViz.geeView

 [docs]
     def turnOffAllLayers(self):
         """
-        Turn off all layers added to the mapper object
+        Turn off all layers added to the mapper object. Typically used in notebooks or iPython when you want to allow existing layers to remain, but want to turn them all off.
+
+        >>> #%%
+        >>> from geeViz.geeView import *
+        >>> lcms = ee.ImageCollection("USFS/GTAC/LCMS/v2023-9").filter('study_area=="CONUS"')
+        >>> Map.addLayer(lcms.select([2]), {"autoViz": True}, "LCMS Land Use")
+        >>> Map.addLayer(lcms.select([1]), {"autoViz": True}, "LCMS Land Cover")
+        >>> Map.turnOnInspector()
+        >>> Map.setCenter(-109.446, 43.620, 5)
+        >>> Map.view()
+        >>> #%%
+        >>> Map.turnOffAllLayers()
+        >>> Map.addLayer(lcms.select([0]), {"autoViz": True}, "LCMS Change")
+        >>> Map.view()
         """
         update = {"visible": "false"}
         self.idDictList = [{**d, **update} for d in self.idDictList]
@@ -1698,6 +1934,19 @@

Source code for geeViz.geeView

     def turnOnAllLayers(self):
         """
         Turn on all layers added to the mapper object
+
+        >>> #%%
+        >>> from geeViz.geeView import *
+        >>> lcms = ee.ImageCollection("USFS/GTAC/LCMS/v2023-9").filter('study_area=="CONUS"')
+        >>> Map.addLayer(lcms.select([2]), {"autoViz": True}, "LCMS Land Use",False)
+        >>> Map.addLayer(lcms.select([1]), {"autoViz": True}, "LCMS Land Cover",False)
+        >>> Map.turnOnInspector()
+        >>> Map.setCenter(-109.446, 43.620, 5)
+        >>> Map.view()
+        >>> #%%
+        >>> Map.turnOnAllLayers()
+        >>> Map.addLayer(lcms.select([0]), {"autoViz": True}, "LCMS Change")
+        >>> Map.view()
         """
         update = {"visible": "true"}
         self.idDictList = [{**d, **update} for d in self.idDictList]
@@ -1742,7 +1991,7 @@

Source code for geeViz.geeView

       
     
   
-
+
diff --git a/docs/build/html/_modules/geeViz/getImagesLib.html b/docs/build/html/_modules/geeViz/getImagesLib.html index 052def2..25da8d6 100644 --- a/docs/build/html/_modules/geeViz/getImagesLib.html +++ b/docs/build/html/_modules/geeViz/getImagesLib.html @@ -5,7 +5,7 @@ - geeViz.getImagesLib - geeViz "2024.9.2" docs + geeViz.getImagesLib - geeViz "2024.9.3" docs @@ -141,7 +141,7 @@
@@ -167,7 +167,7 @@
- geeViz "2024.9.2" docs + geeViz "2024.9.3" docs @@ -269,7 +269,7 @@

Source code for geeViz.getImagesLib

 import geeViz.cloudStorageManagerLib as cml
 import geeViz.assetManagerLib as aml
 import geeViz.taskManagerLib as tml
-import math, ee, json, pdb
+import math, ee, json, pdb, datetime
 from threading import Thread
 
 # %%
@@ -2937,7 +2937,7 @@ 

Source code for geeViz.getImagesLib

 
[docs] def getS1( - studyArea: ee.Geometry, + studyArea: ee.Geometry | ee.Feature | ee.FeatureCollection, startYear: int, endYear: int, startJulian: int, @@ -3054,11 +3054,11 @@

Source code for geeViz.getImagesLib

 
[docs] def getS2( - studyArea: ee.Geometry, - startDate: ee.Date, - endDate: ee.Date, - startJulian: int, - endJulian: int, + studyArea: ee.Geometry | ee.Feature | ee.FeatureCollection, + startDate: ee.Date | datetime.datetime | str, + endDate: ee.Date | datetime.datetime | str, + startJulian: int = 1, + endJulian: int = 365, resampleMethod: str = "nearest", toaOrSR: str = "TOA", convertToDailyMosaics: bool = True, @@ -3066,12 +3066,12 @@

Source code for geeViz.getImagesLib

     addCloudScorePlus: bool = True,
     cloudScorePlusScore: str = "cs",
 ) -> ee.ImageCollection:
-    """Loads and processes Sentinel-2 data for a given area and time period.
+    """Loads Sentinel-2 data for a given area and time period and joins cloud score information. Partially deprecated in favor of the simpler superSimpleGetS2.
 
     Args:
         studyArea: The geographic area of interest.
-        startDate: The start date of the desired data.
-        endDate: The end date of the desired data.
+        startDate: The start date of the desired data. Can be an ee.Date object, datetime object, or date string.
+        endDate: The end date of the desired data. Can be an ee.Date object, datetime object, or date string.
         startJulian: The start Julian day of the desired data.
         endJulian: The end Julian day of the desired data.
         resampleMethod: The resampling method (default: "nearest").
@@ -3081,13 +3081,27 @@ 

Source code for geeViz.getImagesLib

         addCloudScorePlus: Whether to add cloud score plus data (default: True).
         cloudScorePlusScore: The band name for cloud score plus (default: "cs").
 
-
     Returns:
-        An Earth Engine ImageCollection containing the processed Sentinel-2 data.
+        ee.ImageCollection: A collection of Sentinel-2 satellite images filtered by the specified criteria.
+
+
+    >>> import geeViz.getImagesLib as gil
+    >>> Map = gil.Map
+    >>> ee = gil.ee
+    >>> studyArea = gil.testAreas["CA"]
+    >>> composite = gil.getS2(studyArea, "2024-01-01", "2024-12-31", 190, 250).median()
+    >>> Map.addLayer(composite, gil.vizParamsFalse, "Sentinel-2 Composite")
+    >>> Map.addLayer(studyArea, {"canQuery": False}, "Study Area")
+    >>> Map.centerObject(studyArea)
+    >>> Map.turnOnInspector()
+    >>> Map.view()
+
     """
     args = formatArgs(locals())
 
     toaOrSR = toaOrSR.upper()
+    startDate = ee.Date(startDate)
+    endDate = ee.Date(endDate)
 
     # Specify S2 continuous bands if resampling is set to something other than near
     s2_continuous_bands = sensorBandNameDict[toaOrSR]
@@ -3307,26 +3321,26 @@ 

Source code for geeViz.getImagesLib

 
[docs] def getLandsat( - studyArea, - startDate, - endDate, - startJulian, - endJulian, - toaOrSR="SR", - includeSLCOffL7=False, - defringeL5=False, - addPixelQA=False, - resampleMethod="near", - landsatCollectionVersion="C2", + studyArea: ee.Geometry | ee.Feature | ee.FeatureCollection, + startDate: ee.Date | datetime.datetime | str, + endDate: ee.Date | datetime.datetime | str, + startJulian: int = 1, + endJulian: int = 365, + toaOrSR: str = "SR", + includeSLCOffL7: bool = False, + defringeL5: bool = False, + addPixelQA: bool = False, + resampleMethod: str = "near", + landsatCollectionVersion: str = "C2", ): - """Retrieves Landsat imagery for a specified study area. + """Retrieves Landsat imagery for a specified study area and date range. Args: studyArea (ee.Geometry, ee.Feature, or ee.FeatureCollection): The geographic area of interest. - startDate (ee.Date or str): The start date of the desired image range. - endDate (ee.Date or str): The end date of the desired image range. - startJulian (int): The start Julian day of the desired image range. - endJulian (int): The end Julian day of the desired image range. + startDate (ee.Date, datetime.datetime, or str): The start date of the desired image range. + endDate (ee.Date, datetime.datetime, or str): The end date of the desired image range. + startJulian (int, optional): The start Julian day of the desired image range. Defaults to 1. + endJulian (int, optional): The end Julian day of the desired image range. Defaults to 365. toaOrSR (str, optional): Whether to retrieve TOA or SR data. Defaults to "SR". includeSLCOffL7 (bool, optional): Whether to include SLC-off L7 data. Defaults to False. defringeL5 (bool, optional): Whether to defringe L5 data. Defaults to False. @@ -3336,9 +3350,26 @@

Source code for geeViz.getImagesLib

 
     Returns:
         ee.ImageCollection: A collection of Landsat images meeting the specified criteria.
+
+
+    >>> import geeViz.getImagesLib as gil
+    >>> Map = gil.Map
+    >>> ee = gil.ee
+    >>> studyArea = gil.testAreas["CA"]
+    >>> composite = gil.getLandsat(studyArea, "2024-01-01", "2024-12-31", 190, 250).median()
+    >>> Map.addLayer(composite, gil.vizParamsFalse, "Landsat Composite")
+    >>> Map.addLayer(studyArea, {"canQuery": False}, "Study Area")
+    >>> Map.centerObject(studyArea)
+    >>> Map.turnOnInspector()
+    >>> Map.view()
+
     """
     args = formatArgs(locals())
 
+    toaOrSR = toaOrSR.upper()
+    startDate = ee.Date(startDate)
+    endDate = ee.Date(endDate)
+
     def getLandsatCollection(landsatCollectionVersion, whichC, toaOrSR):
         c = (
             ee.ImageCollection(landsatCollectionDict[landsatCollectionVersion + "_" + whichC + "_" + toaOrSR])
@@ -4317,11 +4348,25 @@ 

Source code for geeViz.getImagesLib

         An Earth Engine Image representing the medoid mosaic.
 
     Note:
-        * As the data are not normalized in this method, ensuring the medoidIncludeBands have roughly comparable ranges of values
-        helps the function work properly. For example, if temperature is included, it will account for most of the variance
-        thus resulting in a medoid mosaic that will more or less choose values closest to the median temperature only, rather than
-        all the bands
+        * As the data are not normalized in this method, ensuring the medoidIncludeBands have roughly comparable ranges of values helps the function work properly. For example, if temperature is included, it will account for most of the variance thus resulting in a medoid mosaic that will more or less choose values closest to the median temperature only, rather than all the bands
+
         * The function assumes that the image collection has consistent band names and data types.
+
+
+    >>> import geeViz.getImagesLib as gil
+    >>> Map = gil.Map
+    >>> ee = gil.ee
+    >>> studyArea = gil.testAreas["CO"]
+    >>> s2s = gil.superSimpleGetS2(studyArea, "2024-01-01", "2024-12-31", 190, 250)
+    >>> median_composite = s2s.median()
+    >>> medoid_composite = gil.medoidMosaicMSD(s2s, ["green", "red", "nir", "swir1", "swir2"])
+    >>> Map.addLayer(median_composite, gil.vizParamsFalse10k, "Sentinel-2 Median Composite")
+    >>> Map.addLayer(medoid_composite, gil.vizParamsFalse10k, "Sentinel-2 Medoid Composite")
+    >>> Map.addLayer(studyArea, {"canQuery": False}, "Study Area")
+    >>> Map.centerObject(studyArea)
+    >>> Map.turnOnInspector()
+    >>> Map.view()
+
     """
 
     if medoidIncludeBands == None:
@@ -4683,7 +4728,7 @@ 

Source code for geeViz.getImagesLib

         images = yearsTT.map(yrGetter)
         lsT = ee.ImageCollection(ee.FeatureCollection(images).flatten())
 
-        count = lsT.select([0]).count().rename(["compositeObsCount"])
+        count = lsT.select([0]).reduce(ee.Reducer.count()).rename(["compositeObsCount"])
         # Compute median or medoid or apply reducer
         if compositingReducer != None:
             composite = lsT.reduce(compositingReducer)
@@ -5282,19 +5327,52 @@ 

Source code for geeViz.getImagesLib

 #########################################################################
 # Function to get MODIS data from various collections
 # Will pull from daily or 8-day composite collections based on the boolean variable "daily"
+
+[docs] def getModisData( - startYear, - endYear, - startJulian, - endJulian, - daily=False, - maskWQA=False, - zenithThresh=90, - useTempInCloudMask=True, - addLookAngleBands=False, - resampleMethod="near", + startYear: int, + endYear: int, + startJulian: int, + endJulian: int, + daily: bool = False, + maskWQA: bool = False, + zenithThresh: int = 90, + useTempInCloudMask: bool = True, + addLookAngleBands: bool = False, + resampleMethod: str = "near", ): + """ + Retrieves MODIS imagery from Earth Engine for a specified period. Handles joining all MODIS collections for Terra and Aqua and aligning band names + + Args: + startYear (int): The starting year for the data collection. + endYear (int): The ending year for the data collection. + startJulian (int): The starting Julian day of year for the data collection (1-366). + endJulian (int): The ending Julian day of year for the data collection (1-366). + daily (bool, optional): Determines whether to retrieve daily or 8-day composite data. Defaults to False (8-day composite). + maskWQA (bool, optional): Controls whether to mask pixels based on the Quality Assurance (QA) band. Only applicable for daily data (daily=True). Defaults to False. + zenithThresh (float, optional): Sets the threshold for solar zenith angle in degrees. Pixels with zenith angle exceeding this threshold will be masked out. Defaults to 90. + useTempInCloudMask (bool, optional): Determines whether to use the thermal band for cloud masking. Defaults to True. + addLookAngleBands (bool, optional): Controls whether to include view angle bands in the output. Defaults to False. + resampleMethod (str, optional): Specifies the resampling method to apply to the imagery. Valid options include "near", "bilinear", and "bicubic". Defaults to "near" (nearest neighbor). + Returns: + ee.ImageCollection: A collection of MODIS imagery for the specified criteria. + + >>> import geeViz.getImagesLib as gil + >>> Map = gil.Map + >>> ee = gil.ee + >>> crs = gil.common_projections["NLCD_CONUS"]["crs"] + >>> transform = gil.common_projections["NLCD_CONUS"]["transform"] + >>> scale = 240 + >>> transform[0] = scale + >>> transform[4] = -scale + >>> composite = gil.getModisData(2024, 2024, 190, 250, resampleMethod="bicubic").median().reproject(crs, transform) + >>> Map.addLayer(composite, gil.vizParamsFalse, "MODIS Composite") + >>> Map.setCenter(-111, 41, 7) + >>> Map.turnOnInspector() + >>> Map.view() + """ # Find which collections to pull from based on daily or 8-day if daily == False: a250C = modisCDict["eightDaySR250A"] @@ -5414,38 +5492,91 @@

Source code for geeViz.getImagesLib

     if resampleMethod in ["bilinear", "bicubic"]:
         print("Setting resample method to ", resampleMethod)
         joined = joined.map(setResample)
-    return joined
+    return joined
+ +######################################################################### +######################################################################### # Function to get cloud, cloud shadow busted modis images # Takes care of matching different modis collections as well +
+[docs] def getProcessedModis( - startYear, - endYear, - startJulian, - endJulian, - zenithThresh=90, - addLookAngleBands=True, - applyCloudScore=True, - applyTDOM=True, - useTempInCloudMask=True, - cloudScoreThresh=20, - performCloudScoreOffset=True, - cloudScorePctl=10, - zScoreThresh=-1, - shadowSumThresh=0.35, - contractPixels=0, - dilatePixels=2.5, - shadowSumBands=["nir", "swir2"], - resampleMethod="bicubic", - preComputedCloudScoreOffset=None, - preComputedTDOMIRMean=None, - preComputedTDOMIRStdDev=None, - addToMap=False, - crs="EPSG:4326", - scale=250, - transform=None, + startYear: int, + endYear: int, + startJulian: int, + endJulian: int, + zenithThresh: float = 90, + addLookAngleBands: bool = True, + applyCloudScore: bool = True, + applyTDOM: bool = True, + useTempInCloudMask: bool = True, + cloudScoreThresh: int = 20, + performCloudScoreOffset: bool = True, + cloudScorePctl: int = 10, + zScoreThresh: float = -1, + shadowSumThresh: float = 0.35, + contractPixels: int = 0, + dilatePixels: float = 2.5, + shadowSumBands: list[str] = ["nir", "swir2"], + resampleMethod: str = "bicubic", + preComputedCloudScoreOffset: ee.Image | None = None, + preComputedTDOMIRMean: ee.Image | None = None, + preComputedTDOMIRStdDev: ee.Image | None = None, + addToMap: bool = False, + crs: str = "EPSG:4326", + scale: int | None = 250, + transform: list[int] | None = None, ): + """ + Retrieves, processes, and filters MODIS imagery for a specified period. + + This function retrieves daily MODIS imagery from Earth Engine, applies various cloud and + cloud shadow masking techniques, and returns a collection of processed images. + + Args: + startYear (int): The starting year for the data collection. + endYear (int): The ending year for the data collection. + startJulian (int): The starting Julian day of year for the data collection (1-366). + endJulian (int): The ending Julian day of year for the data collection (1-366). + zenithThresh (float, optional): Sets the threshold for solar zenith angle in degrees. Pixels with zenith angle exceeding this threshold will be masked out. Defaults to 90. + addLookAngleBands (bool, optional): Controls whether to include view angle bands in the output. Defaults to True. + applyCloudScore (bool, optional): Determines whether to apply cloud masking based on the CloudScore simple algorithm adapted to MODIS. Defaults to True. + applyTDOM (bool, optional): Determines whether to apply the TDOM (Temporal Dark Outlier Mask) + technique for cloud shadow masking. Defaults to True. + useTempInCloudMask (bool, optional): Determines whether to use the thermal band for cloud masking during MODIS data retrieval. Defaults to True. + cloudScoreThresh (int, optional): Threshold for the CloudScore simple algorithm to classify a pixel as cloudy. Lower number masks out more. Defaults to 20. + performCloudScoreOffset (bool, optional): Controls whether to perform an offset correction on the Cloud Score data over bright surfaces. Only use this if bright areas are being masked as clouds. Do not use this in persistently cloud areas. Defaults to True. + cloudScorePctl (int, optional): Percentile of the Cloud Score product to use for the offset correction. Defaults to 10. + zScoreThresh (float, optional): Threshold for the z-score used in TDOM cloud shadow masking. Pixels with z-scores below this threshold are masked. Defaults to -1. + shadowSumThresh (float, optional): Threshold for the sum of reflectance in shadow bands used in TDOM cloud shadow masking. Pixels below this threshold and the zScoreThresh are masked as dark outliers (likely cloud shadows). Defaults to 0.35. + contractPixels (int, optional): Number of pixels to contract cloud and shadow masks by. Defaults to 0. + dilatePixels (float, optional): Number of pixels to dilate cloud and shadow masks by. Defaults to 2.5. + shadowSumBands (list[str], optional): List of band names to use for calculating the sum of reflectance in TDOM cloud shadow masking. Defaults to ["nir", "swir2"]. + resampleMethod (str, optional): Specifies the resampling method to apply to the imagery. Valid options include "near", "bilinear", and "bicubic". Defaults to "bicubic". + preComputedCloudScoreOffset (float | None, optional): Pre-computed Cloud Score offset value to avoid redundant calculations. Defaults to None (automatic calculation). + preComputedTDOMIRMean (float | None, optional): Pre-computed mean of the IR band used in TDOM cloud shadow masking to avoid redundant calculations. Defaults to None (automatic calculation). + preComputedTDOMIRStdDev (float | None, optional): Pre-computed standard deviation of the IR band used in TDOM cloud shadow masking to avoid redundant calculations. Defaults to None (automatic calculation). + addToMap (bool, optional): Controls whether to add intermediate processing steps (masked medians) to the Earth Engine map for visualization purposes. Defaults to False. + crs (str, optional): Only used if addToMap is True. Coordinate Reference System (CRS) for the output imagery. Defaults to "EPSG:4326". + scale (int | None, optional): Only used if addToMap is True. Scale (resolution) of the output imagery in meters. Defaults to 250. + transform (list | None, optional): Only used if addToMap is True. Optional transformation matrix to apply to the output imagery. Defaults to None. + + >>> import geeViz.getImagesLib as gil + >>> Map = gil.Map + >>> ee = gil.ee + >>> crs = gil.common_projections["NLCD_CONUS"]["crs"] + >>> transform = gil.common_projections["NLCD_CONUS"]["transform"] + >>> scale = 240 + >>> transform[0] = scale + >>> transform[4] = -scale + >>> composite = gil.getProcessedModis(2024, 2024, 190, 250).median().reproject(crs, transform) + >>> Map.addLayer(composite, gil.vizParamsFalse, "MODIS Composite") + >>> Map.setCenter(-111, 41, 7) + >>> Map.turnOnInspector() + >>> Map.view() + """ args = formatArgs(locals()) if "args" in args.keys(): @@ -5529,7 +5660,8 @@

Source code for geeViz.getImagesLib

 
     modisImages = modisImages.map(simpleAddIndices)
     modisImages = modisImages.map(lambda img: img.float())
-    return modisImages.set(args)
+    return modisImages.set(args)
+ ######################################################################### @@ -5945,73 +6077,86 @@

Source code for geeViz.getImagesLib

 
[docs] def getProcessedLandsatScenes( - studyArea, - startYear, - endYear, - startJulian, - endJulian, - toaOrSR="SR", - includeSLCOffL7=False, - defringeL5=False, - applyCloudScore=False, - applyFmaskCloudMask=True, - applyTDOM=False, - applyFmaskCloudShadowMask=True, - applyFmaskSnowMask=False, - cloudScoreThresh=10, - performCloudScoreOffset=True, - cloudScorePctl=10, - zScoreThresh=-1, - shadowSumThresh=0.35, - contractPixels=1.5, - dilatePixels=3.5, - shadowSumBands=["nir", "swir1"], - resampleMethod="near", - harmonizeOLI=False, - preComputedCloudScoreOffset=None, - preComputedTDOMIRMean=None, - preComputedTDOMIRStdDev=None, - landsatCollectionVersion="C2", - verbose=False, -): + studyArea: ee.Geometry | ee.Feature | ee.FeatureCollection, + startYear: int, + endYear: int, + startJulian: int, + endJulian: int, + toaOrSR: str = "SR", + includeSLCOffL7: bool = False, + defringeL5: bool = False, + applyCloudScore: bool = False, + applyFmaskCloudMask: bool = True, + applyTDOM: bool = False, + applyFmaskCloudShadowMask: bool = True, + applyFmaskSnowMask: bool = False, + cloudScoreThresh: int = 10, + performCloudScoreOffset: bool = True, + cloudScorePctl: int = 10, + zScoreThresh: float = -1, + shadowSumThresh: float = 0.35, + contractPixels: float = 1.5, + dilatePixels: float = 3.5, + shadowSumBands: list[str] = ["nir", "swir1"], + resampleMethod: str = "near", + harmonizeOLI: bool = False, + preComputedCloudScoreOffset: ee.Image | None = None, + preComputedTDOMIRMean: ee.Image | None = None, + preComputedTDOMIRStdDev: ee.Image | None = None, + landsatCollectionVersion: str = "C2", + verbose: bool = False, +) -> ee.ImageCollection: """ - Get Landsat images from all available TM-OLI collections with common bands selected/named, cloud and cloud masking applied, and common indices added. + Retrieves, processes, and filters Landsat scenes for a specified area and time period. + This function retrieves Landsat scenes from Earth Engine, applies various cloud, + cloud shadow, and snow masking techniques, calculates common indices, and returns + a collection of processed images. Args: - studyArea (FeatureCollection, Feature, Geometry). - startYear (int). - endYear (int). - startJulian (int). - endJulian (int). - toaOrSR (str) ="SR". - includeSLCOffL7=False. - defringeL5=False. - applyCloudScore=False. - applyFmaskCloudMask=True. - applyTDOM=False. - applyFmaskCloudShadowMask=True. - applyFmaskSnowMask=False. - cloudScoreThresh=10. - performCloudScoreOffset=True. - cloudScorePctl=10. - zScoreThresh=-1. - shadowSumThresh=0.35. - contractPixels=1.5. - dilatePixels=3.5. - shadowSumBands=["nir". "swir1"]. - resampleMethod="near". - harmonizeOLI=False. - preComputedCloudScoreOffset=None. - preComputedTDOMIRMean=None. - preComputedTDOMIRStdDev=None. - landsatCollectionVersion="C2". - verbose=False. - param1 (int): The first parameter. - param2 (str): The second parameter. + studyArea (ee.Geometry): The geographic area of interest (study area) as an Earth Engine geometry, Feature, or FeatureCollection object. + startYear (int): The starting year for the data collection. + endYear (int): The ending year for the data collection. + startJulian (int): The starting Julian day of year for the data collection (1-365). + endJulian (int): The ending Julian day of year for the data collection (1-365). + toaOrSR (str, optional): Flag indicating desired reflectance type: "TOA" (Top Of Atmosphere) or "SR" (Surface Reflectance). Defaults to "SR". + includeSLCOffL7 (bool, optional): Determines whether to include Landsat 7 SLC-off scenes. Defaults to False. + defringeL5 (bool, optional): Determines whether to defringe Landsat 5 scenes. Defaults to False. + applyCloudScore (bool, optional): Determines whether to apply cloud masking based on the CloudScore simple algorithm. Defaults to False. + applyFmaskCloudMask (bool, optional): Determines whether to apply the Fmask cloud mask. Defaults to True. + applyTDOM (bool, optional): Determines whether to apply the TDOM (Temporal Dark Outlier Mask) technique for cloud shadow masking. Defaults to False. + applyFmaskCloudShadowMask (bool, optional): Determines whether to apply the Fmask cloud shadow mask. Defaults to True. + applyFmaskSnowMask (bool, optional): Determines whether to apply the Fmask snow mask. Defaults to False. + cloudScoreThresh (int, optional): Threshold for the CloudScore simple algorithm to classify a pixel as cloudy. Lower number masks out more. Defaults to 10. + performCloudScoreOffset (bool, optional): Controls whether to perform an offset correction on the Cloud Score data over bright surfaces. Only use this if bright areas are being masked as clouds. Do not use this in persistently cloud areas. Defaults to True. + cloudScorePctl (int, optional): Percentile of the Cloud Score product to use for the offset correction. Defaults to 10. + zScoreThresh (float, optional): Threshold for the z-score used in TDOM cloud shadow masking. Pixels with z-scores below this threshold are masked. Defaults to -1. + shadowSumThresh (float, optional): Threshold for the sum of reflectance in shadow bands used in TDOM cloud shadow masking. Pixels below this threshold and the zScoreThresh are masked as dark outliers (likely cloud shadows). Defaults to 0.35. + contractPixels (float, optional): Number of pixels to contract cloud and shadow masks by. Defaults to 1.5. + dilatePixels (float, optional): Number of pixels to dilate cloud and shadow masks by. Defaults to 3.5. + shadowSumBands (list[str], optional): List of band names to use for calculating the sum of reflectance in TDOM cloud shadow masking. Defaults to ["nir", "swir1"]. + resampleMethod (str, optional): Specifies the resampling method to apply to the imagery. Valid options include "near", "bilinear", and "bicubic". Defaults to "near". + harmonizeOLI (bool, optional): Determines whether to harmonize OLI data to match TM/ETM+ spectral response. Defaults to False. + preComputedCloudScoreOffset (float | None, optional): Pre-computed Cloud Score offset value to avoid redundant calculations. Defaults to None (automatic calculation). + preComputedTDOMIRMean (float | None, optional): Pre-computed mean of the IR band used in TDOM cloud shadow masking to avoid redundant calculations. Defaults to None (automatic calculation). + preComputedTDOMIRStdDev (float | None, optional): Pre-computed standard deviation of the IR band used in TDOM cloud shadow masking to avoid redundant calculations. Defaults to None (automatic calculation). + landsatCollectionVersion (str, optional): Specifies the Landsat collection version to use (e.g., "C1", "C2"). Defaults to "C2". + verbose (bool, optional): Controls whether to print additional information during processing. Defaults to False. Returns: - ImageCollection: A collection of Landsat scenes. + ee.ImageCollection: A collection of analysis ready, cloud and cloud shadow asked Landsat scenes with common band names. + + >>> import geeViz.getImagesLib as gil + >>> Map = gil.Map + >>> ee = gil.ee + >>> studyArea = gil.testAreas["CO"] + >>> composite = gil.getProcessedLandsatScenes(studyArea, 2023, 2023, 190, 250).median() + >>> Map.addLayer(composite, gil.vizParamsFalse, "Landsat Composite") + >>> Map.addLayer(studyArea, {"canQuery": False}, "Study Area") + >>> Map.centerObject(studyArea) + >>> Map.turnOnInspector() + >>> Map.view() + """ origin = "Landsat" toaOrSR = toaOrSR.upper() @@ -6266,22 +6411,26 @@

Source code for geeViz.getImagesLib

 
[docs] def superSimpleGetS2( - studyArea: ee.Geometry, - startDate: str or ee.Date, - endDate: str or ee.Date, + studyArea: ee.Geometry | ee.Feature | ee.FeatureCollection, + startDate: ee.Date | datetime.datetime | str, + endDate: ee.Date | datetime.datetime | str, + startJulian: int = 1, + endJulian: int = 365, toaOrSR: str = "TOA", applyCloudScorePlus: bool = True, cloudScorePlusThresh: float = 0.6, cloudScorePlusScore: str = "cs", ) -> ee.ImageCollection: """ - This function retrieves Sentinel-2 satellite imagery from Earth Engine for a specified study area and date range. + This function retrieves Sentinel-2 satellite imagery from Earth Engine for a specified study area and date range. It applies the cloudScore+ algorithm unless told otherwise. Args: studyArea (ee.Geometry): An Earth Engine geometry object representing the area of interest. - startDate (ee.Date or str): The start date for the image collection in YYYY-MM-DD format. - endDate (ee.Date or str): The end date for the image collection in YYYY-MM-DD format. + startDate (ee.Date, datetime.datetime, or str): The start date for the image collection in YYYY-MM-DD format. + endDate (ee.Date, datetime.datetime, or str): The end date for the image collection in YYYY-MM-DD format. + startJulian (int, optional): The start Julian day of the desired data. Defaults to 1. + endJulian (int, optional): The end Julian day of the desired data. Defaults to 365. toaOrSR (str, optional): Specifies whether to retrieve data in Top-Of-Atmosphere (TOA) reflectance or Surface Reflectance (SR). Defaults to "TOA". applyCloudScorePlus (bool, optional): Determines whether to apply cloud filtering based on the Cloud Score Plus product. Defaults to True. cloudScorePlusThresh (float, optional): Sets the threshold for cloud cover percentage based on Cloud Score Plus. Images with cloud cover exceeding this threshold will be masked out if `applyCloudScorePlus` is True. Defaults to 0.6. @@ -6295,9 +6444,9 @@

Source code for geeViz.getImagesLib

     >>> Map = gil.Map
     >>> ee = gil.ee
     >>> studyArea = gil.testAreas["CA"]
-    >>> composite = gil.superSimpleGetS2(studyArea, "2024-06-01", "2024-09-30").median()
+    >>> composite = gil.superSimpleGetS2(studyArea, "2024-01-01", "2024-12-31", 190, 250).median()
     >>> Map.addLayer(composite, gil.vizParamsFalse10k, "Sentinel-2 Composite")
-    >>> Map.addLayer(studyArea, {}, "Study Area")
+    >>> Map.addLayer(studyArea, {"canQuery": False}, "Study Area")
     >>> Map.centerObject(studyArea)
     >>> Map.turnOnInspector()
     >>> Map.view()
@@ -6305,8 +6454,10 @@ 

Source code for geeViz.getImagesLib

     """
 
     toaOrSR = toaOrSR.upper()
+    startDate = ee.Date(startDate)
+    endDate = ee.Date(endDate)
 
-    s2s = ee.ImageCollection(s2CollectionDict[toaOrSR]).filterDate(startDate, endDate).filterBounds(studyArea)
+    s2s = ee.ImageCollection(s2CollectionDict[toaOrSR]).filterDate(startDate, endDate.advance(1, "day")).filter(ee.Filter.calendarRange(startJulian, endJulian)).filterBounds(studyArea)
 
     s2s = s2s.select(sensorBandDict[toaOrSR], sensorBandNameDict[toaOrSR])
 
@@ -8481,23 +8632,87 @@ 

Source code for geeViz.getImagesLib

 # NASA/ORNL/DAYMET_V4
 # UCSB-CHG/CHIRPS/DAILY (precipitation only)
 # and possibly others
+
+[docs] def getClimateWrapper( - collectionName, - studyArea, - startYear, - endYear, - startJulian, - endJulian, - timebuffer, - weights, - compositingReducer, - exportComposites=False, - exportPathRoot=None, - crs=None, - transform=None, - scale=None, - exportBands=None, -): + collectionName: str, + studyArea: ee.Geometry | ee.Feature | ee.FeatureCollection, + startYear: int, + endYear: int, + startJulian: int, + endJulian: int, + timebuffer: int = 0, + weights: ee.List | list | None = None, + compositingReducer: ee.Reducer | None = None, + exportComposites: bool = False, + exportPathRoot: str | None = None, + crs: str | None = None, + transform: list[int] | None = None, + scale: int | None = None, + exportBands: ee.List | list | None = None, +) -> ee.ImageCollection: + """ + Wrapper function to retrieve and process climate data from various Earth Engine collections. + + This function supports retrieving climate data from collections like NASA/ORNL/DAYMET_V3, + NASA/ORNL/DAYMET_V4, UCSB-CHG/CHIRPS/DAILY (precipitation only), and potentially others. It allows + filtering by date, study area, and Julian day, specifying a compositing reducer, and optionally + exporting the resulting time series. + + Args: + collectionName (str): Name of the Earth Engine collection containing climate data. + studyArea (ee.Geometry | ee.Feature | ee.FeatureCollection): The geographic area of interest (study area) as an Earth Engine geometry object. + startYear (int): The starting year for the data collection. + endYear (int): The ending year for the data collection. + startJulian (int): The starting Julian day of year for the data collection (1-365). + endJulian (int): The ending Julian day of year for the data collection (1-365). + timebuffer (int, optional): Number of years to buffer around each year. Defaults to 0. + weights (ee.List | list| None, optional): List of weights for weighted compositing (if applicable + to the chosen collection). Defaults to None (equal weights). + compositingReducer (ee.Reducer | None, optional): Earth Engine reducer used for compositing + daily data into the desired temporal resolution. Defaults to None (may require a reducer + depending on the collection). + exportComposites (bool, optional): Flag indicating whether to export the resulting time series. + Defaults to False. + exportPathRoot (str | None, optional): Root path for exporting the composites (if exportComposites + is True). Defaults to None (no export). + crs (str | None, optional): Earth Engine projection object for the exported composites + (if exportComposites is True). Defaults to None (uses the source collection's projection). + transform (list[int] | None, optional): Earth Engine transform object for the exported + composites (if exportComposites is True). Defaults to None (uses the source collection's transform). + scale (int | None, optional): Scale in meters for the exported composites (if exportComposites + is True). Defaults to None (uses the source collection's scale). + exportBands (ee.List | list | None, optional): List of band names to export from the composites (if + exportComposites is True). Defaults to None (all bands from the first image in the collection). + + Returns: + ee.ImageCollection: The time series collection of processed climate data. + + >>> import geeViz.getImagesLib as gil + >>> Map = gil.Map + >>> ee = gil.ee + >>> studyArea = gil.testAreas["CO"] + >>> startJulian = 274 + >>> endJulian = 273 + >>> startYear = 2016 + >>> endYear = 2023 + >>> timebuffer = 0 + >>> weights = [1] + >>> compositingReducer = ee.Reducer.mean() + >>> collectionName = "NASA/ORNL/DAYMET_V4" + >>> exportComposites = False + >>> exportPathRoot = "users/username/someCollection" + >>> exportBands = ["prcp.*", "tmax.*", "tmin.*"] + >>> crs = "EPSG:5070" + >>> transform = [1000, 0, -2361915.0, 0, -1000, 3177735.0] + >>> scale = None + >>> climateComposites = gil.getClimateWrapper(collectionName, studyArea, startYear, endYear, startJulian, endJulian, timebuffer, weights, compositingReducer, exportComposites, exportPathRoot, crs, transform, scale, exportBands) + >>> Map.addTimeLapse(climateComposites.select(exportBands), {}, "Climate Composite Time Lapse") + >>> Map.addLayer(studyArea, {"strokeColor": "0000FF", "canQuery": False}, "Study Area", True) + >>> Map.centerObject(studyArea) + >>> Map.turnOnInspector() + >>> Map.view() + """ args = formatArgs(locals()) if "args" in args.keys(): del args["args"] @@ -8562,7 +8777,8 @@

Source code for geeViz.getImagesLib

             exportBands,
         )
 
-    return ts  ####
+    return ts
+ ##################################################################### @@ -8592,29 +8808,71 @@

Source code for geeViz.getImagesLib

 
 
 #####################################################################
-# On-the-fly basic water masking method
-# This method is used to provide a time-sensitive water mask
-# This method tends to work well if there is no wet snow present
-# Wet snow over flat areas can result in false positives
-# Designed to work with TOA data. SR data will result in false negatives (omission)
+
+[docs] def simpleWaterMask( - img, - contractPixels=0, - slope_thresh=10, - elevationImagePath="USGS/3DEP/10m", - elevationFocalMeanRadius=5.5, -): + img: ee.Image, + contractPixels: int = 0, + slope_thresh: float = 10, + elevationImagePath: str = "USGS/3DEP/10m", + elevationFocalMeanRadius: float = 5.5, +) -> ee.Image: + """ + Performs a basic on-the-fly water masking for TOA reflectance imagery. + + This function creates a water mask based on thresholds applied to Tasseled Cap angles, brightness, and slope. + It's designed for time-sensitive analysis and works well when wet snow is absent. However, wet snow in flat areas + can lead to false positives. SR data might cause false negatives (omissions). + + Args: + img (ee.Image): The input Earth Engine image (TOA reflectance data recommended). + contractPixels (int, optional): Number of pixels to contract the water mask by for morphological closing. Defaults to 0 (no contraction). + slope_thresh (float, optional): Threshold for slope (degrees) to identify flat areas suitable for water masking. Defaults to 10. + elevationImagePath (str, optional): Path to the Earth Engine image containing elevation data. Defaults to "USGS/3DEP/10m" (10m DEM from USGS 3D Elevation Program). + elevationFocalMeanRadius (float, optional): Radius (in meters) for the focal mean filter applied to the elevation data before calculating slope. Defaults to 5.5. + + Returns: + ee.Image: The water mask image with a single band named "waterMask". + + >>> import geeViz.getImagesLib as gil + >>> Map = gil.Map + >>> ee = gil.ee + >>> studyArea = gil.testAreas["CO"] + >>> s2s = gil.superSimpleGetS2(studyArea, "2024-01-01", "2024-12-31", 190, 250).map(lambda img: gil.getTasseledCap(img.divide(10000))) + >>> median_composite = s2s.median() + >>> water = gil.simpleWaterMask(median_composite).rename("Water") + >>> water = water.selfMask().set({"Water_class_values": [1], "Water_class_names": ["Water"], "Water_class_palette": ["0000DD"]}) + >>> Map.addLayer(median_composite, gil.vizParamsFalse, "Sentinel-2 Median Composite") + >>> Map.addLayer(water, {"autoViz": True}, "Water Mask") + >>> Map.addLayer(studyArea, {"canQuery": False}, "Study Area") + >>> Map.centerObject(studyArea, 12) + >>> Map.turnOnInspector() + >>> Map.view() + """ + + # Add Tasseled Cap angles to the image img = addTCAngles(img) + + # Load and resample elevation data ned = ee.Image(elevationImagePath).resample("bicubic") + + # Calculate slope using focal mean filtered elevation slope = ee.Terrain.slope(ned.focal_mean(elevationFocalMeanRadius)) - flat = slope.lte(slope_thresh) - waterMask = img.select(["tcAngleBW"]).gte(-0.05).And(img.select(["tcAngleBG"]).lte(0.05)).And(img.select(["brightness"]).lt(0.3)).And(flat).focal_min(contractPixels) + # Identify flat areas based on slope threshold + flat = slope.lte(slope_thresh) # Less than or equal to threshold + + # Define water mask conditions based on Tasseled Cap angles, brightness, and slope + waterMask = img.select(["tcAngleBW"]).gte(-0.05).And(img.select(["tcAngleBG"]).lte(0.05)).And(img.select(["brightness"]).lt(0.3)).And(flat) + + # Apply morphological closing with focal minimum filter + waterMask = waterMask.focal_min(contractPixels) + + # Rename the water mask band + return waterMask.rename(["waterMask"]) ####################
- return waterMask.rename(["waterMask"]) -##################################################################### # Jeff Ho Method for algal bloom detection # https://www.nature.com/articles/s41586-019-1648-7 @@ -8771,7 +9029,7 @@

Source code for geeViz.getImagesLib

       
     
   
-
+
diff --git a/docs/build/html/_modules/index.html b/docs/build/html/_modules/index.html index ca8aa2a..967d690 100644 --- a/docs/build/html/_modules/index.html +++ b/docs/build/html/_modules/index.html @@ -5,7 +5,7 @@ - Overview: module code - geeViz "2024.9.2" docs + Overview: module code - geeViz "2024.9.3" docs @@ -141,7 +141,7 @@
@@ -167,7 +167,7 @@
- geeViz "2024.9.2" docs + geeViz "2024.9.3" docs @@ -278,7 +278,7 @@

All modules for which code is available

-
+
diff --git a/docs/build/html/_static/documentation_options.js b/docs/build/html/_static/documentation_options.js index e27f915..aaf4010 100644 --- a/docs/build/html/_static/documentation_options.js +++ b/docs/build/html/_static/documentation_options.js @@ -1,5 +1,5 @@ const DOCUMENTATION_OPTIONS = { - VERSION: '"2024.9.2"', + VERSION: '"2024.9.3"', LANGUAGE: 'en', COLLAPSE_INDEX: false, BUILDER: 'html', diff --git a/docs/build/html/examples.html b/docs/build/html/examples.html index da35035..3e2986c 100644 --- a/docs/build/html/examples.html +++ b/docs/build/html/examples.html @@ -6,7 +6,7 @@ - Examples - geeViz "2024.9.2" docs + Examples - geeViz "2024.9.3" docs @@ -142,7 +142,7 @@
@@ -168,7 +168,7 @@
- geeViz "2024.9.2" docs + geeViz "2024.9.3" docs @@ -520,7 +520,7 @@

Other examples +

diff --git a/docs/build/html/genindex.html b/docs/build/html/genindex.html index 4c45e88..1bfe11f 100644 --- a/docs/build/html/genindex.html +++ b/docs/build/html/genindex.html @@ -4,7 +4,7 @@ - Index - geeViz "2024.9.2" docs + Index - geeViz "2024.9.3" docs @@ -140,7 +140,7 @@
-
+
diff --git a/docs/build/html/index.html b/docs/build/html/index.html index d0d775a..f18199d 100644 --- a/docs/build/html/index.html +++ b/docs/build/html/index.html @@ -6,7 +6,7 @@ - geeViz "2024.9.2" docs + geeViz "2024.9.3" docs @@ -142,7 +142,7 @@
diff --git a/docs/build/html/info/geeViz.assetManagerLib.html b/docs/build/html/info/geeViz.assetManagerLib.html index 4e0cec5..7ff94a8 100644 --- a/docs/build/html/info/geeViz.assetManagerLib.html +++ b/docs/build/html/info/geeViz.assetManagerLib.html @@ -6,7 +6,7 @@ - geeViz.assetManagerLib - geeViz "2024.9.2" docs + geeViz.assetManagerLib - geeViz "2024.9.3" docs @@ -142,7 +142,7 @@
@@ -168,7 +168,7 @@
- geeViz "2024.9.2" docs + geeViz "2024.9.3" docs @@ -395,7 +395,7 @@
-
+
diff --git a/docs/build/html/info/geeViz.changeDetectionLib.html b/docs/build/html/info/geeViz.changeDetectionLib.html index f92084c..fc46612 100644 --- a/docs/build/html/info/geeViz.changeDetectionLib.html +++ b/docs/build/html/info/geeViz.changeDetectionLib.html @@ -6,7 +6,7 @@ - geeViz.changeDetectionLib - geeViz "2024.9.2" docs + geeViz.changeDetectionLib - geeViz "2024.9.3" docs @@ -142,7 +142,7 @@
@@ -168,7 +168,7 @@
- geeViz "2024.9.2" docs + geeViz "2024.9.3" docs @@ -488,7 +488,7 @@
-
+
diff --git a/docs/build/html/info/geeViz.cloudStorageManagerLib.html b/docs/build/html/info/geeViz.cloudStorageManagerLib.html index 8ae5a27..3482583 100644 --- a/docs/build/html/info/geeViz.cloudStorageManagerLib.html +++ b/docs/build/html/info/geeViz.cloudStorageManagerLib.html @@ -6,7 +6,7 @@ - geeViz.cloudStorageManagerLib - geeViz "2024.9.2" docs + geeViz.cloudStorageManagerLib - geeViz "2024.9.3" docs @@ -142,7 +142,7 @@
@@ -168,7 +168,7 @@
- geeViz "2024.9.2" docs + geeViz "2024.9.3" docs @@ -317,7 +317,7 @@
-
+
diff --git a/docs/build/html/info/geeViz.gee2Pandas.html b/docs/build/html/info/geeViz.gee2Pandas.html index c29d406..d284ece 100644 --- a/docs/build/html/info/geeViz.gee2Pandas.html +++ b/docs/build/html/info/geeViz.gee2Pandas.html @@ -6,7 +6,7 @@ - geeViz.gee2Pandas - geeViz "2024.9.2" docs + geeViz.gee2Pandas - geeViz "2024.9.3" docs @@ -142,7 +142,7 @@
@@ -168,7 +168,7 @@
- geeViz "2024.9.2" docs + geeViz "2024.9.3" docs @@ -338,7 +338,7 @@
-
+
diff --git a/docs/build/html/info/geeViz.geeView.html b/docs/build/html/info/geeViz.geeView.html index c3ac790..f974c86 100644 --- a/docs/build/html/info/geeViz.geeView.html +++ b/docs/build/html/info/geeViz.geeView.html @@ -6,7 +6,7 @@ - geeViz.geeView - geeViz "2024.9.2" docs + geeViz.geeView - geeViz "2024.9.3" docs @@ -142,7 +142,7 @@
@@ -168,7 +168,7 @@
- geeViz "2024.9.2" docs + geeViz "2024.9.3" docs @@ -366,7 +366,7 @@
-
+
diff --git a/docs/build/html/info/geeViz.getImagesLib.html b/docs/build/html/info/geeViz.getImagesLib.html index 5bc7cfd..556454f 100644 --- a/docs/build/html/info/geeViz.getImagesLib.html +++ b/docs/build/html/info/geeViz.getImagesLib.html @@ -6,7 +6,7 @@ - geeViz.getImagesLib - geeViz "2024.9.2" docs + geeViz.getImagesLib - geeViz "2024.9.3" docs @@ -142,7 +142,7 @@
@@ -168,7 +168,7 @@
- geeViz "2024.9.2" docs + geeViz "2024.9.3" docs @@ -377,8 +377,8 @@

getAreaUnderCurve(harmCoeffs[, t0, t1])

-

getClimateWrapper(collectionName, studyArea, ...)

-

+

getClimateWrapper(collectionName, studyArea, ...)

+

Wrapper function to retrieve and process climate data from various Earth Engine collections.

getDateStack(startYear, endYear, ...)

@@ -392,11 +392,11 @@

getHarmonics2(collection, transformBandName, ...)

-

getImageCollection(studyArea, startDate, ...)

-

Retrieves Landsat imagery for a specified study area.

+

getImageCollection(studyArea, startDate, endDate)

+

Retrieves Landsat imagery for a specified study area and date range.

-

getLandsat(studyArea, startDate, endDate, ...)

-

Retrieves Landsat imagery for a specified study area.

+

getLandsat(studyArea, startDate, endDate[, ...])

+

Retrieves Landsat imagery for a specified study area and date range.

getLandsatAndSentinel2HybridWrapper(...[, ...])

@@ -404,8 +404,8 @@

getLandsatWrapper(studyArea, startYear, ...)

-

getModisData(startYear, endYear, ...[, ...])

-

+

getModisData(startYear, endYear, ...[, ...])

+

Retrieves MODIS imagery from Earth Engine for a specified period.

getPeakDate(coeffs[, peakDirection])

@@ -423,10 +423,10 @@

getProcessedLandsatScenes(studyArea, ...[, ...])

-

Get Landsat images from all available TM-OLI collections with common bands selected/named, cloud and cloud masking applied, and common indices added.

+

Retrieves, processes, and filters Landsat scenes for a specified area and time period.

-

getProcessedModis(startYear, endYear, ...[, ...])

-

+

getProcessedModis(startYear, endYear, ...[, ...])

+

Retrieves, processes, and filters MODIS imagery for a specified period.

getProcessedSentinel2Scenes(studyArea, ...)

@@ -437,11 +437,11 @@

getS1(studyArea, startYear, endYear, ...[, ...])

Loads Sentinel-1 GRD data for a given area and time period.

-

getS2(studyArea, startDate, endDate, ...[, ...])

-

Loads and processes Sentinel-2 data for a given area and time period.

+

getS2(studyArea, startDate, endDate[, ...])

+

Loads Sentinel-2 data for a given area and time period and joins cloud score information.

-

getSentinel2(studyArea, startDate, endDate, ...)

-

Loads and processes Sentinel-2 data for a given area and time period.

+

getSentinel2(studyArea, startDate, endDate)

+

Loads Sentinel-2 data for a given area and time period and joins cloud score information.

getSentinel2Wrapper(studyArea, startYear, ...)

@@ -530,8 +530,8 @@

simpleTDOM2(collection[, zScoreThresh, ...])

Applies a simple temporal dark object differencing (TDOM) algorithm to an image collection.

-

simpleWaterMask(img[, contractPixels, ...])

-

+

simpleWaterMask(img[, contractPixels, ...])

+

Performs a basic on-the-fly water masking for TOA reflectance imagery.

smartJoin(primary, secondary, hourDiff)

@@ -614,7 +614,7 @@
-
+
diff --git a/docs/build/html/info/geeViz.phEEnoViz.html b/docs/build/html/info/geeViz.phEEnoViz.html index 9a88a25..d61a308 100644 --- a/docs/build/html/info/geeViz.phEEnoViz.html +++ b/docs/build/html/info/geeViz.phEEnoViz.html @@ -6,7 +6,7 @@ - geeViz.phEEnoViz - geeViz "2024.9.2" docs + geeViz.phEEnoViz - geeViz "2024.9.3" docs @@ -142,7 +142,7 @@
@@ -168,7 +168,7 @@
- geeViz "2024.9.2" docs + geeViz "2024.9.3" docs @@ -323,7 +323,7 @@
-
+
diff --git a/docs/build/html/info/geeViz.taskManagerLib.html b/docs/build/html/info/geeViz.taskManagerLib.html index 623092f..47ad33b 100644 --- a/docs/build/html/info/geeViz.taskManagerLib.html +++ b/docs/build/html/info/geeViz.taskManagerLib.html @@ -6,7 +6,7 @@ - geeViz.taskManagerLib - geeViz "2024.9.2" docs + geeViz.taskManagerLib - geeViz "2024.9.3" docs @@ -142,7 +142,7 @@
@@ -168,7 +168,7 @@
- geeViz "2024.9.2" docs + geeViz "2024.9.3" docs @@ -338,7 +338,7 @@
-
+
diff --git a/docs/build/html/installation.html b/docs/build/html/installation.html index 63da25c..df7f90c 100644 --- a/docs/build/html/installation.html +++ b/docs/build/html/installation.html @@ -6,7 +6,7 @@ - Installation - geeViz "2024.9.2" docs + Installation - geeViz "2024.9.3" docs @@ -142,7 +142,7 @@
@@ -168,7 +168,7 @@
- geeViz "2024.9.2" docs + geeViz "2024.9.3" docs @@ -350,7 +350,7 @@

Getting Started +

diff --git a/docs/build/html/modules.html b/docs/build/html/modules.html index 1402b93..eb6ebda 100644 --- a/docs/build/html/modules.html +++ b/docs/build/html/modules.html @@ -6,7 +6,7 @@ - Details - geeViz "2024.9.2" docs + Details - geeViz "2024.9.3" docs @@ -142,7 +142,7 @@
@@ -168,7 +168,7 @@
- geeViz "2024.9.2" docs + geeViz "2024.9.3" docs @@ -248,7 +248,7 @@

Details#<

geeViz.geeView is the core module for managing GEE objects on the geeViz mapper object. geeViz instantiates an instance of the mapper class as Map by default. Layers can be added to the map using Map.addLayer or Map.addTimeLapse and then viewed using the Map.view method.

-geeViz.geeView.RGB_to_hex(RGB)[source]#
+geeViz.geeView.RGB_to_hex(RGB: list[int]) str[source]#

[255,255,255] -> “#FFFFFF”

@@ -288,7 +288,7 @@

Details#<
-geeViz.geeView.color_dict_maker(gradient)[source]#
+geeViz.geeView.color_dict_maker(gradient: list[list[int]]) dict[source]#

Takes in a list of RGB sub-lists and returns dictionary of colors in RGB and hex form for use in a graphing function defined later on

@@ -313,7 +313,7 @@

Details#<
-geeViz.geeView.get_poly_gradient_ct(palette, min, max)[source]#
+geeViz.geeView.get_poly_gradient_ct(palette: list[str], min: int, max: int) list[str][source]#

Take a palette and a set of min and max stretch values to get a 1:1 value to color hex list

Parameters:
@@ -330,17 +330,23 @@

Details#<

list

+
>>> import geeViz.geeView as gv
+>>> viz = {"palette": ["#FFFF00", "00F", "0FF", "FF0000"], "min": 1, "max": 20}
+>>> color_ramp = gv.get_poly_gradient_ct(viz["palette"], viz["min"], viz["max"])
+>>> print("Color ramp:", color_ramp)
+
+
-geeViz.geeView.hex_to_rgb(value)[source]#
+geeViz.geeView.hex_to_rgb(value: str) tuple[source]#

Return (red, green, blue) for the color given as #rrggbb.

-geeViz.geeView.isPortActive(port=8001)[source]#
+geeViz.geeView.isPortActive(port: int = 8001)[source]#

See if a given port number is currently active

Parameters:
@@ -371,7 +377,7 @@

Details#<
-geeViz.geeView.linear_gradient(start_hex, finish_hex='#FFFFFF', n=10)[source]#
+geeViz.geeView.linear_gradient(start_hex: str, finish_hex: str = '#FFFFFF', n: int = 10) dict[source]#

returns a gradient list of (n) colors between two hex colors. start_hex and finish_hex should be the full six-digit color string, @@ -380,7 +386,7 @@

Details#<
-class geeViz.geeView.mapper(port=8001)[source]#
+class geeViz.geeView.mapper(port: int = 8001)[source]#

Primary geeViz map setup and manipulation object

Map object that is used to manage layers, activated user input methods, and launching the map viewer user interface

@@ -456,7 +462,7 @@

Details#<
-addAreaChartLayer(image, params={}, name=None, shouldChart=True)[source]#
+addAreaChartLayer(image: Image | ImageCollection, params: dict = {}, name: str | None = None, shouldChart: bool = True)[source]#

Use this method to add a layer for area charting that you do not want as a map layer as well. Once you add all area chart layers to the map, you can turn them on using the Map.populateAreaChartLayerSelect method. This will create a selection menu inside the Area Tools -> Area Tools Parameters menu. You can then turn layers to include in any area charts on and off from that menu.

Parameters:
@@ -499,7 +505,7 @@

Details#<
-addLayer(image, viz={}, name=None, visible=True)[source]#
+addLayer(image: Image | ImageCollection | Geometry | Feature | FeatureCollection, viz: dict = {}, name: str | None = None, visible: bool = True)[source]#

Adds GEE object to the mapper object that will then be added to the map user interface with a view call.

Parameters:
@@ -576,7 +582,7 @@

Details#<
-addSelectLayer(featureCollection, viz={}, name=None)[source]#
+addSelectLayer(featureCollection: FeatureCollection, viz: dict = {}, name: str | None = None)[source]#

Adds GEE featureCollection to the mapper object that will then be added as an interactive selection layer in the map user interface with a view call. This layer will be availble for selecting areas to include in area summary charts.

Parameters:
@@ -611,7 +617,7 @@

Details#<
-addTimeLapse(image, viz={}, name=None, visible=True)[source]#
+addTimeLapse(image: ImageCollection, viz: dict = {}, name: str | None = None, visible: bool = True)[source]#

Adds GEE ImageCollection object to the mapper object that will then be added as an interactive time lapse in the map user interface with a view call.

Parameters:
@@ -688,7 +694,7 @@

Details#<
-centerObject(feature, zoom=None)[source]#
+centerObject(feature: Geometry | Feature | FeatureCollection | Image, zoom: int | None = None)[source]#

Center the map on an object on loading

Parameters:
@@ -698,46 +704,100 @@

Details#<

+
>>> from geeViz.geeView import *
+>>> pt = ee.Geometry.Point([-111, 41])
+>>> Map.addLayer(pt.buffer(10), {}, "Plot")
+>>> Map.centerObject(pt)
+>>> Map.view()
+
+

clearMap()[source]#

Removes all map layers and commands - useful if running geeViz in a notebook and don’t want layers/commands from a prior code block to still be included.

+
>>> from geeViz.geeView import *
+>>> lcms = ee.ImageCollection("USFS/GTAC/LCMS/v2023-9").filter('study_area=="CONUS"')
+>>> Map.addLayer(lcms, {"autoViz": True}, "LCMS") # Layer
+>>> Map.turnOnInspector() # Command
+>>> Map.clearMap() # Clear map layer and commands
+>>> Map.view()
+
+
clearMapCommands()[source]#

Removes all map commands - useful if running geeViz in a notebook and don’t want commands from a prior code block to still be included, but want layers to remain.

+
>>> from geeViz.geeView import *
+>>> lcms = ee.ImageCollection("USFS/GTAC/LCMS/v2023-9").filter('study_area=="CONUS"')
+>>> Map.addLayer(lcms, {"autoViz": True}, "LCMS") # Layer
+>>> Map.turnOnInspector() # Command - this will be removed
+>>> Map.clearMapCommands() # Clear map comands only and leave layers
+>>> Map.view()
+
+
clearMapLayers()[source]#

Removes all map layers - useful if running geeViz in a notebook and don’t want layers from a prior code block to still be included, but want commands to remain.

+
>>> from geeViz.geeView import *
+>>> lcms = ee.ImageCollection("USFS/GTAC/LCMS/v2023-9").filter('study_area=="CONUS"')
+>>> Map.addLayer(lcms, {"autoViz": True}, "LCMS") # Layer - this will be removed
+>>> Map.turnOnInspector() # Command - this will remain (even though there will be no layers to query)
+>>> Map.clearMapLayers() # Clear map layer only and leave commands
+>>> Map.view()
+
+
populateAreaChartLayerSelect()[source]#

Once you add all area chart layers to the map, you can turn them on using this method- Map.populateAreaChartLayerSelect. This will create a selection menu inside the Area Tools -> Area Tools Parameters menu. You can then turn layers to include in any area charts on and off from that menu.

+
>>> import geeViz.geeView as gv
+>>> Map = gv.Map
+>>> ee = gv.ee
+>>> lcms = ee.ImageCollection("USFS/GTAC/LCMS/v2023-9").filter('study_area=="CONUS"')
+>>> Map.addLayer(lcms.select(["Change_Raw_Probability.*"]), {"reducer": ee.Reducer.stdDev(), "min": 0, "max": 10}, "LCMS Change Prob")
+>>> Map.addAreaChartLayer(lcms, {"line": True, "layerType": "ImageCollection"}, "LCMS All Thematic Classes Line", True)
+>>> Map.addAreaChartLayer(lcms, {"sankey": True}, "LCMS All Thematic Classes Sankey", True)
+>>> Map.populateAreaChartLayerSelect()
+>>> Map.turnOnAutoAreaCharting()
+>>> Map.view()
+
+
-setCanReorderLayers(canReorderLayers)[source]#
+setCanReorderLayers(canReorderLayers: bool)[source]#

Set whether layers can be reordered by dragging layer user interface objects. By default all non timelapse and non geojson layers can be reordereed by dragging.

Parameters:
-

canReorderLayers (bool) – Set whether layers can be reordered by dragging layer user interface objects. By default all non timelapse and non geojson layers can be reordereed by dragging.

+

canReorderLayers (bool, default True) – Set whether layers can be reordered by dragging layer user interface objects. By default all non timelapse and non geojson layers can be reordereed by dragging.

+
>>> from geeViz.geeView import *
+>>> lcms = ee.ImageCollection("USFS/GTAC/LCMS/v2023-9").filter('study_area=="CONUS"')
+>>> Map.addLayer(lcms.select([2]), {"autoViz": True}, "LCMS Land Use")
+>>> Map.addLayer(lcms.select([1]), {"autoViz": True}, "LCMS Land Cover")
+>>> Map.addLayer(lcms.select([0]), {"autoViz": True}, "LCMS Change")
+>>> Map.turnOnInspector()
+>>> Map.setCanReorderLayers(False) # Notice you cannot drag and reorder layers. Change to True and rerun and notice you now can drag layers to reorder
+>>> Map.setCenter(-109.446, 43.620, 12)
+>>> Map.view()
+
+
-setCenter(lng, lat, zoom=None)[source]#
+setCenter(lng: float, lat: float, zoom: int | None = None)[source]#

Center the map on a specified point and optional zoom on loading

Parameters:
@@ -748,6 +808,11 @@

Details#<

+
>>> from geeViz.geeView import *
+>>> Map.setCenter(-111,41,10)
+>>> Map.view()
+
+

@@ -759,22 +824,38 @@

Details#<

title (str, default geeViz Data Explorer) – The title to appear in the header on the left sidebar as well as the title of the viewer webpage.

+
>>> from geeViz.geeView import *
+>>> lcms = ee.ImageCollection("USFS/GTAC/LCMS/v2023-9").filter('study_area=="CONUS"')
+>>> Map.addLayer(lcms, {"autoViz": True}, "LCMS")
+>>> Map.turnOnInspector()
+>>> Map.setMapTitle("<h2>A Custom Title!!!</h2>")  # Set custom map title
+>>> Map.view()
+
+

-setQueryBoxColor(color)[source]#
+setQueryBoxColor(color: str)[source]#

Set the color of the query box to something other than yellow

Parameters:

color (str, default "FFFF00") – Set the default query box color shown on the map by providing a hex color.

+
>>> from geeViz.geeView import *
+>>> lcms = ee.ImageCollection("USFS/GTAC/LCMS/v2023-9").filter('study_area=="CONUS"')
+>>> Map.addLayer(lcms.select([1]), {"autoViz": True}, "LCMS Land Cover")
+>>> Map.turnOnInspector()
+>>> Map.setQueryBoxColor("0FF")
+>>> Map.view()
+
+
-setQueryCRS(crs)[source]#
+setQueryCRS(crs: str)[source]#

The coordinate reference system string to query layers with

Parameters:
@@ -784,22 +865,44 @@

Details#<

+
>>> import geeViz.getImagesLib as gil
+>>> from geeViz.geeView import *
+>>> crs = gil.common_projections["NLCD_AK"]["crs"]
+>>> transform = gil.common_projections["NLCD_AK"]["transform"]
+>>> lcms = ee.ImageCollection("USFS/GTAC/LCMS/v2023-9").filter('study_area=="SEAK"')
+>>> Map.addLayer(lcms, {"autoViz": True}, "LCMS")
+>>> Map.turnOnInspector()
+>>> Map.setQueryCRS(crs)
+>>> Map.setQueryTransform(transform)
+>>> Map.setCenter(-144.36390353, 60.20479529215, 8)
+>>> Map.view()
+
+

-setQueryDateFormat(defaultQueryDateFormat='YYYY-MM-dd')[source]#
+setQueryDateFormat(defaultQueryDateFormat: str = 'YYYY-MM-dd')[source]#

Set the date format to be used for any dates when querying.

Parameters:

defaultQueryDateFormat (str, default "YYYY-MM-dd") – The date format string to use for query outputs with dates. To simplify date outputs, “YYYY” is often used instead of the default.

+
>>> from geeViz.geeView import *
+>>> lcms = ee.ImageCollection("USFS/GTAC/LCMS/v2023-9").filter('study_area=="CONUS"')
+>>> Map.addLayer(lcms.select([1]), {"autoViz": True}, "LCMS Land Cover")
+>>> Map.addLayer(lcms.select([0]), {"autoViz": True}, "LCMS Change")
+>>> Map.turnOnInspector()
+>>> Map.setQueryDateFormat("YYYY")
+>>> Map.view()
+
+
-setQueryPrecision(chartPrecision=3, chartDecimalProportion=0.25)[source]#
+setQueryPrecision(chartPrecision: int = 3, chartDecimalProportion: float = 0.25)[source]#

What level of precision to show for queried layers. This avoids showing too many digits after the decimal.

Parameters:
@@ -809,62 +912,175 @@

Details#<

+
>>> import geeViz.getImagesLib as gil
+>>> from geeViz.geeView import *
+>>> s2s = gil.superSimpleGetS2(ee.Geometry.Point([-107.61, 37.85]), "2024-01-01", "2024-12-31", 190, 250).select(["blue", "green", "red", "nir", "swir1", "swir2"])
+>>> projection = s2s.first().select(["nir"]).projection().getInfo()
+>>> s2s = s2s.map(lambda img: ee.Image(img).divide(10000).set("system:time_start",img.date().millis()))
+>>> Map.addLayer(s2s, gil.vizParamsFalse, "Sentinel-2 Images")
+>>> Map.addLayer(s2s.median(), gil.vizParamsFalse, "Sentinel-2 Composite")
+>>> Map.turnOnInspector()
+>>> Map.setQueryCRS(projection["crs"])
+>>> Map.setQueryTransform(projection["transform"])
+>>> Map.setQueryPrecision(chartPrecision=2, chartDecimalProportion=0.1)
+>>> Map.centerObject(s2s.first())
+>>> Map.view()
+
+

-setQueryScale(scale)[source]#
+setQueryScale(scale: int)[source]#

What scale to query map layers with. Will also update the size of the box drawn on the map query layers are queried.

Parameters:

scale (int, default None) – The spatial resolution to use for querying map layers in meters. If set, the query transform will be set to None in the map viewer.

+
>>> import geeViz.getImagesLib as gil
+>>> from geeViz.geeView import *
+>>> s2s = gil.superSimpleGetS2(ee.Geometry.Point([-107.61, 37.85]), "2024-01-01", "2024-12-31", 190, 250)
+>>> projection = s2s.first().select(["nir"]).projection().getInfo()
+>>> Map.addLayer(s2s.median(), gil.vizParamsFalse10k, "Sentinel-2 Composite")
+>>> Map.turnOnInspector()
+>>> Map.setQueryCRS(projection["crs"])
+>>> Map.setQueryScale(projection["transform"][0])
+>>> Map.centerObject(s2s.first())
+>>> Map.view()
+
+
setQueryToInfoWindow()[source]#

Set the location of query outputs to an info window popup over the map

+
>>> from geeViz.geeView import *
+>>> lcms = ee.ImageCollection("USFS/GTAC/LCMS/v2023-9").filter('study_area=="CONUS"')
+>>> Map.addLayer(lcms.select([1]), {"autoViz": True}, "LCMS Land Cover")
+>>> Map.turnOnInspector()
+>>> Map.setQueryToInfoWindow()
+>>> Map.view()
+
+
setQueryToSidePane()[source]#

Set the location of query outputs to the right sidebar above the legend

+
>>> from geeViz.geeView import *
+>>> lcms = ee.ImageCollection("USFS/GTAC/LCMS/v2023-9").filter('study_area=="CONUS"')
+>>> Map.addLayer(lcms.select([1]), {"autoViz": True}, "LCMS Land Cover")
+>>> Map.turnOnInspector()
+>>> Map.setQueryToSidePane()
+>>> Map.view()
+
+
-setQueryTransform(transform)[source]#
+setQueryTransform(transform: list[int])[source]#

What transform to query map layers with. Will also update the size of the box drawn on the map query layers are queried.

Parameters:

transform (list, default [30, 0, -2361915, 0, -30, 3177735]) – The snap to grid to use for querying layers on the map. If set, the query scale will be set to None in the map viewer.

+
>>> import geeViz.getImagesLib as gil
+>>> from geeViz.geeView import *
+>>> s2s = gil.superSimpleGetS2(ee.Geometry.Point([-107.61, 37.85]), "2024-01-01", "2024-12-31", 190, 250)
+>>> projection = s2s.first().select(["nir"]).projection().getInfo()
+>>> Map.addLayer(s2s.median(), gil.vizParamsFalse10k, "Sentinel-2 Composite")
+>>> Map.turnOnInspector()
+>>> Map.setQueryCRS(projection["crs"])
+>>> Map.setQueryTransform(projection["transform"])
+>>> Map.centerObject(s2s.first())
+>>> Map.view()
+
+
setTitle(title)[source]#
-

Set the title that appears in the left sidebar header and the page title

+

Redundant function for setMapTitle. +Set the title that appears in the left sidebar header and the page title

Parameters:

title (str, default geeViz Data Explorer) – The title to appear in the header on the left sidebar as well as the title of the viewer webpage.

+
>>> from geeViz.geeView import *
+>>> lcms = ee.ImageCollection("USFS/GTAC/LCMS/v2023-9").filter('study_area=="CONUS"')
+>>> Map.addLayer(lcms, {"autoViz": True}, "LCMS")
+>>> Map.turnOnInspector()
+>>> Map.setMapTitle("<h2>A Custom Title!!!</h2>")  # Set custom map title
+>>> Map.view()
+
+
+
+ +
+
+setYLabelBreakLength(maxLength: int)[source]#
+

Set the maximum length per line a Y axis label can have in charts

+
+
Parameters:
+

maxLength (int, default 10) – Maximum number of characters in each line of a Y axis label. Will break total characters (setYLabelMaxLength) until maxLines (setYLabelMaxLines) is reached

+
+
+
>>> from geeViz.geeView import *
+>>> lcms = ee.ImageCollection("USFS/GTAC/LCMS/v2023-9").filter('study_area=="CONUS"')
+>>> Map.addLayer(lcms.select([1]), {"autoViz": True}, "LCMS Land Cover")
+>>> Map.setYLabelBreakLength(5)  # Double-click on map to inspect area. Change to a larger number and rerun to see how Y labels are impacted
+>>> Map.turnOnInspector()
+>>> Map.setCenter(-109.446, 43.620, 12)
+>>> Map.view()
+
+
-setYLabelFontSize(fontSize)[source]#
+setYLabelFontSize(fontSize: int)[source]#

Set the size of the font on the y-axis labels. Useful when y-axis labels are too large to fit on the chart.

Parameters:

fontSize (int, default 10) – The font size used on the y-axis labels for query charting.

+
>>> from geeViz.geeView import *
+>>> lcms = ee.ImageCollection("USFS/GTAC/LCMS/v2023-9").filter('study_area=="CONUS"')
+>>> Map.addLayer(lcms.select([1]), {"autoViz": True}, "LCMS Land Cover")
+>>> Map.setYLabelFontSize(8)  # Double-click on map to inspect area. Change to a different number and rerun to see how Y labels are impacted
+>>> Map.turnOnInspector()
+>>> Map.setCenter(-109.446, 43.620, 12)
+>>> Map.view()
+
+
+
+ +
+
+setYLabelMaxLength(maxLength: int)[source]#
+

Set the maximum length a Y axis label can have in charts

+
+
Parameters:
+

maxLength (int, default 30) – Maximum number of characters in a Y axis label.

+
+
+
>>> from geeViz.geeView import *
+>>> lcms = ee.ImageCollection("USFS/GTAC/LCMS/v2023-9").filter('study_area=="CONUS"')
+>>> Map.addLayer(lcms.select([1]), {"autoViz": True}, "LCMS Land Cover")
+>>> Map.setYLabelMaxLength(10)  # Double-click on map to inspect area. Change to a larger number and rerun to see how Y labels are impacted
+>>> Map.turnOnInspector()
+>>> Map.setCenter(-109.446, 43.620, 12)
+>>> Map.view()
+
+
@@ -876,58 +1092,131 @@

Details#<

maxLines (int, default 5) – The maximum number of lines each y-axis label can have. Will simply exclude any remaining lines.

+
>>> from geeViz.geeView import *
+>>> lcms = ee.ImageCollection("USFS/GTAC/LCMS/v2023-9").filter('study_area=="CONUS"')
+>>> Map.addLayer(lcms.select([1]), {"autoViz": True}, "LCMS Land Cover")
+>>> Map.setYLabelMaxLines(3)  # Double-click on map to inspect area. Change to a larger number and rerun to see how Y labels are impacted
+>>> Map.turnOnInspector()
+>>> Map.setCenter(-109.446, 43.620, 12)
+>>> Map.view()
+
+

-setZoom(zoom)[source]#
+setZoom(zoom: int)[source]#

Set the map zoom level

Parameters:

zoom (int) – The zoom level to set the map to on loading.

+
>>> from geeViz.geeView import *
+>>> Map.setZoom(10)
+>>> Map.view()
+
+
turnOffAllLayers()[source]#
-

Turn off all layers added to the mapper object

+

Turn off all layers added to the mapper object. Typically used in notebooks or iPython when you want to allow existing layers to remain, but want to turn them all off.

+
>>> #%%
+>>> from geeViz.geeView import *
+>>> lcms = ee.ImageCollection("USFS/GTAC/LCMS/v2023-9").filter('study_area=="CONUS"')
+>>> Map.addLayer(lcms.select([2]), {"autoViz": True}, "LCMS Land Use")
+>>> Map.addLayer(lcms.select([1]), {"autoViz": True}, "LCMS Land Cover")
+>>> Map.turnOnInspector()
+>>> Map.setCenter(-109.446, 43.620, 5)
+>>> Map.view()
+>>> #%%
+>>> Map.turnOffAllLayers()
+>>> Map.addLayer(lcms.select([0]), {"autoViz": True}, "LCMS Change")
+>>> Map.view()
+
+
turnOnAllLayers()[source]#

Turn on all layers added to the mapper object

+
>>> #%%
+>>> from geeViz.geeView import *
+>>> lcms = ee.ImageCollection("USFS/GTAC/LCMS/v2023-9").filter('study_area=="CONUS"')
+>>> Map.addLayer(lcms.select([2]), {"autoViz": True}, "LCMS Land Use",False)
+>>> Map.addLayer(lcms.select([1]), {"autoViz": True}, "LCMS Land Cover",False)
+>>> Map.turnOnInspector()
+>>> Map.setCenter(-109.446, 43.620, 5)
+>>> Map.view()
+>>> #%%
+>>> Map.turnOnAllLayers()
+>>> Map.addLayer(lcms.select([0]), {"autoViz": True}, "LCMS Change")
+>>> Map.view()
+
+
turnOnAutoAreaCharting()[source]#

Turn on automatic area charting upon map loading. This will automatically update charts by summarizing any visible layers with “canAreaChart” : True any time the map finishes panning or zooming.

+
>>> from geeViz.geeView import *
+>>> lcms = ee.ImageCollection("USFS/GTAC/LCMS/v2023-9").filter('study_area=="CONUS"')
+>>> Map.addLayer(lcms.select([1]), {"autoViz": True,'canAreaChart':True}, "LCMS Land Cover")
+>>> Map.turnOnAutoAreaCharting()
+>>> Map.view()
+
+
turnOnInspector()[source]#

Turn on the query inspector tool upon map loading. This is used frequently so map layers can be queried as soon as the map viewer loads.

+
>>> from geeViz.geeView import *
+>>> lcms = ee.ImageCollection("USFS/GTAC/LCMS/v2023-9").filter('study_area=="CONUS"')
+>>> Map.addLayer(lcms.select([1]), {"autoViz": True}, "LCMS Land Cover")
+>>> Map.turnOnInspector()
+>>> Map.view()
+
+
turnOnSelectionAreaCharting()[source]#

Turn on area charting by a user selected area upon map loading. This will update charts by summarizing any visible layers with “canAreaChart” : True when the user selects selection areas to summarize and hits the Chart Selected Areas button in the user interface under Area Tools -> Select an Area on Map.

+
>>> from geeViz.geeView import *
+>>> lcms = ee.ImageCollection("USFS/GTAC/LCMS/v2023-9").filter('study_area=="CONUS"')
+>>> Map.addLayer(lcms.select([1]), {"autoViz": True,'canAreaChart':True}, "LCMS Land Cover")
+>>> mtbsBoundaries = ee.FeatureCollection("USFS/GTAC/MTBS/burned_area_boundaries/v1")
+>>> mtbsBoundaries = mtbsBoundaries.map(lambda f: f.set("system:time_start", f.get("Ig_Date")))
+>>> Map.addSelectLayer(mtbsBoundaries, {"strokeColor": "00F", "selectLayerNameProperty": "Incid_Name"}, "MTBS Fire Boundaries")
+>>> Map.turnOnSelectionAreaCharting()
+>>> Map.view()
+
+
turnOnUserDefinedAreaCharting()[source]#

Turn on area charting by a user defined area upon map loading. This will update charts by summarizing any visible layers with “canAreaChart” : True when the user draws an area to summarize and hits the Chart Selected Areas button in the user interface under Area Tools -> User-Defined Area.

+
>>> from geeViz.geeView import *
+>>> lcms = ee.ImageCollection("USFS/GTAC/LCMS/v2023-9").filter('study_area=="CONUS"')
+>>> Map.addLayer(lcms.select([1]), {"autoViz": True,'canAreaChart':True}, "LCMS Land Cover")
+>>> Map.turnOnUserDefinedAreaCharting()
+>>> Map.view()
+
+
-view(open_browser=None, open_iframe=None, iframe_height=525)[source]#
+view(open_browser: bool | None = None, open_iframe: bool | None = None, iframe_height: int = 525)[source]#

Compiles all map objects and commands and starts the map server

Parameters:
@@ -938,13 +1227,20 @@

Details#<

+
>>> from geeViz.geeView import *
+>>> lcms = ee.ImageCollection("USFS/GTAC/LCMS/v2023-9").filter('study_area=="CONUS"')
+>>> Map.addLayer(lcms, {"autoViz": True, "canAreaChart": True, "areaChartParams": {"line": True, "sankey": True}}, "LCMS")
+>>> Map.turnOnInspector()
+>>> Map.view()
+
+

-geeViz.geeView.polylinear_gradient(colors, n)[source]#
+geeViz.geeView.polylinear_gradient(colors: list[str], n: int)[source]#

returns a list of colors forming linear gradients between all sequential pairs of colors. “n” specifies the total number of desired output colors

@@ -972,7 +1268,7 @@

Details#<
-geeViz.geeView.run_local_server(port=8001)[source]#
+geeViz.geeView.run_local_server(port: int = 8001)[source]#

Start a local webserver using the Python http.server

Parameters:
@@ -1536,18 +1832,90 @@

Details#<

+
+
+geeViz.getImagesLib.getClimateWrapper(collectionName: str, studyArea: Geometry | Feature | FeatureCollection, startYear: int, endYear: int, startJulian: int, endJulian: int, timebuffer: int = 0, weights: List | list | None = None, compositingReducer: Reducer | None = None, exportComposites: bool = False, exportPathRoot: str | None = None, crs: str | None = None, transform: list[int] | None = None, scale: int | None = None, exportBands: List | list | None = None) ImageCollection[source]#
+

Wrapper function to retrieve and process climate data from various Earth Engine collections.

+

This function supports retrieving climate data from collections like NASA/ORNL/DAYMET_V3, +NASA/ORNL/DAYMET_V4, UCSB-CHG/CHIRPS/DAILY (precipitation only), and potentially others. It allows +filtering by date, study area, and Julian day, specifying a compositing reducer, and optionally +exporting the resulting time series.

+
+
Parameters:
+
    +
  • collectionName (str) – Name of the Earth Engine collection containing climate data.

  • +
  • studyArea (ee.Geometry | ee.Feature | ee.FeatureCollection) – The geographic area of interest (study area) as an Earth Engine geometry object.

  • +
  • startYear (int) – The starting year for the data collection.

  • +
  • endYear (int) – The ending year for the data collection.

  • +
  • startJulian (int) – The starting Julian day of year for the data collection (1-365).

  • +
  • endJulian (int) – The ending Julian day of year for the data collection (1-365).

  • +
  • timebuffer (int, optional) – Number of years to buffer around each year. Defaults to 0.

  • +
  • weights (ee.List | list| None, optional) – List of weights for weighted compositing (if applicable +to the chosen collection). Defaults to None (equal weights).

  • +
  • compositingReducer (ee.Reducer | None, optional) – Earth Engine reducer used for compositing +daily data into the desired temporal resolution. Defaults to None (may require a reducer +depending on the collection).

  • +
  • exportComposites (bool, optional) – Flag indicating whether to export the resulting time series. +Defaults to False.

  • +
  • exportPathRoot (str | None, optional) – Root path for exporting the composites (if exportComposites +is True). Defaults to None (no export).

  • +
  • crs (str | None, optional) – Earth Engine projection object for the exported composites +(if exportComposites is True). Defaults to None (uses the source collection’s projection).

  • +
  • transform (list[int] | None, optional) – Earth Engine transform object for the exported +composites (if exportComposites is True). Defaults to None (uses the source collection’s transform).

  • +
  • scale (int | None, optional) – Scale in meters for the exported composites (if exportComposites +is True). Defaults to None (uses the source collection’s scale).

  • +
  • exportBands (ee.List | list | None, optional) – List of band names to export from the composites (if +exportComposites is True). Defaults to None (all bands from the first image in the collection).

  • +
+
+
Returns:
+

The time series collection of processed climate data.

+
+
Return type:
+

ee.ImageCollection

+
+
+
>>> import geeViz.getImagesLib as gil
+>>> Map = gil.Map
+>>> ee = gil.ee
+>>> studyArea = gil.testAreas["CO"]
+>>> startJulian = 274
+>>> endJulian = 273
+>>> startYear = 2016
+>>> endYear = 2023
+>>> timebuffer = 0
+>>> weights = [1]
+>>> compositingReducer = ee.Reducer.mean()
+>>> collectionName = "NASA/ORNL/DAYMET_V4"
+>>> exportComposites = False
+>>> exportPathRoot = "users/username/someCollection"
+>>> exportBands = ["prcp.*", "tmax.*", "tmin.*"]
+>>> crs = "EPSG:5070"
+>>> transform = [1000, 0, -2361915.0, 0, -1000, 3177735.0]
+>>> scale = None
+>>> climateComposites = gil.getClimateWrapper(collectionName, studyArea, startYear, endYear, startJulian, endJulian, timebuffer, weights, compositingReducer, exportComposites, exportPathRoot, crs, transform, scale, exportBands)
+>>> Map.addTimeLapse(climateComposites.select(exportBands), {}, "Climate Composite Time Lapse")
+>>> Map.addLayer(studyArea, {"strokeColor": "0000FF", "canQuery": False}, "Study Area", True)
+>>> Map.centerObject(studyArea)
+>>> Map.turnOnInspector()
+>>> Map.view()
+
+
+
+
-geeViz.getImagesLib.getImageCollection(studyArea, startDate, endDate, startJulian, endJulian, toaOrSR='SR', includeSLCOffL7=False, defringeL5=False, addPixelQA=False, resampleMethod='near', landsatCollectionVersion='C2')#
-

Retrieves Landsat imagery for a specified study area.

+geeViz.getImagesLib.getImageCollection(studyArea: Geometry | Feature | FeatureCollection, startDate: Date | datetime | str, endDate: Date | datetime | str, startJulian: int = 1, endJulian: int = 365, toaOrSR: str = 'SR', includeSLCOffL7: bool = False, defringeL5: bool = False, addPixelQA: bool = False, resampleMethod: str = 'near', landsatCollectionVersion: str = 'C2')# +

Retrieves Landsat imagery for a specified study area and date range.

Parameters:
  • studyArea (ee.Geometry, ee.Feature, or ee.FeatureCollection) – The geographic area of interest.

  • -
  • startDate (ee.Date or str) – The start date of the desired image range.

  • -
  • endDate (ee.Date or str) – The end date of the desired image range.

  • -
  • startJulian (int) – The start Julian day of the desired image range.

  • -
  • endJulian (int) – The end Julian day of the desired image range.

  • +
  • startDate (ee.Date, datetime.datetime, or str) – The start date of the desired image range.

  • +
  • endDate (ee.Date, datetime.datetime, or str) – The end date of the desired image range.

  • +
  • startJulian (int, optional) – The start Julian day of the desired image range. Defaults to 1.

  • +
  • endJulian (int, optional) – The end Julian day of the desired image range. Defaults to 365.

  • toaOrSR (str, optional) – Whether to retrieve TOA or SR data. Defaults to “SR”.

  • includeSLCOffL7 (bool, optional) – Whether to include SLC-off L7 data. Defaults to False.

  • defringeL5 (bool, optional) – Whether to defringe L5 data. Defaults to False.

  • @@ -1563,20 +1931,32 @@

    Details#<

    ee.ImageCollection

+
>>> import geeViz.getImagesLib as gil
+>>> Map = gil.Map
+>>> ee = gil.ee
+>>> studyArea = gil.testAreas["CA"]
+>>> composite = gil.getLandsat(studyArea, "2024-01-01", "2024-12-31", 190, 250).median()
+>>> Map.addLayer(composite, gil.vizParamsFalse, "Landsat Composite")
+>>> Map.addLayer(studyArea, {"canQuery": False}, "Study Area")
+>>> Map.centerObject(studyArea)
+>>> Map.turnOnInspector()
+>>> Map.view()
+
+
-geeViz.getImagesLib.getLandsat(studyArea, startDate, endDate, startJulian, endJulian, toaOrSR='SR', includeSLCOffL7=False, defringeL5=False, addPixelQA=False, resampleMethod='near', landsatCollectionVersion='C2')[source]#
-

Retrieves Landsat imagery for a specified study area.

+geeViz.getImagesLib.getLandsat(studyArea: Geometry | Feature | FeatureCollection, startDate: Date | datetime | str, endDate: Date | datetime | str, startJulian: int = 1, endJulian: int = 365, toaOrSR: str = 'SR', includeSLCOffL7: bool = False, defringeL5: bool = False, addPixelQA: bool = False, resampleMethod: str = 'near', landsatCollectionVersion: str = 'C2')[source]# +

Retrieves Landsat imagery for a specified study area and date range.

Parameters:
  • studyArea (ee.Geometry, ee.Feature, or ee.FeatureCollection) – The geographic area of interest.

  • -
  • startDate (ee.Date or str) – The start date of the desired image range.

  • -
  • endDate (ee.Date or str) – The end date of the desired image range.

  • -
  • startJulian (int) – The start Julian day of the desired image range.

  • -
  • endJulian (int) – The end Julian day of the desired image range.

  • +
  • startDate (ee.Date, datetime.datetime, or str) – The start date of the desired image range.

  • +
  • endDate (ee.Date, datetime.datetime, or str) – The end date of the desired image range.

  • +
  • startJulian (int, optional) – The start Julian day of the desired image range. Defaults to 1.

  • +
  • endJulian (int, optional) – The end Julian day of the desired image range. Defaults to 365.

  • toaOrSR (str, optional) – Whether to retrieve TOA or SR data. Defaults to “SR”.

  • includeSLCOffL7 (bool, optional) – Whether to include SLC-off L7 data. Defaults to False.

  • defringeL5 (bool, optional) – Whether to defringe L5 data. Defaults to False.

  • @@ -1592,53 +1972,177 @@

    Details#<

    ee.ImageCollection

+
>>> import geeViz.getImagesLib as gil
+>>> Map = gil.Map
+>>> ee = gil.ee
+>>> studyArea = gil.testAreas["CA"]
+>>> composite = gil.getLandsat(studyArea, "2024-01-01", "2024-12-31", 190, 250).median()
+>>> Map.addLayer(composite, gil.vizParamsFalse, "Landsat Composite")
+>>> Map.addLayer(studyArea, {"canQuery": False}, "Study Area")
+>>> Map.centerObject(studyArea)
+>>> Map.turnOnInspector()
+>>> Map.view()
+
+
+
+ +
+
+geeViz.getImagesLib.getModisData(startYear: int, endYear: int, startJulian: int, endJulian: int, daily: bool = False, maskWQA: bool = False, zenithThresh: int = 90, useTempInCloudMask: bool = True, addLookAngleBands: bool = False, resampleMethod: str = 'near')[source]#
+

Retrieves MODIS imagery from Earth Engine for a specified period. Handles joining all MODIS collections for Terra and Aqua and aligning band names

+
+
Parameters:
+
    +
  • startYear (int) – The starting year for the data collection.

  • +
  • endYear (int) – The ending year for the data collection.

  • +
  • startJulian (int) – The starting Julian day of year for the data collection (1-366).

  • +
  • endJulian (int) – The ending Julian day of year for the data collection (1-366).

  • +
  • daily (bool, optional) – Determines whether to retrieve daily or 8-day composite data. Defaults to False (8-day composite).

  • +
  • maskWQA (bool, optional) – Controls whether to mask pixels based on the Quality Assurance (QA) band. Only applicable for daily data (daily=True). Defaults to False.

  • +
  • zenithThresh (float, optional) – Sets the threshold for solar zenith angle in degrees. Pixels with zenith angle exceeding this threshold will be masked out. Defaults to 90.

  • +
  • useTempInCloudMask (bool, optional) – Determines whether to use the thermal band for cloud masking. Defaults to True.

  • +
  • addLookAngleBands (bool, optional) – Controls whether to include view angle bands in the output. Defaults to False.

  • +
  • resampleMethod (str, optional) – Specifies the resampling method to apply to the imagery. Valid options include “near”, “bilinear”, and “bicubic”. Defaults to “near” (nearest neighbor).

  • +
+
+
Returns:
+

A collection of MODIS imagery for the specified criteria.

+
+
Return type:
+

ee.ImageCollection

+
+
+
>>> import geeViz.getImagesLib as gil
+>>> Map = gil.Map
+>>> ee = gil.ee
+>>> crs = gil.common_projections["NLCD_CONUS"]["crs"]
+>>> transform = gil.common_projections["NLCD_CONUS"]["transform"]
+>>> scale = 240
+>>> transform[0] = scale
+>>> transform[4] = -scale
+>>> composite = gil.getModisData(2024, 2024, 190, 250, resampleMethod="bicubic").median().reproject(crs, transform)
+>>> Map.addLayer(composite, gil.vizParamsFalse, "MODIS Composite")
+>>> Map.setCenter(-111, 41, 7)
+>>> Map.turnOnInspector()
+>>> Map.view()
+
+
-geeViz.getImagesLib.getProcessedLandsatScenes(studyArea, startYear, endYear, startJulian, endJulian, toaOrSR='SR', includeSLCOffL7=False, defringeL5=False, applyCloudScore=False, applyFmaskCloudMask=True, applyTDOM=False, applyFmaskCloudShadowMask=True, applyFmaskSnowMask=False, cloudScoreThresh=10, performCloudScoreOffset=True, cloudScorePctl=10, zScoreThresh=-1, shadowSumThresh=0.35, contractPixels=1.5, dilatePixels=3.5, shadowSumBands=['nir', 'swir1'], resampleMethod='near', harmonizeOLI=False, preComputedCloudScoreOffset=None, preComputedTDOMIRMean=None, preComputedTDOMIRStdDev=None, landsatCollectionVersion='C2', verbose=False)[source]#
-

Get Landsat images from all available TM-OLI collections with common bands selected/named, cloud and cloud masking applied, and common indices added.

+geeViz.getImagesLib.getProcessedLandsatScenes(studyArea: Geometry | Feature | FeatureCollection, startYear: int, endYear: int, startJulian: int, endJulian: int, toaOrSR: str = 'SR', includeSLCOffL7: bool = False, defringeL5: bool = False, applyCloudScore: bool = False, applyFmaskCloudMask: bool = True, applyTDOM: bool = False, applyFmaskCloudShadowMask: bool = True, applyFmaskSnowMask: bool = False, cloudScoreThresh: int = 10, performCloudScoreOffset: bool = True, cloudScorePctl: int = 10, zScoreThresh: float = -1, shadowSumThresh: float = 0.35, contractPixels: float = 1.5, dilatePixels: float = 3.5, shadowSumBands: list[str] = ['nir', 'swir1'], resampleMethod: str = 'near', harmonizeOLI: bool = False, preComputedCloudScoreOffset: Image | None = None, preComputedTDOMIRMean: Image | None = None, preComputedTDOMIRStdDev: Image | None = None, landsatCollectionVersion: str = 'C2', verbose: bool = False) ImageCollection[source]# +

Retrieves, processes, and filters Landsat scenes for a specified area and time period.

+

This function retrieves Landsat scenes from Earth Engine, applies various cloud, +cloud shadow, and snow masking techniques, calculates common indices, and returns +a collection of processed images.

Parameters:
    -
  • studyArea (FeatureCollection, Feature, Geometry) –

  • -
  • startYear (int) –

  • -
  • endYear (int) –

  • -
  • startJulian (int) –

  • -
  • endJulian (int) –

  • -
  • toaOrSR (str) –

  • -
  • includeSLCOffL7=False.

  • -
  • defringeL5=False.

  • -
  • applyCloudScore=False.

  • -
  • applyFmaskCloudMask=True.

  • -
  • applyTDOM=False.

  • -
  • applyFmaskCloudShadowMask=True.

  • -
  • applyFmaskSnowMask=False.

  • -
  • cloudScoreThresh=10.

  • -
  • performCloudScoreOffset=True.

  • -
  • cloudScorePctl=10.

  • -
  • zScoreThresh=-1.

  • -
  • shadowSumThresh=0.35.

  • -
  • contractPixels=1.5.

  • -
  • dilatePixels=3.5.

  • -
  • "swir1"]. (shadowSumBands=["nir".) –

  • -
  • resampleMethod="near".

  • -
  • harmonizeOLI=False.

  • -
  • preComputedCloudScoreOffset=None.

  • -
  • preComputedTDOMIRMean=None.

  • -
  • preComputedTDOMIRStdDev=None.

  • -
  • landsatCollectionVersion="C2".

  • -
  • verbose=False. – param1 (int): The first parameter. -param2 (str): The second parameter.

  • +
  • studyArea (ee.Geometry) – The geographic area of interest (study area) as an Earth Engine geometry, Feature, or FeatureCollection object.

  • +
  • startYear (int) – The starting year for the data collection.

  • +
  • endYear (int) – The ending year for the data collection.

  • +
  • startJulian (int) – The starting Julian day of year for the data collection (1-365).

  • +
  • endJulian (int) – The ending Julian day of year for the data collection (1-365).

  • +
  • toaOrSR (str, optional) – Flag indicating desired reflectance type: “TOA” (Top Of Atmosphere) or “SR” (Surface Reflectance). Defaults to “SR”.

  • +
  • includeSLCOffL7 (bool, optional) – Determines whether to include Landsat 7 SLC-off scenes. Defaults to False.

  • +
  • defringeL5 (bool, optional) – Determines whether to defringe Landsat 5 scenes. Defaults to False.

  • +
  • applyCloudScore (bool, optional) – Determines whether to apply cloud masking based on the CloudScore simple algorithm. Defaults to False.

  • +
  • applyFmaskCloudMask (bool, optional) – Determines whether to apply the Fmask cloud mask. Defaults to True.

  • +
  • applyTDOM (bool, optional) – Determines whether to apply the TDOM (Temporal Dark Outlier Mask) technique for cloud shadow masking. Defaults to False.

  • +
  • applyFmaskCloudShadowMask (bool, optional) – Determines whether to apply the Fmask cloud shadow mask. Defaults to True.

  • +
  • applyFmaskSnowMask (bool, optional) – Determines whether to apply the Fmask snow mask. Defaults to False.

  • +
  • cloudScoreThresh (int, optional) – Threshold for the CloudScore simple algorithm to classify a pixel as cloudy. Lower number masks out more. Defaults to 10.

  • +
  • performCloudScoreOffset (bool, optional) – Controls whether to perform an offset correction on the Cloud Score data over bright surfaces. Only use this if bright areas are being masked as clouds. Do not use this in persistently cloud areas. Defaults to True.

  • +
  • cloudScorePctl (int, optional) – Percentile of the Cloud Score product to use for the offset correction. Defaults to 10.

  • +
  • zScoreThresh (float, optional) – Threshold for the z-score used in TDOM cloud shadow masking. Pixels with z-scores below this threshold are masked. Defaults to -1.

  • +
  • shadowSumThresh (float, optional) – Threshold for the sum of reflectance in shadow bands used in TDOM cloud shadow masking. Pixels below this threshold and the zScoreThresh are masked as dark outliers (likely cloud shadows). Defaults to 0.35.

  • +
  • contractPixels (float, optional) – Number of pixels to contract cloud and shadow masks by. Defaults to 1.5.

  • +
  • dilatePixels (float, optional) – Number of pixels to dilate cloud and shadow masks by. Defaults to 3.5.

  • +
  • shadowSumBands (list[str], optional) – List of band names to use for calculating the sum of reflectance in TDOM cloud shadow masking. Defaults to [“nir”, “swir1”].

  • +
  • resampleMethod (str, optional) – Specifies the resampling method to apply to the imagery. Valid options include “near”, “bilinear”, and “bicubic”. Defaults to “near”.

  • +
  • harmonizeOLI (bool, optional) – Determines whether to harmonize OLI data to match TM/ETM+ spectral response. Defaults to False.

  • +
  • preComputedCloudScoreOffset (float | None, optional) – Pre-computed Cloud Score offset value to avoid redundant calculations. Defaults to None (automatic calculation).

  • +
  • preComputedTDOMIRMean (float | None, optional) – Pre-computed mean of the IR band used in TDOM cloud shadow masking to avoid redundant calculations. Defaults to None (automatic calculation).

  • +
  • preComputedTDOMIRStdDev (float | None, optional) – Pre-computed standard deviation of the IR band used in TDOM cloud shadow masking to avoid redundant calculations. Defaults to None (automatic calculation).

  • +
  • landsatCollectionVersion (str, optional) – Specifies the Landsat collection version to use (e.g., “C1”, “C2”). Defaults to “C2”.

  • +
  • verbose (bool, optional) – Controls whether to print additional information during processing. Defaults to False.

Returns:
-

A collection of Landsat scenes.

+

A collection of analysis ready, cloud and cloud shadow asked Landsat scenes with common band names.

Return type:
-

ImageCollection

+

ee.ImageCollection

+
>>> import geeViz.getImagesLib as gil
+>>> Map = gil.Map
+>>> ee = gil.ee
+>>> studyArea = gil.testAreas["CO"]
+>>> composite = gil.getProcessedLandsatScenes(studyArea, 2023, 2023, 190, 250).median()
+>>> Map.addLayer(composite, gil.vizParamsFalse, "Landsat Composite")
+>>> Map.addLayer(studyArea, {"canQuery": False}, "Study Area")
+>>> Map.centerObject(studyArea)
+>>> Map.turnOnInspector()
+>>> Map.view()
+
+
+
+ +
+
+geeViz.getImagesLib.getProcessedModis(startYear: int, endYear: int, startJulian: int, endJulian: int, zenithThresh: float = 90, addLookAngleBands: bool = True, applyCloudScore: bool = True, applyTDOM: bool = True, useTempInCloudMask: bool = True, cloudScoreThresh: int = 20, performCloudScoreOffset: bool = True, cloudScorePctl: int = 10, zScoreThresh: float = -1, shadowSumThresh: float = 0.35, contractPixels: int = 0, dilatePixels: float = 2.5, shadowSumBands: list[str] = ['nir', 'swir2'], resampleMethod: str = 'bicubic', preComputedCloudScoreOffset: Image | None = None, preComputedTDOMIRMean: Image | None = None, preComputedTDOMIRStdDev: Image | None = None, addToMap: bool = False, crs: str = 'EPSG:4326', scale: int | None = 250, transform: list[int] | None = None)[source]#
+

Retrieves, processes, and filters MODIS imagery for a specified period.

+

This function retrieves daily MODIS imagery from Earth Engine, applies various cloud and +cloud shadow masking techniques, and returns a collection of processed images.

+
+
Parameters:
+
    +
  • startYear (int) – The starting year for the data collection.

  • +
  • endYear (int) – The ending year for the data collection.

  • +
  • startJulian (int) – The starting Julian day of year for the data collection (1-366).

  • +
  • endJulian (int) – The ending Julian day of year for the data collection (1-366).

  • +
  • zenithThresh (float, optional) – Sets the threshold for solar zenith angle in degrees. Pixels with zenith angle exceeding this threshold will be masked out. Defaults to 90.

  • +
  • addLookAngleBands (bool, optional) – Controls whether to include view angle bands in the output. Defaults to True.

  • +
  • applyCloudScore (bool, optional) – Determines whether to apply cloud masking based on the CloudScore simple algorithm adapted to MODIS. Defaults to True.

  • +
  • applyTDOM (bool, optional) – Determines whether to apply the TDOM (Temporal Dark Outlier Mask)

  • +
  • True. (technique for cloud shadow masking. Defaults to) –

  • +
  • useTempInCloudMask (bool, optional) – Determines whether to use the thermal band for cloud masking during MODIS data retrieval. Defaults to True.

  • +
  • cloudScoreThresh (int, optional) – Threshold for the CloudScore simple algorithm to classify a pixel as cloudy. Lower number masks out more. Defaults to 20.

  • +
  • performCloudScoreOffset (bool, optional) – Controls whether to perform an offset correction on the Cloud Score data over bright surfaces. Only use this if bright areas are being masked as clouds. Do not use this in persistently cloud areas. Defaults to True.

  • +
  • cloudScorePctl (int, optional) – Percentile of the Cloud Score product to use for the offset correction. Defaults to 10.

  • +
  • zScoreThresh (float, optional) – Threshold for the z-score used in TDOM cloud shadow masking. Pixels with z-scores below this threshold are masked. Defaults to -1.

  • +
  • shadowSumThresh (float, optional) – Threshold for the sum of reflectance in shadow bands used in TDOM cloud shadow masking. Pixels below this threshold and the zScoreThresh are masked as dark outliers (likely cloud shadows). Defaults to 0.35.

  • +
  • contractPixels (int, optional) – Number of pixels to contract cloud and shadow masks by. Defaults to 0.

  • +
  • dilatePixels (float, optional) – Number of pixels to dilate cloud and shadow masks by. Defaults to 2.5.

  • +
  • shadowSumBands (list[str], optional) – List of band names to use for calculating the sum of reflectance in TDOM cloud shadow masking. Defaults to [“nir”, “swir2”].

  • +
  • resampleMethod (str, optional) – Specifies the resampling method to apply to the imagery. Valid options include “near”, “bilinear”, and “bicubic”. Defaults to “bicubic”.

  • +
  • preComputedCloudScoreOffset (float | None, optional) – Pre-computed Cloud Score offset value to avoid redundant calculations. Defaults to None (automatic calculation).

  • +
  • preComputedTDOMIRMean (float | None, optional) – Pre-computed mean of the IR band used in TDOM cloud shadow masking to avoid redundant calculations. Defaults to None (automatic calculation).

  • +
  • preComputedTDOMIRStdDev (float | None, optional) – Pre-computed standard deviation of the IR band used in TDOM cloud shadow masking to avoid redundant calculations. Defaults to None (automatic calculation).

  • +
  • addToMap (bool, optional) – Controls whether to add intermediate processing steps (masked medians) to the Earth Engine map for visualization purposes. Defaults to False.

  • +
  • crs (str, optional) – Only used if addToMap is True. Coordinate Reference System (CRS) for the output imagery. Defaults to “EPSG:4326”.

  • +
  • scale (int | None, optional) – Only used if addToMap is True. Scale (resolution) of the output imagery in meters. Defaults to 250.

  • +
  • transform (list | None, optional) – Only used if addToMap is True. Optional transformation matrix to apply to the output imagery. Defaults to None.

  • +
+
+
+
>>> import geeViz.getImagesLib as gil
+>>> Map = gil.Map
+>>> ee = gil.ee
+>>> crs = gil.common_projections["NLCD_CONUS"]["crs"]
+>>> transform = gil.common_projections["NLCD_CONUS"]["transform"]
+>>> scale = 240
+>>> transform[0] = scale
+>>> transform[4] = -scale
+>>> composite = gil.getProcessedModis(2024, 2024, 190, 250).median().reproject(crs, transform)
+>>> Map.addLayer(composite, gil.vizParamsFalse, "MODIS Composite")
+>>> Map.setCenter(-111, 41, 7)
+>>> Map.turnOnInspector()
+>>> Map.view()
+
+
@@ -1663,7 +2167,7 @@

Details#<
-geeViz.getImagesLib.getS1(studyArea: Geometry, startYear: int, endYear: int, startJulian: int, endJulian: int, polarization: str = 'VV', pass_direction: str = 'ASCENDING') ImageCollection[source]#
+geeViz.getImagesLib.getS1(studyArea: Geometry | Feature | FeatureCollection, startYear: int, endYear: int, startJulian: int, endJulian: int, polarization: str = 'VV', pass_direction: str = 'ASCENDING') ImageCollection[source]#

Loads Sentinel-1 GRD data for a given area and time period.

Parameters:
@@ -1685,14 +2189,14 @@

Details#<
-geeViz.getImagesLib.getS2(studyArea: Geometry, startDate: Date, endDate: Date, startJulian: int, endJulian: int, resampleMethod: str = 'nearest', toaOrSR: str = 'TOA', convertToDailyMosaics: bool = True, addCloudProbability: bool = False, addCloudScorePlus: bool = True, cloudScorePlusScore: str = 'cs') ImageCollection[source]#
-

Loads and processes Sentinel-2 data for a given area and time period.

+geeViz.getImagesLib.getS2(studyArea: Geometry | Feature | FeatureCollection, startDate: Date | datetime | str, endDate: Date | datetime | str, startJulian: int = 1, endJulian: int = 365, resampleMethod: str = 'nearest', toaOrSR: str = 'TOA', convertToDailyMosaics: bool = True, addCloudProbability: bool = False, addCloudScorePlus: bool = True, cloudScorePlusScore: str = 'cs') ImageCollection[source]# +

Loads Sentinel-2 data for a given area and time period and joins cloud score information. Partially deprecated in favor of the simpler superSimpleGetS2.

Parameters:
  • studyArea – The geographic area of interest.

  • -
  • startDate – The start date of the desired data.

  • -
  • endDate – The end date of the desired data.

  • +
  • startDate – The start date of the desired data. Can be an ee.Date object, datetime object, or date string.

  • +
  • endDate – The end date of the desired data. Can be an ee.Date object, datetime object, or date string.

  • startJulian – The start Julian day of the desired data.

  • endJulian – The end Julian day of the desired data.

  • resampleMethod – The resampling method (default: “nearest”).

  • @@ -1704,21 +2208,36 @@

    Details#<

Returns:
-

An Earth Engine ImageCollection containing the processed Sentinel-2 data.

+

A collection of Sentinel-2 satellite images filtered by the specified criteria.

+
+
Return type:
+

ee.ImageCollection

+
>>> import geeViz.getImagesLib as gil
+>>> Map = gil.Map
+>>> ee = gil.ee
+>>> studyArea = gil.testAreas["CA"]
+>>> composite = gil.getS2(studyArea, "2024-01-01", "2024-12-31", 190, 250).median()
+>>> Map.addLayer(composite, gil.vizParamsFalse, "Sentinel-2 Composite")
+>>> Map.addLayer(studyArea, {"canQuery": False}, "Study Area")
+>>> Map.centerObject(studyArea)
+>>> Map.turnOnInspector()
+>>> Map.view()
+
+
-geeViz.getImagesLib.getSentinel2(studyArea: Geometry, startDate: Date, endDate: Date, startJulian: int, endJulian: int, resampleMethod: str = 'nearest', toaOrSR: str = 'TOA', convertToDailyMosaics: bool = True, addCloudProbability: bool = False, addCloudScorePlus: bool = True, cloudScorePlusScore: str = 'cs') ImageCollection#
-

Loads and processes Sentinel-2 data for a given area and time period.

+geeViz.getImagesLib.getSentinel2(studyArea: Geometry | Feature | FeatureCollection, startDate: Date | datetime | str, endDate: Date | datetime | str, startJulian: int = 1, endJulian: int = 365, resampleMethod: str = 'nearest', toaOrSR: str = 'TOA', convertToDailyMosaics: bool = True, addCloudProbability: bool = False, addCloudScorePlus: bool = True, cloudScorePlusScore: str = 'cs') ImageCollection# +

Loads Sentinel-2 data for a given area and time period and joins cloud score information. Partially deprecated in favor of the simpler superSimpleGetS2.

Parameters:
  • studyArea – The geographic area of interest.

  • -
  • startDate – The start date of the desired data.

  • -
  • endDate – The end date of the desired data.

  • +
  • startDate – The start date of the desired data. Can be an ee.Date object, datetime object, or date string.

  • +
  • endDate – The end date of the desired data. Can be an ee.Date object, datetime object, or date string.

  • startJulian – The start Julian day of the desired data.

  • endJulian – The end Julian day of the desired data.

  • resampleMethod – The resampling method (default: “nearest”).

  • @@ -1730,9 +2249,24 @@

    Details#<

Returns:
-

An Earth Engine ImageCollection containing the processed Sentinel-2 data.

+

A collection of Sentinel-2 satellite images filtered by the specified criteria.

+
+
Return type:
+

ee.ImageCollection

+
>>> import geeViz.getImagesLib as gil
+>>> Map = gil.Map
+>>> ee = gil.ee
+>>> studyArea = gil.testAreas["CA"]
+>>> composite = gil.getS2(studyArea, "2024-01-01", "2024-12-31", 190, 250).median()
+>>> Map.addLayer(composite, gil.vizParamsFalse, "Sentinel-2 Composite")
+>>> Map.addLayer(studyArea, {"canQuery": False}, "Study Area")
+>>> Map.centerObject(studyArea)
+>>> Map.turnOnInspector()
+>>> Map.view()
+
+
@@ -1843,12 +2377,24 @@

Details#<

Note

    -
  • As the data are not normalized in this method, ensuring the medoidIncludeBands have roughly comparable ranges of values

  • +
  • As the data are not normalized in this method, ensuring the medoidIncludeBands have roughly comparable ranges of values helps the function work properly. For example, if temperature is included, it will account for most of the variance thus resulting in a medoid mosaic that will more or less choose values closest to the median temperature only, rather than all the bands

  • +
  • The function assumes that the image collection has consistent band names and data types.

-

helps the function work properly. For example, if temperature is included, it will account for most of the variance -thus resulting in a medoid mosaic that will more or less choose values closest to the median temperature only, rather than -all the bands -* The function assumes that the image collection has consistent band names and data types.

+
+
>>> import geeViz.getImagesLib as gil
+>>> Map = gil.Map
+>>> ee = gil.ee
+>>> studyArea = gil.testAreas["CO"]
+>>> s2s = gil.superSimpleGetS2(studyArea, "2024-01-01", "2024-12-31", 190, 250)
+>>> median_composite = s2s.median()
+>>> medoid_composite = gil.medoidMosaicMSD(s2s, ["green", "red", "nir", "swir1", "swir2"])
+>>> Map.addLayer(median_composite, gil.vizParamsFalse10k, "Sentinel-2 Median Composite")
+>>> Map.addLayer(medoid_composite, gil.vizParamsFalse10k, "Sentinel-2 Medoid Composite")
+>>> Map.addLayer(studyArea, {"canQuery": False}, "Study Area")
+>>> Map.centerObject(studyArea)
+>>> Map.turnOnInspector()
+>>> Map.view()
+

@@ -1987,17 +2533,61 @@

Details#<

+
+
+geeViz.getImagesLib.simpleWaterMask(img: Image, contractPixels: int = 0, slope_thresh: float = 10, elevationImagePath: str = 'USGS/3DEP/10m', elevationFocalMeanRadius: float = 5.5) Image[source]#
+

Performs a basic on-the-fly water masking for TOA reflectance imagery.

+

This function creates a water mask based on thresholds applied to Tasseled Cap angles, brightness, and slope. +It’s designed for time-sensitive analysis and works well when wet snow is absent. However, wet snow in flat areas +can lead to false positives. SR data might cause false negatives (omissions).

+
+
Parameters:
+
    +
  • img (ee.Image) – The input Earth Engine image (TOA reflectance data recommended).

  • +
  • contractPixels (int, optional) – Number of pixels to contract the water mask by for morphological closing. Defaults to 0 (no contraction).

  • +
  • slope_thresh (float, optional) – Threshold for slope (degrees) to identify flat areas suitable for water masking. Defaults to 10.

  • +
  • elevationImagePath (str, optional) – Path to the Earth Engine image containing elevation data. Defaults to “USGS/3DEP/10m” (10m DEM from USGS 3D Elevation Program).

  • +
  • elevationFocalMeanRadius (float, optional) – Radius (in meters) for the focal mean filter applied to the elevation data before calculating slope. Defaults to 5.5.

  • +
+
+
Returns:
+

The water mask image with a single band named “waterMask”.

+
+
Return type:
+

ee.Image

+
+
+
>>> import geeViz.getImagesLib as gil
+>>> Map = gil.Map
+>>> ee = gil.ee
+>>> studyArea = gil.testAreas["CO"]
+>>> s2s = gil.superSimpleGetS2(studyArea, "2024-01-01", "2024-12-31", 190, 250).map(lambda img: gil.getTasseledCap(img.divide(10000)))
+>>> median_composite = s2s.median()
+>>> water = gil.simpleWaterMask(median_composite).rename("Water")
+>>> water = water.selfMask().set({"Water_class_values": [1], "Water_class_names": ["Water"], "Water_class_palette": ["0000DD"]})
+>>> Map.addLayer(median_composite, gil.vizParamsFalse, "Sentinel-2 Median Composite")
+>>> Map.addLayer(water, {"autoViz": True}, "Water Mask")
+>>> Map.addLayer(studyArea, {"canQuery": False}, "Study Area")
+>>> Map.centerObject(studyArea, 12)
+>>> Map.turnOnInspector()
+>>> Map.view()
+
+
+
+
-geeViz.getImagesLib.superSimpleGetS2(studyArea: Geometry, startDate: str, endDate: str, toaOrSR: str = 'TOA', applyCloudScorePlus: bool = True, cloudScorePlusThresh: float = 0.6, cloudScorePlusScore: str = 'cs') ImageCollection[source]#
+geeViz.getImagesLib.superSimpleGetS2(studyArea: Geometry | Feature | FeatureCollection, startDate: Date | datetime | str, endDate: Date | datetime | str, startJulian: int = 1, endJulian: int = 365, toaOrSR: str = 'TOA', applyCloudScorePlus: bool = True, cloudScorePlusThresh: float = 0.6, cloudScorePlusScore: str = 'cs') ImageCollection[source]#

This function retrieves Sentinel-2 satellite imagery from Earth Engine for a specified study area and date range. It applies the cloudScore+ algorithm unless told otherwise.

Parameters:

-
+
diff --git a/docs/build/html/notebooks/CCDCVizNotebook.html b/docs/build/html/notebooks/CCDCVizNotebook.html index 1bdfd7e..bdfdaf5 100644 --- a/docs/build/html/notebooks/CCDCVizNotebook.html +++ b/docs/build/html/notebooks/CCDCVizNotebook.html @@ -6,7 +6,7 @@ - CCDC Visualization Notebook - geeViz "2024.9.2" docs + CCDC Visualization Notebook - geeViz "2024.9.3" docs @@ -142,7 +142,7 @@
@@ -168,7 +168,7 @@
- geeViz "2024.9.2" docs + geeViz "2024.9.3" docs @@ -502,7 +502,7 @@

CCDC Visualization Notebook +

diff --git a/docs/build/html/notebooks/LANDTRENDRWrapperNotebook.html b/docs/build/html/notebooks/LANDTRENDRWrapperNotebook.html index 4423b3e..d7f6ae6 100644 --- a/docs/build/html/notebooks/LANDTRENDRWrapperNotebook.html +++ b/docs/build/html/notebooks/LANDTRENDRWrapperNotebook.html @@ -6,7 +6,7 @@ - Run LandTrendr and Visualize Outputs - geeViz "2024.9.2" docs + Run LandTrendr and Visualize Outputs - geeViz "2024.9.3" docs @@ -142,7 +142,7 @@
@@ -168,7 +168,7 @@
- geeViz "2024.9.2" docs + geeViz "2024.9.3" docs @@ -681,7 +681,7 @@

Run LandTrendr and Visualize Outputs +

diff --git a/docs/build/html/notebooks/LCMAP_and_LCMS_Viewer_Notebook.html b/docs/build/html/notebooks/LCMAP_and_LCMS_Viewer_Notebook.html index 75d0e80..6cb28ea 100644 --- a/docs/build/html/notebooks/LCMAP_and_LCMS_Viewer_Notebook.html +++ b/docs/build/html/notebooks/LCMAP_and_LCMS_Viewer_Notebook.html @@ -6,7 +6,7 @@ - LCMAP and LCMS Outputs Viewer - geeViz "2024.9.2" docs + LCMAP and LCMS Outputs Viewer - geeViz "2024.9.3" docs @@ -142,7 +142,7 @@
@@ -168,7 +168,7 @@
- geeViz "2024.9.2" docs + geeViz "2024.9.3" docs @@ -647,7 +647,7 @@

Bring in LCMS GEE collections +

diff --git a/docs/build/html/notebooks/areaChart_examples.html b/docs/build/html/notebooks/areaChart_examples.html index 28b1984..d032b4a 100644 --- a/docs/build/html/notebooks/areaChart_examples.html +++ b/docs/build/html/notebooks/areaChart_examples.html @@ -6,7 +6,7 @@ - Visualizing Area Summaries - geeViz "2024.9.2" docs + Visualizing Area Summaries - geeViz "2024.9.3" docs @@ -142,7 +142,7 @@
@@ -168,7 +168,7 @@
- geeViz "2024.9.2" docs + geeViz "2024.9.3" docs @@ -1407,7 +1407,7 @@

Other charting summary zone selection methods +

diff --git a/docs/build/html/notebooks/dynamicWorldExampleNotebook.html b/docs/build/html/notebooks/dynamicWorldExampleNotebook.html index bfde5c2..fa44757 100644 --- a/docs/build/html/notebooks/dynamicWorldExampleNotebook.html +++ b/docs/build/html/notebooks/dynamicWorldExampleNotebook.html @@ -6,7 +6,7 @@ - Visualizing Dynamic World - geeViz "2024.9.2" docs + Visualizing Dynamic World - geeViz "2024.9.3" docs @@ -142,7 +142,7 @@
@@ -168,7 +168,7 @@
- geeViz "2024.9.2" docs + geeViz "2024.9.3" docs @@ -612,7 +612,7 @@

Create Sankey Charts

-
+
diff --git a/docs/build/html/notebooks/gee2PandasExample.html b/docs/build/html/notebooks/gee2PandasExample.html index 962be96..6fda660 100644 --- a/docs/build/html/notebooks/gee2PandasExample.html +++ b/docs/build/html/notebooks/gee2PandasExample.html @@ -6,7 +6,7 @@ - Examples of how to work between GEE and Pandas - geeViz "2024.9.2" docs + Examples of how to work between GEE and Pandas - geeViz "2024.9.3" docs @@ -142,7 +142,7 @@
@@ -168,7 +168,7 @@
- geeViz "2024.9.2" docs + geeViz "2024.9.3" docs @@ -504,7 +504,7 @@

Examples of how to work between GEE and Pandas +

diff --git a/docs/build/html/notebooks/geeViewExampleNotebook.html b/docs/build/html/notebooks/geeViewExampleNotebook.html index 32a4d22..6d03c3c 100644 --- a/docs/build/html/notebooks/geeViewExampleNotebook.html +++ b/docs/build/html/notebooks/geeViewExampleNotebook.html @@ -6,7 +6,7 @@ - Starter geeViz geeView Notebook - geeViz "2024.9.2" docs + Starter geeViz geeView Notebook - geeViz "2024.9.3" docs @@ -142,7 +142,7 @@
@@ -168,7 +168,7 @@
- geeViz "2024.9.2" docs + geeViz "2024.9.3" docs @@ -644,7 +644,7 @@

Using geeView’s +

diff --git a/docs/build/html/notebooks/geeViewVSFoliumViewerExampleNotebook.html b/docs/build/html/notebooks/geeViewVSFoliumViewerExampleNotebook.html index e0fd3c5..f29fb46 100644 --- a/docs/build/html/notebooks/geeViewVSFoliumViewerExampleNotebook.html +++ b/docs/build/html/notebooks/geeViewVSFoliumViewerExampleNotebook.html @@ -6,7 +6,7 @@ - Starter geeViz Folium Viewer Notebook - geeViz "2024.9.2" docs + Starter geeViz Folium Viewer Notebook - geeViz "2024.9.3" docs @@ -142,7 +142,7 @@
@@ -168,7 +168,7 @@
- geeViz "2024.9.2" docs + geeViz "2024.9.3" docs @@ -884,7 +884,7 @@

Example of how to utilize the geeViz’s Folium-based viewer +

diff --git a/docs/build/html/notebooks/geeViz_geeMap_comparison_tutorial.html b/docs/build/html/notebooks/geeViz_geeMap_comparison_tutorial.html index 8a0c361..892e34f 100644 --- a/docs/build/html/notebooks/geeViz_geeMap_comparison_tutorial.html +++ b/docs/build/html/notebooks/geeViz_geeMap_comparison_tutorial.html @@ -6,7 +6,7 @@ - A comparison between geeViz and geeMap’s map visualization capabilities - geeViz "2024.9.2" docs + A comparison between geeViz and geeMap’s map visualization capabilities - geeViz "2024.9.3" docs @@ -142,7 +142,7 @@
@@ -168,7 +168,7 @@
- geeViz "2024.9.2" docs + geeViz "2024.9.3" docs @@ -905,7 +905,7 @@

Using geeMap and geeViz together +

diff --git a/docs/build/html/notebooks/getLandsatWrapperNotebook.html b/docs/build/html/notebooks/getLandsatWrapperNotebook.html index 2e23e25..4b2c911 100644 --- a/docs/build/html/notebooks/getLandsatWrapperNotebook.html +++ b/docs/build/html/notebooks/getLandsatWrapperNotebook.html @@ -6,7 +6,7 @@ - Create High Quality Landsat Composites - geeViz "2024.9.2" docs + Create High Quality Landsat Composites - geeViz "2024.9.3" docs @@ -142,7 +142,7 @@
@@ -168,7 +168,7 @@
- geeViz "2024.9.2" docs + geeViz "2024.9.3" docs @@ -664,7 +664,7 @@

Improving cloud shadow masking using TDOM +

diff --git a/docs/build/html/notebooks/global_land_cover_example_notebook.html b/docs/build/html/notebooks/global_land_cover_example_notebook.html index c4152e6..5c947b3 100644 --- a/docs/build/html/notebooks/global_land_cover_example_notebook.html +++ b/docs/build/html/notebooks/global_land_cover_example_notebook.html @@ -6,7 +6,7 @@ - Visualizing Global Land Cover - geeViz "2024.9.2" docs + Visualizing Global Land Cover - geeViz "2024.9.3" docs @@ -142,7 +142,7 @@
@@ -168,7 +168,7 @@
- geeViz "2024.9.2" docs + geeViz "2024.9.3" docs @@ -567,7 +567,7 @@

Create Sankey Charts

-
+
diff --git a/docs/build/html/notebooks/lcmsViewerExampleNotebook.html b/docs/build/html/notebooks/lcmsViewerExampleNotebook.html index 90e5705..553ff82 100644 --- a/docs/build/html/notebooks/lcmsViewerExampleNotebook.html +++ b/docs/build/html/notebooks/lcmsViewerExampleNotebook.html @@ -6,7 +6,7 @@ - LCMS Viewer Intro Notebook - geeViz "2024.9.2" docs + LCMS Viewer Intro Notebook - geeViz "2024.9.3" docs @@ -142,7 +142,7 @@
@@ -168,7 +168,7 @@
- geeViz "2024.9.2" docs + geeViz "2024.9.3" docs @@ -698,7 +698,7 @@

Time lapses enable quick visualization of multi-temporal +

diff --git a/docs/build/html/notebooks/mapBiomasViewerExampleNotebook.html b/docs/build/html/notebooks/mapBiomasViewerExampleNotebook.html index 1623eb4..ddf2930 100644 --- a/docs/build/html/notebooks/mapBiomasViewerExampleNotebook.html +++ b/docs/build/html/notebooks/mapBiomasViewerExampleNotebook.html @@ -6,7 +6,7 @@ - Visualizing MapBiomas Datasets - geeViz "2024.9.2" docs + Visualizing MapBiomas Datasets - geeViz "2024.9.3" docs @@ -142,7 +142,7 @@
@@ -168,7 +168,7 @@
- geeViz "2024.9.2" docs + geeViz "2024.9.3" docs @@ -576,7 +576,7 @@

Create Sankey Charts

-
+
diff --git a/docs/build/html/objects.inv b/docs/build/html/objects.inv index d477565..74bb771 100644 Binary files a/docs/build/html/objects.inv and b/docs/build/html/objects.inv differ diff --git a/docs/build/html/overview.html b/docs/build/html/overview.html index 1dad5be..68a5cb4 100644 --- a/docs/build/html/overview.html +++ b/docs/build/html/overview.html @@ -6,7 +6,7 @@ - Overview - geeViz "2024.9.2" docs + Overview - geeViz "2024.9.3" docs @@ -142,7 +142,7 @@
@@ -168,7 +168,7 @@
- geeViz "2024.9.2" docs + geeViz "2024.9.3" docs @@ -329,7 +329,7 @@

Overview

-
+
diff --git a/docs/build/html/py-modindex.html b/docs/build/html/py-modindex.html index a02c0d8..c12d847 100644 --- a/docs/build/html/py-modindex.html +++ b/docs/build/html/py-modindex.html @@ -4,7 +4,7 @@ - Python Module Index - geeViz "2024.9.2" docs + Python Module Index - geeViz "2024.9.3" docs @@ -140,7 +140,7 @@
@@ -166,7 +166,7 @@
- geeViz "2024.9.2" docs + geeViz "2024.9.3" docs @@ -352,7 +352,7 @@

Python Module Index

-
+
diff --git a/docs/build/html/search.html b/docs/build/html/search.html index 986eabe..4d42b6d 100644 --- a/docs/build/html/search.html +++ b/docs/build/html/search.html @@ -4,7 +4,7 @@ - Search - geeViz "2024.9.2" docs + Search - geeViz "2024.9.3" docs @@ -139,7 +139,7 @@
@@ -165,7 +165,7 @@
- geeViz "2024.9.2" docs + geeViz "2024.9.3" docs @@ -282,7 +282,7 @@
-
+
diff --git a/docs/build/html/searchindex.js b/docs/build/html/searchindex.js index 593c1ba..affdc07 100644 --- a/docs/build/html/searchindex.js +++ b/docs/build/html/searchindex.js @@ -1 +1 @@ -Search.setIndex({"docnames": ["examples", "index", "info/geeViz.assetManagerLib", "info/geeViz.changeDetectionLib", "info/geeViz.cloudStorageManagerLib", "info/geeViz.foliumView", "info/geeViz.gee2Pandas", "info/geeViz.geeView", "info/geeViz.getImagesLib", "info/geeViz.phEEnoViz", "info/geeViz.taskManagerLib", "installation", "modules", "notebooks/CCDCVizNotebook", "notebooks/LANDTRENDRWrapperNotebook", "notebooks/LCMAP_and_LCMS_Viewer_Notebook", "notebooks/areaChart_examples", "notebooks/dynamicWorldExampleNotebook", "notebooks/gee2PandasExample", "notebooks/geeViewExampleNotebook", "notebooks/geeViewVSFoliumViewerExampleNotebook", "notebooks/geeViz_geeMap_comparison_tutorial", "notebooks/getLandsatWrapperNotebook", "notebooks/global_land_cover_example_notebook", "notebooks/lcmsViewerExampleNotebook", "notebooks/mapBiomasViewerExampleNotebook", "overview", "templates/examples_template", "templates/info/geeViz.examples"], "filenames": ["examples.rst", "index.rst", "info/geeViz.assetManagerLib.rst", "info/geeViz.changeDetectionLib.rst", "info/geeViz.cloudStorageManagerLib.rst", "info/geeViz.foliumView.rst", "info/geeViz.gee2Pandas.rst", "info/geeViz.geeView.rst", "info/geeViz.getImagesLib.rst", "info/geeViz.phEEnoViz.rst", "info/geeViz.taskManagerLib.rst", "installation.rst", "modules.rst", "notebooks/CCDCVizNotebook.ipynb", "notebooks/LANDTRENDRWrapperNotebook.ipynb", "notebooks/LCMAP_and_LCMS_Viewer_Notebook.ipynb", "notebooks/areaChart_examples.ipynb", "notebooks/dynamicWorldExampleNotebook.ipynb", "notebooks/gee2PandasExample.ipynb", "notebooks/geeViewExampleNotebook.ipynb", "notebooks/geeViewVSFoliumViewerExampleNotebook.ipynb", "notebooks/geeViz_geeMap_comparison_tutorial.ipynb", "notebooks/getLandsatWrapperNotebook.ipynb", "notebooks/global_land_cover_example_notebook.ipynb", "notebooks/lcmsViewerExampleNotebook.ipynb", "notebooks/mapBiomasViewerExampleNotebook.ipynb", "overview.rst", "templates/examples_template.rst", "templates/info/geeViz.examples.rst"], "titles": ["Examples", "geeViz Documentation", "geeViz.assetManagerLib", "geeViz.changeDetectionLib", "geeViz.cloudStorageManagerLib", "geeViz.foliumView", "geeViz.gee2Pandas", "geeViz.geeView", "geeViz.getImagesLib", "geeViz.phEEnoViz", "geeViz.taskManagerLib", "Installation", "Details", "CCDC Visualization Notebook", "Run LandTrendr and Visualize Outputs", "LCMAP and LCMS Outputs Viewer", "Visualizing Area Summaries", "Visualizing Dynamic World", "Examples of how to work between GEE and Pandas", "Starter geeViz geeView Notebook", "Starter geeViz Folium Viewer Notebook", "A comparison between geeViz and geeMap\u2019s map visualization capabilities", "Create High Quality Landsat Composites", "Visualizing Global Land Cover", "LCMS Viewer Intro Notebook", "Visualizing MapBiomas Datasets", "Overview", "Examples", "geeViz.examples"], "terms": {"ani": [0, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 27], "follow": [0, 11, 16, 27], "import": [0, 1, 11, 12, 13, 14, 15, 16, 17, 18, 20, 21, 22, 23, 24, 25, 27], "timelapseexampl": [0, 27], "getlandsatwrapp": [0, 22, 27], "getsentinel2wrapp": [0, 27], "getcombinedlandsatsentinel2wrapp": [0, 27], "harmonicregressionwrapp": [0, 27], "landtrendrwrapp": [0, 27], "landtrendrviz": [0, 27], "ccdcviz": [0, 27], "lcmsviewerexampl": [0, 27], "lcmap_and_lcms_view": [0, 27], "pheenovizwrapp": [0, 27], "gfstimelaps": [0, 27], "geeview": [0, 1, 11, 13, 14, 15, 16, 17, 18, 20, 21, 22, 23, 25], "map": [0, 1, 5, 7, 11, 12, 13, 14, 15, 17, 18, 20, 22, 23, 24, 25], "displai": [0, 15, 16, 17, 18, 19], "correctli": 0, "below": [0, 12], "thei": [0, 8, 12, 15, 16, 19, 21], "when": [0, 12, 13, 14, 16, 17, 19, 21, 23, 25], "you": [0, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25], "them": [0, 8, 12, 13, 16, 21, 22, 25], "starter": [0, 1], "ad": [0, 1, 5, 7, 12, 13, 14, 15, 17, 18, 20, 21, 22, 23, 24, 25], "gee": [0, 1, 2, 3, 5, 6, 7, 8, 10, 11, 12, 13, 14, 16, 17, 20, 21, 22, 23, 24, 25], "imag": [0, 1, 8, 11, 12, 13, 14, 15, 17, 20, 21, 22, 23, 24, 25], "nlcd": [0, 1, 12, 16, 21], "view": [0, 1, 5, 7, 11, 12, 13, 14, 15, 16, 17, 18, 20, 21, 22, 23, 24, 25], "queri": [0, 1, 12, 15, 20, 23, 24, 25], "multipl": [0, 1, 12], "layer": [0, 1, 5, 7, 12, 13, 14, 15, 17, 18, 20, 21, 22, 23, 24, 25], "introduc": [0, 1, 22], "lookup": [0, 1, 15, 23, 25], "tabl": [0, 1, 12, 15, 18], "custom": [0, 1, 12, 17, 23, 24, 25], "style": [0, 1, 12], "vector": [0, 1, 12], "raster": [0, 1, 12, 18], "local": [0, 1, 12, 13, 14, 15, 16, 17, 18, 20, 21, 22, 23, 24, 25], "geojson": [0, 1, 12], "": [0, 1, 11, 12, 14, 15, 16, 22, 24], "addtimelaps": [0, 1, 7, 12, 13, 14, 15, 16, 17, 23, 24, 25], "function": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 14, 15, 16, 17, 18, 20, 21, 22, 23, 24, 25], "an": [0, 1, 7, 9, 11, 12, 13, 14, 15, 16, 17, 18, 20, 21, 22, 23, 24, 25], "viewer": [0, 1, 12, 13, 22], "intro": [0, 1], "first": [0, 1, 12, 13, 14, 15, 16, 17, 18, 19, 22], "we": [0, 1, 11, 13, 16, 17, 19, 22], "ll": [0, 1, 17, 19, 22], "take": [0, 1, 6, 12, 13, 15, 16, 17], "look": [0, 1, 13, 14, 15, 16, 20], "foundat": [0, 1], "modul": [0, 1, 3, 7, 8, 11, 12, 13, 14, 15, 16, 18, 19, 20, 22, 25], "explor": [0, 1, 12], "creat": [0, 1, 12, 14, 16, 19, 21], "your": [0, 1, 12, 14, 21, 22], "own": [0, 1, 21], "time": [0, 1, 12, 13, 14, 15, 19, 20, 22, 23, 25], "laps": [0, 1, 12, 13, 15, 17, 19, 20, 23, 25], "enabl": [0, 1, 23, 25], "quick": [0, 1, 20], "make": [0, 1, 14, 15, 16, 20, 21, 22], "basic": [0, 1, 12, 21, 22], "calcul": [0, 1, 12, 17], "export": [0, 1, 10, 12, 13, 14, 17], "statist": [0, 1, 12, 17, 18], "sankei": [0, 1, 12], "chart": [0, 1, 12], "over": [0, 1, 12, 15, 16, 22], "landcov": [0, 1, 12, 16, 19, 21], "bring": [0, 1, 13, 14, 16, 18, 19, 20, 24, 25], "collect": [0, 1, 12, 13, 16, 17, 18, 19, 20, 22, 23, 24, 25], "high": [0, 1, 16, 19, 21], "qualiti": [0, 1], "composit": [0, 1, 9, 12, 13, 14, 16, 17], "set": [0, 1, 3, 8, 12, 14, 15, 17, 18, 19, 20, 21, 23, 24, 25], "up": [0, 1, 3, 8, 11, 12, 14, 15, 16, 17, 18, 19, 21, 23, 24, 25], "numer": [0, 1, 12, 28], "paramet": [0, 1, 12, 14, 15, 16, 17, 21, 23, 24, 25], "avail": [0, 1, 12, 15, 16, 19, 24, 25], "improv": [0, 1], "includ": [0, 1, 2, 4, 12, 13, 14, 16, 17, 23, 25], "7": [0, 1, 12, 14, 15, 16, 17, 21], "cloud": [0, 1, 4, 8, 11, 12, 14, 18, 20], "mask": [0, 1, 8, 12, 14, 15, 16, 19], "cloudscor": [0, 1, 12, 14], "method": [0, 1, 3, 5, 7, 8, 9, 11, 12, 13, 14, 15, 20], "shadow": [0, 1, 8, 12, 14], "tdom": [0, 1, 12, 14, 18, 20], "area": [0, 1, 9, 12, 14, 15, 17, 18, 19, 20, 22, 23, 24, 25], "summari": [0, 1, 12, 23, 24, 25], "line": [0, 1, 12, 15, 17, 23, 25], "wai": [0, 1, 13], "non": [0, 1, 12, 15, 19, 21], "themat": [0, 1, 12, 19], "without": [0, 1, 12, 13, 14, 15, 17, 18, 19, 20, 22, 23, 24, 25], "color": [0, 1, 12, 13, 15, 17, 19, 21, 25], "name": [0, 1, 8, 12, 13, 14, 19, 24, 25], "properti": [0, 1, 12, 19, 21, 22, 23], "version": [0, 1, 12, 13, 14, 15, 17, 18, 19, 20, 22, 23, 24, 25], "zone": [0, 1, 14], "select": [0, 1, 12, 13, 14, 15, 17, 19, 21, 22, 23, 24, 25], "A": [0, 1, 12, 19, 22, 24], "comparison": [0, 1, 16], "between": [0, 1, 12, 13, 16], "capabl": [0, 1], "two": [0, 1, 12, 16], "differ": [0, 1, 12, 15, 16, 22], "interfac": [0, 1, 12], "some": [0, 1, 11, 12, 13, 15, 17, 18, 20, 22], "ar": [0, 1, 8, 12, 13, 14, 15, 16, 17, 19, 22, 24, 25], "similar": [0, 1, 16, 20], "togeth": [0, 1], "landscap": [0, 1, 27], "chang": [0, 1, 2, 3, 11, 12, 13, 14, 15, 16, 17, 22, 23, 24, 27], "monitor": [0, 1, 10, 12, 17, 23, 27], "system": [0, 1, 12, 14, 15, 16, 17, 19, 22, 23, 24, 25, 27], "train": [0, 27], "i": [1, 3, 5, 7, 8, 9, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25], "python": [1, 7, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25], "packag": [1, 6, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25], "help": [1, 2, 4, 8, 12, 15, 22, 25], "data": [1, 3, 6, 8, 12, 14, 15, 17, 18, 19, 20, 21, 23, 25, 28], "process": [1, 11, 12, 13, 14, 16, 18, 19, 20, 23, 28], "analysi": [1, 18, 22, 24], "visual": [1, 9, 12, 15, 18, 22, 28], "googl": [1, 4, 11, 12, 15, 16, 17, 19, 24], "earth": [1, 11, 12, 15, 16, 17, 19, 21, 24], "engin": [1, 11, 12, 15, 16, 17, 19, 21, 24], "provid": [1, 12, 14, 15, 16, 17, 19, 21, 22, 23], "number": [1, 12, 14, 16, 17, 19, 23, 24], "work": [1, 6, 8, 12, 14, 16, 17, 19, 20, 21, 22, 25], "filter": [1, 12, 13, 14, 15, 16, 17, 18, 19, 20, 22, 24], "manipul": [1, 12], "manag": [1, 2, 4, 7, 10, 12], "insid": [1, 12], "outsid": 1, "notebook": [1, 11, 12, 16, 17, 21], "environ": [1, 16], "flexibl": 1, "us": [1, 3, 5, 7, 9, 11, 12, 13, 14, 15, 16, 17, 18, 20, 23, 24, 25, 28], "check": [1, 11, 12], "out": [1, 11, 12, 13, 16, 24], "instal": [1, 13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 24, 25], "section": [1, 15], "further": [1, 20], "inform": [1, 12, 25], "how": [1, 12, 13, 14, 15, 16, 17, 22, 28], "exampl": [1, 11, 12, 13, 14, 15, 16, 17, 19, 21, 22, 23, 24, 25], "show": [1, 9, 12, 13, 16, 18, 23, 25], "mapper": [1, 7, 12, 14, 20], "base": [1, 12, 13, 15, 18, 21, 24], "lcm": [1, 12, 13, 16, 17, 19, 21, 22, 23, 25], "framework": [1, 24], "It": [1, 11, 12, 15, 16, 21, 22], "leverag": 1, "same": [1, 12, 13, 16, 18, 21], "code": [1, 11, 12, 14, 15, 16, 17, 20, 24, 25], "abil": 1, "easili": [1, 16], "object": [1, 5, 6, 7, 12, 14, 19, 20, 21, 23, 24, 25], "pleas": [1, 11, 16, 17, 19, 20, 24], "note": [1, 15, 16], "thi": [1, 8, 9, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25], "websit": 1, "still": [1, 12, 21, 22], "under": [1, 12, 13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 24, 25], "develop": [1, 9, 12, 15, 16, 17, 19, 21, 24], "futur": 1, "releas": 1, "have": [1, 11, 12, 14, 16, 19, 20, 24], "more": [1, 2, 6, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 24, 28], "complet": 1, "index": [1, 12, 14, 15, 17, 23, 24], "get": [1, 8, 12, 13, 14, 15, 16, 17, 18, 20, 22, 24], "start": [1, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25], "getimageslib": [1, 13, 14, 15, 16, 18, 20, 22], "changedetectionlib": [1, 13, 14, 15], "taskmanagerlib": 1, "assetmanagerlib": 1, "cloudstoragemanagerlib": 1, "gee2panda": [1, 18], "foliumview": [1, 18, 20], "pheenoviz": 1, "detail": [1, 11, 15, 20], "rgb_to_hex": [1, 12], "basedomain": [1, 12], "cleanaccesstoken": [1, 12], "color_dict_mak": [1, 12], "getproject": [1, 12], "get_poly_gradient_ct": [1, 12], "hex_to_rgb": [1, 12], "isportact": [1, 12], "is_notebook": [1, 12], "linear_gradi": [1, 12], "port": [1, 12, 13, 14, 17, 18, 20], "proxy_url": [1, 12], "refreshtokenpath": [1, 12], "servicekeypath": [1, 12], "project": [1, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 25], "turnofflayerswhentimelapseison": [1, 12, 17, 23, 25], "addareachartlay": [1, 12, 16], "addlay": [1, 5, 7, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25], "addselectlay": [1, 12, 16, 23, 25], "centerobject": [1, 12, 13, 14, 15, 17, 18, 19, 20, 21, 22, 24], "clearmap": [1, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25], "clearmapcommand": [1, 12], "clearmaplay": [1, 12, 17, 23, 25], "populateareachartlayerselect": [1, 12, 16], "setcanreorderlay": [1, 12], "setcent": [1, 12, 17, 21, 25], "setmaptitl": [1, 12], "setqueryboxcolor": [1, 12], "setquerycr": [1, 12, 23, 25], "setquerydateformat": [1, 12, 15, 24], "setqueryprecis": [1, 12], "setqueryscal": [1, 12, 23, 25], "setquerytoinfowindow": [1, 12], "setquerytosidepan": [1, 12], "setquerytransform": [1, 12, 23, 25], "settitl": [1, 12], "setylabelfonts": [1, 12], "setylabelmaxlin": [1, 12], "setzoom": [1, 12], "turnoffalllay": [1, 12, 20, 22], "turnonalllay": [1, 12, 20], "turnonautoareachart": [1, 12, 16, 17, 21, 23, 25], "turnoninspector": [1, 12, 13, 14, 15, 17, 18, 19, 20, 22, 23, 24, 25], "turnonselectionareachart": [1, 12, 16], "turnonuserdefinedareachart": [1, 12, 16], "polylinear_gradi": [1, 12], "refreshtoken": [1, 12], "robustiniti": [1, 12], "run_local_serv": [1, 12], "serviceaccounttoken": [1, 12], "setproject": [1, 12], "verified_initi": [1, 12], "hocalcalgorithm2": [1, 12], "refinedle": [1, 12], "adddateband": [1, 12], "addfullyearjuliandayband": [1, 12], "addindic": [1, 12], "addjuliandayband": [1, 12], "addsaviandevi": [1, 12], "addsensorband": [1, 12], "addsoilindic": [1, 12], "addtcangl": [1, 12], "addyearband": [1, 12], "addyearfractionband": [1, 12], "addyearjuliandayband": [1, 12], "addyearyearfractionband": [1, 12], "addzenithazimuth": [1, 12], "applybitmask": [1, 12], "applycloudscorealgorithm": [1, 12], "cfmask": [1, 12], "cfmaskcloud": [1, 12], "cfmaskcloudshadow": [1, 12], "collectiontoimag": [1, 12], "composited": [1, 12], "compositetimeseri": [1, 12], "dailymosa": [1, 12], "defringelandsat": [1, 12], "exporttoassetwrapp": [1, 12, 14], "exporttocloudstoragewrapp": [1, 12], "exporttodrivewrapp": [1, 12], "fillemptycollect": [1, 12, 14], "formatarg": [1, 12], "getimagecollect": [1, 12], "getlandsat": [1, 12], "getprocessedlandsatscen": [1, 12, 14], "getqabit": [1, 12], "gets1": [1, 12], "gets2": [1, 12], "getsentinel2": [1, 12], "gettasseledcap": [1, 12], "harmonizationchastain": [1, 12], "harmonizationroi": [1, 12], "landsatcloudscor": [1, 12], "maskemptypixel": [1, 12], "masks2cloud": [1, 12], "medoidmosaicmsd": [1, 12], "offsetimaged": [1, 12], "rescal": [1, 12], "setnodata": [1, 12], "siev": [1, 12], "simpleaddindic": [1, 12], "simpleaddtcangl": [1, 12], "simplegettasseledcap": [1, 12], "simpletdom2": [1, 12], "supersimplegets2": [1, 12], "todb": [1, 12], "tonatur": [1, 12], "uniquevalu": [1, 12], "wrapdat": [1, 12], "simplelandtrendr": [1, 12, 14], "rename_blob": [1, 12], "script": [1, 11, 13, 15, 17, 21, 24], "imagecollect": [1, 8, 12, 13, 14, 15, 16, 17, 21, 23, 25], "multi": [1, 12, 16], "tempor": [1, 12, 22], "mapbioma": 1, "dataset": [1, 15, 16, 17, 19, 21, 23, 24], "dynam": 1, "world": 1, "global": [1, 14, 17, 21, 25], "land": [1, 12, 15, 16, 17, 21, 24, 25], "cover": [1, 12, 15, 16, 17, 21, 24, 25], "lcmap": [1, 16], "output": [1, 3, 12, 13, 17, 18, 24], "consist": [1, 12], "landsat": [1, 8, 12, 14, 21], "interact": [1, 12, 16, 19, 20, 24], "summar": [1, 12, 16, 17, 21], "compar": [1, 12, 24], "other": [1, 12, 14, 15, 22], "learn": [1, 16, 17, 19, 24], "geemap": 1, "run": [1, 12, 13, 16, 17, 21], "landtrendr": [1, 3, 12], "ccdc": [1, 3, 12, 15], "asset": [2, 12, 13, 14, 16, 17, 19, 22, 24, 25], "copi": [2, 12, 13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 24, 25], "delet": [2, 4, 10, 12], "upload": [2, 12], "permiss": [2, 12, 13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 24, 25], "appli": [3, 12, 13, 14, 17, 18, 19, 20, 22], "detect": [3, 12, 13, 14, 15], "usin": [3, 12], "core": [3, 7, 8, 12, 15], "variou": [3, 8, 11, 12, 22, 24], "algorithm": [3, 12, 13], "within": [3, 12, 16, 24], "notabl": [3, 8, 12], "facilit": [3, 5, 6, 8, 9, 10, 12], "prepar": [3, 12], "applic": [3, 12, 13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 24, 25], "format": [3, 6, 12, 14, 15, 16, 17, 18, 19, 22, 23, 24], "compress": [3, 12], "decompress": [3, 12], "storag": [4, 12], "gc": [4, 12], "bucket": [4, 12], "blob": [4, 12, 24], "renam": [4, 12, 16, 18, 23, 24, 25], "see": [4, 12, 13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 24, 25], "exist": [4, 12, 14, 18, 19, 24], "folium": [5, 12, 18], "can": [5, 7, 11, 12, 13, 14, 15, 16, 17, 19, 21, 22, 23, 24, 25], "class": [5, 7, 12, 15, 16, 17, 19, 23, 25], "from": [6, 8, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 28], "panda": [6, 12, 16], "back": [6, 12, 16], "convert": [6, 12, 14, 18, 20, 23, 24, 25], "tabular": [6, 12], "well": [6, 12, 13, 14, 15, 16, 19, 21, 22], "common": [6, 8, 12, 13, 14, 16, 23], "instanti": [7, 12, 16], "instanc": [7, 11, 12, 16, 24], "default": [7, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25], "organ": [8, 12], "so": [8, 12, 15, 21], "easier": [8, 12], "sentinel": [8, 12, 17, 18], "2": [8, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25], "modi": [8, 12, 21], "avoid": [8, 12, 17, 23, 25], "mani": [8, 11, 12, 14, 16, 21, 22], "mistak": [8, 12], "most": [8, 12, 13, 15, 16, 17, 19, 21, 23, 24, 25], "eas": [8, 12], "match": [8, 12, 14], "band": [8, 12, 13, 14, 16, 17, 18, 19, 21, 23, 24, 25], "ensur": [8, 12, 16, 17, 19, 24], "resampl": [8, 12, 14, 18, 20], "properli": [8, 12, 16, 19], "date": [8, 9, 12, 13, 14, 15, 16, 17, 18, 20, 22, 23, 24, 25], "wrap": [8, 12, 14, 22], "spectral": [9, 12, 15], "season": [9, 12, 14, 17, 19, 22], "compost": [9, 12], "creation": [9, 12], "plot": [9, 12, 24], "good": [9, 12, 14, 16, 22], "tool": [9, 12, 13, 16, 17, 21, 22, 23, 25], "decid": [9, 12], "what": [9, 12, 15, 16], "rang": [9, 12, 13, 14, 15, 16, 17, 19, 22, 25], "task": [10, 12, 14, 16], "programat": [10, 12], "much": [11, 12, 15], "its": [11, 16, 17, 21], "requir": [11, 13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 24, 25], "activ": [11, 12], "account": [11, 12], "associ": 11, "platform": [11, 12], "id": [11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 23, 25], "If": [11, 12, 13, 14, 15, 16, 19, 21, 22, 24], "sign": [11, 12], "here": [11, 12, 15, 19, 20, 23, 24, 25], "try": [11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25], "automat": [11, 12, 16, 17, 19, 23, 25], "earthengin": [11, 13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 24, 25], "api": 11, "sometim": [11, 12, 16], "fail": [11, 12], "reason": [11, 21], "In": [11, 12, 15, 16, 20, 22], "refer": [11, 12, 21], "troubleshoot": 11, "also": [11, 12, 15, 16, 17, 19, 23, 24, 25], "manual": [11, 12, 15], "pip": [11, 13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 24, 25], "Then": [11, 13, 19], "while": [11, 12, 16, 20, 21], "authent": [11, 12], "initi": [11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 23, 25], "doe": [11, 12, 14, 15, 20, 22], "figur": [11, 16], "multitud": 11, "build": [11, 12, 21], "frequent": [11, 12], "direct": [11, 12], "best": [11, 12, 14, 16], "approach": [11, 16], "do": [11, 12, 14, 15, 22], "recommend": 11, "practic": 11, "prior": [11, 12], "ee": [11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25], "someproject": 11, "gv": [11, 12, 20, 21], "someeeimag": 11, "case": [11, 12, 14, 15, 22, 28], "document": [11, 23, 25], "rgb": [12, 17], "sourc": [12, 17, 23, 25], "255": [12, 17, 23], "ffffff": [12, 15, 16, 19, 21, 23], "url": [12, 13, 15, 16, 17, 19, 20, 21, 22, 23, 24, 25], "root": 12, "domain": 12, "given": [12, 13, 14, 16, 21, 22, 23, 24, 25], "str": [12, 14, 15, 19], "find": [12, 14, 15, 16, 24], "return": [12, 13, 15, 16, 17, 22, 23, 24, 25], "type": [12, 22, 23], "accesstoken": [12, 13, 15, 16, 17, 19, 20, 21, 22, 23, 24, 25], "remov": 12, "trail": 12, "gener": [12, 13, 14, 15, 16, 17, 18, 20, 23, 25], "access": [12, 15, 22], "token": [12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25], "raw": [12, 13, 14, 24], "gradient": 12, "list": [12, 14, 16, 17, 19, 21, 23, 24, 25], "sub": 12, "dictionari": [12, 15, 16, 19], "hex": 12, "form": 12, "graph": [12, 16, 19], "defin": [12, 14, 15, 17, 22, 24], "later": [12, 14], "overwrit": [12, 14, 18], "fals": [12, 13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 24, 25], "tri": 12, "current": [12, 14, 17, 20, 21], "bool": 12, "option": [12, 14, 16, 19], "whether": [12, 13, 14, 15, 18], "cach": [12, 13, 14, 16, 17, 18, 19, 20, 22, 23, 25], "file": [12, 13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 24, 25], "The": [12, 13, 14, 15, 16, 19, 20, 23, 24], "palett": [12, 13, 14, 15, 16, 17, 18, 19, 21, 24, 25], "min": [12, 13, 14, 15, 16, 17, 18, 19, 21, 23, 24], "max": [12, 13, 14, 15, 16, 17, 18, 19, 21, 23, 24], "stretch": 12, "valu": [12, 13, 14, 16, 19, 21, 23, 25], "1": [12, 13, 14, 15, 16, 17, 18, 19, 21, 22, 23, 24, 25], "interpol": 12, "int": [12, 14, 23], "linearli": 12, "where": [12, 14, 15, 16, 17, 21], "inclus": 12, "red": [12, 13, 16], "green": [12, 16, 19], "blue": [12, 16], "rrggbb": 12, "8001": [12, 14, 15, 16, 19, 21, 22, 23, 24, 25], "statu": 12, "alreadi": [12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25], "jupyt": [12, 20], "shell": 12, "start_hex": 12, "finish_hex": 12, "n": [12, 14], "10": [12, 16, 18, 21, 22, 23], "should": [12, 14, 16, 22], "full": [12, 23, 24], "six": 12, "digit": 12, "string": [12, 13, 18], "inlcud": 12, "primari": [12, 15, 16], "setup": 12, "user": [12, 13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 24, 25], "input": 12, "launch": 12, "which": [12, 13, 14, 16, 17, 25], "web": [12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25], "server": [12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25], "becom": 12, "stuck": 12, "need": [12, 14, 16, 19, 20, 21], "than": [12, 14, 15, 19, 22], "wa": [12, 15, 24], "previou": [12, 20, 22], "session": 12, "proxi": 12, "through": [12, 17, 22], "either": [12, 13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 24, 25], "colab": 12, "vertex": [12, 14], "ai": 12, "workbench": 12, "specifi": [12, 13, 14, 15, 16, 17, 19, 22, 23, 25], "must": [12, 14, 19], "e": [12, 14, 16], "g": [12, 14, 16], "http": [12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25], "dot": 12, "region": [12, 17], "googleusercont": 12, "com": [12, 15, 16, 17, 19, 24], "none": [12, 14, 15, 16, 17, 18, 20, 22, 23, 25], "refresh": [12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25], "credenti": [12, 13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 25], "path": [12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25], "oauth": 12, "get_credentials_path": 12, "locat": [12, 14], "servic": [12, 21, 24], "kei": [12, 14, 16, 17, 19, 24], "json": [12, 15], "instead": [12, 16, 18, 19, 20], "overrid": 12, "_cloud_api_user_project": 12, "isn": 12, "t": [12, 15, 18, 22], "usual": 12, "someprojectid": 12, "prompt": 12, "enter": [12, 16, 21], "one": [12, 14, 16, 22, 23, 25], "attribut": [12, 19, 20], "sai": 12, "all": [12, 13, 14, 16, 20, 22], "turn": [12, 16, 17, 19, 20, 22, 23, 25], "off": [12, 13, 16, 17, 20, 22, 23, 25], "true": [12, 13, 14, 15, 16, 17, 19, 21, 22, 23, 24, 25], "confus": 12, "order": [12, 16, 21, 22], "render": [12, 16, 19], "occur": [12, 14, 15, 22], "visibl": [12, 16, 19], "often": 12, "fine": 12, "desir": 12, "param": [12, 14, 16, 19, 22, 23, 25], "shouldchart": 12, "add": [12, 13, 14, 15, 16, 17, 18, 19, 21, 22, 23, 24, 25], "want": [12, 13, 14, 16], "onc": [12, 17, 23, 25], "menu": [12, 16], "dict": 12, "etc": [12, 16, 23], "accept": 12, "reduc": [12, 15, 16, 17, 18, 22, 23, 24, 25], "mean": [12, 14, 16], "bandname_class_valu": 12, "bandname_class_nam": 12, "bandname_class_palett": 12, "frequencyhistogram": [12, 16], "those": [12, 14, 15, 16, 19], "comput": [12, 14, 18, 20, 22], "zonal": [12, 16, 17, 23, 25], "cr": [12, 14, 17, 18, 21, 23, 25], "epsg": [12, 14, 18, 23, 25], "5070": [12, 14, 18], "coordin": 12, "stat": [12, 14, 17, 22], "transform": [12, 14, 17, 18, 21, 23, 25], "30": [12, 14, 20, 23, 24, 25], "0": [12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25], "2361915": [12, 14], "3177735": [12, 14], "snap": [12, 14], "scale": [12, 14, 18, 22, 23, 25], "spatial": 12, "resolut": 12, "onli": [12, 13, 14, 16, 17, 19, 22, 25], "discret": 12, "time_start": [12, 14, 15, 16, 17, 19, 22, 23, 24, 25], "each": [12, 14, 15, 16, 17, 20, 21, 24], "sankeytransitionperiod": [12, 16], "year": [12, 13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 24, 25], "transit": [12, 16, 17, 23, 25], "period": [12, 15, 16, 17, 23, 24, 25], "1985": [12, 15, 16, 23, 24, 25], "1987": [12, 16], "2000": [12, 14, 16, 19, 23, 25], "2002": [12, 16, 23], "2020": [12, 15, 16, 19, 23], "2022": [12, 13, 15, 16, 18, 20, 23, 24, 25], "These": [12, 16, 24], "were": [12, 14, 16, 22], "sankeyminpercentag": 12, "float": [12, 14, 15, 22], "5": [12, 13, 15, 16, 19, 20, 21, 23, 24], "minimum": 12, "percentag": 12, "ha": [12, 14, 15, 16, 17, 19, 21, 22, 23], "shown": [12, 16], "forc": 12, "even": 12, "comma": [12, 15], "separ": [12, 16, 22, 24], "especi": 12, "descript": [12, 21], "ui": [12, 16, 21], "load": [12, 15, 17, 20, 23, 24, 25], "usf": [12, 15, 16, 19, 24], "gtac": [12, 15, 16, 19, 24], "v2023": [12, 16], "9": [12, 14, 15, 16, 17, 21], "study_area": [12, 16, 17, 24], "conu": [12, 13, 15, 16, 19, 24], "change_raw_prob": [12, 16], "stddev": [12, 16], "prob": [12, 16], "layertyp": [12, 16, 19], "viz": [12, 16, 19, 23], "call": [12, 14, 21, 22], "featur": [12, 14, 16, 18, 19, 22, 23], "featurecollect": [12, 14, 16, 17, 18, 19, 21, 22, 23, 25], "geometri": [12, 14, 15, 17, 18, 20, 21, 22], "addit": [12, 16], "support": [12, 14, 16, 17, 18, 19, 20, 22], "editor": 12, "sever": [12, 15, 16, 19], "legend": [12, 15, 19, 21, 23, 25], "One": [12, 15, 16], "per": [12, 16], "onto": 12, "00": 12, "ff": 12, "gain": [12, 13, 14, 15, 16, 24], "bia": 12, "gamma": [12, 21], "correct": 12, "factor": [12, 14, 22], "css": 12, "singl": [12, 16, 19, 21, 23], "preview": 12, "opac": [12, 13, 19, 24], "geeimag": [12, 22], "geeimagecollect": 12, "geevector": [12, 19], "geevectorimag": [12, 19], "geojsonvector": 12, "For": [12, 14, 16], "spcifi": 12, "would": [12, 13, 14, 16], "like": [12, 13, 14, 16, 17, 22], "actual": 12, "client": 12, "slow": [12, 15, 16, 19, 24], "larg": [12, 19], "complex": 12, "otherwis": [12, 14, 16, 22], "fly": [12, 16, 25], "underli": [12, 17, 23, 25], "though": 12, "To": [12, 16, 17, 19, 24], "just": [12, 22], "lastnonnul": 12, "autoviz": [12, 15, 16, 17, 19, 21, 23, 24, 25], "popul": [12, 14, 15, 16, 21, 22], "classlegenddict": [12, 15, 19, 21], "querydict": [12, 15, 19], "canqueri": 12, "addtolegend": [12, 19, 22, 24], "continu": [12, 16, 17, 19, 24], "auto": 12, "label": [12, 17, 19], "correspond": [12, 17], "queryparam": 12, "legendlabelleftbefor": 12, "left": 12, "befor": 12, "compon": 12, "legendlabelleftaft": 12, "after": 12, "legendlabelrightbefor": 12, "right": 12, "legendlabelrightaft": 12, "canareachart": [12, 16, 17, 21, 23, 25], "quit": [12, 16], "areachartparam": [12, 16, 17, 21, 23, 25], "showgrid": 12, "grid": [12, 14], "bar": [12, 16], "rangeslid": 12, "x": [12, 19], "axi": 12, "selector": 12, "bottom": [12, 21], "plotli": 12, "javascript": 12, "slider": 12, "barchartmaxclass": 12, "20": [12, 17, 19, 21, 23], "maximum": [12, 14], "Will": [12, 16], "top": [12, 21], "bartchartmaxclass": 12, "download": [12, 15, 17, 23, 25], "csv": [12, 17, 18, 23, 25], "count": [12, 16, 24], "usg": [12, 14, 15, 16, 19, 21], "nlcd_releas": [12, 16, 19], "2021_rel": [12, 16], "2021": [12, 13, 16, 17, 18, 23], "availbl": 12, "featurecollecion": 12, "click": [12, 13, 16, 19, 20, 23, 24, 25], "selectlayernameproperti": [12, 16], "strokecolor": [12, 14, 16, 18, 19, 20], "random": 12, "strokeweight": 12, "3": [12, 13, 14, 15, 16, 17, 19, 21, 22, 24, 25], "thick": 12, "polygon": [12, 15, 17, 18, 20, 22], "outlin": 12, "mtbsboundari": [12, 16], "mtb": [12, 16, 19], "burned_area_boundari": [12, 16], "v1": [12, 16, 17], "lambda": [12, 13, 14, 15, 16, 17, 18, 19, 23, 24], "f": [12, 13, 14, 15, 16, 17, 18, 23, 24, 25], "ig_dat": [12, 16], "00f": [12, 15, 16, 18, 19], "incid_nam": [12, 16], "fire": [12, 16], "boundari": [12, 16, 23, 25], "imagecollecion": 12, "uniqu": 12, "mosaic": [12, 13, 16, 18, 20, 21, 22, 23, 25], "step": [12, 23], "dateformat": [12, 13, 17], "yyyi": [12, 15, 17, 24], "annual": [12, 17, 19, 23, 24], "monthli": 12, "yyyymm": 12, "daili": [12, 18, 20], "yyyymmdd": 12, "advanceinterv": [12, 13, 17], "advanc": [12, 17], "frame": [12, 17, 24], "individu": [12, 24], "month": [12, 17], "week": 12, "dai": [12, 13, 14, 17, 22], "hour": 12, "minut": 12, "second": [12, 13, 14, 16, 22], "wheth": 12, "calendarrang": [12, 13, 14, 15, 16, 17, 18, 19, 20, 22, 24], "2010": [12, 16, 22, 23], "2023": [12, 14, 16, 17, 18, 20, 25], "land_cov": [12, 15, 16, 24], "land_us": [12, 15, 16, 24], "zoom": [12, 13], "center": [12, 19, 20], "level": [12, 13, 25], "highest": [12, 13, 19], "allow": [12, 14, 16, 25], "fulli": 12, "command": [12, 13, 14, 15, 17, 18, 19, 20, 22, 25], "don": 12, "block": 12, "remain": [12, 18], "canreorderlay": 12, "reorder": [12, 21], "drag": [12, 21], "By": [12, 16], "timelaps": [12, 16, 24], "reordere": 12, "lng": 12, "lat": 12, "point": [12, 17, 21], "longitud": 12, "latitud": 12, "titl": 12, "appear": [12, 21], "sidebar": 12, "header": 12, "page": 12, "webpag": 12, "box": 12, "someth": 12, "yellow": 12, "ffff00": [12, 16, 19, 23], "defaultquerydateformat": 12, "mm": [12, 17], "dd": [12, 15], "simplifi": 12, "chartprecis": 12, "chartdecimalproport": 12, "25": [12, 14], "precis": [12, 15, 23], "too": [12, 19], "decim": 12, "larger": [12, 22], "place": 12, "ceil": 12, "total": 12, "12345678": 12, "8": [12, 15, 16, 17, 21, 24, 25], "yield": 12, "123": 12, "1234567891234": 12, "13": [12, 16, 21], "4": [12, 15, 16, 17, 18, 19, 21, 24, 25], "1235": 12, "updat": [12, 14, 16, 17, 19, 22, 24], "size": 12, "drawn": 12, "meter": 12, "info": [12, 13, 15, 17, 20], "window": 12, "popup": 12, "abov": [12, 16, 17, 19], "fontsiz": 12, "font": 12, "y": 12, "fit": [12, 13, 14], "maxlin": 12, "simpli": [12, 16, 19, 21, 24], "exclud": 12, "upon": 12, "finish": 12, "pan": 12, "inspector": [12, 19], "soon": 12, "hit": 12, "button": 12, "draw": [12, 13], "open_brows": 12, "open_ifram": 12, "iframe_height": 12, "525": 12, "compil": 12, "open": [12, 15, 16, 21, 23], "browser": 12, "unspecifi": 12, "depend": [12, 21], "being": [12, 14, 16], "ifram": [12, 24], "height": [12, 24], "linear": 12, "sequenti": 12, "pair": [12, 17], "temporari": 12, "successfulli": [12, 13, 14, 16, 17, 18, 19, 20, 22, 23, 25], "handl": [12, 16], "scenario": 12, "webserv": 12, "service_key_file_path": 12, "error": [12, 16], "initil": 12, "algal": 12, "matthew": 12, "m": [12, 13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 24, 25], "2011": [12, 19, 23], "review": [12, 20], "empir": 12, "procedur": 12, "remot": 12, "sens": 12, "inland": 12, "coastal": 12, "water": [12, 15, 16, 17, 18, 19, 21], "intern": 12, "journal": 12, "32": 12, "21": [12, 16, 18, 21], "6855": 12, "6899": 12, "doi": 12, "1080": 12, "01431161": 12, "512947": 12, "bloom2": 12, "ndgi": 12, "img": [12, 15, 16, 17, 19, 23, 24, 25], "refin": 12, "lee": 12, "speckl": 12, "natur": [12, 21], "unit": 12, "masktim": 12, "julian": [12, 14, 22], "indic": [12, 14, 22], "savi": 12, "evi": 12, "whichprogram": 12, "toaorsr": [12, 22], "sensor": 12, "program": [12, 13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 24, 25], "c1_landsat": 12, "c2_landsat": 12, "sentinel2": [12, 18, 20], "toa": 12, "sr": [12, 22], "soil": 12, "relat": [12, 16, 22], "tassel": 12, "cap": 12, "angl": 12, "distanc": 12, "assum": [12, 13], "bright": 12, "wet": [12, 14], "fraction": [12, 15], "zenithdict": 12, "solar_zenith_angl": 12, "sun_elev": 12, "azimuthdict": 12, "solar_azimuth_angl": 12, "sun_azimuth": 12, "solar": 12, "zenith": 12, "azimuth": 12, "radian": 12, "bit": 12, "bitmaskbandnam": 12, "qa_pixel": 12, "bitmask": 12, "posit": 12, "qa": [12, 13], "cloudscorefunct": 12, "cloudscorethresh": [12, 22], "cloudscorepctl": [12, 22], "contractpixel": 12, "dilatepixel": 12, "performcloudscoreoffset": [12, 22], "precomputedcloudscoreoffset": [12, 22], "score": [12, 22], "threshold": [12, 14], "percentil": [12, 16], "offset": [12, 22], "contract": 12, "kernel": [12, 20], "dilat": 12, "perform": [12, 14], "pre": [12, 14, 15, 18, 20, 22, 23], "fmaskclass": 12, "snow": [12, 15, 16, 21], "landsatcollectionvers": [12, 22], "c1": 12, "c2": [12, 14, 22], "deprec": [12, 16, 17, 19, 24], "toband": [12, 25], "multiband": [12, 23], "bandnam": [12, 13, 16, 18, 19, 24], "origin": [12, 20, 22], "consid": 12, "l": [12, 15], "startyear": [12, 13, 14, 17, 22, 24], "endyear": [12, 13, 14, 17, 22, 24], "startjulian": [12, 13, 14, 18, 22], "endjulian": [12, 13, 14, 18, 22], "timebuff": [12, 22], "weight": [12, 22], "compositingmethod": [12, 22], "compositingreduc": [12, 22], "buffer": [12, 18], "averag": [12, 16], "end": [12, 13, 14, 17, 18, 20, 22], "median": [12, 14, 18, 20], "medoid": [12, 22], "contain": 12, "defring": 12, "imageforexport": 12, "assetnam": 12, "assetpath": 12, "pyramidingpolicyobject": 12, "roi": 12, "wrapper": [12, 16, 22, 24], "pyramid": [12, 13], "polici": 12, "tree": [12, 15, 16, 17, 19, 24], "interest": [12, 16], "boolean": [12, 14], "outputnam": [12, 14], "bucketnam": 12, "outputnodata": 12, "32768": 12, "fileformat": 12, "geotiff": 12, "formatopt": 12, "cloudoptim": 12, "tfrecord": 12, "drivefoldernam": 12, "drive": 12, "folder": [12, 13, 14, 16, 17, 18, 19, 20, 22, 23, 25], "incollect": 12, "dummyimag": [12, 14], "fill": [12, 13, 22, 23], "empti": 12, "dummi": 12, "caus": [12, 20], "subsequ": [12, 13, 14, 22], "arg": 12, "argument": 12, "studyarea": [12, 14, 18, 20, 22], "startdat": 12, "enddat": 12, "includeslcoffl7": [12, 22], "defringel5": [12, 22], "addpixelqa": [12, 22], "resamplemethod": [12, 22], "retriev": 12, "imageri": 12, "studi": [12, 14, 18, 20, 22, 24], "geograph": 12, "slc": [12, 14, 22], "l7": [12, 14, 22], "l5": [12, 14, 22], "pixel": [12, 23, 25], "bilinear": 12, "bicub": 12, "meet": 12, "criteria": 12, "applycloudscor": [12, 22], "applyfmaskcloudmask": [12, 22], "applytdom": [12, 22], "applyfmaskcloudshadowmask": [12, 22], "applyfmasksnowmask": [12, 22], "zscorethresh": [12, 22], "shadowsumthresh": 12, "35": [12, 15, 23], "shadowsumband": [12, 22], "nir": [12, 13, 16, 22], "swir1": [12, 13, 16, 22], "harmonizeoli": [12, 22], "precomputedtdomirmean": [12, 22], "precomputedtdomirstddev": [12, 22], "verbos": [12, 22], "tm": 12, "oli": 12, "param1": 12, "param2": 12, "scene": [12, 22], "extract": [12, 13, 14, 17, 19, 21], "specif": [12, 13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 24, 25], "new": 12, "polar": 12, "vv": 12, "pass_direct": 12, "ascend": 12, "grd": 12, "pass": 12, "nearest": 12, "converttodailymosa": 12, "addcloudprob": 12, "addcloudscoreplu": 12, "cloudscoreplusscor": 12, "c": [12, 13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 24, 25], "probabl": [12, 16, 17, 18, 20, 24], "plu": 12, "crist": 12, "coeffici": 12, "fromsensor": 12, "tosensor": 12, "harmon": [12, 13], "chastain": 12, "et": 12, "al": 12, "2018": [12, 17, 21, 23, 24], "etm": 12, "target": 12, "2016": [12, 19, 23], "repres": [12, 14], "expect": 12, "across": [12, 13], "observ": [12, 14], "zero": 12, "num_observations_1km": 12, "qa60": 12, "medoidincludeband": 12, "squar": 12, "msd": 12, "euclidean": 12, "minim": [12, 16], "sum": 12, "As": [12, 15, 21], "normal": 12, "roughli": 12, "temperatur": 12, "varianc": 12, "thu": 12, "result": 12, "less": [12, 14, 16], "choos": [12, 13, 14, 16, 18, 25], "closest": 12, "rather": 12, "tupl": 12, "nodatavalu": 12, "null": [12, 19], "assign": [12, 16], "mmu": 12, "clump": 12, "elimin": 12, "in_imag": 12, "ndvi": [12, 13, 14, 22], "nbr": [12, 13, 14, 18, 22], "ndmi": [12, 14, 18], "ndsi": 12, "powel": 12, "2009": [12, 22, 23], "simpl": 12, "dark": [12, 22], "differenc": 12, "outlier": [12, 22], "z": 12, "precomput": 12, "standard": [12, 16], "deviat": [12, 16], "applycloudscoreplu": 12, "cloudscoreplusthresh": 12, "6": [12, 14, 15, 16, 17, 19, 21, 22, 25], "satellit": 12, "unless": [12, 13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 24, 25], "told": 12, "Of": 12, "atmospher": 12, "reflect": [12, 14], "surfac": [12, 19], "determin": 12, "product": [12, 13, 14, 15, 16, 23, 24], "exceed": 12, "free": 12, "gil": [12, 14, 16, 18, 20], "testarea": [12, 14, 22], "ca": [12, 14, 22], "2024": [12, 13, 14, 15, 16, 17, 18, 19, 22, 23, 24, 25], "06": 12, "01": [12, 14, 22], "09": [12, 18], "vizparamsfalse10k": [12, 16], "db": 12, "field": 12, "greater": [12, 14], "major": [12, 14, 22], "indexnam": [12, 14], "run_param": [12, 14], "lossmagthresh": [12, 14], "15": [12, 14, 16, 21], "lossslopethresh": [12, 14], "gainmagthresh": [12, 14], "gainslopethresh": [12, 14], "slowlossdurationthresh": [12, 14], "choosewhichloss": [12, 14], "largest": [12, 14], "choosewhichgain": [12, 14], "addtomap": [12, 14], "howmanytopul": [12, 14], "multbi": 12, "10000": [12, 14], "seri": [12, 13, 14, 17, 19, 22, 23, 24, 25], "both": [12, 14, 15, 16, 20, 21], "bucket_nam": 12, "old_nam": 12, "new_nam": 12, "group": 12, "copyright": [13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 24, 25], "ian": [13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 25], "housman": [13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 25], "licens": [13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 24, 25], "apach": [13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 24, 25], "mai": [13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 24, 25], "except": [13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 24, 25], "complianc": [13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 24, 25], "obtain": [13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 24, 25], "www": [13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 24, 25], "org": [13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 24, 25], "law": [13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 24, 25], "agre": [13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 24, 25], "write": [13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 24, 25], "softwar": [13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 24, 25], "distribut": [13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 24, 25], "AS": [13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 24, 25], "basi": [13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 24, 25], "warranti": [13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 24, 25], "OR": [13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 24, 25], "condit": [13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 24, 25], "OF": [13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 24, 25], "kind": [13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 24, 25], "express": [13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 24, 25], "impli": [13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 24, 25], "languag": [13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 24, 25], "govern": [13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 24, 25], "limit": [13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 24, 25], "workflow": 13, "ccdcwrapper": 13, "py": [13, 16, 17, 19, 24], "util": [13, 17], "model": [13, 14, 15, 16, 24], "break": [13, 15, 24], "demonstr": [13, 22], "o": [13, 14, 15, 18, 21, 22, 24], "sy": [13, 14, 15, 21, 22, 24], "append": [13, 14, 15, 19, 22, 24], "getcwd": [13, 14, 15, 22, 24], "geeviz": [13, 14, 15, 16, 17, 18, 22, 23, 25, 27], "arrai": [13, 14], "temporalsegment": 13, "ccdcimg": 13, "292214": [13, 16, 17, 19, 21, 22, 23, 24, 25], "learner": [13, 15], "1984": [13, 19], "tstart": 13, "tend": [13, 14, 15], "tbreak": 13, "changeprob": 13, "swir2": [13, 16], "predict": 13, "cycl": 13, "yr": [13, 14, 15, 16, 17, 24, 25], "yearli": [13, 14, 23], "pattern": 13, "tighter": 13, "third": 13, "whichharmon": 13, "gap": 13, "segment": [13, 14], "fillgap": 13, "loss": [13, 14, 15, 16, 24], "magnitud": [13, 14], "sinc": [13, 15, 16, 22, 24], "changedetectionbandnam": 13, "recent": [13, 15, 16, 24], "mostrec": 13, "highestmag": 13, "sortingmethod": 13, "pull": [13, 15, 17, 19], "about": [13, 15, 24], "365": [13, 15, 22], "print": [13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 24, 25], "done": [13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 24, 25], "ihousman": [13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 24, 25], "config": [13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 25], "proj_id": [13, 14, 16, 17, 18, 19, 20, 22, 23, 25], "appdata": [13, 14, 16, 17, 18, 19, 20, 22, 23, 24, 25], "python311": [13, 14, 16, 17, 18, 19, 20, 22, 23, 24, 25], "lib": [13, 14, 16, 17, 18, 19, 20, 22, 23, 24, 25], "site": [13, 14, 16, 17, 18, 19, 20, 22, 23, 24, 25], "1231": [13, 14], "doubl": [13, 19, 23, 24, 25], "notic": [13, 16, 22], "difficult": [13, 15, 16], "interpret": 13, "respect": [13, 16], "store": 13, "webmap": [13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25], "localhost": [13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25], "ex": [13, 14, 17, 18, 19, 25], "cwd": [13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25], "gee_py_modules_packag": [13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25], "projectid": [13, 15, 16, 17, 19, 20, 21, 22, 23, 24, 25], "ya29": [13, 15, 16, 17, 19, 20, 21, 22, 23, 24, 25], "a0acm612xo8nuliin": 13, "qvotsn6_fwo8l": 13, "kmeypvlah8dd7vv7du6ycgdbpqmxtlmjm4pqywi6dgovmvt4djtobycowftqxgjoixqszvxft6im8": 13, "ncb0hbiw_2jz9r0n": 13, "api6zlcq6ltue1guvk1itp5pcand3p9qbbi06": 13, "cn9jyacgykae4saresfqhgx2miyse5aedqpnim4fckarejjg0178": 13, "changeobj": 13, "ccdcchangedetect": 13, "lossyearpalett": [13, 14, 15, 24], "mag": 13, "lossmagpalett": 13, "gainyearpalett": [13, 15, 24], "05": [13, 14], "gainmagpalett": 13, "serv": [13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25], "a0acm612ymxqgo5rcgsqbygpf2kcvu3wq3elasrecr2jji0qfk46vnnpdo0qgyfprej1zrhgworgjejkkpluow80oriupq1fu2eztefjnoxujlrl": 13, "9icejvdczgepj5mki": 13, "1xw1xcan3zebf96d1": 13, "nt_vefr8tnsk": 13, "lozv3tn4qscacgykavssaresfqhgx2mihkf20kapp0qbanpl79relw0178": 13, "yearimag": 13, "gettimeimagecollect": 13, "predictccdc": 13, "_fit": 13, "synthet": 13, "next": [13, 17], "last": [13, 16], "split": [13, 16, 24], "fittedbn": 13, "bn": [13, 16, 18, 19, 24], "_": [13, 14, 16, 25], "down": [13, 14, 16, 24], "summer": 13, "compositeyear": 13, "syntheticcomposit": 13, "190": [13, 18, 23], "250": 13, "vizparamsfals": [13, 14, 18, 20, 22], "yymmdd": 13, "No": [13, 18], "a0acm612wbtefcjrcgwieihweabsclqvn3pu1hhpz1_cskddft5uxnyuidddvbge7zteakyb98zlfj2kbam__pxriftg97tzw0sjir4lcz1swgb3rtwtovojt5": 13, "b5yqezd_pbmhmaljpi": 13, "d_dlnidzuluvmomet66rilwr8yeetouacgykaeisaresfqhgx2mizy0ncr5vvist6rwaqlc9": 13, "a0178": 13, "usabl": 14, "depict": 14, "cdl": 14, "map1": 14, "anoth": [14, 19], "map2": 14, "rcr": [14, 15, 18, 20, 24], "variabl": [14, 15, 22], "constraint": [14, 22], "tropic": [14, 22], "southern": [14, 22], "hemispher": [14, 22], "june": [14, 22], "152": [14, 22, 23], "273": 14, "analys": [14, 22], "span": [14, 22], "fmask": [14, 22], "matter": [14, 22], "1990": [14, 15, 23], "tcanglebg": 14, "signific": 14, "past": 14, "nois": 14, "identifi": [14, 20, 22], "suitabl": 14, "veget": [14, 15, 21], "slope": 14, "omit": 14, "newest": 14, "oldest": 14, "smallest": 14, "steepest": 14, "mostgradu": 14, "shortest": 14, "longest": 14, "timeseri": 14, "breakpoint": 14, "maxseg": 14, "integ": [14, 15], "spikethreshold": 14, "damp": 14, "spike": 14, "vertexcountovershoot": 14, "overshoot": 14, "vertic": 14, "amount": 14, "prune": 14, "preventoneyearrecoveri": 14, "prevent": 14, "recoveri": 14, "recoverythreshold": 14, "rate": 14, "faster": 14, "disallow": 14, "pvalthreshold": 14, "p": [14, 16, 25], "exce": 14, "discard": 14, "levenberg": 14, "marquardt": 14, "optim": 14, "bestmodelproport": 14, "75": 14, "chosen": [14, 16], "minobservationsneed": 14, "exportltlossgain": 14, "exportltvertexarrai": 14, "lt_test": 14, "exportpathroot": 14, "usernam": 14, "somecollect": 14, "mercat": 14, "4326": [14, 23, 25], "alber": 14, "wgs84": 14, "utm": 14, "326": 14, "12": [14, 16, 17, 21, 23], "32612": 14, "327": 14, "known": 14, "let": [14, 22, 24], "hansen": 14, "forest": [14, 15, 16, 21, 24], "great": 14, "idea": [14, 16], "clear": [14, 15, 19, 20, 22, 24], "been": [14, 15, 19, 22, 24], "earlier": [14, 15, 22], "umd": 14, "global_forest_change_2022_v1_10": 14, "lossyear": 14, "int16": [14, 15, 16, 24], "updatemask": [14, 15, 16, 19, 24], "neq": [14, 19], "And": [14, 17, 24], "gte": 14, "lte": 14, "allimag": 14, "sequenc": [14, 17, 23], "fromymd": [14, 16, 17, 23, 25], "milli": [14, 16, 17, 23, 25], "jun": [14, 18, 22], "sep": 14, "l4": [14, 22], "l8": [14, 22], "On": [14, 22], "l9": [14, 22], "around": 14, "9000": 14, "2500": 14, "ltoutput": 14, "0000ff": [14, 19], "durat": [14, 24], "lossgainstack": 14, "stack": [14, 18, 25], "exportnam": 14, "_lt_lossgain_stack_": 14, "exportpath": 14, "proper": 14, "Be": [14, 23, 25], "sure": [14, 16, 23, 25], "pyrobj": 14, "_yr_": 14, "mode": [14, 15, 16, 17, 19, 23, 24], "_dur_": 14, "_mag_": 14, "_slope_": 14, "possibl": [14, 20], "how_many_list": 14, "getinfo": [14, 16, 17, 21, 22, 23, 24], "outobj": 14, "kt": 14, "_lt_": 14, "rawltforexport": 14, "lt": [14, 24], "_lt_raw_": 14, "sampl": [14, 18, 22], "lt_test_lt_lossgain_stack_nbr_1990_2023_152_273": 14, "overwit": 14, "lt_test_lt_raw_nbr_1990_2023_152_273": 14, "understand": [15, 16], "strength": 15, "earli": [15, 24], "prestartyear": 15, "preendyear": 15, "poststartyear": 15, "postendyear": 15, "longer": 15, "part": [15, 25], "adapt": [15, 16, 17, 23], "awesom": [15, 25], "commun": [15, 23, 24, 25], "samapriya": 15, "github": [15, 24], "io": [15, 16, 23], "playground": 15, "791aa894ce0abfe1a9eb1dc478bbc5d7": 15, "Their": 15, "divid": [15, 17], "lc": [15, 16, 24], "sc": 15, "found": [15, 25], "sciencedirect": 15, "scienc": [15, 18], "articl": 15, "pii": 15, "s003442571930375x": 15, "gov": [15, 24], "ero": 15, "lcachg": 15, "sat": [15, 16, 23], "lcpconf": 15, "lcpri": [15, 16], "lcsconf": 15, "lcsec": 15, "sclast": 15, "scmag": 15, "scmqa": 15, "scstab": 15, "sctime": 15, "gena": 15, "lcpri_palett": [15, 16], "e60000": [15, 16], "a87000": [15, 16], "e3e3c2": [15, 16], "1d6330": [15, 16], "476ba1": [15, 16], "bad9eb": [15, 16], "b3b0a3": [15, 16], "a201ff": [15, 16], "lc_name": [15, 16], "cropland": [15, 16, 21], "grass": [15, 16, 17, 24], "shrub": [15, 16, 21, 24], "wetland": [15, 16, 21, 24], "ic": [15, 16, 21, 24], "barren": [15, 16, 21], "lc_legend_dict": 15, "lc_lookup_dict": 15, "len": [15, 16, 19], "lcsec_palett": 15, "lcachg_palett": 15, "sclast_palett": 15, "ffc7aa": 15, "f87e45": 15, "cc764e": 15, "86a7b6": 15, "46a4e": 15, "7954c8": 15, "7a24aa": 15, "432172": 15, "scstab_palett": 15, "ba4e16": 15, "ee964d": 15, "ffe29c": 15, "f4fbc1": 15, "e1f3c3": 15, "bce6ca": 15, "46989c": 15, "scmqa_palett": 15, "000000": 15, "a900e6": 15, "df73ff": 15, "f5f5e3": 15, "db8a00": 15, "924900": 15, "9c9c9c": 15, "homepag": 15, "usda": [15, 24], "geodata": 15, "rastergatewai": 15, "php": 15, "describ": 15, "lcms_v2021": 15, "7_method": 15, "pdf": 15, "app": [15, 24], "catalog": [15, 16, 17, 19, 23, 24, 25], "usfs_gtac_lcms_v2021": [15, 16], "southeastern": 15, "ak": 15, "usfs_gtac_lcms_v2020": [15, 16], "puerto": 15, "rico": 15, "u": [15, 21], "virgin": 15, "island": 15, "depth": [15, 21, 24], "predictor": 15, "go": [15, 18], "html": [15, 24], "v2022": [15, 16, 24], "lc_viz": 15, "secondari": 15, "115": 15, "39350883763947": 15, "36": [15, 23], "32737127837443": 15, "90803695452136": 15, "114": 15, "27015678685822": 15, "a0afb_byaeihat8xz3om23_dpd9m5lbaevx3fol4jemhi_9h8hdiwzag5m6qu9k": 15, "ff73hhlhdgudznyypusyuttc12wudny0dejp2r": 15, "q": 15, "nvcaebavte__aovzra6sc_hgw1bxkgiunuzyu5prqdf_ehqfplcqha53ezy28ry7vef30acgykauksarasfqhgx2mis7shhsecrgpvy1r7je6x9q0179": 15, "loss_viz": 15, "gain_viz": 15, "change_viz": 15, "f0f": 15, "post": [15, 18], "lcmap_pr": 15, "lcmap_post": 15, "lcms_pre": 15, "lcms_post": 15, "combin": [15, 17], "cross": 15, "walk": 15, "mutual": 15, "exclus": 15, "pose": 15, "challeng": [15, 16], "howev": [15, 16], "agricultur": [15, 16], "cleaner": 15, "seem": 15, "accur": 15, "fairli": 15, "spars": [15, 21], "tell": 15, "classifi": 15, "rangeland": [15, 16], "could": [15, 16], "fall": 15, "better": [15, 20], "extent": [15, 16], "fluctuat": 15, "waterbodi": 15, "veri": [15, 19, 21, 22], "quickli": [15, 19], "land_": 15, "cell": [15, 20], "14": [15, 16, 21], "18": [15, 22], "syntaxerror": 15, "invalid": 15, "syntax": [15, 18], "perhap": 15, "forgot": 15, "def": [15, 16, 17, 23, 24, 25], "getyrmskprecis": 15, "getyrmsk": 15, "lcmap_change_yr": 15, "apart": 15, "fast": [15, 16, 24], "lcms_fast_loss_yr": 15, "eq": [15, 16, 19, 24], "lcms_slow_loss_yr": 15, "lcms_gain_yr": 15, "produc": 15, "analag": 15, "106": 15, "91206352513947": 15, "41": [15, 16, 18, 20, 21], "00173645518866": 15, "39": 15, "97403423419109": 15, "105": 15, "34101860326447": 15, "easi": 16, "pd": [16, 18], "There": [16, 22], "percent": 16, "hectar": 16, "acr": 16, "class_valu": 16, "class_nam": [16, 17], "class_palett": 16, "coupl": 16, "get_props_datafram": 16, "prop": 16, "k": 16, "item": 16, "_class_": 16, "df": 16, "datafram": 16, "_class_valu": [16, 17, 21, 23], "_class_nam": [16, 17, 21, 23], "_class_palett": [16, 17, 21, 23], "lcms_prop": 16, "todictionari": [16, 22], "nlcd_prop": 16, "lcms_thematic_bandnam": 16, "nlcd_landcover_bandnam": 16, "stabl": 16, "3d4551": 16, "f39268": 16, "d54309": 16, "00a398": [16, 24], "1b1716": 16, "005e00": 16, "tall": 16, "amp": 16, "mix": [16, 21, 24], "seak": [16, 24], "008000": 16, "00cc00": 16, "forb": [16, 24], "herb": [16, 24], "b3ff1a": 16, "99ff99": 16, "b30088": 16, "e68a00": 16, "ffad33": 16, "ffe0b3": 16, "11": [16, 21, 23], "aa7700": 16, "impervi": [16, 24], "d3bf9b": 16, "4780f3": 16, "efff6b": 16, "ff2ff8": 16, "1b9d0c": 16, "97ffff": 16, "a1a1a1": 16, "pastur": [16, 21, 24], "c2b34a": 16, "wit": 16, "466b9f": [16, 21], "perenni": [16, 21], "character": 16, "d1def8": [16, 21], "space": [16, 21], "mixtur": 16, "dec5c5": [16, 21], "22": [16, 21], "low": [16, 19, 21], "intens": [16, 21], "d99282": [16, 21], "23": [16, 21], "medium": [16, 21], "mixt": 16, "eb0000": [16, 21], "24": [16, 21], "highli": 16, "ab0000": [16, 21], "31": [16, 21], "rock": [16, 21], "sand": [16, 21], "clai": [16, 21], "bedrock": 16, "b3ac9f": [16, 21], "decidu": [16, 21], "domin": 16, "gen": 16, "68ab5f": [16, 21], "42": [16, 21], "evergreen": [16, 21], "1c5f2c": [16, 21], "43": [16, 21], "b5c58f": [16, 21], "52": [16, 17, 21, 23], "scrub": [16, 21], "th": 16, "ccb879": [16, 21], "71": [16, 21, 23], "grassland": [16, 21, 23], "herbac": [16, 21], "grama": 16, "dfdfc2": [16, 21], "81": [16, 21, 23], "hai": [16, 21], "legum": 16, "gra": 16, "dcd939": [16, 21], "82": [16, 21, 23], "cultiv": [16, 21], "crop": [16, 17, 21], "productio": 16, "ab6c28": [16, 21], "90": [16, 21, 23], "woodi": [16, 21], "shrublan": 16, "b8d9eb": [16, 21], "95": [16, 21, 23], "emerg": [16, 21], "pere": 16, "6c9fb8": [16, 21], "autmat": 16, "a0acm612wqmlwq7kncrxbk": 16, "pwq6a": 16, "ubtzaxgp7t3sbrdxp3hu9i9xuydhkfl6wd_qb4_vqfqfuffvoiytz5zdfdzjqaotpapn5nzvnxtnnnpffciky3ikhkcqaovmxcbjh4a4vfydk": 16, "ohzti": 16, "qc8jert1": 16, "ewebklou6ikxdsmmg4acgykaqysaresfqhgx2miwg6orz6ql17n2ofvvhecrq0178": 16, "leav": [16, 23, 25], "blank": 16, "intersect": 16, "a0acm612yx3qmc40439rt6zwxeruoaxsarh5sy_l2ryzn3xl7ezbjzdd4j5b3fg3jtp_jv7b6pdonvluuirslbreb6": 16, "a4gg5wxpkvzg4qx_iomxi3maarpnd4yviscj6n8xwwfxmhi": 16, "0ijp": 16, "8vpw4kvhtvr9sxtry7bz3pi16nnmqacgykayysaresfqhgx2milbemmlnubwwklm61ez": 16, "xkq0178": 16, "thing": 16, "lot": [16, 22], "move": 16, "paus": 16, "again": 16, "long": 16, "queue": 16, "delai": 16, "a0acm612ynrj_": 16, "94l": 16, "wypiur_p0bhuresnsafejtm0qnf9jdsvl": 16, "qoxucophaj4fwnk7nowfaavijdko_j4bvpwjikncnpzlu2phxue8jggp529ovjvdgb7m_0b2y04zc0mgqvpxuyc_7jopsnwfhwvn88qjhb6odwd6havsaacgykafqsaresfqhgx2mizoa2sdrj2umk01vos_m5ra0174": 16, "With": 16, "imposs": 16, "d": 16, "cannot": 16, "put": 16, "a0acm612xctzsopht8mgpf3": 16, "hooh0x4ep_k3sdji8jmwbngw0ob6dzxp4s1m6s8jchad8pyo5fvx_9ek4wlx5usxfia3yyzj_cgo9mkgngfczguxau1riv6qrmtzbvrbmi_ky_9vfnonm2gyogfbmpxtgvk": 16, "h5jrvrz0ne0quacgykabesaresfqhgx2mio7entc": 16, "e_kcdil": 16, "8kvvbew0174": 16, "50": [16, 18], "100": [16, 17, 24], "a0acm612zybfmqok8dtueip6qtrixotoupt8cgbfu4lo03agafzcas1rkx2xdfbf6ppbwyoinwzourdxuibcbgo9ytgzbjcvhjjscj3njrfmjuo2hwvemjhno9wv6kvi0irh8zk1nwum6cbqm9zzsimy4e7nmgdqkyzregs5oacgykafqsaresfqhgx2miejykuh8wfwmkrq89m0l9nw0174": 16, "behav": 16, "fashion": 16, "a0acm612zola": 16, "fbl5vkb_hlcop1hfvjdqwfitdhbelu4cfuh0eas0vney95qkqt4enuqsh5ai7rizwpvztjtaaesdrhzwmrm": 16, "096h5": 16, "ebbmtn_fh1txfwbqbjpavvchnobmjhwiur3marrmozgikdbj07fytpec548yqtvrt1bwnaacgykarwsaresfqhgx2mivr4ggv1qjhvlavabzx0a1w0178": 16, "ordin": 16, "getmostrecentchang": [16, 24], "copyproperti": [16, 24], "mostrecentfastlossyear": [16, 24], "ffffe5": [16, 24], "fff7bc": [16, 24], "fee391": [16, 24], "fec44f": [16, 24], "fe9929": [16, 24], "ec7014": [16, 24], "cc4c02": [16, 24], "a0acm612xsvpx5bwxka2ikux0xyyc3pen5x_bcjc9abyt_qnomxh0tt3ukrih4zmql7dsll6n3zh4j55oapjldfsfgc6zgz59th25upnidg": 16, "dubvscsngsox5dd7kyf6cm1razrxnkg0kcwmtpktwqmohmfz8sadgkdmojfv0acgykavusaresfqhgx2mi7eiexaoh_hzjziayp0kgyq0174": 16, "tcc": [16, 19], "share": 16, "yesl7": 16, "tile": [16, 17, 18, 24], "00d": 16, "0d0": 16, "d00": 16, "d0d": 16, "0dd": 16, "a0acm612wnytt": 16, "qfeifqjvxv4tuzzcyewrzkav1oqt1onirtgzb7li8fiv": 16, "gdbo5jm7kwppznzx5kl8xroypn2amtvzbqywhun6od9yc6u6": 16, "3fcw_ykc26": 16, "sfspzma_sj": 16, "0v3okwqfzsx0kciuwz5csknb83el1d24ogm2zmacgykarqsaresfqhgx2miyj7dkmovk05ovvaxnq9xbw0174": 16, "lack": 16, "b1": [16, 21, 23], "a0acm612x9fqnyiuba6y3gng0immdf33nu_h2si6qg1_zfzfxeejhf4obiwsteimc8uybgs2dv4n1palbwqavf4saq5qlbyjbelqeutag546k4t765worrvpvmhgtc_0ilgmj4lnvsgjehtqdsdryuhg20snp6s0fd6wx6": 16, "dco_fiacgykas8saresfqhgx2mizfqvvwehwgckooqxrphnbq0178": 16, "easiest": 16, "preset": 16, "lc_number": 16, "lc_class_valu": 16, "lc_class_nam": 16, "lc_class_palett": 16, "a0acm612w0xpz3ld3_5q": 16, "sixf6xpskovt8khrmbfqwrycnx": 16, "vuo_n1oyitd": 16, "m4bc39kuq99hxzryl5fydbpbx8nfwxoaw58qbnahvfeujyc8ivdl8": 16, "1dzdxtxw8dgzqahomumfqq_i8inpzgk5cadhygl8zpm7io19nhb0wrccovqacgykafssaresfqhgx2mixrzpo8d2qzzvphbqfuysbw0178": 16, "three": 16, "rel": 16, "lcms_2020": 16, "v2020": 16, "lcms_2021": 16, "v2021": 16, "lcms_2022": 16, "lcms_2023": 16, "construct": [16, 17], "replac": 16, "202": [16, 19, 23, 24], "deprecationwarn": [16, 17, 19, 24], "attent": [16, 17, 19, 24], "warn": [16, 17, 19, 24], "categori": [16, 17, 19, 24], "usfs_gtac_lcms_v2022": [16, 24], "a0acm612wptkk_epf9tnmwvorhqebo8kprojyyw3gvekiwau2xdlfautuzws7ezqurigyz4wcs6wijpw7suv": 16, "ebsoj2z1ssl38d4rhpieban6zop8hwaxv07": 16, "rmgdjx0o8u4mkikp92dhi6wg9lmfz20gz6wrwhurcbzy2lesacgykaaysaresfqhgx2mir_mkv5pgclo": 16, "nzqmhuofba0174": 16, "happen": 16, "burn": [16, 19], "a0acm612wgw": 16, "djuuunteplyybaxnaiqxmmfwimfso5_f": 16, "ogebouoiltlwc6osevxri5qicnp7ekgxx89ywl_ssdqmnarafw5iepmfibfbale0qwlqyp58f6cijeqf04ggg49id": 16, "7qfkwx": 16, "m8qazqrmseubqs9y_zwgbhdtyh0acgykadcsaresfqhgx2migi": 16, "mwdreyrxenwtuktipuw0174": 16, "real": 17, "solut": 17, "1234": [17, 20], "scriptpath": 17, "3adataset": 17, "2fgoogl": 17, "2fgoogle_dynamicworld_v1": 17, "inspect": 17, "dw": 17, "s2": [17, 18, 20], "04": 17, "02": [17, 22], "colfilt": 17, "bound": [17, 18, 22], "6729": 17, "4305": 17, "dwcol": 17, "dynamicworld": 17, "s2col": 17, "copernicu": [17, 18, 20], "join": [17, 18, 20, 21], "dws2col": 17, "savefirst": 17, "s2_img": 17, "equal": 17, "leftfield": 17, "rightfield": 17, "dwimag": 17, "s2imag": 17, "blend": 17, "lulc": [17, 23, 25], "flooded_veget": 17, "shrub_and_scrub": 17, "built": [17, 21], "bare": 17, "snow_and_ic": 17, "vis_palett": 17, "419bdf": 17, "397d49": 17, "88b053": 17, "7a87c6": 17, "e49635": 17, "dfc35a": 17, "c4281b": 17, "a59b8f": 17, "b39fe1": 17, "dwrgb": 17, "top1prob": 17, "hillshad": 17, "top1probhillshad": 17, "terrain": 17, "multipli": [17, 18], "dwrgbhillshad": 17, "3000": 17, "b4": [17, 21], "b3": [17, 21], "b2": [17, 21, 23], "l1c": 17, "65": [17, 22], "207": 17, "copernicus_s2": 17, "a0acm612ygcqy4": 17, "xqrhqqvy_ffayjrnoqatpaj93ai0qiqeatyt_ykoa0_pprtbgmjzsmuycedwi": 17, "gln4unl5nmpwwc1kgxjgvhofj0ftg": 17, "s5fenuukgbvlryzvh1lmjsfyiimhakb9pgfcawbxvxfjs8l_fuccsbd75lqbepoqmacgykaassaresfqhgx2mi1f_7zzfgg7vxwgv70he2qq0178": 17, "streamlin": [17, 23, 25], "png": [17, 23, 25], "class_band_nam": 17, "9269985485747725": 17, "61": [17, 23], "11936200243072": 17, "60": 17, "187959630772305": 17, "2561001110747725": 17, "nmonth": 17, "viz_dict": [17, 25], "filterbound": 17, "proj": [17, 21], "getmonth": 17, "startmonth": 17, "endmonth": 17, "subtract": 17, "datestr": 17, "getyr": 17, "yrimg": 17, "dwcompseason": 17, "flatten": 17, "aggregate_histogram": [17, 24], "a0acm612xqigdcaycnsbagrnrugn9hqeondtnu8nc3zu": 17, "4c11mrnqy2fydvexaiokuojqfvojuby2edrq3pyscw9abftjypye2uqcpnuz2v1zbrqngpay1x8gyulhiob8lozeijahav7al9mhycqhfcjkj38ttud7iomm3b4yxgjeacgykasgsaresfqhgx2mixcttvcdehfdfdtuskh4rca0178": 17, "matric": [17, 23, 25], "dwcompannu": 17, "a0acm612zgxlr7g2m06p2w_g97qfinvqtn0jwbwkud7ajsww2ozaou5j3xu8mlwfqe70m8qw64oejpa6b5naoujxq5uzxm7ivlyvowroguzywxxoiunhdzswlg7acnilr05ut_74lwjabkpqjkkvs1n4d7ukpntsagsrlcaovrcweacgykax0saresfqhgx2mia7fum6yib_wnxdrprp3weg0178": 17, "fv": [18, 20], "g2p": 18, "matplotlib": 18, "pyplot": 18, "plt": 18, "numpi": 18, "foliummapp": [18, 20], "1233": 18, "pytabl": 18, "hdf": 18, "sqlalchemi": 18, "sql": 18, "setmaparg": 18, "cartodb": 18, "positron": 18, "113": [18, 20], "21807278537877": [18, 20], "786028237932015": [18, 20], "40": [18, 20, 21], "595571243156144": [18, 20], "111": [18, 20, 21], "82280911350377": [18, 20], "preyear": 18, "postyear": 18, "160": 18, "getprocessedsentinel2scen": [18, 20], "postwat": 18, "simplewatermask": 18, "addband": 18, "888": 18, "prewat": 18, "watertransitionclass": 18, "water_transition_": 18, "0f0": 18, "f00": [18, 19, 20], "strokewidth": [18, 20], "maparg": 18, "jul": 18, "08": 18, "s2_harmon": [18, 20], "s2_cloud_prob": [18, 20], "aggreg": [18, 20], "irmean": [18, 20, 22], "irstddev": [18, 20, 22], "water_transition_2022": 18, "nsampl": 18, "500": 18, "prebn": 18, "cat": [18, 23], "_yr": 18, "_jd": 18, "postbn": 18, "randompoint": 18, "outdir": 18, "tmp": 18, "makedir": 18, "out_csv": 18, "gee2pandas_test_csv": 18, "geetolocalzonalstat": 18, "tilescal": 18, "maxnumberoffeatur": 18, "5000": 18, "xy": 18, "scatter": 18, "read_csv": 18, "plotbandnam": 18, "precolumn": 18, "postcolumn": 18, "watercolumn": 18, "water_yr": 18, "column": 18, "fig": 18, "ax": 18, "subplot": 18, "scat": 18, "alpha": 18, "set_xlabel": 18, "set_ylabel": 18, "importlib": 18, "reload": 18, "now": 18, "fc": 18, "tabletofeaturecollect": 18, "test": 18, "stock": 19, "hex_color": 19, "ff0": 19, "convers": [19, 21], "previous": [19, 24], "2016_rel": 19, "noth": 19, "landus": 19, "a0acm612xc9": 19, "pb9qaoeeavewvz1nkswrtdlu5dmd8wyk1ooxgnl_qiqgk6edhi2ydrdnmu3ri80bbyybkfpxzzeoydg_bdmumchsvqlef_u5eyf_sna3qr_o0qd96qbkra9c0x_jmw6tvi3ywf2h": 19, "x8cuswctpniqmnzfu5a7f8lmacgykaf8saresfqhgx2midqd7xyss4irxaini6w30bq0178": 19, "listcontain": 19, "sort": 19, "percent_tree_cov": 19, "80": 19, "555": 19, "0a0": 19, "a0acm612web91prlj0adbpvkurazmqd3wcbxcuhhmod3gocg_5j94lagpnzrrby5rxg_n1fwpl52nqssck_3wtni": 19, "9euedagd72r1tdh": 19, "g0sdgrk": 19, "vutq1scvd0xfm0icx_qruvhu2l3t": 19, "ocwojcz5f6dozxwbfuxsdg1pr1ww4acgykaw8saresfqhgx2miy70q2fyysbm1u3jh1": 19, "kpnw0178": 19, "burn_severity_mosa": 19, "byte": [19, 25], "mtbscolor": 19, "006400": [19, 23], "7fffd4": 19, "ff0000": 19, "7fff00": 19, "mtbslabel": 19, "unburn": 19, "moder": 19, "increas": 19, "mtbsdict": 19, "mtbsquerydict": 19, "severityviz": 19, "2017": [19, 23], "a0acm612ymuggajtw9s6moc5gcfhqzrwaidfm4wo8ezddz": 19, "ipotvqekpl": 19, "phtcl0oc535oafkzf50nxedh6z51bkbk_zsmildpssd1lsfhv7rwcp6incydeh73_jeakscewlupbugamxxlrsdoo1tdwm": 19, "5dffe7yflujxorvjsewuacgykacysaresfqhgx2mirzqtm9d85ppbatdl2ki9vq0178": 19, "perim": 19, "perimet": 19, "mtbs_perims_dd": 19, "a0acm612xlix2z7gftqgxh8dstw0mkngvq1rbkopyvosmmcdknha5xogzuhnvp_gazpov3v6y5": 19, "xytwnftpkxgozxoeqwjn24apigyhho7f0pi68azdnje036ggawviiid4vdtcv9cob3rxbrrtqqoxwa0a0ebgpmyspdpbhen2maacgykad4saresfqhgx2mijoenyiwcugz0f": 19, "f9mbucha0178": 19, "smaller": 19, "rater": 19, "np": 19, "nf": 19, "ancillari": [19, 22], "nps_boundari": 19, "parknam": 19, "yellowston": 19, "nation": 19, "park": 19, "a0acm612xyu7yibhe0ywsgkttjwjc8uk7l7aof24l3ei935s0iol9nawu3utadmdwdkxhsrd0hmf83axc1d3yze1p3myjkma": 19, "upfpbpnjwat1yzkskgra1": 19, "9to7s3nusmtpzpfcrvovdf_bdvjjqdtmcryh57urg1uezk": 19, "zzj": 19, "8acgykawosaresfqhgx2minnwh": 19, "gxb3leyw3rjxhiskq0178": 19, "jr": 19, "jrc": 19, "gsw1_0": 19, "yearlyhistori": 19, "watercolor": 19, "99d9ea": 19, "waterlabel": 19, "Not": 19, "perman": [19, 21], "waterdict": 19, "waterquerydict": 19, "jrc_gsw1_0_yearlyhistori": 19, "a0acm612yrwpwrbwqtus2xvkhs1dlydqoqjzigeddccymuxk": 19, "kq": 19, "6wtkq8bwed5f5tw6tpvt50q0scd1afm4rgmu8clndjic84n1zhl16h081akdlpxxmqkchodrkxigdgsjxrr5znpfqiq0bvhqb": 19, "jumervorxendd1ior5ovk4kacgykabysaresfqhgx2mib2ifate1btdjjb1u62k": 19, "6g0178": 19, "v": 20, "annim": [20, 23, 25], "foliumviewmap": 20, "geeviewmap": 20, "120": [20, 23], "150": [20, 23], "postcomposit": 20, "precomposit": 20, "apr": 20, "trust": 20, "a0afb_bycp8hcc": 20, "kgeexobcbh6v": 20, "ind3tohadawssbqukaj6f2610ejx0yrugsrrx3htj0sozaqndyqjthwgip64kmlpphhhvovwjkqbis17c7dv9gcpnhxclkek5ci": 20, "mtkghxfvjoxcoiyhw9kvnuse8zrajkpf9gzn": 20, "qykrfptqracgykac8sarasfqhgx2miabxk25swkqokckevd2xnlg0179": 20, "crash": 20, "execut": 20, "failur": 20, "href": 20, "aka": 20, "vscodejupyterkernelcrash": 20, "viewoutput": 20, "log": 20, "notbook": 21, "ipython": 21, "regular": 21, "widget": 21, "therefor": 21, "appropri": 21, "reli": 21, "varieti": 21, "intend": 21, "illustr": 21, "demo": 21, "gm": 21, "gvmap": 21, "gmmap": 21, "a0axoocgvgednhcdk0udrpz89sy_ip1qtrczy4sxurjc2aakllpvphny4jbpgqun_aobmeavqsekqexkupfqkmjo5dkpttzz7jlna2phwiejqprf1zamprsoe7rv9brt3m9pnddmozagqixui2xi_aibvl4dq2v8lzdp7moweacgykafesaresfqhgx2mizsnh07nggce4e3fpejewmw0174": 21, "pt": 21, "92926447956665": 21, "64356771453405": 21, "a0axoocgvtomcjulhqrrmtmyyq3xkeyvworpwj_tm5q65solxuvoo": 21, "djacmhlbu5evcuz2swuaf3dxi_cfpdjzw6j22ndhfg4bo8imiujx2qwfpc4ega0piehn0mr5rkkoxzumldpbkhaa2inx7ortgjgzs_j2jrwjiceo_g8acgykauisaresfqhgx2miorof": 21, "p_gbrm7fo2kghujtq0174": 21, "a0axoocgtjhkidnthnx1_psscrzxmjnt9pvkyetfkwlauetnaq": 21, "mh7v_cn2tzqkia4y271z": 21, "7jrnqiuftclo_2hkoriss8hheyy_fnrczb86g70832yykw1m84okdsmgfl9kbje3ipo4c2ak8jwkvmoqjbfixay6br": 21, "nwtd8acgykadisaresfqhgx2mix0gbebnuwrd7ajvzobxgrq0174": 21, "drop": 21, "dem": 21, "srtmgl1_003": 21, "esa": 21, "globcover_l4_200901_200912_v2_3": 21, "landsat7": 21, "le7_toa_5year": 21, "1999_2003": 21, "b5": 21, "b7": 21, "state": 21, "tiger": 21, "vis_param": 21, "4000": 21, "006633": 21, "e5ffcc": 21, "662a00": 21, "d8d8d8": 21, "f5f5f5": 21, "srtm": 21, "200": [21, 23], "a0axoocgt2jxur_orq4rvsjmw4gbgwnkprdy3lbsdgzxmtbff5m4ez0cqklaehvulitepzt4vzs_krqmc_uqfyogjjbijr0ajqu2hvr1wzlw02hieb2z2obtvqt8tjs3an_dpyqcz18egyve_dq_vagmet3xlanzsadm1yo58acgykaaysaresfqhgx2miilfbqpeh0dglnorl1lvmug0174": 21, "legend_dict": 21, "51": [21, 23], "dwarf": 21, "af963c": 21, "72": [21, 23], "sedg": 21, "d1d182": 21, "73": 21, "lichen": 21, "a3cc51": 21, "74": 21, "moss": 21, "82ba9e": 21, "nlcd2016": 21, "add_legend": 21, "legend_titl": 21, "a0axoocguej_akk295bc8_wxvh1obx6imtvmtr0fi635pjmvgupd35bq_1bdnn2zadu2bk": 21, "nnyu0csii6qoxrhby7nvn1jzqpkfzi2pmnwf5q": 21, "yhn76fal_tn9tgaejk916ybxdkqdb": 21, "1dkdnwjcfugmirp8j_0hgv": 21, "othvu4acgykaagsaresfqhgx2mi4kpnsretbkt_jrnuigpu5g0174": 21, "ee_class_t": 21, "1c0dff": 21, "05450a": 21, "needleleaf": 21, "086a10": 21, "broadleaf": 21, "54a708": 21, "78d203": 21, "009900": 21, "c6b044": 21, "close": 21, "shrubland": [21, 23], "dcd159": 21, "dade48": 21, "savanna": 21, "fbff13": 21, "b6ff05": 21, "27ff87": 21, "c24f44": 21, "a5a5a5": 21, "urban": 21, "ff6d4c": 21, "69fff8": 21, "16": 21, "f9ffa4": 21, "254": 21, "unclassifi": 21, "051": 21, "mcd12q1": 21, "2013_01_01": 21, "land_cover_type_1": 21, "746": 21, "46": 21, "529": 21, "legend_from_e": 21, "minzoomspecifiedscal": 21, "a0axoocgvniz": 21, "x3wpxqxni2br0qtnsijqwqyf9gp3jn0fnba5ankn96clzuhpqtqjeu3mlbstnju1mjuzcitaptyg": 21, "k3jftjzmvrrk": 21, "r32ztc_4gfnw": 21, "qh6pynlkazchtpnv1lpqheofq50dd79x7omrrbqv65pdt6op4i_jiacgykabgsaresfqhgx2miuvmbx4xesivi5u_ficn9sq0174": 21, "integr": 21, "broad": 21, "feel": 21, "shp": 21, "gadm41_che_shp": 21, "gadm41_che_0": 21, "ch": 21, "shp_to_e": 21, "switzerland": 21, "impact": 22, "acquir": 22, "r8": 22, "pr_usvi": 22, "prusvi_boundary_buff2mil": 22, "153": [22, 23], "master": [22, 24], "landat": 22, "lsandt": 22, "processedscen": 22, "processedcomposit": 22, "8337045819611": 22, "329538797654042": 22, "235653085671174": 22, "70461522649235": 22, "a0axoocgu8eunhnvn0a7j3kojb9x0xzzg_l0wq_9vf3go85ug1xxah7x1f4h1zokwlhzfff6osd7bjkzml3fkojlq": 22, "lked4pa8u3pfpmi4ppbr7kdrzi16nos0kxa8znckfv3pqsr5qdhocbnkgsvjrjxuiinj5u744": 22, "av2dsacgykarcsaresfqhgx2miqevekwjja8cvahytqwvyga0174": 22, "miss": 22, "artifact": 22, "wrapoffset": 22, "iter": 22, "hole": 22, "clean": 22, "due": 22, "omiss": 22, "typic": 22, "extend": 22, "30m": 23, "power": 23, "tutori": 23, "glc_fcs30d_lulc": 23, "slight": 23, "els": [23, 25], "glc": 23, "fcs30d": 23, "five": 23, "1995": 23, "fiveyear": 23, "classif": 23, "scheme": 23, "classvalu": 23, "62": [23, 25], "91": 23, "92": 23, "121": 23, "122": 23, "130": 23, "140": 23, "181": 23, "182": 23, "183": 23, "184": 23, "185": 23, "186": 23, "187": 23, "201": 23, "210": 23, "220": 23, "classnam": 23, "rainfed_cropland": 23, "herbaceous_cover_cropland": 23, "tree_or_shrub_cover_cropland": 23, "irrigated_cropland": 23, "open_evergreen_broadleaved_forest": 23, "closed_evergreen_broadleaved_forest": 23, "open_deciduous_broadleaved_forest": 23, "closed_deciduous_broadleaved_forest": 23, "open_evergreen_needle_leaved_forest": 23, "closed_evergreen_needle_leaved_forest": 23, "open_deciduous_needle_leaved_forest": 23, "closed_deciduous_needle_leaved_forest": 23, "open_mixed_leaf_forest": 23, "closed_mixed_leaf_forest": 23, "evergreen_shrubland": 23, "deciduous_shrubland": 23, "lichens_and_moss": 23, "sparse_veget": 23, "sparse_shrubland": 23, "sparse_herbac": 23, "swamp": 23, "marsh": 23, "flooded_flat": 23, "salin": 23, "mangrov": 23, "salt_marsh": 23, "tidal_flat": 23, "impervious_surfac": 23, "bare_area": 23, "consolidated_bare_area": 23, "unconsolidated_bare_area": 23, "water_bodi": 23, "permanent_ice_and_snow": 23, "filled_valu": 23, "classcolor": 23, "ffff64": 23, "aaf0f0": 23, "4c7300": 23, "a8c800": 23, "00a000": 23, "005000": 23, "003c00": 23, "286400": 23, "285000": 23, "a0b432": 23, "788200": 23, "966400": 23, "964b00": 23, "ffb432": 23, "ffdcd2": 23, "ffebaf": 23, "ffd278": 23, "00a884": 23, "73ffdf": 23, "9ebb3b": 23, "828282": 23, "f57ab6": 23, "66cdab": 23, "444f89": 23, "c31400": 23, "fff5d7": 23, "dcdcdc": 23, "0046c8": 23, "annualmosa": 23, "fiveyearmosa": 23, "2001": 23, "fiveyearslist": 23, "04d": 23, "fiveyearmosaicrenam": 23, "yearslist": 23, "annualmosaicrenam": 23, "getfiveyear": 23, "pars": 23, "fiveyearlymosa": 23, "getannualyear": 23, "yearlymosa": 23, "allmosa": 23, "mosaicscol": 23, "fromimag": 23, "out_band_nam": [23, 25], "setuplulc": [23, 25], "landcovercol": 23, "data_typ": 23, "pixeltyp": 23, "crs_transform": 23, "lulc_class_valu": 23, "473385600000": 23, "lulc_class_nam": 23, "lulc_class_palett": 23, "631152000000": 23, "788918400000": 23, "946684800000": 23, "978307200000": 23, "1009843200000": 23, "1041379200000": 23, "2003": 23, "1072915200000": 23, "2004": 23, "1104537600000": 23, "2005": 23, "1136073600000": 23, "2006": 23, "1167609600000": 23, "2007": 23, "1199145600000": 23, "2008": 23, "1230768000000": 23, "1262304000000": 23, "1293840000000": 23, "1325376000000": 23, "2012": 23, "1356998400000": 23, "2013": 23, "1388534400000": 23, "2014": 23, "1420070400000": 23, "2015": [23, 25], "1451606400000": 23, "1483228800000": 23, "1514764800000": 23, "1546300800000": 23, "2019": 23, "1577836800000": 23, "1609459200000": 23, "1640995200000": 23, "a0acm612xntui9pbkoxpxo6eztagcreoeiqv4jgc8rmfdyfnrxnjlv1fmt4kgbjutil1x9b4dzo8yv8piuskt6193mrc31alnj7_mgfexogup": 23, "uxnd6tdo92e96lflmqgorhfifxct_dwepcqg_stiep3tcvwresli2v0tw7j2uciacgykar4saresfqhgx2mipyaa9vv1ecsoydasfludzw0178": 23, "control": [23, 25], "countri": [23, 25], "fao": [23, 25], "gaul_simplified_500m": [23, 25], "level0": [23, 25], "a0acm612wkg8mbxbrdxnw8mtex4rd499fhqevjdbozj1h": 23, "gwuzsy62j5l3fmqkfskptrf5tk4aucxiwjkjkskgpmazdqktff0n0dbgioags4yabqnzi4qgs89ili67zlr7h3bnn": 23, "xxytotbbhusgatad6tti41x6aycqbadsdk1oeacgykaxisaresfqhgx2miidqlq3v3ymgyr_x_w4uiug0178": 23, "a0acm612zmf5wyjo9umvskgfuwthtwen3c0z3opozmcp6q2dyif": 23, "xm9e919ou5_4xr325sbggabfy17yplcklifw_slyinmx9qzbcnsnm7qti1pufzakctfhjgfxrkc0uycdacq0qp3sdgpit9brjtru6ilzigty68lxsyxy4jth4acgykadosaresfqhgx2mi3ccux5tpyca17q1jkczzha0178": 23, "lcms_visual": 24, "j": [24, 25], "author": 24, "contact": 24, "sm": 24, "question": 24, "request": 24, "boiler": 24, "plate": 24, "piec": 24, "src": 24, "width": 24, "500px": 24, "c5ee93": 24, "durationpalett": 24, "bd1600": 24, "e2f400": 24, "0c2780": 24, "lossyearviz": 24, "gainyearviz": 24, "durationviz": 24, "present": 24, "earlyspan": 24, "latespan": 24, "prusvi": 24, "change_raw_probability_slow_loss": 24, "change_raw_probability_fast_loss": 24, "change_raw_probability_gain": 24, "land_cover_raw_probability_tre": 24, "land_cover_raw_probability_tal": 24, "land_cover_raw_probability_shrub": 24, "land_cover_raw_probability_grass": 24, "land_cover_raw_probability_barren": 24, "land_cover_raw_probability_snow": 24, "land_cover_raw_probability_wat": 24, "land_use_raw_probability_agricultur": 24, "land_use_raw_probability_develop": 24, "land_use_raw_probability_forest": 24, "land_use_raw_probability_non": 24, "land_use_raw_probability_oth": 24, "land_use_raw_probability_rangeland": 24, "qa_bit": 24, "anywher": 24, "raw_chang": 24, "change_raw_": 24, "raw_land_cov": 24, "land_cover_raw_": 24, "raw_land_us": 24, "land_use_raw_": 24, "shorten": 24, "raw_change_bn": 24, "raw_land_cover_bn": 24, "raw_land_use_bn": 24, "raw_change_bns_short": 24, "_probability_": 24, "raw_land_cover_bns_short": 24, "raw_land_use_bns_short": 24, "fast_loss": 24, "slow_loss": 24, "a0acm612i": 24, "wmlkxgo_ofkzr_lacz34yfleugdxgourv_dslexswxk": 24, "echfophmj9oxlcyqw3n2ytzc_tzy8sxmdqxpklggko8x1efwm8fem8gq0y9bcyfjd1zbm1juojbttzv44mj7odhgeja0m95klmvtcerfkf0okt1pgnbcvvsacgykazgsaresfqhgx2mik1zfdpf9tgvoz": 24, "wv79huw0178": 24, "lu": 24, "earlylu": 24, "latelu": 24, "earlylc": 24, "latelc": 24, "1989": 24, "a0acm612zdgrjgemdi_yyvnivavy2azv8cvye6etwghwasqq1cziwhreik7o0tclpayf9okm6xuruplduyxkodc15edfza8ryzuek61fhreaxwzrdmoul5_hu6ao0oovhpqxlwjqmbs9rcu8_ilab27qv9vvosyhfo8fyhpjddcxgacgykab8saresfqhgx2mionrzqxwqq": 24, "3vjfp8htnwoa0178": 24, "slowlossyear": 24, "fastlossyear": 24, "gainyear": 24, "mostrecentslowlossyear": 24, "mostrecentgainyear": 24, "slowlossdur": 24, "fastlossdur": 24, "gaindur": 24, "a0acm612xoftpqheiuhbi9bcwdlmiz5o9": 24, "c9zwgsbhcaeoifql5oupmgderejmy6bcq9byq4mgydibrb": 24, "eayimkdoz4whcailrq4xomqd21af80vhmzxv4mbkolmohs1shh5yfgxr": 24, "c36i97o5a6gejqxd8ft2ncxob": 24, "x7w9j7y3aacgykaxqsaresfqhgx2midz2bzdhehesq91hgy_2omq0178": 24, "justchang": 24, "gt": 24, "a0afb_bybqwmdtqbkfllzqoa1bn5jprxi0esx1cuuwxozvbx": 24, "m_e327rkl0jdeu8dagbhn1dzjm0awgbotjw5l2x4ovycgzxd9fzorxakpgzol9s2tj0hgewff1": 24, "mytxlsuigczog3xvys4h5sttvugxvollpfctnpa4z6kjsehu": 24, "gacgykauasarasfqhgx2mi7d0qnuquwafbhjnw_oe2qw0179": 24, "catelogu": 25, "maria": 25, "olga": 25, "borja": 25, "collaps": 25, "mapbiomaslookup": 25, "mbl": 25, "remap_level": 25, "public": 25, "bolivia": 25, "collection2": 25, "mapbiomas_bolivia_collection2_integration_v1": 25, "peru": 25, "mapbiomas_peru_collection2_integration_v1": 25, "colombia": 25, "collection1": 25, "mapbiomas_colombia_collection1_integration_v1": 25, "ecuador": 25, "mapbiomas_ecuador_collection1_integration_v1": 25, "venezuela": 25, "mapbiomas_venezuela_collection1_integration_v1": 25, "paraguai": 25, "mapbiomas_paraguay_collection1_integration_v1": 25, "brazil": 25, "collection9": 25, "mapbiomas_collection90_integration_v1": 25, "raisg": 25, "collection5": 25, "mapbiomas_raisg_panamazonia_collection5_integration_v1": 25, "mapbiomas_pampa": 25, "collection3": 25, "mapbiomas_uruguay_collection1_integration_v1": 25, "chile": 25, "mapbiomas_chile_collection1_integration_v1": 25, "argentina": 25, "mapbiomas_argentina_collection1_integration_v1": 25, "1998": 25, "var": 25, "remap_info": 25, "getlevelnremap": 25, "firstnonnul": 25, "remap": 25, "remap_from": 25, "remap_to": 25, "lulcc": 25, "a0acm612y8zlxjh5tser6siupocmyklrxzdf5qzq6kskwfbowha9ww08rwl0q9wsbawjhaujzpypbwxbllmzn3sqjx3nacrhhxy__zlsaahnngwijecxoi9aurnb1ecangwo_h1o6r5jnms0dnrcvvpvhtpo9ilcnspnwoxlwfnk8acgykax8saresfqhgx2midtno9bis8gzows0gh0zjmw0178": 25, "assetterritori": 25, "joaovsiqueira1": 25, "ti_uc": 25, "territori": 25, "a0acm612x6ne6bhe3xy7j9ocdxwwb_pepsf231rsnhcdziyebxest4s3sn": 25, "b8grtpqx_fmlolxcum6ig2sj": 25, "nyv0wjkfu": 25, "egmlcx25ts8nc42z2kegm_lkmli": 25, "88hmctsdcyvb1c1qx5rcy_1_fu8zqpdtg": 25, "2uryavieer3bvqesacgykavqsaresfqhgx2mistntxfwzi9bxifrwljqnnq0178": 25, "a0acm612zpic1nwa7q2n38sohqdkw5xdz5jifj1rtnudm3a2yew7zvxxmslpw8loqt6dzhsy1sjzxys30i5_tlm2pzc860gyg8nfwsq": 25, "wtmvnyoexqm6ej0n3gdikjbk2szxrlhowfodqskucnduadlfctngcumii6jnckavg8u64acgykaqusaresfqhgx2mi23exncdvc9lky4wtmhwm": 25, "q0178": 25, "vari": 28, "focus": 28}, "objects": {"geeViz": [[12, 0, 0, "-", "assetManagerLib"], [12, 0, 0, "-", "changeDetectionLib"], [12, 0, 0, "-", "cloudStorageManagerLib"], [28, 0, 0, "-", "examples"], [12, 0, 0, "-", "foliumView"], [12, 0, 0, "-", "gee2Pandas"], [12, 0, 0, "-", "geeView"], [12, 0, 0, "-", "getImagesLib"], [12, 0, 0, "-", "phEEnoViz"], [12, 0, 0, "-", "taskManagerLib"]], "geeViz.changeDetectionLib": [[12, 1, 1, "", "simpleLANDTRENDR"]], "geeViz.cloudStorageManagerLib": [[12, 1, 1, "", "rename_blobs"]], "geeViz.geeView": [[12, 1, 1, "", "RGB_to_hex"], [12, 1, 1, "", "baseDomain"], [12, 1, 1, "", "cleanAccessToken"], [12, 1, 1, "", "color_dict_maker"], [12, 1, 1, "", "getProject"], [12, 1, 1, "", "get_poly_gradient_ct"], [12, 1, 1, "", "hex_to_rgb"], [12, 1, 1, "", "isPortActive"], [12, 1, 1, "", "is_notebook"], [12, 1, 1, "", "linear_gradient"], [12, 2, 1, "", "mapper"], [12, 1, 1, "", "polylinear_gradient"], [12, 1, 1, "", "refreshToken"], [12, 1, 1, "", "robustInitializer"], [12, 1, 1, "", "run_local_server"], [12, 1, 1, "", "serviceAccountToken"], [12, 1, 1, "", "setProject"], [12, 1, 1, "", "verified_initialize"]], "geeViz.geeView.mapper": [[12, 3, 1, "", "addAreaChartLayer"], [12, 3, 1, "", "addLayer"], [12, 3, 1, "", "addSelectLayer"], [12, 3, 1, "", "addTimeLapse"], [12, 3, 1, "", "centerObject"], [12, 3, 1, "", "clearMap"], [12, 3, 1, "", "clearMapCommands"], [12, 3, 1, "", "clearMapLayers"], [12, 3, 1, "", "populateAreaChartLayerSelect"], [12, 4, 1, "", "port"], [12, 4, 1, "", "project"], [12, 4, 1, "", "proxy_url"], [12, 4, 1, "", "refreshTokenPath"], [12, 4, 1, "", "serviceKeyPath"], [12, 3, 1, "", "setCanReorderLayers"], [12, 3, 1, "", "setCenter"], [12, 3, 1, "", "setMapTitle"], [12, 3, 1, "", "setQueryBoxColor"], [12, 3, 1, "", "setQueryCRS"], [12, 3, 1, "", "setQueryDateFormat"], [12, 3, 1, "", "setQueryPrecision"], [12, 3, 1, "", "setQueryScale"], [12, 3, 1, "", "setQueryToInfoWindow"], [12, 3, 1, "", "setQueryToSidePane"], [12, 3, 1, "", "setQueryTransform"], [12, 3, 1, "", "setTitle"], [12, 3, 1, "", "setYLabelFontSize"], [12, 3, 1, "", "setYLabelMaxLines"], [12, 3, 1, "", "setZoom"], [12, 3, 1, "", "turnOffAllLayers"], [12, 4, 1, "", "turnOffLayersWhenTimeLapseIsOn"], [12, 3, 1, "", "turnOnAllLayers"], [12, 3, 1, "", "turnOnAutoAreaCharting"], [12, 3, 1, "", "turnOnInspector"], [12, 3, 1, "", "turnOnSelectionAreaCharting"], [12, 3, 1, "", "turnOnUserDefinedAreaCharting"], [12, 3, 1, "", "view"]], "geeViz.getImagesLib": [[12, 1, 1, "", "HoCalcAlgorithm2"], [12, 1, 1, "", "RefinedLee"], [12, 1, 1, "", "addDateBand"], [12, 1, 1, "", "addFullYearJulianDayBand"], [12, 1, 1, "", "addIndices"], [12, 1, 1, "", "addJulianDayBand"], [12, 1, 1, "", "addSAVIandEVI"], [12, 1, 1, "", "addSensorBand"], [12, 1, 1, "", "addSoilIndices"], [12, 1, 1, "", "addTCAngles"], [12, 1, 1, "", "addYearBand"], [12, 1, 1, "", "addYearFractionBand"], [12, 1, 1, "", "addYearJulianDayBand"], [12, 1, 1, "", "addYearYearFractionBand"], [12, 1, 1, "", "addZenithAzimuth"], [12, 1, 1, "", "applyBitMask"], [12, 1, 1, "", "applyCloudScoreAlgorithm"], [12, 1, 1, "", "cFmask"], [12, 1, 1, "", "cFmaskCloud"], [12, 1, 1, "", "cFmaskCloudShadow"], [12, 1, 1, "", "collectionToImage"], [12, 1, 1, "", "compositeDates"], [12, 1, 1, "", "compositeTimeSeries"], [12, 1, 1, "", "dailyMosaics"], [12, 1, 1, "", "defringeLandsat"], [12, 1, 1, "", "exportToAssetWrapper"], [12, 1, 1, "", "exportToCloudStorageWrapper"], [12, 1, 1, "", "exportToDriveWrapper"], [12, 1, 1, "", "fillEmptyCollections"], [12, 1, 1, "", "formatArgs"], [12, 1, 1, "", "getImageCollection"], [12, 1, 1, "", "getLandsat"], [12, 1, 1, "", "getProcessedLandsatScenes"], [12, 1, 1, "", "getQABits"], [12, 1, 1, "", "getS1"], [12, 1, 1, "", "getS2"], [12, 1, 1, "", "getSentinel2"], [12, 1, 1, "", "getTasseledCap"], [12, 1, 1, "", "harmonizationChastain"], [12, 1, 1, "", "harmonizationRoy"], [12, 1, 1, "", "landsatCloudScore"], [12, 1, 1, "", "maskEmptyPixels"], [12, 1, 1, "", "maskS2clouds"], [12, 1, 1, "", "medoidMosaicMSD"], [12, 1, 1, "", "offsetImageDate"], [12, 1, 1, "", "rescale"], [12, 1, 1, "", "setNoData"], [12, 1, 1, "", "sieve"], [12, 1, 1, "", "simpleAddIndices"], [12, 1, 1, "", "simpleAddTCAngles"], [12, 1, 1, "", "simpleGetTasseledCap"], [12, 1, 1, "", "simpleTDOM2"], [12, 1, 1, "", "superSimpleGetS2"], [12, 1, 1, "", "toDB"], [12, 1, 1, "", "toNatural"], [12, 1, 1, "", "uniqueValues"], [12, 1, 1, "", "wrapDates"]]}, "objtypes": {"0": "py:module", "1": "py:function", "2": "py:class", "3": "py:method", "4": "py:attribute"}, "objnames": {"0": ["py", "module", "Python module"], "1": ["py", "function", "Python function"], "2": ["py", "class", "Python class"], "3": ["py", "method", "Python method"], "4": ["py", "attribute", "Python attribute"]}, "titleterms": {"exampl": [0, 18, 20, 27, 28], "python": [0, 27], "script": [0, 27], "notebook": [0, 13, 19, 20, 24, 27], "get": [0, 11], "start": [0, 11], "us": [0, 19, 21, 22], "geeviz": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 19, 20, 21, 24, 28], "visual": [0, 13, 14, 16, 17, 19, 21, 23, 24, 25], "multi": [0, 24], "tempor": [0, 24], "imagecollect": [0, 19, 24], "mapbioma": [0, 25], "dataset": [0, 25], "dynam": [0, 17], "world": [0, 17], "global": [0, 23], "land": [0, 23], "cover": [0, 23], "lcm": [0, 15, 24], "lcmap": [0, 15], "output": [0, 14, 15, 16, 22], "leverag": 0, "getimageslib": [0, 8, 12], "consist": 0, "process": [0, 22], "landsat": [0, 22], "data": [0, 16, 22, 24], "interact": 0, "summar": 0, "learn": 0, "how": [0, 18, 20], "compar": [0, 16], "geemap": [0, 21], "run": [0, 14], "landtrendr": [0, 14], "ccdc": [0, 13], "other": [0, 16, 27], "document": 1, "search": 1, "overview": [1, 26], "assetmanagerlib": [2, 12], "changedetectionlib": [3, 12], "cloudstoragemanagerlib": [4, 12], "foliumview": [5, 12], "gee2panda": [6, 12], "geeview": [7, 12, 19, 24], "pheenoviz": [9, 12], "taskmanagerlib": [10, 12], "instal": 11, "detail": 12, "viewer": [15, 17, 20, 23, 24, 25], "bring": 15, "gee": [15, 18, 19], "collect": 15, "area": 16, "summari": 16, "basic": [16, 17, 23, 25], "chart": [16, 17, 23, 25], "line": 16, "sankei": [16, 17, 23, 25], "wai": 16, "ad": [16, 19], "layer": [16, 19], "non": 16, "themat": 16, "imag": [16, 19], "without": 16, "color": 16, "name": 16, "properti": 16, "time": [16, 17, 24], "laps": [16, 24], "set": [16, 22], "map": [16, 19, 21], "version": 16, "zone": 16, "select": 16, "method": [16, 21, 22], "make": [17, 23, 25], "over": 17, "creat": [17, 22, 23, 24, 25], "work": 18, "between": [18, 21], "panda": 18, "starter": [19, 20], "import": 19, "nlcd": 19, "view": 19, "queri": 19, "multipl": 19, "introduc": 19, "lookup": 19, "tabl": 19, "custom": 19, "style": 19, "vector": 19, "raster": 19, "local": 19, "geojson": 19, "": [19, 20, 21], "addtimelaps": 19, "function": 19, "an": 19, "folium": 20, "util": 20, "base": 20, "A": 21, "comparison": 21, "capabl": 21, "first": [21, 24], "we": [21, 24], "ll": [21, 24], "take": [21, 24], "look": [21, 24], "two": 21, "differ": 21, "interfac": 21, "some": 21, "ar": 21, "similar": 21, "avail": [21, 22], "togeth": 21, "high": 22, "qualiti": 22, "composit": 22, "up": 22, "numer": 22, "paramet": 22, "improv": 22, "includ": 22, "7": 22, "cloud": 22, "mask": 22, "cloudscor": 22, "shadow": 22, "tdom": 22, "calcul": [23, 25], "export": [23, 25], "landcov": 23, "statist": [23, 25], "intro": 24, "foundat": 24, "modul": 24, "explor": 24, "your": 24, "own": 24, "enabl": 24, "quick": 24}, "envversion": {"sphinx.domains.c": 3, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 9, "sphinx.domains.index": 1, "sphinx.domains.javascript": 3, "sphinx.domains.math": 2, "sphinx.domains.python": 4, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx.ext.viewcode": 1, "sphinx": 60}, "alltitles": {"Examples": [[0, "examples"], [27, "examples"]], "Python script examples": [[0, "python-script-examples"], [27, "python-script-examples"]], "Python notebook examples": [[0, "python-notebook-examples"], [27, "python-notebook-examples"]], "Getting Started using geeViz": [[0, "getting-started-using-geeviz"]], "Visualize multi-temporal imageCollections": [[0, "visualize-multi-temporal-imagecollections"]], "Visualize MapBiomas Datasets": [[0, "visualize-mapbiomas-datasets"]], "Visualize Dynamic World": [[0, "visualize-dynamic-world"]], "Visualize the Global Land Cover Dataset": [[0, "visualize-the-global-land-cover-dataset"]], "Visualize LCMS and LCMAP Outputs": [[0, "visualize-lcms-and-lcmap-outputs"], [0, "id1"]], "Leverage geeViz.getImagesLib to consistently process Landsat data": [[0, "leverage-geeviz-getimageslib-to-consistently-process-landsat-data"]], "Interactively summarize data": [[0, "interactively-summarize-data"]], "Learn how geeViz compares to geeMap": [[0, "learn-how-geeviz-compares-to-geemap"]], "Run LandTrendr": [[0, "run-landtrendr"]], "Visualize CCDC Outputs": [[0, "visualize-ccdc-outputs"]], "Other examples": [[0, "other-examples"], [27, "other-examples"]], "geeViz Documentation": [[1, "geeviz-documentation"]], "Search geeViz Documentation": [[1, "search-geeviz-documentation"]], "geeViz Overview": [[1, "geeviz-overview"]], "geeViz.assetManagerLib": [[2, "module-geeViz.assetManagerLib"], [12, "module-geeViz.assetManagerLib"]], "geeViz.changeDetectionLib": [[3, "module-geeViz.changeDetectionLib"], [12, "module-geeViz.changeDetectionLib"]], "geeViz.cloudStorageManagerLib": [[4, "module-geeViz.cloudStorageManagerLib"], [12, "module-geeViz.cloudStorageManagerLib"]], "geeViz.foliumView": [[5, "module-geeViz.foliumView"], [12, "module-geeViz.foliumView"]], "geeViz.gee2Pandas": [[6, "module-geeViz.gee2Pandas"], [12, "module-geeViz.gee2Pandas"]], "geeViz.geeView": [[7, "module-geeViz.geeView"], [12, "module-geeViz.geeView"]], "geeViz.getImagesLib": [[8, "module-geeViz.getImagesLib"], [12, "module-geeViz.getImagesLib"]], "geeViz.phEEnoViz": [[9, "module-geeViz.phEEnoViz"], [12, "module-geeViz.phEEnoViz"]], "geeViz.taskManagerLib": [[10, "module-geeViz.taskManagerLib"], [12, "module-geeViz.taskManagerLib"]], "Installation": [[11, "installation"]], "Installing geeViz": [[11, "installing-geeviz"]], "Getting Started": [[11, "getting-started"]], "Details": [[12, "details"]], "CCDC Visualization Notebook": [[13, "ccdc-visualization-notebook"]], "Run LandTrendr and Visualize Outputs": [[14, "run-landtrendr-and-visualize-outputs"]], "LCMAP and LCMS Outputs Viewer": [[15, "lcmap-and-lcms-outputs-viewer"]], "Bring in LCMAP outputs": [[15, "bring-in-lcmap-outputs"]], "Bring in LCMS GEE collections": [[15, "bring-in-lcms-gee-collections"]], "Visualizing Area Summaries": [[16, "visualizing-area-summaries"]], "Basic Area Charting": [[16, "basic-area-charting"]], "Line and Sankey Charts": [[16, "line-and-sankey-charts"]], "Ways of adding area charting layers": [[16, "ways-of-adding-area-charting-layers"]], "Charting Non-Thematic Data": [[16, "charting-non-thematic-data"]], "Charting Images": [[16, "charting-images"]], "Charting Images Without Color and Name Properties": [[16, "charting-images-without-color-and-name-properties"]], "Charting Time Lapses": [[16, "charting-time-lapses"]], "Charting Thematic Data without set properties": [[16, "charting-thematic-data-without-set-properties"]], "Setting properties for charting": [[16, "setting-properties-for-charting"]], "Comparing map output versions": [[16, "comparing-map-output-versions"]], "Other charting summary zone selection methods": [[16, "other-charting-summary-zone-selection-methods"]], "Visualizing Dynamic World": [[17, "visualizing-dynamic-world"]], "Make a basic viewer": [[17, "make-a-basic-viewer"], [23, "make-a-basic-viewer"], [25, "make-a-basic-viewer"]], "Visualizing Dynamic World over time": [[17, "visualizing-dynamic-world-over-time"]], "Create Sankey Charts": [[17, "create-sankey-charts"], [23, "create-sankey-charts"], [25, "create-sankey-charts"]], "Examples of how to work between GEE and Pandas": [[18, "examples-of-how-to-work-between-gee-and-pandas"]], "Starter geeViz geeView Notebook": [[19, "starter-geeviz-geeview-notebook"]], "Importing geeViz.geeView": [[19, "importing-geeviz-geeview"]], "Adding a GEE image (NLCD) to the Map and viewing and querying it": [[19, "adding-a-gee-image-nlcd-to-the-map-and-viewing-and-querying-it"]], "Visualizing multiple layers on the map": [[19, "visualizing-multiple-layers-on-the-map"]], "Introducing map query lookup tables and custom styles": [[19, "introducing-map-query-lookup-tables-and-custom-styles"]], "Visualizing vectors and rasters on the map": [[19, "visualizing-vectors-and-rasters-on-the-map"]], "Visualizing GEE layers as a local geojson vector": [[19, "visualizing-gee-layers-as-a-local-geojson-vector"]], "Using geeView\u2019s Map.addTimeLapse function to visualize an imageCollection": [[19, "using-geeview-s-map-addtimelapse-function-to-visualize-an-imagecollection"]], "Starter geeViz Folium Viewer Notebook": [[20, "starter-geeviz-folium-viewer-notebook"]], "Example of how to utilize the geeViz\u2019s Folium-based viewer": [[20, "example-of-how-to-utilize-the-geeviz-s-folium-based-viewer"]], "A comparison between geeViz and geeMap\u2019s map visualization capabilities": [[21, "a-comparison-between-geeviz-and-geemap-s-map-visualization-capabilities"]], "First, we\u2019ll take a look at the two different map interfaces": [[21, "first-we-ll-take-a-look-at-the-two-different-map-interfaces"]], "Some methods are similar between the methods available": [[21, "some-methods-are-similar-between-the-methods-available"]], "Using geeMap and geeViz together": [[21, "using-geemap-and-geeviz-together"]], "Create High Quality Landsat Composites": [[22, "create-high-quality-landsat-composites"]], "Setting up numerous parameters available for processing Landsat data": [[22, "setting-up-numerous-parameters-available-for-processing-landsat-data"]], "Improving composite outputs by including Landsat 7": [[22, "improving-composite-outputs-by-including-landsat-7"]], "Improving cloud masking using the cloudScore method": [[22, "improving-cloud-masking-using-the-cloudscore-method"]], "Improving cloud shadow masking using TDOM": [[22, "improving-cloud-shadow-masking-using-tdom"]], "Visualizing Global Land Cover": [[23, "visualizing-global-land-cover"]], "Calculating and Exporting Landcover Statistics\u00b6": [[23, "calculating-and-exporting-landcover-statistics"]], "LCMS Viewer Intro Notebook": [[24, "lcms-viewer-intro-notebook"]], "First, we\u2019ll take a look at the foundation of the geeViz.geeView module - the LCMS Data Explorer": [[24, "first-we-ll-take-a-look-at-the-foundation-of-the-geeviz-geeview-module-the-lcms-data-explorer"]], "Create your own LCMS Viewer": [[24, "create-your-own-lcms-viewer"]], "Time lapses enable quick visualization of multi-temporal imageCollections": [[24, "time-lapses-enable-quick-visualization-of-multi-temporal-imagecollections"]], "Visualizing MapBiomas Datasets": [[25, "visualizing-mapbiomas-datasets"]], "Calculating and Exporting Statistics\u00b6": [[25, "calculating-and-exporting-statistics"]], "Overview": [[26, "overview"]], "geeViz.examples": [[28, "module-geeViz.examples"]]}, "indexentries": {"geeviz.assetmanagerlib": [[2, "module-geeViz.assetManagerLib"], [12, "module-geeViz.assetManagerLib"]], "module": [[2, "module-geeViz.assetManagerLib"], [3, "module-geeViz.changeDetectionLib"], [4, "module-geeViz.cloudStorageManagerLib"], [5, "module-geeViz.foliumView"], [6, "module-geeViz.gee2Pandas"], [7, "module-geeViz.geeView"], [8, "module-geeViz.getImagesLib"], [9, "module-geeViz.phEEnoViz"], [10, "module-geeViz.taskManagerLib"], [12, "module-geeViz.assetManagerLib"], [12, "module-geeViz.changeDetectionLib"], [12, "module-geeViz.cloudStorageManagerLib"], [12, "module-geeViz.foliumView"], [12, "module-geeViz.gee2Pandas"], [12, "module-geeViz.geeView"], [12, "module-geeViz.getImagesLib"], [12, "module-geeViz.phEEnoViz"], [12, "module-geeViz.taskManagerLib"], [28, "module-geeViz.examples"]], "geeviz.changedetectionlib": [[3, "module-geeViz.changeDetectionLib"], [12, "module-geeViz.changeDetectionLib"]], "geeviz.cloudstoragemanagerlib": [[4, "module-geeViz.cloudStorageManagerLib"], [12, "module-geeViz.cloudStorageManagerLib"]], "geeviz.foliumview": [[5, "module-geeViz.foliumView"], [12, "module-geeViz.foliumView"]], "geeviz.gee2pandas": [[6, "module-geeViz.gee2Pandas"], [12, "module-geeViz.gee2Pandas"]], "geeviz.geeview": [[7, "module-geeViz.geeView"], [12, "module-geeViz.geeView"]], "geeviz.getimageslib": [[8, "module-geeViz.getImagesLib"], [12, "module-geeViz.getImagesLib"]], "geeviz.pheenoviz": [[9, "module-geeViz.phEEnoViz"], [12, "module-geeViz.phEEnoViz"]], "geeviz.taskmanagerlib": [[10, "module-geeViz.taskManagerLib"], [12, "module-geeViz.taskManagerLib"]], "hocalcalgorithm2() (in module geeviz.getimageslib)": [[12, "geeViz.getImagesLib.HoCalcAlgorithm2"]], "rgb_to_hex() (in module geeviz.geeview)": [[12, "geeViz.geeView.RGB_to_hex"]], "refinedlee() (in module geeviz.getimageslib)": [[12, "geeViz.getImagesLib.RefinedLee"]], "addareachartlayer() (geeviz.geeview.mapper method)": [[12, "geeViz.geeView.mapper.addAreaChartLayer"]], "adddateband() (in module geeviz.getimageslib)": [[12, "geeViz.getImagesLib.addDateBand"]], "addfullyearjuliandayband() (in module geeviz.getimageslib)": [[12, "geeViz.getImagesLib.addFullYearJulianDayBand"]], "addindices() (in module geeviz.getimageslib)": [[12, "geeViz.getImagesLib.addIndices"]], "addjuliandayband() (in module geeviz.getimageslib)": [[12, "geeViz.getImagesLib.addJulianDayBand"]], "addlayer() (geeviz.geeview.mapper method)": [[12, "geeViz.geeView.mapper.addLayer"]], "addsaviandevi() (in module geeviz.getimageslib)": [[12, "geeViz.getImagesLib.addSAVIandEVI"]], "addselectlayer() (geeviz.geeview.mapper method)": [[12, "geeViz.geeView.mapper.addSelectLayer"]], "addsensorband() (in module geeviz.getimageslib)": [[12, "geeViz.getImagesLib.addSensorBand"]], "addsoilindices() (in module geeviz.getimageslib)": [[12, "geeViz.getImagesLib.addSoilIndices"]], "addtcangles() (in module geeviz.getimageslib)": [[12, "geeViz.getImagesLib.addTCAngles"]], "addtimelapse() (geeviz.geeview.mapper method)": [[12, "geeViz.geeView.mapper.addTimeLapse"]], "addyearband() (in module geeviz.getimageslib)": [[12, "geeViz.getImagesLib.addYearBand"]], "addyearfractionband() (in module geeviz.getimageslib)": [[12, "geeViz.getImagesLib.addYearFractionBand"]], "addyearjuliandayband() (in module geeviz.getimageslib)": [[12, "geeViz.getImagesLib.addYearJulianDayBand"]], "addyearyearfractionband() (in module geeviz.getimageslib)": [[12, "geeViz.getImagesLib.addYearYearFractionBand"]], "addzenithazimuth() (in module geeviz.getimageslib)": [[12, "geeViz.getImagesLib.addZenithAzimuth"]], "applybitmask() (in module geeviz.getimageslib)": [[12, "geeViz.getImagesLib.applyBitMask"]], "applycloudscorealgorithm() (in module geeviz.getimageslib)": [[12, "geeViz.getImagesLib.applyCloudScoreAlgorithm"]], "basedomain() (in module geeviz.geeview)": [[12, "geeViz.geeView.baseDomain"]], "cfmask() (in module geeviz.getimageslib)": [[12, "geeViz.getImagesLib.cFmask"]], "cfmaskcloud() (in module geeviz.getimageslib)": [[12, "geeViz.getImagesLib.cFmaskCloud"]], "cfmaskcloudshadow() (in module geeviz.getimageslib)": [[12, "geeViz.getImagesLib.cFmaskCloudShadow"]], "centerobject() (geeviz.geeview.mapper method)": [[12, "geeViz.geeView.mapper.centerObject"]], "cleanaccesstoken() (in module geeviz.geeview)": [[12, "geeViz.geeView.cleanAccessToken"]], "clearmap() (geeviz.geeview.mapper method)": [[12, "geeViz.geeView.mapper.clearMap"]], "clearmapcommands() (geeviz.geeview.mapper method)": [[12, "geeViz.geeView.mapper.clearMapCommands"]], "clearmaplayers() (geeviz.geeview.mapper method)": [[12, "geeViz.geeView.mapper.clearMapLayers"]], "collectiontoimage() (in module geeviz.getimageslib)": [[12, "geeViz.getImagesLib.collectionToImage"]], "color_dict_maker() (in module geeviz.geeview)": [[12, "geeViz.geeView.color_dict_maker"]], "compositedates() (in module geeviz.getimageslib)": [[12, "geeViz.getImagesLib.compositeDates"]], "compositetimeseries() (in module geeviz.getimageslib)": [[12, "geeViz.getImagesLib.compositeTimeSeries"]], "dailymosaics() (in module geeviz.getimageslib)": [[12, "geeViz.getImagesLib.dailyMosaics"]], "defringelandsat() (in module geeviz.getimageslib)": [[12, "geeViz.getImagesLib.defringeLandsat"]], "exporttoassetwrapper() (in module geeviz.getimageslib)": [[12, "geeViz.getImagesLib.exportToAssetWrapper"]], "exporttocloudstoragewrapper() (in module geeviz.getimageslib)": [[12, "geeViz.getImagesLib.exportToCloudStorageWrapper"]], "exporttodrivewrapper() (in module geeviz.getimageslib)": [[12, "geeViz.getImagesLib.exportToDriveWrapper"]], "fillemptycollections() (in module geeviz.getimageslib)": [[12, "geeViz.getImagesLib.fillEmptyCollections"]], "formatargs() (in module geeviz.getimageslib)": [[12, "geeViz.getImagesLib.formatArgs"]], "getimagecollection() (in module geeviz.getimageslib)": [[12, "geeViz.getImagesLib.getImageCollection"]], "getlandsat() (in module geeviz.getimageslib)": [[12, "geeViz.getImagesLib.getLandsat"]], "getprocessedlandsatscenes() (in module geeviz.getimageslib)": [[12, "geeViz.getImagesLib.getProcessedLandsatScenes"]], "getproject() (in module geeviz.geeview)": [[12, "geeViz.geeView.getProject"]], "getqabits() (in module geeviz.getimageslib)": [[12, "geeViz.getImagesLib.getQABits"]], "gets1() (in module geeviz.getimageslib)": [[12, "geeViz.getImagesLib.getS1"]], "gets2() (in module geeviz.getimageslib)": [[12, "geeViz.getImagesLib.getS2"]], "getsentinel2() (in module geeviz.getimageslib)": [[12, "geeViz.getImagesLib.getSentinel2"]], "gettasseledcap() (in module geeviz.getimageslib)": [[12, "geeViz.getImagesLib.getTasseledCap"]], "get_poly_gradient_ct() (in module geeviz.geeview)": [[12, "geeViz.geeView.get_poly_gradient_ct"]], "harmonizationchastain() (in module geeviz.getimageslib)": [[12, "geeViz.getImagesLib.harmonizationChastain"]], "harmonizationroy() (in module geeviz.getimageslib)": [[12, "geeViz.getImagesLib.harmonizationRoy"]], "hex_to_rgb() (in module geeviz.geeview)": [[12, "geeViz.geeView.hex_to_rgb"]], "isportactive() (in module geeviz.geeview)": [[12, "geeViz.geeView.isPortActive"]], "is_notebook() (in module geeviz.geeview)": [[12, "geeViz.geeView.is_notebook"]], "landsatcloudscore() (in module geeviz.getimageslib)": [[12, "geeViz.getImagesLib.landsatCloudScore"]], "linear_gradient() (in module geeviz.geeview)": [[12, "geeViz.geeView.linear_gradient"]], "mapper (class in geeviz.geeview)": [[12, "geeViz.geeView.mapper"]], "maskemptypixels() (in module geeviz.getimageslib)": [[12, "geeViz.getImagesLib.maskEmptyPixels"]], "masks2clouds() (in module geeviz.getimageslib)": [[12, "geeViz.getImagesLib.maskS2clouds"]], "medoidmosaicmsd() (in module geeviz.getimageslib)": [[12, "geeViz.getImagesLib.medoidMosaicMSD"]], "offsetimagedate() (in module geeviz.getimageslib)": [[12, "geeViz.getImagesLib.offsetImageDate"]], "polylinear_gradient() (in module geeviz.geeview)": [[12, "geeViz.geeView.polylinear_gradient"]], "populateareachartlayerselect() (geeviz.geeview.mapper method)": [[12, "geeViz.geeView.mapper.populateAreaChartLayerSelect"]], "port (geeviz.geeview.mapper attribute)": [[12, "geeViz.geeView.mapper.port"]], "project (geeviz.geeview.mapper attribute)": [[12, "geeViz.geeView.mapper.project"]], "proxy_url (geeviz.geeview.mapper attribute)": [[12, "geeViz.geeView.mapper.proxy_url"]], "refreshtoken() (in module geeviz.geeview)": [[12, "geeViz.geeView.refreshToken"]], "refreshtokenpath (geeviz.geeview.mapper attribute)": [[12, "geeViz.geeView.mapper.refreshTokenPath"]], "rename_blobs() (in module geeviz.cloudstoragemanagerlib)": [[12, "geeViz.cloudStorageManagerLib.rename_blobs"]], "rescale() (in module geeviz.getimageslib)": [[12, "geeViz.getImagesLib.rescale"]], "robustinitializer() (in module geeviz.geeview)": [[12, "geeViz.geeView.robustInitializer"]], "run_local_server() (in module geeviz.geeview)": [[12, "geeViz.geeView.run_local_server"]], "serviceaccounttoken() (in module geeviz.geeview)": [[12, "geeViz.geeView.serviceAccountToken"]], "servicekeypath (geeviz.geeview.mapper attribute)": [[12, "geeViz.geeView.mapper.serviceKeyPath"]], "setcanreorderlayers() (geeviz.geeview.mapper method)": [[12, "geeViz.geeView.mapper.setCanReorderLayers"]], "setcenter() (geeviz.geeview.mapper method)": [[12, "geeViz.geeView.mapper.setCenter"]], "setmaptitle() (geeviz.geeview.mapper method)": [[12, "geeViz.geeView.mapper.setMapTitle"]], "setnodata() (in module geeviz.getimageslib)": [[12, "geeViz.getImagesLib.setNoData"]], "setproject() (in module geeviz.geeview)": [[12, "geeViz.geeView.setProject"]], "setqueryboxcolor() (geeviz.geeview.mapper method)": [[12, "geeViz.geeView.mapper.setQueryBoxColor"]], "setquerycrs() (geeviz.geeview.mapper method)": [[12, "geeViz.geeView.mapper.setQueryCRS"]], "setquerydateformat() (geeviz.geeview.mapper method)": [[12, "geeViz.geeView.mapper.setQueryDateFormat"]], "setqueryprecision() (geeviz.geeview.mapper method)": [[12, "geeViz.geeView.mapper.setQueryPrecision"]], "setqueryscale() (geeviz.geeview.mapper method)": [[12, "geeViz.geeView.mapper.setQueryScale"]], "setquerytoinfowindow() (geeviz.geeview.mapper method)": [[12, "geeViz.geeView.mapper.setQueryToInfoWindow"]], "setquerytosidepane() (geeviz.geeview.mapper method)": [[12, "geeViz.geeView.mapper.setQueryToSidePane"]], "setquerytransform() (geeviz.geeview.mapper method)": [[12, "geeViz.geeView.mapper.setQueryTransform"]], "settitle() (geeviz.geeview.mapper method)": [[12, "geeViz.geeView.mapper.setTitle"]], "setylabelfontsize() (geeviz.geeview.mapper method)": [[12, "geeViz.geeView.mapper.setYLabelFontSize"]], "setylabelmaxlines() (geeviz.geeview.mapper method)": [[12, "geeViz.geeView.mapper.setYLabelMaxLines"]], "setzoom() (geeviz.geeview.mapper method)": [[12, "geeViz.geeView.mapper.setZoom"]], "sieve() (in module geeviz.getimageslib)": [[12, "geeViz.getImagesLib.sieve"]], "simpleaddindices() (in module geeviz.getimageslib)": [[12, "geeViz.getImagesLib.simpleAddIndices"]], "simpleaddtcangles() (in module geeviz.getimageslib)": [[12, "geeViz.getImagesLib.simpleAddTCAngles"]], "simplegettasseledcap() (in module geeviz.getimageslib)": [[12, "geeViz.getImagesLib.simpleGetTasseledCap"]], "simplelandtrendr() (in module geeviz.changedetectionlib)": [[12, "geeViz.changeDetectionLib.simpleLANDTRENDR"]], "simpletdom2() (in module geeviz.getimageslib)": [[12, "geeViz.getImagesLib.simpleTDOM2"]], "supersimplegets2() (in module geeviz.getimageslib)": [[12, "geeViz.getImagesLib.superSimpleGetS2"]], "todb() (in module geeviz.getimageslib)": [[12, "geeViz.getImagesLib.toDB"]], "tonatural() (in module geeviz.getimageslib)": [[12, "geeViz.getImagesLib.toNatural"]], "turnoffalllayers() (geeviz.geeview.mapper method)": [[12, "geeViz.geeView.mapper.turnOffAllLayers"]], "turnofflayerswhentimelapseison (geeviz.geeview.mapper attribute)": [[12, "geeViz.geeView.mapper.turnOffLayersWhenTimeLapseIsOn"]], "turnonalllayers() (geeviz.geeview.mapper method)": [[12, "geeViz.geeView.mapper.turnOnAllLayers"]], "turnonautoareacharting() (geeviz.geeview.mapper method)": [[12, "geeViz.geeView.mapper.turnOnAutoAreaCharting"]], "turnoninspector() (geeviz.geeview.mapper method)": [[12, "geeViz.geeView.mapper.turnOnInspector"]], "turnonselectionareacharting() (geeviz.geeview.mapper method)": [[12, "geeViz.geeView.mapper.turnOnSelectionAreaCharting"]], "turnonuserdefinedareacharting() (geeviz.geeview.mapper method)": [[12, "geeViz.geeView.mapper.turnOnUserDefinedAreaCharting"]], "uniquevalues() (in module geeviz.getimageslib)": [[12, "geeViz.getImagesLib.uniqueValues"]], "verified_initialize() (in module geeviz.geeview)": [[12, "geeViz.geeView.verified_initialize"]], "view() (geeviz.geeview.mapper method)": [[12, "geeViz.geeView.mapper.view"]], "wrapdates() (in module geeviz.getimageslib)": [[12, "geeViz.getImagesLib.wrapDates"]], "geeviz.examples": [[28, "module-geeViz.examples"]]}}) \ No newline at end of file +Search.setIndex({"docnames": ["examples", "index", "info/geeViz.assetManagerLib", "info/geeViz.changeDetectionLib", "info/geeViz.cloudStorageManagerLib", "info/geeViz.foliumView", "info/geeViz.gee2Pandas", "info/geeViz.geeView", "info/geeViz.getImagesLib", "info/geeViz.phEEnoViz", "info/geeViz.taskManagerLib", "installation", "modules", "notebooks/CCDCVizNotebook", "notebooks/LANDTRENDRWrapperNotebook", "notebooks/LCMAP_and_LCMS_Viewer_Notebook", "notebooks/areaChart_examples", "notebooks/dynamicWorldExampleNotebook", "notebooks/gee2PandasExample", "notebooks/geeViewExampleNotebook", "notebooks/geeViewVSFoliumViewerExampleNotebook", "notebooks/geeViz_geeMap_comparison_tutorial", "notebooks/getLandsatWrapperNotebook", "notebooks/global_land_cover_example_notebook", "notebooks/lcmsViewerExampleNotebook", "notebooks/mapBiomasViewerExampleNotebook", "overview", "templates/examples_template", "templates/info/geeViz.examples"], "filenames": ["examples.rst", "index.rst", "info/geeViz.assetManagerLib.rst", "info/geeViz.changeDetectionLib.rst", "info/geeViz.cloudStorageManagerLib.rst", "info/geeViz.foliumView.rst", "info/geeViz.gee2Pandas.rst", "info/geeViz.geeView.rst", "info/geeViz.getImagesLib.rst", "info/geeViz.phEEnoViz.rst", "info/geeViz.taskManagerLib.rst", "installation.rst", "modules.rst", "notebooks/CCDCVizNotebook.ipynb", "notebooks/LANDTRENDRWrapperNotebook.ipynb", "notebooks/LCMAP_and_LCMS_Viewer_Notebook.ipynb", "notebooks/areaChart_examples.ipynb", "notebooks/dynamicWorldExampleNotebook.ipynb", "notebooks/gee2PandasExample.ipynb", "notebooks/geeViewExampleNotebook.ipynb", "notebooks/geeViewVSFoliumViewerExampleNotebook.ipynb", "notebooks/geeViz_geeMap_comparison_tutorial.ipynb", "notebooks/getLandsatWrapperNotebook.ipynb", "notebooks/global_land_cover_example_notebook.ipynb", "notebooks/lcmsViewerExampleNotebook.ipynb", "notebooks/mapBiomasViewerExampleNotebook.ipynb", "overview.rst", "templates/examples_template.rst", "templates/info/geeViz.examples.rst"], "titles": ["Examples", "geeViz Documentation", "geeViz.assetManagerLib", "geeViz.changeDetectionLib", "geeViz.cloudStorageManagerLib", "geeViz.foliumView", "geeViz.gee2Pandas", "geeViz.geeView", "geeViz.getImagesLib", "geeViz.phEEnoViz", "geeViz.taskManagerLib", "Installation", "Details", "CCDC Visualization Notebook", "Run LandTrendr and Visualize Outputs", "LCMAP and LCMS Outputs Viewer", "Visualizing Area Summaries", "Visualizing Dynamic World", "Examples of how to work between GEE and Pandas", "Starter geeViz geeView Notebook", "Starter geeViz Folium Viewer Notebook", "A comparison between geeViz and geeMap\u2019s map visualization capabilities", "Create High Quality Landsat Composites", "Visualizing Global Land Cover", "LCMS Viewer Intro Notebook", "Visualizing MapBiomas Datasets", "Overview", "Examples", "geeViz.examples"], "terms": {"ani": [0, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 27], "follow": [0, 11, 16, 27], "import": [0, 1, 11, 12, 13, 14, 15, 16, 17, 18, 20, 21, 22, 23, 24, 25, 27], "timelapseexampl": [0, 27], "getlandsatwrapp": [0, 22, 27], "getsentinel2wrapp": [0, 27], "getcombinedlandsatsentinel2wrapp": [0, 27], "harmonicregressionwrapp": [0, 27], "landtrendrwrapp": [0, 27], "landtrendrviz": [0, 27], "ccdcviz": [0, 27], "lcmsviewerexampl": [0, 27], "lcmap_and_lcms_view": [0, 27], "pheenovizwrapp": [0, 27], "gfstimelaps": [0, 27], "geeview": [0, 1, 11, 13, 14, 15, 16, 17, 18, 20, 21, 22, 23, 25], "map": [0, 1, 5, 7, 11, 12, 13, 14, 15, 17, 18, 20, 22, 23, 24, 25], "displai": [0, 15, 16, 17, 18, 19], "correctli": 0, "below": [0, 12], "thei": [0, 8, 12, 15, 16, 19, 21], "when": [0, 12, 13, 14, 16, 17, 19, 21, 23, 25], "you": [0, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25], "them": [0, 8, 12, 13, 16, 21, 22, 25], "starter": [0, 1], "ad": [0, 1, 5, 7, 12, 13, 14, 15, 17, 18, 20, 21, 22, 23, 24, 25], "gee": [0, 1, 2, 3, 5, 6, 7, 8, 10, 11, 12, 13, 14, 16, 17, 20, 21, 22, 23, 24, 25], "imag": [0, 1, 8, 11, 12, 13, 14, 15, 17, 20, 21, 22, 23, 24, 25], "nlcd": [0, 1, 12, 16, 21], "view": [0, 1, 5, 7, 11, 12, 13, 14, 15, 16, 17, 18, 20, 21, 22, 23, 24, 25], "queri": [0, 1, 12, 15, 20, 23, 24, 25], "multipl": [0, 1, 12], "layer": [0, 1, 5, 7, 12, 13, 14, 15, 17, 18, 20, 21, 22, 23, 24, 25], "introduc": [0, 1, 22], "lookup": [0, 1, 15, 23, 25], "tabl": [0, 1, 12, 15, 18], "custom": [0, 1, 12, 17, 23, 24, 25], "style": [0, 1, 12], "vector": [0, 1, 12], "raster": [0, 1, 12, 18], "local": [0, 1, 12, 13, 14, 15, 16, 17, 18, 20, 21, 22, 23, 24, 25], "geojson": [0, 1, 12], "": [0, 1, 11, 12, 14, 15, 16, 22, 24], "addtimelaps": [0, 1, 7, 12, 13, 14, 15, 16, 17, 23, 24, 25], "function": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 14, 15, 16, 17, 18, 20, 21, 22, 23, 24, 25], "an": [0, 1, 7, 9, 11, 12, 13, 14, 15, 16, 17, 18, 20, 21, 22, 23, 24, 25], "viewer": [0, 1, 12, 13, 22], "intro": [0, 1], "first": [0, 1, 12, 13, 14, 15, 16, 17, 18, 19, 22], "we": [0, 1, 11, 13, 16, 17, 19, 22], "ll": [0, 1, 17, 19, 22], "take": [0, 1, 6, 12, 13, 15, 16, 17], "look": [0, 1, 13, 14, 15, 16, 20], "foundat": [0, 1], "modul": [0, 1, 3, 7, 8, 11, 12, 13, 14, 15, 16, 18, 19, 20, 22, 25], "explor": [0, 1, 12], "creat": [0, 1, 12, 14, 16, 19, 21], "your": [0, 1, 12, 14, 21, 22], "own": [0, 1, 21], "time": [0, 1, 12, 13, 14, 15, 19, 20, 22, 23, 25], "laps": [0, 1, 12, 13, 15, 17, 19, 20, 23, 25], "enabl": [0, 1, 23, 25], "quick": [0, 1, 20], "make": [0, 1, 14, 15, 16, 20, 21, 22], "basic": [0, 1, 12, 21, 22], "calcul": [0, 1, 12, 17], "export": [0, 1, 10, 12, 13, 14, 17], "statist": [0, 1, 12, 17, 18], "sankei": [0, 1, 12], "chart": [0, 1, 12], "over": [0, 1, 12, 15, 16, 22], "landcov": [0, 1, 12, 16, 19, 21], "bring": [0, 1, 13, 14, 16, 18, 19, 20, 24, 25], "collect": [0, 1, 12, 13, 16, 17, 18, 19, 20, 22, 23, 24, 25], "high": [0, 1, 16, 19, 21], "qualiti": [0, 1, 12], "composit": [0, 1, 9, 12, 13, 14, 16, 17], "set": [0, 1, 3, 8, 12, 14, 15, 17, 18, 19, 20, 21, 23, 24, 25], "up": [0, 1, 3, 8, 11, 12, 14, 15, 16, 17, 18, 19, 21, 23, 24, 25], "numer": [0, 1, 12, 28], "paramet": [0, 1, 12, 14, 15, 16, 17, 21, 23, 24, 25], "avail": [0, 1, 12, 15, 16, 19, 24, 25], "improv": [0, 1], "includ": [0, 1, 2, 4, 12, 13, 14, 16, 17, 23, 25], "7": [0, 1, 12, 14, 15, 16, 17, 21], "cloud": [0, 1, 4, 8, 11, 12, 14, 18, 20], "mask": [0, 1, 8, 12, 14, 15, 16, 19], "cloudscor": [0, 1, 12, 14], "method": [0, 1, 3, 5, 7, 8, 9, 11, 12, 13, 14, 15, 20], "shadow": [0, 1, 8, 12, 14], "tdom": [0, 1, 12, 14, 18, 20], "area": [0, 1, 9, 12, 14, 15, 17, 18, 19, 20, 22, 23, 24, 25], "summari": [0, 1, 12, 23, 24, 25], "line": [0, 1, 12, 15, 17, 23, 25], "wai": [0, 1, 13], "non": [0, 1, 12, 15, 19, 21], "themat": [0, 1, 12, 19], "without": [0, 1, 12, 13, 14, 15, 17, 18, 19, 20, 22, 23, 24, 25], "color": [0, 1, 12, 13, 15, 17, 19, 21, 25], "name": [0, 1, 8, 12, 13, 14, 19, 24, 25], "properti": [0, 1, 12, 19, 21, 22, 23], "version": [0, 1, 12, 13, 14, 15, 17, 18, 19, 20, 22, 23, 24, 25], "zone": [0, 1, 14], "select": [0, 1, 12, 13, 14, 15, 17, 19, 21, 22, 23, 24, 25], "A": [0, 1, 12, 19, 22, 24], "comparison": [0, 1, 16], "between": [0, 1, 12, 13, 16], "capabl": [0, 1], "two": [0, 1, 12, 16], "differ": [0, 1, 12, 15, 16, 22], "interfac": [0, 1, 12], "some": [0, 1, 11, 12, 13, 15, 17, 18, 20, 22], "ar": [0, 1, 8, 12, 13, 14, 15, 16, 17, 19, 22, 24, 25], "similar": [0, 1, 16, 20], "togeth": [0, 1], "landscap": [0, 1, 27], "chang": [0, 1, 2, 3, 11, 12, 13, 14, 15, 16, 17, 22, 23, 24, 27], "monitor": [0, 1, 10, 12, 17, 23, 27], "system": [0, 1, 12, 14, 15, 16, 17, 19, 22, 23, 24, 25, 27], "train": [0, 27], "i": [1, 3, 5, 7, 8, 9, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25], "python": [1, 7, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25], "packag": [1, 6, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25], "help": [1, 2, 4, 8, 12, 15, 22, 25], "data": [1, 3, 6, 8, 12, 14, 15, 17, 18, 19, 20, 21, 23, 25, 28], "process": [1, 11, 12, 13, 14, 16, 18, 19, 20, 23, 28], "analysi": [1, 12, 18, 22, 24], "visual": [1, 9, 12, 15, 18, 22, 28], "googl": [1, 4, 11, 12, 15, 16, 17, 19, 24], "earth": [1, 11, 12, 15, 16, 17, 19, 21, 24], "engin": [1, 11, 12, 15, 16, 17, 19, 21, 24], "provid": [1, 12, 14, 15, 16, 17, 19, 21, 22, 23], "number": [1, 12, 14, 16, 17, 19, 23, 24], "work": [1, 6, 8, 12, 14, 16, 17, 19, 20, 21, 22, 25], "filter": [1, 12, 13, 14, 15, 16, 17, 18, 19, 20, 22, 24], "manipul": [1, 12], "manag": [1, 2, 4, 7, 10, 12], "insid": [1, 12], "outsid": 1, "notebook": [1, 11, 12, 16, 17, 21], "environ": [1, 16], "flexibl": 1, "us": [1, 3, 5, 7, 9, 11, 12, 13, 14, 15, 16, 17, 18, 20, 23, 24, 25, 28], "check": [1, 11, 12], "out": [1, 11, 12, 13, 16, 24], "instal": [1, 13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 24, 25], "section": [1, 15], "further": [1, 20], "inform": [1, 12, 25], "how": [1, 12, 13, 14, 15, 16, 17, 22, 28], "exampl": [1, 11, 12, 13, 14, 15, 16, 17, 19, 21, 22, 23, 24, 25], "show": [1, 9, 12, 13, 16, 18, 23, 25], "mapper": [1, 7, 12, 14, 20], "base": [1, 12, 13, 15, 18, 21, 24], "lcm": [1, 12, 13, 16, 17, 19, 21, 22, 23, 25], "framework": [1, 24], "It": [1, 11, 12, 15, 16, 21, 22], "leverag": 1, "same": [1, 12, 13, 16, 18, 21], "code": [1, 11, 12, 14, 15, 16, 17, 20, 24, 25], "abil": 1, "easili": [1, 16], "object": [1, 5, 6, 7, 12, 14, 19, 20, 21, 23, 24, 25], "pleas": [1, 11, 16, 17, 19, 20, 24], "note": [1, 15, 16], "thi": [1, 8, 9, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25], "websit": 1, "still": [1, 12, 21, 22], "under": [1, 12, 13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 24, 25], "develop": [1, 9, 12, 15, 16, 17, 19, 21, 24], "futur": 1, "releas": 1, "have": [1, 11, 12, 14, 16, 19, 20, 24], "more": [1, 2, 6, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 24, 28], "complet": 1, "index": [1, 12, 14, 15, 17, 23, 24], "get": [1, 8, 12, 13, 14, 15, 16, 17, 18, 20, 22, 24], "start": [1, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25], "getimageslib": [1, 13, 14, 15, 16, 18, 20, 22], "changedetectionlib": [1, 13, 14, 15], "taskmanagerlib": 1, "assetmanagerlib": 1, "cloudstoragemanagerlib": 1, "gee2panda": [1, 18], "foliumview": [1, 18, 20], "pheenoviz": 1, "detail": [1, 11, 15, 20], "rgb_to_hex": [1, 12], "basedomain": [1, 12], "cleanaccesstoken": [1, 12], "color_dict_mak": [1, 12], "getproject": [1, 12], "get_poly_gradient_ct": [1, 12], "hex_to_rgb": [1, 12], "isportact": [1, 12], "is_notebook": [1, 12], "linear_gradi": [1, 12], "port": [1, 12, 13, 14, 17, 18, 20], "proxy_url": [1, 12], "refreshtokenpath": [1, 12], "servicekeypath": [1, 12], "project": [1, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 25], "turnofflayerswhentimelapseison": [1, 12, 17, 23, 25], "addareachartlay": [1, 12, 16], "addlay": [1, 5, 7, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25], "addselectlay": [1, 12, 16, 23, 25], "centerobject": [1, 12, 13, 14, 15, 17, 18, 19, 20, 21, 22, 24], "clearmap": [1, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25], "clearmapcommand": [1, 12], "clearmaplay": [1, 12, 17, 23, 25], "populateareachartlayerselect": [1, 12, 16], "setcanreorderlay": [1, 12], "setcent": [1, 12, 17, 21, 25], "setmaptitl": [1, 12], "setqueryboxcolor": [1, 12], "setquerycr": [1, 12, 23, 25], "setquerydateformat": [1, 12, 15, 24], "setqueryprecis": [1, 12], "setqueryscal": [1, 12, 23, 25], "setquerytoinfowindow": [1, 12], "setquerytosidepan": [1, 12], "setquerytransform": [1, 12, 23, 25], "settitl": [1, 12], "setylabelbreaklength": [1, 12], "setylabelfonts": [1, 12], "setylabelmaxlength": [1, 12], "setylabelmaxlin": [1, 12], "setzoom": [1, 12], "turnoffalllay": [1, 12, 20, 22], "turnonalllay": [1, 12, 20], "turnonautoareachart": [1, 12, 16, 17, 21, 23, 25], "turnoninspector": [1, 12, 13, 14, 15, 17, 18, 19, 20, 22, 23, 24, 25], "turnonselectionareachart": [1, 12, 16], "turnonuserdefinedareachart": [1, 12, 16], "polylinear_gradi": [1, 12], "refreshtoken": [1, 12], "robustiniti": [1, 12], "run_local_serv": [1, 12], "serviceaccounttoken": [1, 12], "setproject": [1, 12], "verified_initi": [1, 12], "hocalcalgorithm2": [1, 12], "refinedle": [1, 12], "adddateband": [1, 12], "addfullyearjuliandayband": [1, 12], "addindic": [1, 12], "addjuliandayband": [1, 12], "addsaviandevi": [1, 12], "addsensorband": [1, 12], "addsoilindic": [1, 12], "addtcangl": [1, 12], "addyearband": [1, 12], "addyearfractionband": [1, 12], "addyearjuliandayband": [1, 12], "addyearyearfractionband": [1, 12], "addzenithazimuth": [1, 12], "applybitmask": [1, 12], "applycloudscorealgorithm": [1, 12], "cfmask": [1, 12], "cfmaskcloud": [1, 12], "cfmaskcloudshadow": [1, 12], "collectiontoimag": [1, 12], "composited": [1, 12], "compositetimeseri": [1, 12], "dailymosa": [1, 12], "defringelandsat": [1, 12], "exporttoassetwrapp": [1, 12, 14], "exporttocloudstoragewrapp": [1, 12], "exporttodrivewrapp": [1, 12], "fillemptycollect": [1, 12, 14], "formatarg": [1, 12], "getclimatewrapp": [1, 12], "getimagecollect": [1, 12], "getlandsat": [1, 12], "getmodisdata": [1, 12], "getprocessedlandsatscen": [1, 12, 14], "getprocessedmodi": [1, 12], "getqabit": [1, 12], "gets1": [1, 12], "gets2": [1, 12], "getsentinel2": [1, 12], "gettasseledcap": [1, 12], "harmonizationchastain": [1, 12], "harmonizationroi": [1, 12], "landsatcloudscor": [1, 12], "maskemptypixel": [1, 12], "masks2cloud": [1, 12], "medoidmosaicmsd": [1, 12], "offsetimaged": [1, 12], "rescal": [1, 12], "setnodata": [1, 12], "siev": [1, 12], "simpleaddindic": [1, 12], "simpleaddtcangl": [1, 12], "simplegettasseledcap": [1, 12], "simpletdom2": [1, 12], "simplewatermask": [1, 12, 18], "supersimplegets2": [1, 12], "todb": [1, 12], "tonatur": [1, 12], "uniquevalu": [1, 12], "wrapdat": [1, 12], "simplelandtrendr": [1, 12, 14], "rename_blob": [1, 12], "script": [1, 11, 13, 15, 17, 21, 24], "imagecollect": [1, 8, 12, 13, 14, 15, 16, 17, 21, 23, 25], "multi": [1, 12, 16], "tempor": [1, 12, 22], "mapbioma": 1, "dataset": [1, 15, 16, 17, 19, 21, 23, 24], "dynam": 1, "world": 1, "global": [1, 14, 17, 21, 25], "land": [1, 12, 15, 16, 17, 21, 24, 25], "cover": [1, 12, 15, 16, 17, 21, 24, 25], "lcmap": [1, 16], "output": [1, 3, 12, 13, 17, 18, 24], "consist": [1, 12], "landsat": [1, 8, 12, 14, 21], "interact": [1, 12, 16, 19, 20, 24], "summar": [1, 12, 16, 17, 21], "compar": [1, 12, 24], "other": [1, 12, 14, 15, 22], "learn": [1, 16, 17, 19, 24], "geemap": 1, "run": [1, 12, 13, 16, 17, 21], "landtrendr": [1, 3, 12], "ccdc": [1, 3, 12, 15], "asset": [2, 12, 13, 14, 16, 17, 19, 22, 24, 25], "copi": [2, 12, 13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 24, 25], "delet": [2, 4, 10, 12], "upload": [2, 12], "permiss": [2, 12, 13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 24, 25], "appli": [3, 12, 13, 14, 17, 18, 19, 20, 22], "detect": [3, 12, 13, 14, 15], "usin": [3, 12], "core": [3, 7, 8, 12, 15], "variou": [3, 8, 11, 12, 22, 24], "algorithm": [3, 12, 13], "within": [3, 12, 16, 24], "notabl": [3, 8, 12], "facilit": [3, 5, 6, 8, 9, 10, 12], "prepar": [3, 12], "applic": [3, 12, 13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 24, 25], "format": [3, 6, 12, 14, 15, 16, 17, 18, 19, 22, 23, 24], "compress": [3, 12], "decompress": [3, 12], "storag": [4, 12], "gc": [4, 12], "bucket": [4, 12], "blob": [4, 12, 24], "renam": [4, 12, 16, 18, 23, 24, 25], "see": [4, 12, 13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 24, 25], "exist": [4, 12, 14, 18, 19, 24], "folium": [5, 12, 18], "can": [5, 7, 11, 12, 13, 14, 15, 16, 17, 19, 21, 22, 23, 24, 25], "class": [5, 7, 12, 15, 16, 17, 19, 23, 25], "from": [6, 8, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 28], "panda": [6, 12, 16], "back": [6, 12, 16], "convert": [6, 12, 14, 18, 20, 23, 24, 25], "tabular": [6, 12], "well": [6, 12, 13, 14, 15, 16, 19, 21, 22], "common": [6, 8, 12, 13, 14, 16, 23], "instanti": [7, 12, 16], "instanc": [7, 11, 12, 16, 24], "default": [7, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25], "organ": [8, 12], "so": [8, 12, 15, 21], "easier": [8, 12], "sentinel": [8, 12, 17, 18], "2": [8, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25], "modi": [8, 12, 21], "avoid": [8, 12, 17, 23, 25], "mani": [8, 11, 12, 14, 16, 21, 22], "mistak": [8, 12], "most": [8, 12, 13, 15, 16, 17, 19, 21, 23, 24, 25], "eas": [8, 12], "match": [8, 12, 14], "band": [8, 12, 13, 14, 16, 17, 18, 19, 21, 23, 24, 25], "ensur": [8, 12, 16, 17, 19, 24], "resampl": [8, 12, 14, 18, 20], "properli": [8, 12, 16, 19], "date": [8, 9, 12, 13, 14, 15, 16, 17, 18, 20, 22, 23, 24, 25], "wrap": [8, 12, 14, 22], "spectral": [9, 12, 15], "season": [9, 12, 14, 17, 19, 22], "compost": [9, 12], "creation": [9, 12], "plot": [9, 12, 24], "good": [9, 12, 14, 16, 22], "tool": [9, 12, 13, 16, 17, 21, 22, 23, 25], "decid": [9, 12], "what": [9, 12, 15, 16], "rang": [9, 12, 13, 14, 15, 16, 17, 19, 22, 25], "task": [10, 12, 14, 16], "programat": [10, 12], "much": [11, 12, 15], "its": [11, 16, 17, 21], "requir": [11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 24, 25], "activ": [11, 12], "account": [11, 12], "associ": 11, "platform": [11, 12], "id": [11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 23, 25], "If": [11, 12, 13, 14, 15, 16, 19, 21, 22, 24], "sign": [11, 12], "here": [11, 12, 15, 19, 20, 23, 24, 25], "try": [11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25], "automat": [11, 12, 16, 17, 19, 23, 25], "earthengin": [11, 13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 24, 25], "api": 11, "sometim": [11, 12, 16], "fail": [11, 12], "reason": [11, 21], "In": [11, 12, 15, 16, 20, 22], "refer": [11, 12, 21], "troubleshoot": 11, "also": [11, 12, 15, 16, 17, 19, 23, 24, 25], "manual": [11, 12, 15], "pip": [11, 13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 24, 25], "Then": [11, 13, 19], "while": [11, 12, 16, 20, 21], "authent": [11, 12], "initi": [11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 23, 25], "doe": [11, 12, 14, 15, 20, 22], "figur": [11, 16], "multitud": 11, "build": [11, 12, 21], "frequent": [11, 12], "direct": [11, 12], "best": [11, 12, 14, 16], "approach": [11, 16], "do": [11, 12, 14, 15, 22], "recommend": [11, 12], "practic": 11, "prior": [11, 12], "ee": [11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25], "someproject": 11, "gv": [11, 12, 20, 21], "someeeimag": 11, "case": [11, 12, 14, 15, 22, 28], "document": [11, 23, 25], "rgb": [12, 17], "list": [12, 14, 16, 17, 19, 21, 23, 24, 25], "int": [12, 14, 23], "str": [12, 14, 15, 19], "sourc": [12, 17, 23, 25], "255": [12, 17, 23], "ffffff": [12, 15, 16, 19, 21, 23], "url": [12, 13, 15, 16, 17, 19, 20, 21, 22, 23, 24, 25], "root": 12, "domain": 12, "given": [12, 13, 14, 16, 21, 22, 23, 24, 25], "find": [12, 14, 15, 16, 24], "return": [12, 13, 15, 16, 17, 22, 23, 24, 25], "type": [12, 22, 23], "accesstoken": [12, 13, 15, 16, 17, 19, 20, 21, 22, 23, 24, 25], "remov": 12, "trail": 12, "gener": [12, 13, 14, 15, 16, 17, 18, 20, 23, 25], "access": [12, 15, 22], "token": [12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25], "raw": [12, 13, 14, 24], "gradient": 12, "dict": 12, "sub": 12, "dictionari": [12, 15, 16, 19], "hex": 12, "form": 12, "graph": [12, 16, 19], "defin": [12, 14, 15, 17, 22, 24], "later": [12, 14], "overwrit": [12, 14, 18], "fals": [12, 13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 24, 25], "tri": 12, "current": [12, 14, 17, 20, 21], "bool": 12, "option": [12, 14, 16, 19], "whether": [12, 13, 14, 15, 18], "cach": [12, 13, 14, 16, 17, 18, 19, 20, 22, 23, 25], "file": [12, 13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 24, 25], "The": [12, 13, 14, 15, 16, 19, 20, 23, 24], "palett": [12, 13, 14, 15, 16, 17, 18, 19, 21, 24, 25], "min": [12, 13, 14, 15, 16, 17, 18, 19, 21, 23, 24], "max": [12, 13, 14, 15, 16, 17, 18, 19, 21, 23, 24], "stretch": 12, "valu": [12, 13, 14, 16, 19, 21, 23, 25], "1": [12, 13, 14, 15, 16, 17, 18, 19, 21, 22, 23, 24, 25], "interpol": 12, "linearli": 12, "where": [12, 14, 15, 16, 17, 21], "inclus": 12, "viz": [12, 16, 19, 23], "ffff00": [12, 16, 19, 23], "00f": [12, 15, 16, 18, 19], "0ff": 12, "ff0000": [12, 19], "20": [12, 17, 19, 21, 23], "color_ramp": 12, "print": [12, 13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 24, 25], "ramp": 12, "tupl": 12, "red": [12, 13, 16], "green": [12, 16, 19], "blue": [12, 16], "rrggbb": 12, "8001": [12, 14, 15, 16, 19, 21, 22, 23, 24, 25], "statu": 12, "alreadi": [12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25], "jupyt": [12, 20], "shell": 12, "start_hex": 12, "finish_hex": 12, "n": [12, 14], "10": [12, 16, 18, 21, 22, 23], "should": [12, 14, 16, 22], "full": [12, 23, 24], "six": 12, "digit": 12, "string": [12, 13, 18], "inlcud": 12, "primari": [12, 15, 16], "setup": 12, "user": [12, 13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 24, 25], "input": 12, "launch": 12, "which": [12, 13, 14, 16, 17, 25], "web": [12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25], "server": [12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25], "becom": 12, "stuck": 12, "need": [12, 14, 16, 19, 20, 21], "than": [12, 14, 15, 19, 22], "wa": [12, 15, 24], "previou": [12, 20, 22], "session": 12, "proxi": 12, "through": [12, 17, 22], "either": [12, 13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 24, 25], "colab": 12, "vertex": [12, 14], "ai": 12, "workbench": 12, "specifi": [12, 13, 14, 15, 16, 17, 19, 22, 23, 25], "must": [12, 14, 19], "e": [12, 14, 16], "g": [12, 14, 16], "http": [12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25], "dot": 12, "region": [12, 17], "googleusercont": 12, "com": [12, 15, 16, 17, 19, 24], "none": [12, 14, 15, 16, 17, 18, 20, 22, 23, 25], "refresh": [12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25], "credenti": [12, 13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 25], "path": [12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25], "oauth": 12, "get_credentials_path": 12, "locat": [12, 14], "servic": [12, 21, 24], "kei": [12, 14, 16, 17, 19, 24], "json": [12, 15], "instead": [12, 16, 18, 19, 20], "overrid": 12, "_cloud_api_user_project": 12, "isn": 12, "t": [12, 15, 18, 22], "usual": 12, "someprojectid": 12, "prompt": 12, "enter": [12, 16, 21], "one": [12, 14, 16, 22, 23, 25], "attribut": [12, 19, 20], "sai": 12, "all": [12, 13, 14, 16, 20, 22], "turn": [12, 16, 17, 19, 20, 22, 23, 25], "off": [12, 13, 16, 17, 20, 22, 23, 25], "true": [12, 13, 14, 15, 16, 17, 19, 21, 22, 23, 24, 25], "confus": 12, "order": [12, 16, 21, 22], "render": [12, 16, 19], "occur": [12, 14, 15, 22], "visibl": [12, 16, 19], "often": 12, "fine": 12, "desir": 12, "param": [12, 14, 16, 19, 22, 23, 25], "shouldchart": 12, "add": [12, 13, 14, 15, 16, 17, 18, 19, 21, 22, 23, 24, 25], "want": [12, 13, 14, 16], "onc": [12, 17, 23, 25], "menu": [12, 16], "etc": [12, 16, 23], "accept": 12, "reduc": [12, 15, 16, 17, 18, 22, 23, 24, 25], "mean": [12, 14, 16], "bandname_class_valu": 12, "bandname_class_nam": 12, "bandname_class_palett": 12, "frequencyhistogram": [12, 16], "those": [12, 14, 15, 16, 19], "comput": [12, 14, 18, 20, 22], "zonal": [12, 16, 17, 23, 25], "cr": [12, 14, 17, 18, 21, 23, 25], "epsg": [12, 14, 18, 23, 25], "5070": [12, 14, 18], "coordin": 12, "stat": [12, 14, 17, 22], "transform": [12, 14, 17, 18, 21, 23, 25], "30": [12, 14, 20, 23, 24, 25], "0": [12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25], "2361915": [12, 14], "3177735": [12, 14], "snap": [12, 14], "scale": [12, 14, 18, 22, 23, 25], "spatial": 12, "resolut": 12, "onli": [12, 13, 14, 16, 17, 19, 22, 25], "discret": 12, "time_start": [12, 14, 15, 16, 17, 19, 22, 23, 24, 25], "each": [12, 14, 15, 16, 17, 20, 21, 24], "sankeytransitionperiod": [12, 16], "year": [12, 13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 24, 25], "transit": [12, 16, 17, 23, 25], "period": [12, 15, 16, 17, 23, 24, 25], "1985": [12, 15, 16, 23, 24, 25], "1987": [12, 16], "2000": [12, 14, 16, 19, 23, 25], "2002": [12, 16, 23], "2020": [12, 15, 16, 19, 23], "2022": [12, 13, 15, 16, 18, 20, 23, 24, 25], "These": [12, 16, 24], "were": [12, 14, 16, 22], "sankeyminpercentag": 12, "float": [12, 14, 15, 22], "5": [12, 13, 15, 16, 19, 20, 21, 23, 24], "minimum": 12, "percentag": 12, "ha": [12, 14, 15, 16, 17, 19, 21, 22, 23], "shown": [12, 16], "forc": 12, "even": 12, "comma": [12, 15], "separ": [12, 16, 22, 24], "especi": 12, "descript": [12, 21], "ui": [12, 16, 21], "load": [12, 15, 17, 20, 23, 24, 25], "usf": [12, 15, 16, 19, 24], "gtac": [12, 15, 16, 19, 24], "v2023": [12, 16], "9": [12, 14, 15, 16, 17, 21], "study_area": [12, 16, 17, 24], "conu": [12, 13, 15, 16, 19, 24], "change_raw_prob": [12, 16], "stddev": [12, 16], "prob": [12, 16], "layertyp": [12, 16, 19], "geometri": [12, 14, 15, 17, 18, 20, 21, 22], "featur": [12, 14, 16, 18, 19, 22, 23], "featurecollect": [12, 14, 16, 17, 18, 19, 21, 22, 23, 25], "call": [12, 14, 21, 22], "addit": [12, 16], "support": [12, 14, 16, 17, 18, 19, 20, 22], "editor": 12, "sever": [12, 15, 16, 19], "legend": [12, 15, 19, 21, 23, 25], "One": [12, 15, 16], "per": [12, 16], "onto": 12, "00": 12, "ff": 12, "gain": [12, 13, 14, 15, 16, 24], "bia": 12, "gamma": [12, 21], "correct": 12, "factor": [12, 14, 22], "css": 12, "singl": [12, 16, 19, 21, 23], "preview": 12, "opac": [12, 13, 19, 24], "geeimag": [12, 22], "geeimagecollect": 12, "geevector": [12, 19], "geevectorimag": [12, 19], "geojsonvector": 12, "For": [12, 14, 16], "spcifi": 12, "would": [12, 13, 14, 16], "like": [12, 13, 14, 16, 17, 22], "actual": 12, "client": 12, "slow": [12, 15, 16, 19, 24], "larg": [12, 19], "complex": 12, "otherwis": [12, 14, 16, 22], "fly": [12, 16, 25], "underli": [12, 17, 23, 25], "though": 12, "To": [12, 16, 17, 19, 24], "just": [12, 22], "lastnonnul": 12, "autoviz": [12, 15, 16, 17, 19, 21, 23, 24, 25], "popul": [12, 14, 15, 16, 21, 22], "classlegenddict": [12, 15, 19, 21], "querydict": [12, 15, 19], "canqueri": 12, "addtolegend": [12, 19, 22, 24], "continu": [12, 16, 17, 19, 24], "auto": 12, "label": [12, 17, 19], "correspond": [12, 17], "queryparam": 12, "legendlabelleftbefor": 12, "left": 12, "befor": 12, "compon": 12, "legendlabelleftaft": 12, "after": 12, "legendlabelrightbefor": 12, "right": 12, "legendlabelrightaft": 12, "canareachart": [12, 16, 17, 21, 23, 25], "quit": [12, 16], "areachartparam": [12, 16, 17, 21, 23, 25], "showgrid": 12, "grid": [12, 14], "bar": [12, 16], "rangeslid": 12, "x": [12, 19], "axi": 12, "selector": 12, "bottom": [12, 21], "plotli": 12, "javascript": 12, "slider": 12, "barchartmaxclass": 12, "maximum": [12, 14], "Will": [12, 16], "top": [12, 21], "bartchartmaxclass": 12, "download": [12, 15, 17, 23, 25], "csv": [12, 17, 18, 23, 25], "count": [12, 16, 24], "usg": [12, 14, 15, 16, 19, 21], "nlcd_releas": [12, 16, 19], "2021_rel": [12, 16], "2021": [12, 13, 16, 17, 18, 23], "availbl": 12, "featurecollecion": 12, "click": [12, 13, 16, 19, 20, 23, 24, 25], "selectlayernameproperti": [12, 16], "strokecolor": [12, 14, 16, 18, 19, 20], "random": 12, "strokeweight": 12, "3": [12, 13, 14, 15, 16, 17, 19, 21, 22, 24, 25], "thick": 12, "polygon": [12, 15, 17, 18, 20, 22], "outlin": 12, "mtbsboundari": [12, 16], "mtb": [12, 16, 19], "burned_area_boundari": [12, 16], "v1": [12, 16, 17], "lambda": [12, 13, 14, 15, 16, 17, 18, 19, 23, 24], "f": [12, 13, 14, 15, 16, 17, 18, 23, 24, 25], "ig_dat": [12, 16], "incid_nam": [12, 16], "fire": [12, 16], "boundari": [12, 16, 23, 25], "imagecollecion": 12, "uniqu": 12, "mosaic": [12, 13, 16, 18, 20, 21, 22, 23, 25], "step": [12, 23], "dateformat": [12, 13, 17], "yyyi": [12, 15, 17, 24], "annual": [12, 17, 19, 23, 24], "monthli": 12, "yyyymm": 12, "daili": [12, 18, 20], "yyyymmdd": 12, "advanceinterv": [12, 13, 17], "advanc": [12, 17], "frame": [12, 17, 24], "individu": [12, 24], "month": [12, 17], "week": 12, "dai": [12, 13, 14, 17, 22], "hour": 12, "minut": 12, "second": [12, 13, 14, 16, 22], "wheth": 12, "calendarrang": [12, 13, 14, 15, 16, 17, 18, 19, 20, 22, 24], "2010": [12, 16, 22, 23], "2023": [12, 14, 16, 17, 18, 20, 25], "land_cov": [12, 15, 16, 24], "land_us": [12, 15, 16, 24], "zoom": [12, 13], "center": [12, 19, 20], "level": [12, 13, 25], "highest": [12, 13, 19], "allow": [12, 14, 16, 25], "fulli": 12, "pt": [12, 21], "point": [12, 17, 21], "111": [12, 18, 20, 21], "41": [12, 15, 16, 18, 20, 21], "buffer": [12, 18], "command": [12, 13, 14, 15, 17, 18, 19, 20, 22, 25], "don": 12, "block": 12, "clear": [12, 14, 15, 19, 20, 22, 24], "remain": [12, 18], "comand": 12, "leav": [12, 16, 23, 25], "canreorderlay": 12, "reorder": [12, 21], "drag": [12, 21], "By": [12, 16], "timelaps": [12, 16, 24], "reordere": 12, "notic": [12, 13, 16, 22], "cannot": [12, 16], "rerun": 12, "now": [12, 18], "109": 12, "446": 12, "43": [12, 16, 21], "620": 12, "12": [12, 14, 16, 17, 21, 23], "lng": 12, "lat": 12, "longitud": 12, "latitud": 12, "titl": 12, "appear": [12, 21], "sidebar": 12, "header": 12, "page": 12, "webpag": 12, "h2": 12, "box": 12, "someth": 12, "yellow": 12, "gil": [12, 14, 16, 18, 20], "common_project": 12, "nlcd_ak": 12, "seak": [12, 16, 24], "144": 12, "36390353": 12, "60": [12, 17], "20479529215": 12, "8": [12, 15, 16, 17, 21, 24, 25], "defaultquerydateformat": 12, "mm": [12, 17], "dd": [12, 15], "simplifi": 12, "chartprecis": 12, "chartdecimalproport": 12, "25": [12, 14], "precis": [12, 15, 23], "too": [12, 19], "decim": 12, "larger": [12, 22], "place": 12, "ceil": 12, "total": 12, "12345678": 12, "yield": 12, "123": 12, "1234567891234": 12, "13": [12, 16, 21], "4": [12, 15, 16, 17, 18, 19, 21, 24, 25], "1235": 12, "s2": [12, 17, 18, 20], "107": 12, "61": [12, 17, 23], "37": 12, "85": 12, "2024": [12, 13, 14, 15, 16, 17, 18, 19, 22, 23, 24, 25], "01": [12, 14, 22], "31": [12, 16, 21], "190": [12, 13, 18, 23], "250": [12, 13], "nir": [12, 13, 16, 22], "swir1": [12, 13, 16, 22], "swir2": [12, 13, 16], "getinfo": [12, 14, 16, 17, 21, 22, 23, 24], "img": [12, 15, 16, 17, 19, 23, 24, 25], "divid": [12, 15, 17], "10000": [12, 14], "milli": [12, 14, 16, 17, 23, 25], "vizparamsfals": [12, 13, 14, 18, 20, 22], "median": [12, 14, 18, 20], "updat": [12, 14, 16, 17, 19, 22, 24], "size": 12, "drawn": 12, "meter": 12, "vizparamsfalse10k": [12, 16], "info": [12, 13, 15, 17, 20], "window": 12, "popup": 12, "abov": [12, 16, 17, 19], "redund": 12, "maxlength": 12, "length": 12, "y": 12, "charact": 12, "break": [12, 13, 15, 24], "until": 12, "maxlin": 12, "reach": 12, "doubl": [12, 13, 19, 23, 24, 25], "inspect": [12, 17], "impact": [12, 22], "fontsiz": 12, "font": 12, "fit": [12, 13, 14], "simpli": [12, 16, 19, 21, 24], "exclud": 12, "typic": [12, 22], "ipython": [12, 21], "upon": 12, "finish": 12, "pan": 12, "inspector": [12, 19], "soon": 12, "hit": 12, "button": 12, "draw": [12, 13], "open_brows": 12, "open_ifram": 12, "iframe_height": 12, "525": 12, "compil": 12, "open": [12, 15, 16, 21, 23], "browser": 12, "unspecifi": 12, "depend": [12, 21], "being": [12, 14, 16], "ifram": [12, 24], "height": [12, 24], "linear": 12, "sequenti": 12, "pair": [12, 17], "temporari": 12, "successfulli": [12, 13, 14, 16, 17, 18, 19, 20, 22, 23, 25], "handl": [12, 16], "scenario": 12, "webserv": 12, "service_key_file_path": 12, "error": [12, 16], "initil": 12, "algal": 12, "matthew": 12, "m": [12, 13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 24, 25], "2011": [12, 19, 23], "review": [12, 20], "empir": 12, "procedur": 12, "remot": 12, "sens": 12, "inland": 12, "coastal": 12, "water": [12, 15, 16, 17, 18, 19, 21], "intern": 12, "journal": 12, "32": 12, "21": [12, 16, 18, 21], "6855": 12, "6899": 12, "doi": 12, "1080": 12, "01431161": 12, "512947": 12, "bloom2": 12, "ndgi": 12, "refin": 12, "lee": 12, "speckl": 12, "natur": [12, 21], "unit": 12, "masktim": 12, "julian": [12, 14, 22], "indic": [12, 14, 22], "savi": 12, "evi": 12, "whichprogram": 12, "toaorsr": [12, 22], "sensor": 12, "program": [12, 13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 24, 25], "c1_landsat": 12, "c2_landsat": 12, "sentinel2": [12, 18, 20], "toa": 12, "sr": [12, 22], "soil": 12, "relat": [12, 16, 22], "tassel": 12, "cap": 12, "angl": 12, "distanc": 12, "assum": [12, 13], "bright": 12, "wet": [12, 14], "fraction": [12, 15], "zenithdict": 12, "solar_zenith_angl": 12, "sun_elev": 12, "azimuthdict": 12, "solar_azimuth_angl": 12, "sun_azimuth": 12, "solar": 12, "zenith": 12, "azimuth": 12, "radian": 12, "bit": 12, "bitmaskbandnam": 12, "qa_pixel": 12, "bitmask": 12, "posit": 12, "qa": [12, 13], "cloudscorefunct": 12, "cloudscorethresh": [12, 22], "cloudscorepctl": [12, 22], "contractpixel": 12, "dilatepixel": 12, "performcloudscoreoffset": [12, 22], "precomputedcloudscoreoffset": [12, 22], "score": [12, 22], "threshold": [12, 14], "percentil": [12, 16], "offset": [12, 22], "contract": 12, "kernel": [12, 20], "dilat": 12, "perform": [12, 14], "pre": [12, 14, 15, 18, 20, 22, 23], "fmaskclass": 12, "snow": [12, 15, 16, 21], "landsatcollectionvers": [12, 22], "c1": 12, "c2": [12, 14, 22], "deprec": [12, 16, 17, 19, 24], "toband": [12, 25], "multiband": [12, 23], "bandnam": [12, 13, 16, 18, 19, 24], "origin": [12, 20, 22], "consid": 12, "l": [12, 15], "startyear": [12, 13, 14, 17, 22, 24], "endyear": [12, 13, 14, 17, 22, 24], "startjulian": [12, 13, 14, 18, 22], "endjulian": [12, 13, 14, 18, 22], "timebuff": [12, 22], "weight": [12, 22], "compositingmethod": [12, 22], "compositingreduc": [12, 22], "averag": [12, 16], "end": [12, 13, 14, 17, 18, 20, 22], "medoid": [12, 22], "contain": 12, "defring": 12, "imageforexport": 12, "assetnam": 12, "assetpath": 12, "pyramidingpolicyobject": 12, "roi": 12, "wrapper": [12, 16, 22, 24], "pyramid": [12, 13], "polici": 12, "tree": [12, 15, 16, 17, 19, 24], "interest": [12, 16], "boolean": [12, 14], "outputnam": [12, 14], "bucketnam": 12, "outputnodata": 12, "32768": 12, "fileformat": 12, "geotiff": 12, "formatopt": 12, "cloudoptim": 12, "tfrecord": 12, "drivefoldernam": 12, "drive": 12, "folder": [12, 13, 14, 16, 17, 18, 19, 20, 22, 23, 25], "incollect": 12, "dummyimag": [12, 14], "fill": [12, 13, 22, 23], "empti": 12, "dummi": 12, "caus": [12, 20], "subsequ": [12, 13, 14, 22], "arg": 12, "argument": 12, "collectionnam": 12, "studyarea": [12, 14, 18, 20, 22], "exportcomposit": 12, "exportpathroot": [12, 14], "exportband": 12, "retriev": 12, "climat": 12, "nasa": 12, "ornl": 12, "daymet_v3": 12, "daymet_v4": 12, "ucsb": 12, "chg": 12, "chirp": 12, "precipit": 12, "potenti": 12, "studi": [12, 14, 18, 20, 22, 24], "result": 12, "seri": [12, 13, 14, 17, 19, 22, 23, 24, 25], "geograph": 12, "365": [12, 13, 15, 22], "around": [12, 14], "chosen": [12, 14, 16], "equal": [12, 17], "mai": [12, 13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 24, 25], "flag": 12, "testarea": [12, 14, 22], "co": 12, "274": 12, "273": [12, 14], "2016": [12, 19, 23], "usernam": [12, 14], "somecollect": [12, 14], "prcp": 12, "tmax": 12, "tmin": 12, "1000": 12, "climatecomposit": 12, "0000ff": [12, 14, 19], "startdat": 12, "datetim": 12, "enddat": 12, "includeslcoffl7": [12, 22], "defringel5": [12, 22], "addpixelqa": [12, 22], "resamplemethod": [12, 22], "imageri": 12, "slc": [12, 14, 22], "l7": [12, 14, 22], "l5": [12, 14, 22], "pixel": [12, 23, 25], "bilinear": 12, "bicub": 12, "meet": 12, "criteria": 12, "ca": [12, 14, 22], "maskwqa": 12, "zeniththresh": 12, "90": [12, 16, 21, 23], "usetempincloudmask": 12, "addlookangleband": 12, "join": [12, 17, 18, 20, 21], "terra": 12, "aqua": 12, "align": 12, "366": 12, "determin": 12, "control": [12, 23, 25], "assur": 12, "degre": 12, "exceed": 12, "thermal": 12, "valid": 12, "nearest": 12, "neighbor": 12, "nlcd_conu": 12, "240": 12, "reproject": 12, "applycloudscor": [12, 22], "applyfmaskcloudmask": [12, 22], "applytdom": [12, 22], "applyfmaskcloudshadowmask": [12, 22], "applyfmasksnowmask": [12, 22], "zscorethresh": [12, 22], "shadowsumthresh": 12, "35": [12, 15, 23], "shadowsumband": [12, 22], "harmonizeoli": [12, 22], "precomputedtdomirmean": [12, 22], "precomputedtdomirstddev": [12, 22], "verbos": [12, 22], "scene": [12, 22], "techniqu": 12, "reflect": [12, 14], "Of": 12, "atmospher": 12, "surfac": [12, 19], "simpl": 12, "fmask": [12, 14, 22], "dark": [12, 22], "outlier": [12, 22], "classifi": [12, 15], "cloudi": 12, "lower": 12, "persist": 12, "product": [12, 13, 14, 15, 16, 23, 24], "z": 12, "sum": 12, "harmon": [12, 13], "oli": 12, "tm": 12, "etm": 12, "respons": 12, "ir": 12, "standard": [12, 16], "deviat": [12, 16], "dure": 12, "readi": 12, "ask": 12, "addtomap": [12, 14], "4326": [12, 14, 23, 25], "adapt": [12, 15, 16, 17, 23], "intermedi": 12, "purpos": 12, "matrix": 12, "extract": [12, 13, 14, 17, 19, 21], "specif": [12, 13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 24, 25], "new": 12, "polar": 12, "vv": 12, "pass_direct": 12, "ascend": 12, "grd": 12, "pass": 12, "converttodailymosa": 12, "addcloudprob": 12, "addcloudscoreplu": 12, "cloudscoreplusscor": 12, "c": [12, 13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 24, 25], "partial": 12, "favor": 12, "simpler": 12, "probabl": [12, 16, 17, 18, 20, 24], "plu": 12, "satellit": 12, "crist": 12, "coeffici": 12, "fromsensor": 12, "tosensor": 12, "chastain": 12, "et": 12, "al": 12, "2018": [12, 17, 21, 23, 24], "target": 12, "repres": [12, 14], "expect": 12, "across": [12, 13], "observ": [12, 14], "zero": 12, "num_observations_1km": 12, "qa60": 12, "medoidincludeband": 12, "squar": 12, "msd": 12, "euclidean": 12, "minim": [12, 16], "As": [12, 15, 21], "normal": 12, "roughli": 12, "temperatur": 12, "varianc": 12, "thu": 12, "less": [12, 14, 16], "choos": [12, 13, 14, 16, 18, 25], "closest": 12, "rather": 12, "median_composit": 12, "medoid_composit": 12, "nodatavalu": 12, "null": [12, 19], "assign": [12, 16], "mmu": 12, "clump": 12, "elimin": 12, "in_imag": 12, "ndvi": [12, 13, 14, 22], "nbr": [12, 13, 14, 18, 22], "ndmi": [12, 14, 18], "ndsi": 12, "powel": 12, "2009": [12, 22, 23], "differenc": 12, "precomput": 12, "slope_thresh": 12, "elevationimagepath": 12, "3dep": 12, "10m": 12, "elevationfocalmeanradiu": 12, "slope": [12, 14], "design": 12, "sensit": 12, "absent": 12, "howev": [12, 15, 16], "flat": 12, "lead": 12, "might": 12, "neg": 12, "omiss": [12, 22], "morpholog": 12, "close": [12, 21], "identifi": [12, 14, 20, 22], "suitabl": [12, 14], "elev": 12, "dem": [12, 21], "3d": 12, "radiu": 12, "focal": 12, "watermask": 12, "selfmask": 12, "water_class_valu": 12, "water_class_nam": 12, "water_class_palett": 12, "0000dd": 12, "applycloudscoreplu": 12, "cloudscoreplusthresh": 12, "6": [12, 14, 15, 16, 17, 19, 21, 22, 25], "unless": [12, 13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 24, 25], "told": 12, "free": 12, "db": 12, "field": 12, "greater": [12, 14], "major": [12, 14, 22], "indexnam": [12, 14], "run_param": [12, 14], "lossmagthresh": [12, 14], "15": [12, 14, 16, 21], "lossslopethresh": [12, 14], "gainmagthresh": [12, 14], "gainslopethresh": [12, 14], "slowlossdurationthresh": [12, 14], "choosewhichloss": [12, 14], "largest": [12, 14], "choosewhichgain": [12, 14], "howmanytopul": [12, 14], "multbi": 12, "both": [12, 14, 15, 16, 20, 21], "bucket_nam": 12, "old_nam": 12, "new_nam": 12, "group": 12, "copyright": [13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 24, 25], "ian": [13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 25], "housman": [13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 25], "licens": [13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 24, 25], "apach": [13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 24, 25], "except": [13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 24, 25], "complianc": [13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 24, 25], "obtain": [13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 24, 25], "www": [13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 24, 25], "org": [13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 24, 25], "law": [13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 24, 25], "agre": [13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 24, 25], "write": [13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 24, 25], "softwar": [13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 24, 25], "distribut": [13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 24, 25], "AS": [13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 24, 25], "basi": [13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 24, 25], "warranti": [13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 24, 25], "OR": [13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 24, 25], "condit": [13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 24, 25], "OF": [13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 24, 25], "kind": [13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 24, 25], "express": [13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 24, 25], "impli": [13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 24, 25], "languag": [13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 24, 25], "govern": [13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 24, 25], "limit": [13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 24, 25], "workflow": 13, "ccdcwrapper": 13, "py": [13, 16, 17, 19, 24], "util": [13, 17], "model": [13, 14, 15, 16, 24], "demonstr": [13, 22], "o": [13, 14, 15, 18, 21, 22, 24], "sy": [13, 14, 15, 21, 22, 24], "append": [13, 14, 15, 19, 22, 24], "getcwd": [13, 14, 15, 22, 24], "geeviz": [13, 14, 15, 16, 17, 18, 22, 23, 25, 27], "arrai": [13, 14], "temporalsegment": 13, "ccdcimg": 13, "292214": [13, 16, 17, 19, 21, 22, 23, 24, 25], "learner": [13, 15], "1984": [13, 19], "tstart": 13, "tend": [13, 14, 15], "tbreak": 13, "changeprob": 13, "predict": 13, "cycl": 13, "yr": [13, 14, 15, 16, 17, 24, 25], "yearli": [13, 14, 23], "pattern": 13, "tighter": 13, "third": 13, "whichharmon": 13, "gap": 13, "segment": [13, 14], "fillgap": 13, "loss": [13, 14, 15, 16, 24], "magnitud": [13, 14], "sinc": [13, 15, 16, 22, 24], "changedetectionbandnam": 13, "recent": [13, 15, 16, 24], "mostrec": 13, "highestmag": 13, "sortingmethod": 13, "pull": [13, 15, 17, 19], "about": [13, 15, 24], "done": [13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 24, 25], "ihousman": [13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 24, 25], "config": [13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 25], "proj_id": [13, 14, 16, 17, 18, 19, 20, 22, 23, 25], "appdata": [13, 14, 16, 17, 18, 19, 20, 22, 23, 24, 25], "python311": [13, 14, 16, 17, 18, 19, 20, 22, 23, 24, 25], "lib": [13, 14, 16, 17, 18, 19, 20, 22, 23, 24, 25], "site": [13, 14, 16, 17, 18, 19, 20, 22, 23, 24, 25], "1231": [13, 14], "difficult": [13, 15, 16], "interpret": 13, "respect": [13, 16], "store": 13, "webmap": [13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25], "localhost": [13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25], "ex": [13, 14, 17, 18, 19, 25], "cwd": [13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25], "gee_py_modules_packag": [13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25], "projectid": [13, 15, 16, 17, 19, 20, 21, 22, 23, 24, 25], "ya29": [13, 15, 16, 17, 19, 20, 21, 22, 23, 24, 25], "a0acm612xo8nuliin": 13, "qvotsn6_fwo8l": 13, "kmeypvlah8dd7vv7du6ycgdbpqmxtlmjm4pqywi6dgovmvt4djtobycowftqxgjoixqszvxft6im8": 13, "ncb0hbiw_2jz9r0n": 13, "api6zlcq6ltue1guvk1itp5pcand3p9qbbi06": 13, "cn9jyacgykae4saresfqhgx2miyse5aedqpnim4fckarejjg0178": 13, "changeobj": 13, "ccdcchangedetect": 13, "lossyearpalett": [13, 14, 15, 24], "mag": 13, "lossmagpalett": 13, "gainyearpalett": [13, 15, 24], "05": [13, 14], "gainmagpalett": 13, "serv": [13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25], "a0acm612ymxqgo5rcgsqbygpf2kcvu3wq3elasrecr2jji0qfk46vnnpdo0qgyfprej1zrhgworgjejkkpluow80oriupq1fu2eztefjnoxujlrl": 13, "9icejvdczgepj5mki": 13, "1xw1xcan3zebf96d1": 13, "nt_vefr8tnsk": 13, "lozv3tn4qscacgykavssaresfqhgx2mihkf20kapp0qbanpl79relw0178": 13, "yearimag": 13, "gettimeimagecollect": 13, "predictccdc": 13, "_fit": 13, "synthet": 13, "next": [13, 17], "last": [13, 16], "split": [13, 16, 24], "fittedbn": 13, "bn": [13, 16, 18, 19, 24], "_": [13, 14, 16, 25], "down": [13, 14, 16, 24], "summer": 13, "compositeyear": 13, "syntheticcomposit": 13, "yymmdd": 13, "No": [13, 18], "a0acm612wbtefcjrcgwieihweabsclqvn3pu1hhpz1_cskddft5uxnyuidddvbge7zteakyb98zlfj2kbam__pxriftg97tzw0sjir4lcz1swgb3rtwtovojt5": 13, "b5yqezd_pbmhmaljpi": 13, "d_dlnidzuluvmomet66rilwr8yeetouacgykaeisaresfqhgx2mizy0ncr5vvist6rwaqlc9": 13, "a0178": 13, "usabl": 14, "depict": 14, "cdl": 14, "map1": 14, "anoth": [14, 19], "map2": 14, "rcr": [14, 15, 18, 20, 24], "variabl": [14, 15, 22], "constraint": [14, 22], "tropic": [14, 22], "southern": [14, 22], "hemispher": [14, 22], "june": [14, 22], "152": [14, 22, 23], "analys": [14, 22], "span": [14, 22], "matter": [14, 22], "1990": [14, 15, 23], "tcanglebg": 14, "signific": 14, "past": 14, "nois": 14, "veget": [14, 15, 21], "omit": 14, "newest": 14, "oldest": 14, "smallest": 14, "steepest": 14, "mostgradu": 14, "shortest": 14, "longest": 14, "timeseri": 14, "breakpoint": 14, "maxseg": 14, "integ": [14, 15], "spikethreshold": 14, "damp": 14, "spike": 14, "vertexcountovershoot": 14, "overshoot": 14, "vertic": 14, "amount": 14, "prune": 14, "preventoneyearrecoveri": 14, "prevent": 14, "recoveri": 14, "recoverythreshold": 14, "rate": 14, "faster": 14, "disallow": 14, "pvalthreshold": 14, "p": [14, 16, 25], "exce": 14, "discard": 14, "levenberg": 14, "marquardt": 14, "optim": 14, "bestmodelproport": 14, "75": 14, "minobservationsneed": 14, "exportltlossgain": 14, "exportltvertexarrai": 14, "lt_test": 14, "mercat": 14, "alber": 14, "wgs84": 14, "utm": 14, "326": 14, "32612": 14, "327": 14, "known": 14, "let": [14, 22, 24], "hansen": 14, "forest": [14, 15, 16, 21, 24], "great": 14, "idea": [14, 16], "been": [14, 15, 19, 22, 24], "earlier": [14, 15, 22], "umd": 14, "global_forest_change_2022_v1_10": 14, "lossyear": 14, "int16": [14, 15, 16, 24], "updatemask": [14, 15, 16, 19, 24], "neq": [14, 19], "And": [14, 17, 24], "gte": 14, "lte": 14, "allimag": 14, "sequenc": [14, 17, 23], "fromymd": [14, 16, 17, 23, 25], "jun": [14, 18, 22], "sep": 14, "l4": [14, 22], "l8": [14, 22], "On": [14, 22], "l9": [14, 22], "9000": 14, "2500": 14, "ltoutput": 14, "durat": [14, 24], "lossgainstack": 14, "stack": [14, 18, 25], "exportnam": 14, "_lt_lossgain_stack_": 14, "exportpath": 14, "proper": 14, "Be": [14, 23, 25], "sure": [14, 16, 23, 25], "pyrobj": 14, "_yr_": 14, "mode": [14, 15, 16, 17, 19, 23, 24], "_dur_": 14, "_mag_": 14, "_slope_": 14, "possibl": [14, 20], "how_many_list": 14, "outobj": 14, "kt": 14, "_lt_": 14, "rawltforexport": 14, "lt": [14, 24], "_lt_raw_": 14, "sampl": [14, 18, 22], "lt_test_lt_lossgain_stack_nbr_1990_2023_152_273": 14, "overwit": 14, "lt_test_lt_raw_nbr_1990_2023_152_273": 14, "understand": [15, 16], "strength": 15, "earli": [15, 24], "prestartyear": 15, "preendyear": 15, "poststartyear": 15, "postendyear": 15, "longer": 15, "part": [15, 25], "awesom": [15, 25], "commun": [15, 23, 24, 25], "samapriya": 15, "github": [15, 24], "io": [15, 16, 23], "playground": 15, "791aa894ce0abfe1a9eb1dc478bbc5d7": 15, "Their": 15, "lc": [15, 16, 24], "sc": 15, "found": [15, 25], "sciencedirect": 15, "scienc": [15, 18], "articl": 15, "pii": 15, "s003442571930375x": 15, "gov": [15, 24], "ero": 15, "lcachg": 15, "sat": [15, 16, 23], "lcpconf": 15, "lcpri": [15, 16], "lcsconf": 15, "lcsec": 15, "sclast": 15, "scmag": 15, "scmqa": 15, "scstab": 15, "sctime": 15, "gena": 15, "lcpri_palett": [15, 16], "e60000": [15, 16], "a87000": [15, 16], "e3e3c2": [15, 16], "1d6330": [15, 16], "476ba1": [15, 16], "bad9eb": [15, 16], "b3b0a3": [15, 16], "a201ff": [15, 16], "lc_name": [15, 16], "cropland": [15, 16, 21], "grass": [15, 16, 17, 24], "shrub": [15, 16, 21, 24], "wetland": [15, 16, 21, 24], "ic": [15, 16, 21, 24], "barren": [15, 16, 21], "lc_legend_dict": 15, "lc_lookup_dict": 15, "len": [15, 16, 19], "lcsec_palett": 15, "lcachg_palett": 15, "sclast_palett": 15, "ffc7aa": 15, "f87e45": 15, "cc764e": 15, "86a7b6": 15, "46a4e": 15, "7954c8": 15, "7a24aa": 15, "432172": 15, "scstab_palett": 15, "ba4e16": 15, "ee964d": 15, "ffe29c": 15, "f4fbc1": 15, "e1f3c3": 15, "bce6ca": 15, "46989c": 15, "scmqa_palett": 15, "000000": 15, "a900e6": 15, "df73ff": 15, "f5f5e3": 15, "db8a00": 15, "924900": 15, "9c9c9c": 15, "homepag": 15, "usda": [15, 24], "geodata": 15, "rastergatewai": 15, "php": 15, "describ": 15, "lcms_v2021": 15, "7_method": 15, "pdf": 15, "app": [15, 24], "catalog": [15, 16, 17, 19, 23, 24, 25], "usfs_gtac_lcms_v2021": [15, 16], "southeastern": 15, "ak": 15, "usfs_gtac_lcms_v2020": [15, 16], "puerto": 15, "rico": 15, "u": [15, 21], "virgin": 15, "island": 15, "depth": [15, 21, 24], "predictor": 15, "go": [15, 18], "html": [15, 24], "v2022": [15, 16, 24], "lc_viz": 15, "secondari": 15, "115": 15, "39350883763947": 15, "36": [15, 23], "32737127837443": 15, "90803695452136": 15, "114": 15, "27015678685822": 15, "a0afb_byaeihat8xz3om23_dpd9m5lbaevx3fol4jemhi_9h8hdiwzag5m6qu9k": 15, "ff73hhlhdgudznyypusyuttc12wudny0dejp2r": 15, "q": 15, "nvcaebavte__aovzra6sc_hgw1bxkgiunuzyu5prqdf_ehqfplcqha53ezy28ry7vef30acgykauksarasfqhgx2mis7shhsecrgpvy1r7je6x9q0179": 15, "loss_viz": 15, "gain_viz": 15, "change_viz": 15, "f0f": 15, "post": [15, 18], "lcmap_pr": 15, "lcmap_post": 15, "lcms_pre": 15, "lcms_post": 15, "combin": [15, 17], "cross": 15, "walk": 15, "mutual": 15, "exclus": 15, "pose": 15, "challeng": [15, 16], "agricultur": [15, 16], "cleaner": 15, "seem": 15, "accur": 15, "fairli": 15, "spars": [15, 21], "tell": 15, "rangeland": [15, 16], "could": [15, 16], "fall": 15, "better": [15, 20], "extent": [15, 16], "fluctuat": 15, "waterbodi": 15, "veri": [15, 19, 21, 22], "quickli": [15, 19], "land_": 15, "cell": [15, 20], "14": [15, 16, 21], "18": [15, 22], "syntaxerror": 15, "invalid": 15, "syntax": [15, 18], "perhap": 15, "forgot": 15, "def": [15, 16, 17, 23, 24, 25], "getyrmskprecis": 15, "getyrmsk": 15, "lcmap_change_yr": 15, "apart": 15, "fast": [15, 16, 24], "lcms_fast_loss_yr": 15, "eq": [15, 16, 19, 24], "lcms_slow_loss_yr": 15, "lcms_gain_yr": 15, "produc": 15, "analag": 15, "106": 15, "91206352513947": 15, "00173645518866": 15, "39": 15, "97403423419109": 15, "105": 15, "34101860326447": 15, "easi": 16, "pd": [16, 18], "There": [16, 22], "percent": 16, "hectar": 16, "acr": 16, "class_valu": 16, "class_nam": [16, 17], "class_palett": 16, "coupl": 16, "get_props_datafram": 16, "prop": 16, "k": 16, "item": 16, "_class_": 16, "df": 16, "datafram": 16, "_class_valu": [16, 17, 21, 23], "_class_nam": [16, 17, 21, 23], "_class_palett": [16, 17, 21, 23], "lcms_prop": 16, "todictionari": [16, 22], "nlcd_prop": 16, "lcms_thematic_bandnam": 16, "nlcd_landcover_bandnam": 16, "stabl": 16, "3d4551": 16, "f39268": 16, "d54309": 16, "00a398": [16, 24], "1b1716": 16, "005e00": 16, "tall": 16, "amp": 16, "mix": [16, 21, 24], "008000": 16, "00cc00": 16, "forb": [16, 24], "herb": [16, 24], "b3ff1a": 16, "99ff99": 16, "b30088": 16, "e68a00": 16, "ffad33": 16, "ffe0b3": 16, "11": [16, 21, 23], "aa7700": 16, "impervi": [16, 24], "d3bf9b": 16, "4780f3": 16, "efff6b": 16, "ff2ff8": 16, "1b9d0c": 16, "97ffff": 16, "a1a1a1": 16, "pastur": [16, 21, 24], "c2b34a": 16, "wit": 16, "466b9f": [16, 21], "perenni": [16, 21], "character": 16, "d1def8": [16, 21], "space": [16, 21], "mixtur": 16, "dec5c5": [16, 21], "22": [16, 21], "low": [16, 19, 21], "intens": [16, 21], "d99282": [16, 21], "23": [16, 21], "medium": [16, 21], "mixt": 16, "eb0000": [16, 21], "24": [16, 21], "highli": 16, "ab0000": [16, 21], "rock": [16, 21], "sand": [16, 21], "clai": [16, 21], "bedrock": 16, "b3ac9f": [16, 21], "decidu": [16, 21], "domin": 16, "gen": 16, "68ab5f": [16, 21], "42": [16, 21], "evergreen": [16, 21], "1c5f2c": [16, 21], "b5c58f": [16, 21], "52": [16, 17, 21, 23], "scrub": [16, 21], "th": 16, "ccb879": [16, 21], "71": [16, 21, 23], "grassland": [16, 21, 23], "herbac": [16, 21], "grama": 16, "dfdfc2": [16, 21], "81": [16, 21, 23], "hai": [16, 21], "legum": 16, "gra": 16, "dcd939": [16, 21], "82": [16, 21, 23], "cultiv": [16, 21], "crop": [16, 17, 21], "productio": 16, "ab6c28": [16, 21], "woodi": [16, 21], "shrublan": 16, "b8d9eb": [16, 21], "95": [16, 21, 23], "emerg": [16, 21], "pere": 16, "6c9fb8": [16, 21], "autmat": 16, "a0acm612wqmlwq7kncrxbk": 16, "pwq6a": 16, "ubtzaxgp7t3sbrdxp3hu9i9xuydhkfl6wd_qb4_vqfqfuffvoiytz5zdfdzjqaotpapn5nzvnxtnnnpffciky3ikhkcqaovmxcbjh4a4vfydk": 16, "ohzti": 16, "qc8jert1": 16, "ewebklou6ikxdsmmg4acgykaqysaresfqhgx2miwg6orz6ql17n2ofvvhecrq0178": 16, "blank": 16, "intersect": 16, "a0acm612yx3qmc40439rt6zwxeruoaxsarh5sy_l2ryzn3xl7ezbjzdd4j5b3fg3jtp_jv7b6pdonvluuirslbreb6": 16, "a4gg5wxpkvzg4qx_iomxi3maarpnd4yviscj6n8xwwfxmhi": 16, "0ijp": 16, "8vpw4kvhtvr9sxtry7bz3pi16nnmqacgykayysaresfqhgx2milbemmlnubwwklm61ez": 16, "xkq0178": 16, "thing": 16, "lot": [16, 22], "move": 16, "paus": 16, "again": 16, "long": 16, "queue": 16, "delai": 16, "a0acm612ynrj_": 16, "94l": 16, "wypiur_p0bhuresnsafejtm0qnf9jdsvl": 16, "qoxucophaj4fwnk7nowfaavijdko_j4bvpwjikncnpzlu2phxue8jggp529ovjvdgb7m_0b2y04zc0mgqvpxuyc_7jopsnwfhwvn88qjhb6odwd6havsaacgykafqsaresfqhgx2mizoa2sdrj2umk01vos_m5ra0174": 16, "With": 16, "imposs": 16, "d": 16, "put": 16, "a0acm612xctzsopht8mgpf3": 16, "hooh0x4ep_k3sdji8jmwbngw0ob6dzxp4s1m6s8jchad8pyo5fvx_9ek4wlx5usxfia3yyzj_cgo9mkgngfczguxau1riv6qrmtzbvrbmi_ky_9vfnonm2gyogfbmpxtgvk": 16, "h5jrvrz0ne0quacgykabesaresfqhgx2mio7entc": 16, "e_kcdil": 16, "8kvvbew0174": 16, "50": [16, 18], "100": [16, 17, 24], "a0acm612zybfmqok8dtueip6qtrixotoupt8cgbfu4lo03agafzcas1rkx2xdfbf6ppbwyoinwzourdxuibcbgo9ytgzbjcvhjjscj3njrfmjuo2hwvemjhno9wv6kvi0irh8zk1nwum6cbqm9zzsimy4e7nmgdqkyzregs5oacgykafqsaresfqhgx2miejykuh8wfwmkrq89m0l9nw0174": 16, "behav": 16, "fashion": 16, "a0acm612zola": 16, "fbl5vkb_hlcop1hfvjdqwfitdhbelu4cfuh0eas0vney95qkqt4enuqsh5ai7rizwpvztjtaaesdrhzwmrm": 16, "096h5": 16, "ebbmtn_fh1txfwbqbjpavvchnobmjhwiur3marrmozgikdbj07fytpec548yqtvrt1bwnaacgykarwsaresfqhgx2mivr4ggv1qjhvlavabzx0a1w0178": 16, "ordin": 16, "getmostrecentchang": [16, 24], "copyproperti": [16, 24], "mostrecentfastlossyear": [16, 24], "ffffe5": [16, 24], "fff7bc": [16, 24], "fee391": [16, 24], "fec44f": [16, 24], "fe9929": [16, 24], "ec7014": [16, 24], "cc4c02": [16, 24], "a0acm612xsvpx5bwxka2ikux0xyyc3pen5x_bcjc9abyt_qnomxh0tt3ukrih4zmql7dsll6n3zh4j55oapjldfsfgc6zgz59th25upnidg": 16, "dubvscsngsox5dd7kyf6cm1razrxnkg0kcwmtpktwqmohmfz8sadgkdmojfv0acgykavusaresfqhgx2mi7eiexaoh_hzjziayp0kgyq0174": 16, "tcc": [16, 19], "share": 16, "yesl7": 16, "tile": [16, 17, 18, 24], "00d": 16, "0d0": 16, "d00": 16, "d0d": 16, "0dd": 16, "a0acm612wnytt": 16, "qfeifqjvxv4tuzzcyewrzkav1oqt1onirtgzb7li8fiv": 16, "gdbo5jm7kwppznzx5kl8xroypn2amtvzbqywhun6od9yc6u6": 16, "3fcw_ykc26": 16, "sfspzma_sj": 16, "0v3okwqfzsx0kciuwz5csknb83el1d24ogm2zmacgykarqsaresfqhgx2miyj7dkmovk05ovvaxnq9xbw0174": 16, "lack": 16, "b1": [16, 21, 23], "a0acm612x9fqnyiuba6y3gng0immdf33nu_h2si6qg1_zfzfxeejhf4obiwsteimc8uybgs2dv4n1palbwqavf4saq5qlbyjbelqeutag546k4t765worrvpvmhgtc_0ilgmj4lnvsgjehtqdsdryuhg20snp6s0fd6wx6": 16, "dco_fiacgykas8saresfqhgx2mizfqvvwehwgckooqxrphnbq0178": 16, "easiest": 16, "preset": 16, "lc_number": 16, "lc_class_valu": 16, "lc_class_nam": 16, "lc_class_palett": 16, "a0acm612w0xpz3ld3_5q": 16, "sixf6xpskovt8khrmbfqwrycnx": 16, "vuo_n1oyitd": 16, "m4bc39kuq99hxzryl5fydbpbx8nfwxoaw58qbnahvfeujyc8ivdl8": 16, "1dzdxtxw8dgzqahomumfqq_i8inpzgk5cadhygl8zpm7io19nhb0wrccovqacgykafssaresfqhgx2mixrzpo8d2qzzvphbqfuysbw0178": 16, "three": 16, "rel": 16, "lcms_2020": 16, "v2020": 16, "lcms_2021": 16, "v2021": 16, "lcms_2022": 16, "lcms_2023": 16, "construct": [16, 17], "replac": 16, "202": [16, 19, 23, 24], "deprecationwarn": [16, 17, 19, 24], "attent": [16, 17, 19, 24], "warn": [16, 17, 19, 24], "categori": [16, 17, 19, 24], "usfs_gtac_lcms_v2022": [16, 24], "a0acm612wptkk_epf9tnmwvorhqebo8kprojyyw3gvekiwau2xdlfautuzws7ezqurigyz4wcs6wijpw7suv": 16, "ebsoj2z1ssl38d4rhpieban6zop8hwaxv07": 16, "rmgdjx0o8u4mkikp92dhi6wg9lmfz20gz6wrwhurcbzy2lesacgykaaysaresfqhgx2mir_mkv5pgclo": 16, "nzqmhuofba0174": 16, "happen": 16, "burn": [16, 19], "a0acm612wgw": 16, "djuuunteplyybaxnaiqxmmfwimfso5_f": 16, "ogebouoiltlwc6osevxri5qicnp7ekgxx89ywl_ssdqmnarafw5iepmfibfbale0qwlqyp58f6cijeqf04ggg49id": 16, "7qfkwx": 16, "m8qazqrmseubqs9y_zwgbhdtyh0acgykadcsaresfqhgx2migi": 16, "mwdreyrxenwtuktipuw0174": 16, "real": 17, "solut": 17, "1234": [17, 20], "scriptpath": 17, "3adataset": 17, "2fgoogl": 17, "2fgoogle_dynamicworld_v1": 17, "dw": 17, "04": 17, "02": [17, 22], "colfilt": 17, "bound": [17, 18, 22], "6729": 17, "4305": 17, "dwcol": 17, "dynamicworld": 17, "s2col": 17, "copernicu": [17, 18, 20], "dws2col": 17, "savefirst": 17, "s2_img": 17, "leftfield": 17, "rightfield": 17, "dwimag": 17, "s2imag": 17, "blend": 17, "lulc": [17, 23, 25], "flooded_veget": 17, "shrub_and_scrub": 17, "built": [17, 21], "bare": 17, "snow_and_ic": 17, "vis_palett": 17, "419bdf": 17, "397d49": 17, "88b053": 17, "7a87c6": 17, "e49635": 17, "dfc35a": 17, "c4281b": 17, "a59b8f": 17, "b39fe1": 17, "dwrgb": 17, "top1prob": 17, "hillshad": 17, "top1probhillshad": 17, "terrain": 17, "multipli": [17, 18], "dwrgbhillshad": 17, "3000": 17, "b4": [17, 21], "b3": [17, 21], "b2": [17, 21, 23], "l1c": 17, "65": [17, 22], "207": 17, "copernicus_s2": 17, "a0acm612ygcqy4": 17, "xqrhqqvy_ffayjrnoqatpaj93ai0qiqeatyt_ykoa0_pprtbgmjzsmuycedwi": 17, "gln4unl5nmpwwc1kgxjgvhofj0ftg": 17, "s5fenuukgbvlryzvh1lmjsfyiimhakb9pgfcawbxvxfjs8l_fuccsbd75lqbepoqmacgykaassaresfqhgx2mi1f_7zzfgg7vxwgv70he2qq0178": 17, "streamlin": [17, 23, 25], "png": [17, 23, 25], "class_band_nam": 17, "9269985485747725": 17, "11936200243072": 17, "187959630772305": 17, "2561001110747725": 17, "nmonth": 17, "viz_dict": [17, 25], "filterbound": 17, "proj": [17, 21], "getmonth": 17, "startmonth": 17, "endmonth": 17, "subtract": 17, "datestr": 17, "getyr": 17, "yrimg": 17, "dwcompseason": 17, "flatten": 17, "aggregate_histogram": [17, 24], "a0acm612xqigdcaycnsbagrnrugn9hqeondtnu8nc3zu": 17, "4c11mrnqy2fydvexaiokuojqfvojuby2edrq3pyscw9abftjypye2uqcpnuz2v1zbrqngpay1x8gyulhiob8lozeijahav7al9mhycqhfcjkj38ttud7iomm3b4yxgjeacgykasgsaresfqhgx2mixcttvcdehfdfdtuskh4rca0178": 17, "matric": [17, 23, 25], "dwcompannu": 17, "a0acm612zgxlr7g2m06p2w_g97qfinvqtn0jwbwkud7ajsww2ozaou5j3xu8mlwfqe70m8qw64oejpa6b5naoujxq5uzxm7ivlyvowroguzywxxoiunhdzswlg7acnilr05ut_74lwjabkpqjkkvs1n4d7ukpntsagsrlcaovrcweacgykax0saresfqhgx2mia7fum6yib_wnxdrprp3weg0178": 17, "fv": [18, 20], "g2p": 18, "matplotlib": 18, "pyplot": 18, "plt": 18, "numpi": 18, "foliummapp": [18, 20], "1233": 18, "pytabl": 18, "hdf": 18, "sqlalchemi": 18, "sql": 18, "setmaparg": 18, "cartodb": 18, "positron": 18, "113": [18, 20], "21807278537877": [18, 20], "786028237932015": [18, 20], "40": [18, 20, 21], "595571243156144": [18, 20], "82280911350377": [18, 20], "preyear": 18, "postyear": 18, "160": 18, "getprocessedsentinel2scen": [18, 20], "postwat": 18, "addband": 18, "888": 18, "prewat": 18, "watertransitionclass": 18, "water_transition_": 18, "0f0": 18, "f00": [18, 19, 20], "strokewidth": [18, 20], "maparg": 18, "09": 18, "jul": 18, "08": 18, "s2_harmon": [18, 20], "s2_cloud_prob": [18, 20], "aggreg": [18, 20], "irmean": [18, 20, 22], "irstddev": [18, 20, 22], "water_transition_2022": 18, "nsampl": 18, "500": 18, "prebn": 18, "cat": [18, 23], "_yr": 18, "_jd": 18, "postbn": 18, "randompoint": 18, "outdir": 18, "tmp": 18, "makedir": 18, "out_csv": 18, "gee2pandas_test_csv": 18, "geetolocalzonalstat": 18, "tilescal": 18, "maxnumberoffeatur": 18, "5000": 18, "xy": 18, "scatter": 18, "read_csv": 18, "plotbandnam": 18, "precolumn": 18, "postcolumn": 18, "watercolumn": 18, "water_yr": 18, "column": 18, "fig": 18, "ax": 18, "subplot": 18, "scat": 18, "alpha": 18, "set_xlabel": 18, "set_ylabel": 18, "importlib": 18, "reload": 18, "fc": 18, "tabletofeaturecollect": 18, "test": 18, "stock": 19, "hex_color": 19, "ff0": 19, "convers": [19, 21], "previous": [19, 24], "2016_rel": 19, "noth": 19, "landus": 19, "a0acm612xc9": 19, "pb9qaoeeavewvz1nkswrtdlu5dmd8wyk1ooxgnl_qiqgk6edhi2ydrdnmu3ri80bbyybkfpxzzeoydg_bdmumchsvqlef_u5eyf_sna3qr_o0qd96qbkra9c0x_jmw6tvi3ywf2h": 19, "x8cuswctpniqmnzfu5a7f8lmacgykaf8saresfqhgx2midqd7xyss4irxaini6w30bq0178": 19, "listcontain": 19, "sort": 19, "percent_tree_cov": 19, "80": 19, "555": 19, "0a0": 19, "a0acm612web91prlj0adbpvkurazmqd3wcbxcuhhmod3gocg_5j94lagpnzrrby5rxg_n1fwpl52nqssck_3wtni": 19, "9euedagd72r1tdh": 19, "g0sdgrk": 19, "vutq1scvd0xfm0icx_qruvhu2l3t": 19, "ocwojcz5f6dozxwbfuxsdg1pr1ww4acgykaw8saresfqhgx2miy70q2fyysbm1u3jh1": 19, "kpnw0178": 19, "burn_severity_mosa": 19, "byte": [19, 25], "mtbscolor": 19, "006400": [19, 23], "7fffd4": 19, "7fff00": 19, "mtbslabel": 19, "unburn": 19, "moder": 19, "increas": 19, "mtbsdict": 19, "mtbsquerydict": 19, "severityviz": 19, "2017": [19, 23], "a0acm612ymuggajtw9s6moc5gcfhqzrwaidfm4wo8ezddz": 19, "ipotvqekpl": 19, "phtcl0oc535oafkzf50nxedh6z51bkbk_zsmildpssd1lsfhv7rwcp6incydeh73_jeakscewlupbugamxxlrsdoo1tdwm": 19, "5dffe7yflujxorvjsewuacgykacysaresfqhgx2mirzqtm9d85ppbatdl2ki9vq0178": 19, "perim": 19, "perimet": 19, "mtbs_perims_dd": 19, "a0acm612xlix2z7gftqgxh8dstw0mkngvq1rbkopyvosmmcdknha5xogzuhnvp_gazpov3v6y5": 19, "xytwnftpkxgozxoeqwjn24apigyhho7f0pi68azdnje036ggawviiid4vdtcv9cob3rxbrrtqqoxwa0a0ebgpmyspdpbhen2maacgykad4saresfqhgx2mijoenyiwcugz0f": 19, "f9mbucha0178": 19, "smaller": 19, "rater": 19, "np": 19, "nf": 19, "ancillari": [19, 22], "nps_boundari": 19, "parknam": 19, "yellowston": 19, "nation": 19, "park": 19, "a0acm612xyu7yibhe0ywsgkttjwjc8uk7l7aof24l3ei935s0iol9nawu3utadmdwdkxhsrd0hmf83axc1d3yze1p3myjkma": 19, "upfpbpnjwat1yzkskgra1": 19, "9to7s3nusmtpzpfcrvovdf_bdvjjqdtmcryh57urg1uezk": 19, "zzj": 19, "8acgykawosaresfqhgx2minnwh": 19, "gxb3leyw3rjxhiskq0178": 19, "jr": 19, "jrc": 19, "gsw1_0": 19, "yearlyhistori": 19, "watercolor": 19, "99d9ea": 19, "waterlabel": 19, "Not": 19, "perman": [19, 21], "waterdict": 19, "waterquerydict": 19, "jrc_gsw1_0_yearlyhistori": 19, "a0acm612yrwpwrbwqtus2xvkhs1dlydqoqjzigeddccymuxk": 19, "kq": 19, "6wtkq8bwed5f5tw6tpvt50q0scd1afm4rgmu8clndjic84n1zhl16h081akdlpxxmqkchodrkxigdgsjxrr5znpfqiq0bvhqb": 19, "jumervorxendd1ior5ovk4kacgykabysaresfqhgx2mib2ifate1btdjjb1u62k": 19, "6g0178": 19, "v": 20, "annim": [20, 23, 25], "foliumviewmap": 20, "geeviewmap": 20, "120": [20, 23], "150": [20, 23], "postcomposit": 20, "precomposit": 20, "apr": 20, "trust": 20, "a0afb_bycp8hcc": 20, "kgeexobcbh6v": 20, "ind3tohadawssbqukaj6f2610ejx0yrugsrrx3htj0sozaqndyqjthwgip64kmlpphhhvovwjkqbis17c7dv9gcpnhxclkek5ci": 20, "mtkghxfvjoxcoiyhw9kvnuse8zrajkpf9gzn": 20, "qykrfptqracgykac8sarasfqhgx2miabxk25swkqokckevd2xnlg0179": 20, "crash": 20, "execut": 20, "failur": 20, "href": 20, "aka": 20, "vscodejupyterkernelcrash": 20, "viewoutput": 20, "log": 20, "notbook": 21, "regular": 21, "widget": 21, "therefor": 21, "appropri": 21, "reli": 21, "varieti": 21, "intend": 21, "illustr": 21, "demo": 21, "gm": 21, "gvmap": 21, "gmmap": 21, "a0axoocgvgednhcdk0udrpz89sy_ip1qtrczy4sxurjc2aakllpvphny4jbpgqun_aobmeavqsekqexkupfqkmjo5dkpttzz7jlna2phwiejqprf1zamprsoe7rv9brt3m9pnddmozagqixui2xi_aibvl4dq2v8lzdp7moweacgykafesaresfqhgx2mizsnh07nggce4e3fpejewmw0174": 21, "92926447956665": 21, "64356771453405": 21, "a0axoocgvtomcjulhqrrmtmyyq3xkeyvworpwj_tm5q65solxuvoo": 21, "djacmhlbu5evcuz2swuaf3dxi_cfpdjzw6j22ndhfg4bo8imiujx2qwfpc4ega0piehn0mr5rkkoxzumldpbkhaa2inx7ortgjgzs_j2jrwjiceo_g8acgykauisaresfqhgx2miorof": 21, "p_gbrm7fo2kghujtq0174": 21, "a0axoocgtjhkidnthnx1_psscrzxmjnt9pvkyetfkwlauetnaq": 21, "mh7v_cn2tzqkia4y271z": 21, "7jrnqiuftclo_2hkoriss8hheyy_fnrczb86g70832yykw1m84okdsmgfl9kbje3ipo4c2ak8jwkvmoqjbfixay6br": 21, "nwtd8acgykadisaresfqhgx2mix0gbebnuwrd7ajvzobxgrq0174": 21, "drop": 21, "srtmgl1_003": 21, "esa": 21, "globcover_l4_200901_200912_v2_3": 21, "landsat7": 21, "le7_toa_5year": 21, "1999_2003": 21, "b5": 21, "b7": 21, "state": 21, "tiger": 21, "vis_param": 21, "4000": 21, "006633": 21, "e5ffcc": 21, "662a00": 21, "d8d8d8": 21, "f5f5f5": 21, "srtm": 21, "200": [21, 23], "a0axoocgt2jxur_orq4rvsjmw4gbgwnkprdy3lbsdgzxmtbff5m4ez0cqklaehvulitepzt4vzs_krqmc_uqfyogjjbijr0ajqu2hvr1wzlw02hieb2z2obtvqt8tjs3an_dpyqcz18egyve_dq_vagmet3xlanzsadm1yo58acgykaaysaresfqhgx2miilfbqpeh0dglnorl1lvmug0174": 21, "legend_dict": 21, "51": [21, 23], "dwarf": 21, "af963c": 21, "72": [21, 23], "sedg": 21, "d1d182": 21, "73": 21, "lichen": 21, "a3cc51": 21, "74": 21, "moss": 21, "82ba9e": 21, "nlcd2016": 21, "add_legend": 21, "legend_titl": 21, "a0axoocguej_akk295bc8_wxvh1obx6imtvmtr0fi635pjmvgupd35bq_1bdnn2zadu2bk": 21, "nnyu0csii6qoxrhby7nvn1jzqpkfzi2pmnwf5q": 21, "yhn76fal_tn9tgaejk916ybxdkqdb": 21, "1dkdnwjcfugmirp8j_0hgv": 21, "othvu4acgykaagsaresfqhgx2mi4kpnsretbkt_jrnuigpu5g0174": 21, "ee_class_t": 21, "1c0dff": 21, "05450a": 21, "needleleaf": 21, "086a10": 21, "broadleaf": 21, "54a708": 21, "78d203": 21, "009900": 21, "c6b044": 21, "shrubland": [21, 23], "dcd159": 21, "dade48": 21, "savanna": 21, "fbff13": 21, "b6ff05": 21, "27ff87": 21, "c24f44": 21, "a5a5a5": 21, "urban": 21, "ff6d4c": 21, "69fff8": 21, "16": 21, "f9ffa4": 21, "254": 21, "unclassifi": 21, "051": 21, "mcd12q1": 21, "2013_01_01": 21, "land_cover_type_1": 21, "746": 21, "46": 21, "529": 21, "legend_from_e": 21, "minzoomspecifiedscal": 21, "a0axoocgvniz": 21, "x3wpxqxni2br0qtnsijqwqyf9gp3jn0fnba5ankn96clzuhpqtqjeu3mlbstnju1mjuzcitaptyg": 21, "k3jftjzmvrrk": 21, "r32ztc_4gfnw": 21, "qh6pynlkazchtpnv1lpqheofq50dd79x7omrrbqv65pdt6op4i_jiacgykabgsaresfqhgx2miuvmbx4xesivi5u_ficn9sq0174": 21, "integr": 21, "broad": 21, "feel": 21, "shp": 21, "gadm41_che_shp": 21, "gadm41_che_0": 21, "ch": 21, "shp_to_e": 21, "switzerland": 21, "acquir": 22, "r8": 22, "pr_usvi": 22, "prusvi_boundary_buff2mil": 22, "153": [22, 23], "master": [22, 24], "landat": 22, "lsandt": 22, "processedscen": 22, "processedcomposit": 22, "8337045819611": 22, "329538797654042": 22, "235653085671174": 22, "70461522649235": 22, "a0axoocgu8eunhnvn0a7j3kojb9x0xzzg_l0wq_9vf3go85ug1xxah7x1f4h1zokwlhzfff6osd7bjkzml3fkojlq": 22, "lked4pa8u3pfpmi4ppbr7kdrzi16nos0kxa8znckfv3pqsr5qdhocbnkgsvjrjxuiinj5u744": 22, "av2dsacgykarcsaresfqhgx2miqevekwjja8cvahytqwvyga0174": 22, "miss": 22, "artifact": 22, "wrapoffset": 22, "iter": 22, "hole": 22, "clean": 22, "due": 22, "extend": 22, "30m": 23, "power": 23, "tutori": 23, "glc_fcs30d_lulc": 23, "slight": 23, "els": [23, 25], "glc": 23, "fcs30d": 23, "five": 23, "1995": 23, "fiveyear": 23, "classif": 23, "scheme": 23, "classvalu": 23, "62": [23, 25], "91": 23, "92": 23, "121": 23, "122": 23, "130": 23, "140": 23, "181": 23, "182": 23, "183": 23, "184": 23, "185": 23, "186": 23, "187": 23, "201": 23, "210": 23, "220": 23, "classnam": 23, "rainfed_cropland": 23, "herbaceous_cover_cropland": 23, "tree_or_shrub_cover_cropland": 23, "irrigated_cropland": 23, "open_evergreen_broadleaved_forest": 23, "closed_evergreen_broadleaved_forest": 23, "open_deciduous_broadleaved_forest": 23, "closed_deciduous_broadleaved_forest": 23, "open_evergreen_needle_leaved_forest": 23, "closed_evergreen_needle_leaved_forest": 23, "open_deciduous_needle_leaved_forest": 23, "closed_deciduous_needle_leaved_forest": 23, "open_mixed_leaf_forest": 23, "closed_mixed_leaf_forest": 23, "evergreen_shrubland": 23, "deciduous_shrubland": 23, "lichens_and_moss": 23, "sparse_veget": 23, "sparse_shrubland": 23, "sparse_herbac": 23, "swamp": 23, "marsh": 23, "flooded_flat": 23, "salin": 23, "mangrov": 23, "salt_marsh": 23, "tidal_flat": 23, "impervious_surfac": 23, "bare_area": 23, "consolidated_bare_area": 23, "unconsolidated_bare_area": 23, "water_bodi": 23, "permanent_ice_and_snow": 23, "filled_valu": 23, "classcolor": 23, "ffff64": 23, "aaf0f0": 23, "4c7300": 23, "a8c800": 23, "00a000": 23, "005000": 23, "003c00": 23, "286400": 23, "285000": 23, "a0b432": 23, "788200": 23, "966400": 23, "964b00": 23, "ffb432": 23, "ffdcd2": 23, "ffebaf": 23, "ffd278": 23, "00a884": 23, "73ffdf": 23, "9ebb3b": 23, "828282": 23, "f57ab6": 23, "66cdab": 23, "444f89": 23, "c31400": 23, "fff5d7": 23, "dcdcdc": 23, "0046c8": 23, "annualmosa": 23, "fiveyearmosa": 23, "2001": 23, "fiveyearslist": 23, "04d": 23, "fiveyearmosaicrenam": 23, "yearslist": 23, "annualmosaicrenam": 23, "getfiveyear": 23, "pars": 23, "fiveyearlymosa": 23, "getannualyear": 23, "yearlymosa": 23, "allmosa": 23, "mosaicscol": 23, "fromimag": 23, "out_band_nam": [23, 25], "setuplulc": [23, 25], "landcovercol": 23, "data_typ": 23, "pixeltyp": 23, "crs_transform": 23, "lulc_class_valu": 23, "473385600000": 23, "lulc_class_nam": 23, "lulc_class_palett": 23, "631152000000": 23, "788918400000": 23, "946684800000": 23, "978307200000": 23, "1009843200000": 23, "1041379200000": 23, "2003": 23, "1072915200000": 23, "2004": 23, "1104537600000": 23, "2005": 23, "1136073600000": 23, "2006": 23, "1167609600000": 23, "2007": 23, "1199145600000": 23, "2008": 23, "1230768000000": 23, "1262304000000": 23, "1293840000000": 23, "1325376000000": 23, "2012": 23, "1356998400000": 23, "2013": 23, "1388534400000": 23, "2014": 23, "1420070400000": 23, "2015": [23, 25], "1451606400000": 23, "1483228800000": 23, "1514764800000": 23, "1546300800000": 23, "2019": 23, "1577836800000": 23, "1609459200000": 23, "1640995200000": 23, "a0acm612xntui9pbkoxpxo6eztagcreoeiqv4jgc8rmfdyfnrxnjlv1fmt4kgbjutil1x9b4dzo8yv8piuskt6193mrc31alnj7_mgfexogup": 23, "uxnd6tdo92e96lflmqgorhfifxct_dwepcqg_stiep3tcvwresli2v0tw7j2uciacgykar4saresfqhgx2mipyaa9vv1ecsoydasfludzw0178": 23, "countri": [23, 25], "fao": [23, 25], "gaul_simplified_500m": [23, 25], "level0": [23, 25], "a0acm612wkg8mbxbrdxnw8mtex4rd499fhqevjdbozj1h": 23, "gwuzsy62j5l3fmqkfskptrf5tk4aucxiwjkjkskgpmazdqktff0n0dbgioags4yabqnzi4qgs89ili67zlr7h3bnn": 23, "xxytotbbhusgatad6tti41x6aycqbadsdk1oeacgykaxisaresfqhgx2miidqlq3v3ymgyr_x_w4uiug0178": 23, "a0acm612zmf5wyjo9umvskgfuwthtwen3c0z3opozmcp6q2dyif": 23, "xm9e919ou5_4xr325sbggabfy17yplcklifw_slyinmx9qzbcnsnm7qti1pufzakctfhjgfxrkc0uycdacq0qp3sdgpit9brjtru6ilzigty68lxsyxy4jth4acgykadosaresfqhgx2mi3ccux5tpyca17q1jkczzha0178": 23, "lcms_visual": 24, "j": [24, 25], "author": 24, "contact": 24, "sm": 24, "question": 24, "request": 24, "boiler": 24, "plate": 24, "piec": 24, "src": 24, "width": 24, "500px": 24, "c5ee93": 24, "durationpalett": 24, "bd1600": 24, "e2f400": 24, "0c2780": 24, "lossyearviz": 24, "gainyearviz": 24, "durationviz": 24, "present": 24, "earlyspan": 24, "latespan": 24, "prusvi": 24, "change_raw_probability_slow_loss": 24, "change_raw_probability_fast_loss": 24, "change_raw_probability_gain": 24, "land_cover_raw_probability_tre": 24, "land_cover_raw_probability_tal": 24, "land_cover_raw_probability_shrub": 24, "land_cover_raw_probability_grass": 24, "land_cover_raw_probability_barren": 24, "land_cover_raw_probability_snow": 24, "land_cover_raw_probability_wat": 24, "land_use_raw_probability_agricultur": 24, "land_use_raw_probability_develop": 24, "land_use_raw_probability_forest": 24, "land_use_raw_probability_non": 24, "land_use_raw_probability_oth": 24, "land_use_raw_probability_rangeland": 24, "qa_bit": 24, "anywher": 24, "raw_chang": 24, "change_raw_": 24, "raw_land_cov": 24, "land_cover_raw_": 24, "raw_land_us": 24, "land_use_raw_": 24, "shorten": 24, "raw_change_bn": 24, "raw_land_cover_bn": 24, "raw_land_use_bn": 24, "raw_change_bns_short": 24, "_probability_": 24, "raw_land_cover_bns_short": 24, "raw_land_use_bns_short": 24, "fast_loss": 24, "slow_loss": 24, "a0acm612i": 24, "wmlkxgo_ofkzr_lacz34yfleugdxgourv_dslexswxk": 24, "echfophmj9oxlcyqw3n2ytzc_tzy8sxmdqxpklggko8x1efwm8fem8gq0y9bcyfjd1zbm1juojbttzv44mj7odhgeja0m95klmvtcerfkf0okt1pgnbcvvsacgykazgsaresfqhgx2mik1zfdpf9tgvoz": 24, "wv79huw0178": 24, "lu": 24, "earlylu": 24, "latelu": 24, "earlylc": 24, "latelc": 24, "1989": 24, "a0acm612zdgrjgemdi_yyvnivavy2azv8cvye6etwghwasqq1cziwhreik7o0tclpayf9okm6xuruplduyxkodc15edfza8ryzuek61fhreaxwzrdmoul5_hu6ao0oovhpqxlwjqmbs9rcu8_ilab27qv9vvosyhfo8fyhpjddcxgacgykab8saresfqhgx2mionrzqxwqq": 24, "3vjfp8htnwoa0178": 24, "slowlossyear": 24, "fastlossyear": 24, "gainyear": 24, "mostrecentslowlossyear": 24, "mostrecentgainyear": 24, "slowlossdur": 24, "fastlossdur": 24, "gaindur": 24, "a0acm612xoftpqheiuhbi9bcwdlmiz5o9": 24, "c9zwgsbhcaeoifql5oupmgderejmy6bcq9byq4mgydibrb": 24, "eayimkdoz4whcailrq4xomqd21af80vhmzxv4mbkolmohs1shh5yfgxr": 24, "c36i97o5a6gejqxd8ft2ncxob": 24, "x7w9j7y3aacgykaxqsaresfqhgx2midz2bzdhehesq91hgy_2omq0178": 24, "justchang": 24, "gt": 24, "a0afb_bybqwmdtqbkfllzqoa1bn5jprxi0esx1cuuwxozvbx": 24, "m_e327rkl0jdeu8dagbhn1dzjm0awgbotjw5l2x4ovycgzxd9fzorxakpgzol9s2tj0hgewff1": 24, "mytxlsuigczog3xvys4h5sttvugxvollpfctnpa4z6kjsehu": 24, "gacgykauasarasfqhgx2mi7d0qnuquwafbhjnw_oe2qw0179": 24, "catelogu": 25, "maria": 25, "olga": 25, "borja": 25, "collaps": 25, "mapbiomaslookup": 25, "mbl": 25, "remap_level": 25, "public": 25, "bolivia": 25, "collection2": 25, "mapbiomas_bolivia_collection2_integration_v1": 25, "peru": 25, "mapbiomas_peru_collection2_integration_v1": 25, "colombia": 25, "collection1": 25, "mapbiomas_colombia_collection1_integration_v1": 25, "ecuador": 25, "mapbiomas_ecuador_collection1_integration_v1": 25, "venezuela": 25, "mapbiomas_venezuela_collection1_integration_v1": 25, "paraguai": 25, "mapbiomas_paraguay_collection1_integration_v1": 25, "brazil": 25, "collection9": 25, "mapbiomas_collection90_integration_v1": 25, "raisg": 25, "collection5": 25, "mapbiomas_raisg_panamazonia_collection5_integration_v1": 25, "mapbiomas_pampa": 25, "collection3": 25, "mapbiomas_uruguay_collection1_integration_v1": 25, "chile": 25, "mapbiomas_chile_collection1_integration_v1": 25, "argentina": 25, "mapbiomas_argentina_collection1_integration_v1": 25, "1998": 25, "var": 25, "remap_info": 25, "getlevelnremap": 25, "firstnonnul": 25, "remap": 25, "remap_from": 25, "remap_to": 25, "lulcc": 25, "a0acm612y8zlxjh5tser6siupocmyklrxzdf5qzq6kskwfbowha9ww08rwl0q9wsbawjhaujzpypbwxbllmzn3sqjx3nacrhhxy__zlsaahnngwijecxoi9aurnb1ecangwo_h1o6r5jnms0dnrcvvpvhtpo9ilcnspnwoxlwfnk8acgykax8saresfqhgx2midtno9bis8gzows0gh0zjmw0178": 25, "assetterritori": 25, "joaovsiqueira1": 25, "ti_uc": 25, "territori": 25, "a0acm612x6ne6bhe3xy7j9ocdxwwb_pepsf231rsnhcdziyebxest4s3sn": 25, "b8grtpqx_fmlolxcum6ig2sj": 25, "nyv0wjkfu": 25, "egmlcx25ts8nc42z2kegm_lkmli": 25, "88hmctsdcyvb1c1qx5rcy_1_fu8zqpdtg": 25, "2uryavieer3bvqesacgykavqsaresfqhgx2mistntxfwzi9bxifrwljqnnq0178": 25, "a0acm612zpic1nwa7q2n38sohqdkw5xdz5jifj1rtnudm3a2yew7zvxxmslpw8loqt6dzhsy1sjzxys30i5_tlm2pzc860gyg8nfwsq": 25, "wtmvnyoexqm6ej0n3gdikjbk2szxrlhowfodqskucnduadlfctngcumii6jnckavg8u64acgykaqusaresfqhgx2mi23exncdvc9lky4wtmhwm": 25, "q0178": 25, "vari": 28, "focus": 28}, "objects": {"geeViz": [[12, 0, 0, "-", "assetManagerLib"], [12, 0, 0, "-", "changeDetectionLib"], [12, 0, 0, "-", "cloudStorageManagerLib"], [28, 0, 0, "-", "examples"], [12, 0, 0, "-", "foliumView"], [12, 0, 0, "-", "gee2Pandas"], [12, 0, 0, "-", "geeView"], [12, 0, 0, "-", "getImagesLib"], [12, 0, 0, "-", "phEEnoViz"], [12, 0, 0, "-", "taskManagerLib"]], "geeViz.changeDetectionLib": [[12, 1, 1, "", "simpleLANDTRENDR"]], "geeViz.cloudStorageManagerLib": [[12, 1, 1, "", "rename_blobs"]], "geeViz.geeView": [[12, 1, 1, "", "RGB_to_hex"], [12, 1, 1, "", "baseDomain"], [12, 1, 1, "", "cleanAccessToken"], [12, 1, 1, "", "color_dict_maker"], [12, 1, 1, "", "getProject"], [12, 1, 1, "", "get_poly_gradient_ct"], [12, 1, 1, "", "hex_to_rgb"], [12, 1, 1, "", "isPortActive"], [12, 1, 1, "", "is_notebook"], [12, 1, 1, "", "linear_gradient"], [12, 2, 1, "", "mapper"], [12, 1, 1, "", "polylinear_gradient"], [12, 1, 1, "", "refreshToken"], [12, 1, 1, "", "robustInitializer"], [12, 1, 1, "", "run_local_server"], [12, 1, 1, "", "serviceAccountToken"], [12, 1, 1, "", "setProject"], [12, 1, 1, "", "verified_initialize"]], "geeViz.geeView.mapper": [[12, 3, 1, "", "addAreaChartLayer"], [12, 3, 1, "", "addLayer"], [12, 3, 1, "", "addSelectLayer"], [12, 3, 1, "", "addTimeLapse"], [12, 3, 1, "", "centerObject"], [12, 3, 1, "", "clearMap"], [12, 3, 1, "", "clearMapCommands"], [12, 3, 1, "", "clearMapLayers"], [12, 3, 1, "", "populateAreaChartLayerSelect"], [12, 4, 1, "", "port"], [12, 4, 1, "", "project"], [12, 4, 1, "", "proxy_url"], [12, 4, 1, "", "refreshTokenPath"], [12, 4, 1, "", "serviceKeyPath"], [12, 3, 1, "", "setCanReorderLayers"], [12, 3, 1, "", "setCenter"], [12, 3, 1, "", "setMapTitle"], [12, 3, 1, "", "setQueryBoxColor"], [12, 3, 1, "", "setQueryCRS"], [12, 3, 1, "", "setQueryDateFormat"], [12, 3, 1, "", "setQueryPrecision"], [12, 3, 1, "", "setQueryScale"], [12, 3, 1, "", "setQueryToInfoWindow"], [12, 3, 1, "", "setQueryToSidePane"], [12, 3, 1, "", "setQueryTransform"], [12, 3, 1, "", "setTitle"], [12, 3, 1, "", "setYLabelBreakLength"], [12, 3, 1, "", "setYLabelFontSize"], [12, 3, 1, "", "setYLabelMaxLength"], [12, 3, 1, "", "setYLabelMaxLines"], [12, 3, 1, "", "setZoom"], [12, 3, 1, "", "turnOffAllLayers"], [12, 4, 1, "", "turnOffLayersWhenTimeLapseIsOn"], [12, 3, 1, "", "turnOnAllLayers"], [12, 3, 1, "", "turnOnAutoAreaCharting"], [12, 3, 1, "", "turnOnInspector"], [12, 3, 1, "", "turnOnSelectionAreaCharting"], [12, 3, 1, "", "turnOnUserDefinedAreaCharting"], [12, 3, 1, "", "view"]], "geeViz.getImagesLib": [[12, 1, 1, "", "HoCalcAlgorithm2"], [12, 1, 1, "", "RefinedLee"], [12, 1, 1, "", "addDateBand"], [12, 1, 1, "", "addFullYearJulianDayBand"], [12, 1, 1, "", "addIndices"], [12, 1, 1, "", "addJulianDayBand"], [12, 1, 1, "", "addSAVIandEVI"], [12, 1, 1, "", "addSensorBand"], [12, 1, 1, "", "addSoilIndices"], [12, 1, 1, "", "addTCAngles"], [12, 1, 1, "", "addYearBand"], [12, 1, 1, "", "addYearFractionBand"], [12, 1, 1, "", "addYearJulianDayBand"], [12, 1, 1, "", "addYearYearFractionBand"], [12, 1, 1, "", "addZenithAzimuth"], [12, 1, 1, "", "applyBitMask"], [12, 1, 1, "", "applyCloudScoreAlgorithm"], [12, 1, 1, "", "cFmask"], [12, 1, 1, "", "cFmaskCloud"], [12, 1, 1, "", "cFmaskCloudShadow"], [12, 1, 1, "", "collectionToImage"], [12, 1, 1, "", "compositeDates"], [12, 1, 1, "", "compositeTimeSeries"], [12, 1, 1, "", "dailyMosaics"], [12, 1, 1, "", "defringeLandsat"], [12, 1, 1, "", "exportToAssetWrapper"], [12, 1, 1, "", "exportToCloudStorageWrapper"], [12, 1, 1, "", "exportToDriveWrapper"], [12, 1, 1, "", "fillEmptyCollections"], [12, 1, 1, "", "formatArgs"], [12, 1, 1, "", "getClimateWrapper"], [12, 1, 1, "", "getImageCollection"], [12, 1, 1, "", "getLandsat"], [12, 1, 1, "", "getModisData"], [12, 1, 1, "", "getProcessedLandsatScenes"], [12, 1, 1, "", "getProcessedModis"], [12, 1, 1, "", "getQABits"], [12, 1, 1, "", "getS1"], [12, 1, 1, "", "getS2"], [12, 1, 1, "", "getSentinel2"], [12, 1, 1, "", "getTasseledCap"], [12, 1, 1, "", "harmonizationChastain"], [12, 1, 1, "", "harmonizationRoy"], [12, 1, 1, "", "landsatCloudScore"], [12, 1, 1, "", "maskEmptyPixels"], [12, 1, 1, "", "maskS2clouds"], [12, 1, 1, "", "medoidMosaicMSD"], [12, 1, 1, "", "offsetImageDate"], [12, 1, 1, "", "rescale"], [12, 1, 1, "", "setNoData"], [12, 1, 1, "", "sieve"], [12, 1, 1, "", "simpleAddIndices"], [12, 1, 1, "", "simpleAddTCAngles"], [12, 1, 1, "", "simpleGetTasseledCap"], [12, 1, 1, "", "simpleTDOM2"], [12, 1, 1, "", "simpleWaterMask"], [12, 1, 1, "", "superSimpleGetS2"], [12, 1, 1, "", "toDB"], [12, 1, 1, "", "toNatural"], [12, 1, 1, "", "uniqueValues"], [12, 1, 1, "", "wrapDates"]]}, "objtypes": {"0": "py:module", "1": "py:function", "2": "py:class", "3": "py:method", "4": "py:attribute"}, "objnames": {"0": ["py", "module", "Python module"], "1": ["py", "function", "Python function"], "2": ["py", "class", "Python class"], "3": ["py", "method", "Python method"], "4": ["py", "attribute", "Python attribute"]}, "titleterms": {"exampl": [0, 18, 20, 27, 28], "python": [0, 27], "script": [0, 27], "notebook": [0, 13, 19, 20, 24, 27], "get": [0, 11], "start": [0, 11], "us": [0, 19, 21, 22], "geeviz": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 19, 20, 21, 24, 28], "visual": [0, 13, 14, 16, 17, 19, 21, 23, 24, 25], "multi": [0, 24], "tempor": [0, 24], "imagecollect": [0, 19, 24], "mapbioma": [0, 25], "dataset": [0, 25], "dynam": [0, 17], "world": [0, 17], "global": [0, 23], "land": [0, 23], "cover": [0, 23], "lcm": [0, 15, 24], "lcmap": [0, 15], "output": [0, 14, 15, 16, 22], "leverag": 0, "getimageslib": [0, 8, 12], "consist": 0, "process": [0, 22], "landsat": [0, 22], "data": [0, 16, 22, 24], "interact": 0, "summar": 0, "learn": 0, "how": [0, 18, 20], "compar": [0, 16], "geemap": [0, 21], "run": [0, 14], "landtrendr": [0, 14], "ccdc": [0, 13], "other": [0, 16, 27], "document": 1, "search": 1, "overview": [1, 26], "assetmanagerlib": [2, 12], "changedetectionlib": [3, 12], "cloudstoragemanagerlib": [4, 12], "foliumview": [5, 12], "gee2panda": [6, 12], "geeview": [7, 12, 19, 24], "pheenoviz": [9, 12], "taskmanagerlib": [10, 12], "instal": 11, "detail": 12, "viewer": [15, 17, 20, 23, 24, 25], "bring": 15, "gee": [15, 18, 19], "collect": 15, "area": 16, "summari": 16, "basic": [16, 17, 23, 25], "chart": [16, 17, 23, 25], "line": 16, "sankei": [16, 17, 23, 25], "wai": 16, "ad": [16, 19], "layer": [16, 19], "non": 16, "themat": 16, "imag": [16, 19], "without": 16, "color": 16, "name": 16, "properti": 16, "time": [16, 17, 24], "laps": [16, 24], "set": [16, 22], "map": [16, 19, 21], "version": 16, "zone": 16, "select": 16, "method": [16, 21, 22], "make": [17, 23, 25], "over": 17, "creat": [17, 22, 23, 24, 25], "work": 18, "between": [18, 21], "panda": 18, "starter": [19, 20], "import": 19, "nlcd": 19, "view": 19, "queri": 19, "multipl": 19, "introduc": 19, "lookup": 19, "tabl": 19, "custom": 19, "style": 19, "vector": 19, "raster": 19, "local": 19, "geojson": 19, "": [19, 20, 21], "addtimelaps": 19, "function": 19, "an": 19, "folium": 20, "util": 20, "base": 20, "A": 21, "comparison": 21, "capabl": 21, "first": [21, 24], "we": [21, 24], "ll": [21, 24], "take": [21, 24], "look": [21, 24], "two": 21, "differ": 21, "interfac": 21, "some": 21, "ar": 21, "similar": 21, "avail": [21, 22], "togeth": 21, "high": 22, "qualiti": 22, "composit": 22, "up": 22, "numer": 22, "paramet": 22, "improv": 22, "includ": 22, "7": 22, "cloud": 22, "mask": 22, "cloudscor": 22, "shadow": 22, "tdom": 22, "calcul": [23, 25], "export": [23, 25], "landcov": 23, "statist": [23, 25], "intro": 24, "foundat": 24, "modul": 24, "explor": 24, "your": 24, "own": 24, "enabl": 24, "quick": 24}, "envversion": {"sphinx.domains.c": 3, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 9, "sphinx.domains.index": 1, "sphinx.domains.javascript": 3, "sphinx.domains.math": 2, "sphinx.domains.python": 4, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx.ext.viewcode": 1, "sphinx": 60}, "alltitles": {"Examples": [[0, "examples"], [27, "examples"]], "Python script examples": [[0, "python-script-examples"], [27, "python-script-examples"]], "Python notebook examples": [[0, "python-notebook-examples"], [27, "python-notebook-examples"]], "Getting Started using geeViz": [[0, "getting-started-using-geeviz"]], "Visualize multi-temporal imageCollections": [[0, "visualize-multi-temporal-imagecollections"]], "Visualize MapBiomas Datasets": [[0, "visualize-mapbiomas-datasets"]], "Visualize Dynamic World": [[0, "visualize-dynamic-world"]], "Visualize the Global Land Cover Dataset": [[0, "visualize-the-global-land-cover-dataset"]], "Visualize LCMS and LCMAP Outputs": [[0, "visualize-lcms-and-lcmap-outputs"], [0, "id1"]], "Leverage geeViz.getImagesLib to consistently process Landsat data": [[0, "leverage-geeviz-getimageslib-to-consistently-process-landsat-data"]], "Interactively summarize data": [[0, "interactively-summarize-data"]], "Learn how geeViz compares to geeMap": [[0, "learn-how-geeviz-compares-to-geemap"]], "Run LandTrendr": [[0, "run-landtrendr"]], "Visualize CCDC Outputs": [[0, "visualize-ccdc-outputs"]], "Other examples": [[0, "other-examples"], [27, "other-examples"]], "geeViz Documentation": [[1, "geeviz-documentation"]], "Search geeViz Documentation": [[1, "search-geeviz-documentation"]], "geeViz Overview": [[1, "geeviz-overview"]], "geeViz.assetManagerLib": [[2, "module-geeViz.assetManagerLib"], [12, "module-geeViz.assetManagerLib"]], "geeViz.changeDetectionLib": [[3, "module-geeViz.changeDetectionLib"], [12, "module-geeViz.changeDetectionLib"]], "geeViz.cloudStorageManagerLib": [[4, "module-geeViz.cloudStorageManagerLib"], [12, "module-geeViz.cloudStorageManagerLib"]], "geeViz.foliumView": [[5, "module-geeViz.foliumView"], [12, "module-geeViz.foliumView"]], "geeViz.gee2Pandas": [[6, "module-geeViz.gee2Pandas"], [12, "module-geeViz.gee2Pandas"]], "geeViz.geeView": [[7, "module-geeViz.geeView"], [12, "module-geeViz.geeView"]], "geeViz.getImagesLib": [[8, "module-geeViz.getImagesLib"], [12, "module-geeViz.getImagesLib"]], "geeViz.phEEnoViz": [[9, "module-geeViz.phEEnoViz"], [12, "module-geeViz.phEEnoViz"]], "geeViz.taskManagerLib": [[10, "module-geeViz.taskManagerLib"], [12, "module-geeViz.taskManagerLib"]], "Installation": [[11, "installation"]], "Installing geeViz": [[11, "installing-geeviz"]], "Getting Started": [[11, "getting-started"]], "Details": [[12, "details"]], "CCDC Visualization Notebook": [[13, "ccdc-visualization-notebook"]], "Run LandTrendr and Visualize Outputs": [[14, "run-landtrendr-and-visualize-outputs"]], "LCMAP and LCMS Outputs Viewer": [[15, "lcmap-and-lcms-outputs-viewer"]], "Bring in LCMAP outputs": [[15, "bring-in-lcmap-outputs"]], "Bring in LCMS GEE collections": [[15, "bring-in-lcms-gee-collections"]], "Visualizing Area Summaries": [[16, "visualizing-area-summaries"]], "Basic Area Charting": [[16, "basic-area-charting"]], "Line and Sankey Charts": [[16, "line-and-sankey-charts"]], "Ways of adding area charting layers": [[16, "ways-of-adding-area-charting-layers"]], "Charting Non-Thematic Data": [[16, "charting-non-thematic-data"]], "Charting Images": [[16, "charting-images"]], "Charting Images Without Color and Name Properties": [[16, "charting-images-without-color-and-name-properties"]], "Charting Time Lapses": [[16, "charting-time-lapses"]], "Charting Thematic Data without set properties": [[16, "charting-thematic-data-without-set-properties"]], "Setting properties for charting": [[16, "setting-properties-for-charting"]], "Comparing map output versions": [[16, "comparing-map-output-versions"]], "Other charting summary zone selection methods": [[16, "other-charting-summary-zone-selection-methods"]], "Visualizing Dynamic World": [[17, "visualizing-dynamic-world"]], "Make a basic viewer": [[17, "make-a-basic-viewer"], [23, "make-a-basic-viewer"], [25, "make-a-basic-viewer"]], "Visualizing Dynamic World over time": [[17, "visualizing-dynamic-world-over-time"]], "Create Sankey Charts": [[17, "create-sankey-charts"], [23, "create-sankey-charts"], [25, "create-sankey-charts"]], "Examples of how to work between GEE and Pandas": [[18, "examples-of-how-to-work-between-gee-and-pandas"]], "Starter geeViz geeView Notebook": [[19, "starter-geeviz-geeview-notebook"]], "Importing geeViz.geeView": [[19, "importing-geeviz-geeview"]], "Adding a GEE image (NLCD) to the Map and viewing and querying it": [[19, "adding-a-gee-image-nlcd-to-the-map-and-viewing-and-querying-it"]], "Visualizing multiple layers on the map": [[19, "visualizing-multiple-layers-on-the-map"]], "Introducing map query lookup tables and custom styles": [[19, "introducing-map-query-lookup-tables-and-custom-styles"]], "Visualizing vectors and rasters on the map": [[19, "visualizing-vectors-and-rasters-on-the-map"]], "Visualizing GEE layers as a local geojson vector": [[19, "visualizing-gee-layers-as-a-local-geojson-vector"]], "Using geeView\u2019s Map.addTimeLapse function to visualize an imageCollection": [[19, "using-geeview-s-map-addtimelapse-function-to-visualize-an-imagecollection"]], "Starter geeViz Folium Viewer Notebook": [[20, "starter-geeviz-folium-viewer-notebook"]], "Example of how to utilize the geeViz\u2019s Folium-based viewer": [[20, "example-of-how-to-utilize-the-geeviz-s-folium-based-viewer"]], "A comparison between geeViz and geeMap\u2019s map visualization capabilities": [[21, "a-comparison-between-geeviz-and-geemap-s-map-visualization-capabilities"]], "First, we\u2019ll take a look at the two different map interfaces": [[21, "first-we-ll-take-a-look-at-the-two-different-map-interfaces"]], "Some methods are similar between the methods available": [[21, "some-methods-are-similar-between-the-methods-available"]], "Using geeMap and geeViz together": [[21, "using-geemap-and-geeviz-together"]], "Create High Quality Landsat Composites": [[22, "create-high-quality-landsat-composites"]], "Setting up numerous parameters available for processing Landsat data": [[22, "setting-up-numerous-parameters-available-for-processing-landsat-data"]], "Improving composite outputs by including Landsat 7": [[22, "improving-composite-outputs-by-including-landsat-7"]], "Improving cloud masking using the cloudScore method": [[22, "improving-cloud-masking-using-the-cloudscore-method"]], "Improving cloud shadow masking using TDOM": [[22, "improving-cloud-shadow-masking-using-tdom"]], "Visualizing Global Land Cover": [[23, "visualizing-global-land-cover"]], "Calculating and Exporting Landcover Statistics\u00b6": [[23, "calculating-and-exporting-landcover-statistics"]], "LCMS Viewer Intro Notebook": [[24, "lcms-viewer-intro-notebook"]], "First, we\u2019ll take a look at the foundation of the geeViz.geeView module - the LCMS Data Explorer": [[24, "first-we-ll-take-a-look-at-the-foundation-of-the-geeviz-geeview-module-the-lcms-data-explorer"]], "Create your own LCMS Viewer": [[24, "create-your-own-lcms-viewer"]], "Time lapses enable quick visualization of multi-temporal imageCollections": [[24, "time-lapses-enable-quick-visualization-of-multi-temporal-imagecollections"]], "Visualizing MapBiomas Datasets": [[25, "visualizing-mapbiomas-datasets"]], "Calculating and Exporting Statistics\u00b6": [[25, "calculating-and-exporting-statistics"]], "Overview": [[26, "overview"]], "geeViz.examples": [[28, "module-geeViz.examples"]]}, "indexentries": {"geeviz.assetmanagerlib": [[2, "module-geeViz.assetManagerLib"], [12, "module-geeViz.assetManagerLib"]], "module": [[2, "module-geeViz.assetManagerLib"], [3, "module-geeViz.changeDetectionLib"], [4, "module-geeViz.cloudStorageManagerLib"], [5, "module-geeViz.foliumView"], [6, "module-geeViz.gee2Pandas"], [7, "module-geeViz.geeView"], [8, "module-geeViz.getImagesLib"], [9, "module-geeViz.phEEnoViz"], [10, "module-geeViz.taskManagerLib"], [12, "module-geeViz.assetManagerLib"], [12, "module-geeViz.changeDetectionLib"], [12, "module-geeViz.cloudStorageManagerLib"], [12, "module-geeViz.foliumView"], [12, "module-geeViz.gee2Pandas"], [12, "module-geeViz.geeView"], [12, "module-geeViz.getImagesLib"], [12, "module-geeViz.phEEnoViz"], [12, "module-geeViz.taskManagerLib"], [28, "module-geeViz.examples"]], "geeviz.changedetectionlib": [[3, "module-geeViz.changeDetectionLib"], [12, "module-geeViz.changeDetectionLib"]], "geeviz.cloudstoragemanagerlib": [[4, "module-geeViz.cloudStorageManagerLib"], [12, "module-geeViz.cloudStorageManagerLib"]], "geeviz.foliumview": [[5, "module-geeViz.foliumView"], [12, "module-geeViz.foliumView"]], "geeviz.gee2pandas": [[6, "module-geeViz.gee2Pandas"], [12, "module-geeViz.gee2Pandas"]], "geeviz.geeview": [[7, "module-geeViz.geeView"], [12, "module-geeViz.geeView"]], "geeviz.getimageslib": [[8, "module-geeViz.getImagesLib"], [12, "module-geeViz.getImagesLib"]], "geeviz.pheenoviz": [[9, "module-geeViz.phEEnoViz"], [12, "module-geeViz.phEEnoViz"]], "geeviz.taskmanagerlib": [[10, "module-geeViz.taskManagerLib"], [12, "module-geeViz.taskManagerLib"]], "hocalcalgorithm2() (in module geeviz.getimageslib)": [[12, "geeViz.getImagesLib.HoCalcAlgorithm2"]], "rgb_to_hex() (in module geeviz.geeview)": [[12, "geeViz.geeView.RGB_to_hex"]], "refinedlee() (in module geeviz.getimageslib)": [[12, "geeViz.getImagesLib.RefinedLee"]], "addareachartlayer() (geeviz.geeview.mapper method)": [[12, "geeViz.geeView.mapper.addAreaChartLayer"]], "adddateband() (in module geeviz.getimageslib)": [[12, "geeViz.getImagesLib.addDateBand"]], "addfullyearjuliandayband() (in module geeviz.getimageslib)": [[12, "geeViz.getImagesLib.addFullYearJulianDayBand"]], "addindices() (in module geeviz.getimageslib)": [[12, "geeViz.getImagesLib.addIndices"]], "addjuliandayband() (in module geeviz.getimageslib)": [[12, "geeViz.getImagesLib.addJulianDayBand"]], "addlayer() (geeviz.geeview.mapper method)": [[12, "geeViz.geeView.mapper.addLayer"]], "addsaviandevi() (in module geeviz.getimageslib)": [[12, "geeViz.getImagesLib.addSAVIandEVI"]], "addselectlayer() (geeviz.geeview.mapper method)": [[12, "geeViz.geeView.mapper.addSelectLayer"]], "addsensorband() (in module geeviz.getimageslib)": [[12, "geeViz.getImagesLib.addSensorBand"]], "addsoilindices() (in module geeviz.getimageslib)": [[12, "geeViz.getImagesLib.addSoilIndices"]], "addtcangles() (in module geeviz.getimageslib)": [[12, "geeViz.getImagesLib.addTCAngles"]], "addtimelapse() (geeviz.geeview.mapper method)": [[12, "geeViz.geeView.mapper.addTimeLapse"]], "addyearband() (in module geeviz.getimageslib)": [[12, "geeViz.getImagesLib.addYearBand"]], "addyearfractionband() (in module geeviz.getimageslib)": [[12, "geeViz.getImagesLib.addYearFractionBand"]], "addyearjuliandayband() (in module geeviz.getimageslib)": [[12, "geeViz.getImagesLib.addYearJulianDayBand"]], "addyearyearfractionband() (in module geeviz.getimageslib)": [[12, "geeViz.getImagesLib.addYearYearFractionBand"]], "addzenithazimuth() (in module geeviz.getimageslib)": [[12, "geeViz.getImagesLib.addZenithAzimuth"]], "applybitmask() (in module geeviz.getimageslib)": [[12, "geeViz.getImagesLib.applyBitMask"]], "applycloudscorealgorithm() (in module geeviz.getimageslib)": [[12, "geeViz.getImagesLib.applyCloudScoreAlgorithm"]], "basedomain() (in module geeviz.geeview)": [[12, "geeViz.geeView.baseDomain"]], "cfmask() (in module geeviz.getimageslib)": [[12, "geeViz.getImagesLib.cFmask"]], "cfmaskcloud() (in module geeviz.getimageslib)": [[12, "geeViz.getImagesLib.cFmaskCloud"]], "cfmaskcloudshadow() (in module geeviz.getimageslib)": [[12, "geeViz.getImagesLib.cFmaskCloudShadow"]], "centerobject() (geeviz.geeview.mapper method)": [[12, "geeViz.geeView.mapper.centerObject"]], "cleanaccesstoken() (in module geeviz.geeview)": [[12, "geeViz.geeView.cleanAccessToken"]], "clearmap() (geeviz.geeview.mapper method)": [[12, "geeViz.geeView.mapper.clearMap"]], "clearmapcommands() (geeviz.geeview.mapper method)": [[12, "geeViz.geeView.mapper.clearMapCommands"]], "clearmaplayers() (geeviz.geeview.mapper method)": [[12, "geeViz.geeView.mapper.clearMapLayers"]], "collectiontoimage() (in module geeviz.getimageslib)": [[12, "geeViz.getImagesLib.collectionToImage"]], "color_dict_maker() (in module geeviz.geeview)": [[12, "geeViz.geeView.color_dict_maker"]], "compositedates() (in module geeviz.getimageslib)": [[12, "geeViz.getImagesLib.compositeDates"]], "compositetimeseries() (in module geeviz.getimageslib)": [[12, "geeViz.getImagesLib.compositeTimeSeries"]], "dailymosaics() (in module geeviz.getimageslib)": [[12, "geeViz.getImagesLib.dailyMosaics"]], "defringelandsat() (in module geeviz.getimageslib)": [[12, "geeViz.getImagesLib.defringeLandsat"]], "exporttoassetwrapper() (in module geeviz.getimageslib)": [[12, "geeViz.getImagesLib.exportToAssetWrapper"]], "exporttocloudstoragewrapper() (in module geeviz.getimageslib)": [[12, "geeViz.getImagesLib.exportToCloudStorageWrapper"]], "exporttodrivewrapper() (in module geeviz.getimageslib)": [[12, "geeViz.getImagesLib.exportToDriveWrapper"]], "fillemptycollections() (in module geeviz.getimageslib)": [[12, "geeViz.getImagesLib.fillEmptyCollections"]], "formatargs() (in module geeviz.getimageslib)": [[12, "geeViz.getImagesLib.formatArgs"]], "getclimatewrapper() (in module geeviz.getimageslib)": [[12, "geeViz.getImagesLib.getClimateWrapper"]], "getimagecollection() (in module geeviz.getimageslib)": [[12, "geeViz.getImagesLib.getImageCollection"]], "getlandsat() (in module geeviz.getimageslib)": [[12, "geeViz.getImagesLib.getLandsat"]], "getmodisdata() (in module geeviz.getimageslib)": [[12, "geeViz.getImagesLib.getModisData"]], "getprocessedlandsatscenes() (in module geeviz.getimageslib)": [[12, "geeViz.getImagesLib.getProcessedLandsatScenes"]], "getprocessedmodis() (in module geeviz.getimageslib)": [[12, "geeViz.getImagesLib.getProcessedModis"]], "getproject() (in module geeviz.geeview)": [[12, "geeViz.geeView.getProject"]], "getqabits() (in module geeviz.getimageslib)": [[12, "geeViz.getImagesLib.getQABits"]], "gets1() (in module geeviz.getimageslib)": [[12, "geeViz.getImagesLib.getS1"]], "gets2() (in module geeviz.getimageslib)": [[12, "geeViz.getImagesLib.getS2"]], "getsentinel2() (in module geeviz.getimageslib)": [[12, "geeViz.getImagesLib.getSentinel2"]], "gettasseledcap() (in module geeviz.getimageslib)": [[12, "geeViz.getImagesLib.getTasseledCap"]], "get_poly_gradient_ct() (in module geeviz.geeview)": [[12, "geeViz.geeView.get_poly_gradient_ct"]], "harmonizationchastain() (in module geeviz.getimageslib)": [[12, "geeViz.getImagesLib.harmonizationChastain"]], "harmonizationroy() (in module geeviz.getimageslib)": [[12, "geeViz.getImagesLib.harmonizationRoy"]], "hex_to_rgb() (in module geeviz.geeview)": [[12, "geeViz.geeView.hex_to_rgb"]], "isportactive() (in module geeviz.geeview)": [[12, "geeViz.geeView.isPortActive"]], "is_notebook() (in module geeviz.geeview)": [[12, "geeViz.geeView.is_notebook"]], "landsatcloudscore() (in module geeviz.getimageslib)": [[12, "geeViz.getImagesLib.landsatCloudScore"]], "linear_gradient() (in module geeviz.geeview)": [[12, "geeViz.geeView.linear_gradient"]], "mapper (class in geeviz.geeview)": [[12, "geeViz.geeView.mapper"]], "maskemptypixels() (in module geeviz.getimageslib)": [[12, "geeViz.getImagesLib.maskEmptyPixels"]], "masks2clouds() (in module geeviz.getimageslib)": [[12, "geeViz.getImagesLib.maskS2clouds"]], "medoidmosaicmsd() (in module geeviz.getimageslib)": [[12, "geeViz.getImagesLib.medoidMosaicMSD"]], "offsetimagedate() (in module geeviz.getimageslib)": [[12, "geeViz.getImagesLib.offsetImageDate"]], "polylinear_gradient() (in module geeviz.geeview)": [[12, "geeViz.geeView.polylinear_gradient"]], "populateareachartlayerselect() (geeviz.geeview.mapper method)": [[12, "geeViz.geeView.mapper.populateAreaChartLayerSelect"]], "port (geeviz.geeview.mapper attribute)": [[12, "geeViz.geeView.mapper.port"]], "project (geeviz.geeview.mapper attribute)": [[12, "geeViz.geeView.mapper.project"]], "proxy_url (geeviz.geeview.mapper attribute)": [[12, "geeViz.geeView.mapper.proxy_url"]], "refreshtoken() (in module geeviz.geeview)": [[12, "geeViz.geeView.refreshToken"]], "refreshtokenpath (geeviz.geeview.mapper attribute)": [[12, "geeViz.geeView.mapper.refreshTokenPath"]], "rename_blobs() (in module geeviz.cloudstoragemanagerlib)": [[12, "geeViz.cloudStorageManagerLib.rename_blobs"]], "rescale() (in module geeviz.getimageslib)": [[12, "geeViz.getImagesLib.rescale"]], "robustinitializer() (in module geeviz.geeview)": [[12, "geeViz.geeView.robustInitializer"]], "run_local_server() (in module geeviz.geeview)": [[12, "geeViz.geeView.run_local_server"]], "serviceaccounttoken() (in module geeviz.geeview)": [[12, "geeViz.geeView.serviceAccountToken"]], "servicekeypath (geeviz.geeview.mapper attribute)": [[12, "geeViz.geeView.mapper.serviceKeyPath"]], "setcanreorderlayers() (geeviz.geeview.mapper method)": [[12, "geeViz.geeView.mapper.setCanReorderLayers"]], "setcenter() (geeviz.geeview.mapper method)": [[12, "geeViz.geeView.mapper.setCenter"]], "setmaptitle() (geeviz.geeview.mapper method)": [[12, "geeViz.geeView.mapper.setMapTitle"]], "setnodata() (in module geeviz.getimageslib)": [[12, "geeViz.getImagesLib.setNoData"]], "setproject() (in module geeviz.geeview)": [[12, "geeViz.geeView.setProject"]], "setqueryboxcolor() (geeviz.geeview.mapper method)": [[12, "geeViz.geeView.mapper.setQueryBoxColor"]], "setquerycrs() (geeviz.geeview.mapper method)": [[12, "geeViz.geeView.mapper.setQueryCRS"]], "setquerydateformat() (geeviz.geeview.mapper method)": [[12, "geeViz.geeView.mapper.setQueryDateFormat"]], "setqueryprecision() (geeviz.geeview.mapper method)": [[12, "geeViz.geeView.mapper.setQueryPrecision"]], "setqueryscale() (geeviz.geeview.mapper method)": [[12, "geeViz.geeView.mapper.setQueryScale"]], "setquerytoinfowindow() (geeviz.geeview.mapper method)": [[12, "geeViz.geeView.mapper.setQueryToInfoWindow"]], "setquerytosidepane() (geeviz.geeview.mapper method)": [[12, "geeViz.geeView.mapper.setQueryToSidePane"]], "setquerytransform() (geeviz.geeview.mapper method)": [[12, "geeViz.geeView.mapper.setQueryTransform"]], "settitle() (geeviz.geeview.mapper method)": [[12, "geeViz.geeView.mapper.setTitle"]], "setylabelbreaklength() (geeviz.geeview.mapper method)": [[12, "geeViz.geeView.mapper.setYLabelBreakLength"]], "setylabelfontsize() (geeviz.geeview.mapper method)": [[12, "geeViz.geeView.mapper.setYLabelFontSize"]], "setylabelmaxlength() (geeviz.geeview.mapper method)": [[12, "geeViz.geeView.mapper.setYLabelMaxLength"]], "setylabelmaxlines() (geeviz.geeview.mapper method)": [[12, "geeViz.geeView.mapper.setYLabelMaxLines"]], "setzoom() (geeviz.geeview.mapper method)": [[12, "geeViz.geeView.mapper.setZoom"]], "sieve() (in module geeviz.getimageslib)": [[12, "geeViz.getImagesLib.sieve"]], "simpleaddindices() (in module geeviz.getimageslib)": [[12, "geeViz.getImagesLib.simpleAddIndices"]], "simpleaddtcangles() (in module geeviz.getimageslib)": [[12, "geeViz.getImagesLib.simpleAddTCAngles"]], "simplegettasseledcap() (in module geeviz.getimageslib)": [[12, "geeViz.getImagesLib.simpleGetTasseledCap"]], "simplelandtrendr() (in module geeviz.changedetectionlib)": [[12, "geeViz.changeDetectionLib.simpleLANDTRENDR"]], "simpletdom2() (in module geeviz.getimageslib)": [[12, "geeViz.getImagesLib.simpleTDOM2"]], "simplewatermask() (in module geeviz.getimageslib)": [[12, "geeViz.getImagesLib.simpleWaterMask"]], "supersimplegets2() (in module geeviz.getimageslib)": [[12, "geeViz.getImagesLib.superSimpleGetS2"]], "todb() (in module geeviz.getimageslib)": [[12, "geeViz.getImagesLib.toDB"]], "tonatural() (in module geeviz.getimageslib)": [[12, "geeViz.getImagesLib.toNatural"]], "turnoffalllayers() (geeviz.geeview.mapper method)": [[12, "geeViz.geeView.mapper.turnOffAllLayers"]], "turnofflayerswhentimelapseison (geeviz.geeview.mapper attribute)": [[12, "geeViz.geeView.mapper.turnOffLayersWhenTimeLapseIsOn"]], "turnonalllayers() (geeviz.geeview.mapper method)": [[12, "geeViz.geeView.mapper.turnOnAllLayers"]], "turnonautoareacharting() (geeviz.geeview.mapper method)": [[12, "geeViz.geeView.mapper.turnOnAutoAreaCharting"]], "turnoninspector() (geeviz.geeview.mapper method)": [[12, "geeViz.geeView.mapper.turnOnInspector"]], "turnonselectionareacharting() (geeviz.geeview.mapper method)": [[12, "geeViz.geeView.mapper.turnOnSelectionAreaCharting"]], "turnonuserdefinedareacharting() (geeviz.geeview.mapper method)": [[12, "geeViz.geeView.mapper.turnOnUserDefinedAreaCharting"]], "uniquevalues() (in module geeviz.getimageslib)": [[12, "geeViz.getImagesLib.uniqueValues"]], "verified_initialize() (in module geeviz.geeview)": [[12, "geeViz.geeView.verified_initialize"]], "view() (geeviz.geeview.mapper method)": [[12, "geeViz.geeView.mapper.view"]], "wrapdates() (in module geeviz.getimageslib)": [[12, "geeViz.getImagesLib.wrapDates"]], "geeviz.examples": [[28, "module-geeViz.examples"]]}}) \ No newline at end of file diff --git a/docs/build/html/templates/examples_template.html b/docs/build/html/templates/examples_template.html index 53050b5..ba4cd56 100644 --- a/docs/build/html/templates/examples_template.html +++ b/docs/build/html/templates/examples_template.html @@ -6,7 +6,7 @@ - Examples - geeViz "2024.9.2" docs + Examples - geeViz "2024.9.3" docs @@ -142,7 +142,7 @@
@@ -168,7 +168,7 @@
- geeViz "2024.9.2" docs + geeViz "2024.9.3" docs @@ -327,7 +327,7 @@

Other examples +

diff --git a/docs/build/html/templates/info/geeViz.examples.html b/docs/build/html/templates/info/geeViz.examples.html index 8341794..4454913 100644 --- a/docs/build/html/templates/info/geeViz.examples.html +++ b/docs/build/html/templates/info/geeViz.examples.html @@ -6,7 +6,7 @@ - geeViz.examples - geeViz "2024.9.2" docs + geeViz.examples - geeViz "2024.9.3" docs @@ -142,7 +142,7 @@
@@ -168,7 +168,7 @@
- geeViz "2024.9.2" docs + geeViz "2024.9.3" docs @@ -279,7 +279,7 @@
-
+
diff --git a/examples/GFSTimeLapse.py b/examples/GFSTimeLapse.py index 7683843..920fa4f 100644 --- a/examples/GFSTimeLapse.py +++ b/examples/GFSTimeLapse.py @@ -23,6 +23,7 @@ # Module imports import geeViz.getImagesLib as getImagesLib +import geeViz.geePalettes as palettes ee = getImagesLib.ee Map = getImagesLib.Map @@ -35,46 +36,31 @@ which_hours = list(range(0, 120 + 1, 6)) #################################################################################################### # Bring in GFS -gfs = ee.ImageCollection("NOAA/GFS0P25").filter( - ee.Filter.gt("creation_time", today.advance(-1, "day").millis()) -) +gfs = ee.ImageCollection("NOAA/GFS0P25").filter(ee.Filter.gt("creation_time", today.advance(-1, "day").millis())) # Get the most recent run -most_recent_forecast = ee.Number.parse( - gfs.aggregate_histogram("creation_time").keys().reduce(ee.Reducer.max()) -) +most_recent_forecast = ee.Number.parse(gfs.aggregate_histogram("creation_time").keys().reduce(ee.Reducer.max())) # Filter to only include the most recent forecast run and the specified forecast hours -gfs = gfs.filter(ee.Filter.eq("creation_time", most_recent_forecast)).filter( - ee.Filter.inList("forecast_hours", which_hours) -) +gfs = gfs.filter(ee.Filter.eq("creation_time", most_recent_forecast)).filter(ee.Filter.inList("forecast_hours", which_hours)) # Function to convert wind vectors to direction and magnitude (speed) def getSpeedDirection(gfs): speed = gfs.select(["u.*"]).hypot(gfs.select(["v.*"])).divide(1000).multiply(3600) - direction = ( - gfs.select(["u.*"]) - .atan2(gfs.select(["v.*"])) - .divide(math.pi) - .add(1) - .multiply(180) - ) - return ( - gfs.addBands(ee.Image.cat([speed, direction]).rename(["Speed", "Direction"])) - .copyProperties(gfs) - .set("system:time_start", gfs.get("forecast_time")) - ) + direction = gfs.select(["u.*"]).atan2(gfs.select(["v.*"])).divide(math.pi).add(1).multiply(180) + return gfs.addBands(ee.Image.cat([speed, direction]).rename(["Speed", "Direction"])).copyProperties(gfs).set("system:time_start", gfs.get("forecast_time")) # Convert to wind vectors gfs = gfs.map(getSpeedDirection) # Pulled from https://github.com/gee-community/ee-palettes -cmOceanThermal = ["042333", "2c3395", "744992", "b15f82", "eb7958", "fbb43d", "e8fa5b"] -cmOceanSpeed = ["fffdcd", "e1cd73", "aaac20", "5f920c", "187328", "144b2a", "172313"] -cmOceanTempo = ["fff6f4", "c3d1ba", "7db390", "2a937f", "156d73", "1c455b", "151d44"] -cmOceanDeep = ["fdfecc", "a5dfa7", "5dbaa4", "488e9e", "3e6495", "3f396c", "281a2c"] +cmOceanThermal = palettes.cmocean["Thermal"][7] +cmOceanSpeed = palettes.cmocean["Speed"][7] +cmOceanTempo = palettes.cmocean["Tempo"][7] +cmOceanDeep = palettes.cmocean["Deep"][7] + # Set up a circular color ramp that's appropriate for direction windDirectionPalette = [i for i in cmOceanDeep] diff --git a/examples/__init__.py b/examples/__init__.py index 3444677..1abd977 100644 --- a/examples/__init__.py +++ b/examples/__init__.py @@ -21,4 +21,4 @@ __email__ = "ian.housman@gmail.com" # Version format yyyy.m.n -__version__ = "2024.9.2" +__version__ = "2024.9.3" diff --git a/geePalettes.py b/geePalettes.py new file mode 100644 index 0000000..0e9bd1f --- /dev/null +++ b/geePalettes.py @@ -0,0 +1,2442 @@ +""" +Use Gena's EE Palettes in Python +Written by Gennadiy Donchyts +Adapted to Python by Ian Housman +Palettes Source: https://github.com/gee-community/ee-palettes +""" + +""" + MIT License + + Copyright (c) 2019 Google Earth Engine Community + + 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. +""" + + +# + +cmocean = { + "Thermal": {7: ["042333", "2c3395", "744992", "b15f82", "eb7958", "fbb43d", "e8fa5b"]}, + "Haline": {7: ["2a186c", "14439c", "206e8b", "3c9387", "5ab978", "aad85c", "fdef9a"]}, + "Solar": {7: ["331418", "682325", "973b1c", "b66413", "cb921a", "dac62f", "e1fd4b"]}, + "Ice": {7: ["040613", "292851", "3f4b96", "427bb7", "61a8c7", "9cd4da", "eafdfd"]}, + "Gray": {7: ["000000", "232323", "4a4a49", "727171", "9b9a9a", "cacac9", "fffffd"]}, + "Oxy": {7: ["400505", "850a0b", "6f6f6e", "9b9a9a", "cbcac9", "ebf34b", "ddaf19"]}, + "Deep": {7: ["fdfecc", "a5dfa7", "5dbaa4", "488e9e", "3e6495", "3f396c", "281a2c"]}, + "Dense": {7: ["e6f1f1", "a2cee2", "76a4e5", "7871d5", "7642a5", "621d62", "360e24"]}, + "Algae": {7: ["d7f9d0", "a2d595", "64b463", "129450", "126e45", "1a482f", "122414"]}, + "Matter": {7: ["feedb0", "f7b37c", "eb7858", "ce4356", "9f2462", "66185c", "2f0f3e"]}, + "Turbid": {7: ["e9f6ab", "d3c671", "bf9747", "a1703b", "795338", "4d392d", "221f1b"]}, + "Speed": {7: ["fffdcd", "e1cd73", "aaac20", "5f920c", "187328", "144b2a", "172313"]}, + "Amp": {7: ["f1edec", "dfbcb0", "d08b73", "c0583b", "a62225", "730e27", "3c0912"]}, + "Tempo": {7: ["fff6f4", "c3d1ba", "7db390", "2a937f", "156d73", "1c455b", "151d44"]}, + "Phase": {7: ["a8780d", "d74957", "d02fd0", "7d73f0", "1e93a8", "359943", "a8780d"]}, + "Balance": {7: ["181c43", "0c5ebe", "75aabe", "f1eceb", "d08b73", "a52125", "3c0912"]}, + "Delta": {7: ["112040", "1c67a0", "6db6b3", "fffccc", "abac21", "177228", "172313"]}, + "Curl": {7: ["151d44", "156c72", "7eb390", "fdf5f4", "db8d77", "9c3060", "340d35"]}, +} + +colorbrewer = { + "YlGn": { + 3: ["f7fcb9", "addd8e", "31a354"], + 4: ["ffffcc", "c2e699", "78c679", "238443"], + 5: ["ffffcc", "c2e699", "78c679", "31a354", "006837"], + 6: ["ffffcc", "d9f0a3", "addd8e", "78c679", "31a354", "006837"], + 7: ["ffffcc", "d9f0a3", "addd8e", "78c679", "41ab5d", "238443", "005a32"], + 8: ["ffffe5", "f7fcb9", "d9f0a3", "addd8e", "78c679", "41ab5d", "238443", "005a32"], + 9: ["ffffe5", "f7fcb9", "d9f0a3", "addd8e", "78c679", "41ab5d", "238443", "006837", "004529"], + }, + "YlGnBu": { + 3: ["edf8b1", "7fcdbb", "2c7fb8"], + 4: ["ffffcc", "a1dab4", "41b6c4", "225ea8"], + 5: ["ffffcc", "a1dab4", "41b6c4", "2c7fb8", "253494"], + 6: ["ffffcc", "c7e9b4", "7fcdbb", "41b6c4", "2c7fb8", "253494"], + 7: ["ffffcc", "c7e9b4", "7fcdbb", "41b6c4", "1d91c0", "225ea8", "0c2c84"], + 8: ["ffffd9", "edf8b1", "c7e9b4", "7fcdbb", "41b6c4", "1d91c0", "225ea8", "0c2c84"], + 9: ["ffffd9", "edf8b1", "c7e9b4", "7fcdbb", "41b6c4", "1d91c0", "225ea8", "253494", "081d58"], + }, + "GnBu": { + 3: ["e0f3db", "a8ddb5", "43a2ca"], + 4: ["f0f9e8", "bae4bc", "7bccc4", "2b8cbe"], + 5: ["f0f9e8", "bae4bc", "7bccc4", "43a2ca", "0868ac"], + 6: ["f0f9e8", "ccebc5", "a8ddb5", "7bccc4", "43a2ca", "0868ac"], + 7: ["f0f9e8", "ccebc5", "a8ddb5", "7bccc4", "4eb3d3", "2b8cbe", "08589e"], + 8: ["f7fcf0", "e0f3db", "ccebc5", "a8ddb5", "7bccc4", "4eb3d3", "2b8cbe", "08589e"], + 9: ["f7fcf0", "e0f3db", "ccebc5", "a8ddb5", "7bccc4", "4eb3d3", "2b8cbe", "0868ac", "084081"], + }, + "BuGn": { + 3: ["e5f5f9", "99d8c9", "2ca25f"], + 4: ["edf8fb", "b2e2e2", "66c2a4", "238b45"], + 5: ["edf8fb", "b2e2e2", "66c2a4", "2ca25f", "006d2c"], + 6: ["edf8fb", "ccece6", "99d8c9", "66c2a4", "2ca25f", "006d2c"], + 7: ["edf8fb", "ccece6", "99d8c9", "66c2a4", "41ae76", "238b45", "005824"], + 8: ["f7fcfd", "e5f5f9", "ccece6", "99d8c9", "66c2a4", "41ae76", "238b45", "005824"], + 9: ["f7fcfd", "e5f5f9", "ccece6", "99d8c9", "66c2a4", "41ae76", "238b45", "006d2c", "00441b"], + }, + "PuBuGn": { + 3: ["ece2f0", "a6bddb", "1c9099"], + 4: ["f6eff7", "bdc9e1", "67a9cf", "02818a"], + 5: ["f6eff7", "bdc9e1", "67a9cf", "1c9099", "016c59"], + 6: ["f6eff7", "d0d1e6", "a6bddb", "67a9cf", "1c9099", "016c59"], + 7: ["f6eff7", "d0d1e6", "a6bddb", "67a9cf", "3690c0", "02818a", "016450"], + 8: ["fff7fb", "ece2f0", "d0d1e6", "a6bddb", "67a9cf", "3690c0", "02818a", "016450"], + 9: ["fff7fb", "ece2f0", "d0d1e6", "a6bddb", "67a9cf", "3690c0", "02818a", "016c59", "014636"], + }, + "PuBu": { + 3: ["ece7f2", "a6bddb", "2b8cbe"], + 4: ["f1eef6", "bdc9e1", "74a9cf", "0570b0"], + 5: ["f1eef6", "bdc9e1", "74a9cf", "2b8cbe", "045a8d"], + 6: ["f1eef6", "d0d1e6", "a6bddb", "74a9cf", "2b8cbe", "045a8d"], + 7: ["f1eef6", "d0d1e6", "a6bddb", "74a9cf", "3690c0", "0570b0", "034e7b"], + 8: ["fff7fb", "ece7f2", "d0d1e6", "a6bddb", "74a9cf", "3690c0", "0570b0", "034e7b"], + 9: ["fff7fb", "ece7f2", "d0d1e6", "a6bddb", "74a9cf", "3690c0", "0570b0", "045a8d", "023858"], + }, + "BuPu": { + 3: ["e0ecf4", "9ebcda", "8856a7"], + 4: ["edf8fb", "b3cde3", "8c96c6", "88419d"], + 5: ["edf8fb", "b3cde3", "8c96c6", "8856a7", "810f7c"], + 6: ["edf8fb", "bfd3e6", "9ebcda", "8c96c6", "8856a7", "810f7c"], + 7: ["edf8fb", "bfd3e6", "9ebcda", "8c96c6", "8c6bb1", "88419d", "6e016b"], + 8: ["f7fcfd", "e0ecf4", "bfd3e6", "9ebcda", "8c96c6", "8c6bb1", "88419d", "6e016b"], + 9: ["f7fcfd", "e0ecf4", "bfd3e6", "9ebcda", "8c96c6", "8c6bb1", "88419d", "810f7c", "4d004b"], + }, + "RdPu": { + 3: ["fde0dd", "fa9fb5", "c51b8a"], + 4: ["feebe2", "fbb4b9", "f768a1", "ae017e"], + 5: ["feebe2", "fbb4b9", "f768a1", "c51b8a", "7a0177"], + 6: ["feebe2", "fcc5c0", "fa9fb5", "f768a1", "c51b8a", "7a0177"], + 7: ["feebe2", "fcc5c0", "fa9fb5", "f768a1", "dd3497", "ae017e", "7a0177"], + 8: ["fff7f3", "fde0dd", "fcc5c0", "fa9fb5", "f768a1", "dd3497", "ae017e", "7a0177"], + 9: ["fff7f3", "fde0dd", "fcc5c0", "fa9fb5", "f768a1", "dd3497", "ae017e", "7a0177", "49006a"], + }, + "PuRd": { + 3: ["e7e1ef", "c994c7", "dd1c77"], + 4: ["f1eef6", "d7b5d8", "df65b0", "ce1256"], + 5: ["f1eef6", "d7b5d8", "df65b0", "dd1c77", "980043"], + 6: ["f1eef6", "d4b9da", "c994c7", "df65b0", "dd1c77", "980043"], + 7: ["f1eef6", "d4b9da", "c994c7", "df65b0", "e7298a", "ce1256", "91003f"], + 8: ["f7f4f9", "e7e1ef", "d4b9da", "c994c7", "df65b0", "e7298a", "ce1256", "91003f"], + 9: ["f7f4f9", "e7e1ef", "d4b9da", "c994c7", "df65b0", "e7298a", "ce1256", "980043", "67001f"], + }, + "OrRd": { + 3: ["fee8c8", "fdbb84", "e34a33"], + 4: ["fef0d9", "fdcc8a", "fc8d59", "d7301f"], + 5: ["fef0d9", "fdcc8a", "fc8d59", "e34a33", "b30000"], + 6: ["fef0d9", "fdd49e", "fdbb84", "fc8d59", "e34a33", "b30000"], + 7: ["fef0d9", "fdd49e", "fdbb84", "fc8d59", "ef6548", "d7301f", "990000"], + 8: ["fff7ec", "fee8c8", "fdd49e", "fdbb84", "fc8d59", "ef6548", "d7301f", "990000"], + 9: ["fff7ec", "fee8c8", "fdd49e", "fdbb84", "fc8d59", "ef6548", "d7301f", "b30000", "7f0000"], + }, + "YlOrRd": { + 3: ["ffeda0", "feb24c", "f03b20"], + 4: ["ffffb2", "fecc5c", "fd8d3c", "e31a1c"], + 5: ["ffffb2", "fecc5c", "fd8d3c", "f03b20", "bd0026"], + 6: ["ffffb2", "fed976", "feb24c", "fd8d3c", "f03b20", "bd0026"], + 7: ["ffffb2", "fed976", "feb24c", "fd8d3c", "fc4e2a", "e31a1c", "b10026"], + 8: ["ffffcc", "ffeda0", "fed976", "feb24c", "fd8d3c", "fc4e2a", "e31a1c", "b10026"], + 9: ["ffffcc", "ffeda0", "fed976", "feb24c", "fd8d3c", "fc4e2a", "e31a1c", "bd0026", "800026"], + }, + "YlOrBr": { + 3: ["fff7bc", "fec44f", "d95f0e"], + 4: ["ffffd4", "fed98e", "fe9929", "cc4c02"], + 5: ["ffffd4", "fed98e", "fe9929", "d95f0e", "993404"], + 6: ["ffffd4", "fee391", "fec44f", "fe9929", "d95f0e", "993404"], + 7: ["ffffd4", "fee391", "fec44f", "fe9929", "ec7014", "cc4c02", "8c2d04"], + 8: ["ffffe5", "fff7bc", "fee391", "fec44f", "fe9929", "ec7014", "cc4c02", "8c2d04"], + 9: ["ffffe5", "fff7bc", "fee391", "fec44f", "fe9929", "ec7014", "cc4c02", "993404", "662506"], + }, + "Purples": { + 3: ["efedf5", "bcbddc", "756bb1"], + 4: ["f2f0f7", "cbc9e2", "9e9ac8", "6a51a3"], + 5: ["f2f0f7", "cbc9e2", "9e9ac8", "756bb1", "54278f"], + 6: ["f2f0f7", "dadaeb", "bcbddc", "9e9ac8", "756bb1", "54278f"], + 7: ["f2f0f7", "dadaeb", "bcbddc", "9e9ac8", "807dba", "6a51a3", "4a1486"], + 8: ["fcfbfd", "efedf5", "dadaeb", "bcbddc", "9e9ac8", "807dba", "6a51a3", "4a1486"], + 9: ["fcfbfd", "efedf5", "dadaeb", "bcbddc", "9e9ac8", "807dba", "6a51a3", "54278f", "3f007d"], + }, + "Blues": { + 3: ["deebf7", "9ecae1", "3182bd"], + 4: ["eff3ff", "bdd7e7", "6baed6", "2171b5"], + 5: ["eff3ff", "bdd7e7", "6baed6", "3182bd", "08519c"], + 6: ["eff3ff", "c6dbef", "9ecae1", "6baed6", "3182bd", "08519c"], + 7: ["eff3ff", "c6dbef", "9ecae1", "6baed6", "4292c6", "2171b5", "084594"], + 8: ["f7fbff", "deebf7", "c6dbef", "9ecae1", "6baed6", "4292c6", "2171b5", "084594"], + 9: ["f7fbff", "deebf7", "c6dbef", "9ecae1", "6baed6", "4292c6", "2171b5", "08519c", "08306b"], + }, + "Greens": { + 3: ["e5f5e0", "a1d99b", "31a354"], + 4: ["edf8e9", "bae4b3", "74c476", "238b45"], + 5: ["edf8e9", "bae4b3", "74c476", "31a354", "006d2c"], + 6: ["edf8e9", "c7e9c0", "a1d99b", "74c476", "31a354", "006d2c"], + 7: ["edf8e9", "c7e9c0", "a1d99b", "74c476", "41ab5d", "238b45", "005a32"], + 8: ["f7fcf5", "e5f5e0", "c7e9c0", "a1d99b", "74c476", "41ab5d", "238b45", "005a32"], + 9: ["f7fcf5", "e5f5e0", "c7e9c0", "a1d99b", "74c476", "41ab5d", "238b45", "006d2c", "00441b"], + }, + "Oranges": { + 3: ["fee6ce", "fdae6b", "e6550d"], + 4: ["feedde", "fdbe85", "fd8d3c", "d94701"], + 5: ["feedde", "fdbe85", "fd8d3c", "e6550d", "a63603"], + 6: ["feedde", "fdd0a2", "fdae6b", "fd8d3c", "e6550d", "a63603"], + 7: ["feedde", "fdd0a2", "fdae6b", "fd8d3c", "f16913", "d94801", "8c2d04"], + 8: ["fff5eb", "fee6ce", "fdd0a2", "fdae6b", "fd8d3c", "f16913", "d94801", "8c2d04"], + 9: ["fff5eb", "fee6ce", "fdd0a2", "fdae6b", "fd8d3c", "f16913", "d94801", "a63603", "7f2704"], + }, + "Reds": { + 3: ["fee0d2", "fc9272", "de2d26"], + 4: ["fee5d9", "fcae91", "fb6a4a", "cb181d"], + 5: ["fee5d9", "fcae91", "fb6a4a", "de2d26", "a50f15"], + 6: ["fee5d9", "fcbba1", "fc9272", "fb6a4a", "de2d26", "a50f15"], + 7: ["fee5d9", "fcbba1", "fc9272", "fb6a4a", "ef3b2c", "cb181d", "99000d"], + 8: ["fff5f0", "fee0d2", "fcbba1", "fc9272", "fb6a4a", "ef3b2c", "cb181d", "99000d"], + 9: ["fff5f0", "fee0d2", "fcbba1", "fc9272", "fb6a4a", "ef3b2c", "cb181d", "a50f15", "67000d"], + }, + "Greys": { + 3: ["f0f0f0", "bdbdbd", "636363"], + 4: ["f7f7f7", "cccccc", "969696", "525252"], + 5: ["f7f7f7", "cccccc", "969696", "636363", "252525"], + 6: ["f7f7f7", "d9d9d9", "bdbdbd", "969696", "636363", "252525"], + 7: ["f7f7f7", "d9d9d9", "bdbdbd", "969696", "737373", "525252", "252525"], + 8: ["ffffff", "f0f0f0", "d9d9d9", "bdbdbd", "969696", "737373", "525252", "252525"], + 9: ["ffffff", "f0f0f0", "d9d9d9", "bdbdbd", "969696", "737373", "525252", "252525", "000000"], + }, + "PuOr": { + 3: ["f1a340", "f7f7f7", "998ec3"], + 4: ["e66101", "fdb863", "b2abd2", "5e3c99"], + 5: ["e66101", "fdb863", "f7f7f7", "b2abd2", "5e3c99"], + 6: ["b35806", "f1a340", "fee0b6", "d8daeb", "998ec3", "542788"], + 7: ["b35806", "f1a340", "fee0b6", "f7f7f7", "d8daeb", "998ec3", "542788"], + 8: ["b35806", "e08214", "fdb863", "fee0b6", "d8daeb", "b2abd2", "8073ac", "542788"], + 9: ["b35806", "e08214", "fdb863", "fee0b6", "f7f7f7", "d8daeb", "b2abd2", "8073ac", "542788"], + 10: ["7f3b08", "b35806", "e08214", "fdb863", "fee0b6", "d8daeb", "b2abd2", "8073ac", "542788", "2d004b"], + 11: ["7f3b08", "b35806", "e08214", "fdb863", "fee0b6", "f7f7f7", "d8daeb", "b2abd2", "8073ac", "542788", "2d004b"], + }, + "BrBG": { + 3: ["d8b365", "f5f5f5", "5ab4ac"], + 4: ["a6611a", "dfc27d", "80cdc1", "018571"], + 5: ["a6611a", "dfc27d", "f5f5f5", "80cdc1", "018571"], + 6: ["8c510a", "d8b365", "f6e8c3", "c7eae5", "5ab4ac", "01665e"], + 7: ["8c510a", "d8b365", "f6e8c3", "f5f5f5", "c7eae5", "5ab4ac", "01665e"], + 8: ["8c510a", "bf812d", "dfc27d", "f6e8c3", "c7eae5", "80cdc1", "35978f", "01665e"], + 9: ["8c510a", "bf812d", "dfc27d", "f6e8c3", "f5f5f5", "c7eae5", "80cdc1", "35978f", "01665e"], + 10: ["543005", "8c510a", "bf812d", "dfc27d", "f6e8c3", "c7eae5", "80cdc1", "35978f", "01665e", "003c30"], + 11: ["543005", "8c510a", "bf812d", "dfc27d", "f6e8c3", "f5f5f5", "c7eae5", "80cdc1", "35978f", "01665e", "003c30"], + }, + "PRGn": { + 3: ["af8dc3", "f7f7f7", "7fbf7b"], + 4: ["7b3294", "c2a5cf", "a6dba0", "008837"], + 5: ["7b3294", "c2a5cf", "f7f7f7", "a6dba0", "008837"], + 6: ["762a83", "af8dc3", "e7d4e8", "d9f0d3", "7fbf7b", "1b7837"], + 7: ["762a83", "af8dc3", "e7d4e8", "f7f7f7", "d9f0d3", "7fbf7b", "1b7837"], + 8: ["762a83", "9970ab", "c2a5cf", "e7d4e8", "d9f0d3", "a6dba0", "5aae61", "1b7837"], + 9: ["762a83", "9970ab", "c2a5cf", "e7d4e8", "f7f7f7", "d9f0d3", "a6dba0", "5aae61", "1b7837"], + 10: ["40004b", "762a83", "9970ab", "c2a5cf", "e7d4e8", "d9f0d3", "a6dba0", "5aae61", "1b7837", "00441b"], + 11: ["40004b", "762a83", "9970ab", "c2a5cf", "e7d4e8", "f7f7f7", "d9f0d3", "a6dba0", "5aae61", "1b7837", "00441b"], + }, + "PiYG": { + 3: ["e9a3c9", "f7f7f7", "a1d76a"], + 4: ["d01c8b", "f1b6da", "b8e186", "4dac26"], + 5: ["d01c8b", "f1b6da", "f7f7f7", "b8e186", "4dac26"], + 6: ["c51b7d", "e9a3c9", "fde0ef", "e6f5d0", "a1d76a", "4d9221"], + 7: ["c51b7d", "e9a3c9", "fde0ef", "f7f7f7", "e6f5d0", "a1d76a", "4d9221"], + 8: ["c51b7d", "de77ae", "f1b6da", "fde0ef", "e6f5d0", "b8e186", "7fbc41", "4d9221"], + 9: ["c51b7d", "de77ae", "f1b6da", "fde0ef", "f7f7f7", "e6f5d0", "b8e186", "7fbc41", "4d9221"], + 10: ["8e0152", "c51b7d", "de77ae", "f1b6da", "fde0ef", "e6f5d0", "b8e186", "7fbc41", "4d9221", "276419"], + 11: ["8e0152", "c51b7d", "de77ae", "f1b6da", "fde0ef", "f7f7f7", "e6f5d0", "b8e186", "7fbc41", "4d9221", "276419"], + }, + "RdBu": { + 3: ["ef8a62", "f7f7f7", "67a9cf"], + 4: ["ca0020", "f4a582", "92c5de", "0571b0"], + 5: ["ca0020", "f4a582", "f7f7f7", "92c5de", "0571b0"], + 6: ["b2182b", "ef8a62", "fddbc7", "d1e5f0", "67a9cf", "2166ac"], + 7: ["b2182b", "ef8a62", "fddbc7", "f7f7f7", "d1e5f0", "67a9cf", "2166ac"], + 8: ["b2182b", "d6604d", "f4a582", "fddbc7", "d1e5f0", "92c5de", "4393c3", "2166ac"], + 9: ["b2182b", "d6604d", "f4a582", "fddbc7", "f7f7f7", "d1e5f0", "92c5de", "4393c3", "2166ac"], + 10: ["67001f", "b2182b", "d6604d", "f4a582", "fddbc7", "d1e5f0", "92c5de", "4393c3", "2166ac", "053061"], + 11: ["67001f", "b2182b", "d6604d", "f4a582", "fddbc7", "f7f7f7", "d1e5f0", "92c5de", "4393c3", "2166ac", "053061"], + }, + "RdGy": { + 3: ["ef8a62", "ffffff", "999999"], + 4: ["ca0020", "f4a582", "bababa", "404040"], + 5: ["ca0020", "f4a582", "ffffff", "bababa", "404040"], + 6: ["b2182b", "ef8a62", "fddbc7", "e0e0e0", "999999", "4d4d4d"], + 7: ["b2182b", "ef8a62", "fddbc7", "ffffff", "e0e0e0", "999999", "4d4d4d"], + 8: ["b2182b", "d6604d", "f4a582", "fddbc7", "e0e0e0", "bababa", "878787", "4d4d4d"], + 9: ["b2182b", "d6604d", "f4a582", "fddbc7", "ffffff", "e0e0e0", "bababa", "878787", "4d4d4d"], + 10: ["67001f", "b2182b", "d6604d", "f4a582", "fddbc7", "e0e0e0", "bababa", "878787", "4d4d4d", "1a1a1a"], + 11: ["67001f", "b2182b", "d6604d", "f4a582", "fddbc7", "ffffff", "e0e0e0", "bababa", "878787", "4d4d4d", "1a1a1a"], + }, + "RdYlBu": { + 3: ["fc8d59", "ffffbf", "91bfdb"], + 4: ["d7191c", "fdae61", "abd9e9", "2c7bb6"], + 5: ["d7191c", "fdae61", "ffffbf", "abd9e9", "2c7bb6"], + 6: ["d73027", "fc8d59", "fee090", "e0f3f8", "91bfdb", "4575b4"], + 7: ["d73027", "fc8d59", "fee090", "ffffbf", "e0f3f8", "91bfdb", "4575b4"], + 8: ["d73027", "f46d43", "fdae61", "fee090", "e0f3f8", "abd9e9", "74add1", "4575b4"], + 9: ["d73027", "f46d43", "fdae61", "fee090", "ffffbf", "e0f3f8", "abd9e9", "74add1", "4575b4"], + 10: ["a50026", "d73027", "f46d43", "fdae61", "fee090", "e0f3f8", "abd9e9", "74add1", "4575b4", "313695"], + 11: ["a50026", "d73027", "f46d43", "fdae61", "fee090", "ffffbf", "e0f3f8", "abd9e9", "74add1", "4575b4", "313695"], + }, + "Spectral": { + 3: ["fc8d59", "ffffbf", "99d594"], + 4: ["d7191c", "fdae61", "abdda4", "2b83ba"], + 5: ["d7191c", "fdae61", "ffffbf", "abdda4", "2b83ba"], + 6: ["d53e4f", "fc8d59", "fee08b", "e6f598", "99d594", "3288bd"], + 7: ["d53e4f", "fc8d59", "fee08b", "ffffbf", "e6f598", "99d594", "3288bd"], + 8: ["d53e4f", "f46d43", "fdae61", "fee08b", "e6f598", "abdda4", "66c2a5", "3288bd"], + 9: ["d53e4f", "f46d43", "fdae61", "fee08b", "ffffbf", "e6f598", "abdda4", "66c2a5", "3288bd"], + 10: ["9e0142", "d53e4f", "f46d43", "fdae61", "fee08b", "e6f598", "abdda4", "66c2a5", "3288bd", "5e4fa2"], + 11: ["9e0142", "d53e4f", "f46d43", "fdae61", "fee08b", "ffffbf", "e6f598", "abdda4", "66c2a5", "3288bd", "5e4fa2"], + }, + "RdYlGn": { + 3: ["fc8d59", "ffffbf", "91cf60"], + 4: ["d7191c", "fdae61", "a6d96a", "1a9641"], + 5: ["d7191c", "fdae61", "ffffbf", "a6d96a", "1a9641"], + 6: ["d73027", "fc8d59", "fee08b", "d9ef8b", "91cf60", "1a9850"], + 7: ["d73027", "fc8d59", "fee08b", "ffffbf", "d9ef8b", "91cf60", "1a9850"], + 8: ["d73027", "f46d43", "fdae61", "fee08b", "d9ef8b", "a6d96a", "66bd63", "1a9850"], + 9: ["d73027", "f46d43", "fdae61", "fee08b", "ffffbf", "d9ef8b", "a6d96a", "66bd63", "1a9850"], + 10: ["a50026", "d73027", "f46d43", "fdae61", "fee08b", "d9ef8b", "a6d96a", "66bd63", "1a9850", "006837"], + 11: ["a50026", "d73027", "f46d43", "fdae61", "fee08b", "ffffbf", "d9ef8b", "a6d96a", "66bd63", "1a9850", "006837"], + }, + "Accent": { + 3: ["7fc97f", "beaed4", "fdc086"], + 4: ["7fc97f", "beaed4", "fdc086", "ffff99"], + 5: ["7fc97f", "beaed4", "fdc086", "ffff99", "386cb0"], + 6: ["7fc97f", "beaed4", "fdc086", "ffff99", "386cb0", "f0027f"], + 7: ["7fc97f", "beaed4", "fdc086", "ffff99", "386cb0", "f0027f", "bf5b17"], + 8: ["7fc97f", "beaed4", "fdc086", "ffff99", "386cb0", "f0027f", "bf5b17", "666666"], + }, + "Dark2": { + 3: ["1b9e77", "d95f02", "7570b3"], + 4: ["1b9e77", "d95f02", "7570b3", "e7298a"], + 5: ["1b9e77", "d95f02", "7570b3", "e7298a", "66a61e"], + 6: ["1b9e77", "d95f02", "7570b3", "e7298a", "66a61e", "e6ab02"], + 7: ["1b9e77", "d95f02", "7570b3", "e7298a", "66a61e", "e6ab02", "a6761d"], + 8: ["1b9e77", "d95f02", "7570b3", "e7298a", "66a61e", "e6ab02", "a6761d", "666666"], + }, + "Pastel1": { + 3: ["fbb4ae", "b3cde3", "ccebc5"], + 4: ["fbb4ae", "b3cde3", "ccebc5", "decbe4"], + 5: ["fbb4ae", "b3cde3", "ccebc5", "decbe4", "fed9a6"], + 6: ["fbb4ae", "b3cde3", "ccebc5", "decbe4", "fed9a6", "ffffcc"], + 7: ["fbb4ae", "b3cde3", "ccebc5", "decbe4", "fed9a6", "ffffcc", "e5d8bd"], + 8: ["fbb4ae", "b3cde3", "ccebc5", "decbe4", "fed9a6", "ffffcc", "e5d8bd", "fddaec"], + 9: ["fbb4ae", "b3cde3", "ccebc5", "decbe4", "fed9a6", "ffffcc", "e5d8bd", "fddaec", "f2f2f2"], + }, + "Pastel2": { + 3: ["b3e2cd", "fdcdac", "cbd5e8"], + 4: ["b3e2cd", "fdcdac", "cbd5e8", "f4cae4"], + 5: ["b3e2cd", "fdcdac", "cbd5e8", "f4cae4", "e6f5c9"], + 6: ["b3e2cd", "fdcdac", "cbd5e8", "f4cae4", "e6f5c9", "fff2ae"], + 7: ["b3e2cd", "fdcdac", "cbd5e8", "f4cae4", "e6f5c9", "fff2ae", "f1e2cc"], + 8: ["b3e2cd", "fdcdac", "cbd5e8", "f4cae4", "e6f5c9", "fff2ae", "f1e2cc", "cccccc"], + }, + "Paired": { + 3: ["a6cee3", "1f78b4", "b2df8a"], + 4: ["a6cee3", "1f78b4", "b2df8a", "33a02c"], + 5: ["a6cee3", "1f78b4", "b2df8a", "33a02c", "fb9a99"], + 6: ["a6cee3", "1f78b4", "b2df8a", "33a02c", "fb9a99", "e31a1c"], + 7: ["a6cee3", "1f78b4", "b2df8a", "33a02c", "fb9a99", "e31a1c", "fdbf6f"], + 8: ["a6cee3", "1f78b4", "b2df8a", "33a02c", "fb9a99", "e31a1c", "fdbf6f", "ff7f00"], + 9: ["a6cee3", "1f78b4", "b2df8a", "33a02c", "fb9a99", "e31a1c", "fdbf6f", "ff7f00", "cab2d6"], + 10: ["a6cee3", "1f78b4", "b2df8a", "33a02c", "fb9a99", "e31a1c", "fdbf6f", "ff7f00", "cab2d6", "6a3d9a"], + 11: ["a6cee3", "1f78b4", "b2df8a", "33a02c", "fb9a99", "e31a1c", "fdbf6f", "ff7f00", "cab2d6", "6a3d9a", "ffff99"], + 12: ["a6cee3", "1f78b4", "b2df8a", "33a02c", "fb9a99", "e31a1c", "fdbf6f", "ff7f00", "cab2d6", "6a3d9a", "ffff99", "b15928"], + }, + "Set1": { + 3: ["e41a1c", "377eb8", "4daf4a"], + 4: ["e41a1c", "377eb8", "4daf4a", "984ea3"], + 5: ["e41a1c", "377eb8", "4daf4a", "984ea3", "ff7f00"], + 6: ["e41a1c", "377eb8", "4daf4a", "984ea3", "ff7f00", "ffff33"], + 7: ["e41a1c", "377eb8", "4daf4a", "984ea3", "ff7f00", "ffff33", "a65628"], + 8: ["e41a1c", "377eb8", "4daf4a", "984ea3", "ff7f00", "ffff33", "a65628", "f781bf"], + 9: ["e41a1c", "377eb8", "4daf4a", "984ea3", "ff7f00", "ffff33", "a65628", "f781bf", "999999"], + }, + "Set2": { + 3: ["66c2a5", "fc8d62", "8da0cb"], + 4: ["66c2a5", "fc8d62", "8da0cb", "e78ac3"], + 5: ["66c2a5", "fc8d62", "8da0cb", "e78ac3", "a6d854"], + 6: ["66c2a5", "fc8d62", "8da0cb", "e78ac3", "a6d854", "ffd92f"], + 7: ["66c2a5", "fc8d62", "8da0cb", "e78ac3", "a6d854", "ffd92f", "e5c494"], + 8: ["66c2a5", "fc8d62", "8da0cb", "e78ac3", "a6d854", "ffd92f", "e5c494", "b3b3b3"], + }, + "Set3": { + 3: ["8dd3c7", "ffffb3", "bebada"], + 4: ["8dd3c7", "ffffb3", "bebada", "fb8072"], + 5: ["8dd3c7", "ffffb3", "bebada", "fb8072", "80b1d3"], + 6: ["8dd3c7", "ffffb3", "bebada", "fb8072", "80b1d3", "fdb462"], + 7: ["8dd3c7", "ffffb3", "bebada", "fb8072", "80b1d3", "fdb462", "b3de69"], + 8: ["8dd3c7", "ffffb3", "bebada", "fb8072", "80b1d3", "fdb462", "b3de69", "fccde5"], + 9: ["8dd3c7", "ffffb3", "bebada", "fb8072", "80b1d3", "fdb462", "b3de69", "fccde5", "d9d9d9"], + 10: ["8dd3c7", "ffffb3", "bebada", "fb8072", "80b1d3", "fdb462", "b3de69", "fccde5", "d9d9d9", "bc80bd"], + 11: ["8dd3c7", "ffffb3", "bebada", "fb8072", "80b1d3", "fdb462", "b3de69", "fccde5", "d9d9d9", "bc80bd", "ccebc5"], + 12: ["8dd3c7", "ffffb3", "bebada", "fb8072", "80b1d3", "fdb462", "b3de69", "fccde5", "d9d9d9", "bc80bd", "ccebc5", "ffed6f"], + }, +} + +misc = { + "coolwarm": {7: ["#3B4CC0", "#6F91F2", "#A9C5FC", "#DDDDDD", "#F6B69B", "#E6745B", "#B40426"]}, + "warmcool": {7: ["#B40426", "#E6745B", "#F6B69B", "#DDDDDD", "#A9C5FC", "#6F91F2", "#3B4CC0"]}, + "cubehelix": {7: ["#000000", "#182E49", "#2B6F39", "#A07949", "#D490C6", "#C2D8F3", "#FFFFFF"]}, + "gnuplot": {7: ["#000033", "#0000CC", "#5000FF", "#C729D6", "#FF758A", "#FFC23D", "#FFFF60"]}, + "jet": {7: ["#00007F", "#002AFF", "#00D4FF", "#7FFF7F", "#FFD400", "#FF2A00", "#7F0000"]}, + "parula": {7: ["#352A87", "#056EDE", "#089BCE", "#33B7A0", "#A3BD6A", "#F9BD3F", "#F9FB0E"]}, + "tol_rainbow": {7: ["#781C81", "#3F60AE", "#539EB6", "#6DB388", "#CAB843", "#E78532", "#D92120"]}, + "cividis": {7: ["#00204C", "#213D6B", "#555B6C", "#7B7A77", "#A59C74", "#D3C064", "#FFE945"]}, +} + +niccoli = { + "cubicyf": {7: ["#830CAB", "#7556F3", "#5590E7", "#3BBCAC", "#52D965", "#86EA50", "#CCEC5A"]}, + "cubicl": {7: ["#780085", "#7651EE", "#4C9ED9", "#49CF7F", "#85EB50", "#D4E35B", "#F9965B"]}, + "isol": {7: ["#E839E5", "#7C58FA", "#2984B9", "#0A9A4D", "#349704", "#9E7C09", "#FF3A2A"]}, + "linearl": {7: ["#040404", "#2C1C5D", "#114E81", "#00834B", "#37B200", "#C4CA39", "#F7ECE5"]}, + "linearlhot": {7: ["#060303", "#620100", "#B20022", "#DE2007", "#D78E00", "#C9CE00", "#F2F2B7"]}, +} + +matplotlib = { + "magma": {7: ["#000004", "#2C105C", "#711F81", "#B63679", "#EE605E", "#FDAE78", "#FCFDBF"]}, + "inferno": {7: ["#000004", "#320A5A", "#781B6C", "#BB3654", "#EC6824", "#FBB41A", "#FCFFA4"]}, + "plasma": {7: ["#0D0887", "#5B02A3", "#9A179B", "#CB4678", "#EB7852", "#FBB32F", "#F0F921"]}, + "viridis": {7: ["#440154", "#433982", "#30678D", "#218F8B", "#36B677", "#8ED542", "#FDE725"]}, +} + +kovesi = { + "cyclic_grey_15_85_c0": {7: ["#787878", "#B0B0B0", "#B0B0B0", "#767676", "#414141", "#424242", "#767676"]}, + "cyclic_grey_15_85_c0_s25": {7: ["#2D2D2D", "#5B5B5B", "#949494", "#CACACA", "#949494", "#5A5A5A", "#2D2D2D"]}, + "cyclic_mrybm_35_75_c68": {7: ["#F985F8", "#D82D5F", "#C14E04", "#D0AA25", "#2C76B1", "#7556F9", "#F785F9"]}, + "cyclic_mrybm_35_75_c68_s25": {7: ["#3E3FF0", "#B976FC", "#F55CB1", "#B71C18", "#D28004", "#8E9871", "#3C40EE"]}, + "cyclic_mygbm_30_95_c78": {7: ["#EF55F2", "#FCC882", "#B8E014", "#32AD26", "#2F5DB9", "#712AF7", "#ED53F3"]}, + "cyclic_mygbm_30_95_c78_s25": {7: ["#2E22EA", "#B341FB", "#FC93C0", "#F1ED37", "#77C80D", "#458873", "#2C24E9"]}, + "cyclic_wrwbw_40_90_c42": {7: ["#DFD5D8", "#D9694D", "#D86449", "#DDD1D6", "#6C81E5", "#6F83E5", "#DDD5DA"]}, + "cyclic_wrwbw_40_90_c42_s25": {7: ["#1A63E5", "#B0B2E4", "#E4A695", "#C93117", "#E3A18F", "#ADB0E4", "#1963E5"]}, + "diverging_isoluminant_cjm_75_c23": {7: ["#00C9FF", "#69C3E8", "#98BED0", "#B8B8BB", "#CBB1C6", "#DCA8D5", "#ED9EE4"]}, + "diverging_isoluminant_cjm_75_c24": {7: ["#00CBFE", "#62C5E7", "#96BFD0", "#B8B8BB", "#CCB1C8", "#DEA7D6", "#F09DE6"]}, + "diverging_isoluminant_cjo_70_c25": {7: ["#00B6FF", "#67B2E4", "#8FAFC7", "#ABABAB", "#C7A396", "#E09A81", "#F6906D"]}, + "diverging_linear_bjr_30_55_c53": {7: ["#002AD7", "#483FB0", "#5E528A", "#646464", "#A15C49", "#D44A2C", "#FF1900"]}, + "diverging_linear_bjy_30_90_c45": {7: ["#1431C1", "#5A50B2", "#796FA2", "#938F8F", "#B8AB74", "#DAC652", "#FDE409"]}, + "diverging_rainbow_bgymr_45_85_c67": {7: ["#085CF8", "#3C9E49", "#98BB18", "#F3CC1D", "#FE8F7B", "#F64497", "#D70500"]}, + "diverging_bkr_55_10_c35": {7: ["#1981FA", "#315CA9", "#2D3B5E", "#221F21", "#5C2F28", "#9E4035", "#E65041"]}, + "diverging_bky_60_10_c30": {7: ["#0E94FA", "#2F68A9", "#2D405E", "#212020", "#4C3E20", "#7D6321", "#B38B1A"]}, + "diverging_bwr_40_95_c42": {7: ["#2151DB", "#8182E3", "#BCB7EB", "#EBE2E6", "#EEAD9D", "#DC6951", "#C00206"]}, + "diverging_bwr_55_98_c37": {7: ["#2480FF", "#88A4FD", "#C4CDFC", "#F8F6F7", "#FDC1B3", "#F58B73", "#E65037"]}, + "diverging_cwm_80_100_c22": {7: ["#00D9FF", "#89E6FF", "#C9F2FF", "#FEFFFF", "#FEE3FA", "#FCC9F5", "#FAAEF0"]}, + "diverging_gkr_60_10_c40": {7: ["#36A616", "#347420", "#2B4621", "#22201D", "#633226", "#AC462F", "#FD5838"]}, + "diverging_gwr_55_95_c38": {7: ["#39970E", "#7DB461", "#B7D2A7", "#EDEAE6", "#F9BAB2", "#F78579", "#ED4744"]}, + "diverging_gwv_55_95_c39": {7: ["#39970E", "#7DB461", "#B7D2A7", "#EBEBEA", "#E0BEED", "#CD8DE9", "#B859E4"]}, + "isoluminant_cgo_70_c39": {7: ["#37B7EC", "#4DBAC6", "#63BB9E", "#86B876", "#B3AE60", "#D8A05F", "#F6906D"]}, + "isoluminant_cgo_80_c38": {7: ["#70D1FF", "#74D4E0", "#80D6BA", "#9BD594", "#C4CC7D", "#EABF77", "#FFB281"]}, + "isoluminant_cm_70_c39": {7: ["#14BAE6", "#5DB2EA", "#8CAAEB", "#B0A1E3", "#CF98D3", "#E98FC1", "#FE85AD"]}, + "rainbow_bgyr_35_85_c72": {7: ["#0034F5", "#1E7D83", "#4DA910", "#B3C120", "#FCC228", "#FF8410", "#FD3000"]}, + "rainbow_bgyr_35_85_c73": {7: ["#0035F9", "#1E7D83", "#4DA910", "#B3C01A", "#FDC120", "#FF8303", "#FF2A00"]}, + "rainbow_bgyrm_35_85_c69": {7: ["#0030F5", "#36886A", "#82B513", "#EDC823", "#F68E19", "#F45A44", "#FD92FA"]}, + "rainbow_bgyrm_35_85_c71": {7: ["#0035F9", "#34886A", "#80B412", "#F1CA24", "#FD8814", "#FE4E41", "#FD92FA"]}, + "linear_bgy_10_95_c74": {7: ["#000C7D", "#002CB9", "#005EA3", "#198E61", "#32BA1A", "#70E21A", "#FFF123"]}, + "linear_bgyw_15_100_c67": {7: ["#1B0084", "#1D26C7", "#2E68AB", "#4C9A41", "#95BE16", "#E1DB41", "#FFFFFF"]}, + "linear_bgyw_15_100_c68": {7: ["#1A0086", "#1B27C8", "#2469AD", "#4B9B41", "#95BE16", "#E1DB41", "#FFFFFF"]}, + "linear_blue_5_95_c73": {7: ["#00014E", "#0E02A8", "#2429F4", "#2D6CFD", "#36A3FD", "#2CD8FA", "#B3FFF6"]}, + "linear_blue_95_50_c20": {7: ["#F1F1F1", "#D0DCEC", "#B1C8E6", "#93B5DC", "#7BA1CA", "#5E8EBC", "#3B7CB2"]}, + "linear_bmw_5_95_c86": {7: ["#00024B", "#0708A6", "#451AF4", "#B621FE", "#F957FE", "#FEA8FD", "#FEEBFE"]}, + "linear_bmw_5_95_c89": {7: ["#000558", "#0014BF", "#251EFA", "#B71EFF", "#F655FF", "#FFA6FF", "#FEEBFE"]}, + "linear_bmy_10_95_c71": {7: ["#000F5D", "#48188F", "#A60B8A", "#E4336F", "#F97E4A", "#FCBE39", "#F5F94E"]}, + "linear_bmy_10_95_c78": {7: ["#000C7D", "#3013A7", "#A7018B", "#EE1774", "#FF7051", "#FFB722", "#FFF123"]}, + "linear_gow_60_85_c27": {7: ["#669B90", "#87A37D", "#B4A671", "#D4AC6A", "#D8B97A", "#D7C6A6", "#D4D4D4"]}, + "linear_gow_65_90_c35": {7: ["#70AD5C", "#A3B061", "#CCB267", "#E6B86D", "#E7C786", "#E5D5B3", "#E2E2E2"]}, + "linear_green_5_95_c69": {7: ["#011506", "#093805", "#146007", "#1F890B", "#2AB610", "#35E415", "#D8FF15"]}, + "linear_grey_0_100_c0": {7: ["#000000", "#272727", "#4E4E4E", "#777777", "#A2A2A2", "#CFCFCF", "#FFFFFF"]}, + "linear_grey_10_95_c0": {7: ["#1B1B1B", "#393939", "#5A5A5A", "#7D7D7D", "#A2A2A2", "#C9C9C9", "#F1F1F1"]}, + "linear_kry_5_95_c72": {7: ["#111111", "#660304", "#A80502", "#E72205", "#FE7310", "#F4BE26", "#F7F909"]}, + "linear_kry_5_98_c75": {7: ["#111111", "#6B0004", "#AF0000", "#F50C00", "#FF7705", "#FFBF13", "#FFFE1C"]}, + "linear_kryw_5_100_c64": {7: ["#111111", "#6A0303", "#B00703", "#F02C06", "#FE8714", "#F3CE4C", "#FFFFFF"]}, + "linear_kryw_5_100_c67": {7: ["#111111", "#6C0004", "#B20000", "#F81300", "#FF7D05", "#FFC43E", "#FFFFFF"]}, + "linear_ternary_blue_0_44_c57": {7: ["#000000", "#051238", "#091F5E", "#0D2B83", "#1139AB", "#1546D3", "#1A54FF"]}, + "linear_ternary_green_0_46_c42": {7: ["#000000", "#001C00", "#002E00", "#004100", "#005500", "#006900", "#008000"]}, + "linear_ternary_red_0_50_c52": {7: ["#000000", "#320900", "#531000", "#761600", "#991C00", "#BE2400", "#E62B00"]}, +} + +crameri = { + "acton": { + 10: ["2E214D", "4B3B66", "6E5480", "926390", "B26795", "D17BA5", "D495B8", "D4ADC9", "DBC9DC", "E6E6F0"], + 25: [ + "2E214D", + "392B57", + "443460", + "503E6A", + "5C4974", + "69517D", + "775A86", + "855F8C", + "926390", + "9F6593", + "AA6694", + "B76896", + "C46E9B", + "CE77A2", + "D482AA", + "D58CB1", + "D495B8", + "D39EBE", + "D4A6C4", + "D5B0CB", + "D7BBD2", + "DAC5D9", + "DED0E1", + "E1DAE8", + "E6E6F0", + ], + 50: [ + "2E214D", + "332651", + "382A56", + "3E305B", + "443460", + "493964", + "4F3D69", + "54426E", + "5B4873", + "614C78", + "68507C", + "6E5480", + "755884", + "7D5C88", + "835F8B", + "8A618E", + "906390", + "966491", + "9D6592", + "A26693", + "A86694", + "AD6795", + "B36795", + "BA6997", + "C06C99", + "C6709C", + "CB74A0", + "D07AA4", + "D37FA8", + "D484AC", + "D589AF", + "D58DB2", + "D492B6", + "D496B9", + "D49ABC", + "D39FBF", + "D3A3C2", + "D4A8C5", + "D4ADC9", + "D5B1CC", + "D6B6CF", + "D7BBD2", + "D9C1D7", + "DAC6DA", + "DCCBDD", + "DED0E1", + "DFD5E4", + "E2DBE9", + "E4E0EC", + "E6E6F0", + ], + }, + "bamako": { + 10: ["00404D", "134B42", "265737", "3A652A", "52741C", "71870B", "969206", "C5AE32", "E7CD68", "FFE599"], + 25: [ + "00404D", + "084449", + "0F4845", + "154C41", + "1C513C", + "235538", + "2B5A34", + "325F2F", + "3A652A", + "436A25", + "4C7020", + "56771A", + "617E14", + "6C840E", + "7A8B06", + "878E03", + "969206", + "A89A14", + "B9A525", + "CBB33A", + "D9BF4F", + "E3C961", + "EDD375", + "F6DC86", + "FFE599", + ], + 50: [ + "00404D", + "04424B", + "074449", + "0B4647", + "0F4845", + "124A43", + "154C41", + "184E3F", + "1C513D", + "1F533B", + "225539", + "265737", + "295A34", + "2D5C32", + "315F30", + "35612D", + "39642B", + "3D6629", + "416926", + "466C24", + "4A6F21", + "4E721F", + "53751C", + "597819", + "5E7C16", + "637F13", + "698210", + "70860C", + "768908", + "7D8C05", + "838E03", + "8A8F03", + "929104", + "999308", + "A1960F", + "AA9B16", + "B2A01E", + "BCA829", + "C5AE32", + "CCB43B", + "D3BA45", + "D9BF4F", + "DFC55A", + "E4CA63", + "E8CF6C", + "EDD375", + "F1D87D", + "F6DD88", + "FBE190", + "FFE599", + ], + }, + "batlow": { + 10: ["011959", "0E365E", "1D5561", "3E6C55", "687B3E", "9B882E", "D59448", "F9A380", "FDB7BD", "FACCFA"], + 25: [ + "011959", + "07255B", + "0B2F5D", + "0F3B5F", + "144660", + "1A5161", + "235C60", + "2F655C", + "3E6C55", + "4E734C", + "5D7844", + "6E7D3B", + "818233", + "93862E", + "AA8C2F", + "BF9038", + "D59448", + "E8995C", + "F49E71", + "FBA689", + "FDADA0", + "FDB4B5", + "FDBCCC", + "FCC4E2", + "FACCFA", + ], + 50: [ + "011959", + "041F5A", + "06245B", + "092A5C", + "0B2F5D", + "0D345E", + "0F3A5F", + "113F60", + "134560", + "164B61", + "195061", + "1D5561", + "215A60", + "28605F", + "2E645C", + "34685A", + "3B6B56", + "426E53", + "4B724E", + "53744A", + "5A7746", + "627941", + "6A7B3D", + "737E38", + "7B8035", + "848332", + "8D852F", + "99882E", + "A38A2E", + "AE8D31", + "B98F35", + "C3913B", + "CF9343", + "D9954B", + "E19755", + "E9995E", + "EF9C69", + "F5A076", + "F9A380", + "FBA68B", + "FDAA96", + "FDADA0", + "FDB1AD", + "FDB5B7", + "FDB9C2", + "FDBCCC", + "FCC0D7", + "FCC4E4", + "FBC8EF", + "FACCFA", + ], + }, + "berlin": { + 10: ["9EB0FF", "5BA4DB", "2D7597", "1A4256", "11191E", "280D01", "501803", "8A3F2A", "C4756A", "FFADAD"], + 25: [ + "9EB0FF", + "85ADF3", + "6CA9E6", + "519FD3", + "3C8EB9", + "317CA1", + "286886", + "21556E", + "1A4256", + "14303E", + "11212A", + "111418", + "190C09", + "240C02", + "310F00", + "3F1201", + "501803", + "65230E", + "7B321C", + "924632", + "A85A4A", + "BC6D61", + "D2837A", + "E79792", + "FFADAD", + ], + 50: [ + "9EB0FF", + "93AFFA", + "87ADF4", + "79ABED", + "6CA9E6", + "60A5DF", + "54A0D5", + "489ACA", + "3E90BC", + "3787AF", + "327EA3", + "2D7597", + "296B8B", + "25607C", + "225771", + "1E4E65", + "1B465A", + "183D4F", + "153342", + "122C38", + "11242E", + "101D25", + "11181C", + "121214", + "160E0D", + "1B0B07", + "210B03", + "270D01", + "2D0E00", + "340F00", + "3B1100", + "421301", + "4B1602", + "541905", + "5D1E09", + "68240F", + "732B16", + "803620", + "8A3F2A", + "944834", + "9E513F", + "A85A4A", + "B46658", + "BE6F63", + "C8796F", + "D2837A", + "DD8D86", + "EA9995", + "F4A3A1", + "FFADAD", + ], + }, + "bilbao": { + 10: ["FFFFFF", "DCDBD9", "C5C0AF", "B9AF8B", "AE946D", "A67A60", "9E6155", "8D4341", "6E2222", "4D0001"], + 25: [ + "FFFFFF", + "F1F1F0", + "E4E4E3", + "D7D7D3", + "CDCBC3", + "C7C3B5", + "C2BCA6", + "BEB699", + "B9AF8B", + "B5A57C", + "B19B72", + "AD906A", + "AA8665", + "A77E62", + "A4745D", + "A26B59", + "9E6155", + "9A564F", + "934B47", + "8A3F3D", + "7E3231", + "732726", + "661A1B", + "5A0E11", + "4D0001", + ], + 50: [ + "FFFFFF", + "F8F8F8", + "F2F2F2", + "EAEAEA", + "E4E4E3", + "DEDEDC", + "D9D8D5", + "D3D2CD", + "CECCC4", + "CAC8BD", + "C7C4B6", + "C5C0AF", + "C2BDA9", + "C0B9A1", + "BEB79A", + "BCB394", + "BAB08D", + "B8AC87", + "B5A77F", + "B3A279", + "B19D74", + "AF9870", + "AE936C", + "AC8E69", + "AB8967", + "A98565", + "A88063", + "A67B60", + "A5775E", + "A4725D", + "A36E5B", + "A16959", + "9F6456", + "9E5F54", + "9C5A51", + "99554E", + "96504B", + "924946", + "8D4341", + "893E3C", + "833837", + "7E3231", + "772B2B", + "722625", + "6C2020", + "661A1B", + "601516", + "590D10", + "530609", + "4D0001", + ], + }, + "broc": { + 10: ["2C1A4C", "284477", "4B76A0", "8BA7C2", "CED9E5", "E8E8D2", "C5C58F", "8D8D56", "555527", "262600"], + 25: [ + "2C1A4C", + "2B2A5D", + "29396C", + "294B7D", + "315E8E", + "436F9B", + "5B82A9", + "7193B5", + "8BA7C2", + "A5BBD0", + "BDCDDC", + "D7E0E9", + "EBEEEC", + "ECECDB", + "E0E0C1", + "D4D4AA", + "C5C58F", + "B0B075", + "9B9B62", + "85854F", + "70703D", + "5D5D2D", + "49491D", + "373810", + "262600", + ], + 50: [ + "2C1A4C", + "2B2154", + "2B295B", + "2A3164", + "29396C", + "284174", + "29497C", + "2A5183", + "305C8C", + "376593", + "416D9A", + "4B76A0", + "567FA6", + "6489AD", + "6F92B3", + "7B9BBA", + "86A3C0", + "92ACC6", + "A0B7CD", + "ACC0D3", + "B8C9DA", + "C4D2E0", + "D0DBE6", + "DEE5EC", + "E7ECED", + "EDEFE9", + "EDEEE1", + "E9E9D4", + "E4E4C8", + "DEDEBD", + "D8D8B1", + "D2D2A5", + "C9C996", + "C1C18A", + "B8B87E", + "AEAE73", + "A3A369", + "97975E", + "8D8D56", + "83834D", + "797945", + "70703D", + "646434", + "5B5B2C", + "525224", + "49491D", + "404016", + "36360F", + "2E2E08", + "262600", + ], + }, + "buda": { + 10: ["B301B3", "B32B9E", "B94892", "C2618A", "CA7982", "D1917B", "D7AA75", "DDC36F", "E5DF68", "FFFF66"], + 25: [ + "B301B3", + "B316A9", + "B323A2", + "B32F9C", + "B53A97", + "B84494", + "BC4E90", + "BF578D", + "C2618A", + "C56A87", + "C87384", + "CB7C81", + "CD857E", + "D08E7C", + "D2977A", + "D4A077", + "D7AA75", + "D9B473", + "DBBD70", + "DEC76E", + "E0D16B", + "E3DB69", + "E9E667", + "F2F266", + "FFFF66", + ], + 50: [ + "B301B3", + "B30BAE", + "B314AA", + "B31CA6", + "B323A2", + "B3289F", + "B32E9D", + "B4339A", + "B53998", + "B63E96", + "B84394", + "B94892", + "BB4C91", + "BD528F", + "BE568D", + "C05B8C", + "C15F8A", + "C36389", + "C46987", + "C66D86", + "C77184", + "C97583", + "CA7982", + "CB7E80", + "CD837F", + "CE877E", + "CF8B7D", + "D0917B", + "D1957A", + "D29979", + "D49E78", + "D5A277", + "D6A776", + "D7AC75", + "D8B073", + "D9B572", + "DAB971", + "DCBF70", + "DDC36F", + "DEC86E", + "DFCC6C", + "E0D16B", + "E2D76A", + "E4DC69", + "E6E168", + "E9E667", + "EDEC67", + "F3F366", + "F9F966", + "FFFF66", + ], + }, + "cork": { + 10: ["2C1A4C", "2A4375", "48729E", "84A1BE", "C3D2DF", "CDE1CF", "95C199", "5E9F62", "407027", "424D03"], + 25: [ + "2C1A4C", + "2B295C", + "2A386B", + "2A497B", + "325B8B", + "416C99", + "577EA6", + "6C8FB2", + "84A1BE", + "9DB4CB", + "B3C6D7", + "CBD8E3", + "DBE6E5", + "D4E5D7", + "BFDAC2", + "ABCEAE", + "95C199", + "7FB483", + "6BA870", + "569959", + "478741", + "41762E", + "41661D", + "425A10", + "424D03", + ], + 50: [ + "2C1A4C", + "2C2153", + "2B285B", + "2A3163", + "2A386B", + "2A3F72", + "2A477A", + "2C4F81", + "31598A", + "376291", + "3F6A97", + "48729E", + "527BA4", + "5F85AB", + "6A8DB0", + "7596B6", + "809EBC", + "8BA7C2", + "98B1C9", + "A3B9CF", + "AFC2D5", + "BACBDB", + "C5D3E0", + "D1DDE5", + "D8E4E6", + "DBE7E3", + "D8E7DC", + "CFE2D1", + "C5DDC8", + "BBD7BE", + "B1D1B4", + "A7CBAA", + "9BC49E", + "91BE95", + "87B98B", + "7DB381", + "73AD78", + "67A56C", + "5E9F62", + "559857", + "4D904C", + "478741", + "427D35", + "41752C", + "406D24", + "41661D", + "416017", + "42580F", + "425208", + "424D03", + ], + }, + "davos": { + 10: ["00054A", "112C71", "295291", "43709D", "5E8598", "79968D", "99AD88", "C9D29E", "F3F3D2", "FEFEFE"], + 25: [ + "00054A", + "05165A", + "0C2368", + "143277", + "1D4084", + "254D8E", + "2F5A96", + "39659B", + "43709D", + "4E799D", + "57809B", + "628797", + "6C8E93", + "75948F", + "809B8B", + "8BA388", + "99AD88", + "A9B98B", + "BBC794", + "D0D8A4", + "E3E7B8", + "EFF0CB", + "F7F7DE", + "FCFBEE", + "FEFEFE", + ], + 50: [ + "00054A", + "010E51", + "041459", + "081C61", + "0C2368", + "102A6F", + "133075", + "17377C", + "1C3F83", + "204588", + "244C8D", + "295291", + "2D5895", + "335F98", + "38649A", + "3C699C", + "416E9D", + "46729D", + "4C779D", + "517B9C", + "567F9B", + "5A829A", + "5F8598", + "658996", + "698C94", + "6E8F92", + "739290", + "78968D", + "7D998C", + "829D8A", + "88A089", + "8DA488", + "95AA87", + "9BAF88", + "A3B489", + "ABBB8C", + "B4C190", + "BFCA96", + "C9D29E", + "D2D9A6", + "DBE0AF", + "E3E7B8", + "EBEDC4", + "F0F1CD", + "F4F4D6", + "F7F7DE", + "FAF9E6", + "FCFCF0", + "FDFDF7", + "FEFEFE", + ], + }, + "devon": { + 10: ["2C1A4C", "293467", "275186", "3669AD", "6181D0", "989BE7", "BAB3F1", "D0CCF5", "E8E5FA", "FFFFFF"], + 25: [ + "2C1A4C", + "2B2457", + "2A2D60", + "29386A", + "274275", + "274D81", + "29588F", + "2E619D", + "3669AD", + "4272BC", + "537BC9", + "6985D4", + "7E8FDD", + "9197E4", + "A3A1EA", + "AFAAEE", + "BAB3F1", + "C2BDF3", + "CAC6F4", + "D3CFF6", + "DCD9F8", + "E4E2FA", + "EDECFB", + "F6F5FD", + "FFFFFF", + ], + 50: [ + "2C1A4C", + "2B1E51", + "2B2356", + "2A295B", + "2A2D60", + "293265", + "29376A", + "283B6E", + "274174", + "27467A", + "274C7F", + "275186", + "28568C", + "2A5C95", + "2D609C", + "3064A3", + "3468AA", + "396BB1", + "3F70B9", + "4774C0", + "4F79C6", + "597DCC", + "6382D1", + "6F88D7", + "798CDB", + "8290DF", + "8C95E2", + "969AE6", + "9E9EE9", + "A6A3EB", + "ACA7ED", + "B1ACEF", + "B7B1F0", + "BBB5F1", + "BFB9F2", + "C3BEF3", + "C7C2F4", + "CCC7F4", + "D0CCF5", + "D4D0F6", + "D8D4F7", + "DCD9F8", + "E1DEF9", + "E5E3FA", + "E9E7FB", + "EDECFB", + "F2F0FC", + "F7F6FD", + "FBFAFE", + "FFFFFF", + ], + }, + "grayC": { + 10: ["FFFFFF", "E0E0E0", "C0C0C0", "A2A2A2", "858585", "696969", "4E4E4E", "353535", "1D1D1D", "000000"], + 25: [ + "FFFFFF", + "F3F3F3", + "E7E7E7", + "DBDBDB", + "CFCFCF", + "C4C4C4", + "B8B8B8", + "AEAEAE", + "A2A2A2", + "979797", + "8C8C8C", + "818181", + "767676", + "6D6D6D", + "626262", + "595959", + "4E4E4E", + "444444", + "3C3C3C", + "323232", + "292929", + "212121", + "181818", + "0F0F0F", + "000000", + ], + 50: [ + "FFFFFF", + "F9F9F9", + "F4F4F4", + "EDEDED", + "E7E7E7", + "E2E2E2", + "DCDCDC", + "D7D7D7", + "D0D0D0", + "CBCBCB", + "C5C5C5", + "C0C0C0", + "BABABA", + "B4B4B4", + "AFAFAF", + "A9A9A9", + "A4A4A4", + "9F9F9F", + "999999", + "949494", + "8F8F8F", + "898989", + "848484", + "7E7E7E", + "797979", + "747474", + "707070", + "6A6A6A", + "656565", + "606060", + "5B5B5B", + "575757", + "515151", + "4D4D4D", + "484848", + "434343", + "3F3F3F", + "3A3A3A", + "353535", + "313131", + "2D2D2D", + "292929", + "242424", + "202020", + "1C1C1C", + "181818", + "141414", + "0E0E0E", + "070707", + "000000", + ], + }, + "hawaii": { + 10: ["8C0273", "922A59", "964742", "996330", "9D831E", "97A92A", "80C55F", "66D89C", "6CEBDB", "B3F2FD"], + 25: [ + "8C0273", + "8F1668", + "91235F", + "922E55", + "94394D", + "954345", + "974E3E", + "985737", + "996330", + "9B6F28", + "9C7A22", + "9D881D", + "9C961C", + "99A424", + "92B135", + "8ABC48", + "80C55F", + "75CD76", + "6CD48C", + "63DBA5", + "5FE2BD", + "66E8D3", + "7AEEE7", + "95F1F4", + "B3F2FD", + ], + 50: [ + "8C0273", + "8E0D6E", + "8F1569", + "901D63", + "91235F", + "91285A", + "922D56", + "933252", + "94384D", + "943D4A", + "954246", + "964742", + "964C3F", + "97523B", + "985638", + "985C34", + "996131", + "9A662E", + "9B6C2A", + "9B7226", + "9C7823", + "9C7E20", + "9D841E", + "9D8C1C", + "9C921C", + "9B991D", + "9AA021", + "97A828", + "94AE30", + "91B439", + "8CB942", + "88BE4C", + "82C359", + "7EC663", + "79CA6E", + "74CE79", + "70D183", + "6AD591", + "66D89C", + "62DCA7", + "60DFB2", + "5FE2BD", + "61E6CA", + "67E9D5", + "6FEBDE", + "7AEEE7", + "87EFEE", + "98F1F5", + "A6F1F9", + "B3F2FD", + ], + }, + "imola": { + 10: ["1A33B3", "2446A9", "2E599F", "396B94", "497B85", "60927B", "7BAE74", "98CB6D", "C4EA67", "FFFF66"], + 25: [ + "1A33B3", + "1E3BAF", + "2242AB", + "2549A8", + "2950A4", + "2C57A1", + "305E9D", + "346499", + "396B94", + "3F718E", + "457789", + "4C7E83", + "54867F", + "5C8F7C", + "679979", + "70A377", + "7BAE74", + "86B971", + "91C36F", + "9DCF6C", + "ACDB69", + "BDE667", + "D3F066", + "E8F766", + "FFFF66", + ], + 50: [ + "1A33B3", + "1C37B1", + "1E3AAF", + "203EAD", + "2242AB", + "2345AA", + "2548A8", + "274CA6", + "2950A4", + "2A53A3", + "2C56A1", + "2E599F", + "2F5D9E", + "32609B", + "346499", + "366797", + "386A95", + "3B6C92", + "3E708F", + "41738C", + "44768A", + "467987", + "4A7C85", + "4E8082", + "518480", + "56887E", + "5A8C7D", + "5F927B", + "64967A", + "689B79", + "6DA078", + "72A576", + "78AB75", + "7DB074", + "82B572", + "87BA71", + "8CBF70", + "93C66E", + "98CB6D", + "9ED06C", + "A4D66A", + "ACDB69", + "B5E268", + "BFE767", + "C8EB67", + "D3F066", + "DDF466", + "EAF866", + "F5FB66", + "FFFF66", + ], + }, + "lajolla": { + 10: ["FFFFCC", "FBEC9A", "F4CC68", "ECA855", "E48751", "D2624D", "A54742", "73382F", "422818", "1A1A01"], + 25: [ + "FFFFCC", + "FEF8B8", + "FDF1A6", + "FBE992", + "F8DE7E", + "F5D26D", + "F2C360", + "EFB558", + "ECA855", + "E99B53", + "E68F52", + "E38251", + "DE744F", + "D6674E", + "C8594B", + "B84F47", + "A54742", + "91413C", + "7F3B34", + "6C362C", + "593023", + "492A1B", + "372513", + "291F0C", + "1A1A01", + ], + 50: [ + "FFFFCC", + "FFFCC3", + "FEF9BA", + "FDF5AF", + "FDF1A6", + "FCEE9D", + "FBEA94", + "FAE58B", + "F8DF80", + "F7D977", + "F6D36F", + "F4CC68", + "F2C562", + "F1BD5C", + "EFB759", + "EEB057", + "ECAA55", + "EBA454", + "EA9D53", + "E89752", + "E79152", + "E68C51", + "E48651", + "E27E50", + "DF7850", + "DD724F", + "D96B4E", + "D3634D", + "CD5D4C", + "C5574A", + "BD5248", + "B54D46", + "AA4944", + "A14641", + "98433E", + "8F403B", + "863E37", + "7B3A33", + "73382F", + "6A352B", + "613227", + "593023", + "4F2C1E", + "472A1A", + "3F2717", + "372513", + "302210", + "271F0B", + "201C06", + "1A1A01", + ], + }, + "lapaz": { + 10: ["1A0C64", "232D7B", "2A4C8F", "36679D", "4C80A3", "6E95A1", "94A298", "BFB199", "EFD3C0", "FEF2F3"], + 25: [ + "1A0C64", + "1E1A6D", + "212675", + "24327E", + "263D86", + "29488C", + "2D5393", + "305D98", + "36679D", + "3D71A0", + "457AA2", + "5084A4", + "5C8CA3", + "6893A2", + "77999F", + "859E9C", + "94A298", + "A4A795", + "B3AC96", + "C7B59C", + "DAC1A8", + "EACEB9", + "F5DBCD", + "FBE7DF", + "FEF2F3", + ], + 50: [ + "1A0C64", + "1C1368", + "1E196D", + "202071", + "212675", + "222B79", + "23317D", + "253681", + "263C85", + "274189", + "29478C", + "2A4C8F", + "2C5192", + "2E5795", + "305C98", + "32609A", + "35659C", + "386A9E", + "3C70A0", + "3F74A1", + "4379A2", + "487DA3", + "4D81A3", + "5386A4", + "588AA3", + "5E8EA3", + "6591A2", + "6C95A1", + "7398A0", + "7A9A9E", + "809D9D", + "879F9B", + "90A199", + "97A397", + "9EA596", + "A5A795", + "ADAA95", + "B7AD96", + "BFB199", + "C8B69C", + "D2BBA2", + "DAC1A8", + "E4C9B2", + "EBCFBB", + "F1D5C4", + "F5DBCD", + "F9E1D6", + "FBE8E1", + "FDEDEA", + "FEF2F3", + ], + }, + "lisbon": { + 10: ["E6E5FF", "9BAFD3", "5177A4", "1E4368", "111E2C", "27251A", "575134", "8D8556", "C9C390", "FFFFD9"], + 25: [ + "E6E5FF", + "C8D0ED", + "ADBCDE", + "90A7CC", + "7492BB", + "5B7FAB", + "416A97", + "2D5782", + "1E4368", + "16334F", + "12253A", + "121B25", + "171919", + "212018", + "322F1F", + "433F28", + "575134", + "6B6540", + "7F784C", + "968D5C", + "ADA470", + "C1BA87", + "D7D2A2", + "EAE7BC", + "FFFFD9", + ], + 50: [ + "E6E5FF", + "D8DCF7", + "CBD2EF", + "BBC6E5", + "ADBCDE", + "A0B3D6", + "93A9CE", + "86A0C6", + "7794BD", + "6A8BB5", + "5E81AC", + "5177A4", + "456E9B", + "38628F", + "2F5984", + "274F78", + "20476D", + "1B3F61", + "173653", + "142E48", + "12283E", + "112233", + "111D2A", + "121921", + "15181B", + "181A18", + "1E1D17", + "252419", + "2D2B1C", + "353220", + "3E3A25", + "46422A", + "514C31", + "5A5536", + "645E3C", + "6D6741", + "777047", + "837B4F", + "8D8556", + "988F5E", + "A29A67", + "ADA470", + "B9B17D", + "C3BC89", + "CDC795", + "D7D2A2", + "E0DCAF", + "ECE9BE", + "F5F4CB", + "FFFFD9", + ], + }, + "nuuk": { + 10: ["05598C", "296284", "4A7283", "6F878D", "929C96", "ABAD96", "BAB98D", "C7C684", "E0E08E", "FEFEB2"], + 25: [ + "05598C", + "175C88", + "226085", + "2D6483", + "396982", + "456F82", + "537785", + "607E88", + "6F878D", + "7D8F91", + "8A9795", + "969E97", + "A1A698", + "A9AB97", + "B0B194", + "B5B591", + "BAB98D", + "BEBE89", + "C3C285", + "C9C983", + "D2D184", + "DCDB8A", + "E8E895", + "F3F3A3", + "FEFEB2", + ], + 50: [ + "05598C", + "0E5B8B", + "155C89", + "1C5E87", + "226085", + "276184", + "2C6383", + "326682", + "386982", + "3E6C82", + "446F82", + "4A7283", + "517584", + "587A86", + "5F7D88", + "66818A", + "6C858C", + "73898E", + "7B8E91", + "819192", + "879594", + "8D9996", + "939C97", + "99A097", + "9EA498", + "A2A798", + "A6AA97", + "ABAD96", + "AEAF95", + "B1B194", + "B3B492", + "B6B690", + "B8B88E", + "BABA8C", + "BDBC8A", + "BFBE88", + "C1C187", + "C4C385", + "C7C684", + "CAC983", + "CDCD83", + "D2D184", + "D7D787", + "DDDD8B", + "E3E290", + "E8E895", + "EEEE9C", + "F4F4A4", + "F9F9AB", + "FEFEB2", + ], + }, + "oleron": { + 10: ["1A2659", "455285", "7784B7", "AAB7E8", "D3E0FA", "3C5600", "7A711F", "B79A5E", "F1CEA4", "FDFDE6"], + 25: [ + "1A2659", + "2B376A", + "3A477A", + "4C598C", + "5E6B9E", + "707DB0", + "8390C3", + "96A2D5", + "AAB7E8", + "BCC9F3", + "CAD6F8", + "D8E5FC", + "1A4C00", + "335400", + "4B5B01", + "606309", + "7A711F", + "928037", + "A88F4E", + "C1A167", + "D9B581", + "ECC79A", + "F6DAB5", + "F9EACC", + "FDFDE6", + ], + 50: [ + "1A2659", + "212E61", + "293568", + "323F72", + "3A477A", + "424F82", + "4A578A", + "535F92", + "5D699C", + "6572A5", + "6E7BAE", + "7784B7", + "808DC0", + "8B97CA", + "94A1D3", + "9DAADC", + "A6B3E5", + "AFBCEC", + "B9C6F2", + "C0CDF5", + "C7D4F7", + "CEDAF9", + "D4E1FB", + "DCE9FD", + "E3F0FE", + "1F4E00", + "2C5100", + "3A5600", + "445900", + "4F5C02", + "5A6005", + "65660C", + "736D18", + "7E7423", + "8A7B2E", + "94823A", + "9F8945", + "AC9253", + "B79A5E", + "C3A36A", + "CEAC75", + "D9B581", + "E5C090", + "EDC99D", + "F2D2A9", + "F6DAB5", + "F8E2C0", + "FAECCE", + "FBF4DA", + "FDFDE6", + ], + }, + "oslo": { + 10: ["010101", "0D1B29", "133251", "1F4C7B", "3869A8", "658AC7", "89A0CA", "AAB6CA", "D4D6DB", "FFFFFF"], + 25: [ + "010101", + "070D15", + "0C1620", + "0E1E2E", + "10263D", + "122F4B", + "15395B", + "19426A", + "1F4C7B", + "26578C", + "30619C", + "3E6DAE", + "507BBC", + "6086C5", + "6F90C9", + "7B98CA", + "89A0CA", + "96A9C9", + "A2B0CA", + "B0BACB", + "BFC5CF", + "CED1D7", + "DEE0E2", + "EEEEEF", + "FFFFFF", + ], + 50: [ + "010101", + "04070B", + "060C13", + "0A121B", + "0C1620", + "0D1927", + "0E1D2D", + "0F2133", + "10263C", + "112A43", + "122E4A", + "133251", + "153758", + "173C61", + "194169", + "1B4670", + "1E4A78", + "214F80", + "255589", + "295A91", + "2E5F99", + "3364A1", + "3A6AA9", + "4371B2", + "4B77B9", + "537DBE", + "5B83C3", + "6489C6", + "6B8EC8", + "7292C9", + "7896C9", + "7E9ACA", + "859ECA", + "8BA2C9", + "91A6C9", + "97A9C9", + "9DADC9", + "A4B2CA", + "AAB6CA", + "B1BBCB", + "B8BFCD", + "BFC5CF", + "C7CCD3", + "CFD2D8", + "D7D9DD", + "DEE0E2", + "E6E7E9", + "EFF0F1", + "F7F7F8", + "FFFFFF", + ], + }, + "roma": { + 10: ["7F1900", "9D5918", "B99333", "D9CF6D", "DFEAB2", "A9E4D5", "61BDD3", "428CBF", "2F5EAB", "1A3399"], + 25: [ + "7F1900", + "8B3509", + "964B12", + "A1611C", + "AC7625", + "B58A2E", + "C1A23C", + "CDB84F", + "D9CF6D", + "E1DF8B", + "E2E7A3", + "DBEBB9", + "CAEBC9", + "B3E7D3", + "95DDD7", + "7AD0D7", + "61BDD3", + "52AACC", + "4898C5", + "4085BD", + "3874B5", + "3264AE", + "2B53A7", + "2444A0", + "1A3399", + ], + 50: [ + "7F1900", + "842705", + "8A3308", + "91400E", + "964B12", + "9B5516", + "A05F1B", + "A5691F", + "AB7424", + "AF7E28", + "B4882D", + "B99333", + "BF9D39", + "C5AB43", + "CBB64D", + "D1C159", + "D7CC67", + "DCD575", + "E0DD86", + "E2E293", + "E3E69F", + "E1E9AA", + "DEEAB4", + "D7EBBE", + "D0EBC5", + "C6EBCB", + "BBE9D0", + "ABE5D4", + "9EE1D7", + "8FDBD8", + "82D4D8", + "75CCD6", + "67C2D4", + "5EBAD1", + "57B1CE", + "50A8CB", + "4B9FC7", + "4695C3", + "428CBF", + "3F84BC", + "3B7CB8", + "3874B5", + "346AB1", + "3162AD", + "2E5AAA", + "2B53A7", + "274BA3", + "2342A0", + "1F3B9C", + "1A3399", + ], + }, + "tofino": { + 10: ["DED9FF", "93A4DE", "4A6BAC", "273C65", "121926", "122214", "244D28", "3F8144", "88B970", "DBE69B"], + 25: [ + "DED9FF", + "C0C4F2", + "A6B1E6", + "889DD9", + "6B87CA", + "5373B6", + "3E5E9A", + "324D80", + "273C65", + "1D2D4A", + "162034", + "101620", + "0D1613", + "101E12", + "152C18", + "1C3B1F", + "244D28", + "2D6132", + "37733C", + "468949", + "5FA059", + "7CB369", + "9DC57B", + "BAD48A", + "DBE69B", + ], + 50: [ + "DED9FF", + "D0CFF9", + "C3C6F3", + "B3BBEC", + "A6B1E6", + "98A8E1", + "8B9FDB", + "7E95D4", + "6E89CB", + "617FC3", + "5575B8", + "4A6BAC", + "4262A0", + "395790", + "334F83", + "2E4776", + "293F6A", + "24385D", + "1F304F", + "1B2943", + "172338", + "141D2E", + "111824", + "0F151B", + "0D1516", + "0D1712", + "0F1B12", + "112113", + "142716", + "162F19", + "1A361C", + "1D3E20", + "224825", + "26512A", + "2A5A2E", + "2E6233", + "336C38", + "39773E", + "3F8144", + "488B4A", + "529551", + "5FA059", + "70AB63", + "7FB46B", + "8EBD73", + "9DC57B", + "ACCD83", + "BDD68C", + "CCDE94", + "DBE69B", + ], + }, + "tokyo": { + 10: ["1A0E34", "45204C", "6E3E67", "855E78", "8D7982", "929489", "97AE91", "A7CE9D", "D5F2BC", "FEFED8"], + 25: [ + "1A0E34", + "2B143D", + "3A1A46", + "4B2350", + "5C2E5A", + "693964", + "76466C", + "7E5273", + "855E78", + "89697D", + "8C7380", + "8E7D83", + "908786", + "919088", + "939A8B", + "95A48E", + "97AE91", + "9BB994", + "A1C599", + "ACD3A0", + "BCE2AB", + "CEEEB7", + "E1F7C4", + "F0FCCE", + "FEFED8", + ], + 50: [ + "1A0E34", + "221138", + "2A143C", + "331741", + "3A1A46", + "421E4A", + "4A224F", + "512754", + "5A2D59", + "61325E", + "683863", + "6E3E67", + "74446B", + "7A4B6F", + "7E5172", + "815775", + "845C77", + "86617A", + "88677C", + "8A6C7E", + "8B717F", + "8C7681", + "8D7A82", + "8E8084", + "8F8485", + "908986", + "918D88", + "929389", + "92988A", + "939C8C", + "94A18D", + "95A58E", + "96AB90", + "98B091", + "99B593", + "9BBB95", + "9EC097", + "A2C79A", + "A7CE9D", + "ADD4A1", + "B4DBA6", + "BCE2AB", + "C7EAB2", + "D0EFB8", + "D9F3BE", + "E1F7C4", + "E9FAC9", + "F1FCCF", + "F8FDD4", + "FEFED8", + ], + }, + "turku": { + 10: ["000000", "242420", "424235", "5F5F44", "7E7C52", "A99965", "CFA67C", "EAAD98", "FCC7C3", "FFE6E6"], + 25: [ + "000000", + "121211", + "1D1D1A", + "282823", + "34332C", + "3E3E33", + "49493A", + "54533F", + "5F5F44", + "6B6A49", + "76744E", + "838054", + "938C5B", + "A29562", + "B39E6B", + "C2A373", + "CFA67C", + "DBA885", + "E4AA8F", + "EEB09E", + "F6B9AE", + "FBC3BD", + "FECFCC", + "FFDAD9", + "FFE6E6", + ], + 50: [ + "000000", + "090908", + "111110", + "181816", + "1D1D1A", + "22221F", + "272723", + "2C2C27", + "33322B", + "38382F", + "3D3D32", + "424235", + "474738", + "4E4D3C", + "53523E", + "585841", + "5D5D43", + "626246", + "686848", + "6E6D4B", + "73724D", + "797750", + "7F7D52", + "878356", + "8E8859", + "968E5C", + "9D9360", + "A79864", + "AF9C68", + "B69F6C", + "BEA270", + "C4A474", + "CCA579", + "D1A67D", + "D7A781", + "DBA886", + "E0A98B", + "E6AB92", + "EAAD98", + "EFB09F", + "F2B4A7", + "F6B9AE", + "F9BFB7", + "FBC4BF", + "FDC9C6", + "FECFCC", + "FED4D3", + "FFDBDA", + "FFE0E0", + "FFE6E6", + ], + }, + "vik": { + 10: ["001261", "033E7D", "1E6F9D", "71A8C4", "C9DDE7", "EACEBD", "D39774", "BE6533", "8B2706", "590008"], + 25: [ + "001261", + "02236C", + "023376", + "034481", + "06568C", + "156798", + "307DA6", + "4E92B4", + "71A8C4", + "94BED2", + "B3D1DF", + "D5E3E9", + "ECE5E0", + "EDD5C8", + "E4BFAA", + "DCAC90", + "D39774", + "CB835A", + "C37243", + "BA5E2A", + "A94512", + "942F06", + "7E1D06", + "6C0E07", + "590008", + ], + 50: [ + "001261", + "011A66", + "02226B", + "022B71", + "023376", + "023A7B", + "034280", + "034A85", + "06548B", + "0B5D91", + "136697", + "1E6F9D", + "2B79A4", + "3C85AC", + "4B90B3", + "5A9ABA", + "6AA4C1", + "7AAEC8", + "8DBAD0", + "9DC4D6", + "ADCDDD", + "BDD6E3", + "CCDFE8", + "DEE6E9", + "E8E7E5", + "EEE3DC", + "EEDBD0", + "EBD0C0", + "E7C6B2", + "E3BCA5", + "DFB298", + "DBA88B", + "D69D7C", + "D29470", + "CE8B64", + "CA8258", + "C6794C", + "C26E3F", + "BE6533", + "B85C28", + "B2511D", + "A94512", + "9C3709", + "912D06", + "872406", + "7E1D06", + "741506", + "6A0D07", + "620607", + "590008", + ], + }, +} diff --git a/geeView.py b/geeView.py index d080cd2..d9c4a65 100644 --- a/geeView.py +++ b/geeView.py @@ -161,19 +161,17 @@ def robustInitializer(): robustInitializer() ###################################################################### # Set up GEE and paths -# robustInitializer() geeVizFolder = "geeViz" geeViewFolder = "geeView" + # Set up template web viewer # Do not change cwd = os.getcwd() paths = sys.path -# gee_py_modules_dir = site.getsitepackages()[-1] -# py_viz_dir = os.path.join(gee_py_modules_dir,geeVizFolder) py_viz_dir = os.path.dirname(__file__) -# os.chdir(py_viz_dir) + print("geeViz package folder:", py_viz_dir) # Specify location of files to run @@ -186,13 +184,11 @@ def robustInitializer(): ###################################################################### ###################################################################### # Functions - - ###################################################################### # Linear color gradient functions ############################################################## ############################################################## -def color_dict_maker(gradient): +def color_dict_maker(gradient: list[list[int]]) -> dict: """Takes in a list of RGB sub-lists and returns dictionary of colors in RGB and hex form for use in a graphing function defined later on""" @@ -205,7 +201,7 @@ def color_dict_maker(gradient): # color functions adapted from bsou.io/posts/color-gradients-with-python -def hex_to_rgb(value): +def hex_to_rgb(value: str) -> tuple: """Return (red, green, blue) for the color given as #rrggbb.""" value = value.lstrip("#") lv = len(value) @@ -216,14 +212,14 @@ def hex_to_rgb(value): return tuple(int(value[i : i + lv // 3], 16) for i in range(0, lv, lv // 3)) -def RGB_to_hex(RGB): +def RGB_to_hex(RGB: list[int]) -> str: """[255,255,255] -> "#FFFFFF" """ # Components need to be integers for hex to make sense RGB = [int(x) for x in RGB] return "#" + "".join(["0{0:x}".format(v) if v < 16 else "{0:x}".format(v) for v in RGB]) -def linear_gradient(start_hex, finish_hex="#FFFFFF", n=10): +def linear_gradient(start_hex: str, finish_hex: str = "#FFFFFF", n: int = 10) -> dict: """returns a gradient list of (n) colors between two hex colors. start_hex and finish_hex should be the full six-digit color string, @@ -244,20 +240,18 @@ def linear_gradient(start_hex, finish_hex="#FFFFFF", n=10): return color_dict_maker(RGB_list) -def polylinear_gradient(colors, n): +def polylinear_gradient(colors: list[str], n: int): """returns a list of colors forming linear gradients between all sequential pairs of colors. "n" specifies the total number of desired output colors""" # The number of colors per individual linear gradient n_out = int(float(n) / (len(colors) - 1)) + 1 - # print(('n',n)) - # print(('n_out',n_out)) + # If we don't have an even number of color values, we will remove equally spaced values at the end. apply_offset = False if n % n_out != 0: apply_offset = True n_out = n_out + 1 - # print(('new n_out',n_out)) # returns dictionary defined by color_dict() gradient_dict = linear_gradient(colors[0], colors[1], n_out) @@ -271,24 +265,19 @@ def polylinear_gradient(colors, n): # Remove equally spaced values here. if apply_offset: - # indList = list(range(len(gradient_dict['hex']))) offset = len(gradient_dict["hex"]) - n sliceval = [] - # print(('len(gradient_dict)',len(gradient_dict['hex']))) - # print(('offset',offset)) for i in range(1, offset + 1): sliceval.append(int(len(gradient_dict["hex"]) * i / float(offset + 2))) - print(gradient_dict["hex"]) - print(("sliceval", sliceval)) + for k in ("hex", "r", "g", "b"): gradient_dict[k] = [i for j, i in enumerate(gradient_dict[k]) if j not in sliceval] - # print(('new len dict', len(gradient_dict['hex']))) - print(gradient_dict["hex"], len(gradient_dict["hex"])) + return gradient_dict -def get_poly_gradient_ct(palette, min, max): +def get_poly_gradient_ct(palette: list[str], min: int, max: int) -> list[str]: """ Take a palette and a set of min and max stretch values to get a 1:1 value to color hex list @@ -301,14 +290,17 @@ def get_poly_gradient_ct(palette, min, max): Returns: list: A list of linearly interpolated hex codes where there is 1:1 color to value from min-max (inclusive) + + >>> import geeViz.geeView as gv + >>> viz = {"palette": ["#FFFF00", "00F", "0FF", "FF0000"], "min": 1, "max": 20} + >>> color_ramp = gv.get_poly_gradient_ct(viz["palette"], viz["min"], viz["max"]) + >>> print("Color ramp:", color_ramp) + """ ramp = polylinear_gradient(palette, max - min + 1) return ramp["hex"] -# print(get_poly_gradient_ct(["#FFFF00", "00F", "0FF", "FF0000"], 1, 2)) - - ############################################################## ###################################################################### # Function to check if being run inside a notebook @@ -398,7 +390,7 @@ def serviceAccountToken(service_key_file_path): ###################################################################### # Function for running local web server -def run_local_server(port=8001): +def run_local_server(port: int = 8001): """ Start a local webserver using the Python http.server @@ -424,7 +416,7 @@ def run_local_server(port=8001): ###################################################################### # Function to see if port is active -def isPortActive(port=8001): +def isPortActive(port: int = 8001): """ See if a given port number is currently active @@ -468,7 +460,7 @@ class mapper: turnOffLayersWhenTimeLapseIsOn (bool, default True): Whether all other layers should be turned off when a time lapse is turned on. This is set to True by default to avoid confusing layer order rendering that can occur when time lapses and non-time lapses are visible at the same time. Often this confusion is fine and visualizing time lapses and other layers is desired. Set `Map.turnOffLayersWhenTimeLapseIsOn` to False in this instance. """ - def __init__(self, port=8001): + def __init__(self, port: int = 8001): self.port = port self.layerNumber = 1 self.idDictList = [] @@ -502,7 +494,7 @@ def __init__(self, port=8001): ###################################################################### # Function for adding a layer to the map - def addLayer(self, image, viz={}, name=None, visible=True): + def addLayer(self, image: ee.Image | ee.ImageCollection | ee.Geometry | ee.Feature | ee.FeatureCollection, viz: dict = {}, name: str | None = None, visible: bool = True): """ Adds GEE object to the mapper object that will then be added to the map user interface with a `view` call. @@ -600,10 +592,13 @@ def addLayer(self, image, viz={}, name=None, visible=True): """ if name == None: - name = "Layer " + str(self.layerNumber) + name = f"Layer {self.layerNumber}" self.layerNumber += 1 print("Adding layer: " + name) + # Make sure not to update viz dictionary elsewhere + viz = dict(viz) + # Handle reducer if ee object is given if "reducer" in viz.keys(): @@ -632,7 +627,7 @@ def addLayer(self, image, viz={}, name=None, visible=True): imageType = type(image).__name__ layerType = self.typeLookup[imageType] viz["layerType"] = layerType - # print("Type:", imageType, viz["layerType"]) + if not isinstance(image, dict): image = image.serialize() idDict["item"] = image @@ -651,7 +646,7 @@ def addLayer(self, image, viz={}, name=None, visible=True): ###################################################################### # Function for adding a layer to the map - def addTimeLapse(self, image, viz={}, name=None, visible=True): + def addTimeLapse(self, image: ee.ImageCollection, viz: dict = {}, name: str | None = None, visible: bool = True): """ Adds GEE ImageCollection object to the mapper object that will then be added as an interactive time lapse in the map user interface with a `view` call. @@ -752,6 +747,9 @@ def addTimeLapse(self, image, viz={}, name=None, visible=True): self.layerNumber += 1 print("Adding layer: " + name) + # Make sure not to update viz dictionary elsewhere + viz = dict(viz) + # Handle reducer if ee object is given - delete it if "reducer" in viz.keys(): del viz["reducer"] @@ -780,7 +778,7 @@ def addTimeLapse(self, image, viz={}, name=None, visible=True): ###################################################################### # Function for adding a select layer to the map - def addSelectLayer(self, featureCollection, viz={}, name=None): + def addSelectLayer(self, featureCollection: ee.FeatureCollection, viz: dict = {}, name: str | None = None): """ Adds GEE featureCollection to the mapper object that will then be added as an interactive selection layer in the map user interface with a `view` call. This layer will be availble for selecting areas to include in area summary charts. @@ -814,6 +812,10 @@ def addSelectLayer(self, featureCollection, viz={}, name=None): if name == None: name = "Layer " + str(self.layerNumber) self.layerNumber += 1 + + # Make sure not to update viz dictionary elsewhere + viz = dict(viz) + print("Adding layer: " + name) # Get the id and populate dictionary @@ -828,7 +830,7 @@ def addSelectLayer(self, featureCollection, viz={}, name=None): ###################################################################### # Function for centering on a GEE object that has a geometry - def setCenter(self, lng, lat, zoom=None): + def setCenter(self, lng: float, lat: float, zoom: int | None = None): """ Center the map on a specified point and optional zoom on loading @@ -836,6 +838,10 @@ def setCenter(self, lng, lat, zoom=None): lng (int or float): The longitude to center the map on lat (int or float): The latitude to center the map on zoom (int, optional): If provided, will force the map to zoom to this level after centering it on the provided coordinates. If not provided, the current zoom level will be used. + + >>> from geeViz.geeView import * + >>> Map.setCenter(-111,41,10) + >>> Map.view() """ command = f"Map.setCenter({lng},{lat},{json.dumps(zoom)})" @@ -844,24 +850,35 @@ def setCenter(self, lng, lat, zoom=None): ###################################################################### # Function for setting the map zoom - def setZoom(self, zoom): + def setZoom(self, zoom: int): """ Set the map zoom level Args: zoom (int): The zoom level to set the map to on loading. + + >>> from geeViz.geeView import * + >>> Map.setZoom(10) + >>> Map.view() """ self.mapCommandList.append(f"map.setZoom({zoom})") ###################################################################### # Function for centering on a GEE object that has a geometry - def centerObject(self, feature, zoom=None): + def centerObject(self, feature: ee.Geometry | ee.Feature | ee.FeatureCollection | ee.Image, zoom: int | None = None): """ Center the map on an object on loading Args: feature (Feature, FeatureCollection, or Geometry): The object to center the map on zoom (int, optional): If provided, will force the map to zoom to this level after centering it on the object. If not provided, the highest zoom level that allows the feature to be viewed fully will be used. + + >>> from geeViz.geeView import * + >>> pt = ee.Geometry.Point([-111, 41]) + >>> Map.addLayer(pt.buffer(10), {}, "Plot") + >>> Map.centerObject(pt) + >>> Map.view() + """ try: bounds = json.dumps(feature.geometry().bounds(100, "EPSG:4326").getInfo()) @@ -876,7 +893,7 @@ def centerObject(self, feature, zoom=None): ###################################################################### # Function for launching the web map after all adding to the map has been completed - def view(self, open_browser=None, open_iframe=None, iframe_height=525): + def view(self, open_browser: bool | None = None, open_iframe: bool | None = None, iframe_height: int = 525): """ Compiles all map objects and commands and starts the map server @@ -886,6 +903,12 @@ def view(self, open_browser=None, open_iframe=None, iframe_height=525): open_iframe (bool): Whether or not to open an iframe. If unspecified, will automatically be selected depending on whether geeViz is being used in a notebook (True) or not (False). iframe_height (int, default 525): The height of the iframe shown if running inside a notebook + + >>> from geeViz.geeView import * + >>> lcms = ee.ImageCollection("USFS/GTAC/LCMS/v2023-9").filter('study_area=="CONUS"') + >>> Map.addLayer(lcms, {"autoViz": True, "canAreaChart": True, "areaChartParams": {"line": True, "sankey": True}}, "LCMS") + >>> Map.turnOnInspector() + >>> Map.view() """ print("Starting webmap") @@ -940,22 +963,8 @@ def view(self, open_browser=None, open_iframe=None, iframe_height=525): oo = open(self.ee_run, "w") oo.writelines(lines) oo.close() - # time.sleep(5) - - # if not self.isNotebook: - # self.Map.save(os.path.join(folium_html_folder,folium_html)) - # if not geeView.isPortActive(self.port): - # print('Starting local web server at: http://localhost:{}/{}/'.format(self.port,geeView.geeViewFolder)) - # geeView.run_local_server(self.port) - # print('Done') - # else: - # print('Local web server at: http://localhost:{}/{}/ already serving.'.format(self.port,geeView.geeViewFolder)) - # if open_browser: - # geeView.webbrowser.open('http://localhost:{}/{}/{}'.format(self.port,geeView.geeViewFolder,folium_html),new = 1) - - # else: - # display(self.Map) + # Find if port is already active and only start it if it is not if not isPortActive(self.port): print("Starting local web server at: http://localhost:{}/{}/".format(self.port, geeViewFolder)) run_local_server(self.port) @@ -963,8 +972,8 @@ def view(self, open_browser=None, open_iframe=None, iframe_height=525): else: print("Local web server at: http://localhost:{}/{}/ already serving.".format(self.port, geeViewFolder)) - # print('Refresh browser instance') + # Open viewer in browser or iframe in notebook print("cwd", os.getcwd()) if IS_COLAB: proxy_js = "google.colab.kernel.proxyPort({})".format(self.port) @@ -996,6 +1005,13 @@ def view(self, open_browser=None, open_iframe=None, iframe_height=525): def clearMap(self): """ Removes all map layers and commands - useful if running geeViz in a notebook and don't want layers/commands from a prior code block to still be included. + + >>> from geeViz.geeView import * + >>> lcms = ee.ImageCollection("USFS/GTAC/LCMS/v2023-9").filter('study_area=="CONUS"') + >>> Map.addLayer(lcms, {"autoViz": True}, "LCMS") # Layer + >>> Map.turnOnInspector() # Command + >>> Map.clearMap() # Clear map layer and commands + >>> Map.view() """ self.layerNumber = 1 self.idDictList = [] @@ -1004,6 +1020,13 @@ def clearMap(self): def clearMapLayers(self): """ Removes all map layers - useful if running geeViz in a notebook and don't want layers from a prior code block to still be included, but want commands to remain. + + >>> from geeViz.geeView import * + >>> lcms = ee.ImageCollection("USFS/GTAC/LCMS/v2023-9").filter('study_area=="CONUS"') + >>> Map.addLayer(lcms, {"autoViz": True}, "LCMS") # Layer - this will be removed + >>> Map.turnOnInspector() # Command - this will remain (even though there will be no layers to query) + >>> Map.clearMapLayers() # Clear map layer only and leave commands + >>> Map.view() """ self.layerNumber = 1 self.idDictList = [] @@ -1011,6 +1034,13 @@ def clearMapLayers(self): def clearMapCommands(self): """ Removes all map commands - useful if running geeViz in a notebook and don't want commands from a prior code block to still be included, but want layers to remain. + + >>> from geeViz.geeView import * + >>> lcms = ee.ImageCollection("USFS/GTAC/LCMS/v2023-9").filter('study_area=="CONUS"') + >>> Map.addLayer(lcms, {"autoViz": True}, "LCMS") # Layer + >>> Map.turnOnInspector() # Command - this will be removed + >>> Map.clearMapCommands() # Clear map comands only and leave layers + >>> Map.view() """ self.mapCommandList = [] @@ -1021,6 +1051,13 @@ def setMapTitle(self, title): Args: title (str, default geeViz Data Explorer): The title to appear in the header on the left sidebar as well as the title of the viewer webpage. + + >>> from geeViz.geeView import * + >>> lcms = ee.ImageCollection("USFS/GTAC/LCMS/v2023-9").filter('study_area=="CONUS"') + >>> Map.addLayer(lcms, {"autoViz": True}, "LCMS") + >>> Map.turnOnInspector() + >>> Map.setMapTitle("

A Custom Title!!!

") # Set custom map title + >>> Map.view() """ title_command = f'Map.setTitle("{title}")' if title_command not in self.mapCommandList: @@ -1029,34 +1066,66 @@ def setMapTitle(self, title): ###################################################################### def setTitle(self, title): """ + Redundant function for setMapTitle. Set the title that appears in the left sidebar header and the page title Args: title (str, default geeViz Data Explorer): The title to appear in the header on the left sidebar as well as the title of the viewer webpage. + + >>> from geeViz.geeView import * + >>> lcms = ee.ImageCollection("USFS/GTAC/LCMS/v2023-9").filter('study_area=="CONUS"') + >>> Map.addLayer(lcms, {"autoViz": True}, "LCMS") + >>> Map.turnOnInspector() + >>> Map.setMapTitle("

A Custom Title!!!

") # Set custom map title + >>> Map.view() """ self.setMapTitle(title) ###################################################################### # Functions to set various click query properties - def setQueryCRS(self, crs): + def setQueryCRS(self, crs: str): """ The coordinate reference system string to query layers with Args: crs (str, default "EPSG:5070"): Which projection (CRS) to use for querying map layers. + + >>> import geeViz.getImagesLib as gil + >>> from geeViz.geeView import * + >>> crs = gil.common_projections["NLCD_AK"]["crs"] + >>> transform = gil.common_projections["NLCD_AK"]["transform"] + >>> lcms = ee.ImageCollection("USFS/GTAC/LCMS/v2023-9").filter('study_area=="SEAK"') + >>> Map.addLayer(lcms, {"autoViz": True}, "LCMS") + >>> Map.turnOnInspector() + >>> Map.setQueryCRS(crs) + >>> Map.setQueryTransform(transform) + >>> Map.setCenter(-144.36390353, 60.20479529215, 8) + >>> Map.view() """ print("Setting click query crs to: {}".format(crs)) - cmd = f'Map.setQueryCRS("{crs}");' + cmd = f"Map.setQueryCRS('{crs}');" if cmd not in self.mapCommandList: self.mapCommandList.append(cmd) ###################################################################### - def setQueryScale(self, scale): + def setQueryScale(self, scale: int): """ What scale to query map layers with. Will also update the size of the box drawn on the map query layers are queried. Args: scale (int, default None): The spatial resolution to use for querying map layers in meters. If set, the query transform will be set to None in the map viewer. + + >>> import geeViz.getImagesLib as gil + >>> from geeViz.geeView import * + >>> s2s = gil.superSimpleGetS2(ee.Geometry.Point([-107.61, 37.85]), "2024-01-01", "2024-12-31", 190, 250) + >>> projection = s2s.first().select(["nir"]).projection().getInfo() + >>> Map.addLayer(s2s.median(), gil.vizParamsFalse10k, "Sentinel-2 Composite") + >>> Map.turnOnInspector() + >>> Map.setQueryCRS(projection["crs"]) + >>> Map.setQueryScale(projection["transform"][0]) + >>> Map.centerObject(s2s.first()) + >>> Map.view() + """ print("Setting click query scale to: {}".format(scale)) cmd = f"Map.setQueryScale({scale});" @@ -1064,12 +1133,24 @@ def setQueryScale(self, scale): self.mapCommandList.append(cmd) ###################################################################### - def setQueryTransform(self, transform): + def setQueryTransform(self, transform: list[int]): """ What transform to query map layers with. Will also update the size of the box drawn on the map query layers are queried. Args: transform (list, default [30, 0, -2361915, 0, -30, 3177735]): The snap to grid to use for querying layers on the map. If set, the query scale will be set to None in the map viewer. + + >>> import geeViz.getImagesLib as gil + >>> from geeViz.geeView import * + >>> s2s = gil.superSimpleGetS2(ee.Geometry.Point([-107.61, 37.85]), "2024-01-01", "2024-12-31", 190, 250) + >>> projection = s2s.first().select(["nir"]).projection().getInfo() + >>> Map.addLayer(s2s.median(), gil.vizParamsFalse10k, "Sentinel-2 Composite") + >>> Map.turnOnInspector() + >>> Map.setQueryCRS(projection["crs"]) + >>> Map.setQueryTransform(projection["transform"]) + >>> Map.centerObject(s2s.first()) + >>> Map.view() + """ print("Setting click query transform to: {}".format(transform)) cmd = f"Map.setQueryTransform({transform});" @@ -1077,13 +1158,27 @@ def setQueryTransform(self, transform): self.mapCommandList.append(cmd) ###################################################################### - def setQueryPrecision(self, chartPrecision=3, chartDecimalProportion=0.25): + def setQueryPrecision(self, chartPrecision: int = 3, chartDecimalProportion: float = 0.25): """ What level of precision to show for queried layers. This avoids showing too many digits after the decimal. Args: chartPrecision (int, default 3): Will show the larger of `chartPrecision` decimal places or ceiling(`chartDecimalProportion` * total decimal places). E.g. if the number is 1.12345678, 0.25 of 8 decimal places is 2, so 3 will be used and yield 1.123. chartDecimalProportion (float, default 0.25): Will show the larger of `chartPrecision` decimal places or `chartDecimalProportion` * total decimal places. E.g. if the number is 1.1234567891234, ceiling(0.25 of 13) decimal places is 4, so 4 will be used and yield 1.1235. + + >>> import geeViz.getImagesLib as gil + >>> from geeViz.geeView import * + >>> s2s = gil.superSimpleGetS2(ee.Geometry.Point([-107.61, 37.85]), "2024-01-01", "2024-12-31", 190, 250).select(["blue", "green", "red", "nir", "swir1", "swir2"]) + >>> projection = s2s.first().select(["nir"]).projection().getInfo() + >>> s2s = s2s.map(lambda img: ee.Image(img).divide(10000).set("system:time_start",img.date().millis())) + >>> Map.addLayer(s2s, gil.vizParamsFalse, "Sentinel-2 Images") + >>> Map.addLayer(s2s.median(), gil.vizParamsFalse, "Sentinel-2 Composite") + >>> Map.turnOnInspector() + >>> Map.setQueryCRS(projection["crs"]) + >>> Map.setQueryTransform(projection["transform"]) + >>> Map.setQueryPrecision(chartPrecision=2, chartDecimalProportion=0.1) + >>> Map.centerObject(s2s.first()) + >>> Map.view() """ print("Setting click query precision to: {}".format(chartPrecision)) cmd = f"Map.setQueryPrecision({chartPrecision},{chartDecimalProportion});" @@ -1091,12 +1186,21 @@ def setQueryPrecision(self, chartPrecision=3, chartDecimalProportion=0.25): self.mapCommandList.append(cmd) ###################################################################### - def setQueryDateFormat(self, defaultQueryDateFormat="YYYY-MM-dd"): + def setQueryDateFormat(self, defaultQueryDateFormat: str = "YYYY-MM-dd"): """ Set the date format to be used for any dates when querying. Args: defaultQueryDateFormat (str, default "YYYY-MM-dd"): The date format string to use for query outputs with dates. To simplify date outputs, "YYYY" is often used instead of the default. + + >>> from geeViz.geeView import * + >>> lcms = ee.ImageCollection("USFS/GTAC/LCMS/v2023-9").filter('study_area=="CONUS"') + >>> Map.addLayer(lcms.select([1]), {"autoViz": True}, "LCMS Land Cover") + >>> Map.addLayer(lcms.select([0]), {"autoViz": True}, "LCMS Change") + >>> Map.turnOnInspector() + >>> Map.setQueryDateFormat("YYYY") + >>> Map.view() + """ print("Setting default query date format to: {}".format(defaultQueryDateFormat)) cmd = f'Map.setQueryDateFormat("{defaultQueryDateFormat}");' @@ -1104,12 +1208,19 @@ def setQueryDateFormat(self, defaultQueryDateFormat="YYYY-MM-dd"): self.mapCommandList.append(cmd) ###################################################################### - def setQueryBoxColor(self, color): + def setQueryBoxColor(self, color: str): """ Set the color of the query box to something other than yellow Args: color (str, default "FFFF00"): Set the default query box color shown on the map by providing a hex color. + + >>> from geeViz.geeView import * + >>> lcms = ee.ImageCollection("USFS/GTAC/LCMS/v2023-9").filter('study_area=="CONUS"') + >>> Map.addLayer(lcms.select([1]), {"autoViz": True}, "LCMS Land Cover") + >>> Map.turnOnInspector() + >>> Map.setQueryBoxColor("0FF") + >>> Map.view() """ print("Setting click query box color to: {}".format(color)) cmd = f'Map.setQueryBoxColor("{color}");' @@ -1124,12 +1235,26 @@ def setQueryWindowMode(self, mode): def setQueryToInfoWindow(self): """ Set the location of query outputs to an info window popup over the map + + >>> from geeViz.geeView import * + >>> lcms = ee.ImageCollection("USFS/GTAC/LCMS/v2023-9").filter('study_area=="CONUS"') + >>> Map.addLayer(lcms.select([1]), {"autoViz": True}, "LCMS Land Cover") + >>> Map.turnOnInspector() + >>> Map.setQueryToInfoWindow() + >>> Map.view() """ self.setQueryWindowMode("infoWindow") def setQueryToSidePane(self): """ Set the location of query outputs to the right sidebar above the legend + + >>> from geeViz.geeView import * + >>> lcms = ee.ImageCollection("USFS/GTAC/LCMS/v2023-9").filter('study_area=="CONUS"') + >>> Map.addLayer(lcms.select([1]), {"autoViz": True}, "LCMS Land Cover") + >>> Map.turnOnInspector() + >>> Map.setQueryToSidePane() + >>> Map.view() """ self.setQueryWindowMode("sidePane") @@ -1138,6 +1263,12 @@ def setQueryToSidePane(self): def turnOnInspector(self): """ Turn on the query inspector tool upon map loading. This is used frequently so map layers can be queried as soon as the map viewer loads. + + >>> from geeViz.geeView import * + >>> lcms = ee.ImageCollection("USFS/GTAC/LCMS/v2023-9").filter('study_area=="CONUS"') + >>> Map.addLayer(lcms.select([1]), {"autoViz": True}, "LCMS Land Cover") + >>> Map.turnOnInspector() + >>> Map.view() """ query_command = "Map.turnOnInspector();" if query_command not in self.mapCommandList: @@ -1147,6 +1278,12 @@ def turnOnInspector(self): def turnOnAutoAreaCharting(self): """ Turn on automatic area charting upon map loading. This will automatically update charts by summarizing any visible layers with "canAreaChart" : True any time the map finishes panning or zooming. + + >>> from geeViz.geeView import * + >>> lcms = ee.ImageCollection("USFS/GTAC/LCMS/v2023-9").filter('study_area=="CONUS"') + >>> Map.addLayer(lcms.select([1]), {"autoViz": True,'canAreaChart':True}, "LCMS Land Cover") + >>> Map.turnOnAutoAreaCharting() + >>> Map.view() """ query_command = "Map.turnOnAutoAreaCharting();" if query_command not in self.mapCommandList: @@ -1155,6 +1292,12 @@ def turnOnAutoAreaCharting(self): def turnOnUserDefinedAreaCharting(self): """ Turn on area charting by a user defined area upon map loading. This will update charts by summarizing any visible layers with "canAreaChart" : True when the user draws an area to summarize and hits the `Chart Selected Areas` button in the user interface under `Area Tools -> User-Defined Area`. + + >>> from geeViz.geeView import * + >>> lcms = ee.ImageCollection("USFS/GTAC/LCMS/v2023-9").filter('study_area=="CONUS"') + >>> Map.addLayer(lcms.select([1]), {"autoViz": True,'canAreaChart':True}, "LCMS Land Cover") + >>> Map.turnOnUserDefinedAreaCharting() + >>> Map.view() """ query_command = "Map.turnOnUserDefinedAreaCharting();" if query_command not in self.mapCommandList: @@ -1163,12 +1306,21 @@ def turnOnUserDefinedAreaCharting(self): def turnOnSelectionAreaCharting(self): """ Turn on area charting by a user selected area upon map loading. This will update charts by summarizing any visible layers with "canAreaChart" : True when the user selects selection areas to summarize and hits the `Chart Selected Areas` button in the user interface under `Area Tools -> Select an Area on Map`. + + >>> from geeViz.geeView import * + >>> lcms = ee.ImageCollection("USFS/GTAC/LCMS/v2023-9").filter('study_area=="CONUS"') + >>> Map.addLayer(lcms.select([1]), {"autoViz": True,'canAreaChart':True}, "LCMS Land Cover") + >>> mtbsBoundaries = ee.FeatureCollection("USFS/GTAC/MTBS/burned_area_boundaries/v1") + >>> mtbsBoundaries = mtbsBoundaries.map(lambda f: f.set("system:time_start", f.get("Ig_Date"))) + >>> Map.addSelectLayer(mtbsBoundaries, {"strokeColor": "00F", "selectLayerNameProperty": "Incid_Name"}, "MTBS Fire Boundaries") + >>> Map.turnOnSelectionAreaCharting() + >>> Map.view() """ query_command = "Map.turnOnSelectionAreaCharting();" if query_command not in self.mapCommandList: self.mapCommandList.append(query_command) - def addAreaChartLayer(self, image, params={}, name=None, shouldChart=True): + def addAreaChartLayer(self, image: ee.Image | ee.ImageCollection, params: dict = {}, name: str | None = None, shouldChart: bool = True): """ Use this method to add a layer for area charting that you do not want as a map layer as well. Once you add all area chart layers to the map, you can turn them on using the `Map.populateAreaChartLayerSelect` method. This will create a selection menu inside the `Area Tools -> Area Tools Parameters` menu. You can then turn layers to include in any area charts on and off from that menu. @@ -1250,6 +1402,17 @@ def addAreaChartLayer(self, image, params={}, name=None, shouldChart=True): def populateAreaChartLayerSelect(self): """ Once you add all area chart layers to the map, you can turn them on using this method- `Map.populateAreaChartLayerSelect`. This will create a selection menu inside the `Area Tools -> Area Tools Parameters` menu. You can then turn layers to include in any area charts on and off from that menu. + + >>> import geeViz.geeView as gv + >>> Map = gv.Map + >>> ee = gv.ee + >>> lcms = ee.ImageCollection("USFS/GTAC/LCMS/v2023-9").filter('study_area=="CONUS"') + >>> Map.addLayer(lcms.select(["Change_Raw_Probability.*"]), {"reducer": ee.Reducer.stdDev(), "min": 0, "max": 10}, "LCMS Change Prob") + >>> Map.addAreaChartLayer(lcms, {"line": True, "layerType": "ImageCollection"}, "LCMS All Thematic Classes Line", True) + >>> Map.addAreaChartLayer(lcms, {"sankey": True}, "LCMS All Thematic Classes Sankey", True) + >>> Map.populateAreaChartLayerSelect() + >>> Map.turnOnAutoAreaCharting() + >>> Map.view() """ query_command = "areaChart.populateChartLayerSelect();" @@ -1257,12 +1420,40 @@ def populateAreaChartLayerSelect(self): self.mapCommandList.append(query_command) # Functions to handle setting query output y labels - def setYLabelMaxLength(self, maxLength): + def setYLabelMaxLength(self, maxLength: int): + """ + Set the maximum length a Y axis label can have in charts + + Args: + maxLength (int, default 30): Maximum number of characters in a Y axis label. + + >>> from geeViz.geeView import * + >>> lcms = ee.ImageCollection("USFS/GTAC/LCMS/v2023-9").filter('study_area=="CONUS"') + >>> Map.addLayer(lcms.select([1]), {"autoViz": True}, "LCMS Land Cover") + >>> Map.setYLabelMaxLength(10) # Double-click on map to inspect area. Change to a larger number and rerun to see how Y labels are impacted + >>> Map.turnOnInspector() + >>> Map.setCenter(-109.446, 43.620, 12) + >>> Map.view() + """ command = f"yLabelMaxLength = {maxLength}" if command not in self.mapCommandList: self.mapCommandList.append(command) - def setYLabelBreakLength(self, maxLength): + def setYLabelBreakLength(self, maxLength: int): + """ + Set the maximum length per line a Y axis label can have in charts + + Args: + maxLength (int, default 10): Maximum number of characters in each line of a Y axis label. Will break total characters (setYLabelMaxLength) until maxLines (setYLabelMaxLines) is reached + + >>> from geeViz.geeView import * + >>> lcms = ee.ImageCollection("USFS/GTAC/LCMS/v2023-9").filter('study_area=="CONUS"') + >>> Map.addLayer(lcms.select([1]), {"autoViz": True}, "LCMS Land Cover") + >>> Map.setYLabelBreakLength(5) # Double-click on map to inspect area. Change to a larger number and rerun to see how Y labels are impacted + >>> Map.turnOnInspector() + >>> Map.setCenter(-109.446, 43.620, 12) + >>> Map.view() + """ command = f"yLabelBreakLength = {maxLength}" if command not in self.mapCommandList: self.mapCommandList.append(command) @@ -1273,29 +1464,55 @@ def setYLabelMaxLines(self, maxLines): Args: maxLines (int, default 5): The maximum number of lines each y-axis label can have. Will simply exclude any remaining lines. + + >>> from geeViz.geeView import * + >>> lcms = ee.ImageCollection("USFS/GTAC/LCMS/v2023-9").filter('study_area=="CONUS"') + >>> Map.addLayer(lcms.select([1]), {"autoViz": True}, "LCMS Land Cover") + >>> Map.setYLabelMaxLines(3) # Double-click on map to inspect area. Change to a larger number and rerun to see how Y labels are impacted + >>> Map.turnOnInspector() + >>> Map.setCenter(-109.446, 43.620, 12) + >>> Map.view() """ command = f"yLabelMaxLines = {maxLines}" if command not in self.mapCommandList: self.mapCommandList.append(command) - def setYLabelFontSize(self, fontSize): + def setYLabelFontSize(self, fontSize: int): """ Set the size of the font on the y-axis labels. Useful when y-axis labels are too large to fit on the chart. Args: fontSize (int, default 10): The font size used on the y-axis labels for query charting. + + >>> from geeViz.geeView import * + >>> lcms = ee.ImageCollection("USFS/GTAC/LCMS/v2023-9").filter('study_area=="CONUS"') + >>> Map.addLayer(lcms.select([1]), {"autoViz": True}, "LCMS Land Cover") + >>> Map.setYLabelFontSize(8) # Double-click on map to inspect area. Change to a different number and rerun to see how Y labels are impacted + >>> Map.turnOnInspector() + >>> Map.setCenter(-109.446, 43.620, 12) + >>> Map.view() """ command = f"yLabelFontSize = {fontSize}" if command not in self.mapCommandList: self.mapCommandList.append(command) # Specify whether layers can be re-ordered by the user - def setCanReorderLayers(self, canReorderLayers): + def setCanReorderLayers(self, canReorderLayers: bool): """ Set whether layers can be reordered by dragging layer user interface objects. By default all non timelapse and non geojson layers can be reordereed by dragging. Args: - canReorderLayers (bool): Set whether layers can be reordered by dragging layer user interface objects. By default all non timelapse and non geojson layers can be reordereed by dragging. + canReorderLayers (bool, default True): Set whether layers can be reordered by dragging layer user interface objects. By default all non timelapse and non geojson layers can be reordereed by dragging. + + >>> from geeViz.geeView import * + >>> lcms = ee.ImageCollection("USFS/GTAC/LCMS/v2023-9").filter('study_area=="CONUS"') + >>> Map.addLayer(lcms.select([2]), {"autoViz": True}, "LCMS Land Use") + >>> Map.addLayer(lcms.select([1]), {"autoViz": True}, "LCMS Land Cover") + >>> Map.addLayer(lcms.select([0]), {"autoViz": True}, "LCMS Change") + >>> Map.turnOnInspector() + >>> Map.setCanReorderLayers(False) # Notice you cannot drag and reorder layers. Change to True and rerun and notice you now can drag layers to reorder + >>> Map.setCenter(-109.446, 43.620, 12) + >>> Map.view() """ command = f"Map.canReorderLayers = {str(canReorderLayers).lower()};" if command not in self.mapCommandList: @@ -1304,7 +1521,20 @@ def setCanReorderLayers(self, canReorderLayers): # Functions to handle batch layer toggling def turnOffAllLayers(self): """ - Turn off all layers added to the mapper object + Turn off all layers added to the mapper object. Typically used in notebooks or iPython when you want to allow existing layers to remain, but want to turn them all off. + + >>> #%% + >>> from geeViz.geeView import * + >>> lcms = ee.ImageCollection("USFS/GTAC/LCMS/v2023-9").filter('study_area=="CONUS"') + >>> Map.addLayer(lcms.select([2]), {"autoViz": True}, "LCMS Land Use") + >>> Map.addLayer(lcms.select([1]), {"autoViz": True}, "LCMS Land Cover") + >>> Map.turnOnInspector() + >>> Map.setCenter(-109.446, 43.620, 5) + >>> Map.view() + >>> #%% + >>> Map.turnOffAllLayers() + >>> Map.addLayer(lcms.select([0]), {"autoViz": True}, "LCMS Change") + >>> Map.view() """ update = {"visible": "false"} self.idDictList = [{**d, **update} for d in self.idDictList] @@ -1312,6 +1542,19 @@ def turnOffAllLayers(self): def turnOnAllLayers(self): """ Turn on all layers added to the mapper object + + >>> #%% + >>> from geeViz.geeView import * + >>> lcms = ee.ImageCollection("USFS/GTAC/LCMS/v2023-9").filter('study_area=="CONUS"') + >>> Map.addLayer(lcms.select([2]), {"autoViz": True}, "LCMS Land Use",False) + >>> Map.addLayer(lcms.select([1]), {"autoViz": True}, "LCMS Land Cover",False) + >>> Map.turnOnInspector() + >>> Map.setCenter(-109.446, 43.620, 5) + >>> Map.view() + >>> #%% + >>> Map.turnOnAllLayers() + >>> Map.addLayer(lcms.select([0]), {"autoViz": True}, "LCMS Change") + >>> Map.view() """ update = {"visible": "true"} self.idDictList = [{**d, **update} for d in self.idDictList] diff --git a/geeView/index.html b/geeView/index.html index 23f7544..e717113 100644 --- a/geeView/index.html +++ b/geeView/index.html @@ -21,7 +21,7 @@ - + diff --git a/getImagesLib.py b/getImagesLib.py index 404b034..ced43f1 100644 --- a/getImagesLib.py +++ b/getImagesLib.py @@ -28,7 +28,7 @@ import geeViz.cloudStorageManagerLib as cml import geeViz.assetManagerLib as aml import geeViz.taskManagerLib as tml -import math, ee, json, pdb +import math, ee, json, pdb, datetime from threading import Thread # %% @@ -2625,7 +2625,7 @@ def RefinedLee(img: ee.Image) -> ee.Image: # Load and filter Sentinel-1 GRD data by predefined parameters def getS1( - studyArea: ee.Geometry, + studyArea: ee.Geometry | ee.Feature | ee.FeatureCollection, startYear: int, endYear: int, startJulian: int, @@ -2739,11 +2739,11 @@ def getS1( # Function to get Sentinel 2 A and B data into a single collection with meaningful band names for a specified area and date range # Will also join the S2 cloudless cloud probability collection if specified def getS2( - studyArea: ee.Geometry, - startDate: ee.Date, - endDate: ee.Date, - startJulian: int, - endJulian: int, + studyArea: ee.Geometry | ee.Feature | ee.FeatureCollection, + startDate: ee.Date | datetime.datetime | str, + endDate: ee.Date | datetime.datetime | str, + startJulian: int = 1, + endJulian: int = 365, resampleMethod: str = "nearest", toaOrSR: str = "TOA", convertToDailyMosaics: bool = True, @@ -2751,12 +2751,12 @@ def getS2( addCloudScorePlus: bool = True, cloudScorePlusScore: str = "cs", ) -> ee.ImageCollection: - """Loads and processes Sentinel-2 data for a given area and time period. + """Loads Sentinel-2 data for a given area and time period and joins cloud score information. Partially deprecated in favor of the simpler superSimpleGetS2. Args: studyArea: The geographic area of interest. - startDate: The start date of the desired data. - endDate: The end date of the desired data. + startDate: The start date of the desired data. Can be an ee.Date object, datetime object, or date string. + endDate: The end date of the desired data. Can be an ee.Date object, datetime object, or date string. startJulian: The start Julian day of the desired data. endJulian: The end Julian day of the desired data. resampleMethod: The resampling method (default: "nearest"). @@ -2766,13 +2766,27 @@ def getS2( addCloudScorePlus: Whether to add cloud score plus data (default: True). cloudScorePlusScore: The band name for cloud score plus (default: "cs"). - Returns: - An Earth Engine ImageCollection containing the processed Sentinel-2 data. + ee.ImageCollection: A collection of Sentinel-2 satellite images filtered by the specified criteria. + + + >>> import geeViz.getImagesLib as gil + >>> Map = gil.Map + >>> ee = gil.ee + >>> studyArea = gil.testAreas["CA"] + >>> composite = gil.getS2(studyArea, "2024-01-01", "2024-12-31", 190, 250).median() + >>> Map.addLayer(composite, gil.vizParamsFalse, "Sentinel-2 Composite") + >>> Map.addLayer(studyArea, {"canQuery": False}, "Study Area") + >>> Map.centerObject(studyArea) + >>> Map.turnOnInspector() + >>> Map.view() + """ args = formatArgs(locals()) toaOrSR = toaOrSR.upper() + startDate = ee.Date(startDate) + endDate = ee.Date(endDate) # Specify S2 continuous bands if resampling is set to something other than near s2_continuous_bands = sensorBandNameDict[toaOrSR] @@ -2989,26 +3003,26 @@ def applyScaleFactors(image, landsatCollectionVersion): ################################################################## # Function for acquiring Landsat image collections def getLandsat( - studyArea, - startDate, - endDate, - startJulian, - endJulian, - toaOrSR="SR", - includeSLCOffL7=False, - defringeL5=False, - addPixelQA=False, - resampleMethod="near", - landsatCollectionVersion="C2", + studyArea: ee.Geometry | ee.Feature | ee.FeatureCollection, + startDate: ee.Date | datetime.datetime | str, + endDate: ee.Date | datetime.datetime | str, + startJulian: int = 1, + endJulian: int = 365, + toaOrSR: str = "SR", + includeSLCOffL7: bool = False, + defringeL5: bool = False, + addPixelQA: bool = False, + resampleMethod: str = "near", + landsatCollectionVersion: str = "C2", ): - """Retrieves Landsat imagery for a specified study area. + """Retrieves Landsat imagery for a specified study area and date range. Args: studyArea (ee.Geometry, ee.Feature, or ee.FeatureCollection): The geographic area of interest. - startDate (ee.Date or str): The start date of the desired image range. - endDate (ee.Date or str): The end date of the desired image range. - startJulian (int): The start Julian day of the desired image range. - endJulian (int): The end Julian day of the desired image range. + startDate (ee.Date, datetime.datetime, or str): The start date of the desired image range. + endDate (ee.Date, datetime.datetime, or str): The end date of the desired image range. + startJulian (int, optional): The start Julian day of the desired image range. Defaults to 1. + endJulian (int, optional): The end Julian day of the desired image range. Defaults to 365. toaOrSR (str, optional): Whether to retrieve TOA or SR data. Defaults to "SR". includeSLCOffL7 (bool, optional): Whether to include SLC-off L7 data. Defaults to False. defringeL5 (bool, optional): Whether to defringe L5 data. Defaults to False. @@ -3018,9 +3032,26 @@ def getLandsat( Returns: ee.ImageCollection: A collection of Landsat images meeting the specified criteria. + + + >>> import geeViz.getImagesLib as gil + >>> Map = gil.Map + >>> ee = gil.ee + >>> studyArea = gil.testAreas["CA"] + >>> composite = gil.getLandsat(studyArea, "2024-01-01", "2024-12-31", 190, 250).median() + >>> Map.addLayer(composite, gil.vizParamsFalse, "Landsat Composite") + >>> Map.addLayer(studyArea, {"canQuery": False}, "Study Area") + >>> Map.centerObject(studyArea) + >>> Map.turnOnInspector() + >>> Map.view() + """ args = formatArgs(locals()) + toaOrSR = toaOrSR.upper() + startDate = ee.Date(startDate) + endDate = ee.Date(endDate) + def getLandsatCollection(landsatCollectionVersion, whichC, toaOrSR): c = ( ee.ImageCollection(landsatCollectionDict[landsatCollectionVersion + "_" + whichC + "_" + toaOrSR]) @@ -3939,11 +3970,25 @@ def medoidMosaicMSD(inCollection: ee.ImageCollection, medoidIncludeBands: ee.Lis An Earth Engine Image representing the medoid mosaic. Note: - * As the data are not normalized in this method, ensuring the medoidIncludeBands have roughly comparable ranges of values - helps the function work properly. For example, if temperature is included, it will account for most of the variance - thus resulting in a medoid mosaic that will more or less choose values closest to the median temperature only, rather than - all the bands + * As the data are not normalized in this method, ensuring the medoidIncludeBands have roughly comparable ranges of values helps the function work properly. For example, if temperature is included, it will account for most of the variance thus resulting in a medoid mosaic that will more or less choose values closest to the median temperature only, rather than all the bands + * The function assumes that the image collection has consistent band names and data types. + + + >>> import geeViz.getImagesLib as gil + >>> Map = gil.Map + >>> ee = gil.ee + >>> studyArea = gil.testAreas["CO"] + >>> s2s = gil.superSimpleGetS2(studyArea, "2024-01-01", "2024-12-31", 190, 250) + >>> median_composite = s2s.median() + >>> medoid_composite = gil.medoidMosaicMSD(s2s, ["green", "red", "nir", "swir1", "swir2"]) + >>> Map.addLayer(median_composite, gil.vizParamsFalse10k, "Sentinel-2 Median Composite") + >>> Map.addLayer(medoid_composite, gil.vizParamsFalse10k, "Sentinel-2 Medoid Composite") + >>> Map.addLayer(studyArea, {"canQuery": False}, "Study Area") + >>> Map.centerObject(studyArea) + >>> Map.turnOnInspector() + >>> Map.view() + """ if medoidIncludeBands == None: @@ -4290,7 +4335,7 @@ def yrGetter(yr): images = yearsTT.map(yrGetter) lsT = ee.ImageCollection(ee.FeatureCollection(images).flatten()) - count = lsT.select([0]).count().rename(["compositeObsCount"]) + count = lsT.select([0]).reduce(ee.Reducer.count()).rename(["compositeObsCount"]) # Compute median or medoid or apply reducer if compositingReducer != None: composite = lsT.reduce(compositingReducer) @@ -4883,18 +4928,49 @@ def compare(i): # Function to get MODIS data from various collections # Will pull from daily or 8-day composite collections based on the boolean variable "daily" def getModisData( - startYear, - endYear, - startJulian, - endJulian, - daily=False, - maskWQA=False, - zenithThresh=90, - useTempInCloudMask=True, - addLookAngleBands=False, - resampleMethod="near", + startYear: int, + endYear: int, + startJulian: int, + endJulian: int, + daily: bool = False, + maskWQA: bool = False, + zenithThresh: int = 90, + useTempInCloudMask: bool = True, + addLookAngleBands: bool = False, + resampleMethod: str = "near", ): + """ + Retrieves MODIS imagery from Earth Engine for a specified period. Handles joining all MODIS collections for Terra and Aqua and aligning band names + + Args: + startYear (int): The starting year for the data collection. + endYear (int): The ending year for the data collection. + startJulian (int): The starting Julian day of year for the data collection (1-366). + endJulian (int): The ending Julian day of year for the data collection (1-366). + daily (bool, optional): Determines whether to retrieve daily or 8-day composite data. Defaults to False (8-day composite). + maskWQA (bool, optional): Controls whether to mask pixels based on the Quality Assurance (QA) band. Only applicable for daily data (daily=True). Defaults to False. + zenithThresh (float, optional): Sets the threshold for solar zenith angle in degrees. Pixels with zenith angle exceeding this threshold will be masked out. Defaults to 90. + useTempInCloudMask (bool, optional): Determines whether to use the thermal band for cloud masking. Defaults to True. + addLookAngleBands (bool, optional): Controls whether to include view angle bands in the output. Defaults to False. + resampleMethod (str, optional): Specifies the resampling method to apply to the imagery. Valid options include "near", "bilinear", and "bicubic". Defaults to "near" (nearest neighbor). + + Returns: + ee.ImageCollection: A collection of MODIS imagery for the specified criteria. + >>> import geeViz.getImagesLib as gil + >>> Map = gil.Map + >>> ee = gil.ee + >>> crs = gil.common_projections["NLCD_CONUS"]["crs"] + >>> transform = gil.common_projections["NLCD_CONUS"]["transform"] + >>> scale = 240 + >>> transform[0] = scale + >>> transform[4] = -scale + >>> composite = gil.getModisData(2024, 2024, 190, 250, resampleMethod="bicubic").median().reproject(crs, transform) + >>> Map.addLayer(composite, gil.vizParamsFalse, "MODIS Composite") + >>> Map.setCenter(-111, 41, 7) + >>> Map.turnOnInspector() + >>> Map.view() + """ # Find which collections to pull from based on daily or 8-day if daily == False: a250C = modisCDict["eightDaySR250A"] @@ -5017,35 +5093,85 @@ def setResample(img): return joined +######################################################################### +######################################################################### # Function to get cloud, cloud shadow busted modis images # Takes care of matching different modis collections as well def getProcessedModis( - startYear, - endYear, - startJulian, - endJulian, - zenithThresh=90, - addLookAngleBands=True, - applyCloudScore=True, - applyTDOM=True, - useTempInCloudMask=True, - cloudScoreThresh=20, - performCloudScoreOffset=True, - cloudScorePctl=10, - zScoreThresh=-1, - shadowSumThresh=0.35, - contractPixels=0, - dilatePixels=2.5, - shadowSumBands=["nir", "swir2"], - resampleMethod="bicubic", - preComputedCloudScoreOffset=None, - preComputedTDOMIRMean=None, - preComputedTDOMIRStdDev=None, - addToMap=False, - crs="EPSG:4326", - scale=250, - transform=None, + startYear: int, + endYear: int, + startJulian: int, + endJulian: int, + zenithThresh: float = 90, + addLookAngleBands: bool = True, + applyCloudScore: bool = True, + applyTDOM: bool = True, + useTempInCloudMask: bool = True, + cloudScoreThresh: int = 20, + performCloudScoreOffset: bool = True, + cloudScorePctl: int = 10, + zScoreThresh: float = -1, + shadowSumThresh: float = 0.35, + contractPixels: int = 0, + dilatePixels: float = 2.5, + shadowSumBands: list[str] = ["nir", "swir2"], + resampleMethod: str = "bicubic", + preComputedCloudScoreOffset: ee.Image | None = None, + preComputedTDOMIRMean: ee.Image | None = None, + preComputedTDOMIRStdDev: ee.Image | None = None, + addToMap: bool = False, + crs: str = "EPSG:4326", + scale: int | None = 250, + transform: list[int] | None = None, ): + """ + Retrieves, processes, and filters MODIS imagery for a specified period. + + This function retrieves daily MODIS imagery from Earth Engine, applies various cloud and + cloud shadow masking techniques, and returns a collection of processed images. + + Args: + startYear (int): The starting year for the data collection. + endYear (int): The ending year for the data collection. + startJulian (int): The starting Julian day of year for the data collection (1-366). + endJulian (int): The ending Julian day of year for the data collection (1-366). + zenithThresh (float, optional): Sets the threshold for solar zenith angle in degrees. Pixels with zenith angle exceeding this threshold will be masked out. Defaults to 90. + addLookAngleBands (bool, optional): Controls whether to include view angle bands in the output. Defaults to True. + applyCloudScore (bool, optional): Determines whether to apply cloud masking based on the CloudScore simple algorithm adapted to MODIS. Defaults to True. + applyTDOM (bool, optional): Determines whether to apply the TDOM (Temporal Dark Outlier Mask) + technique for cloud shadow masking. Defaults to True. + useTempInCloudMask (bool, optional): Determines whether to use the thermal band for cloud masking during MODIS data retrieval. Defaults to True. + cloudScoreThresh (int, optional): Threshold for the CloudScore simple algorithm to classify a pixel as cloudy. Lower number masks out more. Defaults to 20. + performCloudScoreOffset (bool, optional): Controls whether to perform an offset correction on the Cloud Score data over bright surfaces. Only use this if bright areas are being masked as clouds. Do not use this in persistently cloud areas. Defaults to True. + cloudScorePctl (int, optional): Percentile of the Cloud Score product to use for the offset correction. Defaults to 10. + zScoreThresh (float, optional): Threshold for the z-score used in TDOM cloud shadow masking. Pixels with z-scores below this threshold are masked. Defaults to -1. + shadowSumThresh (float, optional): Threshold for the sum of reflectance in shadow bands used in TDOM cloud shadow masking. Pixels below this threshold and the zScoreThresh are masked as dark outliers (likely cloud shadows). Defaults to 0.35. + contractPixels (int, optional): Number of pixels to contract cloud and shadow masks by. Defaults to 0. + dilatePixels (float, optional): Number of pixels to dilate cloud and shadow masks by. Defaults to 2.5. + shadowSumBands (list[str], optional): List of band names to use for calculating the sum of reflectance in TDOM cloud shadow masking. Defaults to ["nir", "swir2"]. + resampleMethod (str, optional): Specifies the resampling method to apply to the imagery. Valid options include "near", "bilinear", and "bicubic". Defaults to "bicubic". + preComputedCloudScoreOffset (float | None, optional): Pre-computed Cloud Score offset value to avoid redundant calculations. Defaults to None (automatic calculation). + preComputedTDOMIRMean (float | None, optional): Pre-computed mean of the IR band used in TDOM cloud shadow masking to avoid redundant calculations. Defaults to None (automatic calculation). + preComputedTDOMIRStdDev (float | None, optional): Pre-computed standard deviation of the IR band used in TDOM cloud shadow masking to avoid redundant calculations. Defaults to None (automatic calculation). + addToMap (bool, optional): Controls whether to add intermediate processing steps (masked medians) to the Earth Engine map for visualization purposes. Defaults to False. + crs (str, optional): Only used if addToMap is True. Coordinate Reference System (CRS) for the output imagery. Defaults to "EPSG:4326". + scale (int | None, optional): Only used if addToMap is True. Scale (resolution) of the output imagery in meters. Defaults to 250. + transform (list | None, optional): Only used if addToMap is True. Optional transformation matrix to apply to the output imagery. Defaults to None. + + >>> import geeViz.getImagesLib as gil + >>> Map = gil.Map + >>> ee = gil.ee + >>> crs = gil.common_projections["NLCD_CONUS"]["crs"] + >>> transform = gil.common_projections["NLCD_CONUS"]["transform"] + >>> scale = 240 + >>> transform[0] = scale + >>> transform[4] = -scale + >>> composite = gil.getProcessedModis(2024, 2024, 190, 250).median().reproject(crs, transform) + >>> Map.addLayer(composite, gil.vizParamsFalse, "MODIS Composite") + >>> Map.setCenter(-111, 41, 7) + >>> Map.turnOnInspector() + >>> Map.view() + """ args = formatArgs(locals()) if "args" in args.keys(): @@ -5543,73 +5669,86 @@ def getLandsatWrapper( ######################################################################### # Wrapper function for getting Landsat imagery def getProcessedLandsatScenes( - studyArea, - startYear, - endYear, - startJulian, - endJulian, - toaOrSR="SR", - includeSLCOffL7=False, - defringeL5=False, - applyCloudScore=False, - applyFmaskCloudMask=True, - applyTDOM=False, - applyFmaskCloudShadowMask=True, - applyFmaskSnowMask=False, - cloudScoreThresh=10, - performCloudScoreOffset=True, - cloudScorePctl=10, - zScoreThresh=-1, - shadowSumThresh=0.35, - contractPixels=1.5, - dilatePixels=3.5, - shadowSumBands=["nir", "swir1"], - resampleMethod="near", - harmonizeOLI=False, - preComputedCloudScoreOffset=None, - preComputedTDOMIRMean=None, - preComputedTDOMIRStdDev=None, - landsatCollectionVersion="C2", - verbose=False, -): + studyArea: ee.Geometry | ee.Feature | ee.FeatureCollection, + startYear: int, + endYear: int, + startJulian: int, + endJulian: int, + toaOrSR: str = "SR", + includeSLCOffL7: bool = False, + defringeL5: bool = False, + applyCloudScore: bool = False, + applyFmaskCloudMask: bool = True, + applyTDOM: bool = False, + applyFmaskCloudShadowMask: bool = True, + applyFmaskSnowMask: bool = False, + cloudScoreThresh: int = 10, + performCloudScoreOffset: bool = True, + cloudScorePctl: int = 10, + zScoreThresh: float = -1, + shadowSumThresh: float = 0.35, + contractPixels: float = 1.5, + dilatePixels: float = 3.5, + shadowSumBands: list[str] = ["nir", "swir1"], + resampleMethod: str = "near", + harmonizeOLI: bool = False, + preComputedCloudScoreOffset: ee.Image | None = None, + preComputedTDOMIRMean: ee.Image | None = None, + preComputedTDOMIRStdDev: ee.Image | None = None, + landsatCollectionVersion: str = "C2", + verbose: bool = False, +) -> ee.ImageCollection: """ - Get Landsat images from all available TM-OLI collections with common bands selected/named, cloud and cloud masking applied, and common indices added. + Retrieves, processes, and filters Landsat scenes for a specified area and time period. + This function retrieves Landsat scenes from Earth Engine, applies various cloud, + cloud shadow, and snow masking techniques, calculates common indices, and returns + a collection of processed images. Args: - studyArea (FeatureCollection, Feature, Geometry). - startYear (int). - endYear (int). - startJulian (int). - endJulian (int). - toaOrSR (str) ="SR". - includeSLCOffL7=False. - defringeL5=False. - applyCloudScore=False. - applyFmaskCloudMask=True. - applyTDOM=False. - applyFmaskCloudShadowMask=True. - applyFmaskSnowMask=False. - cloudScoreThresh=10. - performCloudScoreOffset=True. - cloudScorePctl=10. - zScoreThresh=-1. - shadowSumThresh=0.35. - contractPixels=1.5. - dilatePixels=3.5. - shadowSumBands=["nir". "swir1"]. - resampleMethod="near". - harmonizeOLI=False. - preComputedCloudScoreOffset=None. - preComputedTDOMIRMean=None. - preComputedTDOMIRStdDev=None. - landsatCollectionVersion="C2". - verbose=False. - param1 (int): The first parameter. - param2 (str): The second parameter. + studyArea (ee.Geometry): The geographic area of interest (study area) as an Earth Engine geometry, Feature, or FeatureCollection object. + startYear (int): The starting year for the data collection. + endYear (int): The ending year for the data collection. + startJulian (int): The starting Julian day of year for the data collection (1-365). + endJulian (int): The ending Julian day of year for the data collection (1-365). + toaOrSR (str, optional): Flag indicating desired reflectance type: "TOA" (Top Of Atmosphere) or "SR" (Surface Reflectance). Defaults to "SR". + includeSLCOffL7 (bool, optional): Determines whether to include Landsat 7 SLC-off scenes. Defaults to False. + defringeL5 (bool, optional): Determines whether to defringe Landsat 5 scenes. Defaults to False. + applyCloudScore (bool, optional): Determines whether to apply cloud masking based on the CloudScore simple algorithm. Defaults to False. + applyFmaskCloudMask (bool, optional): Determines whether to apply the Fmask cloud mask. Defaults to True. + applyTDOM (bool, optional): Determines whether to apply the TDOM (Temporal Dark Outlier Mask) technique for cloud shadow masking. Defaults to False. + applyFmaskCloudShadowMask (bool, optional): Determines whether to apply the Fmask cloud shadow mask. Defaults to True. + applyFmaskSnowMask (bool, optional): Determines whether to apply the Fmask snow mask. Defaults to False. + cloudScoreThresh (int, optional): Threshold for the CloudScore simple algorithm to classify a pixel as cloudy. Lower number masks out more. Defaults to 10. + performCloudScoreOffset (bool, optional): Controls whether to perform an offset correction on the Cloud Score data over bright surfaces. Only use this if bright areas are being masked as clouds. Do not use this in persistently cloud areas. Defaults to True. + cloudScorePctl (int, optional): Percentile of the Cloud Score product to use for the offset correction. Defaults to 10. + zScoreThresh (float, optional): Threshold for the z-score used in TDOM cloud shadow masking. Pixels with z-scores below this threshold are masked. Defaults to -1. + shadowSumThresh (float, optional): Threshold for the sum of reflectance in shadow bands used in TDOM cloud shadow masking. Pixels below this threshold and the zScoreThresh are masked as dark outliers (likely cloud shadows). Defaults to 0.35. + contractPixels (float, optional): Number of pixels to contract cloud and shadow masks by. Defaults to 1.5. + dilatePixels (float, optional): Number of pixels to dilate cloud and shadow masks by. Defaults to 3.5. + shadowSumBands (list[str], optional): List of band names to use for calculating the sum of reflectance in TDOM cloud shadow masking. Defaults to ["nir", "swir1"]. + resampleMethod (str, optional): Specifies the resampling method to apply to the imagery. Valid options include "near", "bilinear", and "bicubic". Defaults to "near". + harmonizeOLI (bool, optional): Determines whether to harmonize OLI data to match TM/ETM+ spectral response. Defaults to False. + preComputedCloudScoreOffset (float | None, optional): Pre-computed Cloud Score offset value to avoid redundant calculations. Defaults to None (automatic calculation). + preComputedTDOMIRMean (float | None, optional): Pre-computed mean of the IR band used in TDOM cloud shadow masking to avoid redundant calculations. Defaults to None (automatic calculation). + preComputedTDOMIRStdDev (float | None, optional): Pre-computed standard deviation of the IR band used in TDOM cloud shadow masking to avoid redundant calculations. Defaults to None (automatic calculation). + landsatCollectionVersion (str, optional): Specifies the Landsat collection version to use (e.g., "C1", "C2"). Defaults to "C2". + verbose (bool, optional): Controls whether to print additional information during processing. Defaults to False. Returns: - ImageCollection: A collection of Landsat scenes. + ee.ImageCollection: A collection of analysis ready, cloud and cloud shadow asked Landsat scenes with common band names. + + >>> import geeViz.getImagesLib as gil + >>> Map = gil.Map + >>> ee = gil.ee + >>> studyArea = gil.testAreas["CO"] + >>> composite = gil.getProcessedLandsatScenes(studyArea, 2023, 2023, 190, 250).median() + >>> Map.addLayer(composite, gil.vizParamsFalse, "Landsat Composite") + >>> Map.addLayer(studyArea, {"canQuery": False}, "Study Area") + >>> Map.centerObject(studyArea) + >>> Map.turnOnInspector() + >>> Map.view() + """ origin = "Landsat" toaOrSR = toaOrSR.upper() @@ -5861,22 +6000,26 @@ def getProcessedSentinel2Scenes( ######################################################################### ######################################################################### def superSimpleGetS2( - studyArea: ee.Geometry, - startDate: str or ee.Date, - endDate: str or ee.Date, + studyArea: ee.Geometry | ee.Feature | ee.FeatureCollection, + startDate: ee.Date | datetime.datetime | str, + endDate: ee.Date | datetime.datetime | str, + startJulian: int = 1, + endJulian: int = 365, toaOrSR: str = "TOA", applyCloudScorePlus: bool = True, cloudScorePlusThresh: float = 0.6, cloudScorePlusScore: str = "cs", ) -> ee.ImageCollection: """ - This function retrieves Sentinel-2 satellite imagery from Earth Engine for a specified study area and date range. + This function retrieves Sentinel-2 satellite imagery from Earth Engine for a specified study area and date range. It applies the cloudScore+ algorithm unless told otherwise. Args: studyArea (ee.Geometry): An Earth Engine geometry object representing the area of interest. - startDate (ee.Date or str): The start date for the image collection in YYYY-MM-DD format. - endDate (ee.Date or str): The end date for the image collection in YYYY-MM-DD format. + startDate (ee.Date, datetime.datetime, or str): The start date for the image collection in YYYY-MM-DD format. + endDate (ee.Date, datetime.datetime, or str): The end date for the image collection in YYYY-MM-DD format. + startJulian (int, optional): The start Julian day of the desired data. Defaults to 1. + endJulian (int, optional): The end Julian day of the desired data. Defaults to 365. toaOrSR (str, optional): Specifies whether to retrieve data in Top-Of-Atmosphere (TOA) reflectance or Surface Reflectance (SR). Defaults to "TOA". applyCloudScorePlus (bool, optional): Determines whether to apply cloud filtering based on the Cloud Score Plus product. Defaults to True. cloudScorePlusThresh (float, optional): Sets the threshold for cloud cover percentage based on Cloud Score Plus. Images with cloud cover exceeding this threshold will be masked out if `applyCloudScorePlus` is True. Defaults to 0.6. @@ -5890,9 +6033,9 @@ def superSimpleGetS2( >>> Map = gil.Map >>> ee = gil.ee >>> studyArea = gil.testAreas["CA"] - >>> composite = gil.superSimpleGetS2(studyArea, "2024-06-01", "2024-09-30").median() + >>> composite = gil.superSimpleGetS2(studyArea, "2024-01-01", "2024-12-31", 190, 250).median() >>> Map.addLayer(composite, gil.vizParamsFalse10k, "Sentinel-2 Composite") - >>> Map.addLayer(studyArea, {}, "Study Area") + >>> Map.addLayer(studyArea, {"canQuery": False}, "Study Area") >>> Map.centerObject(studyArea) >>> Map.turnOnInspector() >>> Map.view() @@ -5900,8 +6043,10 @@ def superSimpleGetS2( """ toaOrSR = toaOrSR.upper() + startDate = ee.Date(startDate) + endDate = ee.Date(endDate) - s2s = ee.ImageCollection(s2CollectionDict[toaOrSR]).filterDate(startDate, endDate).filterBounds(studyArea) + s2s = ee.ImageCollection(s2CollectionDict[toaOrSR]).filterDate(startDate, endDate.advance(1, "day")).filter(ee.Filter.calendarRange(startJulian, endJulian)).filterBounds(studyArea) s2s = s2s.select(sensorBandDict[toaOrSR], sensorBandNameDict[toaOrSR]) @@ -8076,22 +8221,84 @@ def predictWrapper(bn, out): # UCSB-CHG/CHIRPS/DAILY (precipitation only) # and possibly others def getClimateWrapper( - collectionName, - studyArea, - startYear, - endYear, - startJulian, - endJulian, - timebuffer, - weights, - compositingReducer, - exportComposites=False, - exportPathRoot=None, - crs=None, - transform=None, - scale=None, - exportBands=None, -): + collectionName: str, + studyArea: ee.Geometry | ee.Feature | ee.FeatureCollection, + startYear: int, + endYear: int, + startJulian: int, + endJulian: int, + timebuffer: int = 0, + weights: ee.List | list | None = None, + compositingReducer: ee.Reducer | None = None, + exportComposites: bool = False, + exportPathRoot: str | None = None, + crs: str | None = None, + transform: list[int] | None = None, + scale: int | None = None, + exportBands: ee.List | list | None = None, +) -> ee.ImageCollection: + """ + Wrapper function to retrieve and process climate data from various Earth Engine collections. + + This function supports retrieving climate data from collections like NASA/ORNL/DAYMET_V3, + NASA/ORNL/DAYMET_V4, UCSB-CHG/CHIRPS/DAILY (precipitation only), and potentially others. It allows + filtering by date, study area, and Julian day, specifying a compositing reducer, and optionally + exporting the resulting time series. + + Args: + collectionName (str): Name of the Earth Engine collection containing climate data. + studyArea (ee.Geometry | ee.Feature | ee.FeatureCollection): The geographic area of interest (study area) as an Earth Engine geometry object. + startYear (int): The starting year for the data collection. + endYear (int): The ending year for the data collection. + startJulian (int): The starting Julian day of year for the data collection (1-365). + endJulian (int): The ending Julian day of year for the data collection (1-365). + timebuffer (int, optional): Number of years to buffer around each year. Defaults to 0. + weights (ee.List | list| None, optional): List of weights for weighted compositing (if applicable + to the chosen collection). Defaults to None (equal weights). + compositingReducer (ee.Reducer | None, optional): Earth Engine reducer used for compositing + daily data into the desired temporal resolution. Defaults to None (may require a reducer + depending on the collection). + exportComposites (bool, optional): Flag indicating whether to export the resulting time series. + Defaults to False. + exportPathRoot (str | None, optional): Root path for exporting the composites (if exportComposites + is True). Defaults to None (no export). + crs (str | None, optional): Earth Engine projection object for the exported composites + (if exportComposites is True). Defaults to None (uses the source collection's projection). + transform (list[int] | None, optional): Earth Engine transform object for the exported + composites (if exportComposites is True). Defaults to None (uses the source collection's transform). + scale (int | None, optional): Scale in meters for the exported composites (if exportComposites + is True). Defaults to None (uses the source collection's scale). + exportBands (ee.List | list | None, optional): List of band names to export from the composites (if + exportComposites is True). Defaults to None (all bands from the first image in the collection). + + Returns: + ee.ImageCollection: The time series collection of processed climate data. + + >>> import geeViz.getImagesLib as gil + >>> Map = gil.Map + >>> ee = gil.ee + >>> studyArea = gil.testAreas["CO"] + >>> startJulian = 274 + >>> endJulian = 273 + >>> startYear = 2016 + >>> endYear = 2023 + >>> timebuffer = 0 + >>> weights = [1] + >>> compositingReducer = ee.Reducer.mean() + >>> collectionName = "NASA/ORNL/DAYMET_V4" + >>> exportComposites = False + >>> exportPathRoot = "users/username/someCollection" + >>> exportBands = ["prcp.*", "tmax.*", "tmin.*"] + >>> crs = "EPSG:5070" + >>> transform = [1000, 0, -2361915.0, 0, -1000, 3177735.0] + >>> scale = None + >>> climateComposites = gil.getClimateWrapper(collectionName, studyArea, startYear, endYear, startJulian, endJulian, timebuffer, weights, compositingReducer, exportComposites, exportPathRoot, crs, transform, scale, exportBands) + >>> Map.addTimeLapse(climateComposites.select(exportBands), {}, "Climate Composite Time Lapse") + >>> Map.addLayer(studyArea, {"strokeColor": "0000FF", "canQuery": False}, "Study Area", True) + >>> Map.centerObject(studyArea) + >>> Map.turnOnInspector() + >>> Map.view() + """ args = formatArgs(locals()) if "args" in args.keys(): del args["args"] @@ -8156,7 +8363,7 @@ def getClimateWrapper( exportBands, ) - return ts #### + return ts ##################################################################### @@ -8186,29 +8393,68 @@ def customQualityMosaic(inCollection, qualityBand, percentile): ##################################################################### -# On-the-fly basic water masking method -# This method is used to provide a time-sensitive water mask -# This method tends to work well if there is no wet snow present -# Wet snow over flat areas can result in false positives -# Designed to work with TOA data. SR data will result in false negatives (omission) def simpleWaterMask( - img, - contractPixels=0, - slope_thresh=10, - elevationImagePath="USGS/3DEP/10m", - elevationFocalMeanRadius=5.5, -): + img: ee.Image, + contractPixels: int = 0, + slope_thresh: float = 10, + elevationImagePath: str = "USGS/3DEP/10m", + elevationFocalMeanRadius: float = 5.5, +) -> ee.Image: + """ + Performs a basic on-the-fly water masking for TOA reflectance imagery. + + This function creates a water mask based on thresholds applied to Tasseled Cap angles, brightness, and slope. + It's designed for time-sensitive analysis and works well when wet snow is absent. However, wet snow in flat areas + can lead to false positives. SR data might cause false negatives (omissions). + + Args: + img (ee.Image): The input Earth Engine image (TOA reflectance data recommended). + contractPixels (int, optional): Number of pixels to contract the water mask by for morphological closing. Defaults to 0 (no contraction). + slope_thresh (float, optional): Threshold for slope (degrees) to identify flat areas suitable for water masking. Defaults to 10. + elevationImagePath (str, optional): Path to the Earth Engine image containing elevation data. Defaults to "USGS/3DEP/10m" (10m DEM from USGS 3D Elevation Program). + elevationFocalMeanRadius (float, optional): Radius (in meters) for the focal mean filter applied to the elevation data before calculating slope. Defaults to 5.5. + + Returns: + ee.Image: The water mask image with a single band named "waterMask". + + >>> import geeViz.getImagesLib as gil + >>> Map = gil.Map + >>> ee = gil.ee + >>> studyArea = gil.testAreas["CO"] + >>> s2s = gil.superSimpleGetS2(studyArea, "2024-01-01", "2024-12-31", 190, 250).map(lambda img: gil.getTasseledCap(img.divide(10000))) + >>> median_composite = s2s.median() + >>> water = gil.simpleWaterMask(median_composite).rename("Water") + >>> water = water.selfMask().set({"Water_class_values": [1], "Water_class_names": ["Water"], "Water_class_palette": ["0000DD"]}) + >>> Map.addLayer(median_composite, gil.vizParamsFalse, "Sentinel-2 Median Composite") + >>> Map.addLayer(water, {"autoViz": True}, "Water Mask") + >>> Map.addLayer(studyArea, {"canQuery": False}, "Study Area") + >>> Map.centerObject(studyArea, 12) + >>> Map.turnOnInspector() + >>> Map.view() + """ + + # Add Tasseled Cap angles to the image img = addTCAngles(img) + + # Load and resample elevation data ned = ee.Image(elevationImagePath).resample("bicubic") + + # Calculate slope using focal mean filtered elevation slope = ee.Terrain.slope(ned.focal_mean(elevationFocalMeanRadius)) - flat = slope.lte(slope_thresh) - waterMask = img.select(["tcAngleBW"]).gte(-0.05).And(img.select(["tcAngleBG"]).lte(0.05)).And(img.select(["brightness"]).lt(0.3)).And(flat).focal_min(contractPixels) + # Identify flat areas based on slope threshold + flat = slope.lte(slope_thresh) # Less than or equal to threshold - return waterMask.rename(["waterMask"]) + # Define water mask conditions based on Tasseled Cap angles, brightness, and slope + waterMask = img.select(["tcAngleBW"]).gte(-0.05).And(img.select(["tcAngleBG"]).lte(0.05)).And(img.select(["brightness"]).lt(0.3)).And(flat) + + # Apply morphological closing with focal minimum filter + waterMask = waterMask.focal_min(contractPixels) + + # Rename the water mask band + return waterMask.rename(["waterMask"]) #################### -##################################################################### # Jeff Ho Method for algal bloom detection # https://www.nature.com/articles/s41586-019-1648-7 diff --git a/release-notes.md b/release-notes.md index 16dbae7..c4112ac 100644 --- a/release-notes.md +++ b/release-notes.md @@ -1,3 +1,19 @@ +# geeViz 2024.9.3 Release Notes + +## September 20, 2024 + +### New Features + +- **Doc updates** - Continued work improving Documentation website. Numerous function-wise examples added to the code. + +- **GEE Palettes Integration** - Converted Gena's EE Palettes json to a Python script/module. Use the module as `import geeViz.geePalettes as palettes` + +### Bug fixes + +- `Map.addLayer` and `Map.addTimeLapse` functions now create a copy of the `viz` param dictionary. If you passed a dictionary, and then reused that in another layer call, the `layerType` key was then populated and wouldn't be updated, this resulting in an object type error. By creating a copy, the dictionary isn't changed outside the function. + +--- + # geeViz 2024.9.2 Release Notes ## September 18, 2024