Skip to content

nclpy module

Main module for the nclpy package.

Map

This Map class inherits the ipyleaflet Map class.

Parameters:

Name Type Description Default
ipyleaflet ipyleaflet.Map

An ipyleaflet map.

required

add_ee_layer(self, ee_object, vis_params={}, name=None, shown=True, opacity=1.0)

Adds a given EE object to the map as a layer.

Parameters:

Name Type Description Default
ee_object Collection|Feature|Image|MapId

The object to add to the map.

required
vis_params dict

The visualization parameters. Defaults to {}.

{}
name str

The name of the layer. Defaults to 'Layer N'.

None
shown bool

A flag indicating whether the layer should be on by default. Defaults to True.

True
opacity float

The layer's opacity represented as a number between 0 and 1. Defaults to 1.

1.0
Source code in nclpy/nclpy.py
def add_ee_layer(
    self, ee_object, vis_params={}, name=None, shown=True, opacity=1.0
):
    """Adds a given EE object to the map as a layer.
    Args:
        ee_object (Collection|Feature|Image|MapId): The object to add to the map.
        vis_params (dict, optional): The visualization parameters. Defaults to {}.
        name (str, optional): The name of the layer. Defaults to 'Layer N'.
        shown (bool, optional): A flag indicating whether the layer should be on by default. Defaults to True.
        opacity (float, optional): The layer's opacity represented as a number between 0 and 1. Defaults to 1.
    """

    ee_layer = ee_tile_layer(ee_object, vis_params, name, shown, opacity)
    self.add_layer(ee_layer)

add_geojson(self, in_geojson, style=None, layer_name='Untitled')

Adds a GeoJSON file to the map.

Parameters:

Name Type Description Default
in_geojson str

The file path to the input GeoJSON.

required
style dict

The style for the GeoJSON layer. Defaults to None.

None
layer_name str

The layer name for the GeoJSON layer. Defaults to "Untitled".

'Untitled'

Exceptions:

Type Description
FileNotFoundError

If the provided file path does not exist.

TypeError

If the input geojson is not a str or dict.

Source code in nclpy/nclpy.py
def add_geojson(self, in_geojson, style=None, layer_name="Untitled"):
    """Adds a GeoJSON file to the map.
    Args:
        in_geojson (str): The file path to the input GeoJSON.
        style (dict, optional): The style for the GeoJSON layer. Defaults to None.
        layer_name (str, optional): The layer name for the GeoJSON layer. Defaults to "Untitled".
    Raises:
        FileNotFoundError: If the provided file path does not exist.
        TypeError: If the input geojson is not a str or dict.
    """

    import json

    if layer_name == "Untitled":
        layer_name = "Untitled " + random_string()

    if isinstance(in_geojson, str):

        if not os.path.exists(in_geojson):
            raise FileNotFoundError("The provided GeoJSON file could not be found.")

        with open(in_geojson) as f:
            data = json.load(f)

    elif isinstance(in_geojson, dict):
        data = in_geojson

    else:
        raise TypeError("The input geojson must be a type of str or dict.")

    if style is None:
        style = {
            "stroke": True,
            "color": "#000000",
            "weight": 2,
            "opacity": 1,
            "fill": True,
            "fillColor": "#0000ff",
            "fillOpacity": 0.4,
        }

    geo_json = ipyleaflet.GeoJSON(data=data, style=style, name=layer_name)
    self.add_layer(geo_json)

add_shapefile(self, in_shp, style=None, layer_name='Untitled')

Adds a shapefile layer to the map.

Parameters:

Name Type Description Default
in_shp str

The file path to the input shapefile.

required
style dict

The style dictionary. Defaults to None.

None
layer_name str

The layer name for the shapefile layer. Defaults to "Untitled".

'Untitled'
Source code in nclpy/nclpy.py
def add_shapefile(self, in_shp, style=None, layer_name="Untitled"):
    """Adds a shapefile layer to the map.
    Args:
        in_shp (str): The file path to the input shapefile.
        style (dict, optional): The style dictionary. Defaults to None.
        layer_name (str, optional): The layer name for the shapefile layer. Defaults to "Untitled".
    """
    geojson = shp_to_geojson(in_shp)
    self.add_geojson(geojson, style=style, layer_name=layer_name)

addLayer(self, ee_object, vis_params={}, name=None, shown=True, opacity=1.0)

Adds a given EE object to the map as a layer.

Parameters:

Name Type Description Default
ee_object Collection|Feature|Image|MapId

The object to add to the map.

required
vis_params dict

The visualization parameters. Defaults to {}.

{}
name str

The name of the layer. Defaults to 'Layer N'.

None
shown bool

A flag indicating whether the layer should be on by default. Defaults to True.

True
opacity float

The layer's opacity represented as a number between 0 and 1. Defaults to 1.

1.0
Source code in nclpy/nclpy.py
def add_ee_layer(
    self, ee_object, vis_params={}, name=None, shown=True, opacity=1.0
):
    """Adds a given EE object to the map as a layer.
    Args:
        ee_object (Collection|Feature|Image|MapId): The object to add to the map.
        vis_params (dict, optional): The visualization parameters. Defaults to {}.
        name (str, optional): The name of the layer. Defaults to 'Layer N'.
        shown (bool, optional): A flag indicating whether the layer should be on by default. Defaults to True.
        opacity (float, optional): The layer's opacity represented as a number between 0 and 1. Defaults to 1.
    """

    ee_layer = ee_tile_layer(ee_object, vis_params, name, shown, opacity)
    self.add_layer(ee_layer)

toolbar_reset(self)

Reset the toolbar so that no tool is selected.

Source code in nclpy/nclpy.py
def toolbar_reset(self):
    """Reset the toolbar so that no tool is selected."""
    toolbar_grid = self.toolbar
    for tool in toolbar_grid:
        tool.value = False

ee_tile_layer(ee_object, vis_params={}, name='Layer untitled', shown=True, opacity=1.0)

Converts and Earth Engine layer to ipyleaflet TileLayer.

Parameters:

Name Type Description Default
ee_object Collection|Feature|Image|MapId

The object to add to the map.

required
vis_params dict

The visualization parameters. Defaults to {}.

{}
name str

The name of the layer. Defaults to 'Layer untitled'.

'Layer untitled'
shown bool

A flag indicating whether the layer should be on by default. Defaults to True.

True
opacity float

The layer's opacity represented as a number between 0 and 1. Defaults to 1.

1.0
Source code in nclpy/nclpy.py
def ee_tile_layer(
    ee_object, vis_params={}, name="Layer untitled", shown=True, opacity=1.0
):
    """Converts and Earth Engine layer to ipyleaflet TileLayer.
    Args:
        ee_object (Collection|Feature|Image|MapId): The object to add to the map.
        vis_params (dict, optional): The visualization parameters. Defaults to {}.
        name (str, optional): The name of the layer. Defaults to 'Layer untitled'.
        shown (bool, optional): A flag indicating whether the layer should be on by default. Defaults to True.
        opacity (float, optional): The layer's opacity represented as a number between 0 and 1. Defaults to 1.
    """

    image = None

    if (
        not isinstance(ee_object, ee.Image)
        and not isinstance(ee_object, ee.ImageCollection)
        and not isinstance(ee_object, ee.FeatureCollection)
        and not isinstance(ee_object, ee.Feature)
        and not isinstance(ee_object, ee.Geometry)
    ):
        err_str = "\n\nThe image argument in 'addLayer' function must be an instace of one of ee.Image, ee.Geometry, ee.Feature or ee.FeatureCollection."
        raise AttributeError(err_str)

    if (
        isinstance(ee_object, ee.geometry.Geometry)
        or isinstance(ee_object, ee.feature.Feature)
        or isinstance(ee_object, ee.featurecollection.FeatureCollection)
    ):
        features = ee.FeatureCollection(ee_object)

        width = 2

        if "width" in vis_params:
            width = vis_params["width"]

        color = "000000"

        if "color" in vis_params:
            color = vis_params["color"]

        image_fill = features.style(**{"fillColor": color}).updateMask(
            ee.Image.constant(0.5)
        )
        image_outline = features.style(
            **{"color": color, "fillColor": "00000000", "width": width}
        )

        image = image_fill.blend(image_outline)
    elif isinstance(ee_object, ee.image.Image):
        image = ee_object
    elif isinstance(ee_object, ee.imagecollection.ImageCollection):
        image = ee_object.mosaic()

    map_id_dict = ee.Image(image).getMapId(vis_params)
    tile_layer = TileLayer(
        url=map_id_dict["tile_fetcher"].url_format,
        attribution="Google Earth Engine",
        name=name,
        opacity=opacity,
        visible=shown,
    )
    return tile_layer

shp_to_geojson(in_shp, out_geojson=None)

Converts a shapefile to GeoJSON.

Parameters:

Name Type Description Default
in_shp str

The file path to the input shapefile.

required
out_geojson str

The file path to the output GeoJSON. Defaults to None.

None

Exceptions:

Type Description
FileNotFoundError

If the input shapefile does not exist.

Returns:

Type Description
dict

The dictionary of the GeoJSON.

Source code in nclpy/nclpy.py
def shp_to_geojson(in_shp, out_geojson=None):
    """Converts a shapefile to GeoJSON.
    Args:
        in_shp (str): The file path to the input shapefile.
        out_geojson (str, optional): The file path to the output GeoJSON. Defaults to None.
    Raises:
        FileNotFoundError: If the input shapefile does not exist.
    Returns:
        dict: The dictionary of the GeoJSON.
    """
    import json
    import shapefile

    in_shp = os.path.abspath(in_shp)

    if not os.path.exists(in_shp):
        raise FileNotFoundError("The provided shapefile could not be found.")

    sf = shapefile.Reader(in_shp)
    geojson = sf.__geo_interface__

    if out_geojson is None:
        return geojson
    else:
        out_geojson = os.path.abspath(out_geojson)
        out_dir = os.path.dirname(out_geojson)
        if not os.path.exists(out_dir):
            os.makedirs(out_dir)
        with open(out_geojson, "w") as f:
            f.write(json.dumps(geojson))

Last update: 2021-05-03