{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "\n", " \n", " \n", " \n", "
View source on GitHubNotebook Viewer Run in Google Colab
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Install Earth Engine API and geemap\n", "Install the [Earth Engine Python API](https://developers.google.com/earth-engine/python_install) and [geemap](https://github.com/giswqs/geemap). The **geemap** Python package is built upon the [ipyleaflet](https://github.com/jupyter-widgets/ipyleaflet) and [folium](https://github.com/python-visualization/folium) packages and implements several methods for interacting with Earth Engine data layers, such as `Map.addLayer()`, `Map.setCenter()`, and `Map.centerObject()`.\n", "The following script checks if the geemap package has been installed. If not, it will install geemap, which automatically installs its [dependencies](https://github.com/giswqs/geemap#dependencies), including earthengine-api, folium, and ipyleaflet." ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [], "source": [ "# Installs geemap package\n", "import subprocess\n", "\n", "try:\n", " import geemap\n", "except ImportError:\n", " print('geemap package not installed. Installing ...')\n", " subprocess.check_call([\"python\", '-m', 'pip', 'install', 'geemap'])" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [], "source": [ "import ee\n", "import geemap" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Create an interactive map" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "scrolled": true }, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "734cad92dedb43f883d8c4d17e567566", "version_major": 2, "version_minor": 0 }, "text/plain": [ "Map(center=[40, -100], controls=(WidgetControl(options=['position'], widget=HBox(children=(ToggleButton(value=…" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "Map = geemap.Map(center=(40, -100), zoom=4)\n", "Map.add_minimap(position='bottomright')\n", "Map" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Add tile layers\n", "\n", "For example, you can Google Map tile layer:" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [], "source": [ "url = 'https://mt1.google.com/vt/lyrs=m&x={x}&y={y}&z={z}'\n", "Map.add_tile_layer(url, name='Google Map', attribution='Google')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Add Google Terrain tile layer:" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [], "source": [ "url = 'https://mt1.google.com/vt/lyrs=p&x={x}&y={y}&z={z}'\n", "Map.add_tile_layer(url, name='Google Terrain', attribution='Google')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Add WMS layers\n", "More WMS layers can be found at ." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "For example, you can add NAIP imagery." ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [], "source": [ "url = 'https://services.nationalmap.gov/arcgis/services/USGSNAIPImagery/ImageServer/WMSServer?'\n", "Map.add_wms_layer(url=url, layers='0', name='NAIP Imagery', format='image/png')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Add USGS 3DEP Elevation Dataset" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [], "source": [ "url = 'https://elevation.nationalmap.gov/arcgis/services/3DEPElevation/ImageServer/WMSServer?'\n", "Map.add_wms_layer(url=url, layers='3DEPElevation:None', name='3DEP Elevation', format='image/png')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Capture user inputs" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "d3fbaaa221ac40b7950c1f291fccc97b", "version_major": 2, "version_minor": 0 }, "text/plain": [ "Label(value='')" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "e5373bd574b14dce846562e61c943e86", "version_major": 2, "version_minor": 0 }, "text/plain": [ "Map(center=[40, -100], controls=(WidgetControl(options=['position'], widget=HBox(children=(ToggleButton(value=…" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import geemap\n", "from ipywidgets import Label\n", "from ipyleaflet import Marker\n", "\n", "Map = geemap.Map(center=(40, -100), zoom=4)\n", "\n", "label = Label()\n", "display(label)\n", "\n", "coordinates = []\n", "\n", "def handle_interaction(**kwargs):\n", " latlon = kwargs.get('coordinates')\n", " if kwargs.get('type') == 'mousemove':\n", " label.value = str(latlon)\n", " elif kwargs.get('type') == 'click':\n", " coordinates.append(latlon)\n", " Map.add_layer(Marker(location=latlon))\n", "\n", "Map.on_interaction(handle_interaction)\n", "\n", "Map" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[]\n" ] } ], "source": [ "print(coordinates)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## SplitMap control" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "c559b796a4714e76b02a0a66754f5cc7", "version_major": 2, "version_minor": 0 }, "text/plain": [ "Map(center=[47.5, -101], controls=(WidgetControl(options=['position'], widget=HBox(children=(ToggleButton(valu…" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import geemap\n", "from ipyleaflet import *\n", "\n", "Map = geemap.Map(center=(47.50, -101), zoom=7)\n", "\n", "right_layer = WMSLayer(\n", " url = 'https://ndgishub.nd.gov/arcgis/services/Imagery/AerialImage_ND_2017_CIR/ImageServer/WMSServer?',\n", " layers = 'AerialImage_ND_2017_CIR',\n", " name = 'AerialImage_ND_2017_CIR',\n", " format = 'image/png'\n", ")\n", "\n", "left_layer = WMSLayer(\n", " url = 'https://ndgishub.nd.gov/arcgis/services/Imagery/AerialImage_ND_2018_CIR/ImageServer/WMSServer?',\n", " layers = 'AerialImage_ND_2018_CIR',\n", " name = 'AerialImage_ND_2018_CIR',\n", " format = 'image/png'\n", ")\n", "\n", "control = SplitMapControl(left_layer=left_layer, right_layer=right_layer)\n", "Map.add_control(control)\n", "Map.add_control(LayersControl(position='topright'))\n", "Map.add_control(FullScreenControl())\n", "\n", "Map" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "e37e3938aaf44f41922b824643ca359c", "version_major": 2, "version_minor": 0 }, "text/plain": [ "Map(center=[40, -100], controls=(WidgetControl(options=['position'], widget=HBox(children=(ToggleButton(value=…" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import geemap\n", "Map = geemap.Map()\n", "Map.split_map(left_layer='HYBRID', right_layer='ESRI')\n", "Map" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.5" } }, "nbformat": 4, "nbformat_minor": 4 }