{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "<style>\n", " .container {\n", " box-shadow: none !important;\n", " }\n", "\n", " .output_html {\n", " shadow: none !important;\n", " max-width: 100% !important;\n", " padding: 0 !important;\n", " }\n", "\n", " .title1 {\n", " color: #e74a49 !important;\n", " }\n", "</style>\n", "\n", "<script async>\n", "code_show=true;\n", "function code_toggle() {\n", " if (code_show) {\n", " $('div.input').each(function(id) {\n", " el = $(this).find('.cm-variable:first');\n", " if (id == 0 || el.text() == 'hide_me') {\n", " $(this).hide();\n", " }\n", " });\n", " $('div.output_prompt').css('opacity', 0);\n", " } else {\n", " $('div.input').each(function(id) {\n", " $(this).show();\n", " });\n", " $('div.output_prompt').css('opacity', 1);\n", " }\n", " code_show = !code_show\n", "}\n", "$( document ).ready(code_toggle);\n", "</script>\n", "<form action=\"javascript:code_toggle()\"><input style=\"opacity:0\" type=\"submit\" value=\"Click here to toggle on/off the raw code.\"></form>" ], "text/plain": [ "<IPython.core.display.HTML object>" ] }, "execution_count": 1, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from IPython.display import HTML\n", "\n", "hide_me = ''\n", "\n", "HTML('''\n", "<style>\n", " .container {\n", " box-shadow: none !important;\n", " }\n", "\n", " .output_html {\n", " shadow: none !important;\n", " max-width: 100% !important;\n", " padding: 0 !important;\n", " }\n", "\n", " .title1 {\n", " color: #e74a49 !important;\n", " }\n", "</style>\n", "\n", "<script async>\n", "code_show=true;\n", "function code_toggle() {\n", " if (code_show) {\n", " $('div.input').each(function(id) {\n", " el = $(this).find('.cm-variable:first');\n", " if (id == 0 || el.text() == 'hide_me') {\n", " $(this).hide();\n", " }\n", " });\n", " $('div.output_prompt').css('opacity', 0);\n", " } else {\n", " $('div.input').each(function(id) {\n", " $(this).show();\n", " });\n", " $('div.output_prompt').css('opacity', 1);\n", " }\n", " code_show = !code_show\n", "}\n", "$( document ).ready(code_toggle);\n", "</script>\n", "<form action=\"javascript:code_toggle()\"><input style=\"opacity:0\" type=\"submit\" value=\"Click here to toggle on/off the raw code.\"></form>''')\n" ] }, { "cell_type": "markdown", "metadata": { "hideCode": false, "hidePrompt": false }, "source": [ "<div>\n", " <a href=\"https://github.com/rafpyprog/pymaps/\" style=\"text-decoration: none\">\n", " <img src=\"https://raw.githubusercontent.com/rafpyprog/pymaps/master/images/pymaps-logo-36x36.png\" style=\"margin:auto !important;text-align:center;\"/>\n", " <strong><p style=\"margin:auto !important;text-align:center !important;padding:10px 10px 0px 10px !important;font-size:36px !important;color:#000000 !important;\">PyMaps</p></strong></a>\n", " <p style=\"font-size:24px;text-align:center;color:#e74a49;padding:0 !important;margin:0.4em !important;\">Markers</p> </div>\n", "\n", "<div style=\"text-align:center;width:100%\">\n", " <div style=\"display: inline-block;\">\n", " <div style=\"float:left;margin:0.1em;\">\n", " <a href=\"https://pypi.python.org/pypi/pymaps\"><img src=\"https://img.shields.io/pypi/v/pymaps.svg\"></a>\n", " </div>\n", " <div style=\"float:left;margin:0.1em;\">\n", " <a href=\"https://pypi.python.org/pypi/pymaps\"><img src=\"https://img.shields.io/pypi/pyversions/pymaps.svg\">\n", " </a>\n", " </div>\n", " <div style=\"float:left;margin:0.1em;\">\n", " <a href=\"\"><img src=\"https://img.shields.io/pypi/l/pymaps.svg\"></a>\n", " </div>\n", " <div style=\"float:left;margin:0.1em;\">\n", " <a href=\"https://travis-ci.org/rafpyprog/pymaps\">\n", " <img src=\"https://img.shields.io/travis/rafpyprog/pymaps.svg\">\n", " </a>\n", " </div>\n", " </div>\n", "</div>\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "A Marker identifies a location on a map. By default, a marker uses a standard image. \n", "Markers can display custom images using the icon parameter." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "<h1 class=\"title1\">Table of Contents</h1>\n", "* [Create a map with a marker](#marker1)\n", "* [Marker animation](#marker2)\n", "* [Custom icons](#marker3)\n", "* [Custom colors](#marker4)\n", "* [Custom icon from URL](#marker5) \n", "* [Creating a MarkerCluster](#marker6) " ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "hideCode": false, "hidePrompt": false }, "outputs": [], "source": [ "import os\n", "import random\n", "from IPython.display import HTML, display\n", "import pandas as pd" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "<a id=\"marker1\"></a>\n", "<h1 class=\"title1\">Create a Map with a Marker</h1>" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "API_KEY = os.environ['MAPS_API_KEY']\n", "\n", "from pymaps import Map\n", "from pymaps.marker import Marker, MarkerCluster" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "scrolled": false }, "outputs": [ { "data": { "text/html": [ "<iframe src=\"data:text/html;charset=utf-8;base64,PCFET0NUWVBFIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPlB5TWFwczwvdGl0bGU+CiAgICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0iaW5pdGlhbC1zY2FsZT0xLjAiPgogICAgPG1ldGEgY2hhcnNldD0idXRmLTgiPgogICAgPHN0eWxlPgogICAgICAgICNtYXAgewogICAgICAgICAgICBoZWlnaHQ6IDUwMHB4OwogICAgICAgIH0KICAgICAgICBodG1sLCBib2R5IHsKICAgICAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgICAgIHBhZGRpbmc6IDA7CiAgICAgICAgfQogICAgPC9zdHlsZT4KICA8L2hlYWQ+CiAgPGJvZHk+CiAgICAKICAgIDxkaXYgaWQ9Im1hcCI+CiAgICAgIDwhLS0gTWFwIHdpbGwgYmUgcGxhY2VkIGhlcmUgLS0+CiAgICA8L2Rpdj4KICAgIDxzY3JpcHQ+CiAgICAgICAgZnVuY3Rpb24gaW5pdE1hcCgpIHsKICAgICAgICAgICAgdmFyIG1hcCA9IG5ldyBnb29nbGUubWFwcy5NYXAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21hcCcpLCB7CiAgICAgICAgICAgICAgICB6b29tOiAxMywKICAgICAgICAgICAgICAgIGNlbnRlcjoge2xhdDogLTMuODU3NiwgbG5nOiAtMzIuNDI5N30sCiAgICAgICAgICAgICAgICBtYXBUeXBlSWQ6ICdyb2FkbWFwJywKICAgICAgICAgICAgICAgIHN0cmVldFZpZXdDb250cm9sOiAxLAogICAgICAgICAgICAgICAgem9vbUNvbnRyb2w6IDEsCiAgICAgICAgICAgICAgICBkaXNhYmxlRGVmYXVsdFVJOiAwLAogICAgICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgIC8vIG1hcCBtYXJrZXJzCiAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgdmFyIG1hcmtlcj1uZXcgZ29vZ2xlLm1hcHMuTWFya2VyKHtwb3NpdGlvbjp7bGF0Oi0zLjg1NzYsbG5nOi0zMi40Mjk3fSxkcmFnZ2FibGU6ZmFsc2UsbWFwOm1hcCx0aXRsZToiRmVybmFuZG8gZGUgTm9yb25oYSIsbGFiZWw6IiIsYW5pbWF0aW9uOm51bGwsaWNvbjpudWxsLG9wYWNpdHk6MSxvcHRpbWl6ZWQ6dHJ1ZX0pOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAKCiAgICAgICAgICAgICAgIC8vIGZpdEJvdW5kcyBtZXRob2QKICAgICAgICAgICAgICAgCgogICAgICAgICAgICAgICAvLyBNYXJrZXJDbHVzdGVyCiAgICAgICAgICAgICAgIAoKICAgICAgICAgICAgCiAgICAgICAgfTsKCiAgICAgIC8vIEF0dGFjaGVzIGFuIGluZm8gd2luZG93IHRvIGEgbWFya2VyIHdpdGggdGhlIHByb3ZpZGVkIG1lc3NhZ2UKICAgICAgZnVuY3Rpb24gYXR0YWNoSW5mb1dpbmRvdyhtYXJrZXIsIG1lc3NhZ2UpIHsKICAgICAgICB2YXIgaW5mb3dpbmRvdyA9IG5ldyBnb29nbGUubWFwcy5JbmZvV2luZG93KHsKICAgICAgICAgIGNvbnRlbnQ6IG1lc3NhZ2UKICAgICAgICB9KTsKCiAgICAgICAgbWFya2VyLmFkZExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKCkgewogICAgICAgICAgaW5mb3dpbmRvdy5vcGVuKG1hcmtlci5nZXQoJ21hcCcpLCBtYXJrZXIpOwogICAgICAgIH0pOwogICAgICB9OwogICAgPC9zY3JpcHQ+CgogICAgCiAgICA8c2NyaXB0IGFzeW5jIGRlZmVyCiAgICAgc3JjPSJodHRwczovL21hcHMuZ29vZ2xlYXBpcy5jb20vbWFwcy9hcGkvanM/a2V5PUFJemFTeUItWHNfTzJhaTZ6c0FVcmg5dGtrSFBTYkNTbTc3cHdrNCZjYWxsYmFjaz1pbml0TWFwIj4KICAgIDwvc2NyaXB0PgogIDwvYm9keT4KPC9odG1sPg==\" style=\"height:500px;width:100%;border:none !important\"></iframe>" ], "text/plain": [ "<pymaps.pymaps.Map at 0x1d1f286b128>" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "fernando_de_noronha = (-3.8576, -32.4297)\n", "m = Map(api_key=API_KEY, zoom=13)\n", "title = 'Fernando de Noronha' # hover the mouse over the marker to show the title\n", "Marker(fernando_de_noronha, title=title).add_to(m)\n", "m" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "* Lets add more markers..." ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "hideCode": false, "hidePrompt": false }, "outputs": [], "source": [ "cities = {\"rome\": (41.9028, 12.4964), \n", " 'paris' : (48.8566, 2.3522),\n", " 'madrid' : (40.4168, -3.7038),\n", " 'berlin' : (52.5200, 13.4050), \n", " 'amsterdan' : (52.3702, 4.8952),\n", " 'london' : (51.509865, -0.118092)}" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "hideCode": false, "hidePrompt": false }, "outputs": [ { "data": { "text/html": [ "<iframe src=\"data:text/html;charset=utf-8;base64,PCFET0NUWVBFIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPlB5TWFwczwvdGl0bGU+CiAgICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0iaW5pdGlhbC1zY2FsZT0xLjAiPgogICAgPG1ldGEgY2hhcnNldD0idXRmLTgiPgogICAgPHN0eWxlPgogICAgICAgICNtYXAgewogICAgICAgICAgICBoZWlnaHQ6IDUwMHB4OwogICAgICAgIH0KICAgICAgICBodG1sLCBib2R5IHsKICAgICAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgICAgIHBhZGRpbmc6IDA7CiAgICAgICAgfQogICAgPC9zdHlsZT4KICA8L2hlYWQ+CiAgPGJvZHk+CiAgICAKICAgIDxkaXYgaWQ9Im1hcCI+CiAgICAgIDwhLS0gTWFwIHdpbGwgYmUgcGxhY2VkIGhlcmUgLS0+CiAgICA8L2Rpdj4KICAgIDxzY3JpcHQ+CiAgICAgICAgZnVuY3Rpb24gaW5pdE1hcCgpIHsKICAgICAgICAgICAgdmFyIG1hcCA9IG5ldyBnb29nbGUubWFwcy5NYXAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21hcCcpLCB7CiAgICAgICAgICAgICAgICB6b29tOiA2LAogICAgICAgICAgICAgICAgY2VudGVyOiB7bGF0OiAtMTguOTksIGxuZzogLTQ0LjA0fSwKICAgICAgICAgICAgICAgIG1hcFR5cGVJZDogJ3JvYWRtYXAnLAogICAgICAgICAgICAgICAgc3RyZWV0Vmlld0NvbnRyb2w6IDAsCiAgICAgICAgICAgICAgICB6b29tQ29udHJvbDogMSwKICAgICAgICAgICAgICAgIGRpc2FibGVEZWZhdWx0VUk6IDEsCiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgLy8gbWFwIG1hcmtlcnMKICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICB2YXIgbWFya2VyPW5ldyBnb29nbGUubWFwcy5NYXJrZXIoe3Bvc2l0aW9uOntsYXQ6NDEuOTAyOCxsbmc6MTIuNDk2NH0sZHJhZ2dhYmxlOmZhbHNlLG1hcDptYXAsdGl0bGU6IlJvbWUiLGxhYmVsOiIxIixhbmltYXRpb246bnVsbCxpY29uOm51bGwsb3BhY2l0eToxLG9wdGltaXplZDp0cnVlfSk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICB2YXIgbWFya2VyPW5ldyBnb29nbGUubWFwcy5NYXJrZXIoe3Bvc2l0aW9uOntsYXQ6NDguODU2Nixsbmc6Mi4zNTIyfSxkcmFnZ2FibGU6ZmFsc2UsbWFwOm1hcCx0aXRsZToiUGFyaXMiLGxhYmVsOiIyIixhbmltYXRpb246bnVsbCxpY29uOm51bGwsb3BhY2l0eToxLG9wdGltaXplZDp0cnVlfSk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICB2YXIgbWFya2VyPW5ldyBnb29nbGUubWFwcy5NYXJrZXIoe3Bvc2l0aW9uOntsYXQ6NDAuNDE2OCxsbmc6LTMuNzAzOH0sZHJhZ2dhYmxlOmZhbHNlLG1hcDptYXAsdGl0bGU6Ik1hZHJpZCIsbGFiZWw6IjMiLGFuaW1hdGlvbjpudWxsLGljb246bnVsbCxvcGFjaXR5OjEsb3B0aW1pemVkOnRydWV9KTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgIHZhciBtYXJrZXI9bmV3IGdvb2dsZS5tYXBzLk1hcmtlcih7cG9zaXRpb246e2xhdDo1Mi41Mixsbmc6MTMuNDA1fSxkcmFnZ2FibGU6ZmFsc2UsbWFwOm1hcCx0aXRsZToiQmVybGluIixsYWJlbDoiNCIsYW5pbWF0aW9uOm51bGwsaWNvbjpudWxsLG9wYWNpdHk6MSxvcHRpbWl6ZWQ6dHJ1ZX0pOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgdmFyIG1hcmtlcj1uZXcgZ29vZ2xlLm1hcHMuTWFya2VyKHtwb3NpdGlvbjp7bGF0OjUyLjM3MDIsbG5nOjQuODk1Mn0sZHJhZ2dhYmxlOmZhbHNlLG1hcDptYXAsdGl0bGU6IkFtc3RlcmRhbiIsbGFiZWw6IjUiLGFuaW1hdGlvbjpudWxsLGljb246bnVsbCxvcGFjaXR5OjEsb3B0aW1pemVkOnRydWV9KTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgIHZhciBtYXJrZXI9bmV3IGdvb2dsZS5tYXBzLk1hcmtlcih7cG9zaXRpb246e2xhdDo1MS41MDk4NjUsbG5nOi0wLjExODA5Mn0sZHJhZ2dhYmxlOmZhbHNlLG1hcDptYXAsdGl0bGU6IkxvbmRvbiIsbGFiZWw6IjYiLGFuaW1hdGlvbjpudWxsLGljb246bnVsbCxvcGFjaXR5OjEsb3B0aW1pemVkOnRydWV9KTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgCgogICAgICAgICAgICAgICAvLyBmaXRCb3VuZHMgbWV0aG9kCiAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICB2YXIgYm91bmRzPW5ldyBnb29nbGUubWFwcy5MYXRMbmdCb3VuZHMoe2xhdDo0MC40MTY4LGxuZzotMy43MDM4fSx7bGF0OjUyLjUyLGxuZzoxMy40MDV9KTttYXAuZml0Qm91bmRzKGJvdW5kcyk7CiAgICAgICAgICAgICAgIAoKICAgICAgICAgICAgICAgLy8gTWFya2VyQ2x1c3RlcgogICAgICAgICAgICAgICAKCiAgICAgICAgICAgIAogICAgICAgIH07CgogICAgICAvLyBBdHRhY2hlcyBhbiBpbmZvIHdpbmRvdyB0byBhIG1hcmtlciB3aXRoIHRoZSBwcm92aWRlZCBtZXNzYWdlCiAgICAgIGZ1bmN0aW9uIGF0dGFjaEluZm9XaW5kb3cobWFya2VyLCBtZXNzYWdlKSB7CiAgICAgICAgdmFyIGluZm93aW5kb3cgPSBuZXcgZ29vZ2xlLm1hcHMuSW5mb1dpbmRvdyh7CiAgICAgICAgICBjb250ZW50OiBtZXNzYWdlCiAgICAgICAgfSk7CgogICAgICAgIG1hcmtlci5hZGRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbigpIHsKICAgICAgICAgIGluZm93aW5kb3cub3BlbihtYXJrZXIuZ2V0KCdtYXAnKSwgbWFya2VyKTsKICAgICAgICB9KTsKICAgICAgfTsKICAgIDwvc2NyaXB0PgoKICAgIAogICAgPHNjcmlwdCBhc3luYyBkZWZlcgogICAgIHNyYz0iaHR0cHM6Ly9tYXBzLmdvb2dsZWFwaXMuY29tL21hcHMvYXBpL2pzP2tleT1BSXphU3lCLVhzX08yYWk2enNBVXJoOXRra0hQU2JDU203N3B3azQmY2FsbGJhY2s9aW5pdE1hcCI+CiAgICA8L3NjcmlwdD4KICA8L2JvZHk+CjwvaHRtbD4=\" style=\"height:500px;width:100%;border:none !important\"></iframe>" ], "text/plain": [ "<pymaps.pymaps.Map at 0x1d1f287b0b8>" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "map = Map([-18.99, -44.04], api_key=API_KEY, zoom=6, show_pegman=False, disable_default_ui=True)\n", "\n", "for n, values in enumerate(cities.items(), 1): \n", " city_name, latlgn = values\n", " title = city_name.title() \n", " Marker(latlgn, title=title, label=n).add_to(map)\n", "map.fit_bounds(cities.values())\n", "map" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "<a id=\"marker2\"></a>\n", "## Marker animation" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/html": [ "<iframe src=\"data:text/html;charset=utf-8;base64,PCFET0NUWVBFIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPlB5TWFwczwvdGl0bGU+CiAgICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0iaW5pdGlhbC1zY2FsZT0xLjAiPgogICAgPG1ldGEgY2hhcnNldD0idXRmLTgiPgogICAgPHN0eWxlPgogICAgICAgICNtYXAgewogICAgICAgICAgICBoZWlnaHQ6IDUwMHB4OwogICAgICAgIH0KICAgICAgICBodG1sLCBib2R5IHsKICAgICAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgICAgIHBhZGRpbmc6IDA7CiAgICAgICAgfQogICAgPC9zdHlsZT4KICA8L2hlYWQ+CiAgPGJvZHk+CiAgICAKICAgIDxkaXYgaWQ9Im1hcCI+CiAgICAgIDwhLS0gTWFwIHdpbGwgYmUgcGxhY2VkIGhlcmUgLS0+CiAgICA8L2Rpdj4KICAgIDxzY3JpcHQ+CiAgICAgICAgZnVuY3Rpb24gaW5pdE1hcCgpIHsKICAgICAgICAgICAgdmFyIG1hcCA9IG5ldyBnb29nbGUubWFwcy5NYXAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21hcCcpLCB7CiAgICAgICAgICAgICAgICB6b29tOiA2LAogICAgICAgICAgICAgICAgY2VudGVyOiB7bGF0OiAtMTguOTksIGxuZzogLTQ0LjA0fSwKICAgICAgICAgICAgICAgIG1hcFR5cGVJZDogJ3JvYWRtYXAnLAogICAgICAgICAgICAgICAgc3RyZWV0Vmlld0NvbnRyb2w6IDAsCiAgICAgICAgICAgICAgICB6b29tQ29udHJvbDogMSwKICAgICAgICAgICAgICAgIGRpc2FibGVEZWZhdWx0VUk6IDEsCiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgLy8gbWFwIG1hcmtlcnMKICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICB2YXIgbWFya2VyPW5ldyBnb29nbGUubWFwcy5NYXJrZXIoe3Bvc2l0aW9uOntsYXQ6NDEuOTAyOCxsbmc6MTIuNDk2NH0sZHJhZ2dhYmxlOmZhbHNlLG1hcDptYXAsdGl0bGU6IlJvbWUiLGxhYmVsOiIxIixhbmltYXRpb246bnVsbCxpY29uOm51bGwsb3BhY2l0eToxLG9wdGltaXplZDp0cnVlfSk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICB2YXIgbWFya2VyPW5ldyBnb29nbGUubWFwcy5NYXJrZXIoe3Bvc2l0aW9uOntsYXQ6NDguODU2Nixsbmc6Mi4zNTIyfSxkcmFnZ2FibGU6ZmFsc2UsbWFwOm1hcCx0aXRsZToiUGFyaXMiLGxhYmVsOiIyIixhbmltYXRpb246bnVsbCxpY29uOm51bGwsb3BhY2l0eToxLG9wdGltaXplZDp0cnVlfSk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICB2YXIgbWFya2VyPW5ldyBnb29nbGUubWFwcy5NYXJrZXIoe3Bvc2l0aW9uOntsYXQ6NDAuNDE2OCxsbmc6LTMuNzAzOH0sZHJhZ2dhYmxlOmZhbHNlLG1hcDptYXAsdGl0bGU6Ik1hZHJpZCIsbGFiZWw6IjMiLGFuaW1hdGlvbjpudWxsLGljb246bnVsbCxvcGFjaXR5OjEsb3B0aW1pemVkOnRydWV9KTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgIHZhciBtYXJrZXI9bmV3IGdvb2dsZS5tYXBzLk1hcmtlcih7cG9zaXRpb246e2xhdDo1Mi41Mixsbmc6MTMuNDA1fSxkcmFnZ2FibGU6ZmFsc2UsbWFwOm1hcCx0aXRsZToiQmVybGluIixsYWJlbDoiNCIsYW5pbWF0aW9uOm51bGwsaWNvbjpudWxsLG9wYWNpdHk6MSxvcHRpbWl6ZWQ6dHJ1ZX0pOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgdmFyIG1hcmtlcj1uZXcgZ29vZ2xlLm1hcHMuTWFya2VyKHtwb3NpdGlvbjp7bGF0OjUyLjM3MDIsbG5nOjQuODk1Mn0sZHJhZ2dhYmxlOmZhbHNlLG1hcDptYXAsdGl0bGU6IkFtc3RlcmRhbiIsbGFiZWw6IjUiLGFuaW1hdGlvbjpudWxsLGljb246bnVsbCxvcGFjaXR5OjEsb3B0aW1pemVkOnRydWV9KTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgIHZhciBtYXJrZXI9bmV3IGdvb2dsZS5tYXBzLk1hcmtlcih7cG9zaXRpb246e2xhdDo1MS41MDk4NjUsbG5nOi0wLjExODA5Mn0sZHJhZ2dhYmxlOmZhbHNlLG1hcDptYXAsdGl0bGU6IkxvbmRvbiIsbGFiZWw6IiIsYW5pbWF0aW9uOmdvb2dsZS5tYXBzLkFuaW1hdGlvbi5CT1VOQ0UsaWNvbjpudWxsLG9wYWNpdHk6MSxvcHRpbWl6ZWQ6dHJ1ZX0pOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAKCiAgICAgICAgICAgICAgIC8vIGZpdEJvdW5kcyBtZXRob2QKICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgIHZhciBib3VuZHM9bmV3IGdvb2dsZS5tYXBzLkxhdExuZ0JvdW5kcyh7bGF0OjQwLjQxNjgsbG5nOi0zLjcwMzh9LHtsYXQ6NTIuNTIsbG5nOjEzLjQwNX0pO21hcC5maXRCb3VuZHMoYm91bmRzKTsKICAgICAgICAgICAgICAgCgogICAgICAgICAgICAgICAvLyBNYXJrZXJDbHVzdGVyCiAgICAgICAgICAgICAgIAoKICAgICAgICAgICAgCiAgICAgICAgfTsKCiAgICAgIC8vIEF0dGFjaGVzIGFuIGluZm8gd2luZG93IHRvIGEgbWFya2VyIHdpdGggdGhlIHByb3ZpZGVkIG1lc3NhZ2UKICAgICAgZnVuY3Rpb24gYXR0YWNoSW5mb1dpbmRvdyhtYXJrZXIsIG1lc3NhZ2UpIHsKICAgICAgICB2YXIgaW5mb3dpbmRvdyA9IG5ldyBnb29nbGUubWFwcy5JbmZvV2luZG93KHsKICAgICAgICAgIGNvbnRlbnQ6IG1lc3NhZ2UKICAgICAgICB9KTsKCiAgICAgICAgbWFya2VyLmFkZExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKCkgewogICAgICAgICAgaW5mb3dpbmRvdy5vcGVuKG1hcmtlci5nZXQoJ21hcCcpLCBtYXJrZXIpOwogICAgICAgIH0pOwogICAgICB9OwogICAgPC9zY3JpcHQ+CgogICAgCiAgICA8c2NyaXB0IGFzeW5jIGRlZmVyCiAgICAgc3JjPSJodHRwczovL21hcHMuZ29vZ2xlYXBpcy5jb20vbWFwcy9hcGkvanM/a2V5PUFJemFTeUItWHNfTzJhaTZ6c0FVcmg5dGtrSFBTYkNTbTc3cHdrNCZjYWxsYmFjaz1pbml0TWFwIj4KICAgIDwvc2NyaXB0PgogIDwvYm9keT4KPC9odG1sPg==\" style=\"height:500px;width:100%;border:none !important\"></iframe>" ], "text/plain": [ "<pymaps.pymaps.Map at 0x1d1f287b0b8>" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "for marker in map.children['marker']:\n", " if marker.title == 'London':\n", " marker.set_animation('BOUNCE')\n", " marker.label = ''\n", "map" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "<a id=\"marker3\"></a>\n", "## Built-in custom icons" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "from pymaps.icon import *\n", "from pymaps.utils import random_latlng" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "There are **8 customs** icons and **19 color sets** that you can use to customize your markers" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Custom Icons" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/html": [ "<iframe src=\"data:text/html;charset=utf-8;base64,PCFET0NUWVBFIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPlB5TWFwczwvdGl0bGU+CiAgICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0iaW5pdGlhbC1zY2FsZT0xLjAiPgogICAgPG1ldGEgY2hhcnNldD0idXRmLTgiPgogICAgPHN0eWxlPgogICAgICAgICNtYXAgewogICAgICAgICAgICBoZWlnaHQ6IDUwMHB4OwogICAgICAgIH0KICAgICAgICBodG1sLCBib2R5IHsKICAgICAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgICAgIHBhZGRpbmc6IDA7CiAgICAgICAgfQogICAgPC9zdHlsZT4KICA8L2hlYWQ+CiAgPGJvZHk+CiAgICAKICAgIDxkaXYgaWQ9Im1hcCI+CiAgICAgIDwhLS0gTWFwIHdpbGwgYmUgcGxhY2VkIGhlcmUgLS0+CiAgICA8L2Rpdj4KICAgIDxzY3JpcHQ+CiAgICAgICAgZnVuY3Rpb24gaW5pdE1hcCgpIHsKICAgICAgICAgICAgdmFyIG1hcCA9IG5ldyBnb29nbGUubWFwcy5NYXAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21hcCcpLCB7CiAgICAgICAgICAgICAgICB6b29tOiAyLAogICAgICAgICAgICAgICAgY2VudGVyOiB7bGF0OiAwLjAsIGxuZzogLTEwLjB9LAogICAgICAgICAgICAgICAgbWFwVHlwZUlkOiAncm9hZG1hcCcsCiAgICAgICAgICAgICAgICBzdHJlZXRWaWV3Q29udHJvbDogMSwKICAgICAgICAgICAgICAgIHpvb21Db250cm9sOiAxLAogICAgICAgICAgICAgICAgZGlzYWJsZURlZmF1bHRVSTogMCwKICAgICAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAvLyBtYXAgbWFya2VycwogICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgIHZhciBtYXJrZXI9bmV3IGdvb2dsZS5tYXBzLk1hcmtlcih7cG9zaXRpb246e2xhdDowLGxuZzotODB9LGRyYWdnYWJsZTpmYWxzZSxtYXA6bWFwLHRpdGxlOiJwaW4iLGxhYmVsOiIiLGFuaW1hdGlvbjpudWxsLGljb246Imh0dHA6Ly93d3cuZ29vZ2xlLmNvbS9tYXBzL3Z0L2ljb24vbmFtZT1hc3NldHMvaWNvbnMvc3BvdGxpZ2h0L3Nwb3RsaWdodF9waW5fdjJfc2hhZG93LTEtc21hbGwucG5nLGFzc2V0cy9pY29ucy9zcG90bGlnaHQvc3BvdGxpZ2h0X3Bpbl92Mi0xLXNtYWxsLnBuZyxhc3NldHMvaWNvbnMvc3BvdGxpZ2h0L3Nwb3RsaWdodF9waW5fdjJfZG90LTEtc21hbGwucG5nLGFzc2V0cy9pY29ucy9zcG90bGlnaHQvc3BvdGxpZ2h0X3Bpbl92Ml9hY2NlbnQtMS1zbWFsbC5wbmcmaGlnaGxpZ2h0PUZGMDBGRixGRkMxMDcsRkY2RjAwLEZGMDBGRiZjb2xvcj1GRjAwRkY/c2NhbGU9MiIsb3BhY2l0eToxLG9wdGltaXplZDp0cnVlfSk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICB2YXIgbWFya2VyPW5ldyBnb29nbGUubWFwcy5NYXJrZXIoe3Bvc2l0aW9uOntsYXQ6MCxsbmc6LTYwfSxkcmFnZ2FibGU6ZmFsc2UsbWFwOm1hcCx0aXRsZToiYWlycG9ydCIsbGFiZWw6IiIsYW5pbWF0aW9uOm51bGwsaWNvbjoiaHR0cDovL3d3dy5nb29nbGUuY29tL21hcHMvdnQvaWNvbi9uYW1lPWFzc2V0cy9pY29ucy9wb2kvdGFjdGlsZS9waW5sZXRfc2hhZG93LTEtc21hbGwucG5nLGFzc2V0cy9pY29ucy9wb2kvdGFjdGlsZS9waW5sZXQtMS1zbWFsbC5wbmcsYXNzZXRzL2ljb25zL3BvaS9xdWFudHVtL3BpbmxldC9haXJwb3J0X3BpbmxldC0xLXNtYWxsLnBuZyZoaWdobGlnaHQ9ZmYwMDAwMDAsMDAwMDAwLEZGRkZGRiZjb2xvcj1mZjAwMDAwMD9zY2FsZT0yIixvcGFjaXR5OjEsb3B0aW1pemVkOnRydWV9KTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgIHZhciBtYXJrZXI9bmV3IGdvb2dsZS5tYXBzLk1hcmtlcih7cG9zaXRpb246e2xhdDowLGxuZzotNDB9LGRyYWdnYWJsZTpmYWxzZSxtYXA6bWFwLHRpdGxlOiJob3NwaXRhbCIsbGFiZWw6IiIsYW5pbWF0aW9uOm51bGwsaWNvbjoiaHR0cDovL3d3dy5nb29nbGUuY29tL21hcHMvdnQvaWNvbi9uYW1lPWFzc2V0cy9pY29ucy9wb2kvdGFjdGlsZS9waW5sZXRfc2hhZG93LTEtc21hbGwucG5nLGFzc2V0cy9pY29ucy9wb2kvdGFjdGlsZS9waW5sZXQtMS1zbWFsbC5wbmcsYXNzZXRzL2ljb25zL3BvaS9xdWFudHVtL3BpbmxldC9ob3NwaXRhbF9IX3BpbmxldC0xLXNtYWxsLnBuZyZoaWdobGlnaHQ9ZmYwMDAwMDAsMjE5NkYzLDBENDdBMSZjb2xvcj1mZjAwMDAwMD9zY2FsZT0yIixvcGFjaXR5OjEsb3B0aW1pemVkOnRydWV9KTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgIHZhciBtYXJrZXI9bmV3IGdvb2dsZS5tYXBzLk1hcmtlcih7cG9zaXRpb246e2xhdDowLGxuZzotMjB9LGRyYWdnYWJsZTpmYWxzZSxtYXA6bWFwLHRpdGxlOiJob21lIixsYWJlbDoiIixhbmltYXRpb246bnVsbCxpY29uOiJodHRwOi8vd3d3Lmdvb2dsZS5jb20vbWFwcy92dC9pY29uL25hbWU9YXNzZXRzL2ljb25zL3BvaS90YWN0aWxlL3BpbmxldF9zaGFkb3ctMS1zbWFsbC5wbmcsYXNzZXRzL2ljb25zL3BvaS90YWN0aWxlL3BpbmxldC0xLXNtYWxsLnBuZyxhc3NldHMvaWNvbnMvcG9pL3F1YW50dW0vcGlubGV0L2hvbWVfcGlubGV0LTEtc21hbGwucG5nJmhpZ2hsaWdodD1mZmZmZmYsMDI3N0JELEZGRkZGRiZjb2xvcj1mZjAwMDAwMD9zY2FsZT0yIixvcGFjaXR5OjEsb3B0aW1pemVkOnRydWV9KTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgIHZhciBtYXJrZXI9bmV3IGdvb2dsZS5tYXBzLk1hcmtlcih7cG9zaXRpb246e2xhdDowLGxuZzowfSxkcmFnZ2FibGU6ZmFsc2UsbWFwOm1hcCx0aXRsZToiZG90IixsYWJlbDoiIixhbmltYXRpb246bnVsbCxpY29uOiJodHRwOi8vd3d3Lmdvb2dsZS5jb20vbWFwcy92dC9pY29uL25hbWU9YXNzZXRzL2ljb25zL3BvaS90YWN0aWxlL3BpbmxldF9zaGFkb3ctMS1zbWFsbC5wbmcsYXNzZXRzL2ljb25zL3BvaS90YWN0aWxlL3BpbmxldC0xLXNtYWxsLnBuZyxhc3NldHMvaWNvbnMvcG9pL3F1YW50dW0vcGlubGV0L2RvdF9waW5sZXQtMS1zbWFsbC5wbmcmaGlnaGxpZ2h0PWZmMDAwMDAwLDAwQkNENCwwMDYwNjQmY29sb3I9ZmYwMDAwMDA/c2NhbGU9MiIsb3BhY2l0eToxLG9wdGltaXplZDp0cnVlfSk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICB2YXIgbWFya2VyPW5ldyBnb29nbGUubWFwcy5NYXJrZXIoe3Bvc2l0aW9uOntsYXQ6MCxsbmc6MjB9LGRyYWdnYWJsZTpmYWxzZSxtYXA6bWFwLHRpdGxlOiJzdGFydCIsbGFiZWw6IiIsYW5pbWF0aW9uOm51bGwsaWNvbjoiaHR0cDovL3d3dy5nb29nbGUuY29tL21hcHMvdnQvaWNvbi9uYW1lPWFzc2V0cy9pY29ucy9wb2kvdGFjdGlsZS9waW5sZXRfc2hhZG93LTEtc21hbGwucG5nLGFzc2V0cy9pY29ucy9wb2kvdGFjdGlsZS9waW5sZXQtMS1zbWFsbC5wbmcsYXNzZXRzL2ljb25zL3BvaS9xdWFudHVtL3BpbmxldC9jb25zdGVsbGF0aW9uX3N0YXJfcGlubGV0LTEtc21hbGwucG5nJmhpZ2hsaWdodD1mZjAwMDAwMCw2NzNBQjcsMzExQjkyLGZmZmZmZiZjb2xvcj1mZjAwMDAwMD9zY2FsZT0yIixvcGFjaXR5OjEsb3B0aW1pemVkOnRydWV9KTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgIHZhciBtYXJrZXI9bmV3IGdvb2dsZS5tYXBzLk1hcmtlcih7cG9zaXRpb246e2xhdDowLGxuZzo0MH0sZHJhZ2dhYmxlOmZhbHNlLG1hcDptYXAsdGl0bGU6ImhlYXJ0IixsYWJlbDoiIixhbmltYXRpb246bnVsbCxpY29uOiJodHRwOi8vd3d3Lmdvb2dsZS5jb20vbWFwcy92dC9pY29uL25hbWU9YXNzZXRzL2ljb25zL3BvaS90YWN0aWxlL3BpbmxldF9zaGFkb3ctMS1zbWFsbC5wbmcsYXNzZXRzL2ljb25zL3BvaS90YWN0aWxlL3BpbmxldC0xLXNtYWxsLnBuZyxhc3NldHMvaWNvbnMvcG9pL3F1YW50dW0vcGlubGV0L2hlYXJ0X3BpbmxldC0xLXNtYWxsLnBuZyZoaWdobGlnaHQ9ZmYwMDAwMDAsRkY1NzIyLEJGMzYwQyxmZmZmZmYmY29sb3I9ZmYwMDAwMDA/c2NhbGU9MiIsb3BhY2l0eToxLG9wdGltaXplZDp0cnVlfSk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICB2YXIgbWFya2VyPW5ldyBnb29nbGUubWFwcy5NYXJrZXIoe3Bvc2l0aW9uOntsYXQ6MCxsbmc6NjB9LGRyYWdnYWJsZTpmYWxzZSxtYXA6bWFwLHRpdGxlOiJmbGFnIixsYWJlbDoiIixhbmltYXRpb246bnVsbCxpY29uOiJodHRwOi8vd3d3Lmdvb2dsZS5jb20vbWFwcy92dC9pY29uL25hbWU9YXNzZXRzL2ljb25zL3BvaS90YWN0aWxlL3BpbmxldF9zaGFkb3ctMS1zbWFsbC5wbmcsYXNzZXRzL2ljb25zL3BvaS90YWN0aWxlL3BpbmxldC0xLXNtYWxsLnBuZyxhc3NldHMvaWNvbnMvcG9pL3F1YW50dW0vcGlubGV0L25pY2tuYW1lX3BpbmxldC0xLXNtYWxsLnBuZyZoaWdobGlnaHQ9ZmYwMDAwMDAsOUU5RTlFLDIxMjEyMSxmZmZmZmYmY29sb3I9ZmYwMDAwMDA/c2NhbGU9MiIsb3BhY2l0eToxLG9wdGltaXplZDp0cnVlfSk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgIAoKICAgICAgICAgICAgICAgLy8gZml0Qm91bmRzIG1ldGhvZAogICAgICAgICAgICAgICAKCiAgICAgICAgICAgICAgIC8vIE1hcmtlckNsdXN0ZXIKICAgICAgICAgICAgICAgCgogICAgICAgICAgICAKICAgICAgICB9OwoKICAgICAgLy8gQXR0YWNoZXMgYW4gaW5mbyB3aW5kb3cgdG8gYSBtYXJrZXIgd2l0aCB0aGUgcHJvdmlkZWQgbWVzc2FnZQogICAgICBmdW5jdGlvbiBhdHRhY2hJbmZvV2luZG93KG1hcmtlciwgbWVzc2FnZSkgewogICAgICAgIHZhciBpbmZvd2luZG93ID0gbmV3IGdvb2dsZS5tYXBzLkluZm9XaW5kb3coewogICAgICAgICAgY29udGVudDogbWVzc2FnZQogICAgICAgIH0pOwoKICAgICAgICBtYXJrZXIuYWRkTGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oKSB7CiAgICAgICAgICBpbmZvd2luZG93Lm9wZW4obWFya2VyLmdldCgnbWFwJyksIG1hcmtlcik7CiAgICAgICAgfSk7CiAgICAgIH07CiAgICA8L3NjcmlwdD4KCiAgICAKICAgIDxzY3JpcHQgYXN5bmMgZGVmZXIKICAgICBzcmM9Imh0dHBzOi8vbWFwcy5nb29nbGVhcGlzLmNvbS9tYXBzL2FwaS9qcz9rZXk9QUl6YVN5Qi1Yc19PMmFpNnpzQVVyaDl0a2tIUFNiQ1NtNzdwd2s0JmNhbGxiYWNrPWluaXRNYXAiPgogICAgPC9zY3JpcHQ+CiAgPC9ib2R5Pgo8L2h0bWw+\" style=\"height:500px;width:100%;border:none !important\"></iframe>" ], "text/plain": [ "<pymaps.pymaps.Map at 0x1d1e2503358>" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "m = Map(api_key=API_KEY)\n", "\n", "lat = 0\n", "lng = -80\n", "\n", "for n, shape in enumerate(SHAPES):\n", " color = list(COLORS.keys())[n] \n", " icon = Icon(shape, color=color, size=2)\n", " Marker([lat, lng], icon=icon, title=shape).add_to(m) \n", " lng += 20 \n", "m" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "<a id=\"marker4\"></a>\n", "## Built-in custom colors" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "text/html": [ "<iframe src=\"data:text/html;charset=utf-8;base64,PCFET0NUWVBFIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPlB5TWFwczwvdGl0bGU+CiAgICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0iaW5pdGlhbC1zY2FsZT0xLjAiPgogICAgPG1ldGEgY2hhcnNldD0idXRmLTgiPgogICAgPHN0eWxlPgogICAgICAgICNtYXAgewogICAgICAgICAgICBoZWlnaHQ6IDUwMHB4OwogICAgICAgIH0KICAgICAgICBodG1sLCBib2R5IHsKICAgICAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgICAgIHBhZGRpbmc6IDA7CiAgICAgICAgfQogICAgPC9zdHlsZT4KICA8L2hlYWQ+CiAgPGJvZHk+CiAgICAKICAgIDxkaXYgaWQ9Im1hcCI+CiAgICAgIDwhLS0gTWFwIHdpbGwgYmUgcGxhY2VkIGhlcmUgLS0+CiAgICA8L2Rpdj4KICAgIDxzY3JpcHQ+CiAgICAgICAgZnVuY3Rpb24gaW5pdE1hcCgpIHsKICAgICAgICAgICAgdmFyIG1hcCA9IG5ldyBnb29nbGUubWFwcy5NYXAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21hcCcpLCB7CiAgICAgICAgICAgICAgICB6b29tOiAyLAogICAgICAgICAgICAgICAgY2VudGVyOiB7bGF0OiAtMS41Nzg5NDcsIGxuZzogMzcuODk0NzM3fSwKICAgICAgICAgICAgICAgIG1hcFR5cGVJZDogJ3JvYWRtYXAnLAogICAgICAgICAgICAgICAgc3RyZWV0Vmlld0NvbnRyb2w6IDEsCiAgICAgICAgICAgICAgICB6b29tQ29udHJvbDogMSwKICAgICAgICAgICAgICAgIGRpc2FibGVEZWZhdWx0VUk6IDAsCiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgc3R5bGVzOiBbeyJmZWF0dXJlVHlwZSI6ImFkbWluaXN0cmF0aXZlIiwiZWxlbWVudFR5cGUiOiJhbGwiLCJzdHlsZXJzIjpbeyJzYXR1cmF0aW9uIjoiLTEwMCJ9XX0seyJmZWF0dXJlVHlwZSI6ImFkbWluaXN0cmF0aXZlLnByb3ZpbmNlIiwiZWxlbWVudFR5cGUiOiJhbGwiLCJzdHlsZXJzIjpbeyJ2aXNpYmlsaXR5Ijoib2ZmIn1dfSx7ImZlYXR1cmVUeXBlIjoibGFuZHNjYXBlIiwiZWxlbWVudFR5cGUiOiJhbGwiLCJzdHlsZXJzIjpbeyJzYXR1cmF0aW9uIjotMTAwfSx7ImxpZ2h0bmVzcyI6NjV9LHsidmlzaWJpbGl0eSI6Im9uIn1dfSx7ImZlYXR1cmVUeXBlIjoicG9pIiwiZWxlbWVudFR5cGUiOiJhbGwiLCJzdHlsZXJzIjpbeyJzYXR1cmF0aW9uIjotMTAwfSx7ImxpZ2h0bmVzcyI6IjUwIn0seyJ2aXNpYmlsaXR5Ijoic2ltcGxpZmllZCJ9XX0seyJmZWF0dXJlVHlwZSI6InJvYWQiLCJlbGVtZW50VHlwZSI6ImFsbCIsInN0eWxlcnMiOlt7InNhdHVyYXRpb24iOiItMTAwIn1dfSx7ImZlYXR1cmVUeXBlIjoicm9hZC5oaWdod2F5IiwiZWxlbWVudFR5cGUiOiJhbGwiLCJzdHlsZXJzIjpbeyJ2aXNpYmlsaXR5Ijoic2ltcGxpZmllZCJ9XX0seyJmZWF0dXJlVHlwZSI6InJvYWQuYXJ0ZXJpYWwiLCJlbGVtZW50VHlwZSI6ImFsbCIsInN0eWxlcnMiOlt7ImxpZ2h0bmVzcyI6IjMwIn1dfSx7ImZlYXR1cmVUeXBlIjoicm9hZC5sb2NhbCIsImVsZW1lbnRUeXBlIjoiYWxsIiwic3R5bGVycyI6W3sibGlnaHRuZXNzIjoiNDAifV19LHsiZmVhdHVyZVR5cGUiOiJ0cmFuc2l0IiwiZWxlbWVudFR5cGUiOiJhbGwiLCJzdHlsZXJzIjpbeyJzYXR1cmF0aW9uIjotMTAwfSx7InZpc2liaWxpdHkiOiJzaW1wbGlmaWVkIn1dfSx7ImZlYXR1cmVUeXBlIjoid2F0ZXIiLCJlbGVtZW50VHlwZSI6Imdlb21ldHJ5Iiwic3R5bGVycyI6W3siaHVlIjoiI2ZmZmYwMCJ9LHsibGlnaHRuZXNzIjotMjV9LHsic2F0dXJhdGlvbiI6LTk3fV19LHsiZmVhdHVyZVR5cGUiOiJ3YXRlciIsImVsZW1lbnRUeXBlIjoibGFiZWxzIiwic3R5bGVycyI6W3sibGlnaHRuZXNzIjotMjV9LHsic2F0dXJhdGlvbiI6LTEwMH1dfV0KLAogICAgICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgIC8vIG1hcCBtYXJrZXJzCiAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgdmFyIG1hcmtlcj1uZXcgZ29vZ2xlLm1hcHMuTWFya2VyKHtwb3NpdGlvbjp7bGF0Oi0zMCxsbmc6MH0sZHJhZ2dhYmxlOmZhbHNlLG1hcDptYXAsdGl0bGU6ImFtYmVyIixsYWJlbDoiIixhbmltYXRpb246bnVsbCxpY29uOiJodHRwOi8vd3d3Lmdvb2dsZS5jb20vbWFwcy92dC9pY29uL25hbWU9YXNzZXRzL2ljb25zL3BvaS90YWN0aWxlL3BpbmxldF9zaGFkb3ctMS1zbWFsbC5wbmcsYXNzZXRzL2ljb25zL3BvaS90YWN0aWxlL3BpbmxldC0xLXNtYWxsLnBuZyxhc3NldHMvaWNvbnMvcG9pL3F1YW50dW0vcGlubGV0L2RvdF9waW5sZXQtMS1zbWFsbC5wbmcmaGlnaGxpZ2h0PWZmMDAwMDAwLEZGQzEwNyxGRjZGMDAmY29sb3I9ZmYwMDAwMDA/c2NhbGU9MiIsb3BhY2l0eToxLG9wdGltaXplZDp0cnVlfSk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICB2YXIgbWFya2VyPW5ldyBnb29nbGUubWFwcy5NYXJrZXIoe3Bvc2l0aW9uOntsYXQ6LTMwLGxuZzoyMH0sZHJhZ2dhYmxlOmZhbHNlLG1hcDptYXAsdGl0bGU6ImJsYWt3aGl0ZSIsbGFiZWw6IiIsYW5pbWF0aW9uOm51bGwsaWNvbjoiaHR0cDovL3d3dy5nb29nbGUuY29tL21hcHMvdnQvaWNvbi9uYW1lPWFzc2V0cy9pY29ucy9wb2kvdGFjdGlsZS9waW5sZXRfc2hhZG93LTEtc21hbGwucG5nLGFzc2V0cy9pY29ucy9wb2kvdGFjdGlsZS9waW5sZXQtMS1zbWFsbC5wbmcsYXNzZXRzL2ljb25zL3BvaS9xdWFudHVtL3BpbmxldC9kb3RfcGlubGV0LTEtc21hbGwucG5nJmhpZ2hsaWdodD1mZjAwMDAwMCwwMDAwMDAsRkZGRkZGJmNvbG9yPWZmMDAwMDAwP3NjYWxlPTIiLG9wYWNpdHk6MSxvcHRpbWl6ZWQ6dHJ1ZX0pOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgdmFyIG1hcmtlcj1uZXcgZ29vZ2xlLm1hcHMuTWFya2VyKHtwb3NpdGlvbjp7bGF0Oi0zMCxsbmc6NDB9LGRyYWdnYWJsZTpmYWxzZSxtYXA6bWFwLHRpdGxlOiJibHVlIixsYWJlbDoiIixhbmltYXRpb246bnVsbCxpY29uOiJodHRwOi8vd3d3Lmdvb2dsZS5jb20vbWFwcy92dC9pY29uL25hbWU9YXNzZXRzL2ljb25zL3BvaS90YWN0aWxlL3BpbmxldF9zaGFkb3ctMS1zbWFsbC5wbmcsYXNzZXRzL2ljb25zL3BvaS90YWN0aWxlL3BpbmxldC0xLXNtYWxsLnBuZyxhc3NldHMvaWNvbnMvcG9pL3F1YW50dW0vcGlubGV0L2RvdF9waW5sZXQtMS1zbWFsbC5wbmcmaGlnaGxpZ2h0PWZmMDAwMDAwLDIxOTZGMywwRDQ3QTEmY29sb3I9ZmYwMDAwMDA/c2NhbGU9MiIsb3BhY2l0eToxLG9wdGltaXplZDp0cnVlfSk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICB2YXIgbWFya2VyPW5ldyBnb29nbGUubWFwcy5NYXJrZXIoe3Bvc2l0aW9uOntsYXQ6LTMwLGxuZzo2MH0sZHJhZ2dhYmxlOmZhbHNlLG1hcDptYXAsdGl0bGU6ImJsdWV3aGl0ZSIsbGFiZWw6IiIsYW5pbWF0aW9uOm51bGwsaWNvbjoiaHR0cDovL3d3dy5nb29nbGUuY29tL21hcHMvdnQvaWNvbi9uYW1lPWFzc2V0cy9pY29ucy9wb2kvdGFjdGlsZS9waW5sZXRfc2hhZG93LTEtc21hbGwucG5nLGFzc2V0cy9pY29ucy9wb2kvdGFjdGlsZS9waW5sZXQtMS1zbWFsbC5wbmcsYXNzZXRzL2ljb25zL3BvaS9xdWFudHVtL3BpbmxldC9kb3RfcGlubGV0LTEtc21hbGwucG5nJmhpZ2hsaWdodD1mZjAwMDAwMCwwMjc3QkQsRkZGRkZGJmNvbG9yPWZmMDAwMDAwP3NjYWxlPTIiLG9wYWNpdHk6MSxvcHRpbWl6ZWQ6dHJ1ZX0pOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgdmFyIG1hcmtlcj1uZXcgZ29vZ2xlLm1hcHMuTWFya2VyKHtwb3NpdGlvbjp7bGF0Oi0zMCxsbmc6ODB9LGRyYWdnYWJsZTpmYWxzZSxtYXA6bWFwLHRpdGxlOiJjeWFuIixsYWJlbDoiIixhbmltYXRpb246bnVsbCxpY29uOiJodHRwOi8vd3d3Lmdvb2dsZS5jb20vbWFwcy92dC9pY29uL25hbWU9YXNzZXRzL2ljb25zL3BvaS90YWN0aWxlL3BpbmxldF9zaGFkb3ctMS1zbWFsbC5wbmcsYXNzZXRzL2ljb25zL3BvaS90YWN0aWxlL3BpbmxldC0xLXNtYWxsLnBuZyxhc3NldHMvaWNvbnMvcG9pL3F1YW50dW0vcGlubGV0L2RvdF9waW5sZXQtMS1zbWFsbC5wbmcmaGlnaGxpZ2h0PWZmMDAwMDAwLDAwQkNENCwwMDYwNjQmY29sb3I9ZmYwMDAwMDA/c2NhbGU9MiIsb3BhY2l0eToxLG9wdGltaXplZDp0cnVlfSk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICB2YXIgbWFya2VyPW5ldyBnb29nbGUubWFwcy5NYXJrZXIoe3Bvc2l0aW9uOntsYXQ6LTEwLGxuZzowfSxkcmFnZ2FibGU6ZmFsc2UsbWFwOm1hcCx0aXRsZToiZGVlcHB1cnBsZSIsbGFiZWw6IiIsYW5pbWF0aW9uOm51bGwsaWNvbjoiaHR0cDovL3d3dy5nb29nbGUuY29tL21hcHMvdnQvaWNvbi9uYW1lPWFzc2V0cy9pY29ucy9wb2kvdGFjdGlsZS9waW5sZXRfc2hhZG93LTEtc21hbGwucG5nLGFzc2V0cy9pY29ucy9wb2kvdGFjdGlsZS9waW5sZXQtMS1zbWFsbC5wbmcsYXNzZXRzL2ljb25zL3BvaS9xdWFudHVtL3BpbmxldC9kb3RfcGlubGV0LTEtc21hbGwucG5nJmhpZ2hsaWdodD1mZjAwMDAwMCw2NzNBQjcsMzExQjkyJmNvbG9yPWZmMDAwMDAwP3NjYWxlPTIiLG9wYWNpdHk6MSxvcHRpbWl6ZWQ6dHJ1ZX0pOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgdmFyIG1hcmtlcj1uZXcgZ29vZ2xlLm1hcHMuTWFya2VyKHtwb3NpdGlvbjp7bGF0Oi0xMCxsbmc6MjB9LGRyYWdnYWJsZTpmYWxzZSxtYXA6bWFwLHRpdGxlOiJkZWVwb3JhbmdlIixsYWJlbDoiIixhbmltYXRpb246bnVsbCxpY29uOiJodHRwOi8vd3d3Lmdvb2dsZS5jb20vbWFwcy92dC9pY29uL25hbWU9YXNzZXRzL2ljb25zL3BvaS90YWN0aWxlL3BpbmxldF9zaGFkb3ctMS1zbWFsbC5wbmcsYXNzZXRzL2ljb25zL3BvaS90YWN0aWxlL3BpbmxldC0xLXNtYWxsLnBuZyxhc3NldHMvaWNvbnMvcG9pL3F1YW50dW0vcGlubGV0L2RvdF9waW5sZXQtMS1zbWFsbC5wbmcmaGlnaGxpZ2h0PWZmMDAwMDAwLEZGNTcyMixCRjM2MEMmY29sb3I9ZmYwMDAwMDA/c2NhbGU9MiIsb3BhY2l0eToxLG9wdGltaXplZDp0cnVlfSk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICB2YXIgbWFya2VyPW5ldyBnb29nbGUubWFwcy5NYXJrZXIoe3Bvc2l0aW9uOntsYXQ6LTEwLGxuZzo0MH0sZHJhZ2dhYmxlOmZhbHNlLG1hcDptYXAsdGl0bGU6ImdyYXkiLGxhYmVsOiIiLGFuaW1hdGlvbjpudWxsLGljb246Imh0dHA6Ly93d3cuZ29vZ2xlLmNvbS9tYXBzL3Z0L2ljb24vbmFtZT1hc3NldHMvaWNvbnMvcG9pL3RhY3RpbGUvcGlubGV0X3NoYWRvdy0xLXNtYWxsLnBuZyxhc3NldHMvaWNvbnMvcG9pL3RhY3RpbGUvcGlubGV0LTEtc21hbGwucG5nLGFzc2V0cy9pY29ucy9wb2kvcXVhbnR1bS9waW5sZXQvZG90X3BpbmxldC0xLXNtYWxsLnBuZyZoaWdobGlnaHQ9ZmYwMDAwMDAsOUU5RTlFLDIxMjEyMSZjb2xvcj1mZjAwMDAwMD9zY2FsZT0yIixvcGFjaXR5OjEsb3B0aW1pemVkOnRydWV9KTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgIHZhciBtYXJrZXI9bmV3IGdvb2dsZS5tYXBzLk1hcmtlcih7cG9zaXRpb246e2xhdDotMTAsbG5nOjYwfSxkcmFnZ2FibGU6ZmFsc2UsbWFwOm1hcCx0aXRsZToiZ3JlZW4iLGxhYmVsOiIiLGFuaW1hdGlvbjpudWxsLGljb246Imh0dHA6Ly93d3cuZ29vZ2xlLmNvbS9tYXBzL3Z0L2ljb24vbmFtZT1hc3NldHMvaWNvbnMvcG9pL3RhY3RpbGUvcGlubGV0X3NoYWRvdy0xLXNtYWxsLnBuZyxhc3NldHMvaWNvbnMvcG9pL3RhY3RpbGUvcGlubGV0LTEtc21hbGwucG5nLGFzc2V0cy9pY29ucy9wb2kvcXVhbnR1bS9waW5sZXQvZG90X3BpbmxldC0xLXNtYWxsLnBuZyZoaWdobGlnaHQ9ZmYwMDAwMDAsNENBRjUwLDFCNUUyMCZjb2xvcj1mZjAwMDAwMD9zY2FsZT0yIixvcGFjaXR5OjEsb3B0aW1pemVkOnRydWV9KTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgIHZhciBtYXJrZXI9bmV3IGdvb2dsZS5tYXBzLk1hcmtlcih7cG9zaXRpb246e2xhdDotMTAsbG5nOjgwfSxkcmFnZ2FibGU6ZmFsc2UsbWFwOm1hcCx0aXRsZToiaW5kaWdvIixsYWJlbDoiIixhbmltYXRpb246bnVsbCxpY29uOiJodHRwOi8vd3d3Lmdvb2dsZS5jb20vbWFwcy92dC9pY29uL25hbWU9YXNzZXRzL2ljb25zL3BvaS90YWN0aWxlL3BpbmxldF9zaGFkb3ctMS1zbWFsbC5wbmcsYXNzZXRzL2ljb25zL3BvaS90YWN0aWxlL3BpbmxldC0xLXNtYWxsLnBuZyxhc3NldHMvaWNvbnMvcG9pL3F1YW50dW0vcGlubGV0L2RvdF9waW5sZXQtMS1zbWFsbC5wbmcmaGlnaGxpZ2h0PWZmMDAwMDAwLDNGNTFCNSwxQTIzN0UmY29sb3I9ZmYwMDAwMDA/c2NhbGU9MiIsb3BhY2l0eToxLG9wdGltaXplZDp0cnVlfSk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICB2YXIgbWFya2VyPW5ldyBnb29nbGUubWFwcy5NYXJrZXIoe3Bvc2l0aW9uOntsYXQ6MTAsbG5nOjB9LGRyYWdnYWJsZTpmYWxzZSxtYXA6bWFwLHRpdGxlOiJsaWdodGJsdWUiLGxhYmVsOiIiLGFuaW1hdGlvbjpudWxsLGljb246Imh0dHA6Ly93d3cuZ29vZ2xlLmNvbS9tYXBzL3Z0L2ljb24vbmFtZT1hc3NldHMvaWNvbnMvcG9pL3RhY3RpbGUvcGlubGV0X3NoYWRvdy0xLXNtYWxsLnBuZyxhc3NldHMvaWNvbnMvcG9pL3RhY3RpbGUvcGlubGV0LTEtc21hbGwucG5nLGFzc2V0cy9pY29ucy9wb2kvcXVhbnR1bS9waW5sZXQvZG90X3BpbmxldC0xLXNtYWxsLnBuZyZoaWdobGlnaHQ9ZmYwMDAwMDAsMDNBOUY0LDAxNTc5QiZjb2xvcj1mZjAwMDAwMD9zY2FsZT0yIixvcGFjaXR5OjEsb3B0aW1pemVkOnRydWV9KTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgIHZhciBtYXJrZXI9bmV3IGdvb2dsZS5tYXBzLk1hcmtlcih7cG9zaXRpb246e2xhdDoxMCxsbmc6MjB9LGRyYWdnYWJsZTpmYWxzZSxtYXA6bWFwLHRpdGxlOiJsaWdodGdyZWVuIixsYWJlbDoiIixhbmltYXRpb246bnVsbCxpY29uOiJodHRwOi8vd3d3Lmdvb2dsZS5jb20vbWFwcy92dC9pY29uL25hbWU9YXNzZXRzL2ljb25zL3BvaS90YWN0aWxlL3BpbmxldF9zaGFkb3ctMS1zbWFsbC5wbmcsYXNzZXRzL2ljb25zL3BvaS90YWN0aWxlL3BpbmxldC0xLXNtYWxsLnBuZyxhc3NldHMvaWNvbnMvcG9pL3F1YW50dW0vcGlubGV0L2RvdF9waW5sZXQtMS1zbWFsbC5wbmcmaGlnaGxpZ2h0PWZmMDAwMDAwLDhCQzM0QSwzMzY5MUUmY29sb3I9ZmYwMDAwMDA/c2NhbGU9MiIsb3BhY2l0eToxLG9wdGltaXplZDp0cnVlfSk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICB2YXIgbWFya2VyPW5ldyBnb29nbGUubWFwcy5NYXJrZXIoe3Bvc2l0aW9uOntsYXQ6MTAsbG5nOjQwfSxkcmFnZ2FibGU6ZmFsc2UsbWFwOm1hcCx0aXRsZToibGltZSIsbGFiZWw6IiIsYW5pbWF0aW9uOm51bGwsaWNvbjoiaHR0cDovL3d3dy5nb29nbGUuY29tL21hcHMvdnQvaWNvbi9uYW1lPWFzc2V0cy9pY29ucy9wb2kvdGFjdGlsZS9waW5sZXRfc2hhZG93LTEtc21hbGwucG5nLGFzc2V0cy9pY29ucy9wb2kvdGFjdGlsZS9waW5sZXQtMS1zbWFsbC5wbmcsYXNzZXRzL2ljb25zL3BvaS9xdWFudHVtL3BpbmxldC9kb3RfcGlubGV0LTEtc21hbGwucG5nJmhpZ2hsaWdodD1mZjAwMDAwMCxDRERDMzksODI3NzE3JmNvbG9yPWZmMDAwMDAwP3NjYWxlPTIiLG9wYWNpdHk6MSxvcHRpbWl6ZWQ6dHJ1ZX0pOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgdmFyIG1hcmtlcj1uZXcgZ29vZ2xlLm1hcHMuTWFya2VyKHtwb3NpdGlvbjp7bGF0OjEwLGxuZzo2MH0sZHJhZ2dhYmxlOmZhbHNlLG1hcDptYXAsdGl0bGU6Im9yYW5nZSIsbGFiZWw6IiIsYW5pbWF0aW9uOm51bGwsaWNvbjoiaHR0cDovL3d3dy5nb29nbGUuY29tL21hcHMvdnQvaWNvbi9uYW1lPWFzc2V0cy9pY29ucy9wb2kvdGFjdGlsZS9waW5sZXRfc2hhZG93LTEtc21hbGwucG5nLGFzc2V0cy9pY29ucy9wb2kvdGFjdGlsZS9waW5sZXQtMS1zbWFsbC5wbmcsYXNzZXRzL2ljb25zL3BvaS9xdWFudHVtL3BpbmxldC9kb3RfcGlubGV0LTEtc21hbGwucG5nJmhpZ2hsaWdodD1mZjAwMDAwMCxGRjk4MDAsRTY1MTAwJmNvbG9yPWZmMDAwMDAwP3NjYWxlPTIiLG9wYWNpdHk6MSxvcHRpbWl6ZWQ6dHJ1ZX0pOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgdmFyIG1hcmtlcj1uZXcgZ29vZ2xlLm1hcHMuTWFya2VyKHtwb3NpdGlvbjp7bGF0OjEwLGxuZzo4MH0sZHJhZ2dhYmxlOmZhbHNlLG1hcDptYXAsdGl0bGU6InBpbmsiLGxhYmVsOiIiLGFuaW1hdGlvbjpudWxsLGljb246Imh0dHA6Ly93d3cuZ29vZ2xlLmNvbS9tYXBzL3Z0L2ljb24vbmFtZT1hc3NldHMvaWNvbnMvcG9pL3RhY3RpbGUvcGlubGV0X3NoYWRvdy0xLXNtYWxsLnBuZyxhc3NldHMvaWNvbnMvcG9pL3RhY3RpbGUvcGlubGV0LTEtc21hbGwucG5nLGFzc2V0cy9pY29ucy9wb2kvcXVhbnR1bS9waW5sZXQvZG90X3BpbmxldC0xLXNtYWxsLnBuZyZoaWdobGlnaHQ9ZmYwMDAwMDAsRTkxRTYzLDg4MEU0RiZjb2xvcj1mZjAwMDAwMD9zY2FsZT0yIixvcGFjaXR5OjEsb3B0aW1pemVkOnRydWV9KTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgIHZhciBtYXJrZXI9bmV3IGdvb2dsZS5tYXBzLk1hcmtlcih7cG9zaXRpb246e2xhdDozMCxsbmc6MH0sZHJhZ2dhYmxlOmZhbHNlLG1hcDptYXAsdGl0bGU6InB1cnBsZSIsbGFiZWw6IiIsYW5pbWF0aW9uOm51bGwsaWNvbjoiaHR0cDovL3d3dy5nb29nbGUuY29tL21hcHMvdnQvaWNvbi9uYW1lPWFzc2V0cy9pY29ucy9wb2kvdGFjdGlsZS9waW5sZXRfc2hhZG93LTEtc21hbGwucG5nLGFzc2V0cy9pY29ucy9wb2kvdGFjdGlsZS9waW5sZXQtMS1zbWFsbC5wbmcsYXNzZXRzL2ljb25zL3BvaS9xdWFudHVtL3BpbmxldC9kb3RfcGlubGV0LTEtc21hbGwucG5nJmhpZ2hsaWdodD1mZjAwMDAwMCw5QzI3QjAsNEExNDhDJmNvbG9yPWZmMDAwMDAwP3NjYWxlPTIiLG9wYWNpdHk6MSxvcHRpbWl6ZWQ6dHJ1ZX0pOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgdmFyIG1hcmtlcj1uZXcgZ29vZ2xlLm1hcHMuTWFya2VyKHtwb3NpdGlvbjp7bGF0OjMwLGxuZzoyMH0sZHJhZ2dhYmxlOmZhbHNlLG1hcDptYXAsdGl0bGU6InJlZCIsbGFiZWw6IiIsYW5pbWF0aW9uOm51bGwsaWNvbjoiaHR0cDovL3d3dy5nb29nbGUuY29tL21hcHMvdnQvaWNvbi9uYW1lPWFzc2V0cy9pY29ucy9wb2kvdGFjdGlsZS9waW5sZXRfc2hhZG93LTEtc21hbGwucG5nLGFzc2V0cy9pY29ucy9wb2kvdGFjdGlsZS9waW5sZXQtMS1zbWFsbC5wbmcsYXNzZXRzL2ljb25zL3BvaS9xdWFudHVtL3BpbmxldC9kb3RfcGlubGV0LTEtc21hbGwucG5nJmhpZ2hsaWdodD1mZjAwMDAwMCxlYTQzMzUsOTYwYTBhJmNvbG9yPWZmMDAwMDAwP3NjYWxlPTIiLG9wYWNpdHk6MSxvcHRpbWl6ZWQ6dHJ1ZX0pOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgdmFyIG1hcmtlcj1uZXcgZ29vZ2xlLm1hcHMuTWFya2VyKHtwb3NpdGlvbjp7bGF0OjMwLGxuZzo0MH0sZHJhZ2dhYmxlOmZhbHNlLG1hcDptYXAsdGl0bGU6InRlYWwiLGxhYmVsOiIiLGFuaW1hdGlvbjpudWxsLGljb246Imh0dHA6Ly93d3cuZ29vZ2xlLmNvbS9tYXBzL3Z0L2ljb24vbmFtZT1hc3NldHMvaWNvbnMvcG9pL3RhY3RpbGUvcGlubGV0X3NoYWRvdy0xLXNtYWxsLnBuZyxhc3NldHMvaWNvbnMvcG9pL3RhY3RpbGUvcGlubGV0LTEtc21hbGwucG5nLGFzc2V0cy9pY29ucy9wb2kvcXVhbnR1bS9waW5sZXQvZG90X3BpbmxldC0xLXNtYWxsLnBuZyZoaWdobGlnaHQ9ZmYwMDAwMDAsMDA5Njg4LDAwNEQ0MCZjb2xvcj1mZjAwMDAwMD9zY2FsZT0yIixvcGFjaXR5OjEsb3B0aW1pemVkOnRydWV9KTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgIHZhciBtYXJrZXI9bmV3IGdvb2dsZS5tYXBzLk1hcmtlcih7cG9zaXRpb246e2xhdDozMCxsbmc6NjB9LGRyYWdnYWJsZTpmYWxzZSxtYXA6bWFwLHRpdGxlOiJ5ZWxsb3ciLGxhYmVsOiIiLGFuaW1hdGlvbjpudWxsLGljb246Imh0dHA6Ly93d3cuZ29vZ2xlLmNvbS9tYXBzL3Z0L2ljb24vbmFtZT1hc3NldHMvaWNvbnMvcG9pL3RhY3RpbGUvcGlubGV0X3NoYWRvdy0xLXNtYWxsLnBuZyxhc3NldHMvaWNvbnMvcG9pL3RhY3RpbGUvcGlubGV0LTEtc21hbGwucG5nLGFzc2V0cy9pY29ucy9wb2kvcXVhbnR1bS9waW5sZXQvZG90X3BpbmxldC0xLXNtYWxsLnBuZyZoaWdobGlnaHQ9ZmYwMDAwMDAsRkZFQjNCLEY1N0YxNyZjb2xvcj1mZjAwMDAwMD9zY2FsZT0yIixvcGFjaXR5OjEsb3B0aW1pemVkOnRydWV9KTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgCgogICAgICAgICAgICAgICAvLyBmaXRCb3VuZHMgbWV0aG9kCiAgICAgICAgICAgICAgIAoKICAgICAgICAgICAgICAgLy8gTWFya2VyQ2x1c3RlcgogICAgICAgICAgICAgICAKCiAgICAgICAgICAgIAogICAgICAgIH07CgogICAgICAvLyBBdHRhY2hlcyBhbiBpbmZvIHdpbmRvdyB0byBhIG1hcmtlciB3aXRoIHRoZSBwcm92aWRlZCBtZXNzYWdlCiAgICAgIGZ1bmN0aW9uIGF0dGFjaEluZm9XaW5kb3cobWFya2VyLCBtZXNzYWdlKSB7CiAgICAgICAgdmFyIGluZm93aW5kb3cgPSBuZXcgZ29vZ2xlLm1hcHMuSW5mb1dpbmRvdyh7CiAgICAgICAgICBjb250ZW50OiBtZXNzYWdlCiAgICAgICAgfSk7CgogICAgICAgIG1hcmtlci5hZGRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbigpIHsKICAgICAgICAgIGluZm93aW5kb3cub3BlbihtYXJrZXIuZ2V0KCdtYXAnKSwgbWFya2VyKTsKICAgICAgICB9KTsKICAgICAgfTsKICAgIDwvc2NyaXB0PgoKICAgIAogICAgPHNjcmlwdCBhc3luYyBkZWZlcgogICAgIHNyYz0iaHR0cHM6Ly9tYXBzLmdvb2dsZWFwaXMuY29tL21hcHMvYXBpL2pzP2tleT1BSXphU3lCLVhzX08yYWk2enNBVXJoOXRra0hQU2JDU203N3B3azQmY2FsbGJhY2s9aW5pdE1hcCI+CiAgICA8L3NjcmlwdD4KICA8L2JvZHk+CjwvaHRtbD4=\" style=\"height:500px;width:100%;border:none !important\"></iframe>" ], "text/plain": [ "<pymaps.pymaps.Map at 0x1d1f286bfd0>" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "m = Map(api_key=API_KEY, style='grayscale')\n", "\n", "lat = -30\n", "lng = 0\n", "\n", "for n, color in enumerate(COLORS.keys()):\n", " if n > 0 and n % 5 == 0:\n", " lat += 20\n", " lng -= 100\n", " icon = Icon('dot', color=color, size=2)\n", " Marker([lat, lng], icon=icon, title=color).add_to(m) \n", " lng += 20 \n", "m" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Customize everything !" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "text/html": [ "<iframe src=\"data:text/html;charset=utf-8;base64,PCFET0NUWVBFIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPlB5TWFwczwvdGl0bGU+CiAgICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0iaW5pdGlhbC1zY2FsZT0xLjAiPgogICAgPG1ldGEgY2hhcnNldD0idXRmLTgiPgogICAgPHN0eWxlPgogICAgICAgICNtYXAgewogICAgICAgICAgICBoZWlnaHQ6IDUwMHB4OwogICAgICAgIH0KICAgICAgICBodG1sLCBib2R5IHsKICAgICAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgICAgIHBhZGRpbmc6IDA7CiAgICAgICAgfQogICAgPC9zdHlsZT4KICA8L2hlYWQ+CiAgPGJvZHk+CiAgICAKICAgIDxkaXYgaWQ9Im1hcCI+CiAgICAgIDwhLS0gTWFwIHdpbGwgYmUgcGxhY2VkIGhlcmUgLS0+CiAgICA8L2Rpdj4KICAgIDxzY3JpcHQ+CiAgICAgICAgZnVuY3Rpb24gaW5pdE1hcCgpIHsKICAgICAgICAgICAgdmFyIG1hcCA9IG5ldyBnb29nbGUubWFwcy5NYXAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21hcCcpLCB7CiAgICAgICAgICAgICAgICB6b29tOiAxLAogICAgICAgICAgICAgICAgY2VudGVyOiB7bGF0OiAtMzQuMTk3NjM5LCBsbmc6IC02MS4wODA0NjJ9LAogICAgICAgICAgICAgICAgbWFwVHlwZUlkOiAncm9hZG1hcCcsCiAgICAgICAgICAgICAgICBzdHJlZXRWaWV3Q29udHJvbDogMSwKICAgICAgICAgICAgICAgIHpvb21Db250cm9sOiAxLAogICAgICAgICAgICAgICAgZGlzYWJsZURlZmF1bHRVSTogMCwKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICBzdHlsZXM6IFsKICB7CiAgICAiZWxlbWVudFR5cGUiOiAiZ2VvbWV0cnkiLAogICAgInN0eWxlcnMiOiBbCiAgICAgIHsKICAgICAgICAiY29sb3IiOiAiI2Y1ZjVmNSIKICAgICAgfQogICAgXQogIH0sCiAgewogICAgImVsZW1lbnRUeXBlIjogImxhYmVscy5pY29uIiwKICAgICJzdHlsZXJzIjogWwogICAgICB7CiAgICAgICAgInZpc2liaWxpdHkiOiAib2ZmIgogICAgICB9CiAgICBdCiAgfSwKICB7CiAgICAiZWxlbWVudFR5cGUiOiAibGFiZWxzLnRleHQuZmlsbCIsCiAgICAic3R5bGVycyI6IFsKICAgICAgewogICAgICAgICJjb2xvciI6ICIjNjE2MTYxIgogICAgICB9CiAgICBdCiAgfSwKICB7CiAgICAiZWxlbWVudFR5cGUiOiAibGFiZWxzLnRleHQuc3Ryb2tlIiwKICAgICJzdHlsZXJzIjogWwogICAgICB7CiAgICAgICAgImNvbG9yIjogIiNmNWY1ZjUiCiAgICAgIH0KICAgIF0KICB9LAogIHsKICAgICJmZWF0dXJlVHlwZSI6ICJhZG1pbmlzdHJhdGl2ZS5sYW5kX3BhcmNlbCIsCiAgICAiZWxlbWVudFR5cGUiOiAibGFiZWxzLnRleHQuZmlsbCIsCiAgICAic3R5bGVycyI6IFsKICAgICAgewogICAgICAgICJjb2xvciI6ICIjYmRiZGJkIgogICAgICB9CiAgICBdCiAgfSwKICB7CiAgICAiZmVhdHVyZVR5cGUiOiAicG9pIiwKICAgICJlbGVtZW50VHlwZSI6ICJnZW9tZXRyeSIsCiAgICAic3R5bGVycyI6IFsKICAgICAgewogICAgICAgICJjb2xvciI6ICIjZWVlZWVlIgogICAgICB9CiAgICBdCiAgfSwKICB7CiAgICAiZmVhdHVyZVR5cGUiOiAicG9pIiwKICAgICJlbGVtZW50VHlwZSI6ICJsYWJlbHMudGV4dC5maWxsIiwKICAgICJzdHlsZXJzIjogWwogICAgICB7CiAgICAgICAgImNvbG9yIjogIiM3NTc1NzUiCiAgICAgIH0KICAgIF0KICB9LAogIHsKICAgICJmZWF0dXJlVHlwZSI6ICJwb2kucGFyayIsCiAgICAiZWxlbWVudFR5cGUiOiAiZ2VvbWV0cnkiLAogICAgInN0eWxlcnMiOiBbCiAgICAgIHsKICAgICAgICAiY29sb3IiOiAiI2U1ZTVlNSIKICAgICAgfQogICAgXQogIH0sCiAgewogICAgImZlYXR1cmVUeXBlIjogInBvaS5wYXJrIiwKICAgICJlbGVtZW50VHlwZSI6ICJsYWJlbHMudGV4dC5maWxsIiwKICAgICJzdHlsZXJzIjogWwogICAgICB7CiAgICAgICAgImNvbG9yIjogIiM5ZTllOWUiCiAgICAgIH0KICAgIF0KICB9LAogIHsKICAgICJmZWF0dXJlVHlwZSI6ICJyb2FkIiwKICAgICJlbGVtZW50VHlwZSI6ICJnZW9tZXRyeSIsCiAgICAic3R5bGVycyI6IFsKICAgICAgewogICAgICAgICJjb2xvciI6ICIjZmZmZmZmIgogICAgICB9CiAgICBdCiAgfSwKICB7CiAgICAiZmVhdHVyZVR5cGUiOiAicm9hZC5hcnRlcmlhbCIsCiAgICAiZWxlbWVudFR5cGUiOiAibGFiZWxzLnRleHQuZmlsbCIsCiAgICAic3R5bGVycyI6IFsKICAgICAgewogICAgICAgICJjb2xvciI6ICIjNzU3NTc1IgogICAgICB9CiAgICBdCiAgfSwKICB7CiAgICAiZmVhdHVyZVR5cGUiOiAicm9hZC5oaWdod2F5IiwKICAgICJlbGVtZW50VHlwZSI6ICJnZW9tZXRyeSIsCiAgICAic3R5bGVycyI6IFsKICAgICAgewogICAgICAgICJjb2xvciI6ICIjZGFkYWRhIgogICAgICB9CiAgICBdCiAgfSwKICB7CiAgICAiZmVhdHVyZVR5cGUiOiAicm9hZC5oaWdod2F5IiwKICAgICJlbGVtZW50VHlwZSI6ICJsYWJlbHMudGV4dC5maWxsIiwKICAgICJzdHlsZXJzIjogWwogICAgICB7CiAgICAgICAgImNvbG9yIjogIiM2MTYxNjEiCiAgICAgIH0KICAgIF0KICB9LAogIHsKICAgICJmZWF0dXJlVHlwZSI6ICJyb2FkLmxvY2FsIiwKICAgICJlbGVtZW50VHlwZSI6ICJsYWJlbHMudGV4dC5maWxsIiwKICAgICJzdHlsZXJzIjogWwogICAgICB7CiAgICAgICAgImNvbG9yIjogIiM5ZTllOWUiCiAgICAgIH0KICAgIF0KICB9LAogIHsKICAgICJmZWF0dXJlVHlwZSI6ICJ0cmFuc2l0LmxpbmUiLAogICAgImVsZW1lbnRUeXBlIjogImdlb21ldHJ5IiwKICAgICJzdHlsZXJzIjogWwogICAgICB7CiAgICAgICAgImNvbG9yIjogIiNlNWU1ZTUiCiAgICAgIH0KICAgIF0KICB9LAogIHsKICAgICJmZWF0dXJlVHlwZSI6ICJ0cmFuc2l0LnN0YXRpb24iLAogICAgImVsZW1lbnRUeXBlIjogImdlb21ldHJ5IiwKICAgICJzdHlsZXJzIjogWwogICAgICB7CiAgICAgICAgImNvbG9yIjogIiNlZWVlZWUiCiAgICAgIH0KICAgIF0KICB9LAogIHsKICAgICJmZWF0dXJlVHlwZSI6ICJ3YXRlciIsCiAgICAiZWxlbWVudFR5cGUiOiAiZ2VvbWV0cnkiLAogICAgInN0eWxlcnMiOiBbCiAgICAgIHsKICAgICAgICAiY29sb3IiOiAiI2M5YzljOSIKICAgICAgfQogICAgXQogIH0sCiAgewogICAgImZlYXR1cmVUeXBlIjogIndhdGVyIiwKICAgICJlbGVtZW50VHlwZSI6ICJsYWJlbHMudGV4dC5maWxsIiwKICAgICJzdHlsZXJzIjogWwogICAgICB7CiAgICAgICAgImNvbG9yIjogIiM5ZTllOWUiCiAgICAgIH0KICAgIF0KICB9Cl0KLAogICAgICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgIC8vIG1hcCBtYXJrZXJzCiAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgdmFyIG1hcmtlcj1uZXcgZ29vZ2xlLm1hcHMuTWFya2VyKHtwb3NpdGlvbjp7bGF0Oi01Ny4yNjM5ODksbG5nOjEzOC43MzMyMzZ9LGRyYWdnYWJsZTpmYWxzZSxtYXA6bWFwLHRpdGxlOiJwaW4gLSBsaWdodGJsdWUiLGxhYmVsOiIiLGFuaW1hdGlvbjpudWxsLGljb246Imh0dHA6Ly93d3cuZ29vZ2xlLmNvbS9tYXBzL3Z0L2ljb24vbmFtZT1hc3NldHMvaWNvbnMvc3BvdGxpZ2h0L3Nwb3RsaWdodF9waW5fdjJfc2hhZG93LTEtc21hbGwucG5nLGFzc2V0cy9pY29ucy9zcG90bGlnaHQvc3BvdGxpZ2h0X3Bpbl92Mi0xLXNtYWxsLnBuZyxhc3NldHMvaWNvbnMvc3BvdGxpZ2h0L3Nwb3RsaWdodF9waW5fdjJfZG90LTEtc21hbGwucG5nLGFzc2V0cy9pY29ucy9zcG90bGlnaHQvc3BvdGxpZ2h0X3Bpbl92Ml9hY2NlbnQtMS1zbWFsbC5wbmcmaGlnaGxpZ2h0PUZGMDBGRiwwM0E5RjQsMDE1NzlCLEZGMDBGRiZjb2xvcj1GRjAwRkY/c2NhbGU9MiIsb3BhY2l0eToxLG9wdGltaXplZDp0cnVlfSk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICB2YXIgbWFya2VyPW5ldyBnb29nbGUubWFwcy5NYXJrZXIoe3Bvc2l0aW9uOntsYXQ6MTEuMjg1ODgzLGxuZzotMTA0LjgwMjc0Nn0sZHJhZ2dhYmxlOmZhbHNlLG1hcDptYXAsdGl0bGU6ImFpcnBvcnQgLSBsaWdodGdyZWVuIixsYWJlbDoiIixhbmltYXRpb246bnVsbCxpY29uOiJodHRwOi8vd3d3Lmdvb2dsZS5jb20vbWFwcy92dC9pY29uL25hbWU9YXNzZXRzL2ljb25zL3BvaS90YWN0aWxlL3BpbmxldF9zaGFkb3ctMS1zbWFsbC5wbmcsYXNzZXRzL2ljb25zL3BvaS90YWN0aWxlL3BpbmxldC0xLXNtYWxsLnBuZyxhc3NldHMvaWNvbnMvcG9pL3F1YW50dW0vcGlubGV0L2FpcnBvcnRfcGlubGV0LTEtc21hbGwucG5nJmhpZ2hsaWdodD1mZjAwMDAwMCw4QkMzNEEsMzM2OTFFJmNvbG9yPWZmMDAwMDAwP3NjYWxlPTEiLG9wYWNpdHk6MSxvcHRpbWl6ZWQ6dHJ1ZX0pOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgdmFyIG1hcmtlcj1uZXcgZ29vZ2xlLm1hcHMuTWFya2VyKHtwb3NpdGlvbjp7bGF0Oi0zOC41MjQxNzgsbG5nOjE2LjkyNjIzNn0sZHJhZ2dhYmxlOmZhbHNlLG1hcDptYXAsdGl0bGU6Imhvc3BpdGFsIC0gY3lhbiIsbGFiZWw6IiIsYW5pbWF0aW9uOm51bGwsaWNvbjoiaHR0cDovL3d3dy5nb29nbGUuY29tL21hcHMvdnQvaWNvbi9uYW1lPWFzc2V0cy9pY29ucy9wb2kvdGFjdGlsZS9waW5sZXRfc2hhZG93LTEtc21hbGwucG5nLGFzc2V0cy9pY29ucy9wb2kvdGFjdGlsZS9waW5sZXQtMS1zbWFsbC5wbmcsYXNzZXRzL2ljb25zL3BvaS9xdWFudHVtL3BpbmxldC9ob3NwaXRhbF9IX3BpbmxldC0xLXNtYWxsLnBuZyZoaWdobGlnaHQ9ZmYwMDAwMDAsMDBCQ0Q0LDAwNjA2NCZjb2xvcj1mZjAwMDAwMD9zY2FsZT0yIixvcGFjaXR5OjEsb3B0aW1pemVkOnRydWV9KTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgIHZhciBtYXJrZXI9bmV3IGdvb2dsZS5tYXBzLk1hcmtlcih7cG9zaXRpb246e2xhdDotNjQuODU0NDc3LGxuZzotODYuNTc5NDczfSxkcmFnZ2FibGU6ZmFsc2UsbWFwOm1hcCx0aXRsZToiaG9tZSAtIGFtYmVyIixsYWJlbDoiIixhbmltYXRpb246bnVsbCxpY29uOiJodHRwOi8vd3d3Lmdvb2dsZS5jb20vbWFwcy92dC9pY29uL25hbWU9YXNzZXRzL2ljb25zL3BvaS90YWN0aWxlL3BpbmxldF9zaGFkb3ctMS1zbWFsbC5wbmcsYXNzZXRzL2ljb25zL3BvaS90YWN0aWxlL3BpbmxldC0xLXNtYWxsLnBuZyxhc3NldHMvaWNvbnMvcG9pL3F1YW50dW0vcGlubGV0L2hvbWVfcGlubGV0LTEtc21hbGwucG5nJmhpZ2hsaWdodD1mZmZmZmYsRkZDMTA3LEZGNkYwMCZjb2xvcj1mZjAwMDAwMD9zY2FsZT0xIixvcGFjaXR5OjEsb3B0aW1pemVkOnRydWV9KTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgIHZhciBtYXJrZXI9bmV3IGdvb2dsZS5tYXBzLk1hcmtlcih7cG9zaXRpb246e2xhdDotMzAuODk1MDQ5LGxuZzotMTcxLjMzOTc3Mn0sZHJhZ2dhYmxlOmZhbHNlLG1hcDptYXAsdGl0bGU6ImRvdCAtIGJsdWV3aGl0ZSIsbGFiZWw6IiIsYW5pbWF0aW9uOm51bGwsaWNvbjoiaHR0cDovL3d3dy5nb29nbGUuY29tL21hcHMvdnQvaWNvbi9uYW1lPWFzc2V0cy9pY29ucy9wb2kvdGFjdGlsZS9waW5sZXRfc2hhZG93LTEtc21hbGwucG5nLGFzc2V0cy9pY29ucy9wb2kvdGFjdGlsZS9waW5sZXQtMS1zbWFsbC5wbmcsYXNzZXRzL2ljb25zL3BvaS9xdWFudHVtL3BpbmxldC9kb3RfcGlubGV0LTEtc21hbGwucG5nJmhpZ2hsaWdodD1mZjAwMDAwMCwwMjc3QkQsRkZGRkZGJmNvbG9yPWZmMDAwMDAwP3NjYWxlPTIiLG9wYWNpdHk6MSxvcHRpbWl6ZWQ6dHJ1ZX0pOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgdmFyIG1hcmtlcj1uZXcgZ29vZ2xlLm1hcHMuTWFya2VyKHtwb3NpdGlvbjp7bGF0OjU3LjI1OTE0Myxsbmc6LTM3LjA4OTE1fSxkcmFnZ2FibGU6ZmFsc2UsbWFwOm1hcCx0aXRsZToic3RhcnQgLSBhbWJlciIsbGFiZWw6IiIsYW5pbWF0aW9uOm51bGwsaWNvbjoiaHR0cDovL3d3dy5nb29nbGUuY29tL21hcHMvdnQvaWNvbi9uYW1lPWFzc2V0cy9pY29ucy9wb2kvdGFjdGlsZS9waW5sZXRfc2hhZG93LTEtc21hbGwucG5nLGFzc2V0cy9pY29ucy9wb2kvdGFjdGlsZS9waW5sZXQtMS1zbWFsbC5wbmcsYXNzZXRzL2ljb25zL3BvaS9xdWFudHVtL3BpbmxldC9jb25zdGVsbGF0aW9uX3N0YXJfcGlubGV0LTEtc21hbGwucG5nJmhpZ2hsaWdodD1mZjAwMDAwMCxGRkMxMDcsRkY2RjAwLGZmZmZmZiZjb2xvcj1mZjAwMDAwMD9zY2FsZT0yIixvcGFjaXR5OjEsb3B0aW1pemVkOnRydWV9KTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgIHZhciBtYXJrZXI9bmV3IGdvb2dsZS5tYXBzLk1hcmtlcih7cG9zaXRpb246e2xhdDotODQuMTk5NjkzLGxuZzotODIuMTc3NTc5fSxkcmFnZ2FibGU6ZmFsc2UsbWFwOm1hcCx0aXRsZToiaGVhcnQgLSBjeWFuIixsYWJlbDoiIixhbmltYXRpb246bnVsbCxpY29uOiJodHRwOi8vd3d3Lmdvb2dsZS5jb20vbWFwcy92dC9pY29uL25hbWU9YXNzZXRzL2ljb25zL3BvaS90YWN0aWxlL3BpbmxldF9zaGFkb3ctMS1zbWFsbC5wbmcsYXNzZXRzL2ljb25zL3BvaS90YWN0aWxlL3BpbmxldC0xLXNtYWxsLnBuZyxhc3NldHMvaWNvbnMvcG9pL3F1YW50dW0vcGlubGV0L2hlYXJ0X3BpbmxldC0xLXNtYWxsLnBuZyZoaWdobGlnaHQ9ZmYwMDAwMDAsMDBCQ0Q0LDAwNjA2NCxmZmZmZmYmY29sb3I9ZmYwMDAwMDA/c2NhbGU9MSIsb3BhY2l0eToxLG9wdGltaXplZDp0cnVlfSk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICB2YXIgbWFya2VyPW5ldyBnb29nbGUubWFwcy5NYXJrZXIoe3Bvc2l0aW9uOntsYXQ6LTY2LjM4ODc1NSxsbmc6LTE2Mi4zMTQ0NDl9LGRyYWdnYWJsZTpmYWxzZSxtYXA6bWFwLHRpdGxlOiJmbGFnIC0gYmx1ZXdoaXRlIixsYWJlbDoiIixhbmltYXRpb246bnVsbCxpY29uOiJodHRwOi8vd3d3Lmdvb2dsZS5jb20vbWFwcy92dC9pY29uL25hbWU9YXNzZXRzL2ljb25zL3BvaS90YWN0aWxlL3BpbmxldF9zaGFkb3ctMS1zbWFsbC5wbmcsYXNzZXRzL2ljb25zL3BvaS90YWN0aWxlL3BpbmxldC0xLXNtYWxsLnBuZyxhc3NldHMvaWNvbnMvcG9pL3F1YW50dW0vcGlubGV0L25pY2tuYW1lX3BpbmxldC0xLXNtYWxsLnBuZyZoaWdobGlnaHQ9ZmYwMDAwMDAsMDI3N0JELEZGRkZGRixmZmZmZmYmY29sb3I9ZmYwMDAwMDA/c2NhbGU9MyIsb3BhY2l0eToxLG9wdGltaXplZDp0cnVlfSk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgIAoKICAgICAgICAgICAgICAgLy8gZml0Qm91bmRzIG1ldGhvZAogICAgICAgICAgICAgICAKCiAgICAgICAgICAgICAgIC8vIE1hcmtlckNsdXN0ZXIKICAgICAgICAgICAgICAgCgogICAgICAgICAgICAKICAgICAgICB9OwoKICAgICAgLy8gQXR0YWNoZXMgYW4gaW5mbyB3aW5kb3cgdG8gYSBtYXJrZXIgd2l0aCB0aGUgcHJvdmlkZWQgbWVzc2FnZQogICAgICBmdW5jdGlvbiBhdHRhY2hJbmZvV2luZG93KG1hcmtlciwgbWVzc2FnZSkgewogICAgICAgIHZhciBpbmZvd2luZG93ID0gbmV3IGdvb2dsZS5tYXBzLkluZm9XaW5kb3coewogICAgICAgICAgY29udGVudDogbWVzc2FnZQogICAgICAgIH0pOwoKICAgICAgICBtYXJrZXIuYWRkTGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oKSB7CiAgICAgICAgICBpbmZvd2luZG93Lm9wZW4obWFya2VyLmdldCgnbWFwJyksIG1hcmtlcik7CiAgICAgICAgfSk7CiAgICAgIH07CiAgICA8L3NjcmlwdD4KCiAgICAKICAgIDxzY3JpcHQgYXN5bmMgZGVmZXIKICAgICBzcmM9Imh0dHBzOi8vbWFwcy5nb29nbGVhcGlzLmNvbS9tYXBzL2FwaS9qcz9rZXk9QUl6YVN5Qi1Yc19PMmFpNnpzQVVyaDl0a2tIUFNiQ1NtNzdwd2s0JmNhbGxiYWNrPWluaXRNYXAiPgogICAgPC9zY3JpcHQ+CiAgPC9ib2R5Pgo8L2h0bWw+\" style=\"height:500px;width:100%;border:none !important\"></iframe>" ], "text/plain": [ "<pymaps.pymaps.Map at 0x1d1f28a89b0>" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "m = Map(api_key=API_KEY, zoom=1, style='silver')\n", "for shape in SHAPES:\n", " size = random.randint(1, 3)\n", " color=random.choice([c for c in COLORS])\n", " icon = Icon(shape, color=color, size=size)\n", " coordinates = random_latlng()\n", " Marker(coordinates, icon=icon, title=shape + ' - ' + color).add_to(m)\n", "m" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "<a id=\"marker5\"></a>\n", "## Custom icon from URL" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "* Markers's icons also can be customized from any image URL" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "hideCode": false, "hidePrompt": false, "scrolled": false }, "outputs": [ { "data": { "text/html": [ "<iframe src=\"data:text/html;charset=utf-8;base64,PCFET0NUWVBFIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPlB5TWFwczwvdGl0bGU+CiAgICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0iaW5pdGlhbC1zY2FsZT0xLjAiPgogICAgPG1ldGEgY2hhcnNldD0idXRmLTgiPgogICAgPHN0eWxlPgogICAgICAgICNtYXAgewogICAgICAgICAgICBoZWlnaHQ6IDUwMHB4OwogICAgICAgIH0KICAgICAgICBodG1sLCBib2R5IHsKICAgICAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgICAgIHBhZGRpbmc6IDA7CiAgICAgICAgfQogICAgPC9zdHlsZT4KICA8L2hlYWQ+CiAgPGJvZHk+CiAgICAKICAgIDxkaXYgaWQ9Im1hcCI+CiAgICAgIDwhLS0gTWFwIHdpbGwgYmUgcGxhY2VkIGhlcmUgLS0+CiAgICA8L2Rpdj4KICAgIDxzY3JpcHQ+CiAgICAgICAgZnVuY3Rpb24gaW5pdE1hcCgpIHsKICAgICAgICAgICAgdmFyIG1hcCA9IG5ldyBnb29nbGUubWFwcy5NYXAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21hcCcpLCB7CiAgICAgICAgICAgICAgICB6b29tOiA2LAogICAgICAgICAgICAgICAgY2VudGVyOiB7bGF0OiAtMTguOTksIGxuZzogLTQ0LjA0fSwKICAgICAgICAgICAgICAgIG1hcFR5cGVJZDogJ3JvYWRtYXAnLAogICAgICAgICAgICAgICAgc3RyZWV0Vmlld0NvbnRyb2w6IDAsCiAgICAgICAgICAgICAgICB6b29tQ29udHJvbDogMSwKICAgICAgICAgICAgICAgIGRpc2FibGVEZWZhdWx0VUk6IDEsCiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgc3R5bGVzOiBbeyJmZWF0dXJlVHlwZSI6ImFkbWluaXN0cmF0aXZlIiwiZWxlbWVudFR5cGUiOiJsYWJlbHMudGV4dC5maWxsIiwic3R5bGVycyI6W3siY29sb3IiOiIjNDQ0NDQ0In1dfSx7ImZlYXR1cmVUeXBlIjoibGFuZHNjYXBlIiwiZWxlbWVudFR5cGUiOiJhbGwiLCJzdHlsZXJzIjpbeyJjb2xvciI6IiNmMmYyZjIifV19LHsiZmVhdHVyZVR5cGUiOiJwb2kiLCJlbGVtZW50VHlwZSI6ImFsbCIsInN0eWxlcnMiOlt7InZpc2liaWxpdHkiOiJvZmYifV19LHsiZmVhdHVyZVR5cGUiOiJyb2FkIiwiZWxlbWVudFR5cGUiOiJhbGwiLCJzdHlsZXJzIjpbeyJzYXR1cmF0aW9uIjotMTAwfSx7ImxpZ2h0bmVzcyI6NDV9XX0seyJmZWF0dXJlVHlwZSI6InJvYWQuaGlnaHdheSIsImVsZW1lbnRUeXBlIjoiYWxsIiwic3R5bGVycyI6W3sidmlzaWJpbGl0eSI6InNpbXBsaWZpZWQifV19LHsiZmVhdHVyZVR5cGUiOiJyb2FkLmFydGVyaWFsIiwiZWxlbWVudFR5cGUiOiJsYWJlbHMuaWNvbiIsInN0eWxlcnMiOlt7InZpc2liaWxpdHkiOiJvZmYifV19LHsiZmVhdHVyZVR5cGUiOiJ0cmFuc2l0IiwiZWxlbWVudFR5cGUiOiJhbGwiLCJzdHlsZXJzIjpbeyJ2aXNpYmlsaXR5Ijoib2ZmIn1dfSx7ImZlYXR1cmVUeXBlIjoid2F0ZXIiLCJlbGVtZW50VHlwZSI6ImFsbCIsInN0eWxlcnMiOlt7ImNvbG9yIjoiIzQ2YmNlYyJ9LHsidmlzaWJpbGl0eSI6Im9uIn1dfV0KLAogICAgICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgIC8vIG1hcCBtYXJrZXJzCiAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgdmFyIG1hcmtlcj1uZXcgZ29vZ2xlLm1hcHMuTWFya2VyKHtwb3NpdGlvbjp7bGF0OjQxLjkwMjgsbG5nOjEyLjQ5NjR9LGRyYWdnYWJsZTpmYWxzZSxtYXA6bWFwLHRpdGxlOiJSb21lIixsYWJlbDoiMSIsYW5pbWF0aW9uOmdvb2dsZS5tYXBzLkFuaW1hdGlvbi5EUk9QLGljb246bnVsbCxvcGFjaXR5OjEsb3B0aW1pemVkOnRydWV9KTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgIHZhciBtYXJrZXI9bmV3IGdvb2dsZS5tYXBzLk1hcmtlcih7cG9zaXRpb246e2xhdDo0OC44NTY2LGxuZzoyLjM1MjJ9LGRyYWdnYWJsZTpmYWxzZSxtYXA6bWFwLHRpdGxlOiJQYXJpcyIsbGFiZWw6IjIiLGFuaW1hdGlvbjpnb29nbGUubWFwcy5BbmltYXRpb24uRFJPUCxpY29uOm51bGwsb3BhY2l0eToxLG9wdGltaXplZDp0cnVlfSk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICB2YXIgbWFya2VyPW5ldyBnb29nbGUubWFwcy5NYXJrZXIoe3Bvc2l0aW9uOntsYXQ6NDAuNDE2OCxsbmc6LTMuNzAzOH0sZHJhZ2dhYmxlOmZhbHNlLG1hcDptYXAsdGl0bGU6Ik1hZHJpZCIsbGFiZWw6IjMiLGFuaW1hdGlvbjpnb29nbGUubWFwcy5BbmltYXRpb24uRFJPUCxpY29uOm51bGwsb3BhY2l0eToxLG9wdGltaXplZDp0cnVlfSk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICB2YXIgbWFya2VyPW5ldyBnb29nbGUubWFwcy5NYXJrZXIoe3Bvc2l0aW9uOntsYXQ6NTIuNTIsbG5nOjEzLjQwNX0sZHJhZ2dhYmxlOmZhbHNlLG1hcDptYXAsdGl0bGU6IkJlcmxpbiIsbGFiZWw6IjQiLGFuaW1hdGlvbjpnb29nbGUubWFwcy5BbmltYXRpb24uRFJPUCxpY29uOm51bGwsb3BhY2l0eToxLG9wdGltaXplZDp0cnVlfSk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICB2YXIgbWFya2VyPW5ldyBnb29nbGUubWFwcy5NYXJrZXIoe3Bvc2l0aW9uOntsYXQ6NTIuMzcwMixsbmc6NC44OTUyfSxkcmFnZ2FibGU6ZmFsc2UsbWFwOm1hcCx0aXRsZToiQW1zdGVyZGFuIixsYWJlbDoiNSIsYW5pbWF0aW9uOmdvb2dsZS5tYXBzLkFuaW1hdGlvbi5EUk9QLGljb246bnVsbCxvcGFjaXR5OjEsb3B0aW1pemVkOnRydWV9KTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgIHZhciBtYXJrZXI9bmV3IGdvb2dsZS5tYXBzLk1hcmtlcih7cG9zaXRpb246e2xhdDo1MS41MDk4NjUsbG5nOi0wLjExODA5Mn0sZHJhZ2dhYmxlOmZhbHNlLG1hcDptYXAsdGl0bGU6IkxvbmRvbiIsbGFiZWw6IiIsYW5pbWF0aW9uOmdvb2dsZS5tYXBzLkFuaW1hdGlvbi5CT1VOQ0UsaWNvbjoiaHR0cHM6Ly93d3cud29ya2F3YXkuaW5mby9nZngvZmxhZ3MvZmxhZ19ncmVhdF9icml0YWluLnBuZyIsb3BhY2l0eToxLG9wdGltaXplZDp0cnVlfSk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgIAoKICAgICAgICAgICAgICAgLy8gZml0Qm91bmRzIG1ldGhvZAogICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgdmFyIGJvdW5kcz1uZXcgZ29vZ2xlLm1hcHMuTGF0TG5nQm91bmRzKHtsYXQ6NDAuNDE2OCxsbmc6LTMuNzAzOH0se2xhdDo1Mi41Mixsbmc6MTMuNDA1fSk7bWFwLmZpdEJvdW5kcyhib3VuZHMpOwogICAgICAgICAgICAgICAKCiAgICAgICAgICAgICAgIC8vIE1hcmtlckNsdXN0ZXIKICAgICAgICAgICAgICAgCgogICAgICAgICAgICAKICAgICAgICB9OwoKICAgICAgLy8gQXR0YWNoZXMgYW4gaW5mbyB3aW5kb3cgdG8gYSBtYXJrZXIgd2l0aCB0aGUgcHJvdmlkZWQgbWVzc2FnZQogICAgICBmdW5jdGlvbiBhdHRhY2hJbmZvV2luZG93KG1hcmtlciwgbWVzc2FnZSkgewogICAgICAgIHZhciBpbmZvd2luZG93ID0gbmV3IGdvb2dsZS5tYXBzLkluZm9XaW5kb3coewogICAgICAgICAgY29udGVudDogbWVzc2FnZQogICAgICAgIH0pOwoKICAgICAgICBtYXJrZXIuYWRkTGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oKSB7CiAgICAgICAgICBpbmZvd2luZG93Lm9wZW4obWFya2VyLmdldCgnbWFwJyksIG1hcmtlcik7CiAgICAgICAgfSk7CiAgICAgIH07CiAgICA8L3NjcmlwdD4KCiAgICAKICAgIDxzY3JpcHQgYXN5bmMgZGVmZXIKICAgICBzcmM9Imh0dHBzOi8vbWFwcy5nb29nbGVhcGlzLmNvbS9tYXBzL2FwaS9qcz9rZXk9QUl6YVN5Qi1Yc19PMmFpNnpzQVVyaDl0a2tIUFNiQ1NtNzdwd2s0JmNhbGxiYWNrPWluaXRNYXAiPgogICAgPC9zY3JpcHQ+CiAgPC9ib2R5Pgo8L2h0bWw+\" style=\"height:500px;width:100%;border:none !important\"></iframe>" ], "text/plain": [ "<pymaps.pymaps.Map at 0x1d1f287b0b8>" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "gb_icon = 'https://www.workaway.info/gfx/flags/flag_great_britain.png'\n", " \n", "for marker in map.children['marker']:\n", " if marker.title == 'London':\n", " marker.icon = gb_icon\n", " marker.set_animation('BOUNCE')\n", " marker.label = ''\n", " else:\n", " marker.set_animation('DROP')\n", " \n", "\n", "map.set_style('water')\n", "map" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "<a id=\"marker6\"></a>\n", "# MarkerCluster" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [], "source": [ "cities['buenos_aires'] = (-34.6037, -58.3816)\n", "cities['brasilia'] = (-15.7942, -47.8822)\n", "cities['santiago'] = (-33.4489, -70.6693)" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "text/html": [ "<iframe src=\"data:text/html;charset=utf-8;base64,PCFET0NUWVBFIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPlB5TWFwczwvdGl0bGU+CiAgICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0iaW5pdGlhbC1zY2FsZT0xLjAiPgogICAgPG1ldGEgY2hhcnNldD0idXRmLTgiPgogICAgPHN0eWxlPgogICAgICAgICNtYXAgewogICAgICAgICAgICBoZWlnaHQ6IDUwMHB4OwogICAgICAgIH0KICAgICAgICBodG1sLCBib2R5IHsKICAgICAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgICAgIHBhZGRpbmc6IDA7CiAgICAgICAgfQogICAgPC9zdHlsZT4KICA8L2hlYWQ+CiAgPGJvZHk+CiAgICAKICAgIDxkaXYgaWQ9Im1hcCI+CiAgICAgIDwhLS0gTWFwIHdpbGwgYmUgcGxhY2VkIGhlcmUgLS0+CiAgICA8L2Rpdj4KICAgIDxzY3JpcHQ+CiAgICAgICAgZnVuY3Rpb24gaW5pdE1hcCgpIHsKICAgICAgICAgICAgdmFyIG1hcCA9IG5ldyBnb29nbGUubWFwcy5NYXAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21hcCcpLCB7CiAgICAgICAgICAgICAgICB6b29tOiAyLAogICAgICAgICAgICAgICAgY2VudGVyOiB7bGF0OiAyMi42MzY2MDcsIGxuZzogLTE2LjQwMDY4OH0sCiAgICAgICAgICAgICAgICBtYXBUeXBlSWQ6ICdyb2FkbWFwJywKICAgICAgICAgICAgICAgIHN0cmVldFZpZXdDb250cm9sOiAwLAogICAgICAgICAgICAgICAgem9vbUNvbnRyb2w6IDEsCiAgICAgICAgICAgICAgICBkaXNhYmxlRGVmYXVsdFVJOiAxLAogICAgICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgIC8vIG1hcCBtYXJrZXJzCiAgICAgICAgICAgICAgIAoKICAgICAgICAgICAgICAgLy8gZml0Qm91bmRzIG1ldGhvZAogICAgICAgICAgICAgICAKCiAgICAgICAgICAgICAgIC8vIE1hcmtlckNsdXN0ZXIKICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICB2YXIgbWFya2Vycz1bXTt2YXIgbWFya2VyPW5ldyBnb29nbGUubWFwcy5NYXJrZXIoe3Bvc2l0aW9uOntsYXQ6NDEuOTAyOCxsbmc6MTIuNDk2NH0sZHJhZ2dhYmxlOmZhbHNlLG1hcDptYXAsdGl0bGU6IlJvbWUiLGxhYmVsOiIxIixhbmltYXRpb246bnVsbCxpY29uOm51bGwsb3BhY2l0eToxLG9wdGltaXplZDp0cnVlfSk7bWFya2VyLnNldE1hcChudWxsKTttYXJrZXJzLnB1c2gobWFya2VyKTt2YXIgbWFya2VyPW5ldyBnb29nbGUubWFwcy5NYXJrZXIoe3Bvc2l0aW9uOntsYXQ6NDguODU2Nixsbmc6Mi4zNTIyfSxkcmFnZ2FibGU6ZmFsc2UsbWFwOm1hcCx0aXRsZToiUGFyaXMiLGxhYmVsOiIyIixhbmltYXRpb246bnVsbCxpY29uOm51bGwsb3BhY2l0eToxLG9wdGltaXplZDp0cnVlfSk7bWFya2VyLnNldE1hcChudWxsKTttYXJrZXJzLnB1c2gobWFya2VyKTt2YXIgbWFya2VyPW5ldyBnb29nbGUubWFwcy5NYXJrZXIoe3Bvc2l0aW9uOntsYXQ6NDAuNDE2OCxsbmc6LTMuNzAzOH0sZHJhZ2dhYmxlOmZhbHNlLG1hcDptYXAsdGl0bGU6Ik1hZHJpZCIsbGFiZWw6IjMiLGFuaW1hdGlvbjpudWxsLGljb246bnVsbCxvcGFjaXR5OjEsb3B0aW1pemVkOnRydWV9KTttYXJrZXIuc2V0TWFwKG51bGwpO21hcmtlcnMucHVzaChtYXJrZXIpO3ZhciBtYXJrZXI9bmV3IGdvb2dsZS5tYXBzLk1hcmtlcih7cG9zaXRpb246e2xhdDo1Mi41Mixsbmc6MTMuNDA1fSxkcmFnZ2FibGU6ZmFsc2UsbWFwOm1hcCx0aXRsZToiQmVybGluIixsYWJlbDoiNCIsYW5pbWF0aW9uOm51bGwsaWNvbjpudWxsLG9wYWNpdHk6MSxvcHRpbWl6ZWQ6dHJ1ZX0pO21hcmtlci5zZXRNYXAobnVsbCk7bWFya2Vycy5wdXNoKG1hcmtlcik7dmFyIG1hcmtlcj1uZXcgZ29vZ2xlLm1hcHMuTWFya2VyKHtwb3NpdGlvbjp7bGF0OjUyLjM3MDIsbG5nOjQuODk1Mn0sZHJhZ2dhYmxlOmZhbHNlLG1hcDptYXAsdGl0bGU6IkFtc3RlcmRhbiIsbGFiZWw6IjUiLGFuaW1hdGlvbjpudWxsLGljb246bnVsbCxvcGFjaXR5OjEsb3B0aW1pemVkOnRydWV9KTttYXJrZXIuc2V0TWFwKG51bGwpO21hcmtlcnMucHVzaChtYXJrZXIpO3ZhciBtYXJrZXI9bmV3IGdvb2dsZS5tYXBzLk1hcmtlcih7cG9zaXRpb246e2xhdDo1MS41MDk4NjUsbG5nOi0wLjExODA5Mn0sZHJhZ2dhYmxlOmZhbHNlLG1hcDptYXAsdGl0bGU6IkxvbmRvbiIsbGFiZWw6IjYiLGFuaW1hdGlvbjpudWxsLGljb246bnVsbCxvcGFjaXR5OjEsb3B0aW1pemVkOnRydWV9KTttYXJrZXIuc2V0TWFwKG51bGwpO21hcmtlcnMucHVzaChtYXJrZXIpO3ZhciBtYXJrZXI9bmV3IGdvb2dsZS5tYXBzLk1hcmtlcih7cG9zaXRpb246e2xhdDotMzQuNjAzNyxsbmc6LTU4LjM4MTZ9LGRyYWdnYWJsZTpmYWxzZSxtYXA6bWFwLHRpdGxlOiJCdWVub3NfQWlyZXMiLGxhYmVsOiI3IixhbmltYXRpb246bnVsbCxpY29uOm51bGwsb3BhY2l0eToxLG9wdGltaXplZDp0cnVlfSk7bWFya2VyLnNldE1hcChudWxsKTttYXJrZXJzLnB1c2gobWFya2VyKTt2YXIgbWFya2VyPW5ldyBnb29nbGUubWFwcy5NYXJrZXIoe3Bvc2l0aW9uOntsYXQ6LTE1Ljc5NDIsbG5nOi00Ny44ODIyfSxkcmFnZ2FibGU6ZmFsc2UsbWFwOm1hcCx0aXRsZToiQnJhc2lsaWEiLGxhYmVsOiI4IixhbmltYXRpb246bnVsbCxpY29uOm51bGwsb3BhY2l0eToxLG9wdGltaXplZDp0cnVlfSk7bWFya2VyLnNldE1hcChudWxsKTttYXJrZXJzLnB1c2gobWFya2VyKTt2YXIgbWFya2VyPW5ldyBnb29nbGUubWFwcy5NYXJrZXIoe3Bvc2l0aW9uOntsYXQ6LTMzLjQ0ODksbG5nOi03MC42NjkzfSxkcmFnZ2FibGU6ZmFsc2UsbWFwOm1hcCx0aXRsZToiU2FudGlhZ28iLGxhYmVsOiI5IixhbmltYXRpb246bnVsbCxpY29uOm51bGwsb3BhY2l0eToxLG9wdGltaXplZDp0cnVlfSk7bWFya2VyLnNldE1hcChudWxsKTttYXJrZXJzLnB1c2gobWFya2VyKTt2YXIgbWFya2VyQ2x1c3Rlcj1uZXcgTWFya2VyQ2x1c3RlcmVyKG1hcCxtYXJrZXJzLHtpbWFnZVBhdGg6Imh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9nb29nbGVtYXBzL2pzLW1hcmtlci1jbHVzdGVyZXIvZ2gtcGFnZXMvaW1hZ2VzL20iLHpvb21PbkNsaWNrOnRydWUsbWluaW11bUNsdXN0ZXJTaXplOjIsZ3JpZFNpemU6NjAsbWF4Wm9vbTpudWxsLGF2ZXJhZ2VDZW50ZXI6ZmFsc2UsfSk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgIAoKICAgICAgICAgICAgCiAgICAgICAgfTsKCiAgICAgIC8vIEF0dGFjaGVzIGFuIGluZm8gd2luZG93IHRvIGEgbWFya2VyIHdpdGggdGhlIHByb3ZpZGVkIG1lc3NhZ2UKICAgICAgZnVuY3Rpb24gYXR0YWNoSW5mb1dpbmRvdyhtYXJrZXIsIG1lc3NhZ2UpIHsKICAgICAgICB2YXIgaW5mb3dpbmRvdyA9IG5ldyBnb29nbGUubWFwcy5JbmZvV2luZG93KHsKICAgICAgICAgIGNvbnRlbnQ6IG1lc3NhZ2UKICAgICAgICB9KTsKCiAgICAgICAgbWFya2VyLmFkZExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKCkgewogICAgICAgICAgaW5mb3dpbmRvdy5vcGVuKG1hcmtlci5nZXQoJ21hcCcpLCBtYXJrZXIpOwogICAgICAgIH0pOwogICAgICB9OwogICAgPC9zY3JpcHQ+CgogICAgCiAgICAgIDwvc2NyaXB0PgogICAgICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9tYXBzL2RvY3VtZW50YXRpb24vamF2YXNjcmlwdC9leGFtcGxlcy9tYXJrZXJjbHVzdGVyZXIvbWFya2VyY2x1c3RlcmVyLmpzIj4KICAgICAgPC9zY3JpcHQ+CiAgICAKICAgIDxzY3JpcHQgYXN5bmMgZGVmZXIKICAgICBzcmM9Imh0dHBzOi8vbWFwcy5nb29nbGVhcGlzLmNvbS9tYXBzL2FwaS9qcz9rZXk9QUl6YVN5Qi1Yc19PMmFpNnpzQVVyaDl0a2tIUFNiQ1NtNzdwd2s0JmNhbGxiYWNrPWluaXRNYXAiPgogICAgPC9zY3JpcHQ+CiAgPC9ib2R5Pgo8L2h0bWw+\" style=\"height:500px;width:100%;border:none !important\"></iframe>" ], "text/plain": [ "<pymaps.pymaps.Map at 0x1d1f28ac320>" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "map = Map(api_key=API_KEY, show_pegman=False, disable_default_ui=True)\n", "cluster = MarkerCluster()\n", "for n, values in enumerate(cities.items(), 1): \n", " city_name, latlgn = values\n", " title = city_name.title() \n", " Marker(latlgn, title=title, label=n).add_to(cluster)\n", "cluster.add_to(map)\n", "map" ] } ], "metadata": { "hide_code_all_hidden": false, "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.6.2" } }, "nbformat": 4, "nbformat_minor": 2 }