Created
October 14, 2024 21:14
-
-
Save jtrive84/fb3f60791239930caea0ed2f51ae56d4 to your computer and use it in GitHub Desktop.
Distance to coastline notebook
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"cells": [ | |
{ | |
"cell_type": "raw", | |
"metadata": { | |
"vscode": { | |
"languageId": "raw" | |
} | |
}, | |
"source": [ | |
"---\n", | |
"title: Determining Distance-to-Coastline for Policy Locations Using GeoPandas\n", | |
"date: 2024-10-14\n", | |
"description: Determining distance-to-doastline for policy locations using GeoPandas\n", | |
"categories: [Python, Geospatial]\n", | |
"---" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"vscode": { | |
"languageId": "raw" | |
} | |
}, | |
"source": [ | |
"\n", | |
"Knowing the distance to coastline for a potential insured is crucial for insurance rating applications because it helps insurers assess the risk of natural hazards like hurricanes, storm surges, and flooding, which are much more prevalent in coastal areas. This information allows insurers to make informed decisions about pricing, underwriting and reinsurance. Properties closer to the coast are generally at higher risk, leading to higher premiums for these properties. Insurance rating plans may use distance-to-coastline directly as an explanatory variable, with factors inversely proportional to distance to coastline. \n", | |
"\n", | |
"This article walks through how GeoPandas can be used to calculate distance to coastline for a collection of simulated latitude-longitude pairs in the Florida region, and how these exposure locations can be assigned to different risk levels based on the distance calculation. \n", | |
"\n", | |
"<br>\n", | |
"\n", | |
"\n", | |
"### Coastal Shapefiles\n", | |
"\n", | |
"The United States Census Bureau provides shapefiles for state, county and ZCTA boundaries as well as roads, rails an coastlines (see full list [here](https://www2.census.gov/geo/tiger/TIGER2024/2024_TL_Shapefiles_File_Name_Definitions.pdf)). Shapefiles are a widely-used geospatial vector data format that store the geometric location and attribute information of geographic features, which can be represented as points, lines, or polygons. \n", | |
"\n", | |
"\n", | |
"We being by downloading the COASTLINE zip archive available on the Census Bureau's [FTP site](https://www2.census.gov/geo/tiger/TIGER2024/COASTLINE/). The COASTLINE shapefile is loaded into GeoPandas (the STATE shapefile is also loaded for later use). We limit our analysis to the continential United States and filter out the Great Lakes. Inspecting the first few records:\n", | |
"\n" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 1, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stderr", | |
"output_type": "stream", | |
"text": [ | |
"Cannot find header.dxf (GDAL_DATA is not defined)\n" | |
] | |
}, | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"coast.shape : (2916, 3)\n", | |
"states.shape: (49, 2)\n" | |
] | |
}, | |
{ | |
"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>NAME</th>\n", | |
" <th>MTFCC</th>\n", | |
" <th>geometry</th>\n", | |
" </tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr>\n", | |
" <th>0</th>\n", | |
" <td>Atlantic</td>\n", | |
" <td>L4150</td>\n", | |
" <td>LINESTRING (-80.88368 32.03912, -80.88365 32.0...</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>1</th>\n", | |
" <td>Atlantic</td>\n", | |
" <td>L4150</td>\n", | |
" <td>LINESTRING (-70.66800 41.51199, -70.65663 41.5...</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>2</th>\n", | |
" <td>Atlantic</td>\n", | |
" <td>L4150</td>\n", | |
" <td>LINESTRING (-76.58108 38.09572, -76.58184 38.0...</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>3</th>\n", | |
" <td>Atlantic</td>\n", | |
" <td>L4150</td>\n", | |
" <td>LINESTRING (-73.75518 40.58565, -73.75517 40.5...</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>4</th>\n", | |
" <td>Atlantic</td>\n", | |
" <td>L4150</td>\n", | |
" <td>LINESTRING (-76.15615 38.63324, -76.15070 38.6...</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>5</th>\n", | |
" <td>Atlantic</td>\n", | |
" <td>L4150</td>\n", | |
" <td>LINESTRING (-76.53289 39.20776, -76.53298 39.2...</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>6</th>\n", | |
" <td>Atlantic</td>\n", | |
" <td>L4150</td>\n", | |
" <td>LINESTRING (-73.93653 40.56644, -73.93594 40.5...</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>7</th>\n", | |
" <td>Atlantic</td>\n", | |
" <td>L4150</td>\n", | |
" <td>LINESTRING (-81.10208 29.42706, -81.10215 29.4...</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>8</th>\n", | |
" <td>Atlantic</td>\n", | |
" <td>L4150</td>\n", | |
" <td>LINESTRING (-71.89236 41.32922, -71.89293 41.3...</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>9</th>\n", | |
" <td>Atlantic</td>\n", | |
" <td>L4150</td>\n", | |
" <td>LINESTRING (-75.31239 38.94595, -75.31239 38.9...</td>\n", | |
" </tr>\n", | |
" </tbody>\n", | |
"</table>\n", | |
"</div>" | |
], | |
"text/plain": [ | |
" NAME MTFCC geometry\n", | |
"0 Atlantic L4150 LINESTRING (-80.88368 32.03912, -80.88365 32.0...\n", | |
"1 Atlantic L4150 LINESTRING (-70.66800 41.51199, -70.65663 41.5...\n", | |
"2 Atlantic L4150 LINESTRING (-76.58108 38.09572, -76.58184 38.0...\n", | |
"3 Atlantic L4150 LINESTRING (-73.75518 40.58565, -73.75517 40.5...\n", | |
"4 Atlantic L4150 LINESTRING (-76.15615 38.63324, -76.15070 38.6...\n", | |
"5 Atlantic L4150 LINESTRING (-76.53289 39.20776, -76.53298 39.2...\n", | |
"6 Atlantic L4150 LINESTRING (-73.93653 40.56644, -73.93594 40.5...\n", | |
"7 Atlantic L4150 LINESTRING (-81.10208 29.42706, -81.10215 29.4...\n", | |
"8 Atlantic L4150 LINESTRING (-71.89236 41.32922, -71.89293 41.3...\n", | |
"9 Atlantic L4150 LINESTRING (-75.31239 38.94595, -75.31239 38.9..." | |
] | |
}, | |
"execution_count": 1, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"\n", | |
"import numpy as np\n", | |
"import pandas as pd\n", | |
"import geopandas as gpd\n", | |
"\n", | |
"np.set_printoptions(suppress=True, precision=5)\n", | |
"pd.options.mode.chained_assignment = None\n", | |
"pd.set_option('display.max_columns', None)\n", | |
"pd.set_option('display.width', None)\n", | |
"\n", | |
"\n", | |
"coastline_shp = \"tl_2024_us_coastline.zip\"\n", | |
"us_shp = \"tl_2024_us_state.zip\"\n", | |
"\n", | |
"\n", | |
"# Bounding box of lower 48 states. Remove Great Lakes.\n", | |
"xmin, ymin, xmax, ymax = -125, 24.6, -65, 50\n", | |
"coast = gpd.read_file(coastline_shp)\n", | |
"coast = coast.cx[xmin:xmax, ymin:ymax]\n", | |
"coast = coast[coast.NAME!=\"Great Lakes\"].reset_index(drop=True)\n", | |
"\n", | |
"\n", | |
"states = gpd.read_file(us_shp)[[\"NAME\", \"geometry\"]] # .to_crs(\"EPSG:4326\")\n", | |
"states = states.cx[xmin:xmax, ymin:ymax].reset_index(drop=True)\n", | |
"\n", | |
"# Create categorical DataFrame with distance thresholds in miles. \n", | |
"\n", | |
"# groups = [\n", | |
"# \"00: 0 - 500 feet\", \"01: 500 - 1000 feet\", \"02: 1000 - 1500 feet\", \"03: 1500 - 2000 feet\",\n", | |
"# \"04: 2000 - 2500 feet\", \"05: 2500 feet - 1 miles\", \"06: 1 - 2 miles\", \"07: 2 - 3 miles\",\n", | |
"# \"08: 3 - 4 miles\", \"09: 4 - 5 miles\", \"10: 5 - 10 miles\", \"11: 10 - 15 miles\",\n", | |
"# \"12: 15 - 20 miles\", \"13: 20 - 25 miles\", \"14: 25 - 50 miles\", \"15: > 50 miles\",\n", | |
"# ]\n", | |
"\n", | |
"# distance_in_miles = [\n", | |
"# 0, 500 * 0.000189394, 1000 * 0.000189394, 1500 * 0.000189394, 2000 * 0.000189394,\n", | |
"# 2500 * 0.000189394, 1, 2, 3, 4, 5, 10, 15, 20, 25, 50,\n", | |
"# ]\n", | |
"\n", | |
"print(f\"coast.shape : {coast.shape}\")\n", | |
"print(f\"states.shape: {states.shape}\")\n", | |
"\n", | |
"coast.head(10)\n" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"\n", | |
"<br>\n", | |
"\n", | |
"The coastline shapfile is comprised of ~3,000 LINESTRING objects. Let's get a count of geometries by NAME:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 2, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"NAME\n", | |
"Atlantic 941\n", | |
"Gulf 647\n", | |
"Pacific 1328\n", | |
"Name: count, dtype: int64" | |
] | |
}, | |
"execution_count": 2, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"\n", | |
"coast[\"NAME\"].value_counts().sort_index()\n" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"\n", | |
"<br>" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"\n", | |
"<br> \n", | |
"\n", | |
"We can visualize the coastline by calling the `coast` GeoDataFrame's `plot` method:\n" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 3, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAxUAAAG8CAYAAACokYgFAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8g+/7EAAAACXBIWXMAAA9hAAAPYQGoP6dpAABKGUlEQVR4nO3deZzVc/vH8fesrVPTPq1GixalUknaC5VUkogsyc1dlhAhEjduhAjdJRJS3O6USLRrU9GiVGjftUzrtDfTnN8f1+90ZsyUqXPOfOd8z+v5ePT4Luec7/c603au8/l8rivC4/F4BAAAAAAXKNLpAAAAAACENpIKAAAAAH4hqQAAAADgF5IKAAAAAH4hqQAAAADgF5IKAAAAAH4hqQAAAADgF5IKAAAAAH4hqQAAAADgF5IKAEDISkxM1MSJEyVJY8eO1VVXXeVsQAAQpkgqAOACtWjRQkOGDHE6jGwbMWKEIiIiMsU8cuRIXXLJJYqLi1O1atX06aefnvM6x48f14ABA1SlShUVKFBA5cqV00033aSlS5cGMfq//3l3795dCxYsCGoMAICsRTsdAAAgMFJTUxUdnfU/6zt37tRrr72mmjVrZjj/yy+/6P7779fUqVPVokULzZo1S9ddd53q1aunGjVqZLpOSkqKrr32Wnk8Hn3xxReqVauWTp06pa+//lpfffWV6tWrF5T3BgDI3RipAIAgWLJkiRo3bqz4+HjVqFFDn3/+uST74B8XF6c//vhDkjRp0iRFRERoypQpkqSVK1cqPj5eaWlpkqRly5apZcuWKlq0qCpXrqwPPvjgzD2ef/55XX/99erdu7eKFi2qJ5988qzxPPDAA3r22WdVrFixDOc3bdqkxMREtWzZUhEREWrdurUqVKig3377LcvrfPbZZ/r999/17bff6vLLL1dMTIwKFCig2267TS+99JIkSzz69++vChUqqESJErrllluUlJR05hpPPPGELrroIsXFxalGjRoaN27cmcf279+vzp07q2jRooqPj1e9evW0ZcsWPfbYY5o3b56efPJJFSxYUO3atcsU28cff6w6deqcOU5MTNRrr72mK6+8UnFxcWrevLm2bdt25vE9e/aoe/fuKlOmjMqUKaNHHnlEJ0+ePOvPEABwdiQVABBgBw8eVNu2bdWtWzclJSVp+PDhuvfee/Xjjz8qOjpaTZs2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", | |
"text/plain": [ | |
"<Figure size 800x600 with 1 Axes>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"\n", | |
"import matplotlib.pyplot as plt\n", | |
"\n", | |
"fig, ax = plt.subplots(1, 1, figsize=(8, 6), tight_layout=True)\n", | |
"ax.set_title(\"Lower 48 Coastline\", fontsize=9)\n", | |
"coast.plot(ax=ax, edgecolor=\"red\", linewidth=1.0)\n", | |
"ax.axis(\"off\")\n", | |
"plt.show()\n" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"\n", | |
"<br> \n", | |
"\n", | |
"To overlay the coastline along with state boundaries, download the STATE shapefile from the Census Bureau's FTP site and plot them together:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 4, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAxYAAAHFCAYAAABvi28PAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8g+/7EAAAACXBIWXMAAA9hAAAPYQGoP6dpAAD7PElEQVR4nOzdd1hT1xvA8W/C3ggoiAPFvffeq86qdbVad6t1Vqute9Y62qpVcVetbdXWVfe2at0W696IAweoiCwhhJD7+yMmP1BURsIl4Xyeh0dzc+85b0K4ue89SyFJkoQgCIIgCIIgCEImKOUOQBAEQRAEQRAE8ycSC0EQBEEQBEEQMk0kFoIgCIIgCIIgZJpILARBEARBEARByDSRWAiCIAiCIAiCkGkisRAEQRAEQRAEIdNEYiEIgiAIgiAIQqaJxEIQBEEQBEEQhEwTiYUgCIIgCIIgCJkmEgtBEAQhS61du5batWu/cx+FQsGFCxeyJiAj6927N8OHDwcgJCQEZ2dnoqKi5A1KEAQhC4jEQhAEs9CwYUPmzZsndxhptmzZMhQKxRsxr1ixguLFi+Pi4kLJkiX5/fff31nOnDlzDPvnzp2bpk2bcu/ePQBWr15NxYoV0xVXdngfP/30U06ePGl4XKhQIbZu3Zrpcn/55ReqVq2Ks7Mz3t7eNGjQgI0bN2a63HeZMmUK7du3f+vzBQsWJDY2Fjc3N5PGIQiCkB1Yyx2AIAiCOdJoNFhbp34KDQ0N5YcffqBs2bIptp8/f55Bgwaxb98+GjZsyKFDh2jVqhVVqlShdOnSb5SzZs0aAgIC2LlzJ2XLliUyMpL9+/ejUChM8prM2ZgxY1i7di2LFy+mcePG2Nvbc+zYMZYvX07nzp3lDk8QBCFHEC0WgiCYvbNnz1KnTh3c3d0pXbo0f/zxB6C7+HdxceHGjRsA7NixA4VCwd69ewG4fPky7u7uaLVaAM6dO0ejRo3w8PCgaNGi/Pzzz4Y6pkyZQps2bRg4cCAeHh6MHj36rfEMHjyYiRMn4unpmWL73bt3KVSoEI0aNUKhUNCkSRMKFizItWvXUi3n9OnTNGnSxJCguLu706VLF/z8/Dh//jwDBgzg8uXLODs74+zsTEhICOfPn6du3bp4eHiQO3duunbtyvPnzwEYOXIkx44dY/To0Tg7O9OyZUsAYmNjGTJkCAULFiRPnjz07NnT0HUnISGBvn374uXlhZubG2XLliUwMPCNWMPCwrC1tSU2NhaAgIAAFApFive+fPnyQMqWls6dOxMSEkLXrl1xdnZmwIABKV5/2bJlcXV1pW3btm/tTnTnzh1mz57NunXr+PDDD3FycsLKyoqGDRuybt06w35r1qyhVKlSuLu7U7duXc6fP294bu3atZQtWxYXFxcKFizIxIkTkSQJAEmSGD16ND4+Pri6ulK8eHF27tzJ1q1bmTFjBjt37jT8Dl537949FAoFkZGRgK6bVL9+/fjkk09wcXGhRIkSHDlyxLB/YmIikyZNokiRInh6etK2bVseP36c6usWBEHIbkRiIQiCWYuMjKRFixZ88sknPHv2jCVLltCvXz9OnDiBtbU19erV4/DhwwAcOnSIIkWKpHjcoEEDlEolYWFhNGvWjIEDB/Ls2TO2bt3K5MmT+fvvvw117d27lxo1avD06VOmTZuWajybN2/mxYsX9O7d+43nmjdvjouLCwcOHECr1bJv3z5evHhBnTp1Ui2rbt26bNiwgenTp3PixAlUKpXhuUqVKrF06VLKlStHbGwssbGxFCxYEKVSyaxZs3jy5AlXrlzh0aNHjBkzBtB1q6pXrx7ff/89sbGx7NmzB4C+ffsSERHBpUuXuHv3LomJiQwZMgSAX3/9lYsXL3L79m0iIyP566+/8PHxeSNWHx8fihYtyrFjx976Xjdq1OiN4zZu3EjBggX5448/iI2NZenSpYbn1q9fz99//01ISAgPHz7kp59+SvV9OnjwIHnz5qVevXqpPg9w7NgxBg4cyLJly3j27BmdOnWiefPmhmTFw8ODv/76i+joaLZv387y5csNScmBAwdYt24d586dIzo6moMHD1K8eHHat2/PuHHjaNOmjeF3kBZ//vkn/fv3JzIykh49eqT4rIwfP54TJ05w/PhxQkNDKV68OJ988kmayhUEQZCbSCwEQTBru3btInfu3AwdOhQbGxsaNGhAt27d+PXXXwFo1KhRiovbyZMnp3jcuHFjAH7//Xfq169Ply5dsLKyomzZsvTp0yfFHe+yZcvSu3dvrK2tcXR0fCOWyMhIvv766xQXx8k5Ojry6aef0rZtW2xtbWnbti0LFiwgb968qe7/ySef8Msvv3Dy5Elat26Np6cn/fr14+XLl299PypUqEDdunWxsbHB29ub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", | |
"text/plain": [ | |
"<Figure size 800x600 with 1 Axes>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"\n", | |
"fig, ax = plt.subplots(1, 1, figsize=(8, 6), tight_layout=True)\n", | |
"ax.set_title(\"Lower 48 States with Coastline\", fontsize=9)\n", | |
"coast.plot(ax=ax, edgecolor=\"red\", linewidth=1.50, linestyle=\"--\")\n", | |
"states.boundary.plot(ax=ax, edgecolor=\"black\", linewidth=0.50)\n", | |
"ax.axis(\"off\")\n", | |
"plt.show()" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"\n", | |
"<br>\n", | |
"\n", | |
"Let's next generate synthetic latitude-longitude pairs from within the Florida bounding envelope. The envelope bounds can be obtained from Florida's gemetry as follows:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 5, | |
"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>NAME</th>\n", | |
" <th>geometry</th>\n", | |
" <th>bbox</th>\n", | |
" <th>lon0</th>\n", | |
" <th>lat0</th>\n", | |
" <th>lon1</th>\n", | |
" <th>lat1</th>\n", | |
" </tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr>\n", | |
" <th>0</th>\n", | |
" <td>West Virginia</td>\n", | |
" <td>POLYGON ((-77.75438 39.33346, -77.75422 39.333...</td>\n", | |
" <td>(-82.644591, 37.20154, -77.719519, 40.638801)</td>\n", | |
" <td>-82.644591</td>\n", | |
" <td>37.201540</td>\n", | |
" <td>-77.719519</td>\n", | |
" <td>40.638801</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>1</th>\n", | |
" <td>Florida</td>\n", | |
" <td>MULTIPOLYGON (((-83.10874 24.62949, -83.10711 ...</td>\n", | |
" <td>(-87.634896, 24.396308, -79.974306, 31.000968)</td>\n", | |
" <td>-87.634896</td>\n", | |
" <td>24.396308</td>\n", | |
" <td>-79.974306</td>\n", | |
" <td>31.000968</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>2</th>\n", | |
" <td>Illinois</td>\n", | |
" <td>POLYGON ((-87.89243 38.28285, -87.89334 38.282...</td>\n", | |
" <td>(-91.513079, 36.970298, -87.019935, 42.508481)</td>\n", | |
" <td>-91.513079</td>\n", | |
" <td>36.970298</td>\n", | |
" <td>-87.019935</td>\n", | |
" <td>42.508481</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>3</th>\n", | |
" <td>Minnesota</td>\n", | |
" <td>POLYGON ((-95.31991 48.99892, -95.31778 48.998...</td>\n", | |
" <td>(-97.239093, 43.499361, -89.483385, 49.384479)</td>\n", | |
" <td>-97.239093</td>\n", | |
" <td>43.499361</td>\n", | |
" <td>-89.483385</td>\n", | |
" <td>49.384479</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>4</th>\n", | |
" <td>Maryland</td>\n", | |
" <td>POLYGON ((-75.75600 39.24607, -75.75579 39.243...</td>\n", | |
" <td>(-79.487651, 37.886605, -74.986282, 39.723037)</td>\n", | |
" <td>-79.487651</td>\n", | |
" <td>37.886605</td>\n", | |
" <td>-74.986282</td>\n", | |
" <td>39.723037</td>\n", | |
" </tr>\n", | |
" </tbody>\n", | |
"</table>\n", | |
"</div>" | |
], | |
"text/plain": [ | |
" NAME geometry \\\n", | |
"0 West Virginia POLYGON ((-77.75438 39.33346, -77.75422 39.333... \n", | |
"1 Florida MULTIPOLYGON (((-83.10874 24.62949, -83.10711 ... \n", | |
"2 Illinois POLYGON ((-87.89243 38.28285, -87.89334 38.282... \n", | |
"3 Minnesota POLYGON ((-95.31991 48.99892, -95.31778 48.998... \n", | |
"4 Maryland POLYGON ((-75.75600 39.24607, -75.75579 39.243... \n", | |
"\n", | |
" bbox lon0 lat0 \\\n", | |
"0 (-82.644591, 37.20154, -77.719519, 40.638801) -82.644591 37.201540 \n", | |
"1 (-87.634896, 24.396308, -79.974306, 31.000968) -87.634896 24.396308 \n", | |
"2 (-91.513079, 36.970298, -87.019935, 42.508481) -91.513079 36.970298 \n", | |
"3 (-97.239093, 43.499361, -89.483385, 49.384479) -97.239093 43.499361 \n", | |
"4 (-79.487651, 37.886605, -74.986282, 39.723037) -79.487651 37.886605 \n", | |
"\n", | |
" lon1 lat1 \n", | |
"0 -77.719519 40.638801 \n", | |
"1 -79.974306 31.000968 \n", | |
"2 -87.019935 42.508481 \n", | |
"3 -89.483385 49.384479 \n", | |
"4 -74.986282 39.723037 " | |
] | |
}, | |
"execution_count": 5, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"\n", | |
"\n", | |
"# Get bounding box for each state.\n", | |
"states[\"bbox\"] = states.geometry.map(lambda gg: gg.envelope.bounds)\n", | |
"\n", | |
"# Put coordinates in separate columns.\n", | |
"states[[\"lon0\", \"lat0\", \"lon1\", \"lat1\"]] = pd.DataFrame(states.bbox.tolist(), index=states.index)\n", | |
"\n", | |
"states.head()\n", | |
"\n" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"\n", | |
"<br>\n", | |
"\n", | |
"\n", | |
"\n", | |
"Let's draw the bounding region using folium:\n", | |
"\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%;\"><span style=\"color:#565656\">Make this Notebook Trusted to load map: File -> Trust Notebook</span><iframe srcdoc=\"<!DOCTYPE html>\n", | |
"<html>\n", | |
"<head>\n", | |
" \n", | |
" <meta http-equiv="content-type" content="text/html; charset=UTF-8" />\n", | |
" \n", | |
" <script>\n", | |
" L_NO_TOUCH = true;\n", | |
" L_DISABLE_3D = false;\n", | |
" </script>\n", | |
" \n", | |
" <style>html, body {width: 100%;height: 100%;margin: 0;padding: 0;}</style>\n", | |
" <style>#map {position:absolute;top:0;bottom:0;right:0;left:0;}</style>\n", | |
" <script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/leaflet.js"></script>\n", | |
" <script src="https://code.jquery.com/jquery-3.7.1.min.js"></script>\n", | |
" <script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js"></script>\n", | |
" <script src="https://cdnjs.cloudflare.com/ajax/libs/Leaflet.awesome-markers/2.0.2/leaflet.awesome-markers.js"></script>\n", | |
" <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/leaflet.css"/>\n", | |
" <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css"/>\n", | |
" <link rel="stylesheet" href="https://netdna.bootstrapcdn.com/bootstrap/3.0.0/css/bootstrap.min.css"/>\n", | |
" <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fortawesome/[email protected]/css/all.min.css"/>\n", | |
" <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/Leaflet.awesome-markers/2.0.2/leaflet.awesome-markers.css"/>\n", | |
" <link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/python-visualization/folium/folium/templates/leaflet.awesome.rotate.min.css"/>\n", | |
" \n", | |
" <meta name="viewport" content="width=device-width,\n", | |
" initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />\n", | |
" <style>\n", | |
" #map_8a5611ddb70c5a129e319c24a14ce780 {\n", | |
" position: relative;\n", | |
" width: 100.0%;\n", | |
" height: 100.0%;\n", | |
" left: 0.0%;\n", | |
" top: 0.0%;\n", | |
" }\n", | |
" .leaflet-container { font-size: 1rem; }\n", | |
" </style>\n", | |
" \n", | |
"</head>\n", | |
"<body>\n", | |
" \n", | |
" \n", | |
" <div class="folium-map" id="map_8a5611ddb70c5a129e319c24a14ce780" ></div>\n", | |
" \n", | |
"</body>\n", | |
"<script>\n", | |
" \n", | |
" \n", | |
" var map_8a5611ddb70c5a129e319c24a14ce780 = L.map(\n", | |
" "map_8a5611ddb70c5a129e319c24a14ce780",\n", | |
" {\n", | |
" center: [27.698638000000003, -83.80460099999999],\n", | |
" crs: L.CRS.EPSG3857,\n", | |
" zoom: 7,\n", | |
" zoomControl: true,\n", | |
" preferCanvas: false,\n", | |
" }\n", | |
" );\n", | |
"\n", | |
" \n", | |
"\n", | |
" \n", | |
" \n", | |
" var tile_layer_d8921bb60a0cc4d7f31c21e0c0d79c13 = L.tileLayer(\n", | |
" "https://tile.openstreetmap.org/{z}/{x}/{y}.png",\n", | |
" {"attribution": "\\u0026copy; \\u003ca href=\\"https://www.openstreetmap.org/copyright\\"\\u003eOpenStreetMap\\u003c/a\\u003e contributors", "detectRetina": false, "maxNativeZoom": 19, "maxZoom": 19, "minZoom": 0, "noWrap": false, "opacity": 1, "subdomains": "abc", "tms": false}\n", | |
" );\n", | |
" \n", | |
" \n", | |
" tile_layer_d8921bb60a0cc4d7f31c21e0c0d79c13.addTo(map_8a5611ddb70c5a129e319c24a14ce780);\n", | |
" \n", | |
" \n", | |
" var rectangle_da91f06f912b272102f176572fe3295c = L.rectangle(\n", | |
" [[24.396308, -87.634896], [31.000968, -79.974306]],\n", | |
" {"bubblingMouseEvents": true, "color": "#3388ff", "dashArray": null, "dashOffset": null, "fill": true, "fillColor": "blue", "fillOpacity": 0.05, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "noClip": false, "opacity": 1.0, "smoothFactor": 1.0, "stroke": true, "weight": 3}\n", | |
" ).addTo(map_8a5611ddb70c5a129e319c24a14ce780);\n", | |
" \n", | |
"</script>\n", | |
"</html>\" 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 0x1ea38ac6b10>" | |
] | |
}, | |
"execution_count": 6, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"\n", | |
"import folium \n", | |
"\n", | |
"# Florida bounding box. \n", | |
"lon0, lat0, lon1, lat1 = states[states.NAME==\"Florida\"].bbox.item()\n", | |
"\n", | |
"mlat, mlon = (lat0 + lat1) / 2, (lon0 + lon1) / 2\n", | |
"\n", | |
"m = folium.Map(\n", | |
" location=[mlat, mlon], \n", | |
" zoom_start=7, \n", | |
" zoom_control=True, \n", | |
" no_touch=True,\n", | |
" tiles=\"OpenStreetMap\"\n", | |
" )\n", | |
"\n", | |
"folium.Rectangle(\n", | |
" [(lat0, lon0), (lat1, lon1)], \n", | |
" fill_color=\"blue\", fill_opacity=.05\n", | |
" ).add_to(m)\n", | |
"\n", | |
"m\n" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"\n", | |
"<br>\n", | |
"\n", | |
"Sampling from the bounding region highlighted above will result in many points in the Gulf. Let's narrow the sampling space:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 7, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/html": [ | |
"<div style=\"width:100%;\"><div style=\"position:relative;width:100%;height:0;padding-bottom:60%;\"><span style=\"color:#565656\">Make this Notebook Trusted to load map: File -> Trust Notebook</span><iframe srcdoc=\"<!DOCTYPE html>\n", | |
"<html>\n", | |
"<head>\n", | |
" \n", | |
" <meta http-equiv="content-type" content="text/html; charset=UTF-8" />\n", | |
" \n", | |
" <script>\n", | |
" L_NO_TOUCH = true;\n", | |
" L_DISABLE_3D = false;\n", | |
" </script>\n", | |
" \n", | |
" <style>html, body {width: 100%;height: 100%;margin: 0;padding: 0;}</style>\n", | |
" <style>#map {position:absolute;top:0;bottom:0;right:0;left:0;}</style>\n", | |
" <script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/leaflet.js"></script>\n", | |
" <script src="https://code.jquery.com/jquery-3.7.1.min.js"></script>\n", | |
" <script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js"></script>\n", | |
" <script src="https://cdnjs.cloudflare.com/ajax/libs/Leaflet.awesome-markers/2.0.2/leaflet.awesome-markers.js"></script>\n", | |
" <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/leaflet.css"/>\n", | |
" <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css"/>\n", | |
" <link rel="stylesheet" href="https://netdna.bootstrapcdn.com/bootstrap/3.0.0/css/bootstrap.min.css"/>\n", | |
" <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fortawesome/[email protected]/css/all.min.css"/>\n", | |
" <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/Leaflet.awesome-markers/2.0.2/leaflet.awesome-markers.css"/>\n", | |
" <link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/python-visualization/folium/folium/templates/leaflet.awesome.rotate.min.css"/>\n", | |
" \n", | |
" <meta name="viewport" content="width=device-width,\n", | |
" initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />\n", | |
" <style>\n", | |
" #map_e32b90b1f126149474be35d6036e14a0 {\n", | |
" position: relative;\n", | |
" width: 100.0%;\n", | |
" height: 100.0%;\n", | |
" left: 0.0%;\n", | |
" top: 0.0%;\n", | |
" }\n", | |
" .leaflet-container { font-size: 1rem; }\n", | |
" </style>\n", | |
" \n", | |
"</head>\n", | |
"<body>\n", | |
" \n", | |
" \n", | |
" <div class="folium-map" id="map_e32b90b1f126149474be35d6036e14a0" ></div>\n", | |
" \n", | |
"</body>\n", | |
"<script>\n", | |
" \n", | |
" \n", | |
" var map_e32b90b1f126149474be35d6036e14a0 = L.map(\n", | |
" "map_e32b90b1f126149474be35d6036e14a0",\n", | |
" {\n", | |
" center: [27.0, -81.125],\n", | |
" crs: L.CRS.EPSG3857,\n", | |
" zoom: 7,\n", | |
" zoomControl: true,\n", | |
" preferCanvas: false,\n", | |
" }\n", | |
" );\n", | |
"\n", | |
" \n", | |
"\n", | |
" \n", | |
" \n", | |
" var tile_layer_032ddfd7fb8d4688451c0779af2c58e5 = L.tileLayer(\n", | |
" "https://tile.openstreetmap.org/{z}/{x}/{y}.png",\n", | |
" {"attribution": "\\u0026copy; \\u003ca href=\\"https://www.openstreetmap.org/copyright\\"\\u003eOpenStreetMap\\u003c/a\\u003e contributors", "detectRetina": false, "maxNativeZoom": 19, "maxZoom": 19, "minZoom": 0, "noWrap": false, "opacity": 1, "subdomains": "abc", "tms": false}\n", | |
" );\n", | |
" \n", | |
" \n", | |
" tile_layer_032ddfd7fb8d4688451c0779af2c58e5.addTo(map_e32b90b1f126149474be35d6036e14a0);\n", | |
" \n", | |
" \n", | |
" var rectangle_2339e81d2fa4cc95fa9d0bb4be59a23e = L.rectangle(\n", | |
" [[26.0, -80.5], [28.0, -81.75]],\n", | |
" {"bubblingMouseEvents": true, "color": "#3388ff", "dashArray": null, "dashOffset": null, "fill": true, "fillColor": "blue", "fillOpacity": 0.05, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "noClip": false, "opacity": 1.0, "smoothFactor": 1.0, "stroke": true, "weight": 3}\n", | |
" ).addTo(map_e32b90b1f126149474be35d6036e14a0);\n", | |
" \n", | |
"</script>\n", | |
"</html>\" 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 0x1ea39d5ac10>" | |
] | |
}, | |
"execution_count": 7, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"\n", | |
"lon0, lat0, lon1, lat1 = (-80.5, 26, -81.75, 28)\n", | |
"\n", | |
"mlat, mlon = (lat0 + lat1) / 2, (lon0 + lon1) / 2\n", | |
"\n", | |
"m = folium.Map(\n", | |
" location=[mlat, mlon], \n", | |
" zoom_start=7, \n", | |
" zoom_control=True, \n", | |
" no_touch=True,\n", | |
" tiles=\"OpenStreetMap\"\n", | |
" )\n", | |
"\n", | |
"folium.Rectangle(\n", | |
" [(lat0, lon0), (lat1, lon1)], \n", | |
" fill_color=\"blue\", fill_opacity=.05\n", | |
" ).add_to(m)\n", | |
"\n", | |
"m" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 19, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"# Sample within bounds defined by lat0, lon0, lat1, lon1. \n", | |
"\n", | |
"nbr_locations = 50\n", | |
"\n", | |
"rng = np.random.default_rng(516)\n", | |
"\n", | |
"rlats = rng.uniform(low=lat0, high=lat1, size=nbr_locations)\n", | |
"rlons = rng.uniform(low=lon1, high=lon0, size=nbr_locations)\n", | |
"points = list(zip(rlats, rlons))\n" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"\n", | |
"<br>\n", | |
"\n", | |
"\n", | |
"Visualizing the synthetic locations:\n" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 20, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/html": [ | |
"<div style=\"width:100%;\"><div style=\"position:relative;width:100%;height:0;padding-bottom:60%;\"><span style=\"color:#565656\">Make this Notebook Trusted to load map: File -> Trust Notebook</span><iframe srcdoc=\"<!DOCTYPE html>\n", | |
"<html>\n", | |
"<head>\n", | |
" \n", | |
" <meta http-equiv="content-type" content="text/html; charset=UTF-8" />\n", | |
" \n", | |
" <script>\n", | |
" L_NO_TOUCH = false;\n", | |
" L_DISABLE_3D = false;\n", | |
" </script>\n", | |
" \n", | |
" <style>html, body {width: 100%;height: 100%;margin: 0;padding: 0;}</style>\n", | |
" <style>#map {position:absolute;top:0;bottom:0;right:0;left:0;}</style>\n", | |
" <script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/leaflet.js"></script>\n", | |
" <script src="https://code.jquery.com/jquery-3.7.1.min.js"></script>\n", | |
" <script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js"></script>\n", | |
" <script src="https://cdnjs.cloudflare.com/ajax/libs/Leaflet.awesome-markers/2.0.2/leaflet.awesome-markers.js"></script>\n", | |
" <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/leaflet.css"/>\n", | |
" <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css"/>\n", | |
" <link rel="stylesheet" href="https://netdna.bootstrapcdn.com/bootstrap/3.0.0/css/bootstrap.min.css"/>\n", | |
" <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fortawesome/[email protected]/css/all.min.css"/>\n", | |
" <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/Leaflet.awesome-markers/2.0.2/leaflet.awesome-markers.css"/>\n", | |
" <link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/python-visualization/folium/folium/templates/leaflet.awesome.rotate.min.css"/>\n", | |
" \n", | |
" <meta name="viewport" content="width=device-width,\n", | |
" initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />\n", | |
" <style>\n", | |
" #map_d7676780473833a0fdeb4c60305d9a5c {\n", | |
" position: relative;\n", | |
" width: 100.0%;\n", | |
" height: 100.0%;\n", | |
" left: 0.0%;\n", | |
" top: 0.0%;\n", | |
" }\n", | |
" .leaflet-container { font-size: 1rem; }\n", | |
" </style>\n", | |
" \n", | |
"</head>\n", | |
"<body>\n", | |
" \n", | |
" \n", | |
" <div class="folium-map" id="map_d7676780473833a0fdeb4c60305d9a5c" ></div>\n", | |
" \n", | |
"</body>\n", | |
"<script>\n", | |
" \n", | |
" \n", | |
" var map_d7676780473833a0fdeb4c60305d9a5c = L.map(\n", | |
" "map_d7676780473833a0fdeb4c60305d9a5c",\n", | |
" {\n", | |
" center: [27.0, -81.125],\n", | |
" crs: L.CRS.EPSG3857,\n", | |
" zoom: 9,\n", | |
" zoomControl: true,\n", | |
" preferCanvas: false,\n", | |
" }\n", | |
" );\n", | |
"\n", | |
" \n", | |
"\n", | |
" \n", | |
" \n", | |
" var tile_layer_097ea93883547d10e5b7bd1c2ea255a5 = L.tileLayer(\n", | |
" "https://tile.openstreetmap.org/{z}/{x}/{y}.png",\n", | |
" {"attribution": "\\u0026copy; \\u003ca href=\\"https://www.openstreetmap.org/copyright\\"\\u003eOpenStreetMap\\u003c/a\\u003e contributors", "detectRetina": false, "maxNativeZoom": 19, "maxZoom": 19, "minZoom": 0, "noWrap": false, "opacity": 1, "subdomains": "abc", "tms": false}\n", | |
" );\n", | |
" \n", | |
" \n", | |
" tile_layer_097ea93883547d10e5b7bd1c2ea255a5.addTo(map_d7676780473833a0fdeb4c60305d9a5c);\n", | |
" \n", | |
" \n", | |
" var circle_marker_d1cb3d9e7512119d4c40f0413bc38b27 = L.circleMarker(\n", | |
" [26.15842498103677, -81.6978452754149],\n", | |
" {"bubblingMouseEvents": true, "color": "red", "dashArray": null, "dashOffset": null, "fill": true, "fillColor": "red", "fillOpacity": 1, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "opacity": 1.0, "radius": 5, "stroke": true, "weight": 3}\n", | |
" ).addTo(map_d7676780473833a0fdeb4c60305d9a5c);\n", | |
" \n", | |
" \n", | |
" var circle_marker_d97782ec45c631736deb9f284917f0b4 = L.circleMarker(\n", | |
" [27.308367243835498, -80.74351022614646],\n", | |
" {"bubblingMouseEvents": true, "color": "red", "dashArray": null, "dashOffset": null, "fill": true, "fillColor": "red", "fillOpacity": 1, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "opacity": 1.0, "radius": 5, "stroke": true, "weight": 3}\n", | |
" ).addTo(map_d7676780473833a0fdeb4c60305d9a5c);\n", | |
" \n", | |
" \n", | |
" var circle_marker_8029b483c649370b1d74f76ecb0e5d15 = L.circleMarker(\n", | |
" [26.050159830178664, -81.22629395965097],\n", | |
" {"bubblingMouseEvents": true, "color": "red", "dashArray": null, "dashOffset": null, "fill": true, "fillColor": "red", "fillOpacity": 1, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "opacity": 1.0, "radius": 5, "stroke": true, "weight": 3}\n", | |
" ).addTo(map_d7676780473833a0fdeb4c60305d9a5c);\n", | |
" \n", | |
" \n", | |
" var circle_marker_594b8f010c2c0050d2861b488baf0313 = L.circleMarker(\n", | |
" [26.896432196124945, -80.6823476427752],\n", | |
" {"bubblingMouseEvents": true, "color": "red", "dashArray": null, "dashOffset": null, "fill": true, "fillColor": "red", "fillOpacity": 1, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "opacity": 1.0, "radius": 5, "stroke": true, "weight": 3}\n", | |
" ).addTo(map_d7676780473833a0fdeb4c60305d9a5c);\n", | |
" \n", | |
" \n", | |
" var circle_marker_e8bec7b3452b9750e7ecdc7c109c80aa = L.circleMarker(\n", | |
" [27.40773608152318, -81.55620947759367],\n", | |
" {"bubblingMouseEvents": true, "color": "red", "dashArray": null, "dashOffset": null, "fill": true, "fillColor": "red", "fillOpacity": 1, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "opacity": 1.0, "radius": 5, "stroke": true, "weight": 3}\n", | |
" ).addTo(map_d7676780473833a0fdeb4c60305d9a5c);\n", | |
" \n", | |
" \n", | |
" var circle_marker_a653e1041d931b3a45589bf86631538b = L.circleMarker(\n", | |
" [26.55187691648845, -80.90280316359555],\n", | |
" {"bubblingMouseEvents": true, "color": "red", "dashArray": null, "dashOffset": null, "fill": true, "fillColor": "red", "fillOpacity": 1, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "opacity": 1.0, "radius": 5, "stroke": true, "weight": 3}\n", | |
" ).addTo(map_d7676780473833a0fdeb4c60305d9a5c);\n", | |
" \n", | |
" \n", | |
" var circle_marker_ca1a0b376be79bb4477512720f1f27fa = L.circleMarker(\n", | |
" [26.301071098731754, -81.52100045189212],\n", | |
" {"bubblingMouseEvents": true, "color": "red", "dashArray": null, "dashOffset": null, "fill": true, "fillColor": "red", "fillOpacity": 1, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "opacity": 1.0, "radius": 5, "stroke": true, "weight": 3}\n", | |
" ).addTo(map_d7676780473833a0fdeb4c60305d9a5c);\n", | |
" \n", | |
" \n", | |
" var circle_marker_5dfee840ff729c349f85fbddf53a88ed = L.circleMarker(\n", | |
" [27.435718092142665, -81.49914451288832],\n", | |
" {"bubblingMouseEvents": true, "color": "red", "dashArray": null, "dashOffset": null, "fill": true, "fillColor": "red", "fillOpacity": 1, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "opacity": 1.0, "radius": 5, "stroke": true, "weight": 3}\n", | |
" ).addTo(map_d7676780473833a0fdeb4c60305d9a5c);\n", | |
" \n", | |
" \n", | |
" var circle_marker_083f83a8cd0fc34977fa2fadf58348bd = L.circleMarker(\n", | |
" [27.784378345442054, -80.59076499724968],\n", | |
" {"bubblingMouseEvents": true, "color": "red", "dashArray": null, "dashOffset": null, "fill": true, "fillColor": "red", "fillOpacity": 1, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "opacity": 1.0, "radius": 5, "stroke": true, "weight": 3}\n", | |
" ).addTo(map_d7676780473833a0fdeb4c60305d9a5c);\n", | |
" \n", | |
" \n", | |
" var circle_marker_c277e9c3ad445af1cf9969bf836f97e9 = L.circleMarker(\n", | |
" [27.635398626773437, -81.3898362844697],\n", | |
" {"bubblingMouseEvents": true, "color": "red", "dashArray": null, "dashOffset": null, "fill": true, "fillColor": "red", "fillOpacity": 1, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "opacity": 1.0, "radius": 5, "stroke": true, "weight": 3}\n", | |
" ).addTo(map_d7676780473833a0fdeb4c60305d9a5c);\n", | |
" \n", | |
" \n", | |
" var circle_marker_2a85ed55026f0155761a072e5825d02d = L.circleMarker(\n", | |
" [27.37937557184798, -81.4286044623964],\n", | |
" {"bubblingMouseEvents": true, "color": "red", "dashArray": null, "dashOffset": null, "fill": true, "fillColor": "red", "fillOpacity": 1, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "opacity": 1.0, "radius": 5, "stroke": true, "weight": 3}\n", | |
" ).addTo(map_d7676780473833a0fdeb4c60305d9a5c);\n", | |
" \n", | |
" \n", | |
" var circle_marker_6a58ac32150d55e4d6d56dcbd1efb95e = L.circleMarker(\n", | |
" [26.862971977202136, -80.54717925180627],\n", | |
" {"bubblingMouseEvents": true, "color": "red", "dashArray": null, "dashOffset": null, "fill": true, "fillColor": "red", "fillOpacity": 1, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "opacity": 1.0, "radius": 5, "stroke": true, "weight": 3}\n", | |
" ).addTo(map_d7676780473833a0fdeb4c60305d9a5c);\n", | |
" \n", | |
" \n", | |
" var circle_marker_3bedd13756f3d36a9416627d8c1c1156 = L.circleMarker(\n", | |
" [27.98142795111799, -81.09169770076494],\n", | |
" {"bubblingMouseEvents": true, "color": "red", "dashArray": null, "dashOffset": null, "fill": true, "fillColor": "red", "fillOpacity": 1, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "opacity": 1.0, "radius": 5, "stroke": true, "weight": 3}\n", | |
" ).addTo(map_d7676780473833a0fdeb4c60305d9a5c);\n", | |
" \n", | |
" \n", | |
" var circle_marker_88954e3bb04a1a28e44c9415328e2650 = L.circleMarker(\n", | |
" [26.365577838913776, -80.8990291114624],\n", | |
" {"bubblingMouseEvents": true, "color": "red", "dashArray": null, "dashOffset": null, "fill": true, "fillColor": "red", "fillOpacity": 1, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "opacity": 1.0, "radius": 5, "stroke": true, "weight": 3}\n", | |
" ).addTo(map_d7676780473833a0fdeb4c60305d9a5c);\n", | |
" \n", | |
" \n", | |
" var circle_marker_b101d258a11892a33d01c241a86eb855 = L.circleMarker(\n", | |
" [26.131355757954836, -81.16027753441861],\n", | |
" {"bubblingMouseEvents": true, "color": "red", "dashArray": null, "dashOffset": null, "fill": true, "fillColor": "red", "fillOpacity": 1, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "opacity": 1.0, "radius": 5, "stroke": true, "weight": 3}\n", | |
" ).addTo(map_d7676780473833a0fdeb4c60305d9a5c);\n", | |
" \n", | |
" \n", | |
" var circle_marker_b26b0cff5bf62cdf0567ca71c54bfa4a = L.circleMarker(\n", | |
" [26.382999780154904, -81.70903306152387],\n", | |
" {"bubblingMouseEvents": true, "color": "red", "dashArray": null, "dashOffset": null, "fill": true, "fillColor": "red", "fillOpacity": 1, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "opacity": 1.0, "radius": 5, "stroke": true, "weight": 3}\n", | |
" ).addTo(map_d7676780473833a0fdeb4c60305d9a5c);\n", | |
" \n", | |
" \n", | |
" var circle_marker_1702720542725e603a179b3c656d2b4a = L.circleMarker(\n", | |
" [27.972984413059, -80.50657443311286],\n", | |
" {"bubblingMouseEvents": true, "color": "red", "dashArray": null, "dashOffset": null, "fill": true, "fillColor": "red", "fillOpacity": 1, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "opacity": 1.0, "radius": 5, "stroke": true, "weight": 3}\n", | |
" ).addTo(map_d7676780473833a0fdeb4c60305d9a5c);\n", | |
" \n", | |
" \n", | |
" var circle_marker_9bfe475c1a84829d4e9ebc39fcdd9ee2 = L.circleMarker(\n", | |
" [26.086354128867725, -81.48977717606184],\n", | |
" {"bubblingMouseEvents": true, "color": "red", "dashArray": null, "dashOffset": null, "fill": true, "fillColor": "red", "fillOpacity": 1, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "opacity": 1.0, "radius": 5, "stroke": true, "weight": 3}\n", | |
" ).addTo(map_d7676780473833a0fdeb4c60305d9a5c);\n", | |
" \n", | |
" \n", | |
" var circle_marker_30c5cc5691a4e1533912001b4f14c43e = L.circleMarker(\n", | |
" [26.943671120744057, -80.51934697293223],\n", | |
" {"bubblingMouseEvents": true, "color": "red", "dashArray": null, "dashOffset": null, "fill": true, "fillColor": "red", "fillOpacity": 1, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "opacity": 1.0, "radius": 5, "stroke": true, "weight": 3}\n", | |
" ).addTo(map_d7676780473833a0fdeb4c60305d9a5c);\n", | |
" \n", | |
" \n", | |
" var circle_marker_0f3256cd564d78d3c05a5dc5bf9c136a = L.circleMarker(\n", | |
" [26.24664396062321, -81.43299865566368],\n", | |
" {"bubblingMouseEvents": true, "color": "red", "dashArray": null, "dashOffset": null, "fill": true, "fillColor": "red", "fillOpacity": 1, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "opacity": 1.0, "radius": 5, "stroke": true, "weight": 3}\n", | |
" ).addTo(map_d7676780473833a0fdeb4c60305d9a5c);\n", | |
" \n", | |
" \n", | |
" var circle_marker_e64d2c10db535e7a0194b1473bd67fbd = L.circleMarker(\n", | |
" [27.243754691593953, -81.40006512830422],\n", | |
" {"bubblingMouseEvents": true, "color": "red", "dashArray": null, "dashOffset": null, "fill": true, "fillColor": "red", "fillOpacity": 1, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "opacity": 1.0, "radius": 5, "stroke": true, "weight": 3}\n", | |
" ).addTo(map_d7676780473833a0fdeb4c60305d9a5c);\n", | |
" \n", | |
" \n", | |
" var circle_marker_13378302e77365f7a98ed2e0ce4539f0 = L.circleMarker(\n", | |
" [26.78781864252158, -80.66418638533959],\n", | |
" {"bubblingMouseEvents": true, "color": "red", "dashArray": null, "dashOffset": null, "fill": true, "fillColor": "red", "fillOpacity": 1, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "opacity": 1.0, "radius": 5, "stroke": true, "weight": 3}\n", | |
" ).addTo(map_d7676780473833a0fdeb4c60305d9a5c);\n", | |
" \n", | |
" \n", | |
" var circle_marker_0156849739cf2a7a1cb84bc4a3f7d308 = L.circleMarker(\n", | |
" [26.605717123010912, -81.13339074943397],\n", | |
" {"bubblingMouseEvents": true, "color": "red", "dashArray": null, "dashOffset": null, "fill": true, "fillColor": "red", "fillOpacity": 1, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "opacity": 1.0, "radius": 5, "stroke": true, "weight": 3}\n", | |
" ).addTo(map_d7676780473833a0fdeb4c60305d9a5c);\n", | |
" \n", | |
" \n", | |
" var circle_marker_5b0d56e0bafca4c181ddcbc7832ac337 = L.circleMarker(\n", | |
" [27.82472127183081, -81.03218135189428],\n", | |
" {"bubblingMouseEvents": true, "color": "red", "dashArray": null, "dashOffset": null, "fill": true, "fillColor": "red", "fillOpacity": 1, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "opacity": 1.0, "radius": 5, "stroke": true, "weight": 3}\n", | |
" ).addTo(map_d7676780473833a0fdeb4c60305d9a5c);\n", | |
" \n", | |
" \n", | |
" var circle_marker_fa4fb27429b60bcceeec88912bff6cfe = L.circleMarker(\n", | |
" [26.307063400374936, -81.27626966439352],\n", | |
" {"bubblingMouseEvents": true, "color": "red", "dashArray": null, "dashOffset": null, "fill": true, "fillColor": "red", "fillOpacity": 1, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "opacity": 1.0, "radius": 5, "stroke": true, "weight": 3}\n", | |
" ).addTo(map_d7676780473833a0fdeb4c60305d9a5c);\n", | |
" \n", | |
" \n", | |
" var circle_marker_8b00326e5df2e865ee29e65bf2c87d0e = L.circleMarker(\n", | |
" [27.991454895701796, -81.17887100872782],\n", | |
" {"bubblingMouseEvents": true, "color": "red", "dashArray": null, "dashOffset": null, "fill": true, "fillColor": "red", "fillOpacity": 1, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "opacity": 1.0, "radius": 5, "stroke": true, "weight": 3}\n", | |
" ).addTo(map_d7676780473833a0fdeb4c60305d9a5c);\n", | |
" \n", | |
" \n", | |
" var circle_marker_62c9f58be6d70af285487d153622f81b = L.circleMarker(\n", | |
" [26.544773024554832, -81.60667452193859],\n", | |
" {"bubblingMouseEvents": true, "color": "red", "dashArray": null, "dashOffset": null, "fill": true, "fillColor": "red", "fillOpacity": 1, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "opacity": 1.0, "radius": 5, "stroke": true, "weight": 3}\n", | |
" ).addTo(map_d7676780473833a0fdeb4c60305d9a5c);\n", | |
" \n", | |
" \n", | |
" var circle_marker_660cbe3ab5fb6804a8e3993ce006b58a = L.circleMarker(\n", | |
" [26.886457616788025, -80.91721728171257],\n", | |
" {"bubblingMouseEvents": true, "color": "red", "dashArray": null, "dashOffset": null, "fill": true, "fillColor": "red", "fillOpacity": 1, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "opacity": 1.0, "radius": 5, "stroke": true, "weight": 3}\n", | |
" ).addTo(map_d7676780473833a0fdeb4c60305d9a5c);\n", | |
" \n", | |
" \n", | |
" var circle_marker_d4fad292749599e9102a73f034c3549c = L.circleMarker(\n", | |
" [27.714852856581068, -81.64493695441304],\n", | |
" {"bubblingMouseEvents": true, "color": "red", "dashArray": null, "dashOffset": null, "fill": true, "fillColor": "red", "fillOpacity": 1, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "opacity": 1.0, "radius": 5, "stroke": true, "weight": 3}\n", | |
" ).addTo(map_d7676780473833a0fdeb4c60305d9a5c);\n", | |
" \n", | |
" \n", | |
" var circle_marker_4e6cce82e05ffc07fb2ba513eb089409 = L.circleMarker(\n", | |
" [27.2850774684598, -81.43364197265868],\n", | |
" {"bubblingMouseEvents": true, "color": "red", "dashArray": null, "dashOffset": null, "fill": true, "fillColor": "red", "fillOpacity": 1, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "opacity": 1.0, "radius": 5, "stroke": true, "weight": 3}\n", | |
" ).addTo(map_d7676780473833a0fdeb4c60305d9a5c);\n", | |
" \n", | |
" \n", | |
" var circle_marker_833faf1d9f8c45ce4ab7b4ca60c127ca = L.circleMarker(\n", | |
" [27.473269702793658, -80.50510790437552],\n", | |
" {"bubblingMouseEvents": true, "color": "red", "dashArray": null, "dashOffset": null, "fill": true, "fillColor": "red", "fillOpacity": 1, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "opacity": 1.0, "radius": 5, "stroke": true, "weight": 3}\n", | |
" ).addTo(map_d7676780473833a0fdeb4c60305d9a5c);\n", | |
" \n", | |
" \n", | |
" var circle_marker_3dac0e189b1ba75f1bd1123072d30cf7 = L.circleMarker(\n", | |
" [26.9126301314854, -81.02473504499652],\n", | |
" {"bubblingMouseEvents": true, "color": "red", "dashArray": null, "dashOffset": null, "fill": true, "fillColor": "red", "fillOpacity": 1, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "opacity": 1.0, "radius": 5, "stroke": true, "weight": 3}\n", | |
" ).addTo(map_d7676780473833a0fdeb4c60305d9a5c);\n", | |
" \n", | |
" \n", | |
" var circle_marker_bc849e0e70f37427652778e9682ce27b = L.circleMarker(\n", | |
" [26.19773048060356, -81.31384553050141],\n", | |
" {"bubblingMouseEvents": true, "color": "red", "dashArray": null, "dashOffset": null, "fill": true, "fillColor": "red", "fillOpacity": 1, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "opacity": 1.0, "radius": 5, "stroke": true, "weight": 3}\n", | |
" ).addTo(map_d7676780473833a0fdeb4c60305d9a5c);\n", | |
" \n", | |
" \n", | |
" var circle_marker_d95e26f30bfe98763af48c8c9d1a14e3 = L.circleMarker(\n", | |
" [26.713303385914497, -80.69627570716136],\n", | |
" {"bubblingMouseEvents": true, "color": "red", "dashArray": null, "dashOffset": null, "fill": true, "fillColor": "red", "fillOpacity": 1, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "opacity": 1.0, "radius": 5, "stroke": true, "weight": 3}\n", | |
" ).addTo(map_d7676780473833a0fdeb4c60305d9a5c);\n", | |
" \n", | |
" \n", | |
" var circle_marker_89d77f21045d77e1881ebf04c2264e8a = L.circleMarker(\n", | |
" [27.413800924899405, -81.22869767203825],\n", | |
" {"bubblingMouseEvents": true, "color": "red", "dashArray": null, "dashOffset": null, "fill": true, "fillColor": "red", "fillOpacity": 1, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "opacity": 1.0, "radius": 5, "stroke": true, "weight": 3}\n", | |
" ).addTo(map_d7676780473833a0fdeb4c60305d9a5c);\n", | |
" \n", | |
" \n", | |
" var circle_marker_238ae057e51d6489fe91d2913129e542 = L.circleMarker(\n", | |
" [26.319682526771178, -80.52723729475458],\n", | |
" {"bubblingMouseEvents": true, "color": "red", "dashArray": null, "dashOffset": null, "fill": true, "fillColor": "red", "fillOpacity": 1, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "opacity": 1.0, "radius": 5, "stroke": true, "weight": 3}\n", | |
" ).addTo(map_d7676780473833a0fdeb4c60305d9a5c);\n", | |
" \n", | |
" \n", | |
" var circle_marker_f042e4bd89658ce99ecd4c1304ee3ed1 = L.circleMarker(\n", | |
" [26.076820898509965, -81.02010416275705],\n", | |
" {"bubblingMouseEvents": true, "color": "red", "dashArray": null, "dashOffset": null, "fill": true, "fillColor": "red", "fillOpacity": 1, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "opacity": 1.0, "radius": 5, "stroke": true, "weight": 3}\n", | |
" ).addTo(map_d7676780473833a0fdeb4c60305d9a5c);\n", | |
" \n", | |
" \n", | |
" var circle_marker_ebf7de66ee2cea89316cfd91f090acbf = L.circleMarker(\n", | |
" [26.366453559477833, -81.66293509555179],\n", | |
" {"bubblingMouseEvents": true, "color": "red", "dashArray": null, "dashOffset": null, "fill": true, "fillColor": "red", "fillOpacity": 1, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "opacity": 1.0, "radius": 5, "stroke": true, "weight": 3}\n", | |
" ).addTo(map_d7676780473833a0fdeb4c60305d9a5c);\n", | |
" \n", | |
" \n", | |
" var circle_marker_9df454f2fecbce709c80bc4dbd906109 = L.circleMarker(\n", | |
" [27.565561426877956, -80.86111841233041],\n", | |
" {"bubblingMouseEvents": true, "color": "red", "dashArray": null, "dashOffset": null, "fill": true, "fillColor": "red", "fillOpacity": 1, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "opacity": 1.0, "radius": 5, "stroke": true, "weight": 3}\n", | |
" ).addTo(map_d7676780473833a0fdeb4c60305d9a5c);\n", | |
" \n", | |
" \n", | |
" var circle_marker_17d4ae32a4d7ae1a7345806919321842 = L.circleMarker(\n", | |
" [26.694221446702628, -81.53376936951858],\n", | |
" {"bubblingMouseEvents": true, "color": "red", "dashArray": null, "dashOffset": null, "fill": true, "fillColor": "red", "fillOpacity": 1, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "opacity": 1.0, "radius": 5, "stroke": true, "weight": 3}\n", | |
" ).addTo(map_d7676780473833a0fdeb4c60305d9a5c);\n", | |
" \n", | |
" \n", | |
" var circle_marker_6787d7e3f5b0dc4c8f2203f3348ec003 = L.circleMarker(\n", | |
" [26.81413637848975, -81.32644612584131],\n", | |
" {"bubblingMouseEvents": true, "color": "red", "dashArray": null, "dashOffset": null, "fill": true, "fillColor": "red", "fillOpacity": 1, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "opacity": 1.0, "radius": 5, "stroke": true, "weight": 3}\n", | |
" ).addTo(map_d7676780473833a0fdeb4c60305d9a5c);\n", | |
" \n", | |
" \n", | |
" var circle_marker_e542310070723b59cf7c22eb6057eb61 = L.circleMarker(\n", | |
" [26.61547413746954, -81.33572363043359],\n", | |
" {"bubblingMouseEvents": true, "color": "red", "dashArray": null, "dashOffset": null, "fill": true, "fillColor": "red", "fillOpacity": 1, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "opacity": 1.0, "radius": 5, "stroke": true, "weight": 3}\n", | |
" ).addTo(map_d7676780473833a0fdeb4c60305d9a5c);\n", | |
" \n", | |
" \n", | |
" var circle_marker_68b9bfb76a2c40cd38eb75f3997acdf0 = L.circleMarker(\n", | |
" [26.343132637377927, -81.35686888035839],\n", | |
" {"bubblingMouseEvents": true, "color": "red", "dashArray": null, "dashOffset": null, "fill": true, "fillColor": "red", "fillOpacity": 1, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "opacity": 1.0, "radius": 5, "stroke": true, "weight": 3}\n", | |
" ).addTo(map_d7676780473833a0fdeb4c60305d9a5c);\n", | |
" \n", | |
" \n", | |
" var circle_marker_afd12237417cdae1e814db30a599d925 = L.circleMarker(\n", | |
" [26.311171111000064, -80.8179971956485],\n", | |
" {"bubblingMouseEvents": true, "color": "red", "dashArray": null, "dashOffset": null, "fill": true, "fillColor": "red", "fillOpacity": 1, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "opacity": 1.0, "radius": 5, "stroke": true, "weight": 3}\n", | |
" ).addTo(map_d7676780473833a0fdeb4c60305d9a5c);\n", | |
" \n", | |
" \n", | |
" var circle_marker_86c53d245f7da4912b0a6a3692d753be = L.circleMarker(\n", | |
" [27.226452898410354, -80.50847148940952],\n", | |
" {"bubblingMouseEvents": true, "color": "red", "dashArray": null, "dashOffset": null, "fill": true, "fillColor": "red", "fillOpacity": 1, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "opacity": 1.0, "radius": 5, "stroke": true, "weight": 3}\n", | |
" ).addTo(map_d7676780473833a0fdeb4c60305d9a5c);\n", | |
" \n", | |
" \n", | |
" var circle_marker_03648c130ad0ab4416265be1070f4d33 = L.circleMarker(\n", | |
" [26.189330375816013, -81.6619851577331],\n", | |
" {"bubblingMouseEvents": true, "color": "red", "dashArray": null, "dashOffset": null, "fill": true, "fillColor": "red", "fillOpacity": 1, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "opacity": 1.0, "radius": 5, "stroke": true, "weight": 3}\n", | |
" ).addTo(map_d7676780473833a0fdeb4c60305d9a5c);\n", | |
" \n", | |
" \n", | |
" var circle_marker_0ab14a8c7ba58e8bae77738460fe46bb = L.circleMarker(\n", | |
" [26.248784399318982, -80.7821785668828],\n", | |
" {"bubblingMouseEvents": true, "color": "red", "dashArray": null, "dashOffset": null, "fill": true, "fillColor": "red", "fillOpacity": 1, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "opacity": 1.0, "radius": 5, "stroke": true, "weight": 3}\n", | |
" ).addTo(map_d7676780473833a0fdeb4c60305d9a5c);\n", | |
" \n", | |
" \n", | |
" var circle_marker_32dab1b867cded5a9c056386377117f6 = L.circleMarker(\n", | |
" [27.189284967955047, -81.01943246870752],\n", | |
" {"bubblingMouseEvents": true, "color": "red", "dashArray": null, "dashOffset": null, "fill": true, "fillColor": "red", "fillOpacity": 1, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "opacity": 1.0, "radius": 5, "stroke": true, "weight": 3}\n", | |
" ).addTo(map_d7676780473833a0fdeb4c60305d9a5c);\n", | |
" \n", | |
" \n", | |
" var circle_marker_93ac5e1925581b0a7496ce5cbc595b06 = L.circleMarker(\n", | |
" [27.16418198699115, -81.62240296924504],\n", | |
" {"bubblingMouseEvents": true, "color": "red", "dashArray": null, "dashOffset": null, "fill": true, "fillColor": "red", "fillOpacity": 1, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "opacity": 1.0, "radius": 5, "stroke": true, "weight": 3}\n", | |
" ).addTo(map_d7676780473833a0fdeb4c60305d9a5c);\n", | |
" \n", | |
" \n", | |
" var circle_marker_607b96772695b73159a3ef3927e81e21 = L.circleMarker(\n", | |
" [27.016995167468394, -81.61079237146735],\n", | |
" {"bubblingMouseEvents": true, "color": "red", "dashArray": null, "dashOffset": null, "fill": true, "fillColor": "red", "fillOpacity": 1, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "opacity": 1.0, "radius": 5, "stroke": true, "weight": 3}\n", | |
" ).addTo(map_d7676780473833a0fdeb4c60305d9a5c);\n", | |
" \n", | |
"</script>\n", | |
"</html>\" 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 0x1ea40c69b50>" | |
] | |
}, | |
"execution_count": 20, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"\n", | |
"m = folium.Map(location=[mlat, mlon], zoom_start=9)\n", | |
"\n", | |
"for lat, lon in points:\n", | |
"\n", | |
" folium.CircleMarker(\n", | |
" location=[lat, lon], \n", | |
" radius=5, \n", | |
" color=\"red\", \n", | |
" fill_color=\"red\", \n", | |
" fill=True,\n", | |
" fill_opacity=1\n", | |
" ).add_to(m)\n", | |
"\n", | |
"m" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"\n", | |
"<br>\n", | |
"\n", | |
"Next the `points` list needs to be represented as a GeoDataFrame, using the generated points as the geometry. We set \"crs=EPSG:4346\" representing longitude-latitude pairs. A policy_id is included as an identifier for each point. \n" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 10, | |
"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>policy_id</th>\n", | |
" <th>lat</th>\n", | |
" <th>lon</th>\n", | |
" <th>geometry</th>\n", | |
" </tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr>\n", | |
" <th>0</th>\n", | |
" <td>0000000</td>\n", | |
" <td>26.158425</td>\n", | |
" <td>-81.697845</td>\n", | |
" <td>POINT (-81.69785 26.15842)</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>1</th>\n", | |
" <td>0000001</td>\n", | |
" <td>27.308367</td>\n", | |
" <td>-80.743510</td>\n", | |
" <td>POINT (-80.74351 27.30837)</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>2</th>\n", | |
" <td>0000002</td>\n", | |
" <td>26.050160</td>\n", | |
" <td>-81.226294</td>\n", | |
" <td>POINT (-81.22629 26.05016)</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>3</th>\n", | |
" <td>0000003</td>\n", | |
" <td>26.896432</td>\n", | |
" <td>-80.682348</td>\n", | |
" <td>POINT (-80.68235 26.89643)</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>4</th>\n", | |
" <td>0000004</td>\n", | |
" <td>27.407736</td>\n", | |
" <td>-81.556209</td>\n", | |
" <td>POINT (-81.55621 27.40774)</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>5</th>\n", | |
" <td>0000005</td>\n", | |
" <td>26.551877</td>\n", | |
" <td>-80.902803</td>\n", | |
" <td>POINT (-80.90280 26.55188)</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>6</th>\n", | |
" <td>0000006</td>\n", | |
" <td>26.301071</td>\n", | |
" <td>-81.521000</td>\n", | |
" <td>POINT (-81.52100 26.30107)</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>7</th>\n", | |
" <td>0000007</td>\n", | |
" <td>27.435718</td>\n", | |
" <td>-81.499145</td>\n", | |
" <td>POINT (-81.49914 27.43572)</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>8</th>\n", | |
" <td>0000008</td>\n", | |
" <td>27.784378</td>\n", | |
" <td>-80.590765</td>\n", | |
" <td>POINT (-80.59076 27.78438)</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>9</th>\n", | |
" <td>0000009</td>\n", | |
" <td>27.635399</td>\n", | |
" <td>-81.389836</td>\n", | |
" <td>POINT (-81.38984 27.63540)</td>\n", | |
" </tr>\n", | |
" </tbody>\n", | |
"</table>\n", | |
"</div>" | |
], | |
"text/plain": [ | |
" policy_id lat lon geometry\n", | |
"0 0000000 26.158425 -81.697845 POINT (-81.69785 26.15842)\n", | |
"1 0000001 27.308367 -80.743510 POINT (-80.74351 27.30837)\n", | |
"2 0000002 26.050160 -81.226294 POINT (-81.22629 26.05016)\n", | |
"3 0000003 26.896432 -80.682348 POINT (-80.68235 26.89643)\n", | |
"4 0000004 27.407736 -81.556209 POINT (-81.55621 27.40774)\n", | |
"5 0000005 26.551877 -80.902803 POINT (-80.90280 26.55188)\n", | |
"6 0000006 26.301071 -81.521000 POINT (-81.52100 26.30107)\n", | |
"7 0000007 27.435718 -81.499145 POINT (-81.49914 27.43572)\n", | |
"8 0000008 27.784378 -80.590765 POINT (-80.59076 27.78438)\n", | |
"9 0000009 27.635399 -81.389836 POINT (-81.38984 27.63540)" | |
] | |
}, | |
"execution_count": 10, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"\n", | |
"dfpoints = pd.DataFrame({\n", | |
" \"policy_id\": [str(ii).zfill(7) for ii in range(len(points))],\n", | |
" \"lat\": rlats, \n", | |
" \"lon\": rlons, \n", | |
"})\n", | |
"\n", | |
"# Create GeoDataFrame.\n", | |
"points = gpd.GeoDataFrame(\n", | |
" dfpoints,\n", | |
" geometry=gpd.points_from_xy(dfpoints.lon, dfpoints.lat),\n", | |
" crs=\"EPSG:4326\"\n", | |
")\n", | |
"\n", | |
"points.head(10)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"\n", | |
"<br>\n", | |
"\n", | |
"With both the coastline shapefile and point data represented as GeoDataFrames, we execute the `sjoin_nearest` spatial join to get the distance from each point to the nearest coastline. First we need to set the crs to a projected coordinate system so the distances are returned in units of meters instead of degrees. Projected coordinate systems use linear units like meters or feet, which makes it easier to perform precise spatial measurements. Here we opt for the Conus Albers equal area conic projection (EPSG:5069).\n", | |
"\n", | |
"In the call to `sjoin_nearest`, we specify \"meters\" for the `distance_col` argument. This column will hold the distance to the coastline for each point in `points` in units of meters. A miles column is added after the join. \n" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 11, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"min. distance to coastline: 0.2021677265114078\n", | |
"max. distance to coastline: 65.3517194204854\n", | |
"avg. distance to coastline: 35.26204229017947\n" | |
] | |
} | |
], | |
"source": [ | |
"\n", | |
"\n", | |
"# Convert from GPS to Conus Albers. \n", | |
"points = points.to_crs(\"EPSG:5069\")\n", | |
"coast = coast.to_crs(\"EPSG:5069\")\n", | |
"\n", | |
"# Perform spatial join. Covert meters to miles. \n", | |
"gdf = gpd.sjoin_nearest(points, coast, how=\"left\", distance_col=\"meters\")\n", | |
"gdf[\"miles\"] = gdf[\"meters\"] * 0.000621371\n", | |
"\n", | |
"\n", | |
"# Get min, max and average distance to coast line.\n", | |
"min_dist = gdf.miles.min()\n", | |
"max_dist = gdf.miles.max()\n", | |
"avg_dist = gdf.miles.mean()\n", | |
"\n", | |
"print(f\"min. distance to coastline: {min_dist}\")\n", | |
"print(f\"max. distance to coastline: {max_dist}\")\n", | |
"print(f\"avg. distance to coastline: {avg_dist}\")\n" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"\n", | |
"<br>\n", | |
"\n", | |
"### Rate Group Based on Distance to Coastline\n", | |
"\n", | |
"Let's imagine a hypothetical rating plan that used the following distances from the coastline to determine rates:\n", | |
"\n", | |
"* 0 - 5 miles: very high risk\n", | |
"* 5 - 25 miles: high risk\n", | |
"* 25 - 50 miles: medium risk\n", | |
"* greater than 50 miles: low risk\n", | |
"\n", | |
"<br>\n", | |
"\n", | |
"A rolling join via `merge_asof` can be used to select the last row in the right DataFrame (group thresholds) whose `on` key is less than or equal to `gdf`'s key, which will be \"miles\" in both DataFrames. " | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 13, | |
"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>policy_id</th>\n", | |
" <th>lat</th>\n", | |
" <th>lon</th>\n", | |
" <th>geometry</th>\n", | |
" <th>index_right</th>\n", | |
" <th>NAME</th>\n", | |
" <th>MTFCC</th>\n", | |
" <th>meters</th>\n", | |
" <th>miles</th>\n", | |
" <th>risk</th>\n", | |
" </tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr>\n", | |
" <th>0</th>\n", | |
" <td>0000016</td>\n", | |
" <td>27.972984</td>\n", | |
" <td>-80.506574</td>\n", | |
" <td>POINT (1523130.445 669355.714)</td>\n", | |
" <td>176</td>\n", | |
" <td>Atlantic</td>\n", | |
" <td>L4150</td>\n", | |
" <td>325.357518</td>\n", | |
" <td>0.202168</td>\n", | |
" <td>very high</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>1</th>\n", | |
" <td>0000000</td>\n", | |
" <td>26.158425</td>\n", | |
" <td>-81.697845</td>\n", | |
" <td>POINT (1436906.154 453403.777)</td>\n", | |
" <td>2813</td>\n", | |
" <td>Gulf</td>\n", | |
" <td>L4150</td>\n", | |
" <td>11202.118941</td>\n", | |
" <td>6.960672</td>\n", | |
" <td>high</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>2</th>\n", | |
" <td>0000015</td>\n", | |
" <td>26.383000</td>\n", | |
" <td>-81.709033</td>\n", | |
" <td>POINT (1432093.896 477632.102)</td>\n", | |
" <td>2817</td>\n", | |
" <td>Gulf</td>\n", | |
" <td>L4150</td>\n", | |
" <td>14923.236842</td>\n", | |
" <td>9.272867</td>\n", | |
" <td>high</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>3</th>\n", | |
" <td>0000045</td>\n", | |
" <td>26.189330</td>\n", | |
" <td>-81.661985</td>\n", | |
" <td>POINT (1439971.288 457302.910)</td>\n", | |
" <td>2813</td>\n", | |
" <td>Gulf</td>\n", | |
" <td>L4150</td>\n", | |
" <td>15293.117462</td>\n", | |
" <td>9.502700</td>\n", | |
" <td>high</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>4</th>\n", | |
" <td>0000008</td>\n", | |
" <td>27.784378</td>\n", | |
" <td>-80.590765</td>\n", | |
" <td>POINT (1518287.914 647463.126)</td>\n", | |
" <td>211</td>\n", | |
" <td>Atlantic</td>\n", | |
" <td>L4150</td>\n", | |
" <td>16411.894842</td>\n", | |
" <td>10.197876</td>\n", | |
" <td>high</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>5</th>\n", | |
" <td>0000037</td>\n", | |
" <td>26.366454</td>\n", | |
" <td>-81.662935</td>\n", | |
" <td>POINT (1436951.567 476529.880)</td>\n", | |
" <td>2813</td>\n", | |
" <td>Gulf</td>\n", | |
" <td>L4150</td>\n", | |
" <td>18666.181729</td>\n", | |
" <td>11.598624</td>\n", | |
" <td>high</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>6</th>\n", | |
" <td>0000030</td>\n", | |
" <td>27.473270</td>\n", | |
" <td>-80.505108</td>\n", | |
" <td>POINT (1532223.857 614971.148)</td>\n", | |
" <td>10</td>\n", | |
" <td>Atlantic</td>\n", | |
" <td>L4150</td>\n", | |
" <td>20054.854039</td>\n", | |
" <td>12.461505</td>\n", | |
" <td>high</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>7</th>\n", | |
" <td>0000017</td>\n", | |
" <td>26.086354</td>\n", | |
" <td>-81.489777</td>\n", | |
" <td>POINT (1458852.303 448749.086)</td>\n", | |
" <td>2813</td>\n", | |
" <td>Gulf</td>\n", | |
" <td>L4150</td>\n", | |
" <td>24281.095373</td>\n", | |
" <td>15.087569</td>\n", | |
" <td>high</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>8</th>\n", | |
" <td>0000044</td>\n", | |
" <td>27.226453</td>\n", | |
" <td>-80.508471</td>\n", | |
" <td>POINT (1536309.469 588071.657)</td>\n", | |
" <td>10</td>\n", | |
" <td>Atlantic</td>\n", | |
" <td>L4150</td>\n", | |
" <td>29965.595016</td>\n", | |
" <td>18.619752</td>\n", | |
" <td>high</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>9</th>\n", | |
" <td>0000006</td>\n", | |
" <td>26.301071</td>\n", | |
" <td>-81.521000</td>\n", | |
" <td>POINT (1452157.748 471584.247)</td>\n", | |
" <td>2813</td>\n", | |
" <td>Gulf</td>\n", | |
" <td>L4150</td>\n", | |
" <td>30913.766047</td>\n", | |
" <td>19.208918</td>\n", | |
" <td>high</td>\n", | |
" </tr>\n", | |
" </tbody>\n", | |
"</table>\n", | |
"</div>" | |
], | |
"text/plain": [ | |
" policy_id lat lon geometry \\\n", | |
"0 0000016 27.972984 -80.506574 POINT (1523130.445 669355.714) \n", | |
"1 0000000 26.158425 -81.697845 POINT (1436906.154 453403.777) \n", | |
"2 0000015 26.383000 -81.709033 POINT (1432093.896 477632.102) \n", | |
"3 0000045 26.189330 -81.661985 POINT (1439971.288 457302.910) \n", | |
"4 0000008 27.784378 -80.590765 POINT (1518287.914 647463.126) \n", | |
"5 0000037 26.366454 -81.662935 POINT (1436951.567 476529.880) \n", | |
"6 0000030 27.473270 -80.505108 POINT (1532223.857 614971.148) \n", | |
"7 0000017 26.086354 -81.489777 POINT (1458852.303 448749.086) \n", | |
"8 0000044 27.226453 -80.508471 POINT (1536309.469 588071.657) \n", | |
"9 0000006 26.301071 -81.521000 POINT (1452157.748 471584.247) \n", | |
"\n", | |
" index_right NAME MTFCC meters miles risk \n", | |
"0 176 Atlantic L4150 325.357518 0.202168 very high \n", | |
"1 2813 Gulf L4150 11202.118941 6.960672 high \n", | |
"2 2817 Gulf L4150 14923.236842 9.272867 high \n", | |
"3 2813 Gulf L4150 15293.117462 9.502700 high \n", | |
"4 211 Atlantic L4150 16411.894842 10.197876 high \n", | |
"5 2813 Gulf L4150 18666.181729 11.598624 high \n", | |
"6 10 Atlantic L4150 20054.854039 12.461505 high \n", | |
"7 2813 Gulf L4150 24281.095373 15.087569 high \n", | |
"8 10 Atlantic L4150 29965.595016 18.619752 high \n", | |
"9 2813 Gulf L4150 30913.766047 19.208918 high " | |
] | |
}, | |
"execution_count": 13, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"\n", | |
"# Create dfgroups DataFrame. \n", | |
"dfgroups = pd.DataFrame({\n", | |
" \"risk\": [\"very high\", \"high\", \"medium\", \"low\"],\n", | |
" \"miles\": [0., 5., 25., 50.]\n", | |
"})\n", | |
"\n", | |
"# Assign risk group to each policy location.\n", | |
"gdf = gdf.sort_values(\"miles\", ascending=True)\n", | |
"gdf = pd.merge_asof(gdf, dfgroups, on=\"miles\", direction=\"backward\")\n", | |
"\n", | |
"gdf.head(10)\n" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"\n", | |
"<br> \n", | |
"\n", | |
"Counting the number of policies per risk group:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 14, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"risk\n", | |
"high 12\n", | |
"low 10\n", | |
"medium 27\n", | |
"very high 1\n", | |
"Name: count, dtype: int64" | |
] | |
}, | |
"execution_count": 14, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"\n", | |
"gdf.risk.value_counts().sort_index()\n" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"\n", | |
"<br>\n", | |
"\n", | |
"Finally, we can assign each risk a different color an visualize the resulting risk groups with folium:\n" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 16, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/html": [ | |
"<div style=\"width:100%;\"><div style=\"position:relative;width:100%;height:0;padding-bottom:60%;\"><span style=\"color:#565656\">Make this Notebook Trusted to load map: File -> Trust Notebook</span><iframe srcdoc=\"<!DOCTYPE html>\n", | |
"<html>\n", | |
"<head>\n", | |
" \n", | |
" <meta http-equiv="content-type" content="text/html; charset=UTF-8" />\n", | |
" \n", | |
" <script>\n", | |
" L_NO_TOUCH = false;\n", | |
" L_DISABLE_3D = false;\n", | |
" </script>\n", | |
" \n", | |
" <style>html, body {width: 100%;height: 100%;margin: 0;padding: 0;}</style>\n", | |
" <style>#map {position:absolute;top:0;bottom:0;right:0;left:0;}</style>\n", | |
" <script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/leaflet.js"></script>\n", | |
" <script src="https://code.jquery.com/jquery-3.7.1.min.js"></script>\n", | |
" <script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js"></script>\n", | |
" <script src="https://cdnjs.cloudflare.com/ajax/libs/Leaflet.awesome-markers/2.0.2/leaflet.awesome-markers.js"></script>\n", | |
" <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/leaflet.css"/>\n", | |
" <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css"/>\n", | |
" <link rel="stylesheet" href="https://netdna.bootstrapcdn.com/bootstrap/3.0.0/css/bootstrap.min.css"/>\n", | |
" <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fortawesome/[email protected]/css/all.min.css"/>\n", | |
" <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/Leaflet.awesome-markers/2.0.2/leaflet.awesome-markers.css"/>\n", | |
" <link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/python-visualization/folium/folium/templates/leaflet.awesome.rotate.min.css"/>\n", | |
" \n", | |
" <meta name="viewport" content="width=device-width,\n", | |
" initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />\n", | |
" <style>\n", | |
" #map_29082c1424ec2093b56fc1522ce2dcc6 {\n", | |
" position: relative;\n", | |
" width: 100.0%;\n", | |
" height: 100.0%;\n", | |
" left: 0.0%;\n", | |
" top: 0.0%;\n", | |
" }\n", | |
" .leaflet-container { font-size: 1rem; }\n", | |
" </style>\n", | |
" \n", | |
"</head>\n", | |
"<body>\n", | |
" \n", | |
" \n", | |
" <div class="folium-map" id="map_29082c1424ec2093b56fc1522ce2dcc6" ></div>\n", | |
" \n", | |
"</body>\n", | |
"<script>\n", | |
" \n", | |
" \n", | |
" var map_29082c1424ec2093b56fc1522ce2dcc6 = L.map(\n", | |
" "map_29082c1424ec2093b56fc1522ce2dcc6",\n", | |
" {\n", | |
" center: [27.0, -81.125],\n", | |
" crs: L.CRS.EPSG3857,\n", | |
" zoom: 8,\n", | |
" zoomControl: true,\n", | |
" preferCanvas: false,\n", | |
" }\n", | |
" );\n", | |
"\n", | |
" \n", | |
"\n", | |
" \n", | |
" \n", | |
" var tile_layer_0fb462e323b502f28235f67f2267e700 = L.tileLayer(\n", | |
" "https://tile.openstreetmap.org/{z}/{x}/{y}.png",\n", | |
" {"attribution": "\\u0026copy; \\u003ca href=\\"https://www.openstreetmap.org/copyright\\"\\u003eOpenStreetMap\\u003c/a\\u003e contributors", "detectRetina": false, "maxNativeZoom": 19, "maxZoom": 19, "minZoom": 0, "noWrap": false, "opacity": 1, "subdomains": "abc", "tms": false}\n", | |
" );\n", | |
" \n", | |
" \n", | |
" tile_layer_0fb462e323b502f28235f67f2267e700.addTo(map_29082c1424ec2093b56fc1522ce2dcc6);\n", | |
" \n", | |
" \n", | |
" var circle_marker_db9ad8ed1cf4a406b4a03645a920b037 = L.circleMarker(\n", | |
" [27.972984413059, -80.50657443311286],\n", | |
" {"bubblingMouseEvents": true, "color": "#f40002", "dashArray": null, "dashOffset": null, "fill": true, "fillColor": "#f40002", "fillOpacity": 1, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "opacity": 1.0, "radius": 6, "stroke": true, "weight": 3}\n", | |
" ).addTo(map_29082c1424ec2093b56fc1522ce2dcc6);\n", | |
" \n", | |
" \n", | |
" var circle_marker_7c0440a810ce1519cf157d7326871edc = L.circleMarker(\n", | |
" [26.15842498103677, -81.6978452754149],\n", | |
" {"bubblingMouseEvents": true, "color": "#ff721f", "dashArray": null, "dashOffset": null, "fill": true, "fillColor": "#ff721f", "fillOpacity": 1, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "opacity": 1.0, "radius": 6, "stroke": true, "weight": 3}\n", | |
" ).addTo(map_29082c1424ec2093b56fc1522ce2dcc6);\n", | |
" \n", | |
" \n", | |
" var circle_marker_a155da2c6ece16a809864b949c199005 = L.circleMarker(\n", | |
" [26.382999780154904, -81.70903306152387],\n", | |
" {"bubblingMouseEvents": true, "color": "#ff721f", "dashArray": null, "dashOffset": null, "fill": true, "fillColor": "#ff721f", "fillOpacity": 1, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "opacity": 1.0, "radius": 6, "stroke": true, "weight": 3}\n", | |
" ).addTo(map_29082c1424ec2093b56fc1522ce2dcc6);\n", | |
" \n", | |
" \n", | |
" var circle_marker_f85637d697a4c7adaf99bc23ad4be907 = L.circleMarker(\n", | |
" [26.189330375816013, -81.6619851577331],\n", | |
" {"bubblingMouseEvents": true, "color": "#ff721f", "dashArray": null, "dashOffset": null, "fill": true, "fillColor": "#ff721f", "fillOpacity": 1, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "opacity": 1.0, "radius": 6, "stroke": true, "weight": 3}\n", | |
" ).addTo(map_29082c1424ec2093b56fc1522ce2dcc6);\n", | |
" \n", | |
" \n", | |
" var circle_marker_04734b1eac33c291c078f64947782e12 = L.circleMarker(\n", | |
" [27.784378345442054, -80.59076499724968],\n", | |
" {"bubblingMouseEvents": true, "color": "#ff721f", "dashArray": null, "dashOffset": null, "fill": true, "fillColor": "#ff721f", "fillOpacity": 1, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "opacity": 1.0, "radius": 6, "stroke": true, "weight": 3}\n", | |
" ).addTo(map_29082c1424ec2093b56fc1522ce2dcc6);\n", | |
" \n", | |
" \n", | |
" var circle_marker_ab46e789f44da694e23d74d8f62f2a8c = L.circleMarker(\n", | |
" [26.366453559477833, -81.66293509555179],\n", | |
" {"bubblingMouseEvents": true, "color": "#ff721f", "dashArray": null, "dashOffset": null, "fill": true, "fillColor": "#ff721f", "fillOpacity": 1, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "opacity": 1.0, "radius": 6, "stroke": true, "weight": 3}\n", | |
" ).addTo(map_29082c1424ec2093b56fc1522ce2dcc6);\n", | |
" \n", | |
" \n", | |
" var circle_marker_9f1f874ced7d840743047b5d91c7b122 = L.circleMarker(\n", | |
" [27.473269702793658, -80.50510790437552],\n", | |
" {"bubblingMouseEvents": true, "color": "#ff721f", "dashArray": null, "dashOffset": null, "fill": true, "fillColor": "#ff721f", "fillOpacity": 1, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "opacity": 1.0, "radius": 6, "stroke": true, "weight": 3}\n", | |
" ).addTo(map_29082c1424ec2093b56fc1522ce2dcc6);\n", | |
" \n", | |
" \n", | |
" var circle_marker_57fcdd70b4a82445cad4d08c5a40d9dd = L.circleMarker(\n", | |
" [26.086354128867725, -81.48977717606184],\n", | |
" {"bubblingMouseEvents": true, "color": "#ff721f", "dashArray": null, "dashOffset": null, "fill": true, "fillColor": "#ff721f", "fillOpacity": 1, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "opacity": 1.0, "radius": 6, "stroke": true, "weight": 3}\n", | |
" ).addTo(map_29082c1424ec2093b56fc1522ce2dcc6);\n", | |
" \n", | |
" \n", | |
" var circle_marker_0682fca12435ea7beee6c0b259f80404 = L.circleMarker(\n", | |
" [27.226452898410354, -80.50847148940952],\n", | |
" {"bubblingMouseEvents": true, "color": "#ff721f", "dashArray": null, "dashOffset": null, "fill": true, "fillColor": "#ff721f", "fillOpacity": 1, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "opacity": 1.0, "radius": 6, "stroke": true, "weight": 3}\n", | |
" ).addTo(map_29082c1424ec2093b56fc1522ce2dcc6);\n", | |
" \n", | |
" \n", | |
" var circle_marker_9851392ff309b499c8844df5ef4bddcc = L.circleMarker(\n", | |
" [26.301071098731754, -81.52100045189212],\n", | |
" {"bubblingMouseEvents": true, "color": "#ff721f", "dashArray": null, "dashOffset": null, "fill": true, "fillColor": "#ff721f", "fillOpacity": 1, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "opacity": 1.0, "radius": 6, "stroke": true, "weight": 3}\n", | |
" ).addTo(map_29082c1424ec2093b56fc1522ce2dcc6);\n", | |
" \n", | |
" \n", | |
" var circle_marker_36c3a71a25634ddf31c9e72bfc71b4dd = L.circleMarker(\n", | |
" [26.544773024554832, -81.60667452193859],\n", | |
" {"bubblingMouseEvents": true, "color": "#ff721f", "dashArray": null, "dashOffset": null, "fill": true, "fillColor": "#ff721f", "fillOpacity": 1, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "opacity": 1.0, "radius": 6, "stroke": true, "weight": 3}\n", | |
" ).addTo(map_29082c1424ec2093b56fc1522ce2dcc6);\n", | |
" \n", | |
" \n", | |
" var circle_marker_b95ee59fe04cc9befebbd68fc54c837d = L.circleMarker(\n", | |
" [26.050159830178664, -81.22629395965097],\n", | |
" {"bubblingMouseEvents": true, "color": "#ff721f", "dashArray": null, "dashOffset": null, "fill": true, "fillColor": "#ff721f", "fillOpacity": 1, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "opacity": 1.0, "radius": 6, "stroke": true, "weight": 3}\n", | |
" ).addTo(map_29082c1424ec2093b56fc1522ce2dcc6);\n", | |
" \n", | |
" \n", | |
" var circle_marker_062a54f94045384cf2a56fe0724c3f16 = L.circleMarker(\n", | |
" [26.24664396062321, -81.43299865566368],\n", | |
" {"bubblingMouseEvents": true, "color": "#ff721f", "dashArray": null, "dashOffset": null, "fill": true, "fillColor": "#ff721f", "fillOpacity": 1, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "opacity": 1.0, "radius": 6, "stroke": true, "weight": 3}\n", | |
" ).addTo(map_29082c1424ec2093b56fc1522ce2dcc6);\n", | |
" \n", | |
" \n", | |
" var circle_marker_d4a9de8bc638ce234f6ab1e714374608 = L.circleMarker(\n", | |
" [26.943671120744057, -80.51934697293223],\n", | |
" {"bubblingMouseEvents": true, "color": "#fafc15", "dashArray": null, "dashOffset": null, "fill": true, "fillColor": "#fafc15", "fillOpacity": 1, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "opacity": 1.0, "radius": 6, "stroke": true, "weight": 3}\n", | |
" ).addTo(map_29082c1424ec2093b56fc1522ce2dcc6);\n", | |
" \n", | |
" \n", | |
" var circle_marker_b011bc57fc1cddcf927a43c0e34d2606 = L.circleMarker(\n", | |
" [26.19773048060356, -81.31384553050141],\n", | |
" {"bubblingMouseEvents": true, "color": "#fafc15", "dashArray": null, "dashOffset": null, "fill": true, "fillColor": "#fafc15", "fillOpacity": 1, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "opacity": 1.0, "radius": 6, "stroke": true, "weight": 3}\n", | |
" ).addTo(map_29082c1424ec2093b56fc1522ce2dcc6);\n", | |
" \n", | |
" \n", | |
" var circle_marker_95e42b137474ee4a7bb193eeb6e759c8 = L.circleMarker(\n", | |
" [26.131355757954836, -81.16027753441861],\n", | |
" {"bubblingMouseEvents": true, "color": "#fafc15", "dashArray": null, "dashOffset": null, "fill": true, "fillColor": "#fafc15", "fillOpacity": 1, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "opacity": 1.0, "radius": 6, "stroke": true, "weight": 3}\n", | |
" ).addTo(map_29082c1424ec2093b56fc1522ce2dcc6);\n", | |
" \n", | |
" \n", | |
" var circle_marker_4c5be03d4eef5c80bc115b82e0246f12 = L.circleMarker(\n", | |
" [26.319682526771178, -80.52723729475458],\n", | |
" {"bubblingMouseEvents": true, "color": "#fafc15", "dashArray": null, "dashOffset": null, "fill": true, "fillColor": "#fafc15", "fillOpacity": 1, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "opacity": 1.0, "radius": 6, "stroke": true, "weight": 3}\n", | |
" ).addTo(map_29082c1424ec2093b56fc1522ce2dcc6);\n", | |
" \n", | |
" \n", | |
" var circle_marker_5bac831ba8143e867cdbaa9100a88ba1 = L.circleMarker(\n", | |
" [26.694221446702628, -81.53376936951858],\n", | |
" {"bubblingMouseEvents": true, "color": "#fafc15", "dashArray": null, "dashOffset": null, "fill": true, "fillColor": "#fafc15", "fillOpacity": 1, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "opacity": 1.0, "radius": 6, "stroke": true, "weight": 3}\n", | |
" ).addTo(map_29082c1424ec2093b56fc1522ce2dcc6);\n", | |
" \n", | |
" \n", | |
" var circle_marker_301485f518974a90d63e3f866e09b95c = L.circleMarker(\n", | |
" [26.343132637377927, -81.35686888035839],\n", | |
" {"bubblingMouseEvents": true, "color": "#fafc15", "dashArray": null, "dashOffset": null, "fill": true, "fillColor": "#fafc15", "fillOpacity": 1, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "opacity": 1.0, "radius": 6, "stroke": true, "weight": 3}\n", | |
" ).addTo(map_29082c1424ec2093b56fc1522ce2dcc6);\n", | |
" \n", | |
" \n", | |
" var circle_marker_2706a87d925b21255261614c3c6015e6 = L.circleMarker(\n", | |
" [26.862971977202136, -80.54717925180627],\n", | |
" {"bubblingMouseEvents": true, "color": "#fafc15", "dashArray": null, "dashOffset": null, "fill": true, "fillColor": "#fafc15", "fillOpacity": 1, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "opacity": 1.0, "radius": 6, "stroke": true, "weight": 3}\n", | |
" ).addTo(map_29082c1424ec2093b56fc1522ce2dcc6);\n", | |
" \n", | |
" \n", | |
" var circle_marker_a2ef6dc525e05d3e70d348cf703d67eb = L.circleMarker(\n", | |
" [27.308367243835498, -80.74351022614646],\n", | |
" {"bubblingMouseEvents": true, "color": "#fafc15", "dashArray": null, "dashOffset": null, "fill": true, "fillColor": "#fafc15", "fillOpacity": 1, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "opacity": 1.0, "radius": 6, "stroke": true, "weight": 3}\n", | |
" ).addTo(map_29082c1424ec2093b56fc1522ce2dcc6);\n", | |
" \n", | |
" \n", | |
" var circle_marker_1f7cae922e1a963aae6f859bfc5bdb63 = L.circleMarker(\n", | |
" [26.076820898509965, -81.02010416275705],\n", | |
" {"bubblingMouseEvents": true, "color": "#fafc15", "dashArray": null, "dashOffset": null, "fill": true, "fillColor": "#fafc15", "fillOpacity": 1, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "opacity": 1.0, "radius": 6, "stroke": true, "weight": 3}\n", | |
" ).addTo(map_29082c1424ec2093b56fc1522ce2dcc6);\n", | |
" \n", | |
" \n", | |
" var circle_marker_f90649fe2f7602df97f8a303aa7d7804 = L.circleMarker(\n", | |
" [27.565561426877956, -80.86111841233041],\n", | |
" {"bubblingMouseEvents": true, "color": "#fafc15", "dashArray": null, "dashOffset": null, "fill": true, "fillColor": "#fafc15", "fillOpacity": 1, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "opacity": 1.0, "radius": 6, "stroke": true, "weight": 3}\n", | |
" ).addTo(map_29082c1424ec2093b56fc1522ce2dcc6);\n", | |
" \n", | |
" \n", | |
" var circle_marker_6f15947584b3d8c30a8968ebcd1d8e5f = L.circleMarker(\n", | |
" [27.98142795111799, -81.09169770076494],\n", | |
" {"bubblingMouseEvents": true, "color": "#fafc15", "dashArray": null, "dashOffset": null, "fill": true, "fillColor": "#fafc15", "fillOpacity": 1, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "opacity": 1.0, "radius": 6, "stroke": true, "weight": 3}\n", | |
" ).addTo(map_29082c1424ec2093b56fc1522ce2dcc6);\n", | |
" \n", | |
" \n", | |
" var circle_marker_d69edcec18f3b515dd98cef336bc7def = L.circleMarker(\n", | |
" [27.82472127183081, -81.03218135189428],\n", | |
" {"bubblingMouseEvents": true, "color": "#fafc15", "dashArray": null, "dashOffset": null, "fill": true, "fillColor": "#fafc15", "fillOpacity": 1, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "opacity": 1.0, "radius": 6, "stroke": true, "weight": 3}\n", | |
" ).addTo(map_29082c1424ec2093b56fc1522ce2dcc6);\n", | |
" \n", | |
" \n", | |
" var circle_marker_1fc73a01fc79b13792bc6e4766a29546 = L.circleMarker(\n", | |
" [26.307063400374936, -81.27626966439352],\n", | |
" {"bubblingMouseEvents": true, "color": "#fafc15", "dashArray": null, "dashOffset": null, "fill": true, "fillColor": "#fafc15", "fillOpacity": 1, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "opacity": 1.0, "radius": 6, "stroke": true, "weight": 3}\n", | |
" ).addTo(map_29082c1424ec2093b56fc1522ce2dcc6);\n", | |
" \n", | |
" \n", | |
" var circle_marker_ca7ddfeaba6c755b32c1c1405c401974 = L.circleMarker(\n", | |
" [26.896432196124945, -80.6823476427752],\n", | |
" {"bubblingMouseEvents": true, "color": "#fafc15", "dashArray": null, "dashOffset": null, "fill": true, "fillColor": "#fafc15", "fillOpacity": 1, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "opacity": 1.0, "radius": 6, "stroke": true, "weight": 3}\n", | |
" ).addTo(map_29082c1424ec2093b56fc1522ce2dcc6);\n", | |
" \n", | |
" \n", | |
" var circle_marker_085223e524460942c4c47d81d33d6d29 = L.circleMarker(\n", | |
" [26.61547413746954, -81.33572363043359],\n", | |
" {"bubblingMouseEvents": true, "color": "#fafc15", "dashArray": null, "dashOffset": null, "fill": true, "fillColor": "#fafc15", "fillOpacity": 1, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "opacity": 1.0, "radius": 6, "stroke": true, "weight": 3}\n", | |
" ).addTo(map_29082c1424ec2093b56fc1522ce2dcc6);\n", | |
" \n", | |
" \n", | |
" var circle_marker_aad6b0fb38a46610db6a420afd5c1026 = L.circleMarker(\n", | |
" [27.991454895701796, -81.17887100872782],\n", | |
" {"bubblingMouseEvents": true, "color": "#fafc15", "dashArray": null, "dashOffset": null, "fill": true, "fillColor": "#fafc15", "fillOpacity": 1, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "opacity": 1.0, "radius": 6, "stroke": true, "weight": 3}\n", | |
" ).addTo(map_29082c1424ec2093b56fc1522ce2dcc6);\n", | |
" \n", | |
" \n", | |
" var circle_marker_7b25be7645595a45ba5a6623d1c1db1c = L.circleMarker(\n", | |
" [26.78781864252158, -80.66418638533959],\n", | |
" {"bubblingMouseEvents": true, "color": "#fafc15", "dashArray": null, "dashOffset": null, "fill": true, "fillColor": "#fafc15", "fillOpacity": 1, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "opacity": 1.0, "radius": 6, "stroke": true, "weight": 3}\n", | |
" ).addTo(map_29082c1424ec2093b56fc1522ce2dcc6);\n", | |
" \n", | |
" \n", | |
" var circle_marker_eb4178c8ddae9cf2fa7e7ececf9b3c4d = L.circleMarker(\n", | |
" [26.713303385914497, -80.69627570716136],\n", | |
" {"bubblingMouseEvents": true, "color": "#fafc15", "dashArray": null, "dashOffset": null, "fill": true, "fillColor": "#fafc15", "fillOpacity": 1, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "opacity": 1.0, "radius": 6, "stroke": true, "weight": 3}\n", | |
" ).addTo(map_29082c1424ec2093b56fc1522ce2dcc6);\n", | |
" \n", | |
" \n", | |
" var circle_marker_6f202a0d012de21ced2a8865d650edbd = L.circleMarker(\n", | |
" [27.016995167468394, -81.61079237146735],\n", | |
" {"bubblingMouseEvents": true, "color": "#fafc15", "dashArray": null, "dashOffset": null, "fill": true, "fillColor": "#fafc15", "fillOpacity": 1, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "opacity": 1.0, "radius": 6, "stroke": true, "weight": 3}\n", | |
" ).addTo(map_29082c1424ec2093b56fc1522ce2dcc6);\n", | |
" \n", | |
" \n", | |
" var circle_marker_8586fa43a0b74a532ab34dc268a27d4c = L.circleMarker(\n", | |
" [26.248784399318982, -80.7821785668828],\n", | |
" {"bubblingMouseEvents": true, "color": "#fafc15", "dashArray": null, "dashOffset": null, "fill": true, "fillColor": "#fafc15", "fillOpacity": 1, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "opacity": 1.0, "radius": 6, "stroke": true, "weight": 3}\n", | |
" ).addTo(map_29082c1424ec2093b56fc1522ce2dcc6);\n", | |
" \n", | |
" \n", | |
" var circle_marker_6532998a48e855b36ba67c90fa5b5540 = L.circleMarker(\n", | |
" [26.81413637848975, -81.32644612584131],\n", | |
" {"bubblingMouseEvents": true, "color": "#fafc15", "dashArray": null, "dashOffset": null, "fill": true, "fillColor": "#fafc15", "fillOpacity": 1, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "opacity": 1.0, "radius": 6, "stroke": true, "weight": 3}\n", | |
" ).addTo(map_29082c1424ec2093b56fc1522ce2dcc6);\n", | |
" \n", | |
" \n", | |
" var circle_marker_f898b2ba052120c1ab9c6e74e783db05 = L.circleMarker(\n", | |
" [26.311171111000064, -80.8179971956485],\n", | |
" {"bubblingMouseEvents": true, "color": "#fafc15", "dashArray": null, "dashOffset": null, "fill": true, "fillColor": "#fafc15", "fillOpacity": 1, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "opacity": 1.0, "radius": 6, "stroke": true, "weight": 3}\n", | |
" ).addTo(map_29082c1424ec2093b56fc1522ce2dcc6);\n", | |
" \n", | |
" \n", | |
" var circle_marker_8a8d69ef00fd8a4230831fc924789d0b = L.circleMarker(\n", | |
" [27.714852856581068, -81.64493695441304],\n", | |
" {"bubblingMouseEvents": true, "color": "#fafc15", "dashArray": null, "dashOffset": null, "fill": true, "fillColor": "#fafc15", "fillOpacity": 1, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "opacity": 1.0, "radius": 6, "stroke": true, "weight": 3}\n", | |
" ).addTo(map_29082c1424ec2093b56fc1522ce2dcc6);\n", | |
" \n", | |
" \n", | |
" var circle_marker_7ebaf04246066cd2d403aedb2e3518fc = L.circleMarker(\n", | |
" [27.16418198699115, -81.62240296924504],\n", | |
" {"bubblingMouseEvents": true, "color": "#fafc15", "dashArray": null, "dashOffset": null, "fill": true, "fillColor": "#fafc15", "fillOpacity": 1, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "opacity": 1.0, "radius": 6, "stroke": true, "weight": 3}\n", | |
" ).addTo(map_29082c1424ec2093b56fc1522ce2dcc6);\n", | |
" \n", | |
" \n", | |
" var circle_marker_46f58c868d0773ed2b6d8e294817a676 = L.circleMarker(\n", | |
" [26.605717123010912, -81.13339074943397],\n", | |
" {"bubblingMouseEvents": true, "color": "#fafc15", "dashArray": null, "dashOffset": null, "fill": true, "fillColor": "#fafc15", "fillOpacity": 1, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "opacity": 1.0, "radius": 6, "stroke": true, "weight": 3}\n", | |
" ).addTo(map_29082c1424ec2093b56fc1522ce2dcc6);\n", | |
" \n", | |
" \n", | |
" var circle_marker_26d9ab010bc53813264d44874b02b474 = L.circleMarker(\n", | |
" [27.189284967955047, -81.01943246870752],\n", | |
" {"bubblingMouseEvents": true, "color": "#fafc15", "dashArray": null, "dashOffset": null, "fill": true, "fillColor": "#fafc15", "fillOpacity": 1, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "opacity": 1.0, "radius": 6, "stroke": true, "weight": 3}\n", | |
" ).addTo(map_29082c1424ec2093b56fc1522ce2dcc6);\n", | |
" \n", | |
" \n", | |
" var circle_marker_6da1436dcf270c4e7e9f8899f0b14b7d = L.circleMarker(\n", | |
" [26.365577838913776, -80.8990291114624],\n", | |
" {"bubblingMouseEvents": true, "color": "#fafc15", "dashArray": null, "dashOffset": null, "fill": true, "fillColor": "#fafc15", "fillOpacity": 1, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "opacity": 1.0, "radius": 6, "stroke": true, "weight": 3}\n", | |
" ).addTo(map_29082c1424ec2093b56fc1522ce2dcc6);\n", | |
" \n", | |
" \n", | |
" var circle_marker_cd3d5646e706b0221d43eaec9d7ad6ea = L.circleMarker(\n", | |
" [26.886457616788025, -80.91721728171257],\n", | |
" {"bubblingMouseEvents": true, "color": "#268a6d", "dashArray": null, "dashOffset": null, "fill": true, "fillColor": "#268a6d", "fillOpacity": 1, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "opacity": 1.0, "radius": 6, "stroke": true, "weight": 3}\n", | |
" ).addTo(map_29082c1424ec2093b56fc1522ce2dcc6);\n", | |
" \n", | |
" \n", | |
" var circle_marker_830e1790e0eaef46775e71201c1eb88a = L.circleMarker(\n", | |
" [26.55187691648845, -80.90280316359555],\n", | |
" {"bubblingMouseEvents": true, "color": "#268a6d", "dashArray": null, "dashOffset": null, "fill": true, "fillColor": "#268a6d", "fillOpacity": 1, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "opacity": 1.0, "radius": 6, "stroke": true, "weight": 3}\n", | |
" ).addTo(map_29082c1424ec2093b56fc1522ce2dcc6);\n", | |
" \n", | |
" \n", | |
" var circle_marker_d6ec9574f80da05bb0a43f04df202c6f = L.circleMarker(\n", | |
" [27.413800924899405, -81.22869767203825],\n", | |
" {"bubblingMouseEvents": true, "color": "#268a6d", "dashArray": null, "dashOffset": null, "fill": true, "fillColor": "#268a6d", "fillOpacity": 1, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "opacity": 1.0, "radius": 6, "stroke": true, "weight": 3}\n", | |
" ).addTo(map_29082c1424ec2093b56fc1522ce2dcc6);\n", | |
" \n", | |
" \n", | |
" var circle_marker_f48de47d17e17a8ec97399e66bb927ea = L.circleMarker(\n", | |
" [26.9126301314854, -81.02473504499652],\n", | |
" {"bubblingMouseEvents": true, "color": "#268a6d", "dashArray": null, "dashOffset": null, "fill": true, "fillColor": "#268a6d", "fillOpacity": 1, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "opacity": 1.0, "radius": 6, "stroke": true, "weight": 3}\n", | |
" ).addTo(map_29082c1424ec2093b56fc1522ce2dcc6);\n", | |
" \n", | |
" \n", | |
" var circle_marker_83d9ec80a0f9069e1b3bcb955767f6a6 = L.circleMarker(\n", | |
" [27.635398626773437, -81.3898362844697],\n", | |
" {"bubblingMouseEvents": true, "color": "#268a6d", "dashArray": null, "dashOffset": null, "fill": true, "fillColor": "#268a6d", "fillOpacity": 1, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "opacity": 1.0, "radius": 6, "stroke": true, "weight": 3}\n", | |
" ).addTo(map_29082c1424ec2093b56fc1522ce2dcc6);\n", | |
" \n", | |
" \n", | |
" var circle_marker_0a3ef6a15126c16032bc677c831027c5 = L.circleMarker(\n", | |
" [27.40773608152318, -81.55620947759367],\n", | |
" {"bubblingMouseEvents": true, "color": "#268a6d", "dashArray": null, "dashOffset": null, "fill": true, "fillColor": "#268a6d", "fillOpacity": 1, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "opacity": 1.0, "radius": 6, "stroke": true, "weight": 3}\n", | |
" ).addTo(map_29082c1424ec2093b56fc1522ce2dcc6);\n", | |
" \n", | |
" \n", | |
" var circle_marker_1a2b85640a54bd828ec5e38c7d940690 = L.circleMarker(\n", | |
" [27.435718092142665, -81.49914451288832],\n", | |
" {"bubblingMouseEvents": true, "color": "#268a6d", "dashArray": null, "dashOffset": null, "fill": true, "fillColor": "#268a6d", "fillOpacity": 1, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "opacity": 1.0, "radius": 6, "stroke": true, "weight": 3}\n", | |
" ).addTo(map_29082c1424ec2093b56fc1522ce2dcc6);\n", | |
" \n", | |
" \n", | |
" var circle_marker_0c3c4badb0d5193189b6e7b3271b1454 = L.circleMarker(\n", | |
" [27.2850774684598, -81.43364197265868],\n", | |
" {"bubblingMouseEvents": true, "color": "#268a6d", "dashArray": null, "dashOffset": null, "fill": true, "fillColor": "#268a6d", "fillOpacity": 1, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "opacity": 1.0, "radius": 6, "stroke": true, "weight": 3}\n", | |
" ).addTo(map_29082c1424ec2093b56fc1522ce2dcc6);\n", | |
" \n", | |
" \n", | |
" var circle_marker_5e1befae0b9c5a5501cb7e7125dfd55c = L.circleMarker(\n", | |
" [27.243754691593953, -81.40006512830422],\n", | |
" {"bubblingMouseEvents": true, "color": "#268a6d", "dashArray": null, "dashOffset": null, "fill": true, "fillColor": "#268a6d", "fillOpacity": 1, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "opacity": 1.0, "radius": 6, "stroke": true, "weight": 3}\n", | |
" ).addTo(map_29082c1424ec2093b56fc1522ce2dcc6);\n", | |
" \n", | |
" \n", | |
" var circle_marker_fede0b47e926bd5f9ff6737102e12875 = L.circleMarker(\n", | |
" [27.37937557184798, -81.4286044623964],\n", | |
" {"bubblingMouseEvents": true, "color": "#268a6d", "dashArray": null, "dashOffset": null, "fill": true, "fillColor": "#268a6d", "fillOpacity": 1, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "opacity": 1.0, "radius": 6, "stroke": true, "weight": 3}\n", | |
" ).addTo(map_29082c1424ec2093b56fc1522ce2dcc6);\n", | |
" \n", | |
"</script>\n", | |
"</html>\" 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 0x1ea3eee6310>" | |
] | |
}, | |
"execution_count": 16, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"\n", | |
"# Colors for each group.\n", | |
"dcolors = {\n", | |
" \"very high\": \"#f40002\",\n", | |
" \"high\": \"#ff721f\",\n", | |
" \"medium\": \"#fafc15\",\n", | |
" \"low\": \"#268a6d\"\n", | |
"}\n", | |
"\n", | |
"gdf[\"color\"] = gdf[\"risk\"].map(dcolors)\n", | |
"\n", | |
"m = folium.Map(location=[mlat, mlon], zoom_start=8)\n", | |
"\n", | |
"for tt in gdf.itertuples():\n", | |
" lat, lon, color = tt.lat, tt.lon, tt.color\n", | |
" folium.CircleMarker(\n", | |
" location=[lat, lon],\n", | |
" radius=6, \n", | |
" color=color, \n", | |
" fill_color=color, \n", | |
" fill=True,\n", | |
" fill_opacity=1\n", | |
" ).add_to(m)\n", | |
"\n", | |
"m\n" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"\n", | |
"<br>\n", | |
"\n", | |
"Number of records with mismatched EffectiveDistanceToCoastGroupNm:\n" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 17, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"ename": "KeyError", | |
"evalue": "\"['PolicyNo', 'TermNo', 'LocationNo', 'LatitudePt', 'LongitudePt', 'TCEffectiveDistanceToCoastGroupNm', 'TCActualDistanceToCoastAm', 'EffectiveDistanceToCoastGroupNm2'] not in index\"", | |
"output_type": "error", | |
"traceback": [ | |
"\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", | |
"\u001b[1;31mKeyError\u001b[0m Traceback (most recent call last)", | |
"Cell \u001b[1;32mIn[17], line 1\u001b[0m\n\u001b[1;32m----> 1\u001b[0m dfassess \u001b[38;5;241m=\u001b[39m \u001b[43mgdf\u001b[49m\u001b[43m[\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mPolicyNo\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mTermNo\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mLocationNo\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mLatitudePt\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mLongitudePt\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mTCEffectiveDistanceToCoastGroupNm\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mTCActualDistanceToCoastAm\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mEffectiveDistanceToCoastGroupNm2\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mmiles\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m]\u001b[49m\n\u001b[0;32m 3\u001b[0m dfmiss \u001b[38;5;241m=\u001b[39m dfassess[dfassess\u001b[38;5;241m.\u001b[39mTCEffectiveDistanceToCoastGroupNm\u001b[38;5;241m!=\u001b[39mdfassess\u001b[38;5;241m.\u001b[39mEffectiveDistanceToCoastGroupNm2]\n\u001b[0;32m 5\u001b[0m \u001b[38;5;28mprint\u001b[39m(\u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mNumber of mismatching policy location distances: \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mdfmiss\u001b[38;5;241m.\u001b[39mshape[\u001b[38;5;241m0\u001b[39m]\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m of \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mdfassess\u001b[38;5;241m.\u001b[39mshape[\u001b[38;5;241m0\u001b[39m]\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;130;01m\\n\u001b[39;00m\u001b[38;5;124m\"\u001b[39m)\n", | |
"File \u001b[1;32mc:\\Users\\i103455\\.conda\\envs\\geo\\Lib\\site-packages\\geopandas\\geodataframe.py:1456\u001b[0m, in \u001b[0;36mGeoDataFrame.__getitem__\u001b[1;34m(self, key)\u001b[0m\n\u001b[0;32m 1450\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21m__getitem__\u001b[39m(\u001b[38;5;28mself\u001b[39m, key):\n\u001b[0;32m 1451\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[0;32m 1452\u001b[0m \u001b[38;5;124;03m If the result is a column containing only 'geometry', return a\u001b[39;00m\n\u001b[0;32m 1453\u001b[0m \u001b[38;5;124;03m GeoSeries. If it's a DataFrame with any columns of GeometryDtype,\u001b[39;00m\n\u001b[0;32m 1454\u001b[0m \u001b[38;5;124;03m return a GeoDataFrame.\u001b[39;00m\n\u001b[0;32m 1455\u001b[0m \u001b[38;5;124;03m \"\"\"\u001b[39;00m\n\u001b[1;32m-> 1456\u001b[0m result \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43msuper\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[38;5;21;43m__getitem__\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43mkey\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 1457\u001b[0m \u001b[38;5;66;03m# Custom logic to avoid waiting for pandas GH51895\u001b[39;00m\n\u001b[0;32m 1458\u001b[0m \u001b[38;5;66;03m# result is not geometry dtype for multi-indexes\u001b[39;00m\n\u001b[0;32m 1459\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m (\n\u001b[0;32m 1460\u001b[0m pd\u001b[38;5;241m.\u001b[39mapi\u001b[38;5;241m.\u001b[39mtypes\u001b[38;5;241m.\u001b[39mis_scalar(key)\n\u001b[0;32m 1461\u001b[0m \u001b[38;5;129;01mand\u001b[39;00m key \u001b[38;5;241m==\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m (...)\u001b[0m\n\u001b[0;32m 1464\u001b[0m \u001b[38;5;129;01mand\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m is_geometry_type(result)\n\u001b[0;32m 1465\u001b[0m ):\n", | |
"File \u001b[1;32mc:\\Users\\i103455\\.conda\\envs\\geo\\Lib\\site-packages\\pandas\\core\\frame.py:4096\u001b[0m, in \u001b[0;36mDataFrame.__getitem__\u001b[1;34m(self, key)\u001b[0m\n\u001b[0;32m 4094\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m is_iterator(key):\n\u001b[0;32m 4095\u001b[0m key \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mlist\u001b[39m(key)\n\u001b[1;32m-> 4096\u001b[0m indexer \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcolumns\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_get_indexer_strict\u001b[49m\u001b[43m(\u001b[49m\u001b[43mkey\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mcolumns\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m)\u001b[49m[\u001b[38;5;241m1\u001b[39m]\n\u001b[0;32m 4098\u001b[0m \u001b[38;5;66;03m# take() does not accept boolean indexers\u001b[39;00m\n\u001b[0;32m 4099\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mgetattr\u001b[39m(indexer, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mdtype\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;28;01mNone\u001b[39;00m) \u001b[38;5;241m==\u001b[39m \u001b[38;5;28mbool\u001b[39m:\n", | |
"File \u001b[1;32mc:\\Users\\i103455\\.conda\\envs\\geo\\Lib\\site-packages\\pandas\\core\\indexes\\base.py:6199\u001b[0m, in \u001b[0;36mIndex._get_indexer_strict\u001b[1;34m(self, key, axis_name)\u001b[0m\n\u001b[0;32m 6196\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[0;32m 6197\u001b[0m keyarr, indexer, new_indexer \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_reindex_non_unique(keyarr)\n\u001b[1;32m-> 6199\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_raise_if_missing\u001b[49m\u001b[43m(\u001b[49m\u001b[43mkeyarr\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mindexer\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43maxis_name\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 6201\u001b[0m keyarr \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mtake(indexer)\n\u001b[0;32m 6202\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(key, Index):\n\u001b[0;32m 6203\u001b[0m \u001b[38;5;66;03m# GH 42790 - Preserve name from an Index\u001b[39;00m\n", | |
"File \u001b[1;32mc:\\Users\\i103455\\.conda\\envs\\geo\\Lib\\site-packages\\pandas\\core\\indexes\\base.py:6251\u001b[0m, in \u001b[0;36mIndex._raise_if_missing\u001b[1;34m(self, key, indexer, axis_name)\u001b[0m\n\u001b[0;32m 6248\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mKeyError\u001b[39;00m(\u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mNone of [\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mkey\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m] are in the [\u001b[39m\u001b[38;5;132;01m{\u001b[39;00maxis_name\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m]\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[0;32m 6250\u001b[0m not_found \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mlist\u001b[39m(ensure_index(key)[missing_mask\u001b[38;5;241m.\u001b[39mnonzero()[\u001b[38;5;241m0\u001b[39m]]\u001b[38;5;241m.\u001b[39munique())\n\u001b[1;32m-> 6251\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mKeyError\u001b[39;00m(\u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mnot_found\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m not in index\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n", | |
"\u001b[1;31mKeyError\u001b[0m: \"['PolicyNo', 'TermNo', 'LocationNo', 'LatitudePt', 'LongitudePt', 'TCEffectiveDistanceToCoastGroupNm', 'TCActualDistanceToCoastAm', 'EffectiveDistanceToCoastGroupNm2'] not in index\"" | |
] | |
} | |
], | |
"source": [ | |
"\n", | |
"\n", | |
"dfassess = gdf[[\"PolicyNo\", \"TermNo\", \"LocationNo\", \"LatitudePt\", \"LongitudePt\", \"TCEffectiveDistanceToCoastGroupNm\", \"TCActualDistanceToCoastAm\", \"EffectiveDistanceToCoastGroupNm2\", \"miles\"]]\n", | |
"\n", | |
"dfmiss = dfassess[dfassess.TCEffectiveDistanceToCoastGroupNm!=dfassess.EffectiveDistanceToCoastGroupNm2]\n", | |
"\n", | |
"print(f\"Number of mismatching policy location distances: {dfmiss.shape[0]} of {dfassess.shape[0]}\\n\")\n", | |
"\n", | |
"dfmiss.head(30)\n", | |
"\n" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"\n", | |
"<br>\n" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": null, | |
"metadata": {}, | |
"outputs": [], | |
"source": [] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": null, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"import os\n", | |
"import geopandas as gpd\n", | |
"import pandas as pd\n", | |
"\n", | |
"os.chdir(r\"C:\\Users\\gis_newbie\\Downloads\\natural_earth_vector\\50m_physical\")\n", | |
"\n", | |
"# shapefile part of download from here https://www.naturalearthdata.com/downloads/\n", | |
"lines=gpd.read_file('ne_50m_coastline.shp')\n", | |
"# force CRS but I think it is already in this format\n", | |
"\n", | |
"lines.plot()\n", | |
"\n", | |
"points_df = pd.DataFrame({'Latitude': [57.58125], 'Longitude': [-3.98848]}) # taken from lines data - so produced distance should be about 0\n", | |
"#points_df = pd.DataFrame({'Latitude': [51.509865],'Longitude': [-0.118092]}) # London\n", | |
"\n", | |
"points = gpd.GeoDataFrame(points_df, geometry=gpd.points_from_xy(points_df.Longitude, points_df.Latitude, crs=\"epsg:4326\"))\n", | |
"\n", | |
"lines.to_crs(\"epsg:4326\") #\"EPSG:4326\"\n", | |
"\n", | |
"lines = lines.to_crs(lines.estimate_utm_crs())\n", | |
"points = points.to_crs(lines.crs)\n", | |
"\n", | |
"for index, row in lines.iterrows():\n", | |
" lines.at[index, 'distance'] = row['geometry'].distance(points.iloc[0]['geometry'])\n", | |
"\n", | |
"lines = lines.sort_values(by=['distance'], ascending=True)\n", | |
"lines = lines.head(1) # minimum distance \n", | |
"print(lines)\n", | |
"lines.plot()" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": null, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"import geopandas as gpd\n", | |
"import numpy as np\n", | |
"from shapely.geometry import Point\n", | |
"\n", | |
"coastline_data = gpd.read_file('/path/to/coastline.shp')\n", | |
"coastline = gpd.GeoSeries(coastline_data.geometry.unary_union)\n", | |
"\n", | |
"from math import cos, sin, asin, sqrt, radians\n", | |
"def calc_distance(lon1, lat1, lon2, lat2):\n", | |
" \"\"\"\n", | |
" Calculate the great circle distance between two points\n", | |
" on the earth (specified in decimal degrees):\n", | |
" from: https://stackoverflow.com/questions/4913349/haversine-formula-in-python-bearing-and-distance-between-two-gps-points/4913653#4913653\n", | |
" \"\"\"\n", | |
" lon1, lat1, lon2, lat2 = map(radians, [lon1, lat1, lon2, lat2]) # convert decimal degrees to radians\n", | |
" dlon = lon2 - lon1 \n", | |
" dlat = lat2 - lat1\n", | |
" a = sin(dlat / 2) ** 2 + cos(lat1) * cos(lat2) * sin(dlon / 2) ** 2 haversine formula\n", | |
" c = 2 * asin(sqrt(a))\n", | |
" km = 6371 * c\n", | |
" return km\n", | |
"\n", | |
"def calc_distance_to_coastline(longitude,latitude ):\n", | |
" target_coordinate=Point(longitude,latitude )\n", | |
" return coastline.distance(target_coordinate).values[0]\n", | |
"\n", | |
"def distance_degrees_to_kilometers(distance,coord=[0,0]):\n", | |
" coord_plus=[c+distance for c in coord]\n", | |
" coord_minus=[c-distance for c in coord]\n", | |
" return (calc_distance(*coord,*coord_plus)+calc_distance(*coord,*coord_minus))*0.5\n", | |
"\n", | |
"def calc_distance_to_coastline_km(longitude,latitude ):\n", | |
" target_coordinate=Point(longitude,latitude )\n", | |
" return distance_degrees_to_kilometers(coastline.distance(target_coordinate).values[0],[longitude,latitude])" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": null, | |
"metadata": {}, | |
"outputs": [], | |
"source": [] | |
}, | |
{ | |
"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.11.10" | |
} | |
}, | |
"nbformat": 4, | |
"nbformat_minor": 2 | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment