{ "cells": [ { "cell_type": "code", "execution_count": null, "metadata": { "extensions": { "jupyter_dashboards": { "version": 1, "views": { "grid_default": {}, "report_default": {} } } } }, "outputs": [], "source": [ "import json\n", "import copy\n", "from ipyleaflet import (\n", " Map,\n", " GeoJSON,\n", " Layer\n", ")" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "m = Map(center=[53.88, 27.45], zoom=3, name='Base map')\n", "m" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "extensions": { "jupyter_dashboards": { "version": 1, "views": { "grid_default": {}, "report_default": {} } } }, "scrolled": false }, "outputs": [], "source": [ "# geojson layer with hover handler\n", "with open('./europe_110.geo.json') as f:\n", " data = json.load(f)\n", "\n", "for feature in data['features']:\n", " feature['properties']['style'] = {\n", " 'color': 'grey',\n", " 'weight': 1,\n", " 'fillColor': 'grey',\n", " 'fillOpacity': 0.2\n", " }\n", "\n", "selected_set = set()\n", "selected_layer = None\n", "\n", "def convert_selected_set_to_geojson(selected_set):\n", " geojson = {'type': 'FeatureCollection', 'features': []}\n", " geojson['features'] = [feature for feature in data['features'] if feature['properties']['iso_a3'] in selected_set]\n", " for feature in data['features']:\n", " feature['properties']['style'] = {'color': 'yellow', 'weight': 2,'fillColor': 'grey', 'fillOpacity': 0.2} \n", " return geojson\n", "\n", "def selected_onclick_handler(event=None, id=None, properties=None, **args):\n", " global selected_layer\n", " if properties is None:\n", " return\n", " cid = properties['iso_a3']\n", " selected_set.remove(cid)\n", " if selected_layer is not None:\n", " m.remove_layer(selected_layer)\n", " selected_layer = GeoJSON(data=convert_selected_set_to_geojson(selected_set),\n", " name='Selected EU Countries',\n", " hover_style={'fillColor': 'yellow'}\n", " )\n", " selected_layer.on_click(selected_onclick_handler)\n", " m.add_layer(selected_layer)\n", "\n", "def geojson_onclick_handler(event=None, id=None, properties=None, **args):\n", " global selected_layer\n", " if properties is None:\n", " return\n", " cid = properties['iso_a3']\n", " selected_set.add(cid)\n", " if selected_layer is not None:\n", " m.remove_layer(selected_layer)\n", " selected_layer = GeoJSON(data=convert_selected_set_to_geojson(selected_set),\n", " name='Selected EU Countries',\n", " hover_style={'fillColor': 'yellow'}\n", " )\n", " selected_layer.on_click(selected_onclick_handler)\n", " m.add_layer(selected_layer)\n", " \n", " \n", "geojson_layer = GeoJSON(data = data, name='EU Countries', hover_style={'fillColor': 'red'})\n", "geojson_layer.on_click(geojson_onclick_handler)\n", "m.add_layer(geojson_layer)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "extensions": { "jupyter_dashboards": { "activeView": "grid_default", "version": 1, "views": { "grid_default": { "cellMargin": 10, "defaultCellHeight": 20, "maxColumns": 12, "name": "grid", "type": "grid" }, "report_default": { "name": "report", "type": "report" } } } }, "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.7.3" } }, "nbformat": 4, "nbformat_minor": 2 }