Skip to content

Instantly share code, notes, and snippets.

@maptastik
Last active October 26, 2018 19:59
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save maptastik/1fa2b5e7a2e657a9b3891615e10a2c47 to your computer and use it in GitHub Desktop.
Save maptastik/1fa2b5e7a2e657a9b3891615e10a2c47 to your computer and use it in GitHub Desktop.
osmnx test on parks in Lenox, MA
Display the source blob
Display the rendered blob
Raw
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Display the source blob
Display the rendered blob
Raw
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Display the source blob
Display the rendered blob
Raw
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Troubleshooting some intersection issues in geopandas\n",
"\n",
"Part of the NCC analysis is to select only those park access points that fall within a certain distance of location and figure out the shortest route to them. As I was trying to port our analysis from arcpy to geopandas and osmnx, I was having trouble getting the intersection function to work. I would pass something like\n",
"\n",
"```python\n",
"points_gdf.within(poly_gdf)\n",
"```\n",
"\n",
"but would only get a correct evaluation for the first row of `points_gdf`. This notebook is an attempt to troubleshoot and come up with a solution to this problem.\n",
"\n",
"Some research suggested that because I only had one feature in `poly_gdf`, geopandas was doing some sort of index matching. I'm not sure why that's how it works but it would explain why only the first row was being evaluated. My solution was essentially to iterate through each row in `points_gdf` using a list comprehension and pandas's `df.iterrows()` function to find out if it was within the single polygon in `poly_gdf`. I then passed the resulting list as a filter to `points_gdf` which returned only those points that evaluated to `True` for being within `polygon_gdf`."
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import os\n",
"import json\n",
"import geopandas as gpd\n",
"from geopy import Nominatim\n",
"from shapely.geometry import Point, MultiPoint\n",
"import folium\n"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"def gdf_to_geojson(gdf):\n",
" gdf_json = gdf.to_json()\n",
" gdf_json = json.loads(gdf_json)\n",
" return gdf_json"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Get some points"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>parkid</th>\n",
" <th>ap_id</th>\n",
" <th>name</th>\n",
" <th>geometry</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>1</td>\n",
" <td>101001</td>\n",
" <td>Community Center</td>\n",
" <td>POINT (-73.28231960535049 42.35542615467306)</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>2</td>\n",
" <td>102001</td>\n",
" <td>Basketball Court</td>\n",
" <td>POINT (-73.28166514635086 42.35606835114605)</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>3</td>\n",
" <td>103001</td>\n",
" <td>Lenox Town Beach</td>\n",
" <td>POINT (-73.26271533966064 42.32728595838694)</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>4</td>\n",
" <td>104001</td>\n",
" <td>Orebed Park</td>\n",
" <td>POINT (-73.28073978424072 42.35763219103418)</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>4</td>\n",
" <td>104002</td>\n",
" <td>Orebed Park</td>\n",
" <td>POINT (-73.28090876340866 42.35855382749465)</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" parkid ap_id name \\\n",
"0 1 101001 Community Center \n",
"1 2 102001 Basketball Court \n",
"2 3 103001 Lenox Town Beach \n",
"3 4 104001 Orebed Park \n",
"4 4 104002 Orebed Park \n",
"\n",
" geometry \n",
"0 POINT (-73.28231960535049 42.35542615467306) \n",
"1 POINT (-73.28166514635086 42.35606835114605) \n",
"2 POINT (-73.26271533966064 42.32728595838694) \n",
"3 POINT (-73.28073978424072 42.35763219103418) \n",
"4 POINT (-73.28090876340866 42.35855382749465) "
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"points_gdf = gpd.read_file('lenox_pap.geojson')\n",
"points_json = gdf_to_geojson(points_gdf)\n",
"points_gdf.head()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Get a starting point"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div style=\"width:100%;\"><div style=\"position:relative;width:100%;height:0;padding-bottom:60%;\"><iframe src=\"data:text/html;charset=utf-8;base64,PCFET0NUWVBFIGh0bWw+CjxoZWFkPiAgICAKICAgIDxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiAvPgogICAgPHNjcmlwdD5MX1BSRUZFUl9DQU5WQVM9ZmFsc2U7IExfTk9fVE9VQ0g9ZmFsc2U7IExfRElTQUJMRV8zRD1mYWxzZTs8L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS4yLjAvZGlzdC9sZWFmbGV0LmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2FqYXguZ29vZ2xlYXBpcy5jb20vYWpheC9saWJzL2pxdWVyeS8xLjExLjEvanF1ZXJ5Lm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvanMvYm9vdHN0cmFwLm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvTGVhZmxldC5hd2Vzb21lLW1hcmtlcnMvMi4wLjIvbGVhZmxldC5hd2Vzb21lLW1hcmtlcnMuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS4yLjAvZGlzdC9sZWFmbGV0LmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL21heGNkbi5ib290c3RyYXBjZG4uY29tL2Jvb3RzdHJhcC8zLjIuMC9jc3MvYm9vdHN0cmFwLm1pbi5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvY3NzL2Jvb3RzdHJhcC10aGVtZS5taW4uY3NzIi8+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vbWF4Y2RuLmJvb3RzdHJhcGNkbi5jb20vZm9udC1hd2Vzb21lLzQuNi4zL2Nzcy9mb250LWF3ZXNvbWUubWluLmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9MZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy8yLjAuMi9sZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9yYXdnaXQuY29tL3B5dGhvbi12aXN1YWxpemF0aW9uL2ZvbGl1bS9tYXN0ZXIvZm9saXVtL3RlbXBsYXRlcy9sZWFmbGV0LmF3ZXNvbWUucm90YXRlLmNzcyIvPgogICAgPHN0eWxlPmh0bWwsIGJvZHkge3dpZHRoOiAxMDAlO2hlaWdodDogMTAwJTttYXJnaW46IDA7cGFkZGluZzogMDt9PC9zdHlsZT4KICAgIDxzdHlsZT4jbWFwIHtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtyaWdodDowO2xlZnQ6MDt9PC9zdHlsZT4KICAgIAogICAgPHN0eWxlPiNtYXBfOWRiMWYwYzNjMjM5NDQzMWJjZjZiM2MxYjg1NjJlNzYgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICB3aWR0aDogMTAwLjAlOwogICAgICAgIGhlaWdodDogMTAwLjAlOwogICAgICAgIGxlZnQ6IDAuMCU7CiAgICAgICAgdG9wOiAwLjAlOwogICAgICAgIH0KICAgIDwvc3R5bGU+CjwvaGVhZD4KPGJvZHk+ICAgIAogICAgCiAgICA8ZGl2IGNsYXNzPSJmb2xpdW0tbWFwIiBpZD0ibWFwXzlkYjFmMGMzYzIzOTQ0MzFiY2Y2YjNjMWI4NTYyZTc2IiA+PC9kaXY+CjwvYm9keT4KPHNjcmlwdD4gICAgCiAgICAKICAgIAogICAgICAgIHZhciBib3VuZHMgPSBudWxsOwogICAgCgogICAgdmFyIG1hcF85ZGIxZjBjM2MyMzk0NDMxYmNmNmIzYzFiODU2MmU3NiA9IEwubWFwKAogICAgICAgICdtYXBfOWRiMWYwYzNjMjM5NDQzMWJjZjZiM2MxYjg1NjJlNzYnLCB7CiAgICAgICAgY2VudGVyOiBbNDIuMzU2NDc1LCAtNzMuMjg0ODI4OV0sCiAgICAgICAgem9vbTogMTUsCiAgICAgICAgbWF4Qm91bmRzOiBib3VuZHMsCiAgICAgICAgbGF5ZXJzOiBbXSwKICAgICAgICB3b3JsZENvcHlKdW1wOiBmYWxzZSwKICAgICAgICBjcnM6IEwuQ1JTLkVQU0czODU3LAogICAgICAgIHpvb21Db250cm9sOiB0cnVlLAogICAgICAgIH0pOwoKICAgIAogICAgCiAgICB2YXIgdGlsZV9sYXllcl9jNTgzY2Y2ZjRhZDU0ZGEyYTk2ZmRhYzUzNjY3ZWZjMSA9IEwudGlsZUxheWVyKAogICAgICAgICdodHRwczovL2NhcnRvZGItYmFzZW1hcHMtYS5nbG9iYWwuc3NsLmZhc3RseS5uZXQvbGlnaHRfYWxsL3t6fS97eH0ve3l9LnBuZycsCiAgICAgICAgewogICAgICAgICJhdHRyaWJ1dGlvbiI6ICImY29weTsgPGEgaHJlZj1cImh0dHA6Ly93d3cub3BlbnN0cmVldG1hcC5vcmcvY29weXJpZ2h0XCI+T3BlblN0cmVldE1hcDwvYT4gJmNvcHk7IDxhIGhyZWY9XCJodHRwOi8vY2FydG9kYi5jb20vYXR0cmlidXRpb25zXCI+Q2FydG9EQjwvYT4iLAogICAgICAgICJkZXRlY3RSZXRpbmEiOiBmYWxzZSwKICAgICAgICAibWF4TmF0aXZlWm9vbSI6IDE4LAogICAgICAgICJtYXhab29tIjogMTgsCiAgICAgICAgIm1pblpvb20iOiAwLAogICAgICAgICJub1dyYXAiOiBmYWxzZSwKICAgICAgICAic3ViZG9tYWlucyI6ICJhYmMiCn0pLmFkZFRvKG1hcF85ZGIxZjBjM2MyMzk0NDMxYmNmNmIzYzFiODU2MmU3Nik7CiAgICAKICAgICAgICAKICAgICAgICB2YXIgZ2VvX2pzb25fZDE2NmJkODMzMGZkNGM4ZWExNjQ5OGYzOGMzNDc2YzcgPSBMLmdlb0pzb24oCiAgICAgICAgICAgIHsiZmVhdHVyZXMiOiBbeyJnZW9tZXRyeSI6IHsiY29vcmRpbmF0ZXMiOiBbLTczLjI4NDgyODksIDQyLjM1NjQ3NV0sICJ0eXBlIjogIlBvaW50In0sICJpZCI6ICIwIiwgInByb3BlcnRpZXMiOiB7ImFkZHJlc3MiOiAiTGVub3gsIEJlcmtzaGlyZSwgTWFzc2FjaHVzZXR0cywgMDEyNDIsIFVTQSIsICJoaWdobGlnaHQiOiB7fSwgInN0eWxlIjoge319LCAidHlwZSI6ICJGZWF0dXJlIn1dLCAidHlwZSI6ICJGZWF0dXJlQ29sbGVjdGlvbiJ9CiAgICAgICAgICAgIAogICAgICAgICAgICApLmFkZFRvKG1hcF85ZGIxZjBjM2MyMzk0NDMxYmNmNmIzYzFiODU2MmU3Nik7CiAgICAgICAgZ2VvX2pzb25fZDE2NmJkODMzMGZkNGM4ZWExNjQ5OGYzOGMzNDc2Yzcuc2V0U3R5bGUoZnVuY3Rpb24oZmVhdHVyZSkge3JldHVybiBmZWF0dXJlLnByb3BlcnRpZXMuc3R5bGU7fSk7CiAgICAgICAgCjwvc2NyaXB0Pg==\" style=\"position:absolute;width:100%;height:100%;left:0;top:0;border:none !important;\" allowfullscreen webkitallowfullscreen mozallowfullscreen></iframe></div></div>"
],
"text/plain": [
"<folium.folium.Map at 0x1f34c0a6828>"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"geolocator = Nominatim(user_agent = 'prcr-ncc')\n",
"center = geolocator.geocode('Lenox, MA, USA')\n",
"\n",
"center_gdf = gpd.GeoDataFrame({\n",
" 'address': [center.address],\n",
" 'geometry': [Point(center.longitude, center.latitude)]\n",
"})\n",
"center_gdf.crs = {'init': 'epsg:4326'}\n",
"center_json = gdf_to_geojson(center_gdf)\n",
"center_f = folium.features.GeoJson(center_json)\n",
"\n",
"m1 = folium.Map(\n",
" location = [center.latitude, center.longitude],\n",
" tiles = 'https://cartodb-basemaps-a.global.ssl.fastly.net/light_all/{z}/{x}/{y}.png',\n",
" attr = '&copy; <a href=\"http://www.openstreetmap.org/copyright\">OpenStreetMap</a> &copy; <a href=\"http://cartodb.com/attributions\">CartoDB</a>',\n",
" zoom_start = 15\n",
")\n",
"m1.add_child(center_f)\n",
"m1"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Buffer the starting point\n",
"\n",
"We only want to select points from `points_gdf` that are within 1/2 mile of `center_gdf`. We can accomplish this by creating 1/2 mile buffer around the single point in `center_gdf`. Later, we'll use this buffer to help handle our selection from `points_gdf`."
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div style=\"width:100%;\"><div style=\"position:relative;width:100%;height:0;padding-bottom:60%;\"><iframe src=\"data:text/html;charset=utf-8;base64,PCFET0NUWVBFIGh0bWw+CjxoZWFkPiAgICAKICAgIDxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiAvPgogICAgPHNjcmlwdD5MX1BSRUZFUl9DQU5WQVM9ZmFsc2U7IExfTk9fVE9VQ0g9ZmFsc2U7IExfRElTQUJMRV8zRD1mYWxzZTs8L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS4yLjAvZGlzdC9sZWFmbGV0LmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2FqYXguZ29vZ2xlYXBpcy5jb20vYWpheC9saWJzL2pxdWVyeS8xLjExLjEvanF1ZXJ5Lm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvanMvYm9vdHN0cmFwLm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvTGVhZmxldC5hd2Vzb21lLW1hcmtlcnMvMi4wLjIvbGVhZmxldC5hd2Vzb21lLW1hcmtlcnMuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS4yLjAvZGlzdC9sZWFmbGV0LmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL21heGNkbi5ib290c3RyYXBjZG4uY29tL2Jvb3RzdHJhcC8zLjIuMC9jc3MvYm9vdHN0cmFwLm1pbi5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvY3NzL2Jvb3RzdHJhcC10aGVtZS5taW4uY3NzIi8+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vbWF4Y2RuLmJvb3RzdHJhcGNkbi5jb20vZm9udC1hd2Vzb21lLzQuNi4zL2Nzcy9mb250LWF3ZXNvbWUubWluLmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9MZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy8yLjAuMi9sZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9yYXdnaXQuY29tL3B5dGhvbi12aXN1YWxpemF0aW9uL2ZvbGl1bS9tYXN0ZXIvZm9saXVtL3RlbXBsYXRlcy9sZWFmbGV0LmF3ZXNvbWUucm90YXRlLmNzcyIvPgogICAgPHN0eWxlPmh0bWwsIGJvZHkge3dpZHRoOiAxMDAlO2hlaWdodDogMTAwJTttYXJnaW46IDA7cGFkZGluZzogMDt9PC9zdHlsZT4KICAgIDxzdHlsZT4jbWFwIHtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtyaWdodDowO2xlZnQ6MDt9PC9zdHlsZT4KICAgIAogICAgPHN0eWxlPiNtYXBfOWRiMWYwYzNjMjM5NDQzMWJjZjZiM2MxYjg1NjJlNzYgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICB3aWR0aDogMTAwLjAlOwogICAgICAgIGhlaWdodDogMTAwLjAlOwogICAgICAgIGxlZnQ6IDAuMCU7CiAgICAgICAgdG9wOiAwLjAlOwogICAgICAgIH0KICAgIDwvc3R5bGU+CjwvaGVhZD4KPGJvZHk+ICAgIAogICAgCiAgICA8ZGl2IGNsYXNzPSJmb2xpdW0tbWFwIiBpZD0ibWFwXzlkYjFmMGMzYzIzOTQ0MzFiY2Y2YjNjMWI4NTYyZTc2IiA+PC9kaXY+CjwvYm9keT4KPHNjcmlwdD4gICAgCiAgICAKICAgIAogICAgICAgIHZhciBib3VuZHMgPSBudWxsOwogICAgCgogICAgdmFyIG1hcF85ZGIxZjBjM2MyMzk0NDMxYmNmNmIzYzFiODU2MmU3NiA9IEwubWFwKAogICAgICAgICdtYXBfOWRiMWYwYzNjMjM5NDQzMWJjZjZiM2MxYjg1NjJlNzYnLCB7CiAgICAgICAgY2VudGVyOiBbNDIuMzU2NDc1LCAtNzMuMjg0ODI4OV0sCiAgICAgICAgem9vbTogMTUsCiAgICAgICAgbWF4Qm91bmRzOiBib3VuZHMsCiAgICAgICAgbGF5ZXJzOiBbXSwKICAgICAgICB3b3JsZENvcHlKdW1wOiBmYWxzZSwKICAgICAgICBjcnM6IEwuQ1JTLkVQU0czODU3LAogICAgICAgIHpvb21Db250cm9sOiB0cnVlLAogICAgICAgIH0pOwoKICAgIAogICAgCiAgICB2YXIgdGlsZV9sYXllcl9jNTgzY2Y2ZjRhZDU0ZGEyYTk2ZmRhYzUzNjY3ZWZjMSA9IEwudGlsZUxheWVyKAogICAgICAgICdodHRwczovL2NhcnRvZGItYmFzZW1hcHMtYS5nbG9iYWwuc3NsLmZhc3RseS5uZXQvbGlnaHRfYWxsL3t6fS97eH0ve3l9LnBuZycsCiAgICAgICAgewogICAgICAgICJhdHRyaWJ1dGlvbiI6ICImY29weTsgPGEgaHJlZj1cImh0dHA6Ly93d3cub3BlbnN0cmVldG1hcC5vcmcvY29weXJpZ2h0XCI+T3BlblN0cmVldE1hcDwvYT4gJmNvcHk7IDxhIGhyZWY9XCJodHRwOi8vY2FydG9kYi5jb20vYXR0cmlidXRpb25zXCI+Q2FydG9EQjwvYT4iLAogICAgICAgICJkZXRlY3RSZXRpbmEiOiBmYWxzZSwKICAgICAgICAibWF4TmF0aXZlWm9vbSI6IDE4LAogICAgICAgICJtYXhab29tIjogMTgsCiAgICAgICAgIm1pblpvb20iOiAwLAogICAgICAgICJub1dyYXAiOiBmYWxzZSwKICAgICAgICAic3ViZG9tYWlucyI6ICJhYmMiCn0pLmFkZFRvKG1hcF85ZGIxZjBjM2MyMzk0NDMxYmNmNmIzYzFiODU2MmU3Nik7CiAgICAKICAgICAgICAKICAgICAgICB2YXIgZ2VvX2pzb25fZDE2NmJkODMzMGZkNGM4ZWExNjQ5OGYzOGMzNDc2YzcgPSBMLmdlb0pzb24oCiAgICAgICAgICAgIHsiZmVhdHVyZXMiOiBbeyJnZW9tZXRyeSI6IHsiY29vcmRpbmF0ZXMiOiBbLTczLjI4NDgyODksIDQyLjM1NjQ3NV0sICJ0eXBlIjogIlBvaW50In0sICJpZCI6ICIwIiwgInByb3BlcnRpZXMiOiB7ImFkZHJlc3MiOiAiTGVub3gsIEJlcmtzaGlyZSwgTWFzc2FjaHVzZXR0cywgMDEyNDIsIFVTQSIsICJoaWdobGlnaHQiOiB7fSwgInN0eWxlIjoge319LCAidHlwZSI6ICJGZWF0dXJlIn1dLCAidHlwZSI6ICJGZWF0dXJlQ29sbGVjdGlvbiJ9CiAgICAgICAgICAgIAogICAgICAgICAgICApLmFkZFRvKG1hcF85ZGIxZjBjM2MyMzk0NDMxYmNmNmIzYzFiODU2MmU3Nik7CiAgICAgICAgZ2VvX2pzb25fZDE2NmJkODMzMGZkNGM4ZWExNjQ5OGYzOGMzNDc2Yzcuc2V0U3R5bGUoZnVuY3Rpb24oZmVhdHVyZSkge3JldHVybiBmZWF0dXJlLnByb3BlcnRpZXMuc3R5bGU7fSk7CiAgICAgICAgCiAgICAKICAgICAgICAKICAgICAgICB2YXIgZ2VvX2pzb25fYzE5OGM5ZmFmYmRiNDdhNzkwYWQ2OGMzNDlhYTI1OTMgPSBMLmdlb0pzb24oCiAgICAgICAgICAgIHsiYmJveCI6IFstNzMuMjk0NTk0MDc2MzIxNTcsIDQyLjM0OTIzMjI3Mjc0NTg2LCAtNzMuMjc1MDYzNjc2ODgzOTIsIDQyLjM2MzcxNzcxNTIyNDA5XSwgImZlYXR1cmVzIjogW3siYmJveCI6IFstNzMuMjk0NTk0MDc2MzIxNTcsIDQyLjM0OTIzMjI3Mjc0NTg2LCAtNzMuMjc1MDYzNjc2ODgzOTIsIDQyLjM2MzcxNzcxNTIyNDA5XSwgImdlb21ldHJ5IjogeyJjb29yZGluYXRlcyI6IFtbWy03My4yNzUwNjM2NzY4ODM5MiwgNDIuMzU2NjI2MTYyMjk3MTRdLCBbLTczLjI3NTA5MDc3NjkwMTM0LCA0Mi4zNTU5MTU1MjM4NDgwNV0sIFstNzMuMjc1MjExNjU3ODg2MDMsIDQyLjM1NTIxMDI3NzI1MzAzNl0sIFstNzMuMjc1NDI1MTUyNjMxNDYsIDQyLjM1NDUxNzIxNDEzMzYxNV0sIFstNzMuMjc1NzI5MjAyMjIyODksIDQyLjM1Mzg0MzAwODU2NTI5XSwgWy03My4yNzYxMjA4NzU5NzUxMSwgNDIuMzUzMTk0MTUyODIxODJdLCBbLTczLjI3NjU5NjM5OTc1MzQ2LCA0Mi4zNTI1NzY4OTQ4Nzc3NF0sIFstNzMuMjc3MTUxMTkyNDAxNDYsIDQyLjM1MTk5NzE3ODI3MDA5Nl0sIFstNzMuMjc3Nzc5OTA5OTIxNDgsIDQyLjM1MTQ2MDU4NDg5NzEwNF0sIFstNzMuMjc4NDc2NDk2OTgwMjYsIDQyLjM1MDk3MjI4MTMwMzM0XSwgWy03My4yNzkyMzQyNDUyNDE5OCwgNDIuMzUwNTM2OTY4OTY2ODddLCBbLTczLjI4MDA0NTg1Nzk2NjMxLCA0Mi4zNTAxNTg4MzkwNjYwMDVdLCBbLTczLjI4MDkwMzUyMDI0OTY3LCA0Mi4zNDk4NDE1MzIxNTg1NF0sIFstNzMuMjgxNzk4OTc0MjM0MjYsIDQyLjM0OTU4ODEwMzE2MTQ2Nl0sIFstNzMuMjgyNzIzNTk4NTYyODgsIDQyLjM0OTQwMDk5MTk2NTY5NV0sIFstNzMuMjgzNjY4NDkxMzE2ODUsIDQyLjM0OTI4MTk5OTk2ODEzXSwgWy03My4yODQ2MjQ1NTU2NDE4LCA0Mi4zNDkyMzIyNzI3NDU4Nl0sIFstNzMuMjg1NTgyNTg3MjQxMDEsIDQyLjM0OTI1MjI4OTAzODA5XSwgWy03My4yODY1MzMzNjI4OTc3MSwgNDIuMzQ5MzQxODU2MTQyXSwgWy03My4yODc0Njc3MjkxNzg2NCwgNDIuMzQ5NTAwMTExNzY1OTJdLCBbLTczLjI4ODM3NjY5MDQ2OTE5LCA0Mi4zNDk3MjU1MzIzMjI2OTRdLCBbLTczLjI4OTI1MTQ5NTQ5Njk0LCA0Mi4zNTAwMTU5NDc1ODMyOTRdLCBbLTczLjI5MDA4MzcyMTUxNDIxLCA0Mi4zNTAzNjg1NjE1NTA4Ml0sIFstNzMuMjkwODY1MzU1MzMyOTcsIDQyLjM1MDc3OTk3OTM1NDIxNV0sIFstNzMuMjkxNTg4ODcwNDM0NjEsIDQyLjM1MTI0NjIzOTkwNDY0XSwgWy03My4yOTIyNDcyOTk0MTQzOCwgNDIuMzUxNzYyODU0MDAxMDNdLCBbLTczLjI5MjgzNDMwMTA2NDI1LCA0Mi4zNTIzMjQ4NDc1MTk2Nl0sIFstNzMuMjkzMzQ0MjIxNDQ5MDUsIDQyLjM1MjkyNjgwOTI3MzM1XSwgWy03My4yOTM3NzIxNDgzODcxNiwgNDIuMzUzNTYyOTQzMDgxMjldLCBbLTczLjI5NDExMzk1ODgxMDE3LCA0Mi4zNTQyMjcxMjM1NDkzNF0sIFstNzMuMjk0MzY2MzU4NTQzMDcsIDQyLjM1NDkxMjk1NTAyNTZdLCBbLTczLjI5NDUyNjkxNDExOTQ2LCA0Mi4zNTU2MTM4MzMxNjQ0MDVdLCBbLTczLjI5NDU5NDA3NjMyMTU3LCA0Mi4zNTYzMjMwMDg1MDczMl0sIFstNzMuMjk0NTY3MTk1MjE0NiwgNDIuMzU3MDMzNjUxNDY5MzVdLCBbLTczLjI5NDQ0NjUyNjUyNjAyLCA0Mi4zNTc3Mzg5MTgxMDU0OF0sIFstNzMuMjk0MjMzMjI5MzAzOTcsIDQyLjM1ODQzMjAxNjAyNDAyNV0sIFstNzMuMjkzOTI5MzU0ODcyNDYsIDQyLjM1OTEwNjI2OTgxMjE4XSwgWy03My4yOTM1Mzc4MjcxODU0LCA0Mi4zNTk3NTUxODUzNDMxM10sIFstNzMuMjkzMDYyNDE0NzY0MjYsIDQyLjM2MDM3MjUxMjM0NDY4XSwgWy03My4yOTI1MDc2OTQ0ODYxNSwgNDIuMzYwOTUyMzA0NjI2MDNdLCBbLTczLjI5MTg3OTAwNzU2NzUzLCA0Mi4zNjE0ODg5NzczODA4MV0sIFstNzMuMjkxMTgyNDA4MTY1NjcsIDQyLjM2MTk3NzM2MTAxMzg2NF0sIFstNzMuMjkwNDI0NjA1MDkwNzIsIDQyLjM2MjQxMjc1MDk3MTIyXSwgWy03My4yODk2MTI4OTcxODk0NywgNDIuMzYyNzkwOTUzMDkxNzQ2XSwgWy03My4yODg3NTUxMDMwMjMwOSwgNDIuMzYzMTA4MzI0MDQyMThdLCBbLTczLjI4Nzg1OTQ4NTUxNzU3LCA0Mi4zNjMzNjE4MDY0NDQ0NDVdLCBbLTczLjI4NjkzNDY3MjMxNDEyLCA0Mi4zNjM1NDg5NTgzNTUyOV0sIFstNzMuMjg1OTg5NTcyNTg5OCwgNDIuMzYzNjY3OTc2ODEzMTI2XSwgWy03My4yODUwMzMyOTExNTI3LCA0Mi4zNjM3MTc3MTUyMjQwOV0sIFstNzMuMjg0MDc1MDQwNjQzMDMsIDQyLjM2MzY5NzY5NDQxODg5Nl0sIFstNzMuMjgzMTI0MDUyNjkwMjMsIDQyLjM2MzYwODEwNzI3Mzg1XSwgWy03My4yODIxODk0ODg4ODU5MiwgNDIuMzYzNDQ5ODE2ODUwNzldLCBbLTczLjI4MTI4MDM1MjQzNTQ1LCA0Mi4zNjMyMjQzNDgwNzQyMDVdLCBbLTczLjI4MDQwNTQwMTM0MjUsIDQyLjM2MjkzMzg3MzAyNjExXSwgWy03My4yNzk1NzMwNjM5NjgwMywgNDIuMzYyNTgxMTkwMDAxMTE2XSwgWy03My4yNzg3OTEzNTc3Nzk0LCA0Mi4zNjIxNjk2OTY1MjQwMV0sIFstNzMuMjc4MDY3ODEyMDc2MzYsIDQyLjM2MTcwMzM1NjU5MTgyXSwgWy03My4yNzc0MDkzOTU0Mzk2OCwgNDIuMzYxMTg2NjYyNDU2MTNdLCBbLTczLjI3NjgyMjQ0ODYwMzA0LCA0Mi4zNjA2MjQ1OTEzMTY1N10sIFstNzMuMjc2MzEyNjIzMzk1MTcsIDQyLjM2MDAyMjU1NzM0MzI0XSwgWy03My4yNzU4ODQ4MjgzNDAwOCwgNDIuMzU5Mzg2MzU5NDkyMzVdLCBbLTczLjI3NTU0MzE4MTQzODAxLCA0Mi4zNTg3MjIxMjU2MTkwOTZdLCBbLTczLjI3NTI5MDk3MDU3OTkyLCA0Mi4zNTgwMzYyNTM0Mjc3ODRdLCBbLTczLjI3NTEzMDYyMTk3MzksIDQyLjM1NzMzNTM0ODgyODddLCBbLTczLjI3NTA2MzY3Njg4MzkyLCA0Mi4zNTY2MjYxNjIyOTcxNF1dXSwgInR5cGUiOiAiUG9seWdvbiJ9LCAiaWQiOiAiMCIsICJwcm9wZXJ0aWVzIjogeyJoaWdobGlnaHQiOiB7fSwgInN0eWxlIjogeyJjb2xvciI6ICJibGFjayIsICJkYXNoQXJyYXkiOiBbNSwgMTBdLCAiZmlsbE9wYWNpdHkiOiAwLCAid2VpZ2h0IjogNX19LCAidHlwZSI6ICJGZWF0dXJlIn1dLCAidHlwZSI6ICJGZWF0dXJlQ29sbGVjdGlvbiJ9CiAgICAgICAgICAgIAogICAgICAgICAgICApLmFkZFRvKG1hcF85ZGIxZjBjM2MyMzk0NDMxYmNmNmIzYzFiODU2MmU3Nik7CiAgICAgICAgZ2VvX2pzb25fYzE5OGM5ZmFmYmRiNDdhNzkwYWQ2OGMzNDlhYTI1OTMuc2V0U3R5bGUoZnVuY3Rpb24oZmVhdHVyZSkge3JldHVybiBmZWF0dXJlLnByb3BlcnRpZXMuc3R5bGU7fSk7CiAgICAgICAgCjwvc2NyaXB0Pg==\" style=\"position:absolute;width:100%;height:100%;left:0;top:0;border:none !important;\" allowfullscreen webkitallowfullscreen mozallowfullscreen></iframe></div></div>"
],
"text/plain": [
"<folium.folium.Map at 0x1f34c0a6828>"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"center_buff_gdf = center_gdf.to_crs({'init':'epsg:2249'}).buffer(2640).to_crs({'init':'epsg:4326'})\n",
"center_buff_json = gdf_to_geojson(center_buff_gdf)\n",
"\n",
"m1.add_child(folium.features.GeoJson(center_buff_json, style_function = lambda x: {\n",
" 'color': 'black',\n",
" 'fillOpacity': 0,\n",
" 'weight': 5,\n",
" 'dashArray': [5, 10]\n",
"}))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Look at points\n"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div style=\"width:100%;\"><div style=\"position:relative;width:100%;height:0;padding-bottom:60%;\"><iframe src=\"data:text/html;charset=utf-8;base64,PCFET0NUWVBFIGh0bWw+CjxoZWFkPiAgICAKICAgIDxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiAvPgogICAgPHNjcmlwdD5MX1BSRUZFUl9DQU5WQVM9ZmFsc2U7IExfTk9fVE9VQ0g9ZmFsc2U7IExfRElTQUJMRV8zRD1mYWxzZTs8L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS4yLjAvZGlzdC9sZWFmbGV0LmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2FqYXguZ29vZ2xlYXBpcy5jb20vYWpheC9saWJzL2pxdWVyeS8xLjExLjEvanF1ZXJ5Lm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvanMvYm9vdHN0cmFwLm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvTGVhZmxldC5hd2Vzb21lLW1hcmtlcnMvMi4wLjIvbGVhZmxldC5hd2Vzb21lLW1hcmtlcnMuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS4yLjAvZGlzdC9sZWFmbGV0LmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL21heGNkbi5ib290c3RyYXBjZG4uY29tL2Jvb3RzdHJhcC8zLjIuMC9jc3MvYm9vdHN0cmFwLm1pbi5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvY3NzL2Jvb3RzdHJhcC10aGVtZS5taW4uY3NzIi8+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vbWF4Y2RuLmJvb3RzdHJhcGNkbi5jb20vZm9udC1hd2Vzb21lLzQuNi4zL2Nzcy9mb250LWF3ZXNvbWUubWluLmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9MZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy8yLjAuMi9sZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9yYXdnaXQuY29tL3B5dGhvbi12aXN1YWxpemF0aW9uL2ZvbGl1bS9tYXN0ZXIvZm9saXVtL3RlbXBsYXRlcy9sZWFmbGV0LmF3ZXNvbWUucm90YXRlLmNzcyIvPgogICAgPHN0eWxlPmh0bWwsIGJvZHkge3dpZHRoOiAxMDAlO2hlaWdodDogMTAwJTttYXJnaW46IDA7cGFkZGluZzogMDt9PC9zdHlsZT4KICAgIDxzdHlsZT4jbWFwIHtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtyaWdodDowO2xlZnQ6MDt9PC9zdHlsZT4KICAgIAogICAgPHN0eWxlPiNtYXBfOWRiMWYwYzNjMjM5NDQzMWJjZjZiM2MxYjg1NjJlNzYgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICB3aWR0aDogMTAwLjAlOwogICAgICAgIGhlaWdodDogMTAwLjAlOwogICAgICAgIGxlZnQ6IDAuMCU7CiAgICAgICAgdG9wOiAwLjAlOwogICAgICAgIH0KICAgIDwvc3R5bGU+CjwvaGVhZD4KPGJvZHk+ICAgIAogICAgCiAgICA8ZGl2IGNsYXNzPSJmb2xpdW0tbWFwIiBpZD0ibWFwXzlkYjFmMGMzYzIzOTQ0MzFiY2Y2YjNjMWI4NTYyZTc2IiA+PC9kaXY+CjwvYm9keT4KPHNjcmlwdD4gICAgCiAgICAKICAgIAogICAgICAgIHZhciBib3VuZHMgPSBudWxsOwogICAgCgogICAgdmFyIG1hcF85ZGIxZjBjM2MyMzk0NDMxYmNmNmIzYzFiODU2MmU3NiA9IEwubWFwKAogICAgICAgICdtYXBfOWRiMWYwYzNjMjM5NDQzMWJjZjZiM2MxYjg1NjJlNzYnLCB7CiAgICAgICAgY2VudGVyOiBbNDIuMzU2NDc1LCAtNzMuMjg0ODI4OV0sCiAgICAgICAgem9vbTogMTUsCiAgICAgICAgbWF4Qm91bmRzOiBib3VuZHMsCiAgICAgICAgbGF5ZXJzOiBbXSwKICAgICAgICB3b3JsZENvcHlKdW1wOiBmYWxzZSwKICAgICAgICBjcnM6IEwuQ1JTLkVQU0czODU3LAogICAgICAgIHpvb21Db250cm9sOiB0cnVlLAogICAgICAgIH0pOwoKICAgIAogICAgCiAgICB2YXIgdGlsZV9sYXllcl9jNTgzY2Y2ZjRhZDU0ZGEyYTk2ZmRhYzUzNjY3ZWZjMSA9IEwudGlsZUxheWVyKAogICAgICAgICdodHRwczovL2NhcnRvZGItYmFzZW1hcHMtYS5nbG9iYWwuc3NsLmZhc3RseS5uZXQvbGlnaHRfYWxsL3t6fS97eH0ve3l9LnBuZycsCiAgICAgICAgewogICAgICAgICJhdHRyaWJ1dGlvbiI6ICImY29weTsgPGEgaHJlZj1cImh0dHA6Ly93d3cub3BlbnN0cmVldG1hcC5vcmcvY29weXJpZ2h0XCI+T3BlblN0cmVldE1hcDwvYT4gJmNvcHk7IDxhIGhyZWY9XCJodHRwOi8vY2FydG9kYi5jb20vYXR0cmlidXRpb25zXCI+Q2FydG9EQjwvYT4iLAogICAgICAgICJkZXRlY3RSZXRpbmEiOiBmYWxzZSwKICAgICAgICAibWF4TmF0aXZlWm9vbSI6IDE4LAogICAgICAgICJtYXhab29tIjogMTgsCiAgICAgICAgIm1pblpvb20iOiAwLAogICAgICAgICJub1dyYXAiOiBmYWxzZSwKICAgICAgICAic3ViZG9tYWlucyI6ICJhYmMiCn0pLmFkZFRvKG1hcF85ZGIxZjBjM2MyMzk0NDMxYmNmNmIzYzFiODU2MmU3Nik7CiAgICAKICAgICAgICAKICAgICAgICB2YXIgZ2VvX2pzb25fZDE2NmJkODMzMGZkNGM4ZWExNjQ5OGYzOGMzNDc2YzcgPSBMLmdlb0pzb24oCiAgICAgICAgICAgIHsiZmVhdHVyZXMiOiBbeyJnZW9tZXRyeSI6IHsiY29vcmRpbmF0ZXMiOiBbLTczLjI4NDgyODksIDQyLjM1NjQ3NV0sICJ0eXBlIjogIlBvaW50In0sICJpZCI6ICIwIiwgInByb3BlcnRpZXMiOiB7ImFkZHJlc3MiOiAiTGVub3gsIEJlcmtzaGlyZSwgTWFzc2FjaHVzZXR0cywgMDEyNDIsIFVTQSIsICJoaWdobGlnaHQiOiB7fSwgInN0eWxlIjoge319LCAidHlwZSI6ICJGZWF0dXJlIn1dLCAidHlwZSI6ICJGZWF0dXJlQ29sbGVjdGlvbiJ9CiAgICAgICAgICAgIAogICAgICAgICAgICApLmFkZFRvKG1hcF85ZGIxZjBjM2MyMzk0NDMxYmNmNmIzYzFiODU2MmU3Nik7CiAgICAgICAgZ2VvX2pzb25fZDE2NmJkODMzMGZkNGM4ZWExNjQ5OGYzOGMzNDc2Yzcuc2V0U3R5bGUoZnVuY3Rpb24oZmVhdHVyZSkge3JldHVybiBmZWF0dXJlLnByb3BlcnRpZXMuc3R5bGU7fSk7CiAgICAgICAgCiAgICAKICAgICAgICAKICAgICAgICB2YXIgZ2VvX2pzb25fYzE5OGM5ZmFmYmRiNDdhNzkwYWQ2OGMzNDlhYTI1OTMgPSBMLmdlb0pzb24oCiAgICAgICAgICAgIHsiYmJveCI6IFstNzMuMjk0NTk0MDc2MzIxNTcsIDQyLjM0OTIzMjI3Mjc0NTg2LCAtNzMuMjc1MDYzNjc2ODgzOTIsIDQyLjM2MzcxNzcxNTIyNDA5XSwgImZlYXR1cmVzIjogW3siYmJveCI6IFstNzMuMjk0NTk0MDc2MzIxNTcsIDQyLjM0OTIzMjI3Mjc0NTg2LCAtNzMuMjc1MDYzNjc2ODgzOTIsIDQyLjM2MzcxNzcxNTIyNDA5XSwgImdlb21ldHJ5IjogeyJjb29yZGluYXRlcyI6IFtbWy03My4yNzUwNjM2NzY4ODM5MiwgNDIuMzU2NjI2MTYyMjk3MTRdLCBbLTczLjI3NTA5MDc3NjkwMTM0LCA0Mi4zNTU5MTU1MjM4NDgwNV0sIFstNzMuMjc1MjExNjU3ODg2MDMsIDQyLjM1NTIxMDI3NzI1MzAzNl0sIFstNzMuMjc1NDI1MTUyNjMxNDYsIDQyLjM1NDUxNzIxNDEzMzYxNV0sIFstNzMuMjc1NzI5MjAyMjIyODksIDQyLjM1Mzg0MzAwODU2NTI5XSwgWy03My4yNzYxMjA4NzU5NzUxMSwgNDIuMzUzMTk0MTUyODIxODJdLCBbLTczLjI3NjU5NjM5OTc1MzQ2LCA0Mi4zNTI1NzY4OTQ4Nzc3NF0sIFstNzMuMjc3MTUxMTkyNDAxNDYsIDQyLjM1MTk5NzE3ODI3MDA5Nl0sIFstNzMuMjc3Nzc5OTA5OTIxNDgsIDQyLjM1MTQ2MDU4NDg5NzEwNF0sIFstNzMuMjc4NDc2NDk2OTgwMjYsIDQyLjM1MDk3MjI4MTMwMzM0XSwgWy03My4yNzkyMzQyNDUyNDE5OCwgNDIuMzUwNTM2OTY4OTY2ODddLCBbLTczLjI4MDA0NTg1Nzk2NjMxLCA0Mi4zNTAxNTg4MzkwNjYwMDVdLCBbLTczLjI4MDkwMzUyMDI0OTY3LCA0Mi4zNDk4NDE1MzIxNTg1NF0sIFstNzMuMjgxNzk4OTc0MjM0MjYsIDQyLjM0OTU4ODEwMzE2MTQ2Nl0sIFstNzMuMjgyNzIzNTk4NTYyODgsIDQyLjM0OTQwMDk5MTk2NTY5NV0sIFstNzMuMjgzNjY4NDkxMzE2ODUsIDQyLjM0OTI4MTk5OTk2ODEzXSwgWy03My4yODQ2MjQ1NTU2NDE4LCA0Mi4zNDkyMzIyNzI3NDU4Nl0sIFstNzMuMjg1NTgyNTg3MjQxMDEsIDQyLjM0OTI1MjI4OTAzODA5XSwgWy03My4yODY1MzMzNjI4OTc3MSwgNDIuMzQ5MzQxODU2MTQyXSwgWy03My4yODc0Njc3MjkxNzg2NCwgNDIuMzQ5NTAwMTExNzY1OTJdLCBbLTczLjI4ODM3NjY5MDQ2OTE5LCA0Mi4zNDk3MjU1MzIzMjI2OTRdLCBbLTczLjI4OTI1MTQ5NTQ5Njk0LCA0Mi4zNTAwMTU5NDc1ODMyOTRdLCBbLTczLjI5MDA4MzcyMTUxNDIxLCA0Mi4zNTAzNjg1NjE1NTA4Ml0sIFstNzMuMjkwODY1MzU1MzMyOTcsIDQyLjM1MDc3OTk3OTM1NDIxNV0sIFstNzMuMjkxNTg4ODcwNDM0NjEsIDQyLjM1MTI0NjIzOTkwNDY0XSwgWy03My4yOTIyNDcyOTk0MTQzOCwgNDIuMzUxNzYyODU0MDAxMDNdLCBbLTczLjI5MjgzNDMwMTA2NDI1LCA0Mi4zNTIzMjQ4NDc1MTk2Nl0sIFstNzMuMjkzMzQ0MjIxNDQ5MDUsIDQyLjM1MjkyNjgwOTI3MzM1XSwgWy03My4yOTM3NzIxNDgzODcxNiwgNDIuMzUzNTYyOTQzMDgxMjldLCBbLTczLjI5NDExMzk1ODgxMDE3LCA0Mi4zNTQyMjcxMjM1NDkzNF0sIFstNzMuMjk0MzY2MzU4NTQzMDcsIDQyLjM1NDkxMjk1NTAyNTZdLCBbLTczLjI5NDUyNjkxNDExOTQ2LCA0Mi4zNTU2MTM4MzMxNjQ0MDVdLCBbLTczLjI5NDU5NDA3NjMyMTU3LCA0Mi4zNTYzMjMwMDg1MDczMl0sIFstNzMuMjk0NTY3MTk1MjE0NiwgNDIuMzU3MDMzNjUxNDY5MzVdLCBbLTczLjI5NDQ0NjUyNjUyNjAyLCA0Mi4zNTc3Mzg5MTgxMDU0OF0sIFstNzMuMjk0MjMzMjI5MzAzOTcsIDQyLjM1ODQzMjAxNjAyNDAyNV0sIFstNzMuMjkzOTI5MzU0ODcyNDYsIDQyLjM1OTEwNjI2OTgxMjE4XSwgWy03My4yOTM1Mzc4MjcxODU0LCA0Mi4zNTk3NTUxODUzNDMxM10sIFstNzMuMjkzMDYyNDE0NzY0MjYsIDQyLjM2MDM3MjUxMjM0NDY4XSwgWy03My4yOTI1MDc2OTQ0ODYxNSwgNDIuMzYwOTUyMzA0NjI2MDNdLCBbLTczLjI5MTg3OTAwNzU2NzUzLCA0Mi4zNjE0ODg5NzczODA4MV0sIFstNzMuMjkxMTgyNDA4MTY1NjcsIDQyLjM2MTk3NzM2MTAxMzg2NF0sIFstNzMuMjkwNDI0NjA1MDkwNzIsIDQyLjM2MjQxMjc1MDk3MTIyXSwgWy03My4yODk2MTI4OTcxODk0NywgNDIuMzYyNzkwOTUzMDkxNzQ2XSwgWy03My4yODg3NTUxMDMwMjMwOSwgNDIuMzYzMTA4MzI0MDQyMThdLCBbLTczLjI4Nzg1OTQ4NTUxNzU3LCA0Mi4zNjMzNjE4MDY0NDQ0NDVdLCBbLTczLjI4NjkzNDY3MjMxNDEyLCA0Mi4zNjM1NDg5NTgzNTUyOV0sIFstNzMuMjg1OTg5NTcyNTg5OCwgNDIuMzYzNjY3OTc2ODEzMTI2XSwgWy03My4yODUwMzMyOTExNTI3LCA0Mi4zNjM3MTc3MTUyMjQwOV0sIFstNzMuMjg0MDc1MDQwNjQzMDMsIDQyLjM2MzY5NzY5NDQxODg5Nl0sIFstNzMuMjgzMTI0MDUyNjkwMjMsIDQyLjM2MzYwODEwNzI3Mzg1XSwgWy03My4yODIxODk0ODg4ODU5MiwgNDIuMzYzNDQ5ODE2ODUwNzldLCBbLTczLjI4MTI4MDM1MjQzNTQ1LCA0Mi4zNjMyMjQzNDgwNzQyMDVdLCBbLTczLjI4MDQwNTQwMTM0MjUsIDQyLjM2MjkzMzg3MzAyNjExXSwgWy03My4yNzk1NzMwNjM5NjgwMywgNDIuMzYyNTgxMTkwMDAxMTE2XSwgWy03My4yNzg3OTEzNTc3Nzk0LCA0Mi4zNjIxNjk2OTY1MjQwMV0sIFstNzMuMjc4MDY3ODEyMDc2MzYsIDQyLjM2MTcwMzM1NjU5MTgyXSwgWy03My4yNzc0MDkzOTU0Mzk2OCwgNDIuMzYxMTg2NjYyNDU2MTNdLCBbLTczLjI3NjgyMjQ0ODYwMzA0LCA0Mi4zNjA2MjQ1OTEzMTY1N10sIFstNzMuMjc2MzEyNjIzMzk1MTcsIDQyLjM2MDAyMjU1NzM0MzI0XSwgWy03My4yNzU4ODQ4MjgzNDAwOCwgNDIuMzU5Mzg2MzU5NDkyMzVdLCBbLTczLjI3NTU0MzE4MTQzODAxLCA0Mi4zNTg3MjIxMjU2MTkwOTZdLCBbLTczLjI3NTI5MDk3MDU3OTkyLCA0Mi4zNTgwMzYyNTM0Mjc3ODRdLCBbLTczLjI3NTEzMDYyMTk3MzksIDQyLjM1NzMzNTM0ODgyODddLCBbLTczLjI3NTA2MzY3Njg4MzkyLCA0Mi4zNTY2MjYxNjIyOTcxNF1dXSwgInR5cGUiOiAiUG9seWdvbiJ9LCAiaWQiOiAiMCIsICJwcm9wZXJ0aWVzIjogeyJoaWdobGlnaHQiOiB7fSwgInN0eWxlIjogeyJjb2xvciI6ICJibGFjayIsICJkYXNoQXJyYXkiOiBbNSwgMTBdLCAiZmlsbE9wYWNpdHkiOiAwLCAid2VpZ2h0IjogNX19LCAidHlwZSI6ICJGZWF0dXJlIn1dLCAidHlwZSI6ICJGZWF0dXJlQ29sbGVjdGlvbiJ9CiAgICAgICAgICAgIAogICAgICAgICAgICApLmFkZFRvKG1hcF85ZGIxZjBjM2MyMzk0NDMxYmNmNmIzYzFiODU2MmU3Nik7CiAgICAgICAgZ2VvX2pzb25fYzE5OGM5ZmFmYmRiNDdhNzkwYWQ2OGMzNDlhYTI1OTMuc2V0U3R5bGUoZnVuY3Rpb24oZmVhdHVyZSkge3JldHVybiBmZWF0dXJlLnByb3BlcnRpZXMuc3R5bGU7fSk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMWFjYmFmNDcwZDUwNDYwN2E4MDQ2NjhkMmQ5Y2JjODAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0Mi4zNTU0MjYxNTQ2NzMwNiwgLTczLjI4MjMxOTYwNTM1MDVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmxhY2siLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiYmxhY2siLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF85ZGIxZjBjM2MyMzk0NDMxYmNmNmIzYzFiODU2MmU3Nik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzhhYWI2ZjYzOGU4YTRmMjg5NTFjYzcxMGU2NTY0NDBjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDIuMzU2MDY4MzUxMTQ2MDUsIC03My4yODE2NjUxNDYzNTA4Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibGFjayIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJibGFjayIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzlkYjFmMGMzYzIzOTQ0MzFiY2Y2YjNjMWI4NTYyZTc2KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZDBlNWNjZGY1MDcxNGRkYmEzZGU4ZjQyYzk1NjVmM2IgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0Mi4zMjcyODU5NTgzODY5NCwgLTczLjI2MjcxNTMzOTY2MDY0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsYWNrIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogImJsYWNrIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfOWRiMWYwYzNjMjM5NDQzMWJjZjZiM2MxYjg1NjJlNzYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xOGIyNjAyNWE0YTI0ZTk5OTI4NTYyOGFlMmFmNjg3MyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQyLjM1NzYzMjE5MTAzNDE4LCAtNzMuMjgwNzM5Nzg0MjQwNzJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmxhY2siLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiYmxhY2siLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF85ZGIxZjBjM2MyMzk0NDMxYmNmNmIzYzFiODU2MmU3Nik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2U3MTg2YTE2YmYwMDQwNGU4Zjg3M2ZhOGRhZjI0NDdkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDIuMzU4NTUzODI3NDk0NjQ2LCAtNzMuMjgwOTA4NzYzNDA4NjZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmxhY2siLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiYmxhY2siLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF85ZGIxZjBjM2MyMzk0NDMxYmNmNmIzYzFiODU2MmU3Nik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2U4NWRkMWRjMDVlODQ2ZGE4NGQwYzY3NmI0MDhiNmU4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDIuMzU2NTM4MTAxODE3NjA1LCAtNzMuMjgxMzg4ODc4ODIyMzNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmxhY2siLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiYmxhY2siLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF85ZGIxZjBjM2MyMzk0NDMxYmNmNmIzYzFiODU2MmU3Nik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzcwY2IwMDEzMzNlYTRjNmRiODhlOGEwYzU3Yzc4OTllID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDIuMzU2MTM2NzMyNzkxMywgLTczLjI4MTQ5NDgyNjA3ODRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmxhY2siLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiYmxhY2siLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF85ZGIxZjBjM2MyMzk0NDMxYmNmNmIzYzFiODU2MmU3Nik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Y3YzY5ZDIxYzVmZTRhOWVhZTFjZjcxZDA0YTEzNmFkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDIuMzMzNTE0MjA2ODQzOTUsIC03My4yNDc4MTU2Njg1ODI5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsYWNrIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogImJsYWNrIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfOWRiMWYwYzNjMjM5NDQzMWJjZjZiM2MxYjg1NjJlNzYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yYmVmMGY5ZWM1OGM0ZTA5YWUyYTMzOGJlMjNhZjBmYyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQyLjM1ODMxMjAyMzEwNzYyLCAtNzMuMjg1MDg0OTYyODQ0ODVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmxhY2siLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiYmxhY2siLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF85ZGIxZjBjM2MyMzk0NDMxYmNmNmIzYzFiODU2MmU3Nik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzYyZDY3ODk4YjljZDQwN2RiMmY3ZDZkNTMwODMzMGViID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDIuMzU4NTM3OTcxNDk3NzgsIC03My4yODQ1NzgwMjUzNDEwM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibGFjayIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJibGFjayIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzlkYjFmMGMzYzIzOTQ0MzFiY2Y2YjNjMWI4NTYyZTc2KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMTRmY2JmMzY0YmRiNDdkZjhkZjdhZjUyNzlmOWEzNzkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0Mi4zMjc5NzQwNTA1MjA4NjUsIC03My4yNjMxOTI3NzI4NjUzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsYWNrIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogImJsYWNrIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfOWRiMWYwYzNjMjM5NDQzMWJjZjZiM2MxYjg1NjJlNzYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kOGMzZDE1OTI3Yzc0ZmQ4OTM3YzhiOTA0NTBhMWY3NyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQyLjM1Njc3NzkzMDk3NTI2LCAtNzMuMjc1NzIxMzcxMTczODZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmxhY2siLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiYmxhY2siLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF85ZGIxZjBjM2MyMzk0NDMxYmNmNmIzYzFiODU2MmU3Nik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgICAgICAKCiAgICAgICAgICAgICAgICBtYXBfOWRiMWYwYzNjMjM5NDQzMWJjZjZiM2MxYjg1NjJlNzYuZml0Qm91bmRzKAogICAgICAgICAgICAgICAgICAgIFtbNDIuMzI3Mjg1OTU4Mzg2OTQsIC03My4yODUwODQ5NjI4NDQ4NV0sIFs0Mi4zNTg1NTM4Mjc0OTQ2NDYsIC03My4yNDc4MTU2Njg1ODI5XV0sCiAgICAgICAgICAgICAgICAgICAge30KICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAKPC9zY3JpcHQ+\" style=\"position:absolute;width:100%;height:100%;left:0;top:0;border:none !important;\" allowfullscreen webkitallowfullscreen mozallowfullscreen></iframe></div></div>"
],
"text/plain": [
"<folium.folium.Map at 0x1f34c0a6828>"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"[m1.add_child(folium.CircleMarker(location = [coord for coord in reversed(point['geometry']['coordinates'])],\n",
" radius = 5,\n",
" color = 'black',\n",
" weight = 1)\n",
" )\n",
" for point in points_json['features']]\n",
"\n",
"points_mp_list = [(row['geometry'].x, row['geometry'].y) for index, row in points_gdf.iterrows()]\n",
"points_mp = MultiPoint(points_mp_list)\n",
"points_mp_bounds = points_mp.bounds\n",
"m1.fit_bounds(bounds = [[points_mp_bounds[1], points_mp_bounds[0]], [points_mp_bounds[3], points_mp_bounds[2]]])\n",
"m1"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Find points within buffer area"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"scrolled": false
},
"outputs": [
{
"data": {
"text/html": [
"<div style=\"width:100%;\"><div style=\"position:relative;width:100%;height:0;padding-bottom:60%;\"><iframe src=\"data:text/html;charset=utf-8;base64,PCFET0NUWVBFIGh0bWw+CjxoZWFkPiAgICAKICAgIDxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiAvPgogICAgPHNjcmlwdD5MX1BSRUZFUl9DQU5WQVM9ZmFsc2U7IExfTk9fVE9VQ0g9ZmFsc2U7IExfRElTQUJMRV8zRD1mYWxzZTs8L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS4yLjAvZGlzdC9sZWFmbGV0LmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2FqYXguZ29vZ2xlYXBpcy5jb20vYWpheC9saWJzL2pxdWVyeS8xLjExLjEvanF1ZXJ5Lm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvanMvYm9vdHN0cmFwLm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvTGVhZmxldC5hd2Vzb21lLW1hcmtlcnMvMi4wLjIvbGVhZmxldC5hd2Vzb21lLW1hcmtlcnMuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS4yLjAvZGlzdC9sZWFmbGV0LmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL21heGNkbi5ib290c3RyYXBjZG4uY29tL2Jvb3RzdHJhcC8zLjIuMC9jc3MvYm9vdHN0cmFwLm1pbi5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvY3NzL2Jvb3RzdHJhcC10aGVtZS5taW4uY3NzIi8+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vbWF4Y2RuLmJvb3RzdHJhcGNkbi5jb20vZm9udC1hd2Vzb21lLzQuNi4zL2Nzcy9mb250LWF3ZXNvbWUubWluLmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9MZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy8yLjAuMi9sZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9yYXdnaXQuY29tL3B5dGhvbi12aXN1YWxpemF0aW9uL2ZvbGl1bS9tYXN0ZXIvZm9saXVtL3RlbXBsYXRlcy9sZWFmbGV0LmF3ZXNvbWUucm90YXRlLmNzcyIvPgogICAgPHN0eWxlPmh0bWwsIGJvZHkge3dpZHRoOiAxMDAlO2hlaWdodDogMTAwJTttYXJnaW46IDA7cGFkZGluZzogMDt9PC9zdHlsZT4KICAgIDxzdHlsZT4jbWFwIHtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtyaWdodDowO2xlZnQ6MDt9PC9zdHlsZT4KICAgIAogICAgPHN0eWxlPiNtYXBfOWRiMWYwYzNjMjM5NDQzMWJjZjZiM2MxYjg1NjJlNzYgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICB3aWR0aDogMTAwLjAlOwogICAgICAgIGhlaWdodDogMTAwLjAlOwogICAgICAgIGxlZnQ6IDAuMCU7CiAgICAgICAgdG9wOiAwLjAlOwogICAgICAgIH0KICAgIDwvc3R5bGU+CjwvaGVhZD4KPGJvZHk+ICAgIAogICAgCiAgICA8ZGl2IGNsYXNzPSJmb2xpdW0tbWFwIiBpZD0ibWFwXzlkYjFmMGMzYzIzOTQ0MzFiY2Y2YjNjMWI4NTYyZTc2IiA+PC9kaXY+CjwvYm9keT4KPHNjcmlwdD4gICAgCiAgICAKICAgIAogICAgICAgIHZhciBib3VuZHMgPSBudWxsOwogICAgCgogICAgdmFyIG1hcF85ZGIxZjBjM2MyMzk0NDMxYmNmNmIzYzFiODU2MmU3NiA9IEwubWFwKAogICAgICAgICdtYXBfOWRiMWYwYzNjMjM5NDQzMWJjZjZiM2MxYjg1NjJlNzYnLCB7CiAgICAgICAgY2VudGVyOiBbNDIuMzU2NDc1LCAtNzMuMjg0ODI4OV0sCiAgICAgICAgem9vbTogMTUsCiAgICAgICAgbWF4Qm91bmRzOiBib3VuZHMsCiAgICAgICAgbGF5ZXJzOiBbXSwKICAgICAgICB3b3JsZENvcHlKdW1wOiBmYWxzZSwKICAgICAgICBjcnM6IEwuQ1JTLkVQU0czODU3LAogICAgICAgIHpvb21Db250cm9sOiB0cnVlLAogICAgICAgIH0pOwoKICAgIAogICAgCiAgICB2YXIgdGlsZV9sYXllcl9jNTgzY2Y2ZjRhZDU0ZGEyYTk2ZmRhYzUzNjY3ZWZjMSA9IEwudGlsZUxheWVyKAogICAgICAgICdodHRwczovL2NhcnRvZGItYmFzZW1hcHMtYS5nbG9iYWwuc3NsLmZhc3RseS5uZXQvbGlnaHRfYWxsL3t6fS97eH0ve3l9LnBuZycsCiAgICAgICAgewogICAgICAgICJhdHRyaWJ1dGlvbiI6ICImY29weTsgPGEgaHJlZj1cImh0dHA6Ly93d3cub3BlbnN0cmVldG1hcC5vcmcvY29weXJpZ2h0XCI+T3BlblN0cmVldE1hcDwvYT4gJmNvcHk7IDxhIGhyZWY9XCJodHRwOi8vY2FydG9kYi5jb20vYXR0cmlidXRpb25zXCI+Q2FydG9EQjwvYT4iLAogICAgICAgICJkZXRlY3RSZXRpbmEiOiBmYWxzZSwKICAgICAgICAibWF4TmF0aXZlWm9vbSI6IDE4LAogICAgICAgICJtYXhab29tIjogMTgsCiAgICAgICAgIm1pblpvb20iOiAwLAogICAgICAgICJub1dyYXAiOiBmYWxzZSwKICAgICAgICAic3ViZG9tYWlucyI6ICJhYmMiCn0pLmFkZFRvKG1hcF85ZGIxZjBjM2MyMzk0NDMxYmNmNmIzYzFiODU2MmU3Nik7CiAgICAKICAgICAgICAKICAgICAgICB2YXIgZ2VvX2pzb25fZDE2NmJkODMzMGZkNGM4ZWExNjQ5OGYzOGMzNDc2YzcgPSBMLmdlb0pzb24oCiAgICAgICAgICAgIHsiZmVhdHVyZXMiOiBbeyJnZW9tZXRyeSI6IHsiY29vcmRpbmF0ZXMiOiBbLTczLjI4NDgyODksIDQyLjM1NjQ3NV0sICJ0eXBlIjogIlBvaW50In0sICJpZCI6ICIwIiwgInByb3BlcnRpZXMiOiB7ImFkZHJlc3MiOiAiTGVub3gsIEJlcmtzaGlyZSwgTWFzc2FjaHVzZXR0cywgMDEyNDIsIFVTQSIsICJoaWdobGlnaHQiOiB7fSwgInN0eWxlIjoge319LCAidHlwZSI6ICJGZWF0dXJlIn1dLCAidHlwZSI6ICJGZWF0dXJlQ29sbGVjdGlvbiJ9CiAgICAgICAgICAgIAogICAgICAgICAgICApLmFkZFRvKG1hcF85ZGIxZjBjM2MyMzk0NDMxYmNmNmIzYzFiODU2MmU3Nik7CiAgICAgICAgZ2VvX2pzb25fZDE2NmJkODMzMGZkNGM4ZWExNjQ5OGYzOGMzNDc2Yzcuc2V0U3R5bGUoZnVuY3Rpb24oZmVhdHVyZSkge3JldHVybiBmZWF0dXJlLnByb3BlcnRpZXMuc3R5bGU7fSk7CiAgICAgICAgCiAgICAKICAgICAgICAKICAgICAgICB2YXIgZ2VvX2pzb25fYzE5OGM5ZmFmYmRiNDdhNzkwYWQ2OGMzNDlhYTI1OTMgPSBMLmdlb0pzb24oCiAgICAgICAgICAgIHsiYmJveCI6IFstNzMuMjk0NTk0MDc2MzIxNTcsIDQyLjM0OTIzMjI3Mjc0NTg2LCAtNzMuMjc1MDYzNjc2ODgzOTIsIDQyLjM2MzcxNzcxNTIyNDA5XSwgImZlYXR1cmVzIjogW3siYmJveCI6IFstNzMuMjk0NTk0MDc2MzIxNTcsIDQyLjM0OTIzMjI3Mjc0NTg2LCAtNzMuMjc1MDYzNjc2ODgzOTIsIDQyLjM2MzcxNzcxNTIyNDA5XSwgImdlb21ldHJ5IjogeyJjb29yZGluYXRlcyI6IFtbWy03My4yNzUwNjM2NzY4ODM5MiwgNDIuMzU2NjI2MTYyMjk3MTRdLCBbLTczLjI3NTA5MDc3NjkwMTM0LCA0Mi4zNTU5MTU1MjM4NDgwNV0sIFstNzMuMjc1MjExNjU3ODg2MDMsIDQyLjM1NTIxMDI3NzI1MzAzNl0sIFstNzMuMjc1NDI1MTUyNjMxNDYsIDQyLjM1NDUxNzIxNDEzMzYxNV0sIFstNzMuMjc1NzI5MjAyMjIyODksIDQyLjM1Mzg0MzAwODU2NTI5XSwgWy03My4yNzYxMjA4NzU5NzUxMSwgNDIuMzUzMTk0MTUyODIxODJdLCBbLTczLjI3NjU5NjM5OTc1MzQ2LCA0Mi4zNTI1NzY4OTQ4Nzc3NF0sIFstNzMuMjc3MTUxMTkyNDAxNDYsIDQyLjM1MTk5NzE3ODI3MDA5Nl0sIFstNzMuMjc3Nzc5OTA5OTIxNDgsIDQyLjM1MTQ2MDU4NDg5NzEwNF0sIFstNzMuMjc4NDc2NDk2OTgwMjYsIDQyLjM1MDk3MjI4MTMwMzM0XSwgWy03My4yNzkyMzQyNDUyNDE5OCwgNDIuMzUwNTM2OTY4OTY2ODddLCBbLTczLjI4MDA0NTg1Nzk2NjMxLCA0Mi4zNTAxNTg4MzkwNjYwMDVdLCBbLTczLjI4MDkwMzUyMDI0OTY3LCA0Mi4zNDk4NDE1MzIxNTg1NF0sIFstNzMuMjgxNzk4OTc0MjM0MjYsIDQyLjM0OTU4ODEwMzE2MTQ2Nl0sIFstNzMuMjgyNzIzNTk4NTYyODgsIDQyLjM0OTQwMDk5MTk2NTY5NV0sIFstNzMuMjgzNjY4NDkxMzE2ODUsIDQyLjM0OTI4MTk5OTk2ODEzXSwgWy03My4yODQ2MjQ1NTU2NDE4LCA0Mi4zNDkyMzIyNzI3NDU4Nl0sIFstNzMuMjg1NTgyNTg3MjQxMDEsIDQyLjM0OTI1MjI4OTAzODA5XSwgWy03My4yODY1MzMzNjI4OTc3MSwgNDIuMzQ5MzQxODU2MTQyXSwgWy03My4yODc0Njc3MjkxNzg2NCwgNDIuMzQ5NTAwMTExNzY1OTJdLCBbLTczLjI4ODM3NjY5MDQ2OTE5LCA0Mi4zNDk3MjU1MzIzMjI2OTRdLCBbLTczLjI4OTI1MTQ5NTQ5Njk0LCA0Mi4zNTAwMTU5NDc1ODMyOTRdLCBbLTczLjI5MDA4MzcyMTUxNDIxLCA0Mi4zNTAzNjg1NjE1NTA4Ml0sIFstNzMuMjkwODY1MzU1MzMyOTcsIDQyLjM1MDc3OTk3OTM1NDIxNV0sIFstNzMuMjkxNTg4ODcwNDM0NjEsIDQyLjM1MTI0NjIzOTkwNDY0XSwgWy03My4yOTIyNDcyOTk0MTQzOCwgNDIuMzUxNzYyODU0MDAxMDNdLCBbLTczLjI5MjgzNDMwMTA2NDI1LCA0Mi4zNTIzMjQ4NDc1MTk2Nl0sIFstNzMuMjkzMzQ0MjIxNDQ5MDUsIDQyLjM1MjkyNjgwOTI3MzM1XSwgWy03My4yOTM3NzIxNDgzODcxNiwgNDIuMzUzNTYyOTQzMDgxMjldLCBbLTczLjI5NDExMzk1ODgxMDE3LCA0Mi4zNTQyMjcxMjM1NDkzNF0sIFstNzMuMjk0MzY2MzU4NTQzMDcsIDQyLjM1NDkxMjk1NTAyNTZdLCBbLTczLjI5NDUyNjkxNDExOTQ2LCA0Mi4zNTU2MTM4MzMxNjQ0MDVdLCBbLTczLjI5NDU5NDA3NjMyMTU3LCA0Mi4zNTYzMjMwMDg1MDczMl0sIFstNzMuMjk0NTY3MTk1MjE0NiwgNDIuMzU3MDMzNjUxNDY5MzVdLCBbLTczLjI5NDQ0NjUyNjUyNjAyLCA0Mi4zNTc3Mzg5MTgxMDU0OF0sIFstNzMuMjk0MjMzMjI5MzAzOTcsIDQyLjM1ODQzMjAxNjAyNDAyNV0sIFstNzMuMjkzOTI5MzU0ODcyNDYsIDQyLjM1OTEwNjI2OTgxMjE4XSwgWy03My4yOTM1Mzc4MjcxODU0LCA0Mi4zNTk3NTUxODUzNDMxM10sIFstNzMuMjkzMDYyNDE0NzY0MjYsIDQyLjM2MDM3MjUxMjM0NDY4XSwgWy03My4yOTI1MDc2OTQ0ODYxNSwgNDIuMzYwOTUyMzA0NjI2MDNdLCBbLTczLjI5MTg3OTAwNzU2NzUzLCA0Mi4zNjE0ODg5NzczODA4MV0sIFstNzMuMjkxMTgyNDA4MTY1NjcsIDQyLjM2MTk3NzM2MTAxMzg2NF0sIFstNzMuMjkwNDI0NjA1MDkwNzIsIDQyLjM2MjQxMjc1MDk3MTIyXSwgWy03My4yODk2MTI4OTcxODk0NywgNDIuMzYyNzkwOTUzMDkxNzQ2XSwgWy03My4yODg3NTUxMDMwMjMwOSwgNDIuMzYzMTA4MzI0MDQyMThdLCBbLTczLjI4Nzg1OTQ4NTUxNzU3LCA0Mi4zNjMzNjE4MDY0NDQ0NDVdLCBbLTczLjI4NjkzNDY3MjMxNDEyLCA0Mi4zNjM1NDg5NTgzNTUyOV0sIFstNzMuMjg1OTg5NTcyNTg5OCwgNDIuMzYzNjY3OTc2ODEzMTI2XSwgWy03My4yODUwMzMyOTExNTI3LCA0Mi4zNjM3MTc3MTUyMjQwOV0sIFstNzMuMjg0MDc1MDQwNjQzMDMsIDQyLjM2MzY5NzY5NDQxODg5Nl0sIFstNzMuMjgzMTI0MDUyNjkwMjMsIDQyLjM2MzYwODEwNzI3Mzg1XSwgWy03My4yODIxODk0ODg4ODU5MiwgNDIuMzYzNDQ5ODE2ODUwNzldLCBbLTczLjI4MTI4MDM1MjQzNTQ1LCA0Mi4zNjMyMjQzNDgwNzQyMDVdLCBbLTczLjI4MDQwNTQwMTM0MjUsIDQyLjM2MjkzMzg3MzAyNjExXSwgWy03My4yNzk1NzMwNjM5NjgwMywgNDIuMzYyNTgxMTkwMDAxMTE2XSwgWy03My4yNzg3OTEzNTc3Nzk0LCA0Mi4zNjIxNjk2OTY1MjQwMV0sIFstNzMuMjc4MDY3ODEyMDc2MzYsIDQyLjM2MTcwMzM1NjU5MTgyXSwgWy03My4yNzc0MDkzOTU0Mzk2OCwgNDIuMzYxMTg2NjYyNDU2MTNdLCBbLTczLjI3NjgyMjQ0ODYwMzA0LCA0Mi4zNjA2MjQ1OTEzMTY1N10sIFstNzMuMjc2MzEyNjIzMzk1MTcsIDQyLjM2MDAyMjU1NzM0MzI0XSwgWy03My4yNzU4ODQ4MjgzNDAwOCwgNDIuMzU5Mzg2MzU5NDkyMzVdLCBbLTczLjI3NTU0MzE4MTQzODAxLCA0Mi4zNTg3MjIxMjU2MTkwOTZdLCBbLTczLjI3NTI5MDk3MDU3OTkyLCA0Mi4zNTgwMzYyNTM0Mjc3ODRdLCBbLTczLjI3NTEzMDYyMTk3MzksIDQyLjM1NzMzNTM0ODgyODddLCBbLTczLjI3NTA2MzY3Njg4MzkyLCA0Mi4zNTY2MjYxNjIyOTcxNF1dXSwgInR5cGUiOiAiUG9seWdvbiJ9LCAiaWQiOiAiMCIsICJwcm9wZXJ0aWVzIjogeyJoaWdobGlnaHQiOiB7fSwgInN0eWxlIjogeyJjb2xvciI6ICJibGFjayIsICJkYXNoQXJyYXkiOiBbNSwgMTBdLCAiZmlsbE9wYWNpdHkiOiAwLCAid2VpZ2h0IjogNX19LCAidHlwZSI6ICJGZWF0dXJlIn1dLCAidHlwZSI6ICJGZWF0dXJlQ29sbGVjdGlvbiJ9CiAgICAgICAgICAgIAogICAgICAgICAgICApLmFkZFRvKG1hcF85ZGIxZjBjM2MyMzk0NDMxYmNmNmIzYzFiODU2MmU3Nik7CiAgICAgICAgZ2VvX2pzb25fYzE5OGM5ZmFmYmRiNDdhNzkwYWQ2OGMzNDlhYTI1OTMuc2V0U3R5bGUoZnVuY3Rpb24oZmVhdHVyZSkge3JldHVybiBmZWF0dXJlLnByb3BlcnRpZXMuc3R5bGU7fSk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMWFjYmFmNDcwZDUwNDYwN2E4MDQ2NjhkMmQ5Y2JjODAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0Mi4zNTU0MjYxNTQ2NzMwNiwgLTczLjI4MjMxOTYwNTM1MDVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmxhY2siLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiYmxhY2siLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF85ZGIxZjBjM2MyMzk0NDMxYmNmNmIzYzFiODU2MmU3Nik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzhhYWI2ZjYzOGU4YTRmMjg5NTFjYzcxMGU2NTY0NDBjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDIuMzU2MDY4MzUxMTQ2MDUsIC03My4yODE2NjUxNDYzNTA4Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibGFjayIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJibGFjayIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzlkYjFmMGMzYzIzOTQ0MzFiY2Y2YjNjMWI4NTYyZTc2KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZDBlNWNjZGY1MDcxNGRkYmEzZGU4ZjQyYzk1NjVmM2IgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0Mi4zMjcyODU5NTgzODY5NCwgLTczLjI2MjcxNTMzOTY2MDY0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsYWNrIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogImJsYWNrIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfOWRiMWYwYzNjMjM5NDQzMWJjZjZiM2MxYjg1NjJlNzYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xOGIyNjAyNWE0YTI0ZTk5OTI4NTYyOGFlMmFmNjg3MyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQyLjM1NzYzMjE5MTAzNDE4LCAtNzMuMjgwNzM5Nzg0MjQwNzJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmxhY2siLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiYmxhY2siLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF85ZGIxZjBjM2MyMzk0NDMxYmNmNmIzYzFiODU2MmU3Nik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2U3MTg2YTE2YmYwMDQwNGU4Zjg3M2ZhOGRhZjI0NDdkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDIuMzU4NTUzODI3NDk0NjQ2LCAtNzMuMjgwOTA4NzYzNDA4NjZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmxhY2siLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiYmxhY2siLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF85ZGIxZjBjM2MyMzk0NDMxYmNmNmIzYzFiODU2MmU3Nik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2U4NWRkMWRjMDVlODQ2ZGE4NGQwYzY3NmI0MDhiNmU4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDIuMzU2NTM4MTAxODE3NjA1LCAtNzMuMjgxMzg4ODc4ODIyMzNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmxhY2siLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiYmxhY2siLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF85ZGIxZjBjM2MyMzk0NDMxYmNmNmIzYzFiODU2MmU3Nik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzcwY2IwMDEzMzNlYTRjNmRiODhlOGEwYzU3Yzc4OTllID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDIuMzU2MTM2NzMyNzkxMywgLTczLjI4MTQ5NDgyNjA3ODRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmxhY2siLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiYmxhY2siLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF85ZGIxZjBjM2MyMzk0NDMxYmNmNmIzYzFiODU2MmU3Nik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Y3YzY5ZDIxYzVmZTRhOWVhZTFjZjcxZDA0YTEzNmFkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDIuMzMzNTE0MjA2ODQzOTUsIC03My4yNDc4MTU2Njg1ODI5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsYWNrIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogImJsYWNrIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfOWRiMWYwYzNjMjM5NDQzMWJjZjZiM2MxYjg1NjJlNzYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yYmVmMGY5ZWM1OGM0ZTA5YWUyYTMzOGJlMjNhZjBmYyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQyLjM1ODMxMjAyMzEwNzYyLCAtNzMuMjg1MDg0OTYyODQ0ODVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmxhY2siLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiYmxhY2siLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF85ZGIxZjBjM2MyMzk0NDMxYmNmNmIzYzFiODU2MmU3Nik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzYyZDY3ODk4YjljZDQwN2RiMmY3ZDZkNTMwODMzMGViID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDIuMzU4NTM3OTcxNDk3NzgsIC03My4yODQ1NzgwMjUzNDEwM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibGFjayIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJibGFjayIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzlkYjFmMGMzYzIzOTQ0MzFiY2Y2YjNjMWI4NTYyZTc2KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMTRmY2JmMzY0YmRiNDdkZjhkZjdhZjUyNzlmOWEzNzkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0Mi4zMjc5NzQwNTA1MjA4NjUsIC03My4yNjMxOTI3NzI4NjUzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsYWNrIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogImJsYWNrIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfOWRiMWYwYzNjMjM5NDQzMWJjZjZiM2MxYjg1NjJlNzYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kOGMzZDE1OTI3Yzc0ZmQ4OTM3YzhiOTA0NTBhMWY3NyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQyLjM1Njc3NzkzMDk3NTI2LCAtNzMuMjc1NzIxMzcxMTczODZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmxhY2siLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiYmxhY2siLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF85ZGIxZjBjM2MyMzk0NDMxYmNmNmIzYzFiODU2MmU3Nik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgICAgICAKCiAgICAgICAgICAgICAgICBtYXBfOWRiMWYwYzNjMjM5NDQzMWJjZjZiM2MxYjg1NjJlNzYuZml0Qm91bmRzKAogICAgICAgICAgICAgICAgICAgIFtbNDIuMzI3Mjg1OTU4Mzg2OTQsIC03My4yODUwODQ5NjI4NDQ4NV0sIFs0Mi4zNTg1NTM4Mjc0OTQ2NDYsIC03My4yNDc4MTU2Njg1ODI5XV0sCiAgICAgICAgICAgICAgICAgICAge30KICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kNjMxMjdjNTIxMmQ0MWYzYmM2N2Y2OTEyZWU0OGNhMCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQyLjM1NTQyNjE1NDY3MzA2LCAtNzMuMjgyMzE5NjA1MzUwNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmxhY2siLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAyLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAwCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfOWRiMWYwYzNjMjM5NDQzMWJjZjZiM2MxYjg1NjJlNzYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84YjJhYzAzM2E4MWE0YTBjYmY1N2VlNmMwNTViMzUyNSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQyLjM1NjA2ODM1MTE0NjA1LCAtNzMuMjgxNjY1MTQ2MzUwODZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsYWNrIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMiwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMAp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzlkYjFmMGMzYzIzOTQ0MzFiY2Y2YjNjMWI4NTYyZTc2KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNDliYjA3NGRiZDM4NGE5Mjk5NGUzZTNkZGE5ODY3OTUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0Mi4zNTc2MzIxOTEwMzQxOCwgLTczLjI4MDczOTc4NDI0MDcyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibGFjayIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDIsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDAKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF85ZGIxZjBjM2MyMzk0NDMxYmNmNmIzYzFiODU2MmU3Nik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzEyMDc5YTBhNDhkZTRkOTFhMDM1N2UyMTk0NGY1YWNiID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDIuMzU4NTUzODI3NDk0NjQ2LCAtNzMuMjgwOTA4NzYzNDA4NjZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsYWNrIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMiwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMAp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzlkYjFmMGMzYzIzOTQ0MzFiY2Y2YjNjMWI4NTYyZTc2KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMTllOTYyMGFkMGJlNGY1YmFhMWI0NWYyYTU1MzU4Y2MgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0Mi4zNTY1MzgxMDE4MTc2MDUsIC03My4yODEzODg4Nzg4MjIzM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmxhY2siLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAyLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAwCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfOWRiMWYwYzNjMjM5NDQzMWJjZjZiM2MxYjg1NjJlNzYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80NmQxM2U2OTIzOGM0NDRhOTJmM2QxODg2ODRiMWE0NCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQyLjM1NjEzNjczMjc5MTMsIC03My4yODE0OTQ4MjYwNzg0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibGFjayIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDIsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDAKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF85ZGIxZjBjM2MyMzk0NDMxYmNmNmIzYzFiODU2MmU3Nik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2QyOGE4OWFkZTZjMjQ3NTY4MjNmOTEzYTk1YzA3YTM3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDIuMzU4MzEyMDIzMTA3NjIsIC03My4yODUwODQ5NjI4NDQ4NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmxhY2siLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAyLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAwCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfOWRiMWYwYzNjMjM5NDQzMWJjZjZiM2MxYjg1NjJlNzYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80Y2VkNDkwMDY5NzQ0ZjZjYWJhMDFjMDk2ZTg3MDJhMyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQyLjM1ODUzNzk3MTQ5Nzc4LCAtNzMuMjg0NTc4MDI1MzQxMDNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsYWNrIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMiwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMAp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzlkYjFmMGMzYzIzOTQ0MzFiY2Y2YjNjMWI4NTYyZTc2KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZmM2MjE4ZWNiYzNhNGU4OGJlMWMxZjU1NzExZTM4ZGMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0Mi4zNTY3Nzc5MzA5NzUyNiwgLTczLjI3NTcyMTM3MTE3Mzg2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibGFjayIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDIsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDAKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF85ZGIxZjBjM2MyMzk0NDMxYmNmNmIzYzFiODU2MmU3Nik7CiAgICAgICAgICAgIAo8L3NjcmlwdD4=\" style=\"position:absolute;width:100%;height:100%;left:0;top:0;border:none !important;\" allowfullscreen webkitallowfullscreen mozallowfullscreen></iframe></div></div>"
],
"text/plain": [
"<folium.folium.Map at 0x1f34c0a6828>"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Iterate through each row in points_gdf to test if it is within center_buff_gdf\n",
"# If the point is in center_buff_gdf, return True, otherwise return False\n",
"# These will be collected into the list, points_in_buffer_results\n",
"points_in_buffer_results = [gpd.GeoSeries(row['geometry']).within(center_buff_gdf) for index, row in points_gdf.iterrows()]\n",
"\n",
"# Filter points_gdf based on True values in points_in_buffer_results\n",
"search_points_gdf = points_gdf[points_in_buffer_results]\n",
"# Convert search_points_gdf to GeoJSON\n",
"search_points_json = gdf_to_geojson(search_points_gdf)\n",
"\n",
"# Add each point from search_points_json to the map\n",
"[m1.add_child(folium.CircleMarker(location = [coord for coord in reversed(point['geometry']['coordinates'])],\n",
" radius = 2,\n",
" weight = 0,\n",
" fill_color = 'black',\n",
" fill_opacity = 1)\n",
" )\n",
" for point in search_points_json['features']]\n",
"\n",
"m1"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>parkid</th>\n",
" <th>ap_id</th>\n",
" <th>name</th>\n",
" <th>geometry</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>1</td>\n",
" <td>101001</td>\n",
" <td>Community Center</td>\n",
" <td>POINT (-73.28231960535049 42.35542615467306)</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>2</td>\n",
" <td>102001</td>\n",
" <td>Basketball Court</td>\n",
" <td>POINT (-73.28166514635086 42.35606835114605)</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>4</td>\n",
" <td>104001</td>\n",
" <td>Orebed Park</td>\n",
" <td>POINT (-73.28073978424072 42.35763219103418)</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>4</td>\n",
" <td>104002</td>\n",
" <td>Orebed Park</td>\n",
" <td>POINT (-73.28090876340866 42.35855382749465)</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>5</td>\n",
" <td>105001</td>\n",
" <td>Tennis Courts</td>\n",
" <td>POINT (-73.28138887882233 42.35653810181761)</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>5</td>\n",
" <td>105002</td>\n",
" <td>Tennis Courts</td>\n",
" <td>POINT (-73.2814948260784 42.3561367327913)</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>7</td>\n",
" <td>107001</td>\n",
" <td>Lilac Park</td>\n",
" <td>POINT (-73.28508496284485 42.35831202310762)</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9</th>\n",
" <td>7</td>\n",
" <td>107002</td>\n",
" <td>Lilac Park</td>\n",
" <td>POINT (-73.28457802534103 42.35853797149778)</td>\n",
" </tr>\n",
" <tr>\n",
" <th>11</th>\n",
" <td>8</td>\n",
" <td>108001</td>\n",
" <td>Veterans Memorial Park</td>\n",
" <td>POINT (-73.27572137117386 42.35677793097526)</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" parkid ap_id name \\\n",
"0 1 101001 Community Center \n",
"1 2 102001 Basketball Court \n",
"3 4 104001 Orebed Park \n",
"4 4 104002 Orebed Park \n",
"5 5 105001 Tennis Courts \n",
"6 5 105002 Tennis Courts \n",
"8 7 107001 Lilac Park \n",
"9 7 107002 Lilac Park \n",
"11 8 108001 Veterans Memorial Park \n",
"\n",
" geometry \n",
"0 POINT (-73.28231960535049 42.35542615467306) \n",
"1 POINT (-73.28166514635086 42.35606835114605) \n",
"3 POINT (-73.28073978424072 42.35763219103418) \n",
"4 POINT (-73.28090876340866 42.35855382749465) \n",
"5 POINT (-73.28138887882233 42.35653810181761) \n",
"6 POINT (-73.2814948260784 42.3561367327913) \n",
"8 POINT (-73.28508496284485 42.35831202310762) \n",
"9 POINT (-73.28457802534103 42.35853797149778) \n",
"11 POINT (-73.27572137117386 42.35677793097526) "
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"search_points_gdf"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"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.6.6"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment