python-awips/examples/notebooks/Precip_Accumulation-Region_Of_Interest.ipynb

318 lines
302 KiB
Text
Raw Normal View History

{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"A way to determine areas of greatest precipitation and generate imagery for that sector."
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [],
"source": [
"from awips.dataaccess import DataAccessLayer\n",
"import cartopy.crs as ccrs\n",
"import matplotlib.pyplot as plt\n",
"from cartopy.mpl.gridliner import LONGITUDE_FORMATTER, LATITUDE_FORMATTER\n",
"from metpy.units import units\n",
"import numpy as np\n",
"from shapely.geometry import Point, Polygon\n",
"\n",
"%matplotlib inline\n",
"\n",
"conus=[-120, -65, 28, 50]\n",
"conus_envelope = Polygon([(conus[0],conus[2]),(conus[0],conus[3]),\n",
" (conus[1],conus[3]),(conus[1],conus[2]),\n",
" (conus[0],conus[2])])\n",
"\n",
"DataAccessLayer.changeEDEXHost(\"edex-cloud.unidata.ucar.edu\")\n",
"request = DataAccessLayer.newDataRequest(\"grid\", envelope=conus_envelope)\n",
"request.setLocationNames(\"NAM40\")\n",
"request.setLevels(\"0.0SFC\")\n",
"request.setParameters(\"TP\")\n",
"\n",
"cycles = DataAccessLayer.getAvailableTimes(request, True)\n",
"times = DataAccessLayer.getAvailableTimes(request)\n",
"fcstRun = DataAccessLayer.getForecastRun(cycles[-2], times)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Calculate accumulated precipitation"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"0.0 0.0 0.0\n",
"0.0 32.1875 3.0\n",
"0.0 52.125 6.0\n",
"0.0 74.375 9.0\n",
"0.0 77.125 12.0\n",
"0.0 78.625 15.0\n",
"0.0 78.75 18.0\n",
"0.0 78.75 21.0\n",
"0.0 79.375 24.0\n",
"0.0 82.25 27.0\n",
"0.0 84.0 30.0\n",
"0.0 84.6875 33.0\n",
"0.0 85.625 36.0\n",
"0.0 87.3125 39.0\n",
"0.0 87.75 42.0\n",
"0.0 87.75 45.0\n",
"0.0 89.375 48.0\n",
"0.0 127.875 51.0\n",
"0.0 139.5625 54.0\n",
"0.0 139.6875 57.0\n",
"0.0 140.5625 60.0\n",
"0.0 140.625 63.0\n",
"0.0 140.625 66.0\n",
"0.0 140.625 69.0\n",
"0.0 140.625 72.0\n",
"0.0 140.625 75.0\n",
"0.0 140.625 78.0\n",
"0.0 140.625 81.0\n",
"0.0 140.625 84.0\n",
"0.0 5.5364203\n"
]
}
],
"source": [
"for i, tt in enumerate(fcstRun):\n",
" response = DataAccessLayer.getGridData(request, [tt])\n",
" grid = response[0]\n",
" if i>0:\n",
" data += grid.getRawData()\n",
" else:\n",
" data = grid.getRawData()\n",
" data[data <= -9999] = 0\n",
" print(data.min(), data.max(), grid.getDataTime().getFcstTime()/3600)\n",
" \n",
"\n",
"lons, lats = grid.getLatLonCoords()\n",
"bbox = [lons.min(), lons.max(), lats.min(), lats.max()]\n",
"fcstHr = int(grid.getDataTime().getFcstTime()/3600)\n",
"\n",
"tp_inch = data * (0.0393701)\n",
"print(tp_inch.min(), tp_inch.max())"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Determine lat/lon of maximum rainfall value:"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [],
"source": [
"ii,jj = np.where(tp_inch==tp_inch.max())\n",
"i=ii[0]\n",
"j=jj[0]\n",
"point = Point(lons[i][j], lats[i][j])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Draw CONUS map"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"text/plain": [
"<cartopy.mpl.feature_artist.FeatureArtist at 0x11b971da0>"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"/Users/mjames/miniconda3/envs/python3-awips/lib/python3.6/site-packages/cartopy/mpl/geoaxes.py:623: UserWarning: Approximating coordinate system <cartopy._crs.Geodetic object at 0x11b9e10f8> with the PlateCarree projection.\n",
" 'PlateCarree projection.'.format(crs))\n"
]
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAABHEAAALYCAYAAAD7K25dAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAIABJREFUeJzs3XdclXX/x/HXYS8VFUVcuLc4c2/NRe5RzjLtbmk2HO2667YyK+8suzPLzFLbVqam5jb3xo0DEFyIIiAo41y/P/xJkggHOQt8Px8PHuI51/W9PmdwnXPe5ztMhmEgIiIiIiIiIiLOzcXRBYiIiIiIiIiISO4U4oiIiIiIiIiIFAAKcURERERERERECgCFOCIiIiIiIiIiBYBCHBERERERERGRAkAhjoiIiIiIiIhIAaAQR0RERERERESkAFCIIyIiIiIiIiJSACjEEREREREREREpANzysnGlSpWMyMhIW9UiIiIiIiIiInI3ijQMo1JuG5kMw7C4RZPJZORlexERERFbWLJkCcOGDePy5csAPPDAAzz55JPcc889eHl5ATBx4kS6dOlCy5YtKVKkiCPLBcAwDA4fPszatWtZt24d69at48qVK1SvXp0aNWpk/nvj9+LFizu6ZJECrWzZsmzZsoWKFSs6uhQRsbLw8HBatWpFbGyso0uxGpPJhGEYply3U4gjIiIiBYnZbMbV1RWA559/nkcffZRKlSplXn/58mWKFCmCi4vzjxq/dOkS4eHhHD16lKNHj2b53d/fn3bt2tGsWTOqVKlCcHAwlSpVomjRoo4uWwqR2NhYPDw8KFasmKNLsbouXbowYcIEunfv7uhSRMTK5s6dy7x581i9erWjS7EaS0OcPA2nEhEREXE0FxcXcvpSqSB9GC1evDjNmjWjWbNmWS43DINjx46xfv16du3axcqVK4mIiCAiIgJvb2+6dOlCv379GDBgQGagJZJX27Zto0uXLiQmJrJ3715CQkKA68+/jIwM3NwK9keFMmXKcOHCBUeXISI32bt3L7/99htr167l+PHjbNu2jdKlS+e5nTfffJMvv/zSBhU6v4J9ZhYREREphEwmE9WrV6d69eqMHj0683LDMIiJiWHZsmX897//Zdq0afzvf/+jadOmDqxWCqpZs2ZRsmRJPD09CQoKyrx8woQJfPDB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
"text/plain": [
"<Figure size 1440x1008 with 2 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"def make_map(bbox, projection=ccrs.PlateCarree()):\n",
" fig, ax = plt.subplots(figsize=(20, 14),\n",
" subplot_kw=dict(projection=projection))\n",
" ax.set_extent(bbox)\n",
" ax.coastlines(resolution='50m')\n",
" return fig, ax\n",
"\n",
"cmap = plt.get_cmap('rainbow')\n",
"fig, ax = make_map(bbox=bbox)\n",
"cs = ax.pcolormesh(lons, lats, tp_inch, cmap=cmap)\n",
"cbar = fig.colorbar(cs, shrink=0.7, orientation='horizontal')\n",
"cbar.set_label(grid.getLocationName() + \" Total precipitation in inches, \" \\\n",
" + str(fcstHr) + \"-hr fcst valid \" + str(grid.getDataTime().getRefTime()))\n",
"\n",
"ax.scatter(point.x, point.y, s=300,\n",
" transform=ccrs.Geodetic(),marker=\"+\",facecolor='black')\n",
"\n",
"inc = 3.5\n",
"box=[point.x-inc, point.x+inc, point.y-inc, point.y+inc]\n",
"polygon = Polygon([(box[0],box[2]),(box[0],box[3]), \n",
" (box[1],box[3]),(box[1],box[2]),\n",
" (box[0],box[2])])\n",
"ax.add_geometries([polygon], ccrs.Geodetic(), facecolor='none', edgecolor='white', linewidth=2)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Now create a new gridded data request with a geometry envelope for our Region of Interest"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"0.0 1.853 1.0\n",
"0.0 3.5290003 2.0\n",
"0.0 5.0290003 3.0\n",
"0.0 5.051 4.0\n",
"0.0 5.2960005 5.0\n",
"0.0 5.2960005 6.0\n",
"0.0 5.8269997 7.0\n",
"0.0 6.1790004 8.0\n",
"0.0 6.1890006 9.0\n",
"0.0 9.071 10.0\n",
"0.0 10.812 11.0\n",
"0.0 14.718 12.0\n",
"0.0 18.295 13.0\n",
"0.0 21.339 14.0\n",
"0.0 22.626 15.0\n",
"0.0 28.670002 16.0\n",
"0.0 32.334 17.0\n",
"0.0 36.628002 18.0\n",
"0.0 1.4420482\n"
]
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 1440x1008 with 2 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"request = DataAccessLayer.newDataRequest(\"grid\", envelope=polygon)\n",
"request.setLocationNames(\"HRRR\")\n",
"request.setLevels(\"0.0SFC\")\n",
"request.setParameters(\"TP\")\n",
"\n",
"cycles = DataAccessLayer.getAvailableTimes(request, True)\n",
"times = DataAccessLayer.getAvailableTimes(request)\n",
"fcstRun = DataAccessLayer.getForecastRun(cycles[-2], times)\n",
"\n",
"\n",
"for i, tt in enumerate(fcstRun):\n",
" response = DataAccessLayer.getGridData(request, [tt])\n",
" grid = response[0]\n",
" if i>0:\n",
" data += grid.getRawData()\n",
" else:\n",
" data = grid.getRawData()\n",
" data[data <= -9999] = 0\n",
" print(data.min(), data.max(), grid.getDataTime().getFcstTime()/3600)\n",
" \n",
"\n",
"lons, lats = grid.getLatLonCoords()\n",
"bbox = [lons.min(), lons.max(), lats.min(), lats.max()]\n",
"fcstHr = int(grid.getDataTime().getFcstTime()/3600)\n",
"\n",
"tp_inch = data * (0.0393701)\n",
"print(tp_inch.min(), tp_inch.max())\n",
"\n",
"def make_map(bbox, projection=ccrs.PlateCarree()):\n",
" fig, ax = plt.subplots(figsize=(20, 14),\n",
" subplot_kw=dict(projection=projection))\n",
" ax.set_extent(bbox)\n",
" ax.coastlines(resolution='50m')\n",
" return fig, ax\n",
"\n",
"cmap = plt.get_cmap('rainbow')\n",
"fig, ax = make_map(bbox=box)\n",
"cs = ax.pcolormesh(lons, lats, tp_inch, cmap=cmap)\n",
"cbar = fig.colorbar(cs, shrink=0.7, orientation='horizontal')\n",
"cbar.set_label(grid.getLocationName() + \" Total precipitation in inches, \" \\\n",
" + str(fcstHr) + \"-hr fcst valid \" + str(grid.getDataTime().getRefTime()))"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.6.6"
}
},
"nbformat": 4,
"nbformat_minor": 2
}