python-awips/examples/notebooks/Satellite_Imagery.ipynb

342 lines
1.3 MiB
Text
Raw Normal View History

{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Satellite images are returned by Python AWIPS as grids, and can be rendered with Cartopy pcolormesh the same as gridded forecast models in other python-awips examples. "
]
},
{
"cell_type": "code",
"execution_count": 80,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"%matplotlib inline\n",
"from awips.dataaccess import DataAccessLayer\n",
"import cartopy.crs as ccrs\n",
"import cartopy.feature as cfeat\n",
"import matplotlib.pyplot as plt\n",
"from cartopy.mpl.gridliner import LONGITUDE_FORMATTER, LATITUDE_FORMATTER\n",
"import numpy as np\n",
"import datetime\n",
"\n",
"DataAccessLayer.changeEDEXHost(\"edex-cloud.unidata.ucar.edu\")\n",
"request = DataAccessLayer.newDataRequest()\n",
"request.setDatatype(\"satellite\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Available Satellite Sectors and Products"
]
},
{
"cell_type": "code",
"execution_count": 81,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"Available sectors and products\n",
"\n",
"Alaska National:\n",
" - Imager 11 micron IR\n",
" - Imager 6.7-6.5 micron IR (WV)\n",
" - Imager Visible\n",
" - Percent of Normal TPW\n",
" - Rain fall rate\n",
" - Sounder Based Derived Precipitable Water (PW)\n",
"Alaska Regional:\n",
" - Imager 11 micron IR\n",
" - Imager 3.9 micron IR\n",
" - Imager 6.7-6.5 micron IR (WV)\n",
" - Imager Visible\n",
"East CONUS:\n",
" - Imager 11 micron IR\n",
" - Imager 13 micron (IR)\n",
" - Imager 3.9 micron IR\n",
" - Imager 6.7-6.5 micron IR (WV)\n",
" - Imager Visible\n",
" - Low cloud base imagery\n",
"GOES-East:\n",
" - Imager 11 micron IR\n",
" - Imager 13 micron IR\n",
" - Imager 3.5-4.0 micron IR (Fog)\n",
" - Imager 6.7-6.5 micron IR (WV)\n",
" - Imager Visible\n",
"GOES-East-West:\n",
" - Imager 11 micron IR\n",
" - Imager 13 micron IR\n",
" - Imager 3.5-4.0 micron IR (Fog)\n",
" - Imager 6.7-6.5 micron IR (WV)\n",
" - Imager Visible\n",
"GOES-Sounder:\n",
" - CAPE\n",
" - Sounder Based Derived Lifted Index (LI)\n",
" - Sounder Based Derived Precipitable Water (PW)\n",
" - Sounder Based Derived Surface Skin Temp (SFC Skin)\n",
" - Sounder Based Total Column Ozone\n",
"GOES-West:\n",
" - Imager 11 micron IR\n",
" - Imager 13 micron IR\n",
" - Imager 3.5-4.0 micron IR (Fog)\n",
" - Imager 6.7-6.5 micron IR (WV)\n",
" - Imager Visible\n",
"Global:\n",
" - Imager 11 micron IR\n",
" - Imager 6.7-6.5 micron IR (WV)\n",
"Hawaii National:\n",
" - Gridded Cloud Amount\n",
" - Gridded Cloud Top Pressure or Height\n",
" - Imager 11 micron IR\n",
" - Imager 6.7-6.5 micron IR (WV)\n",
" - Imager Visible\n",
" - Percent of Normal TPW\n",
" - Rain fall rate\n",
" - Sounder 11.03 micron imagery\n",
" - Sounder 14.06 micron imagery\n",
" - Sounder 3.98 micron imagery\n",
" - Sounder 4.45 micron imagery\n",
" - Sounder 6.51 micron imagery\n",
" - Sounder 7.02 micron imagery\n",
" - Sounder 7.43 micron imagery\n",
" - Sounder Based Derived Lifted Index (LI)\n",
" - Sounder Based Derived Precipitable Water (PW)\n",
" - Sounder Based Derived Surface Skin Temp (SFC Skin)\n",
" - Sounder Visible imagery\n",
"Hawaii Regional:\n",
" - Imager 11 micron IR\n",
" - Imager 13 micron (IR)\n",
" - Imager 3.9 micron IR\n",
" - Imager 6.7-6.5 micron IR (WV)\n",
" - Imager Visible\n",
"Mollweide:\n",
" - Imager 11 micron IR\n",
" - Imager 6.7-6.5 micron IR (WV)\n",
"NEXRCOMP:\n",
" - DHR\n",
" - DVL\n",
" - EET\n",
" - HHC\n",
" - N0R\n",
" - N1P\n",
" - NTP\n",
"NH Composite - Meteosat-GOES E-GOES W-GMS:\n",
" - Imager 11 micron IR\n",
" - Imager 6.7-6.5 micron IR (WV)\n",
" - Imager Visible\n",
"Northern Hemisphere Composite:\n",
" - Imager 11 micron IR\n",
" - Imager 6.7-6.5 micron IR (WV)\n",
" - Imager Visible\n",
"Puerto Rico National:\n",
" - Imager 11 micron IR\n",
" - Imager 6.7-6.5 micron IR (WV)\n",
" - Imager Visible\n",
" - Percent of Normal TPW\n",
" - Rain fall rate\n",
" - Sounder Based Derived Precipitable Water (PW)\n",
"Puerto Rico Regional:\n",
" - Imager 11 micron IR\n",
" - Imager 13 micron (IR)\n",
" - Imager 3.9 micron IR\n",
" - Imager 6.7-6.5 micron IR (WV)\n",
" - Imager Visible\n",
"Supernational:\n",
" - Gridded Cloud Amount\n",
" - Gridded Cloud Top Pressure or Height\n",
" - Imager 11 micron IR\n",
" - Imager 6.7-6.5 micron IR (WV)\n",
" - Imager Visible\n",
" - Percent of Normal TPW\n",
" - Rain fall rate\n",
" - Sounder Based Derived Lifted Index (LI)\n",
" - Sounder Based Derived Precipitable Water (PW)\n",
" - Sounder Based Derived Surface Skin Temp (SFC Skin)\n",
"West CONUS:\n",
" - Imager 11 micron IR\n",
" - Imager 13 micron (IR)\n",
" - Imager 3.9 micron IR\n",
" - Imager 6.7-6.5 micron IR (WV)\n",
" - Imager Visible\n",
" - Low cloud base imagery\n",
" - Sounder 11.03 micron imagery\n",
" - Sounder 14.06 micron imagery\n",
" - Sounder 3.98 micron imagery\n",
" - Sounder 4.45 micron imagery\n",
" - Sounder 6.51 micron imagery\n",
" - Sounder 7.02 micron imagery\n",
" - Sounder 7.43 micron imagery\n",
" - Sounder Visible imagery\n"
]
}
],
"source": [
"availableSectors = DataAccessLayer.getAvailableLocationNames(request)\n",
"availableSectors.sort()\n",
"\n",
"print(\"\\nAvailable sectors and products\\n\")\n",
"for sect in availableSectors:\n",
" request.setLocationNames(sect)\n",
" availableProducts = DataAccessLayer.getAvailableParameters(request)\n",
" availableProducts.sort()\n",
" print(sect + \":\")\n",
" for prod in availableProducts:\n",
" print(\" - \"+prod)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Plot Global Water Vapor Composite"
]
},
{
"cell_type": "code",
"execution_count": 82,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Found 96 available times\n",
" 2017-01-23 00:00:00\n",
" to\n",
" 2017-02-03 21:00:00\n",
"Using 2017-02-03 21:00:00 (2hr 3m ago)\n"
]
}
],
"source": [
"request.setLocationNames(\"Global\")\n",
"availableProducts = DataAccessLayer.getAvailableParameters(request)\n",
"availableProducts.sort()\n",
"request.setParameters(availableProducts[0])\n",
"\n",
"utc = datetime.datetime.utcnow()\n",
"times = DataAccessLayer.getAvailableTimes(request)\n",
"hourdiff = utc - datetime.datetime.strptime(str(times[-1]),'%Y-%m-%d %H:%M:%S')\n",
"hours,days = hourdiff.seconds/3600,hourdiff.days\n",
"minute = str((hourdiff.seconds - (3600 * hours)) / 60)\n",
"offsetStr = ''\n",
"if hours > 0:\n",
" offsetStr += str(hours) + \"hr \"\n",
"offsetStr += str(minute) + \"m ago\"\n",
"if days > 1:\n",
" offsetStr = str(days) + \" days ago\"\n",
"\n",
"print(\"Found \"+ str(len(times)) +\" available times\")\n",
"print(\" \"+str(times[0]) + \"\\n to\\n \" + str(times[-1]))\n",
"print(\"Using \"+str(times[-1]) + \" (\"+offsetStr+\")\")"
]
},
{
"cell_type": "code",
"execution_count": 83,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"grid size (1024, 2048)\n",
"grid extent [-179.91191, 179.99982, -89.977936, 89.890022]\n"
]
}
],
"source": [
"response = DataAccessLayer.getGridData(request, [times[-1]])\n",
"grid = response[0]\n",
"data = grid.getRawData()\n",
"lons,lats = grid.getLatLonCoords()\n",
"bbox = [lons.min(), lons.max(), lats.min(), lats.max()]\n",
"\n",
"print(\"grid size \" + str(data.shape))\n",
"print(\"grid extent \" + str(list(bbox)))"
]
},
{
"cell_type": "code",
"execution_count": 84,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAABTMAAAN1CAYAAACjH2+EAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzsfXmQVNd1/tc9S8/0LDALAwyMQGBAIECsAoSFrERLVJK8\nxImdshyX5bgiObblJbZjxxWpytYvsstJ7NhOnBhLsrBsly15kWVrdSQLIQnQsEkIjwQIhmWGmYHZ\n957u9/uDnMfp0+fed19PD6DQp4qi57377j13O8t3z7034nke8pSnPOUpT3nKU57ylKc85SlPecpT\nnvKUpzzl6Xyn6LlmIE95ylOe8pSnPOUpT3nKU57ylKc85SlPecpTnlwoD2bmKU95ylOe8pSnPOUp\nT3nKU57ylKc85SlPeXpLUB7MzFOe8pSnPOUpT3nKU57ylKc85SlPecpTnvL0lqA8mJmnPOUpT3nK\nU57ylKc85SlPecpTnvKUpzzl6S1BeTAzT3nKU57ylKc85SlPecpTnvKUpzzlKU95ytNbgvJgZp7y\nlKc85SlPecpTnvKUpzzlKU95ylOe8pSntwQVnmsGJEUiEe9c85CnPOUpT3nKU57ylKc85SlPecpT\nnvKUpzzlafzkeV4kl/mdd2AmAOzcufNcsxCaIpGc9stbrvww5HnuePVbqV65omg0dwHTL7/8Mlav\nXp2z/HJNb8X+fSvynKdgcu3X7du34/LLL59gbs5QGHkZhnI9jpPJ5DkpNxck2/hc83iuyz+bZJpP\nF1Ib5IreSrbVRMm1C51yoZ/O9dg4m/R/ZRyer/WIRCLnLW+udC78qLd6m2VLuZA9Y2NjOeDk/KFs\nx0I2bXk2ZP+yZctynmfkfJswkUjEe+GFF85l+Vl9l+t2PB/65VwbNOMtv7i4OEecnH+US8AzV5RL\nnlzGP42PszlOz0ZZE13GuZ7X5ytNpMw9G21+PuiMXNPZrtP5NjcIIHbhy0X+jqd+QX0xnrzPt3bX\nKNdjMRKJnHM9nk27T0Q7TFTenFKplPFdNv1gyy9PmVRQUHCuWfDJtvD2f1GPvpVpovvjXMmc8ZLr\n4nG2NJHtwnmfSLlAoGYYPZeNTrSBp7mybUz5TPQ4CEOkR4PG/fr16y+MyMyzgSZrE9XzPPW5S97Z\nDtgw351NJWvi63zgwZUSiQSAt6bRWVhon5oTLcCyUTDZtHNYJyLM+JsoR3EiHG/i1SSDwpKNR57/\n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\nDRl01MhEEbX77t27sWz
"text/plain": [
"<matplotlib.figure.Figure at 0x1069b8ed0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"def make_map(bbox, projection=ccrs.PlateCarree()):\n",
" fig, ax = plt.subplots(figsize=(18,14),\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",
"fig, ax = make_map(bbox=bbox)\n",
"# State boundaries\n",
"states = cfeat.NaturalEarthFeature(category='cultural',\n",
" name='admin_1_states_provinces_lines',\n",
" scale='50m', facecolor='none')\n",
"ax.add_feature(states, linestyle=':')\n",
"cs = ax.pcolormesh(lons, lats, data, cmap='Greys_r')\n",
"cbar = fig.colorbar(cs, shrink=0.9, orientation='horizontal')\n",
"cbar.set_label(str(grid.getLocationName())+\" \" \\\n",
" +str(grid.getParameter())+\" \" \\\n",
" +str(grid.getDataTime().getRefTime()))\n",
"plt.tight_layout()"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 2",
"language": "python",
"name": "python2"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.11"
}
},
"nbformat": 4,
"nbformat_minor": 0
}