mirror of
https://github.com/Unidata/python-awips.git
synced 2025-02-24 06:57:56 -05:00
719 lines
1 MiB
Text
719 lines
1 MiB
Text
|
{
|
||
|
"cells": [
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"metadata": {},
|
||
|
"source": [
|
||
|
"Python-AWIPS Tutorial Notebook"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"metadata": {},
|
||
|
"source": [
|
||
|
"---\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": {},
|
||
|
"source": [
|
||
|
"## Table of Contents\n",
|
||
|
"\n",
|
||
|
"[1 Imports](https://unidata.github.io/python-awips/examples/generated/Map_Resources_and_Topography.html#imports)<br> \n",
|
||
|
"[2 Connect to EDEX](https://unidata.github.io/python-awips/examples/generated/Map_Resources_and_Topography.html#connect-to-edex)<br> \n",
|
||
|
"[3 Function: make_map()](https://unidata.github.io/python-awips/examples/generated/Map_Resources_and_Topography.html#function-make-map)<br> \n",
|
||
|
"[4 Create Initial Map From CWA](https://unidata.github.io/python-awips/examples/generated/Map_Resources_and_Topography.html#create-initial-map-from-cwa)<br> \n",
|
||
|
"[5 Draw Merged CWA](https://unidata.github.io/python-awips/examples/generated/Map_Resources_and_Topography.html#draw-merged-cwa)<br> \n",
|
||
|
"[6 Draw Interstates using Boundary Filter](https://unidata.github.io/python-awips/examples/generated/Map_Resources_and_Topography.html#draw-interstates-using-boundary-filter)<br> \n",
|
||
|
"[7 Draw Nearby Cities](https://unidata.github.io/python-awips/examples/generated/Map_Resources_and_Topography.html#draw-nearby-cities)<br> \n",
|
||
|
"[8 Draw Nearby Lakes](https://unidata.github.io/python-awips/examples/generated/Map_Resources_and_Topography.html#draw-nearby-lakes)<br> \n",
|
||
|
"[9 Draw Major Rivers](https://unidata.github.io/python-awips/examples/generated/Map_Resources_and_Topography.html#draw-major-rivers)<br> \n",
|
||
|
"[10 Draw Topography](https://unidata.github.io/python-awips/examples/generated/Map_Resources_and_Topography.html#draw-topography)<br> \n",
|
||
|
"[11 See Also](https://unidata.github.io/python-awips/examples/generated/Map_Resources_and_Topography.html#see-also)<br> \n",
|
||
|
" [11.1 Additional Documentation](https://unidata.github.io/python-awips/examples/generated/Map_Resources_and_Topography.html#additional-documentation)<br> "
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"metadata": {},
|
||
|
"source": [
|
||
|
"## 1 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. "
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 1,
|
||
|
"metadata": {},
|
||
|
"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",
|
||
|
"from cartopy.mpl.gridliner import LONGITUDE_FORMATTER, LATITUDE_FORMATTER\n",
|
||
|
"from cartopy.feature import ShapelyFeature,NaturalEarthFeature\n",
|
||
|
"from shapely.ops import cascaded_union"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"metadata": {},
|
||
|
"source": [
|
||
|
"[Top](https://unidata.github.io/python-awips/examples/generated/Map_Resources_and_Topography.html)\n",
|
||
|
"\n",
|
||
|
"---"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"metadata": {},
|
||
|
"source": [
|
||
|
"## 2 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": 2,
|
||
|
"metadata": {},
|
||
|
"outputs": [],
|
||
|
"source": [
|
||
|
"# Server, Data Request Type, and Database Table\n",
|
||
|
"DataAccessLayer.changeEDEXHost(\"edex-beta.unidata.ucar.edu\")\n",
|
||
|
"request = DataAccessLayer.newDataRequest('maps')"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"metadata": {},
|
||
|
"source": [
|
||
|
"[Top](https://unidata.github.io/python-awips/examples/generated/Map_Resources_and_Topography.html)\n",
|
||
|
"\n",
|
||
|
"---"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"metadata": {},
|
||
|
"source": [
|
||
|
"## 3 Function: make_map()\n",
|
||
|
"\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": 3,
|
||
|
"metadata": {},
|
||
|
"outputs": [],
|
||
|
"source": [
|
||
|
"# 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",
|
||
|
" gl.xformatter = LONGITUDE_FORMATTER\n",
|
||
|
" gl.yformatter = LATITUDE_FORMATTER\n",
|
||
|
" return fig, ax"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"metadata": {},
|
||
|
"source": [
|
||
|
"[Top](https://unidata.github.io/python-awips/examples/generated/Map_Resources_and_Topography.html)\n",
|
||
|
"\n",
|
||
|
"---"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"metadata": {},
|
||
|
"source": [
|
||
|
"## 4 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",
|
||
|
"\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",
|
||
|
"\n",
|
||
|
"> **Tip**: Note the geometry definition of `the_geom` for each data type, which can be **Point**, **MultiPolygon**, or **MultiLineString**.\n",
|
||
|
"\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."
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 5,
|
||
|
"metadata": {},
|
||
|
"outputs": [
|
||
|
{
|
||
|
"name": "stdout",
|
||
|
"output_type": "stream",
|
||
|
"text": [
|
||
|
"Using 22 county MultiPolygons\n"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"data": {
|
||
|
"text/plain": [
|
||
|
"<cartopy.mpl.feature_artist.FeatureArtist at 0x11568f6d0>"
|
||
|
]
|
||
|
},
|
||
|
"execution_count": 5,
|
||
|
"metadata": {},
|
||
|
"output_type": "execute_result"
|
||
|
},
|
||
|
{
|
||
|
"data": {
|
||
|
"image/png": "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
|
||
|
"text/plain": [
|
||
|
"<Figure size 864x864 with 1 Axes>"
|
||
|
]
|
||
|
},
|
||
|
"metadata": {
|
||
|
"needs_background": "light"
|
||
|
},
|
||
|
"output_type": "display_data"
|
||
|
}
|
||
|
],
|
||
|
"source": [
|
||
|
"# Specify the necessary identifiers for requesting the Boulder CWA\n",
|
||
|
"request.addIdentifier('table', 'mapdata.county')\n",
|
||
|
"# 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",
|
||
|
"for ob in response:\n",
|
||
|
" counties.append(ob.getGeometry())\n",
|
||
|
"print(\"Using \" + str(len(counties)) + \" county MultiPolygons\")\n",
|
||
|
"\n",
|
||
|
"\n",
|
||
|
"# All WFO counties merged to a single Polygon\n",
|
||
|
"merged_counties = cascaded_union(counties)\n",
|
||
|
"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",
|
||
|
"fig, ax = make_map(bbox=bbox)\n",
|
||
|
"\n",
|
||
|
"# 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": [
|
||
|
"[Top](https://unidata.github.io/python-awips/examples/generated/Map_Resources_and_Topography.html)\n",
|
||
|
"\n",
|
||
|
"---"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"metadata": {},
|
||
|
"source": [
|
||
|
"## 5 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."
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 6,
|
||
|
"metadata": {},
|
||
|
"outputs": [
|
||
|
{
|
||
|
"data": {
|
||
|
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAsoAAAI3CAYAAACCmn2HAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8rg+JYAAAACXBIWXMAAAsTAAALEwEAmpwYAAB5KUlEQVR4nO3dd5wb9Z0//td7RtL25vV6Xda9d2NMMWCwqQZMJ0AI7UghCSEkF9Lue5dc8ktyyYW7JBzpQIAQCKb3ZsNiDNjGvffe1+v19l2tZj6/P0bSSutdr7ZoivR6PjCrGc2MPtJImpc+85nPR5RSICIiIiKieJrTBSAiIiIiciMGZSIiIiKidjAoExERERG1g0GZiIiIiKgdDMpERERERO3wOV2AjsydO1cdO3bM6WKklGAwiEAg4HQx0h73g3twXzhj9erVMAwDU6dOhc/n435wCe4Hd+B+sN+KFSveUUrNbe8+1wblY8eOYfny5U4XI6WUl5dj9uzZThcj7XE/uAf3hTOKi4tx/PhxLFiwAH379uV+cAnuB3fgfrCfiPTt6D42vSAiIluJCACA/fgTkdsxKBMRka0YlInIKxiUiYjIVgzKROQVDMpERGQrBmUi8goGZSIishWDMhF5BYMyERHZikGZiLyCQZmIiGzFoExEXsGgTEREtooEZSIit2NQJiIiR7BGmYjcjkGZiIhsxaYXROQVDMpERGQrBmUi8goGZSIishWDMhF5BYMyERHZikGZiLyCQZmIiGzFoExEXsGgTEREtmJQJiKvYFAmIiJbMSgTkVcwKBMRka0YlInIKxiUiYjIVgzKROQVDMpERGQrBmUi8goGZSIishWDMhF5BYMyERHZikGZiLyCQZmIiGzFoExEXsGgTEREtmJQJiKvYFAmIiJbRYIyEZHbMSgTEZEjWKNMRG7HoExERLZi0wsi8goGZSIishWDMhF5BYMyERHZikGZiLyCQZmIiGzFoExEXsGgTEREtmJQJiKvYFAmIiJbMSgTkVcwKBMRka0YlInIKxiUiYjIVgzKROQVDMpERGQrjsxHRF7BoExERI5gjTIRuR2DMhER2YpNL4jIKxiUiYjIVgzKROQVDMpERGQrBmUi8goGZSIishWDMhF5BYMyERHZikGZiLyCQZmIiGzFoExEXsGgTEREtmJQJiKvYFAmIiJbccARIvIKBmUiInIEa5SJyO0SDsoioovIKhF5PTz9axHZLCJrReQlESmMWfbXIrJcRC4ITw8TESUi98Us87CI3NV7T4WIiLyATS+IyCu6UqN8P4BNMdPvAZiklJoCYCuAHwKAiIwL338+gHtjlj8K4H4RCXS/uERE5HUMykTkFQkFZREpA3AlgEci85RS7yqlQuHJJQDKwrd1ACYABSC2IVoFgIUA7uxhmYmIyMMYlInIKxKtUf4tgO/BCsDtuRvAWwCglNoAIBvAYgB/bLPcLwF8R0T0LpeUiIhSAoMyEXmFdPZFJSLzAFyhlPq6iMwG8IBSal7M/f8PwAwA16sONiYiwwC8rpSaJCJPwmq2cRaA5Uqpx9tbZ8qUKeqhhx7q8hOijtXV1SE3N9fpYqQ97gf34L5wxtatW1FbW4sxY8YgLy+P+8EluB/cgfvBfnPmzFmhlJrR3n2+BNY/F8DVInIFgEwA+SLylFLqNhG5E8A8ABd1FJLb8QsAzwNYdKqFAoEAZs+eneAmKRHl5eV8TV2A+8E9uC+c8ZOf/ATl5eVYuHAhZs+ezf3gEtwP7sD94C6dNr1QSv1QKVWmlBoG4BYA74dD8lwA3wdwtVKqIdEHVEptBrARVsAmIqI0w6YXROQVPelH+WEAeQDeE5HVIvKnLqz7c7Re/EdERGmEQZmIvCKRphdRSqlyAOXh26O6sN5uAJNipteAg50QEaUlBmUi8gqGVSIishWDMhF5BYMyERHZikGZiLyCQZmIiGwVCcpERG7HoExERI5gjTIRuR2DMhER2YpNL4jIKxiUiYjIVgzKROQVDMpERGQrBmUi8goGZSIishWDMhF5BYMyERHZikGZiLyCQZmIiGzFoExEXsGgTEREtmJQJiKvYFAmIiJbMSgTkVcwKBMRka0YlInIKxiUiYjIVgzKROQVDMpERGQrBmUi8goGZSIishWDMhF5BYMyERHZikGZiLyCQZmIiGzFoExEXsGgTEREtooEZSIit2NQJiIiR7BGmYjcjkGZiIhsxaYXROQVDMpERGQrBmUi8goGZSIishWDMhF5BYMyERHZikGZiLyCQZmIiGzFoExEXsGgTEREtmJQJiKvYFAmIiJbMSgTkVcwKBMRka0YlInIKxiUiYjIVgzKROQVDMpERGQrBmUi8goGZSIishWDMhF5BYMyERHZikGZiLyCQZmIiGzFoExEXsGgTEREtmJQJiKvYFAmIiJbRYIyEZHbMSgTEZEjWKNMRG7HoExERLZi0wsi8goGZSIishWDMhF5BYMyERHZikGZiLyCQZmIiGzFoExEXsGgTEREtmJQJiKvYFAmIiJbMSgTkVcwKBMRka0YlInIKxiUiYjIVgzKROQVDMpERGQrBmUi8goGZSIishWDMhF5BYMyERHZikGZiLyCQZmIiGwVCcpERG7HoExERI5gjTIRuR2DMhER2YpNL4jIKxiUiYjIVgzKROQVDMpERGQrBmUi8goGZSIishWDMhF5BYMyERHZikGZiLyCQZmIiGzFoExEXsGgTEREtmJQJiKvYFAmIiJbMSgTkVcwKBMRka04Mh8ReQWDMhEROYI1ykTkdgzKRERkKza9ICKvYFAmIiJbMSgTkVcwKBMRka0YlInIKxiUiYjIVgzKROQVDMpERGQrBmUi8goGZSIishWDMhF5BYMyERHZikGZiLyCQZmIiGzFAUeIyCsYlImIyBGsUSYit2NQJiIiW7HpBRF5BYMyERHZikGZiLyCQZmIiGzFoExEXsGgTEREtmJQJiKvYFAmIiJbMSgTkVcwKBMRka0YlInIKxiUiYjIVgzKROQVDMpERGQrBmUi8goGZSIishWDMhF5BYMyERHZikGZiLyCQZmIiGzFoExEXsGgTEREtmJQJiKvYFAmIiJbMSgTkVcwKBMRka0iQZmIyO0YlImIyBGsUSYit2NQJiIiW7HpBRF5BYMyERHZikGZiLyCQZmIiGzFoExEXsGgTEREtmJQJiKvYFAmIiJbMSgTkVcwKBMRka0YlInIKxIOyiKii8gqEXk9PP05EdkgIqaIzGiz7K9FZLmIXBCeHiYiSkTui1nmYRG5q5eeBxEReQSDMhF5RVdqlO8HsClmej2A6wEsil1IRMaFb54P4N6Yu44CuF9EAt0oJxERpQgGZUqEUgrKNJ0uRtLw/e8NvkQWEpEyAFcC+DmAfwUApdSm8H1tF9cBmAAUgNg7KwB8DOBOAH/tSaHJHi0njmLHL69F/balQFe+rEQA0QAR6/0Rvg0IRNMASHgZgUTeIrHvo7j3VJv7lXlyWTQdovvC//wQ3QfoPohoEH8GtIxsaP5MaBnZEN0PaBo0fybE57fWFS3mrxa3HdF8Vjl1H5QyrecQLjsg1vIxzweihT8T4WmlrPVivhBDMgSHX/p13POMCw6mEb+t6OvX7ovdzst/8jxlGlBGCKLpMa9l7Je0sh47UlaloKCitxG5jdgv95j1lYpfL3ZeeN249WLui86PLY8yoUwj8oTCz7TNeyHyt7P3ZkevnQhaCk7Hvse+3f79SrV7W3x+mMEmGI21UMHG8PvCKocyWqCMkFX+8HtVGSHruZgGlNECs7mh9f1jGuH3h9n6XjEjX5/tFUlFPwPR95WmxbyHI89V4p93m30d3ZZptLkvgdetzXtDNB3QInUubT+vKvp4ovvD80xMranGO3MB/+HHsezz89Fw6Y+x7C/XQUFr7y0Nq07H7Lis0UdX4Yczw38jjy+A6Kd4TWJmR767VPz7Smk+67Nohlo/k8q0lov97HRUNmVAjBZrfQDKlwGlBxD/hFs/F9Lmcxe3DKzHtjYcs88RLkf0++cUnw2lrEeO2UcNV/4Kn/3hiphtnfy+afOsTnFfd4X
|
||
|
"text/plain": [
|
||
|
"<Figure size 864x864 with 1 Axes>"
|
||
|
]
|
||
|
},
|
||
|
"execution_count": 6,
|
||
|
"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",
|
||
|
"\n",
|
||
|
"fig"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"metadata": {},
|
||
|
"source": [
|
||
|
"[Top](https://unidata.github.io/python-awips/examples/generated/Map_Resources_and_Topography.html)\n",
|
||
|
"\n",
|
||
|
"---"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"metadata": {},
|
||
|
"source": [
|
||
|
"## 6 Draw Interstates using Boundary Filter\n",
|
||
|
"\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. "
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 7,
|
||
|
"metadata": {},
|
||
|
"outputs": [
|
||
|
{
|
||
|
"name": "stdout",
|
||
|
"output_type": "stream",
|
||
|
"text": [
|
||
|
"Using 225 interstate MultiLineStrings\n"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"data": {
|
||
|
"image/png": "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
|
||
|
"text/plain": [
|
||
|
"<Figure size 864x864 with 1 Axes>"
|
||
|
]
|
||
|
},
|
||
|
"execution_count": 7,
|
||
|
"metadata": {},
|
||
|
"output_type": "execute_result"
|
||
|
}
|
||
|
],
|
||
|
"source": [
|
||
|
"# Define the request for the interstate query\n",
|
||
|
"request = DataAccessLayer.newDataRequest('maps', envelope=envelope)\n",
|
||
|
"request.addIdentifier('table', 'mapdata.interstate')\n",
|
||
|
"request.addIdentifier('geomField', 'the_geom')\n",
|
||
|
"interstates = DataAccessLayer.getGeometryData(request)\n",
|
||
|
"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": [
|
||
|
"[Top](https://unidata.github.io/python-awips/examples/generated/Map_Resources_and_Topography.html)\n",
|
||
|
"\n",
|
||
|
"---"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"metadata": {},
|
||
|
"source": [
|
||
|
"## 7 Draw Nearby Cities\n",
|
||
|
"\n",
|
||
|
"Request the city table based using the **envelope** attribute and filter by population and progressive disclosure level.\n",
|
||
|
"\n",
|
||
|
"> **Warning**: The `prog_disc` field is not entirely understood and values appear to change significantly depending on WFO site."
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 8,
|
||
|
"metadata": {},
|
||
|
"outputs": [
|
||
|
{
|
||
|
"name": "stdout",
|
||
|
"output_type": "stream",
|
||
|
"text": [
|
||
|
"Queried 1205 total cities\n",
|
||
|
"Plotting 58 cities\n"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"data": {
|
||
|
"image/png": "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
|
||
|
"text/plain": [
|
||
|
"<Figure size 864x864 with 1 Axes>"
|
||
|
]
|
||
|
},
|
||
|
"execution_count": 8,
|
||
|
"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",
|
||
|
"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",
|
||
|
"\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",
|
||
|
"# 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": [
|
||
|
"[Top](https://unidata.github.io/python-awips/examples/generated/Map_Resources_and_Topography.html)\n",
|
||
|
"\n",
|
||
|
"---"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"metadata": {},
|
||
|
"source": [
|
||
|
"## 8 Draw Nearby Lakes\n",
|
||
|
"\n",
|
||
|
"Again, use the **envelope** attribute to define a new data requst for the nearby lakes."
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 9,
|
||
|
"metadata": {
|
||
|
"scrolled": true
|
||
|
},
|
||
|
"outputs": [
|
||
|
{
|
||
|
"name": "stdout",
|
||
|
"output_type": "stream",
|
||
|
"text": [
|
||
|
"Using 208 lake MultiPolygons\n"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"data": {
|
||
|
"image/png": "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
|
||
|
"text/plain": [
|
||
|
"<Figure size 864x864 with 1 Axes>"
|
||
|
]
|
||
|
},
|
||
|
"execution_count": 9,
|
||
|
"metadata": {},
|
||
|
"output_type": "execute_result"
|
||
|
}
|
||
|
],
|
||
|
"source": [
|
||
|
"# Define request for lakes\n",
|
||
|
"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",
|
||
|
"\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",
|
||
|
"fig\n"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"metadata": {},
|
||
|
"source": [
|
||
|
"[Top](https://unidata.github.io/python-awips/examples/generated/Map_Resources_and_Topography.html)\n",
|
||
|
"\n",
|
||
|
"---"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"metadata": {},
|
||
|
"source": [
|
||
|
"## 9 Draw Major Rivers"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 10,
|
||
|
"metadata": {},
|
||
|
"outputs": [
|
||
|
{
|
||
|
"name": "stdout",
|
||
|
"output_type": "stream",
|
||
|
"text": [
|
||
|
"Using 1400 river MultiLineStrings\n"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"data": {
|
||
|
"image/png": "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
|
||
|
"text/plain": [
|
||
|
"<Figure size 864x864 with 1 Axes>"
|
||
|
]
|
||
|
},
|
||
|
"execution_count": 10,
|
||
|
"metadata": {},
|
||
|
"output_type": "execute_result"
|
||
|
}
|
||
|
],
|
||
|
"source": [
|
||
|
"# Define request for rivers\n",
|
||
|
"request = DataAccessLayer.newDataRequest('maps', envelope=envelope)\n",
|
||
|
"request.addIdentifier('table', 'mapdata.majorrivers')\n",
|
||
|
"request.addIdentifier('geomField', 'the_geom')\n",
|
||
|
"rivers = DataAccessLayer.getGeometryData(request)\n",
|
||
|
"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",
|
||
|
"fig"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"metadata": {},
|
||
|
"source": [
|
||
|
"[Top](https://unidata.github.io/python-awips/examples/generated/Map_Resources_and_Topography.html)\n",
|
||
|
"\n",
|
||
|
"---"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"metadata": {},
|
||
|
"source": [
|
||
|
"## 10 Draw Topography\n",
|
||
|
"\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": 11,
|
||
|
"metadata": {},
|
||
|
"outputs": [
|
||
|
{
|
||
|
"name": "stdout",
|
||
|
"output_type": "stream",
|
||
|
"text": [
|
||
|
"[<awips.dataaccess.PyGridData.PyGridData object at 0x115a20370>]\n",
|
||
|
"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",
|
||
|
"\n"
|
||
|
]
|
||
|
}
|
||
|
],
|
||
|
"source": [
|
||
|
"# Define topography request\n",
|
||
|
"request = DataAccessLayer.newDataRequest(\"topo\", envelope=envelope)\n",
|
||
|
"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": 12,
|
||
|
"metadata": {
|
||
|
"scrolled": true
|
||
|
},
|
||
|
"outputs": [
|
||
|
{
|
||
|
"name": "stdout",
|
||
|
"output_type": "stream",
|
||
|
"text": [
|
||
|
"623.0\n",
|
||
|
"4328.0\n"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"data": {
|
||
|
"image/png": "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
|
||
|
"text/plain": [
|
||
|
"<Figure size 864x864 with 2 Axes>"
|
||
|
]
|
||
|
},
|
||
|
"execution_count": 12,
|
||
|
"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",
|
||
|
"\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",
|
||
|
"cbar.set_label(\"topography height in meters\")\n",
|
||
|
"\n",
|
||
|
"fig"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"metadata": {},
|
||
|
"source": [
|
||
|
"[Top](https://unidata.github.io/python-awips/examples/generated/Map_Resources_and_Topography.html)\n",
|
||
|
"\n",
|
||
|
"---"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"metadata": {},
|
||
|
"source": [
|
||
|
"## 11 See Also\n",
|
||
|
"\n",
|
||
|
"### 11.1 Additional Documentation\n",
|
||
|
"\n",
|
||
|
"* This notebook requires: **python-awips, numpy, matplotplib, cartopy, shapely**\n",
|
||
|
"* Use datatype **maps** and **addIdentifier('table', <postgres maps schema>)** 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 [Maps Database Reference Page](https://unidata.github.io/awips2/appendix/maps-database) for available database tables, column names, and types. "
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"metadata": {},
|
||
|
"source": [
|
||
|
"[Top](https://unidata.github.io/python-awips/examples/generated/Map_Resources_and_Topography.html)\n",
|
||
|
"\n",
|
||
|
"---"
|
||
|
]
|
||
|
}
|
||
|
],
|
||
|
"metadata": {
|
||
|
"kernelspec": {
|
||
|
"display_name": "Python 3 (ipykernel)",
|
||
|
"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.13.1"
|
||
|
},
|
||
|
"toc": {
|
||
|
"base_numbering": 1,
|
||
|
"nav_menu": {},
|
||
|
"number_sections": false,
|
||
|
"sideBar": false,
|
||
|
"skip_h1_title": false,
|
||
|
"title_cell": "Table of Contents",
|
||
|
"title_sidebar": "Contents",
|
||
|
"toc_cell": false,
|
||
|
"toc_position": {},
|
||
|
"toc_section_display": true,
|
||
|
"toc_window_display": false
|
||
|
}
|
||
|
},
|
||
|
"nbformat": 4,
|
||
|
"nbformat_minor": 4
|
||
|
}
|