python-awips/examples/notebooks/Map_Resources_and_Topography.ipynb

720 lines
1.8 MiB
Text
Raw Normal View History

2018-09-05 15:52:38 -06:00
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<a name=\"top\"></a>\n",
"<div style=\"width:1000 px\">\n",
2018-09-05 15:52:38 -06:00
"\n",
"<div style=\"float:right; width:98 px; height:98px;\">\n",
"<img src=\"https://docs.unidata.ucar.edu/images/logos/unidata_logo_vertical_150x150.png\" alt=\"Unidata Logo\" style=\"height: 98px;\">\n",
"</div>\n",
2018-09-05 15:52:38 -06:00
"\n",
"# Map Resources and Topography\n",
"**Python-AWIPS Tutorial Notebook**\n",
2018-09-05 15:52:38 -06:00
"\n",
"<div style=\"clear:both\"></div>\n",
"</div>\n",
2018-09-05 15:52:38 -06:00
"\n",
"---\n",
"\n",
"<div style=\"float:right; width:250 px\"><img src=\"../images/map_resources_preview.png\" alt=\"Colorized topography overlay with several geographic map boundaries\" style=\"height: 300px;\"></div>\n",
"\n",
"\n",
"# Objectives\n",
"\n",
"* Use python-awips to connect to an edex server\n",
"* Define data request object specifically for the maps database\n",
"* Manipulate request object for various different map resources\n",
"* Plot map resources in combination with one another for geographical context\n",
"\n",
"---"
]
},
{
"cell_type": "markdown",
"metadata": {
"toc": true
},
"source": [
"<h1>Table of Contents<span class=\"tocSkip\"></span></h1>\n",
"<div class=\"toc\"><ul class=\"toc-item\"><li><span><a href=\"#Imports\" data-toc-modified-id=\"Imports-1\"><span class=\"toc-item-num\">1&nbsp;&nbsp;</span>Imports</a></span></li><li><span><a href=\"#Connect-to-EDEX\" data-toc-modified-id=\"Connect-to-EDEX-2\"><span class=\"toc-item-num\">2&nbsp;&nbsp;</span>Connect to EDEX</a></span></li><li><span><a href=\"#Function:-make_map()\" data-toc-modified-id=\"Function:-make_map()-3\"><span class=\"toc-item-num\">3&nbsp;&nbsp;</span>Function: make_map()</a></span></li><li><span><a href=\"#Create-Initial-Map-From-CWA\" data-toc-modified-id=\"Create-Initial-Map-From-CWA-4\"><span class=\"toc-item-num\">4&nbsp;&nbsp;</span>Create Initial Map From CWA</a></span></li><li><span><a href=\"#Draw-Merged-CWA\" data-toc-modified-id=\"Draw-Merged-CWA-5\"><span class=\"toc-item-num\">5&nbsp;&nbsp;</span>Draw Merged CWA</a></span></li><li><span><a href=\"#Draw-Interstates-using-Boundary-Filter\" data-toc-modified-id=\"Draw-Interstates-using-Boundary-Filter-6\"><span class=\"toc-item-num\">6&nbsp;&nbsp;</span>Draw Interstates using Boundary Filter</a></span></li><li><span><a href=\"#Draw-Nearby-Cities\" data-toc-modified-id=\"Draw-Nearby-Cities-7\"><span class=\"toc-item-num\">7&nbsp;&nbsp;</span>Draw Nearby Cities</a></span></li><li><span><a href=\"#Draw-Nearby-Lakes\" data-toc-modified-id=\"Draw-Nearby-Lakes-8\"><span class=\"toc-item-num\">8&nbsp;&nbsp;</span>Draw Nearby Lakes</a></span></li><li><span><a href=\"#Draw-Major-Rivers\" data-toc-modified-id=\"Draw-Major-Rivers-9\"><span class=\"toc-item-num\">9&nbsp;&nbsp;</span>Draw Major Rivers</a></span></li><li><span><a href=\"#Draw-Topography\" data-toc-modified-id=\"Draw-Topography-10\"><span class=\"toc-item-num\">10&nbsp;&nbsp;</span>Draw Topography</a></span></li><li><span><a href=\"#See-Also\" data-toc-modified-id=\"See-Also-11\"><span class=\"toc-item-num\">11&nbsp;&nbsp;</span>See Also</a></span><ul class=\"toc-item\"><li><span><a href=\"#Additional-Documentation\" data-toc-modified-id=\"Additional-Documentation-11.1\"><span class=\"toc-item-num\">11.1&nbsp;&nbsp;</span>Additional Documentation</a></span></li></ul></li></ul></div>"
2018-09-05 15:52:38 -06:00
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Imports\n",
"\n",
"The imports below are used throughout the notebook. Note the first import is coming directly from python-awips and allows us to connect to an EDEX server. The subsequent imports are for data manipulation and visualization. "
2018-09-05 15:52:38 -06:00
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
2018-09-05 15:52:38 -06:00
"outputs": [],
"source": [
"from awips.dataaccess import DataAccessLayer\n",
"import matplotlib.pyplot as plt\n",
"import cartopy.crs as ccrs\n",
"import numpy.ma as ma\n",
2018-09-05 15:52:38 -06:00
"from cartopy.mpl.gridliner import LONGITUDE_FORMATTER, LATITUDE_FORMATTER\n",
"from cartopy.feature import ShapelyFeature,NaturalEarthFeature\n",
"from shapely.ops import unary_union"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<a href=\"#top\">Top</a>\n",
"\n",
"---"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Connect to EDEX\n",
"\n",
"First we establish a connection to Unidata's public EDEX server. With that connection made, we can create a [new data request object](http://unidata.github.io/python-awips/api/IDataRequest.html) and set the data type to ***maps***."
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {},
"outputs": [],
"source": [
"# Server, Data Request Type, and Database Table\n",
"DataAccessLayer.changeEDEXHost(\"edex-cloud.unidata.ucar.edu\")\n",
"request = DataAccessLayer.newDataRequest('maps')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<a href=\"#top\">Top</a>\n",
"\n",
"---"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Function: make_map()\n",
2018-09-05 15:52:38 -06:00
"\n",
"In many of our notebooks we end up plotting map images, and this logic below is the same from those other notebooks. Typically, functions are defined when they are called multiple times throughout a notebook. In this case, we only use it in one code block cell, but because it is a common function from several of our notebooks, it's nice to keep the logic neatly defined for consistency."
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {},
"outputs": [],
"source": [
2018-09-05 15:52:38 -06:00
"# Standard map plot\n",
"def make_map(bbox, projection=ccrs.PlateCarree()):\n",
" fig, ax = plt.subplots(figsize=(12,12),\n",
" subplot_kw=dict(projection=projection))\n",
" ax.set_extent(bbox)\n",
" ax.coastlines(resolution='50m')\n",
" gl = ax.gridlines(draw_labels=True)\n",
" gl.top_labels = gl.right_labels = False\n",
2018-09-05 15:52:38 -06:00
" gl.xformatter = LONGITUDE_FORMATTER\n",
" gl.yformatter = LATITUDE_FORMATTER\n",
" return fig, ax"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<a href=\"#top\">Top</a>\n",
2018-09-05 15:52:38 -06:00
"\n",
"---"
2018-09-05 15:52:38 -06:00
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Create Initial Map From CWA\n",
"\n",
"The python-awips package provides access to the entire AWIPS Maps Database for use in Python GIS applications. Map objects are returned as <a href=\"http://toblerity.org/shapely/manual.html\">Shapely</a> geometries and can be easily plotted by many Python packages.\n",
2018-09-05 15:52:38 -06:00
"\n",
"* Each map database table has a geometry field called `the_geom`, which can be used to spatially select map resources for any column of type geometry.\n",
"\n",
"<br>\n",
"<div class=\"alert-info\">\n",
" <b>Tip:</b> Note the geometry definition of <code>the_geom</code> for each data type, which can be <b>Point</b>, <b>MultiPolygon</b>, or <b>MultiLineString</b>.\n",
"</div>\n",
"<br>\n",
"\n",
"Here we'll be using Boulder (BOU) as our example for plotting the County Warning Area (CWA). We'll query our EDEX server to get all counties in the CWA for BOU, and then plot those counties along withe the state boundaries and lines of longitude and latitude. In order to get this information from EDEX, we'll need to set several characteristics on our data request object. We will use [**request.setParameters()**](http://unidata.github.io/python-awips/api/IDataRequest.html#awips.dataaccess.IDataRequest.setParameters) to refine our query to EDEX."
2018-09-05 15:52:38 -06:00
]
},
{
"cell_type": "code",
"execution_count": 20,
2018-09-05 15:52:38 -06:00
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Using 22 county MultiPolygons\n"
2018-09-05 15:52:38 -06:00
]
},
{
"data": {
"text/plain": [
"<cartopy.mpl.feature_artist.FeatureArtist at 0x7f0077b3f750>"
]
},
"execution_count": 20,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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PnA1bCPu1djYeM2X7VAA37JliyorKzVt2rTYeaFQSGvXrtXPf/5ztbS0yOPxKBAI6MEHH9SRI0f04Ycftun97ojvf//7euaZZ9oN8FeycOHCTt8n0lMgENDq1au1YMEC+Xw+p8tBmmH7wNWwjaC1RYsWxVZbqaqqkm3bbB+4LD4/cDVsI6itrb3my3YogM+bN0+7du1qc943vvENjRkzRk899VSb8H3gwAF99NFHKikp6chdtFFQUKAf/ehH+slPfqKlS5de8/V8Ph8bfxfFa4srYfvA1bCNQAo3lpuamiRJXu+FphDbB66E7QNXwzbiXh153TsUwLt166bx48e3OS8/P18lJSUaP368gsGgHnjgAW3dulVvvfWWQqGQKioqJEk9evRQVlZWR+5OkvTtb39b//Iv/6IXXnhBM2bM6PD1AQAAWrt4EjZmRQcApEqn1wFvT3l5ud544w2Vl5dr8uTJ6tu3b+zf+vXrO3WbPp9PP/3pT9Xc3JzIUgEAgEsxCzoAwCkdngX9YmvWrImdHjJkSNxfZEePHr3kvEceeUSPPPJIXLcLAAAgEcABAM5JaA84AABAuiOAAwCcQgAHAACuQgAHADiFAA4AAFyFSdcAAE4hgAMAANeiBxwAkEoEcAAA4CoMQQcAOIUADgAAXIUADgBwCgEcAAC4CgEcAOAUAjgAAHAVAjgAwCkEcAAA4CoEcACAUwjgAADAVQjgAACnEMABAICrEMABAE4hgAMAAFchgAMAnEIABwAArkIABwA4hQAOAABchQAOAHAKARwAALgKARwA4BQCOAAAcBUCOADAKQRwAADgKgRwAIBTCOAAAMBVCOAAAKcQwAEAgKu0DuAAAKQSARwAALgWPeAAgFQigAMAAFdhCDoAwCkEcAAA4CoEcACAUwjgAADAVQjgAACnEMABAICrEMABAE4hgAMAAFchgAMAnEIABwAArkIABwA4hQAOAABchQAOAHAKARwAALgKARwA4BQCOAAAcBUCOADAKQRwAADgKgRwAIBTCOAAAMBVCOAAAKcQwAEAgKsQwAEATiGAAwAAV2kdwAEASCUCOAAAcC16wAEAqUQABwAArsIQdACAUwjgAADAVQjgAACnEMABAICrEMABAE4hgAMAAFchgAMAnEIABwAArkIABwA4hQAOAABchQAOAHAKARwAALgKARwA4BQCOAAAcBUCOADAKQRwAADgKgRwAIBTCOAAAMBVWgdwAABSiQAOAABcix5wAEAqEcABAICrMAQdAOAUAjgAAHAVAjgAwCkEcAAA4CoEcACAUwjgAADAVQjgAACnEMABAICrEMABAE4hgAMAAFchgAMAnEIABwAArkIABwA4hQAOAABchQAOAHAKARwAALgKARwA4BQCOAAAcJXWARwAgFQigAMAANeiBxwAkEoEcAAA4CoMQQcAOIUADgAAXIUADgBwCgEcAAC4CgEcAOAUAjgAAHAVAjgAwCkEcAAA4CoEcACAUwjgAADAVQjgAACnEMABAICrEMABAE4hgAMAAFchgAMAnEIABwAArkIABwA4hQAOAABcpXUABwAglQjgAADAtegBBwCkEgEcAAC4CkPQAQBOIYADAABXIYADAJxCAAcAAK5CAAcAOIUADgAAXIUADgBwCgEcAAC4CgEcAOAUAjgAAHAVAjg
2018-09-05 15:52:38 -06:00
"text/plain": [
"<Figure size 1200x1200 with 1 Axes>"
2018-09-05 15:52:38 -06:00
]
},
"metadata": {},
2018-09-05 15:52:38 -06:00
"output_type": "display_data"
}
],
"source": [
"# Specify the necessary identifiers for requesting the Boulder CWA\n",
"request.addIdentifier('table', 'mapdata.county')\n",
2018-09-05 15:52:38 -06:00
"# Define a WFO ID for location\n",
"# tie this ID to the mapdata.county column \"cwa\" for filtering\n",
"request.setLocationNames('BOU')\n",
"request.addIdentifier('cwa', 'BOU')\n",
"# enable location filtering (inLocation)\n",
"# locationField is tied to the above cwa definition (BOU)\n",
"request.addIdentifier('geomField', 'the_geom')\n",
"request.addIdentifier('inLocation', 'true')\n",
"request.addIdentifier('locationField', 'cwa')\n",
"\n",
"# Get response and create dict of county geometries\n",
"response = DataAccessLayer.getGeometryData(request)\n",
"counties = []\n",
2018-09-05 15:52:38 -06:00
"for ob in response:\n",
" counties.append(ob.getGeometry())\n",
2018-09-05 15:52:38 -06:00
"print(\"Using \" + str(len(counties)) + \" county MultiPolygons\")\n",
"\n",
"\n",
"# All WFO counties merged to a single Polygon\n",
"merged_counties = unary_union(counties)\n",
2018-09-05 15:52:38 -06:00
"envelope = merged_counties.buffer(2)\n",
"boundaries=[merged_counties]\n",
"\n",
"# Get bounds of this merged Polygon to use as buffered map extent\n",
"bounds = merged_counties.bounds\n",
"bbox=[bounds[0]-1,bounds[2]+1,bounds[1]-1.5,bounds[3]+1.5]\n",
"\n",
"# Create the map we'll use for the rest of this notebook based on the \n",
"# boundaries of the CWA\n",
2018-09-05 15:52:38 -06:00
"fig, ax = make_map(bbox=bbox)\n",
"\n",
2018-09-05 15:52:38 -06:00
"# Plot political/state boundaries handled by Cartopy\n",
"political_boundaries = NaturalEarthFeature(category='cultural',\n",
" name='admin_0_boundary_lines_land',\n",
" scale='50m', facecolor='none')\n",
"states = NaturalEarthFeature(category='cultural',\n",
" name='admin_1_states_provinces_lines',\n",
" scale='50m', facecolor='none')\n",
"ax.add_feature(political_boundaries, linestyle='-', edgecolor='black')\n",
"ax.add_feature(states, linestyle='-', edgecolor='black',linewidth=2)\n",
"\n",
"# Plot CWA counties\n",
"shape_feature = ShapelyFeature(counties,ccrs.PlateCarree(), \n",
" facecolor='none', linestyle=\"-\",edgecolor='#86989B')\n",
"ax.add_feature(shape_feature)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<a href=\"#top\">Top</a>\n",
"\n",
"---"
2018-09-05 15:52:38 -06:00
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Draw Merged CWA\n",
"\n",
"In the previous section we created a merged polygon with the applicable counties. Here, we draw this new shape on top of our existing map in a burnt orange color."
2018-09-05 15:52:38 -06:00
]
},
{
"cell_type": "code",
"execution_count": 21,
2018-09-05 15:52:38 -06:00
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA+AAAAMUCAYAAAA8JE1yAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAuBhJREFUeJzs3XdgW+W9PvDnPUey5R3HcZy9d0ImEJIwAiEJJGwoEGgYXfSWe28pt7fczkvp7u3tuOUHLbQFyp4hjBASRghJyCB7kR3HjuM4cbxtWdJ5398fR5Ity05saxxJ5/m0wdLR+ko6ks5z3nGEUkqBiIiIiIiIiGJKs7oAIiIiIiIiIjtgACciIiIiIiKKAwZwIiIiIiIiojhgACciIiIiIiKKAwZwIiIiIiIiojhgACciIiIiIiKKAwZwIiIiIiIiojhwWF1AtLndbng8HqvLICIiIiIiIptIS0uDy+U65/VSKoC73W4MHToU5eXlVpdCRERERERENtGnTx8cOXLknCE8pQK4x+NBeXk5SkpKkJuba3U5FEVerxcrVqzAvHnz4HQ6rS6HEgzXDzoXriMU4PP5UFBQAACYPn06VqxYwfWDzorrB50L1xGqra3FwIED4fF47BXAA3JzcxnAU4zX60VmZiZyc3P5xUZhuH7QuXAdoQDDMIKndV1Hbm4u1w86K64fdC5cR6grOAkbERER2YYQInhaKWVhJUREZEcM4ERERGQbDOBERGQlBnAiIiKyDQZwIiKyEgM4ERER2RIDOBERxRsDOBEREdlKoBWcAZyIiOKNAZyIiIhshQGciIiswgBOREREtsIATkREVmEAJyIiIlthACciIqswgBMREZGtMIATEZFVGMCJiIiIiIiI4oABnIiIiGyFLeBERGQVBnAiIiKyFQZwIiKyCgM4ERER2QoDOBERWYUBnIiIiGyFAZyIiKzCAE5ERES2wgBORERWYQAnIiIiW2EAJyIiqzCAExERka0wgBMRkVUYwImIiMhWGMCJiMgqDOBERERkKwzgRERkFQZwIiIishUGcCIisgoDOBEREdkKAzgREVmFAZyIiIhshQGciIiswgBOREREtsIATkREVmEAJyIiIlthACciIqswgBMREZGtMIATEZFVGMCJiIjIVgIBnIiIKN4YwImIiMiW2AJORETxxgBOREREtsIu6EREZBUGcCIiIrIVBnAiIrIKAzgRERHZCgM4ERFZhQGciIiIbIUBnIiIrMIATkRERLbCAE5ERFZhACciIiJbYQAnIiKrMIATERGRrTCAExGRVRjAiYiIyFYYwImIyCoM4ERERGQrDOBERGQVBnAiIiKyFQZwIiKyCgM4ERER2QoDOBERWYUBnIiIiGwlEMCJiIjijQGciIiIbIkt4EREFG8M4ERERGQr7IJORERWYQAnIiIiW2EAJyIiqzCAExERka0wgBMRkVUYwImIiMhWGMCJiMgqDOBERERkKwzgRERkFQZwIiIishUGcCIisgoDOBEREdkKAzgREVmFAZyIiIhshQGciIiswgBOREREtsIATkREVmEAJyIiIlsJBHAiIqJ4YwAnIiIiW2ILOBERxRsDOBEREdkKu6ATEZFVGMCJiIjIVhjAiYjIKgzgREREZCsM4EREZBUGcCIiIrIVBnAiIrIKAzgRERHZCgM4ERFZhQGciIiIbIUBnIiIrMIATkRERLbCAE5ERFZhACciIiJbYQAnIiKrMIATERGRrTCAExGRVRjAiYiIyFYCAZyIiCjeIgrgv/rVryCEwAMPPAAA8Hq9eOihh3DeeechKysL/fr1w1133YWysrKQ2+3btw+zZs3CgAED8Mgjj4RcNmTIEAghsH79+pDlDzzwAGbPnh1JuURERERBbAEnIqJ463YA37RpE5544glMnDgxuKyxsRFbtmzBj3/8Y2zZsgVvvPEG9u/fj+uuuy7ktvfffz8WL16MpUuX4u2338batWtDLne5XHjooYe6WxoRERFRh9gFnYiIrNKtAF5fX48777wTTz75JPLz84PL8/LysHLlStx6660YPXo0LrroIvz5z3/G5s2bcezYseD1qqurMWXKFEycOBH9+vVDTU1NyP3fd999WL9+PZYtW9bNp0VERETUPnZBJyIiq3QrgN9///1YuHAhrrzyynNet6amBkII9OjRI7jskUcewdy5c5GZmQlN0zB//vyQ2wwZMgTf/OY38f3vfx9Syu6USERERNSu1gGcreBERBRPjq7e4KWXXsKWLVuwadOmc17X7Xbjv/7rv3DHHXcgNzc3uHzBggU4deoUamtrUVhY2O5tf/SjH+Gpp57C888/j8WLF3epRq/XC6/X26XbUGILvJ98X6k9XD/oXLiOUGvp6enIyMgAAHg8HhiGAYDrB7WP3x90LlxHqCvvfZcCeElJCb797W9jxYoVcLlc5yzi9ttvh5QSjz32WNjl6enpHYZvACgsLMR3v/td/OQnP8Ftt93WlTKxYsUKZGZmduk2lBxWrlxpdQmUwLh+0LlwHSEA+M53vhM8vXz58uBprh90Nlw/6Fy4jthXY2Njp6/bpQC+efNmVFRUYNq0acFlhmFg9erVePTRR9Hc3Axd1+H1enHrrbfiyJEj+Oijj0Jav7viwQcfxGOPPdZugD+befPmdfsxKTF5vV6sXLkSc+fOhdPptLocSjBcP+hcuI5Qa/Pnzw8ebaWyshJKKa4f1CF+f9C5cB2h2traTl+3SwF8zpw52LlzZ8iye++9F2PGjMFDDz0UEr4PHDiAjz/+GAUFBV15iBDZ2dn48Y9/jIcffhjXXnttp2/ndDq58qcovrd0Nlw/6Fy4jhBgbiw3NTUBAByOlk0hrh90Nlw/6Fy4jthXV973LgXwnJwcTJgwIWRZVlYWCgoKMGHCBPh8Ptxyyy3YsmUL3nnnHRiGgfLycgBAz549kZaW1pWHAwB84xvfwB/+8Ae8+OKLmD59epdvT0RERNRa20nYOCs6ERHFS7ePA96e0tJSvPXWWygtLcXkyZPRt2/f4L9169Z16z6dTid+9rOfwe12R7NUIiIisinOgk5ERFbp8izoba1atSp4esiQIRH/kB09ejRs2aJFi7Bo0aKI7peIiIgIYAAnIiLrRLUFnIiIiCjRMYATEZFVGMCJiIjIVhjAiYjIKgzgREREZCucdI2IiKzCAE5ERES2xRZwIiKKJwZwIiIishV2QSciIqswgBMREZGtMIATEZFVGMCJiIjIVhjAiYjIKgzgREREZCsM4EREZBUGcCIiIrIVBnAiIrIKAzgRERHZCgM4ERFZhQGciIiIbIUBnIiIrMIATkRERLbCAE5ERFZhACciIiJbYQAnIiKrMIATERGRrTCAExGRVRjAiYiIyFYYwImIyCoM4ERERGQrDOBERGQVBnAiIiKyFQZwIiKyCgM4ERER2QoDOBERWYUBnIiIiGyldQAnIiKKJwZwIiIisi22gBMRUTwxgBMREZGtsAs6ERFZhQGciIiIbIUBnIiIrMIATkRERLbCAE5ERFZhACciIiJbYQAnIiKrMIATERGRrTCAExGRVRjAiYiIyFYYwImIyCoM4ERERGQrDOBERGQVBnAiIiKyFQZwIiKyCgM4ERER2QoDOBERWYUBnIiIiGyFAZyIiKzCAE5ERES2wgBORERWYQAnIiIiW2EAJyIiqzCAExERka20DuBERETxxABOREREtsUWcCIiiicGcCIiIrIVdkEnIiKrMIATERGRrTCAExGRVRjAiYiIyFYYwImIyCoM4ERERGQrDOBERGQVBnAiIiKyFQZwIiKyCgM4ERER2QoDOBERWYUBnIiIiGyFAZyIiKzCAE5ERES2wgBORERWYQAnIiIiW2EAJyIiqzCAExERka20DuBERETxxABOREREtsUWcCIiiicGcCIiIrIVdkEnIiKrMIATERGRrTCAExGRVRjAiYiIyFYYwImIyCoM4ERERGQrDOBERGQVBnAiIiKyFQZwIiKyCgM4ERER2QoDOBERWYUBnIiIiGyFAZyIiKzCAE5ERES2wgBORERWYQAnIiIiW2EAJyIiqzCAExE
2018-09-05 15:52:38 -06:00
"text/plain": [
"<Figure size 1200x1200 with 1 Axes>"
2018-09-05 15:52:38 -06:00
]
},
"execution_count": 21,
2018-09-05 15:52:38 -06:00
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Plot CWA envelope\n",
"shape_feature = ShapelyFeature(boundaries,ccrs.PlateCarree(), \n",
" facecolor='none', linestyle=\"-\",linewidth=3.,edgecolor='#cc5000')\n",
"ax.add_feature(shape_feature)\n",
2018-09-05 15:52:38 -06:00
"\n",
"fig"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<a href=\"#top\">Top</a>\n",
"\n",
"---"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Draw Interstates using Boundary Filter\n",
2018-09-05 15:52:38 -06:00
"\n",
"Now, we'll use the previously-defined **envelope=merged_counties.buffer(2)** in a **newDataRequest()** to request interstate geometries which fall inside the buffered boundary. "
2018-09-05 15:52:38 -06:00
]
},
{
"cell_type": "code",
"execution_count": 22,
2018-09-05 15:52:38 -06:00
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Using 225 interstate MultiLineStrings\n"
2018-09-05 15:52:38 -06:00
]
},
{
"data": {
"image/png": "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
2018-09-05 15:52:38 -06:00
"text/plain": [
"<Figure size 1200x1200 with 1 Axes>"
2018-09-05 15:52:38 -06:00
]
},
"execution_count": 22,
2018-09-05 15:52:38 -06:00
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Define the request for the interstate query\n",
2018-09-05 15:52:38 -06:00
"request = DataAccessLayer.newDataRequest('maps', envelope=envelope)\n",
"request.addIdentifier('table', 'mapdata.interstate')\n",
"request.addIdentifier('geomField', 'the_geom')\n",
"interstates = DataAccessLayer.getGeometryData(request)\n",
2018-09-05 15:52:38 -06:00
"print(\"Using \" + str(len(interstates)) + \" interstate MultiLineStrings\")\n",
"\n",
"# Plot interstates\n",
"for ob in interstates:\n",
" shape_feature = ShapelyFeature(ob.getGeometry(),ccrs.PlateCarree(), \n",
" facecolor='none', linestyle=\"-\",edgecolor='orange')\n",
" ax.add_feature(shape_feature)\n",
"fig"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<a href=\"#top\">Top</a>\n",
2018-09-05 15:52:38 -06:00
"\n",
"---"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Draw Nearby Cities\n",
2018-09-05 15:52:38 -06:00
"\n",
"Request the city table based using the **envelope** attribute and filter by population and progressive disclosure level.\n",
"\n",
"<br>\n",
"<div class=\"alert-warning\">\n",
" <b>Warning:</b> the <code>prog_disc</code> field is not entirely understood and values appear to change significantly depending on WFO site.\n",
"</div>"
2018-09-05 15:52:38 -06:00
]
},
{
"cell_type": "code",
"execution_count": 23,
2018-09-05 15:52:38 -06:00
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Queried 1181 total cities\n",
"Plotting 51 cities\n"
2018-09-05 15:52:38 -06:00
]
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAABKQAAAN8CAYAAABm6XIcAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQABAABJREFUeJzs3Xt8zuUfx/HXvYOdNzaHDWOYzXFGoxAmNESESMQiklNIJJFDKeSUIgmj/IoKSXLIKYycmuOcz5mcDxtmh/v3x93u3G3O2+4d3s/H437svr+H6/u5b9/ddr/v67q+BqPRaERERERERERERCST2Fi7ABERERERERERyV0USImIiIiIiIiISKZSICUiIiIiIiIiIplKgZSIiIiIiIiIiGQqBVIiIiIiIiIiIpKpFEiJiIiIiIiIiEimUiAlIiIiIiIiIiKZSoGUiIiIiIiIiIhkKgVSIiIiIiIiIiKSqRRIZSPHjx/HYDAQFRVl7VJERERERERERB5Zjgykzp07x+uvv06xYsVwcHDA29ubsLAwNm3aZN7GYDCwaNGiLNW2iIiIiIiIiEhuYGftAjJCy5YtSUhIYPbs2ZQsWZK///6bVatWcenSpSzdtoiIiIiIiIhIbpDjekhduXKFDRs2MHr0aOrWrUvx4sWpVq0agwYN4rnnngPAz88PgBdeeAGDwWB+nNFt//zzzzzxxBM4OjpSsmRJhg8fTmJionm9wWBg6tSpNGrUCCcnJ0qUKMH333+fqo6jR49St25dnJ2dqVSpkkXvLIDIyEhq166Nk5MTvr6+9O7dm7i4OPN6Pz8/Ro0aRadOnXBzc6NYsWJ8+eWX5vW3b9+mZ8+e+Pj44OjoiJ+fHx999NEDvUYiIiIiIiIiIveT4wIpV1dXXF1dWbRoEfHx8Wlus3XrVgBmzZpFTEyM+XFGtr18+XLat29P79692bdvH9OmTSMiIoIPP/zQYv8hQ4bQsmVLdu7cSfv27Wnbti3R0dEW2wwePJj+/fsTFRVFQEAAbdu2NQdbu3fvJiwsjBYtWrBr1y7mzZvHhg0b6Nmzp0Ub48aNIyQkhD///JPu3bvzxhtvsH//fgA+/fRTFi9ezPz58zlw4ADffPPNA4d2IiIiIiIiIiL3YzAajUZrF5HefvzxR7p06cLNmzepUqUKderU4aWXXiIoKMi8jcFgYOHChTRv3jxT2q5duzaNGjVi0KBB5mXffPMNAwYM4MyZM+b9unXrxtSpU83bPPXUU1SpUoUpU6Zw/PhxSpQowVdffUXnzp0B2LdvH+XLlyc6OpoyZcrQoUMHnJycmDZtmrmNDRs2UKdOHeLi4sw9nmrVqsXXX38NgNFoxNvbm+HDh9OtWzd69+7N3r17+e233zAYDA/1+oiIiIiIiIiI3E+O6yEFpnmezpw5w+LFiwkLC2Pt2rVUqVKFiIgIq7W9fft2RowYYe5l5erqSpcuXYiJieHGjRvm7apXr26xX/Xq1VP1kLoz/PLx8QFMk62nHCciIsLiOGFhYSQnJ3Ps2LE02zAYDHh7e5vbCA8PJyoqisDAQHr37s2KFSse4hUSEREREREREbm3HBlIATg6OtKgQQOGDh1KZGQk4eHhvP/++1ZrOzk5meHDhxMVFWW+7d69m0OHDuHo6HjPff/bS8ne3j7VuuTkZPPP119/3eI4O3fu5NChQ5QqVSrNNlLaSWmjSpUqHDt2jJEjR3Lz5k1at25Nq1at7vOqiIiIiIiIiIg8mBx5lb20lCtXjkWLFpkf29vbk5SUlGltV6lShQMHDuDv73/PtjZv3kyHDh0sHleuXPmBa6lSpQp79+6973Hux93dnTZt2tCmTRtatWpFw4YNuXTpEp6eno/VroiIiIiIiIhIjgukLl68yIsvvkinTp0ICgrCzc2Nbdu2MWbMGJo1a2bezs/Pj1WrVlGzZk0cHBzIly8fW7ZsoUOHDqxatYoiRYqka9tDhw6lSZMm+Pr68uKLL2JjY8OuXbvYvXs3H3zwgXnf77//npCQEJ5++mnmzp3Lli1bmDFjxgM//4EDB/LUU0/Ro0cPunTpgouLC9HR0axcuZLJkyc/UBsTJkzAx8eH4OBgbGxs+P777/H29iZv3rwPXIeIiIiIiIiIyN3kuEDK1dWVJ598kgkTJnDkyBESEhLw9fWlS5cuvPvuu+btxo0bR79+/Zg+fTpFihTh+PHj3LhxgwMHDpCQkJDubYeFhbFkyRJGjBjBmDFjsLe3p0yZMrz22msWxxg+fDjfffcd3bt3x9vbm7lz51KuXLkHfv5BQUGsW7eOwYMHU6tWLYxGI6VKlaJNmzYP9RqOHj2aQ4cOYWtrS9WqVVm6dCk2Njl2hKeIiIiIiIiIZKIceZW97OpRr/wnIiIiIiIiIpKdqMuLiIiIiIiIiIhkKgVSIiIiIiIiIiKSqXLcHFLZmUZPioiIiIiIiEhuoB5SIiIiIiIiIiKSqRRIiYiIiIiIiIhIplIgJSIiIiIiIiIimUqBlIiIiIiIiIiIZCoFUiIiIiIiIiIikqmyRSAVHh5O8+bNrV2GiIiIiIiIiIikg4cOpBQOiYik7ezZs/Tq1YuSJUvi4OCAr68vTZs2ZdWqVdYuTUREJMsxGAwsWrQo3dvV5xURkewhW/SQelxGo5HExERrlyEiOdjx48d54oknWL16NWPGjGH37t0sW7aMunXr0qNHD2uXd1e3b9+2dgkiIpJD6YsaERG5l3QNpMaPH0/FihVxcXHB19eX7t27Exsba14fERFB3rx5Wb58OWXLlsXV1ZWGDRsSExNj3iYpKYl+/fqRN29evLy8GDBgAEaj0eI4RqORMWPGULJkSZycnKhUqRI//PCDef3atWsxGAwsX76ckJAQHBwcWL9+fXo+VRERC927d8dgMLBlyxZatWpFQEAA5cuXp1+/fmzevBm4/3vkiRMnaNq0Kfny5cPFxYXy5cuzdOlS4N/3tV9++YVKlSrh6OjIk08+ye7duy3qiIyMpHbt2jg5OeHr60vv3r2Ji4szr/fz8+ODDz4gPDwcDw8PunTpkgmvjoiI5DZZ+YsafRkjIpI1pGsgZWNjw6effsqePXuYPXs2q1evZsCAARbb3Lhxg08++YSvv/6a33//nZMnT9K/f3/z+nHjxjFz5kxmzJjBhg0buHTpEgsXLrRo47333mPWrFlMnTqVvXv30rdvX9q3b8+6dessthswYAAfffQR0dHRBAUFpedTFRExu3TpEsuWLaNHjx64uLikWp83b17g/u+RPXr0ID4+nt9//53du3czevRoXF1dLdp6++23+eSTT9i6dSsFCxbk+eefJyEhAYDdu3cTFhZGixYt2LVrF/PmzWPDhg307NnToo2xY8dSoUIFtm/fzpAhQ9L51RAREXmwL2oALly4wAsvvICzszOlS5dm8eLF5nVJSUl07tyZEiVK4OTkRGBgIJMmTbI4zoN8mR0aGkrPnj3p168f+fPnp0GDBgCsW7eOatWq4eDggI+PD++8847FqIrQ0FB69+7NgAED8PT0xNvbm2HDhmXAqyUikksZH1LHjh2NzZo1e6Bt58+fb/Ty8jI/njVrlhEwHj582Lzs888/NxYqVMj82MfHx/jxxx+bHyckJBiLFi1qPmZsbKzR0dHRGBkZaXGszp07G9u2bWs0Go3GNWvWGAHjokWLHvbpiYg8tD/++MMIGBcsWPBQ+/33PbJixYrGYcOGpbltyvvad999Z1528eJFo5OTk3HevHlGo9FofOWVV4xdu3a12G/9+vVGGxsb482bN41Go9FYvHhxY/PmzR+qThERkYdx8eJFo8FgMI4aNeqe2wHGokWLGv/3v/8ZDx06ZOzdu7fR1dXVePHiRaPRaDTevn3bOHToUOOWLVuMR48eNX7zzTdGZ2dn8/97RqPROHr0aKOHh4fxhx9+MO7bt8/YuXNno5ubm8XnlTp16hhdXV2Nb7/9tnH//v3G6Oho4+nTp43Ozs7G7t27G6Ojo40LFy405s+f3/j+++9b7Ofu7m4cNmyY8eDBg8bZs2cbDQaDccWKFen6eomI5FZ26RlurVmzhlGjRrF
2018-09-05 15:52:38 -06:00
"text/plain": [
"<Figure size 1200x1200 with 1 Axes>"
2018-09-05 15:52:38 -06:00
]
},
"execution_count": 23,
2018-09-05 15:52:38 -06:00
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Define the request for the city query\n",
"request = DataAccessLayer.newDataRequest('maps', envelope=envelope)\n",
"request.addIdentifier('table', 'mapdata.city')\n",
"request.addIdentifier('geomField', 'the_geom')\n",
"request.setParameters('name','population','prog_disc')\n",
"cities = DataAccessLayer.getGeometryData(request)\n",
"print(\"Queried \" + str(len(cities)) + \" total cities\")\n",
"\n",
"# Set aside two arrays - one for the geometry of the cities and one for their names\n",
2018-09-05 15:52:38 -06:00
"citylist = []\n",
"cityname = []\n",
"# For BOU, progressive disclosure values above 50 and pop above 5000 looks good\n",
"for ob in cities:\n",
" if ob.getString(\"population\") != 'None':\n",
" if ob.getNumber(\"prog_disc\") > 50 and int(ob.getString(\"population\")) > 5000:\n",
" citylist.append(ob.getGeometry())\n",
" cityname.append(ob.getString(\"name\"))\n",
"print(\"Plotting \" + str(len(cityname)) + \" cities\")\n",
2018-09-05 15:52:38 -06:00
"\n",
"# Plot city markers\n",
"ax.scatter([point.x for point in citylist],\n",
" [point.y for point in citylist],\n",
" transform=ccrs.PlateCarree(),marker=\"+\",facecolor='black')\n",
2018-09-05 15:52:38 -06:00
"# Plot city names\n",
"for i, txt in enumerate(cityname):\n",
" ax.annotate(txt, (citylist[i].x,citylist[i].y),\n",
" xytext=(3,3), textcoords=\"offset points\")\n",
"\n",
"fig"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<a href=\"#top\">Top</a>\n",
"\n",
"---"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Draw Nearby Lakes\n",
"\n",
"Again, use the **envelope** attribute to define a new data requst for the nearby lakes."
2018-09-05 15:52:38 -06:00
]
},
{
"cell_type": "code",
"execution_count": 24,
2018-09-05 15:52:38 -06:00
"metadata": {
"scrolled": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Using 208 lake MultiPolygons\n"
]
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAABKQAAAN8CAYAAABm6XIcAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQABAABJREFUeJzs3Xt8jvUfx/HXvfN5sxkbxjazOc4h5BAmZx0IkZIWvySnkKhEqFRKKkWSUKmoUEkOOYUlxznO+Zw5b7Pz8f79cefOnTPb7h3ez8fjfmz3dfhen+t273Zfn+v7/XwNRqPRiIiIiIiIiIiISD6xsXYAIiIiIiIiIiJSvCghJSIiIiIiIiIi+UoJKRERERERERERyVdKSImIiIiIiIiISL5SQkpERERERERERPKVElIiIiIiIiIiIpKvlJASEREREREREZF8pYSUiIiIiIiIiIjkKyWkREREREREREQkXykhVYgcPXoUg8FAdHS0tUMREREREREREbljRTIhdfbsWZ599lnKly+Po6Mjfn5+tGnThj///NO8jcFgYOHChQWqbRERERERERGR4sDO2gHkhc6dO5OZmcns2bMJDg7mzJkzrFixgosXLxbotkVEREREREREioMi10MqPj6edevW8c4779C8eXMqVKhA/fr1efnll3nggQcACAwMBOCRRx7BYDCYn+d127/88gv33HMPTk5OBAcHM3bsWLKysszrDQYDU6dOpV27djg7OxMUFMT3339/VRyHDx+mefPmuLi4ULNmTYveWQBRUVE0bdoUZ2dnAgICGDRoEMnJyeb1gYGBjB8/nl69euHu7k758uX57LPPzOszMjIYMGAA/v7+ODk5ERgYyFtvvXVLr5GIiIiIiIiIyM0UuYSUm5sbbm5uLFy4kPT09Gtus2nTJgBmzpxJbGys+Xletr106VJ69OjBoEGD2LNnD9OmTWPWrFm8+eabFvuPGjWKzp07s337dnr06EH37t2JiYmx2GbkyJEMGzaM6OhoQkND6d69uzmxtXPnTtq0aUOnTp3YsWMHc+fOZd26dQwYMMCijYkTJ1K3bl22bdtGv379eO6559i7dy8AH330ET///DPz5s1j3759fP3117ectBMRERERERERuRmD0Wg0WjuI3Pbjjz/yzDPPkJqaSp06dWjWrBmPPfYY4eHh5m0MBgMLFiygY8eO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
2018-09-05 15:52:38 -06:00
"text/plain": [
"<Figure size 1200x1200 with 1 Axes>"
2018-09-05 15:52:38 -06:00
]
},
"execution_count": 24,
2018-09-05 15:52:38 -06:00
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Define request for lakes\n",
2018-09-05 15:52:38 -06:00
"request = DataAccessLayer.newDataRequest('maps', envelope=envelope)\n",
"request.addIdentifier('table', 'mapdata.lake')\n",
"request.addIdentifier('geomField', 'the_geom')\n",
"\n",
"# Get lake geometries\n",
"response = DataAccessLayer.getGeometryData(request)\n",
"print(\"Using \" + str(len(response)) + \" lake MultiPolygons\")\n",
2018-09-05 15:52:38 -06:00
"\n",
"# Plot lakes\n",
"shape_feature = ShapelyFeature([lake.getGeometry() for lake in response],ccrs.PlateCarree(), \n",
" facecolor='blue', linestyle=\"-\",edgecolor='#20B2AA')\n",
"ax.add_feature(shape_feature)\n",
2018-09-05 15:52:38 -06:00
"fig\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<a href=\"#top\">Top</a>\n",
"\n",
"---"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Draw Major Rivers"
2018-09-05 15:52:38 -06:00
]
},
{
"cell_type": "code",
"execution_count": 25,
2018-09-05 15:52:38 -06:00
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Using 1400 river MultiLineStrings\n"
2018-09-05 15:52:38 -06:00
]
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAABKQAAAN8CAYAAABm6XIcAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQABAABJREFUeJzs3XdcVfX/wPHXudzLuuyhoCIICIKKC3ErrhzZV8vKLCvTX2WuXGlLMysry9SWlbkqK63UzMyRK0duUVRcKCKKInvDHef3B3oT92AovJ+PBw/vPeNz3udyud7zPp/P+6OoqqoihBBCCCGEEEIIIUQZ0ZR3AEIIIYQQQgghhBCicpGElBBCCCGEEEIIIYQoU5KQEkIIIYQQQgghhBBlShJSQgghhBBCCCGEEKJMSUJKCCGEEEIIIYQQQpQpSUgJIYQQQgghhBBCiDIlCSkhhBBCCCGEEEIIUaYkISWEEEIIIYQQQgghypQkpIQQQgghhBBCCCFEmZKE1H0kLi4ORVGIiooq71CEEEIIIYQQQggh7liFTEglJSXx4osvUrNmTWxsbPDy8qJLly78+++/lm0URWHp0qX3VNtCCCGEEEIIIYQQlYG2vAMoDb1798ZgMDB//nz8/f05f/48a9euJTU19Z5uWwghhBBCCCGEEKIyqHA9pNLT09m8eTMffvgh7du3x9fXl4iICF577TUefPBBAPz8/AB4+OGHURTF8ry02/7jjz9o0qQJtra2+Pv78/bbb2M0Gi3rFUVh5syZdOvWDTs7O2rVqsUvv/xyVRwnTpygffv22Nvb06BBg2K9swC2bt1K27ZtsbOzw8fHh+HDh5OTk2NZ7+fnx+TJkxkwYACOjo7UrFmTb775xrK+sLCQoUOH4u3tja2tLX5+frz//vu39BoJIYQQQgghhBBC3EyFS0g5ODjg4ODA0qVLKSgouOY2O3fuBGDu3LkkJiZanpdm26tWraJfv34MHz6cQ4cO8fXXXzNv3jzee++9YvuPHz+e3r17s2/fPvr160ffvn2JiYkpts0bb7zBmDFjiIqKIigoiL59+1oSW9HR0XTp0oVHHnmE/fv3s3DhQjZv3szQoUOLtTF16lTCw8PZu3cvgwcP5qWXXuLw4cMAfPrppyxbtoxFixZx5MgRfvjhh1tO2gkhhBBCCCGEEELcjKKqqlreQZS03377jeeff568vDwaN25Mu3bteOKJJwgLC7NsoygKS5YsoVevXmXSdtu2benWrRuvvfaaZdkPP/zA2LFjOXv2rGW/QYMGMXPmTMs2zZs3p3Hjxnz55ZfExcVRq1Ytvv32WwYOHAjAoUOHqFu3LjExMdSpU4dnnnkGOzs7vv76a0sbmzdvpl27duTk5Fh6PLVp04bvv/8eAFVV8fLy4u2332bQoEEMHz6cgwcP8vfff6Moym29PkIIIYQQQgghhBA3U+F6SEFRnaezZ8+ybNkyunTpwoYNG2jcuDHz5s0rt7Z3797NpEmTLL2sHBwceP7550lMTCQ3N9eyXYsWLYrt16JFi6t6SF2e/PL29gaKiq1fOs68efOKHadLly6YzWZOnjx5zTYURcHLy8vSRv/+/YmKiiI4OJjhw4ezevXq23iFhBBCCCGEEEIIIW6sQiakAGxtbencuTMTJkxg69at9O/fn7feeqvc2jabzbz99ttERUVZfqKjozl27Bi2trY33PfKXko6ne6qdWaz2fLviy++WOw4+/bt49ixYwQEBFyzjUvtXGqjcePGnDx5knfeeYe8vDwef/xxHn300Zu8KkIIIYQQQgghhBC3pkLOsnctoaGhLF261PJcp9NhMpnKrO3GjRtz5MgRAgMDb9jWtm3beOaZZ4o9b9So0S3H0rhxYw4ePHjT49yMk5MTffr0oU+fPjz66KN07dqV1NRU3Nzc7qpdIYQQQgghhBBCiAqXkEpJSeGxxx5jwIABhIWF4ejoyK5du5gyZQo9e/a0bOfn58fatWtp1aoVNjY2uLq6smPHDp555hnWrl1L9erVS7TtCRMm0KNHD3x8fHjsscfQaDTs37+f6Oho3n33Xcu+v/zyC+Hh4bRu3ZoFCxawY8cOZs+efcvnP27cOJo3b86QIUN4/vnn0ev1xMTEsGbNGj777LNbamPatGl4e3vTsGFDNBoNv/zyC15eXri4uNxyHEIIIYQQQgghhBDXU+ESUg4ODjRr1oxp06YRGxuLwWDAx8eH559/ntdff92y3dSpUxk1ahSzZs2ievXqxMXFkZuby5EjRzAYDCXedpcuXVi+fDmTJk1iypQp6HQ66tSpw//93/8VO8bbb7/Nzz//zODBg/Hy8mLBggWEhobe8vmHhYWxceNG3njjDdq0aYOqqgQEBNCnT5/beg0//PBDjh07hpWVFU2bNmXFihVoNBV2hKcQQgghhBBCCCHKUIWcZe9+dacz/wkhhBBCCCGEEELcT6TLixBCCCGEEEIIIYQoU5KQEkIIIYQQQgghhBBlqsLVkLqfyehJIYQQQgghhBBCVAbSQ0oIIYQQQgghhBBClClJSAkhhBBCCCGEEEKIMiUJKSGEEEIIIYQQQghRpiQhJYQQQgghhBBCCCHKlCSkhBBCCCGEEEIIIUSZui8SUv3796dXr17lHYYQQgghhBBCCCGEKAG3nZCS5JAQQlzbuXPnGDZsGP7+/tjY2ODj48NDDz3E2rVryzs0IYQQ4p6jKApLly4t8XblekUIIe4P90UPqbulqipGo7G8wxBCVGBxcXE0adKEdevWMWXKFKKjo1m5ciXt27dnyJAh5R3edRUWFpZ3CEIIISoouVEjhBDiRko0IfXJJ59Qv3599Ho9Pj4+DB48mOzsbMv6efPm4eLiwqpVqwgJCcHBwYGuXbuSmJho2cZkMjFq1ChcXFxwd3dn7NixqKpa7DiqqjJlyhT8/f2xs7OjQYMG/Prrr5b1GzZsQFEUVq1aRXh4ODY2NmzatKkkT1UIIYoZPHgwiqKwY8cOHn30UYKCgqhbty6jRo1i27ZtwM0/I0+dOsVDDz2Eq6srer2eunXrsmLFCuC/z7U///yTBg0aYGtrS7NmzYiOji4Wx9atW2nbti12dnb4+PgwfPhwcnJyLOv9/Px499136d+/P87Ozjz//PNl8OoIIYSobO7lGzVyM0YIIe4NJZqQ0mg0fPrppxw4cID58+ezbt06xo4dW2yb3NxcPv74Y77//nv++ecf4uPjGTNmjGX91KlTmTNnDrNnz2bz5s2kpqayZMmSYm28+eabzJ07l5kzZ3Lw4EFGjhxJv3792LhxY7Htxo4dy/vvv09MTAxhYWEleapCCGGRmprKypUrGTJkCHq9/qr1Li4uwM0/I4cMGUJBQQH//PMP0dHRfPjhhzg4OBRr65VXXuHjjz9m586dVKlShf/9738YDAYAoqOj6dKlC4888gj79+9n4cKFbN68maFDhxZr46OPPqJevXrs3r2b8ePHl/CrIYQQQtzajRqA5ORkHn74Yezt7alduzbLli2zrDOZTAwcOJBatWphZ2dHcHAwM2bMKHacW7mZHRkZydChQxk1ahQeHh507twZgI0bNxIREYGNjQ3e3t68+uqrxUZVREZGMnz4cMaOHYubmxteXl5MnDixFF4tIYSopNTb9Oyzz6o9e/a8pW0XLVqkuru7W57PnTtXBdTjx49bln3xxRdq1apVLc+9vb3VDz74wPLcYDCoNWrUsBwzOztbtbW1Vbdu3VrsWAMHDlT79u2rqqqqrl+/XgXUpUuX3u7pCSHEbdu+fbsKqIsXL76t/a78jKxfv746ceLEa2576XPt559/tixLSUlR7ezs1IULF6qqqqpPP/20+sILLxTbb9OmTapGo1Hz8vJUVVVVX19ftVevXrcVpxBCCHE7UlJSVEVR1MmTJ99wO0CtUaOG+uOPP6rHjh1Thw8frjo4OKgpKSmqqqpqYWGhOmHCBHXHjh3qiRMn1B9++EG1t7e3/L+nqqr64Ycfqs7Ozuqvv/6qHjp0SB04cKDq6OhY7HqlXbt2qoODg/rKK6+ohw8fVmNiYtSEhATV3t5eHTx4sBoTE6M
2018-09-05 15:52:38 -06:00
"text/plain": [
"<Figure size 1200x1200 with 1 Axes>"
2018-09-05 15:52:38 -06:00
]
},
"execution_count": 25,
2018-09-05 15:52:38 -06:00
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Define request for rivers\n",
2018-09-05 15:52:38 -06:00
"request = DataAccessLayer.newDataRequest('maps', envelope=envelope)\n",
"request.addIdentifier('table', 'mapdata.majorrivers')\n",
"request.addIdentifier('geomField', 'the_geom')\n",
"rivers = DataAccessLayer.getGeometryData(request)\n",
2018-09-05 15:52:38 -06:00
"print(\"Using \" + str(len(rivers)) + \" river MultiLineStrings\")\n",
"\n",
"# Plot rivers\n",
"shape_feature = ShapelyFeature([river.getGeometry() for river in rivers],ccrs.PlateCarree(), \n",
" facecolor='none', linestyle=\":\",edgecolor='#20B2AA')\n",
"ax.add_feature(shape_feature)\n",
2018-09-05 15:52:38 -06:00
"fig"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<a href=\"#top\">Top</a>\n",
"\n",
"---"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Draw Topography\n",
2018-09-05 15:52:38 -06:00
"\n",
"Spatial envelopes are required for topo requests, which can become slow to download and render for large (CONUS) maps."
]
},
{
"cell_type": "code",
"execution_count": 26,
2018-09-05 15:52:38 -06:00
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[<awips.dataaccess.PyGridData.PyGridData object at 0x7f0076808190>]\n",
2018-09-05 15:52:38 -06:00
"Number of grid records: 1\n",
"Sample grid data shape:\n",
"(778, 1058)\n",
"\n",
"Sample grid data:\n",
"[[1694. 1693. 1688. ... 757. 761. 762.]\n",
" [1701. 1701. 1701. ... 758. 760. 762.]\n",
" [1703. 1703. 1703. ... 760. 761. 762.]\n",
" ...\n",
" [1767. 1741. 1706. ... 769. 762. 768.]\n",
" [1767. 1746. 1716. ... 775. 765. 761.]\n",
" [1781. 1753. 1730. ... 766. 762. 759.]]\n",
2018-09-05 15:52:38 -06:00
"\n"
]
}
],
"source": [
"# Define topography request\n",
"request = DataAccessLayer.newDataRequest(\"topo\", envelope=envelope)\n",
2018-09-05 15:52:38 -06:00
"request.addIdentifier(\"group\", \"/\")\n",
"request.addIdentifier(\"dataset\", \"full\")\n",
"gridData = DataAccessLayer.getGridData(request)\n",
"print(gridData)\n",
"print(\"Number of grid records: \" + str(len(gridData)))\n",
"print(\"Sample grid data shape:\\n\" + str(gridData[0].getRawData().shape) + \"\\n\")\n",
"print(\"Sample grid data:\\n\" + str(gridData[0].getRawData()) + \"\\n\")"
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {
"scrolled": true
},
2018-09-05 15:52:38 -06:00
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"623.0\n",
"4328.0\n"
]
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAABBEAAAOvCAYAAACanFzgAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQABAABJREFUeJzsnXmcHGWd/99PVfXdPWcmM7lICCEhECBAuG+FBVldVFR0V5EFXTEccgisKAjoroqLrLiILj8EVBRQQVhWBZdLMCBnIECAkAABkpkkk7n67qp6fn9UV3V1TfVMTzIBos/79ZrXdFc99dRTR3fX9/N8DyGllCgUCoVCoVAoFAqFQqFQjIP2bg9AoVAoFAqFQqFQKBQKxfaBEhEUCoVCoVAoFAqFQqFQNIUSERQKhUKhUCgUCoVCoVA0hRIRFAqFQqFQKBQKhUKhUDSFEhEUCoVCoVAoFAqFQqFQNIUSERQKhUKhUCgUCoVCoVA0hRIRFAqFQqFQKBQKhUKhUDSFEhEUCoVCoVAoFAqFQqFQNIUSERQKhUKhUCgUCoVCoVA0hRIR3qO8/vrrCCFYvnz5uz0UhUKhUCgUCoVCoVAogL8CEWHDhg184QtfYIcddiAWi9HT08MxxxzDo48+6rURQvDb3/72PdW3QqFQKBQKhUKhUCgU2xvGuz2AreWEE06gUqlw0003MXfuXPr6+rjvvvvYvHnze7pvhUKhUCgUCoVCoVAotje2a0+EwcFBHnnkEb7zne9w5JFHMnv2bPbbbz++8pWv8Pd///cAzJkzB4CPfOQjCCG899u67//5n/9hn332IR6PM3fuXC677DJM0/TWCyG49tpr+cAHPkAikWDHHXfkV7/61ahxrFmzhiOPPJJkMsmee+5Z5wUBsGzZMg477DASiQSzZs3irLPOIpfLeevnzJnDv//7v3PKKaeQyWTYYYcd+O///m9vfblc5owzzmDatGnE43HmzJnDt771rabOkUKhUCgUCoVCoVAo/rbYrkWEdDpNOp3mt7/9LaVSKbTNE088AcANN9zA+vXrvffbsu977rmHT3/605x11lm8+OKL/PjHP+bGG2/k3/7t3+q2v/jiiznhhBN49tln+fSnP82nPvUpVq5cWdfmq1/9Kl/+8pdZvnw58+fP51Of+pQnRqxYsYJjjjmGj370ozz33HPceuutPPLII5xxxhl1fVx55ZUsWbKEZ555hqVLl/LFL36Rl156CYCrr76au+66i9tuu42XX36Zn//8500LLQqFQqFQKBQKhUKh+NtCSCnluz2IreE3v/kNn//85ykUCuy9994cfvjhfPKTn2SPPfbw2gghuOOOO/jwhz/8jvR92GGH8YEPfICvfOUr3rKf//znXHDBBaxbt87b7rTTTuPaa6/12hxwwAHsvffe/PCHP+T1119nxx135P/9v//HqaeeCsCLL77IbrvtxsqVK9lll1046aSTSCQS/PjHP/b6eOSRRzj88MPJ5XKeZ8Ghhx7Kz372MwCklPT09HDZZZdx2mmncdZZZ/HCCy/wf//3fwghJnR+FAqFQqFQKBQKhULxt8V27YkATt6CdevWcdddd3HMMcfw4IMPsvfee3PjjTe+a30/9dRTXH755Z43Qzqd5vOf/zzr168nn8977Q488MC67Q488MBRngh+wWLatGmAk/DR3c+NN95Yt59jjjkG27Z57bXXQvsQQtDT0+P1cfLJJ7N8+XIWLFjAWWedxb333juBM6RQKBQKhUKhUCgUir8ltnsRASAej3P00UdzySWXsGzZMk4++WS+/vWvv2t927bNZZddxvLly72/FStWsGrVKuLx+JjbBr0BIpHIqHW2bXv/v/CFL9Tt59lnn2XVqlXstNNOoX24/bh97L333rz22mt84xvfoFAo8IlPfIKPfexj45wVhUKhUCgUCoVCoVD8LbLdV2cIY9ddd60ruxiJRLAs6x3re++99+bll19m3rx5Y/b12GOPcdJJJ9W932uvvZoey957780LL7ww7n7Go6WlhRNPPJETTzyRj33sYxx77LFs3ryZjo6OrepXoVAoFAqFQqFQKBR/XWzXIkJ/fz8f//jHOeWUU9hjjz3IZDI8+eSTXHHFFRx//PFeuzlz5nDfffdx8MEHE4vFaG9v5/HHH+ekk07ivvvuY8aMGZPa9yWXXMIHP/hBZs2axcc//nE0TeO5555jxYoVfPOb3/S2/dWvfsWSJUs45JBDuPnmm3n88ce5/vrrmz7+Cy+8kAMOOIDTTz+dz3/+86RSKVauXMkf//hHfvCDHzTVx1VXXcW0adNYvHgxmqbxq1/9ip6eHtra2poeh0KhUCgUCoVCoVAo/jbYrkWEdDrN/vvvz1VXXcXq1aupVCrMmjWLz3/+81x00UVeuyuvvJJzzz2X6667jhkzZvD666+Tz+d5+eWXqVQqk973Mcccw913383ll1/OFVdcQSQSYZddduFzn/tc3T4uu+wybrnlFpYuXUpPTw8333wzu+66a9PHv8cee/DQQw/x1a9+lUMPPRQpJTvttBMnnnjihM7hd77zHVatWoWu6+y777787ne/Q9P+KiJdFAqFQqFQKBQKhUIxiWz31Rm2V7a0YoRCoVAoFAqFQqFQKBTvFmq6WaFQKBQKhUKhUCgUCkVTKBFBoVAoFAqFQqFQKBQKRVNs1zkRtmdUFIlCoVAoFAqFQqFQKLY3lCeCQqFQKBQKhUKhUCgUiqZQIoJCoVAoFAqFQqFQKBSKplAigkKhUCgUCoVCoVAoFIqm2C5EhJNPPlmVQlQo/gbp7e3lzDPPZO7cucRiMWbNmsWHPvQh7rvvvnd7aAqFQqF4DyOE4Le//e2k96ueSRUKhWILRAT15alQKN4JXn/9dfbZZx/uv/9+rrjiClasWMEf/vAHjjzySE4//fR3e3gNKZfL7/YQFAqF4q8eJTIrFArFu8d24YmwtUgpMU3z3R6GQqGYAEuXLkUIweOPP87HPvYx5s+fz2677ca5557LY489BsD3vvc9dt99d1KpFLNmzWLp0qVks1mvjzfeeIMPfehDtLe3k0ql2G233fjd734HwIMPPogQgv/93/9lzz33JB6Ps//++7NixYq6cSxbtozDDjuMRCLBrFmzOOuss8jlct76OXPm8M1vfpOTTz6Z1tZWPv/5z78DZ0ehUCj+dnkvi8xKSFYoFH8LTKqIMN4D/Y033khbWxv33HMPCxcuJJ1Oc+yxx7J+/XqvjWVZnHvuubS1tdHZ2ckFF1wwqhyilJIrrriCuXPnkkgk2HPPPfn1r3/trXeNg3vuuYclS5YQi8V4+OGHJ/NQFQrFNmTz5s384Q9/4PTTTyeVSo1a39bWBoCmaVx99dU8//zz3HTTTdx///1ccMEFXrvTTz+dUqnEn/70J1asWMF3vvMd0ul0XV/nn38+//Ef/8ETTzzB1KlT+Yd/+AcqlQoAK1as4JhjjuGjH/0ozz33HLfeeiuPPPIIZ5xxRl0f3/3ud1m0aBFPPfUUF1988SSfDYVCoVD4aUZkBti0aRMf+chHSCaT7Lzzztx1113eOsuyOPXUU9lxxx1JJBIsWLCA73//+3X7aeaZ9IgjjuCMM87g3HPPZcqUKRx99NEAPPTQQ+y3337EYjGmTZvGv/7rv9ZNaB1xxBGcddZZXHDBBXR0dNDT08Oll166Dc6WQqFQbAPkBPnsZz8rjz/++NB1V111lbz//vvlmjVr5H333ScXLFggv/jFL3rrb7jhBhmJRORRRx0ln3jiCfnUU0/JhQsXyn/8x3/02nznO9+Rra2t8te//rV88cUX5amnniozmUzdPi+66CK5yy67yD/84Q9y9erV8oYbbpCxWEw++OCDUkopH3jgAQnIPfbYQ957773y1VdflZs2bZrooSoUineJv/zlLxKQt99++4S2u+2222RnZ6f3fvfdd5eXXnppaFv3e+KWW27xlvX398tEIiFvvfVWKaWUn/nMZ+S//Mu/1G338MMPS03TZKFQkFJKOXv2bPnhD394QuNUKBQKxZbR398vhRDy3//938dsB8iZM2fKX/ziF3LVqlX
2018-09-05 15:52:38 -06:00
"text/plain": [
"<Figure size 1200x1200 with 2 Axes>"
2018-09-05 15:52:38 -06:00
]
},
"execution_count": 27,
2018-09-05 15:52:38 -06:00
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"grid=gridData[0]\n",
"topo=ma.masked_invalid(grid.getRawData()) \n",
"lons, lats = grid.getLatLonCoords()\n",
"print(topo.min()) # minimum elevation in our domain (meters)\n",
"print(topo.max()) # maximum elevation in our domain (meters)\n",
2018-09-05 15:52:38 -06:00
"\n",
"# Plot topography\n",
"cs = ax.contourf(lons, lats, topo, 80, cmap=plt.get_cmap('terrain'),alpha=0.1, extend='both')\n",
"cbar = fig.colorbar(cs, shrink=0.5, orientation='horizontal')\n",
2018-09-05 15:52:38 -06:00
"cbar.set_label(\"topography height in meters\")\n",
"\n",
"fig"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<a href=\"#top\">Top</a>\n",
"\n",
"---"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## See Also\n",
"\n",
"### Additional Documentation\n",
"\n",
"* This notebook requires: **python-awips, numpy, matplotplib, cartopy, shapely**\n",
"* Use datatype **maps** and **addIdentifier('table', &lt;postgres maps schema&gt;)** to define the map table:\n",
" DataAccessLayer.changeEDEXHost(\"edex-cloud.unidata.ucar.edu\")\n",
" request = DataAccessLayer.newDataRequest('maps')\n",
" request.addIdentifier('table', 'mapdata.county')\n",
"* Use **request.setLocationNames()** and **request.addIdentifier()** to spatially filter a map resource. In the example below, WFO ID **BOU** (Boulder, Colorado) is used to query counties within the BOU county watch area (CWA) \n",
" \n",
" request.addIdentifier('geomField', 'the_geom')\n",
" request.addIdentifier('inLocation', 'true')\n",
" request.addIdentifier('locationField', 'cwa')\n",
" request.setLocationNames('BOU')\n",
" request.addIdentifier('cwa', 'BOU')\n",
" \n",
"See the <a href=\"http://unidata.github.io/awips2/python/maps-database/#mapdatacwa\">Maps Database Reference Page</a> for available database tables, column names, and types. "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<a href=\"#top\">Top</a>\n",
"\n",
"---"
]
2018-09-05 15:52:38 -06:00
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
2018-09-05 15:52:38 -06:00
"language": "python",
"name": "python3"
2018-09-05 15:52:38 -06:00
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
2018-09-05 15:52:38 -06:00
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.13.1"
},
"toc": {
"base_numbering": 1,
"nav_menu": {},
"number_sections": true,
"sideBar": true,
"skip_h1_title": true,
"title_cell": "Table of Contents",
"title_sidebar": "Contents",
"toc_cell": true,
"toc_position": {},
"toc_section_display": true,
"toc_window_display": true
2018-09-05 15:52:38 -06:00
}
},
"nbformat": 4,
"nbformat_minor": 4
2018-09-05 15:52:38 -06:00
}