python-awips/examples/notebooks/Map_Resources_and_Topography.ipynb

537 lines
1 MiB
Text
Raw Normal View History

2018-09-05 15:52:38 -06:00
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"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 (*Polygon*, *Point*, *MultiLineString*, etc.) and can be easily plotted by Matplotlib, Cartopy, MetPy, and other 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",
"## Notes\n",
"\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. \n",
" \n",
" > Note the geometry definition of `the_geom` for each data type, which can be **Point**, **MultiPolygon**, or **MultiLineString**.\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Setup"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
2018-09-05 15:52:38 -06:00
"outputs": [],
"source": [
"from __future__ import print_function\n",
"from awips.dataaccess import DataAccessLayer\n",
"import matplotlib.pyplot as plt\n",
"import cartopy.crs as ccrs\n",
"import numpy as np\n",
"from cartopy.mpl.gridliner import LONGITUDE_FORMATTER, LATITUDE_FORMATTER\n",
"from cartopy.feature import ShapelyFeature,NaturalEarthFeature\n",
"from shapely.geometry import Polygon\n",
"from shapely.ops import cascaded_union\n",
"\n",
"# 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.xlabels_top = gl.ylabels_right = False\n",
" gl.xformatter = LONGITUDE_FORMATTER\n",
" gl.yformatter = LATITUDE_FORMATTER\n",
" return fig, ax\n",
"\n",
"# Server, Data Request Type, and Database Table\n",
2018-09-06 13:05:37 -06:00
"DataAccessLayer.changeEDEXHost(\"edex-cloud.unidata.ucar.edu\")\n",
"\n",
2018-09-05 15:52:38 -06:00
"request = DataAccessLayer.newDataRequest('maps')\n",
"request.addIdentifier('table', 'mapdata.county')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Request County Boundaries for a WFO\n",
"\n",
"* Use **request.setParameters()** to define fields to be returned by the request."
]
},
{
"cell_type": "code",
"execution_count": 2,
2018-09-05 15:52:38 -06:00
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Using 23 county MultiPolygons\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 864x864 with 1 Axes>"
2018-09-05 15:52:38 -06:00
]
},
"metadata": {
"needs_background": "light"
},
2018-09-05 15:52:38 -06:00
"output_type": "display_data"
}
],
"source": [
"# 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",
"\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",
"# This is essentially the same as \"'\"select count(*) from mapdata.cwa where cwa='BOU';\" (=1)\n",
"\n",
"# Get response and create dict of county geometries\n",
"response = DataAccessLayer.getGeometryData(request, [])\n",
"counties = np.array([])\n",
"for ob in response:\n",
" counties = np.append(counties,ob.getGeometry())\n",
"print(\"Using \" + str(len(counties)) + \" county MultiPolygons\")\n",
"\n",
"\n",
"%matplotlib inline\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",
"\n",
"fig, ax = make_map(bbox=bbox)\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",
"for i, geom in enumerate(counties):\n",
" cbounds = Polygon(geom)\n",
" intersection = cbounds.intersection\n",
" geoms = (intersection(geom)\n",
" for geom in counties\n",
" if cbounds.intersects(geom))\n",
" shape_feature = ShapelyFeature(geoms,ccrs.PlateCarree(), \n",
" facecolor='none', linestyle=\"-\",edgecolor='#86989B')\n",
" ax.add_feature(shape_feature)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Create a merged CWA with cascaded_union"
]
},
{
"cell_type": "code",
"execution_count": 3,
2018-09-05 15:52:38 -06:00
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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
2018-09-05 15:52:38 -06:00
"text/plain": [
"<Figure size 864x864 with 1 Axes>"
2018-09-05 15:52:38 -06:00
]
},
"execution_count": 3,
2018-09-05 15:52:38 -06:00
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Plot CWA envelope\n",
"for i, geom in enumerate(boundaries):\n",
" gbounds = Polygon(geom)\n",
" intersection = gbounds.intersection\n",
" geoms = (intersection(geom)\n",
" for geom in boundaries\n",
" if gbounds.intersects(geom))\n",
" shape_feature = ShapelyFeature(geoms,ccrs.PlateCarree(), \n",
" facecolor='none', linestyle=\"-\",linewidth=3.,edgecolor='#cc5000')\n",
" ax.add_feature(shape_feature)\n",
"\n",
"fig"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## WFO boundary spatial filter for interstates\n",
"\n",
"Using the previously-defined **envelope=merged_counties.buffer(2)** in **newDataRequest()** to request geometries which fall inside the buffered boundary. "
]
},
{
"cell_type": "code",
"execution_count": 4,
"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 864x864 with 1 Axes>"
2018-09-05 15:52:38 -06:00
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"request = DataAccessLayer.newDataRequest('maps', envelope=envelope)\n",
"request.addIdentifier('table', 'mapdata.interstate')\n",
"request.addIdentifier('geomField', 'the_geom')\n",
"request.setParameters('name')\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": [
"## Nearby cities\n",
"\n",
"Request the city table 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": 5,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Queried 1205 total cities\n",
"Plotting 57 cities\n"
2018-09-05 15:52:38 -06:00
]
},
{
"data": {
"image/png": "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GwD4+uuvGThwID179qRp06a88sorpnmRLMDZs2dZt24dI0eOxNvbm3fffZfFixffUle7sWPHMmbMGHbv3s0XX3xBdvblDwfs7OyM3+v1etLS0jh69Ch9+/Y1hszIyEjCwsJIS0sjKysLHx8fduzYwcsvv0xycjJdunShS5cuAGRmZhpP+t9//33jz+aHH35oPE5R967PP/+8WIjasGED99xzD40aNbrl1pB27doV6zomLJsEECGEENeXn478qyh/MTExLFy4kJiYGDZv3sxnn31GQkICADk5OTzxxBN89dVXeHp6kpaWRkBAADExMYSGhhbbT1paGp07d2bnzp2Ehoby7bffAurEdeLEicTExFC7dm3j9u+88w5dunQhPj6e5557jtmzZ2Nra8vu3bv5/vvvefTRR41dw3bu3MnSpUvZtWsXCxYs4OTJkxX06liWpUuXMmzYMJKSkkhMTOTYsWM0bNiQ48eP3/SxaWlpeHp6AjB//vwbbvvXX3/RtWtX1q5di4uLC9u3b+fixYvs2LGD3r178/jjj3PkyBE2btxIp06dqFevHuvXr2f9+vXF9hMXF8fcuXPZunUrkydP5pVXXqFFixaEhoYybdo01q1bx+jRo7n//vsBFZh/+ukn/v77bz777DOGDRtG27Zt6dixo3HGryVLluDr60vr1q3p1KkTUHzmr7NnzxIeHk6bNm146qmnioWzBQsWEBQUhL+/P++99x4FBQW3+MoLcyL/VYQQQlxf9hnQyb+K8vbPP/8wYMAAHB0dqVatGg888AA7duwAwNbWlsDAQOO2tra29O/fv8T9ODg40Lt3bwDatm1LYmIiAFu3bmXAgAEADB069Lp1REdHGwcq+/j4UK9ePf79918AunfvTrVq1XBwcKBFixb8999/d/akq6hFixZd8/4NGDCAt966+ZTXU6dOZdCgQXTs2BEPD48bbrty5UpGjx7Na6+9xrFjx+jZsyefffYZQUFBfP3112zfvp2EhAQiIiKYM2fOdfcTHR1N//79cXJyokePHrzwwgs888wzeHt74+HhYazD0dGRTz75hGPHjvHOO+/g5OTEu+++i06nIy4ujlmzZvHMM88A8MYbb7B69Wp27tzJr7/+es0xp02bRocOHdixYwf9+vUz/qzt37+fxYsXs3HjRuLj47GysmLhwoU3fd2E+bE2dQFCCCHMWP3+sPt7SNkINdubuhqLVVL3m6IuWEVfizg4OFxzW5Erx5Ho9Xry8/PvuI4iV3fxKe2+q6qwsDBAfcJ/5dcrPffcc8XGP4SFhRkfN2LECEaMGAHA/fffb2xpuNLUqVOLXY+KisLLy4uRI0ei0+mwtrbGxsaGl19+mffeew8PDw8WL17MmDFjaNeuHSNGjMDb27vE+q/8mTh+/Dg//PAD2dnZFBQU4OzsbLzv+++/x8vLiy5duuDs7Ex6ejqbNm0iNzcXf39/QLXmAbRv354RI0bw0EMP8eCDD15zzA0bNrBs2TJAjW2pXr06AGvXriUuLs4YyM+dO0ebNm1KrFuYN/lYSwghxPXZVgf7OnD4a1NXYtE6derE8uXLycrKIj09nV9++YW2bduW2f6DgoJYvnw5QLFB59WqVePSpUvF6ij6RHn//v0kJyfTpEmTMqtDVIzrdfOKjo6+7mOu/lko0qlTJ1a
2018-09-05 15:52:38 -06:00
"text/plain": [
"<Figure size 864x864 with 1 Axes>"
2018-09-05 15:52:38 -06:00
]
},
"execution_count": 5,
2018-09-05 15:52:38 -06:00
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"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",
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(b\"population\"):\n",
" if ob.getString(b\"prog_disc\") > 50:\n",
" if int(ob.getString(b\"population\").decode('UTF-8')) > 5000:\n",
" citylist.append(ob.getGeometry())\n",
" cityname.append(ob.getString(b\"name\").decode('UTF-8'))\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.Geodetic(),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": [
"## Lakes"
]
},
{
"cell_type": "code",
"execution_count": 6,
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": "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
2018-09-05 15:52:38 -06:00
"text/plain": [
"<Figure size 864x864 with 1 Axes>"
2018-09-05 15:52:38 -06:00
]
},
"execution_count": 6,
2018-09-05 15:52:38 -06:00
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"request = DataAccessLayer.newDataRequest('maps', envelope=envelope)\n",
"request.addIdentifier('table', 'mapdata.lake')\n",
"request.addIdentifier('geomField', 'the_geom')\n",
"request.setParameters('name')\n",
"\n",
"# Get lake geometries\n",
"response = DataAccessLayer.getGeometryData(request, [])\n",
"lakes = np.array([])\n",
"for ob in response:\n",
" lakes = np.append(lakes,ob.getGeometry())\n",
"print(\"Using \" + str(len(lakes)) + \" lake MultiPolygons\")\n",
"\n",
"# Plot lakes\n",
"for i, geom in enumerate(lakes):\n",
" cbounds = Polygon(geom)\n",
" intersection = cbounds.intersection\n",
" geoms = (intersection(geom)\n",
" for geom in lakes\n",
" if cbounds.intersects(geom))\n",
" shape_feature = ShapelyFeature(geoms,ccrs.PlateCarree(), \n",
" facecolor='blue', linestyle=\"-\",edgecolor='#20B2AA')\n",
" ax.add_feature(shape_feature)\n",
"fig\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Major Rivers"
]
},
{
"cell_type": "code",
"execution_count": 7,
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": "iVBORw0KGgoAAAANSUhEUgAAAyAAAALQCAYAAABolRTFAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvIxREBQAAIABJREFUeJzs3Xd4VFX6wPHvnZlMS08mhRQICYRASIMQOgRBulhQESsq64prYxVF3Z+r7Opi74W1K4q4KFZ2AYHQJQQSakIPJJDek+kz9/dHwggSIIEUEs7nefLAzNzyztwp973nnPdIsiwjCIIgCIIgCILQFhTtHYAgCIIgCIIgCJcPkYAIgiAIgiAIgtBmRAIiCIIgCIIgCEKbEQmIIAiCIAiCIAhtRiQggiAIgiAIgiC0GZGACIIgCIIgCILQZkQCIgiCIAiCIAhCmxEJiCAIgiAIgiAIbUYkIIIgCIIgCIIgtBlVewcgXJyIiAj56NGj7R2GIAiCIAiC0PkdlWU54mI3Ismy3AKxCO1FkiS5tY7hLyfyCNBoSfEPaNZ6J+ORJAlZlvlrZjq3RkQRrNXzUs4uXk1KQSFJrREyAFanEwkoNpt592A2z8X3Z21xIUMMgeQZ67DLTqI9vQFYmHsIBVDncBDr7UO8jy8eKjfS0tJITU3llnXrifXzIc7Xm7nbMnGTlVQpTABEqnz4YPggIj08zxnP3qpK3j+Yw5v9B7Xac24vhSYTf928nQC9hmu6h5IaGIzUgsf25HEQ2ti2v4LWALFPAvXHwS22N7f+tg5VlR67zozOTcmGcRPw02jaOdjO66effmLKlClMmjSJn3/+uUmfhxKzGRmZ/TXVeLm5Ee/j1zbBXmba+rvJ7HAgAWqFgjqHHQ+VW6PL2Z1OtleUEe3pzVM7t/FS4gD0qo53rXlbeSmfHThMapdgruva9azLid+IttdwbnfRP/SiC5ZwVn5qDeVWC5kVZedczuJwUGm14pRlXsjeyQ/Hj/GPPTvIrq5kwaF9PBmbQLSnN0FaLbdGRKGQJL7KPYTZ4WjReHdUllNmsbC66ASv79uDn1rNVSHhAIwMDMZNoSDSw9OVfADcGhHFzRFR/CkqmiGGwDO+1L8cMZwn+8ZxVWhX9ky5mqyrJ/PdsCtwk5XszdAwes3/qLBazhlXd3cP7u0R06LP9VLglGXmbN3O6l/UfPJPb2auTeeTQ4faOyyhJfjGQ+GvrptVNhu3/rYOR4WGgzPGg9pJX18fbLKzHYPs/E4m8825yBSg1RKo1bGvuopgra61QhNagcXhwOJwsLGkiPcP5lBkNjFi1TIA/r5rO6uLCjA7HIxPW4HJbienugqj3Q7Ufx8vO5FPmdXCV0cP4+3mxjvJgztk8gGQW1PHT8VHeWNPTnuHIrQSkYAIZzXYEIjN6aTKaqXaZqPMUn+inW+sw3HKD+Lr+/ewsvA4CknC203N5JBwHojujVpSMMg/kACNFk83N1QKBcl+BiwOB3mmOpSSxL8P7aPYbGqReDMrythVWc4g/0Bm9YxBp1IxyBDYItsGKDab+M+xI/xjzw5kZJw1amI1BrKrq8iuquSZXZlsKil2xZJnrGN7eRn3bdtMby/v82y948k31rGh8gR1uwxIKhnTbgP/yM7kUE11e4cmXKzgMVD9+w+/p0pFf68AlL4WIv/zAwD9/fwwaLTtFeFl4UISkJPujopmV1UF92/b3NJhdXg2p/OCXtOmqLXbsPzh4prV6cTudPL83h2UWszsr6niq6OHAXg1ZzebSospMBkZl7aCnZXlRLh7MsDPQJBWx/KRYwF4IXEAE0LC0KlUbBgzCZ1Kxc8n8sgoL6XYbGL29i2sKDxOkFbH6/0GtmhLdHuY2q0bWeOuZvnY0c1ar8Bk5MltmUxYuYpR/1uB1SkuklyqOmZqLLSZq0Lrmz6X5OVy3FjHTd0ieXj7Fv4zdBT/2J3FQEMAj/eOdy1/8kq/r1qDr7rxrhkapdK1jpukwNtNjUOWOW6sw0etxstNjSzLTf4CNdntfH3sCDO690CGVune5ZRlJv66mtLtvpiLfLEWhmK4YT92tZpbNq9FW+mJ2auGvVWVDAkIJKe6inC9naGGQF5L6vg/Bo15P/sgSDDk0cO4S24MDvWjyuROqN69vUMTLlbxetAGu24qJIl/JCXy+u4cHouP5b0D2fT28UHZCd/Xl5KLSUAAhgcEM8wQxFdHD2N22LkrMrolw7ukVVmtlFjM9PD0YtmJfEYHdSHfZMRdqSKnupL/FuTzQuIAnt61nW56d/w1Wl7O2U2Aw5Njlho8tUpe6p/MAH/Defe1vqSIlQXHmRffj4e2b+H+nr1RShIbSoqY3i2SGzeu4YfhYxjkH4hSknDK0LXhezLJ159QnY4uOj2fDRpON3cPAEL1egB052jBeDSmL1Df7e6+nr3p1cEvdNkauk+rFPXXxr3V6mZv40BNNYtOHAQgVmcQV9kvYSIBEZrk+vAI1/+XDLsCgD9F9cL3Ar4gTnVnZE+KzCZu2byWwf6BTAoJw6DRMidrK0uHj+adA9lM7xrJ2pJCgrU6+nr7crC2mr7evuysLMfulEny86faZsUhy64vrpZWbbNRJhuRkoxU/W0ESh8zJpPE/n0SJV8PQKECvxtyUHvXJ13Tu0W61vW5yNfoUjUlIhS77GRufKwYB9DZ5C6E3o+ddldvLx8WDBnEN8eOMDOqFzEd/GSnI7jYBETd8H04LjgUJzKv7dvDrB4xaJXKFovxUmCy29lWUcawgCDm7sjg6tCu+Ko1fHrkAPMTksk31bG/ppqdleUoJImp4RH4qNXkG418kXt6t9FDu9yxHArBc+wR/rZtB48l9MbicDIyMJgSi5kIdw/m7shgPPVjCA0aDb08vUn2q09UFiQPQaVQkG+sY4ghCB83NT+PuBKNUskVQV0AGi7O1X9+RjXcB7iSj+YK0GoJ0Hbs1shb0jayqeYEWlTsnXwNkiRRZ7fjplC43sdNMSIwmAOTpiJJkrhAcokTCYhwwYJ1LdO/OEir438jx7qSB4vDwaIhqQAYNFqUkkRvLx+MdjtlVgv/OZZL3zhfFh09TF9vXwYaAnioV2yLxHI2Pmo1ryal8NfMdJy1alDIGLcFUfFJIrLRjbAn0pG61FAlu2F2ODrdD3xjBhkCGGRoXoECoYNQ+4Kj8a6RHx7az196xhCg0aJRKs46GFa4eBebgJzk33CBQCVJFJpMhOj1TT6p211ZwS8FeTwcHcu3ebncHBHF/poqurt7Umu3cai2hmQ/A1VW6wVdsb5YP+QfY0xwCMtO5NPLy5sn+yRgcToI0GiZn5AMwD1RvQCI8/F1rZfo649DllkydBTFZjNqpYKjtXXsCazmYP8ass1wX5+eeKnU+LtrKLGYmb93J+8lDybJ1x8qakny9SNIq8Og0dK9oRjJyd+xML07YQ2tHJrL4PfgYl0REoTbCSVXdA2g1GJhxMr/YsaOh6Rm1+Srm7Wt1roQKbQskYAIl4RTvzBO/bKe1rU7cHpT7PMJ/QF4OSmljaKr92l2LjXf9MF62AfPyQep/DQB2Vh/8iXXqFGVe7Cbcp7L2s0/+ie0aWyC0GJkJ5RsOKMF5KRFQ1Lx12h4bd8eent5M75LWBsHePloqQTkpAei+7ClrIT/27Wdd5IHsbeqkgQfv0a7+fz70D56eHgRotNzQ3h33BQK9tfWj+9akpdLko8/gVotW8pK6O/rz9SNq/lu2GjKrRYWHzvM9eHdiXT3wOxwuL7TFZKExeFApVBQbDbhkGXC9O5kV1cSotOTXlaKRqFgRGDwGfHsr6kfVP/j8Tymde3OJ0cOMMQ/kBMmI4Vmk+t3oV7TkmKlJNHf75QuVkFA1NmXf3/AEKD+dynt8FFivX3PvrDQLHdH9+Du6B4AVFqtBKj0qFByY/ezV8ASOjaRJgrCOciyzK+FJ5ixbjN788yUfxMDSMgmFQoPq2s59ehDPDm8ByoU5NbVtF/AgnCxSn8DlXt9JaxGnLyafnO3SIYHnHmiKLSc1hg7NtA/gM8HDcfLTc2XRw9jk53
2018-09-05 15:52:38 -06:00
"text/plain": [
"<Figure size 864x864 with 1 Axes>"
2018-09-05 15:52:38 -06:00
]
},
"execution_count": 7,
2018-09-05 15:52:38 -06:00
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"request = DataAccessLayer.newDataRequest('maps', envelope=envelope)\n",
"request.addIdentifier('table', 'mapdata.majorrivers')\n",
"request.addIdentifier('geomField', 'the_geom')\n",
"request.setParameters('pname')\n",
"rivers = DataAccessLayer.getGeometryData(request, [])\n",
"print(\"Using \" + str(len(rivers)) + \" river MultiLineStrings\")\n",
"\n",
"# Plot rivers\n",
"for ob in rivers:\n",
" shape_feature = ShapelyFeature(ob.getGeometry(),ccrs.PlateCarree(), \n",
" facecolor='none', linestyle=\":\",edgecolor='#20B2AA')\n",
" ax.add_feature(shape_feature)\n",
"fig"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 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": 8,
2018-09-05 15:52:38 -06:00
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[<awips.dataaccess.PyGridData.PyGridData object at 0x118f4ef60>]\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": [
"import numpy.ma as ma\n",
"request = DataAccessLayer.newDataRequest()\n",
"request.setDatatype(\"topo\")\n",
"request.addIdentifier(\"group\", \"/\")\n",
"request.addIdentifier(\"dataset\", \"full\")\n",
"request.setEnvelope(envelope)\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": 9,
2018-09-05 15:52:38 -06:00
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"623.0\n",
"4328.0\n"
]
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAwEAAAMJCAYAAABbTDp4AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvIxREBQAAIABJREFUeJzsvXm0JNlV3vs7JyIzI3K4c957q2vubvU8ST2pJTSAAAm0wJZoPSHew2BAGAMLECBgYfCyHxLPMgZLYAF+gEFg5tE8IQwYsEYjoaHVg9SDeu6quvOYGRmREXHO+yPiREZGRt66VdWgkpXfP3UzpnMiMivz+87+9t5Ca80EE0wwwQQTTDDBBBNM8MUD+fmewAQTTDDBBBNMMMEEE0zwj4uJCJhgggkmmGCCCSaYYIIvMkxEwAQTTDDBBBNMMMEEE3yRYSICJphgggkmmGCCCSaY4IsMExEwwQQTTDDBBBNMMMEEX2SYiIAJJphgggkmmGCCCSb4IsNEBEwwwQQTTDDBBBNMMMEXGSYiYIIJJphgggkmmGCCCb7IMBEBE0wwwQQTTDDBBBNM8EUG+/M9gQkmMDhx6qR+9ulnPt/TmGCCCSaYYIIJJng+8bTW+tTnexJFCK3153sOE0wAgBBCb4e7I9v34w4ALat5qOvsxvv8zeo5ntwPecu1N7IX7wMwbbXYjztsRRv0tY+mj6SKoMasPY/Xtzlar6O05jP76/zcI5/j373oJp7q7nCqMcOsNTU0jrluN+4CAZHewxJ9diNFTS7QUR7Ha8eZtloAbEX7zNnJ3x/f3OKB3Q3ubs/y648/x9tuuZX799ZQco/pqo2tHX754TVmbZeFepWbZ6Y5Wq+z8okH2b32CO/41BO84cpjvOexp+nQz+b0huPL/NOrGhytLjFttdgt3PuHN1d4OljjzrlFjtcWc8+4C4AtYNpq4sUeGk2Epmk16MRdPOVRl3UAmlYDgE56XjJGE4nI3rNGekx+fEvATrRJRQpc4WILgS2gaS3iq87Q87VEcq2aSK7zHx96gL87F/AVJ6f5ulNLzFaS9yPSHpV0XmWItQdAJb2O0h7Q48MfeJSXv+JWYt0D1UOFVZRKx7bryDROqhRE/U00AXZVoixBRC27vi2c7O9A7WKLaaRwidFURINQd4l1j5oQxHqXjoqJdBVbuERaZ3PfiTrEOnnmrmzwbLDG0eoiMRpF8j29YE+xEe2xHSXPat5uYSGQYvAeztgN4vRrXaX/ztkt1qO9bJ756+WxEu6xmD7X1X5y/FJlipV+cu1ls6+3yW3vu4r7XvsUWlY597H7+f9mXP7i7LnsWt9x/Wm+YvkIG/EObbvFUmV4LIDVMB2jOroPYC3db+a0Fu6xFXVYrDSzZxCm9zibfj+Yccyc81iuTLES7pVv73ulc1iu1tPrje43+y4VX/WSV3D/Jz/Fr//tn7Osq9z4krvHHvuJ7U3ed+Y5/vlVL8BOP6TLNWfomJX+8P+l5WrybFYCf2jO+XsauUbJscvV+shzKD4DcxzAit/PrrsS+MPn1RxW/JBlp8ZBWOnFB+5fdq2RY5adSvb3Q3/3QW588cuSa3nJh2W5LobHMNtd68CxAHb6Ab04ol1zeXK/T6tS40xvn6ZdYbripNcZvn4Qx/zLT/4tP3ztS5muOCPjF+eR3ceY4yB5LmXzNc9i3L0ctP9nP3s/qz2ft950KzPV0ffloY++nxvvfsXBc3bL57zaTb5clxoy+3u9V84/24VrLB3wHAzWusl9LTasoddFLDXk0Hzy2y4Uq/vR6PWb5c/9iukKWuvz38g/MiaRgAkuK5QR/oPIvzk+f+y01eJVbYfH65vct7PCbTPL7MX7GSGesxfYDNf5+60tbpyZ5c+f6XL3fJOfe+RBfvul9/A17/8Av3HPi/k3N72QGenwUw88wE+8sM5jwTlmqjZtp8asNcWU1eIJ/0kC5RPpDlJAXdaItM+MdKnI5AdhMG6Ldz38CNdPT3NNq8VLF46wVIdvvW6a1WiNanWLCpJZq4kj6/zQLa2he5u2HM5oxW1zU/z2q24D4HWn5hFC8KOffIiPbuzx+0+u0XCmePUxwW7cYTdOfrCVXqUTKnoqJOg7zNgNuqrLVErUZ+yE6NsIZEoqQdCLe/gIbERGsmKt8WOPnuoBsFhpD81zym5m701eCHiqiy0EDatOTQy+C2syIcqObBLqYeJmBMCHN87wy4+ucu5nX8Qn7n2Ej962yy++5PZMKBwES9SJtUeou1REAynqKA0aiNQ2xD2knMWyaxB5iJygiCMvEQFRj0rNRtguoLHiPSpyChX7CFsgxGxyQvpbEult4pxQkAgi7WNmq3RA8vPhEKpExLSshLw/4j9FRWwRo9mNO2zHXerSza61HXWy+96JO8xbLbajDo4UTFtNduMOTavBTtSlZTVQOhGg7ZTw58VAGQz5B4aI+xBRlg696ZtobXyI+rGv5YlY8Rdnz9H9yBVQUTTuXOHG2SmEiEFbaG1lhD9/7aXKFKvh3tCYQ8dUB+QfYCPaZ8FuZeJlLewwZzcxa1lFobFcIjzy2/KCIE9wl6vNISKd357HSr/zvAgB8zHWWhNqdeCxt8/Oc7Te4L3PPsubTl7JvgpHjinOM488SV+u1nmgs0m76o6QdCDbt1ytD+5TJbRh2akOrun3c2fZCflP968EPss1Z0hkrPghK/7ovKGc9BtSb87Jv84fvx5EtGt2Ki4qI9fJxvBGyeeSI9FaI3LfKWG6KqC05kMbZ3nR7CJ/fOZxpq0mt80s8bZHPsi/vf6VfGzrLMfcFi9rL/BHZx7nW07fwFPdPeaqDv9r8xw12eBHrv0Spiq1A4n9cl2MCJUVT48XDQUhcD7BBOWiyeCzuzvc763xg9xy3usYLLnw8G6P2aqbzqFcFJSR7yLZH4fVwvtVJgoM+S++XuvGQ2OvdhVLDXnRxH8ciuR/tROP3Xc5YSICJrisMGU32Ys67MedEfJfJPz5cwD2osH+qUqFhcoU/+Hhh/i3t9Z52wOP8U+PnaBmR3xia4N7Fl3+6jm494rrqR7tsOQ4/OqL72JfdXjXnTdi231sQAjBe+65BwHct/UUK16NhaUq2/EwabFFkxk7IYKW8Am1Tzfu0Yl2kLJK217gOc/jm648TUVKIpEQ6E7cRak+IZLlygK2EFRFHYUeijxsx3uZmMjjvc+e5Q8e3mZD9cCrUHUV961GPLa+w4P7T/O6U8ssOjVeODfDT33mUX7klhPcOpt8IUnAQqSRDKiJ5Euxr710hV4QawkE1KRL02oQa52tMs/Y5USjG3ey98SsOJu5B6qHlAK7ZOXeCABD/A0C3eW9z60TVUOW3/go+sg+H9iJec7zONlojFynDEYIDENhCQctHYRw0Sn50io5LlYkgkB5COEAEVoHSK0RegqhZ0BtI7RGih4qfZ4xGls4WCTRgFj3sAjSMaeBrWR0HVCVSTTAVx6R1uxEXWLd4YrKEdajDooekfJZrC7xVH8VKxZYQjBvtZAiEQS76f8LT3lMW02mrSYxOosIzFdabIbJ888LgLIowEa4z3y6ar/S7w6tpg+tAAtB3z3GfNzlycDHtSyucqd5/CVnqcU2jl1hvx+xbnks2AMxa0j9an+vVBQAI9sNlitTLFeSSMhGtMeCPUWkKRUAZVGAIpL7sUfvzYyXCoGDBMDzBUM8LyQw76uYjdDnD595iq87cYqaNSAaQ4Q7JeFlJH/F72ckf2TfmMhI/twi8qv+xf1F0l+MAOSJ6bJTGSHkf/Tc41zbmkWjWXbm+dz+LktOnU/trHPW6/J/HL9qLPFf8TRaa1YDj2WnwYc2n8SPY/6vk9fyeGeXY26Tn3/8ARZrdV66cIR3PPwJ3vXCl/Mzj36K22YWmKnUeO/ZJ7llZoFvOX1Ddt333PUVAPzL1nWseBpFwLF68jn54zNPcMfscXZDeNFMi6unakP3OW6lvozw54XAuPNXejHrvuLm2fHiJxujLHriWvzCi19+3nPz+JYP/U8e6W8A8Ecv+WqWnHqpwMpjqSFZ6WmE0qx7inZ
2018-09-05 15:52:38 -06:00
"text/plain": [
"<Figure size 864x864 with 2 Axes>"
2018-09-05 15:52:38 -06:00
]
},
"execution_count": 9,
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)\n",
"cbar = fig.colorbar(cs, extend='both', shrink=0.5, orientation='horizontal')\n",
"cbar.set_label(\"topography height in meters\")\n",
"\n",
"fig"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
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.6.6"
2018-09-05 15:52:38 -06:00
}
},
"nbformat": 4,
"nbformat_minor": 1
}