2016-03-12 14:17:35 -07:00
|
|
|
{
|
|
|
|
"cells": [
|
2016-03-12 20:07:23 -06:00
|
|
|
{
|
|
|
|
"cell_type": "markdown",
|
|
|
|
"metadata": {},
|
|
|
|
"source": [
|
|
|
|
"# Python AWIPS Data Access Framework\n",
|
|
|
|
"\n",
|
|
|
|
"The `python-awips` package provides a Data Acccess Framework (DAF) for requesting data from a remote AWIPS II EDEX server. \n",
|
|
|
|
"\n",
|
|
|
|
"The AWIPS II Python Stack installed via RPM contains the DAF, matplotlib, numpy, scipy, basemap, pint, shapely, and other packages. \n",
|
|
|
|
"\n",
|
|
|
|
"## Listing a Grid Inventory"
|
|
|
|
]
|
|
|
|
},
|
2016-03-12 14:17:35 -07:00
|
|
|
{
|
|
|
|
"cell_type": "code",
|
2016-03-12 20:07:23 -06:00
|
|
|
"execution_count": 51,
|
2016-03-12 14:17:35 -07:00
|
|
|
"metadata": {
|
|
|
|
"collapsed": false
|
|
|
|
},
|
|
|
|
"outputs": [
|
|
|
|
{
|
|
|
|
"name": "stdout",
|
|
|
|
"output_type": "stream",
|
|
|
|
"text": [
|
|
|
|
"GFSLAMP5\n",
|
|
|
|
"GFSGuide\n",
|
|
|
|
"ECMF6\n",
|
|
|
|
"ECMF3\n",
|
|
|
|
"ECMF4\n",
|
|
|
|
"HPCqpfNDFD\n",
|
|
|
|
"ECMF-Global\n",
|
|
|
|
"RAP13\n",
|
|
|
|
"ECMF5\n",
|
|
|
|
"RTMA5\n",
|
|
|
|
"AVN211\n",
|
|
|
|
"NamDNG\n",
|
|
|
|
"ECMF9\n",
|
|
|
|
"QPE-MSR\n",
|
|
|
|
"estofsUS\n",
|
|
|
|
"ECMF12\n",
|
|
|
|
"ECMF10\n",
|
|
|
|
"ECMF8\n",
|
|
|
|
"MRMS_1000\n",
|
|
|
|
"ETA\n",
|
|
|
|
"LAMP2p5\n",
|
|
|
|
"HRRR\n",
|
|
|
|
"URMA25\n",
|
|
|
|
"GFS40\n",
|
|
|
|
"GFS\n",
|
|
|
|
"RAP40\n",
|
|
|
|
"RTMA\n",
|
|
|
|
"AVN225\n",
|
|
|
|
"NAM12\n",
|
|
|
|
"ECMF1\n",
|
|
|
|
"ECMF2\n",
|
|
|
|
"ECMF11\n",
|
|
|
|
"DGEX\n",
|
|
|
|
"NamDNG5\n",
|
|
|
|
"estofsPR\n",
|
|
|
|
"NCWF\n",
|
|
|
|
"ECMF7\n",
|
|
|
|
"NOHRSC-SNOW\n",
|
|
|
|
"HPCGuide\n",
|
|
|
|
"NAM40\n"
|
|
|
|
]
|
|
|
|
}
|
|
|
|
],
|
|
|
|
"source": [
|
|
|
|
"from awips.dataaccess import DataAccessLayer\n",
|
|
|
|
"\n",
|
|
|
|
"# Set host\n",
|
|
|
|
"DataAccessLayer.changeEDEXHost(\"edex-cloud.unidata.ucar.edu\")\n",
|
|
|
|
"\n",
|
|
|
|
"# Init data request\n",
|
|
|
|
"request = DataAccessLayer.newDataRequest()\n",
|
|
|
|
"\n",
|
|
|
|
"# Set datatype\n",
|
|
|
|
"request.setDatatype(\"grid\")\n",
|
|
|
|
"\n",
|
|
|
|
"# getAvailableLocationNames method will return a list of all available models\n",
|
|
|
|
"available_grids = DataAccessLayer.getAvailableLocationNames(request)\n",
|
|
|
|
"for grid in available_grids:\n",
|
|
|
|
" print grid\n",
|
|
|
|
" "
|
|
|
|
]
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"cell_type": "markdown",
|
|
|
|
"metadata": {
|
|
|
|
"collapsed": true
|
|
|
|
},
|
|
|
|
"source": [
|
2016-03-12 20:07:23 -06:00
|
|
|
"**LocationNames** is different for different plugins\n",
|
2016-03-12 14:17:35 -07:00
|
|
|
"- radar is icao\n",
|
2016-03-12 20:07:23 -06:00
|
|
|
"- satellite is sector\n",
|
|
|
|
"\n",
|
|
|
|
"\n",
|
|
|
|
"## Requesting a Grid"
|
2016-03-12 14:17:35 -07:00
|
|
|
]
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"cell_type": "code",
|
2016-03-12 20:07:23 -06:00
|
|
|
"execution_count": 52,
|
2016-03-12 14:17:35 -07:00
|
|
|
"metadata": {
|
|
|
|
"collapsed": false,
|
|
|
|
"scrolled": true
|
|
|
|
},
|
|
|
|
"outputs": [
|
|
|
|
{
|
|
|
|
"name": "stdout",
|
|
|
|
"output_type": "stream",
|
|
|
|
"text": [
|
|
|
|
"RAP40\n",
|
|
|
|
"2016-02-23 15:00:00 (12)\n",
|
2016-03-12 20:07:23 -06:00
|
|
|
"Unit is %\n",
|
|
|
|
"Parameter is RH\n",
|
|
|
|
"[[ 100.02842712 100.02842712 100.02842712 ..., 60.02842712\n",
|
|
|
|
" 60.02842712 63.02842712]\n",
|
|
|
|
" [ 63.02842712 60.02842712 52.02842712 ..., 90.02842712\n",
|
|
|
|
" 91.02842712 91.02842712]\n",
|
|
|
|
" [ 90.02842712 91.02842712 90.02842712 ..., 41.02842712\n",
|
|
|
|
" 40.02842712 38.02842712]\n",
|
2016-03-12 14:17:35 -07:00
|
|
|
" ..., \n",
|
2016-03-12 20:07:23 -06:00
|
|
|
" [ 54.02842712 62.02842712 62.02842712 ..., 51.02842712\n",
|
|
|
|
" 57.02842712 50.02842712]\n",
|
|
|
|
" [ 40.02842712 37.02842712 31.02842712 ..., 1.02842677\n",
|
|
|
|
" 3.02842665 5.02842665]\n",
|
|
|
|
" [ 7.02842665 7.02842665 9.02842712 ..., 69.02842712\n",
|
|
|
|
" 65.02842712 65.02842712]]\n",
|
2016-03-12 14:17:35 -07:00
|
|
|
"lat array = [[ 54.24940109 54.35071945 54.45080566 ..., 57.9545517 57.91926193\n",
|
|
|
|
" 57.88272858]\n",
|
|
|
|
" [ 57.84495163 57.80593109 57.76566696 ..., 58.07667542 58.08861542\n",
|
|
|
|
" 58.09931183]\n",
|
|
|
|
" [ 58.10876846 58.11697769 58.12394714 ..., 56.40270996 56.46187973\n",
|
|
|
|
" 56.51980972]\n",
|
|
|
|
" ..., \n",
|
|
|
|
" [ 19.93209648 19.89832115 19.86351395 ..., 20.054636 20.06362152\n",
|
|
|
|
" 20.07156372]\n",
|
|
|
|
" [ 20.0784626 20.08431816 20.08912849 ..., 18.58354759 18.63155174\n",
|
|
|
|
" 18.67854691]\n",
|
|
|
|
" [ 18.72453308 18.76950836 18.81346893 ..., 17.49624634 17.42861557\n",
|
|
|
|
" 17.36001205]]\n",
|
|
|
|
"lon array = [[-139.83120728 -139.32348633 -138.81448364 ..., -79.26060486\n",
|
|
|
|
" -78.70166016 -78.14326477]\n",
|
|
|
|
" [ -77.58544922 -77.02822876 -76.47161865 ..., -100.70157623\n",
|
|
|
|
" -100.13801575 -99.57427216]\n",
|
|
|
|
" [ -99.01037598 -98.44634247 -97.88218689 ..., -121.69165039\n",
|
|
|
|
" -121.15060425 -120.60871887]\n",
|
|
|
|
" ..., \n",
|
|
|
|
" [ -82.65139008 -82.26644897 -81.88170624 ..., -98.52494049\n",
|
|
|
|
" -98.13802338 -97.75105286]\n",
|
|
|
|
" [ -97.36403656 -96.97698212 -96.58989716 ..., -113.07767487\n",
|
|
|
|
" -112.69831085 -112.31866455]\n",
|
|
|
|
" [-111.93874359 -111.5585556 -111.17810822 ..., -69.85433197\n",
|
|
|
|
" -69.48160553 -69.10926819]]\n"
|
|
|
|
]
|
|
|
|
}
|
|
|
|
],
|
|
|
|
"source": [
|
|
|
|
"# Grid request\n",
|
|
|
|
"request.setLocationNames('RAP40')\n",
|
2016-03-12 20:07:23 -06:00
|
|
|
"request.setParameters(\"RH\")\n",
|
|
|
|
"request.setLevels(\"850MB\")\n",
|
2016-03-12 14:17:35 -07:00
|
|
|
"\n",
|
|
|
|
"# Get available times\n",
|
|
|
|
"t = DataAccessLayer.getAvailableTimes(request)\n",
|
|
|
|
"\n",
|
|
|
|
"# Select last available time [-1]\n",
|
|
|
|
"response = DataAccessLayer.getGridData(request, [t[-1]])\n",
|
|
|
|
"data = response[0]\n",
|
|
|
|
"\n",
|
|
|
|
"# Print info\n",
|
|
|
|
"print data.getLocationName()\n",
|
|
|
|
"print t[-1]\n",
|
|
|
|
"print 'Unit is', data.getUnit()\n",
|
|
|
|
"print 'Parameter is', data.getParameter()\n",
|
|
|
|
"\n",
|
|
|
|
"# Print data array\n",
|
|
|
|
"print data.getRawData()\n",
|
|
|
|
"\n",
|
|
|
|
"# Print lat/lon array\n",
|
|
|
|
"lon,lat = data.getLatLonCoords()\n",
|
|
|
|
"print \"lat array =\", lat\n",
|
|
|
|
"print \"lon array =\", lon"
|
|
|
|
]
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"cell_type": "markdown",
|
|
|
|
"metadata": {},
|
|
|
|
"source": [
|
2016-03-12 20:07:23 -06:00
|
|
|
"## Plotting a Grid using Basemap\n",
|
2016-03-12 14:17:35 -07:00
|
|
|
"\n",
|
2016-03-12 20:07:23 -06:00
|
|
|
"Using **matplotlib**, **numpy**, and **basemap**:"
|
2016-03-12 14:17:35 -07:00
|
|
|
]
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"cell_type": "code",
|
2016-03-12 20:07:23 -06:00
|
|
|
"execution_count": 53,
|
2016-03-12 14:17:35 -07:00
|
|
|
"metadata": {
|
|
|
|
"collapsed": false
|
|
|
|
},
|
2016-03-12 20:07:23 -06:00
|
|
|
"outputs": [
|
|
|
|
{
|
|
|
|
"data": {
|
|
|
|
"image/png": "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\n1JbUsnz2cmbcNANrrJV
|
|
|
|
"text/plain": [
|
|
|
|
"<matplotlib.figure.Figure at 0x7f0b83ead710>"
|
|
|
|
]
|
|
|
|
},
|
|
|
|
"metadata": {},
|
|
|
|
"output_type": "display_data"
|
|
|
|
}
|
|
|
|
],
|
2016-03-12 14:17:35 -07:00
|
|
|
"source": [
|
|
|
|
"%matplotlib inline\n",
|
|
|
|
"import matplotlib.tri as mtri\n",
|
|
|
|
"import matplotlib.pyplot as plt\n",
|
|
|
|
"from matplotlib.transforms import offset_copy\n",
|
|
|
|
"from mpl_toolkits.basemap import Basemap, cm\n",
|
|
|
|
"import numpy as np\n",
|
|
|
|
"from numpy import linspace, transpose\n",
|
|
|
|
"from numpy import meshgrid\n",
|
2016-03-12 20:07:23 -06:00
|
|
|
"from pint import UnitRegistry\n",
|
2016-03-12 14:17:35 -07:00
|
|
|
"\n",
|
2016-03-12 20:07:23 -06:00
|
|
|
"plt.figure(figsize=(12, 12), dpi=100)\n",
|
2016-03-12 14:17:35 -07:00
|
|
|
"lons,lats = data.getLatLonCoords()\n",
|
|
|
|
"\n",
|
|
|
|
"map = Basemap(projection='cyl',\n",
|
|
|
|
" resolution = 'c',\n",
|
|
|
|
" llcrnrlon = lons.min(), llcrnrlat = lats.min(),\n",
|
|
|
|
" urcrnrlon =lons.max(), urcrnrlat = lats.max()\n",
|
|
|
|
")\n",
|
|
|
|
"map.drawcoastlines()\n",
|
|
|
|
"map.drawstates()\n",
|
|
|
|
"map.drawcountries()\n",
|
2016-03-12 20:07:23 -06:00
|
|
|
"\n",
|
|
|
|
"# \n",
|
|
|
|
"# We have to reproject our grid, see https://stackoverflow.com/questions/31822553/m\n",
|
|
|
|
"#\n",
|
2016-03-12 14:17:35 -07:00
|
|
|
"x = linspace(0, map.urcrnrx, data.getRawData().shape[1])\n",
|
|
|
|
"y = linspace(0, map.urcrnry, data.getRawData().shape[0])\n",
|
|
|
|
"xx, yy = meshgrid(x, y)\n",
|
|
|
|
"ngrid = len(x)\n",
|
|
|
|
"rlons = np.repeat(np.linspace(np.min(lons), np.max(lons), ngrid),\n",
|
|
|
|
" ngrid).reshape(ngrid, ngrid)\n",
|
|
|
|
"rlats = np.repeat(np.linspace(np.min(lats), np.max(lats), ngrid),\n",
|
|
|
|
" ngrid).reshape(ngrid, ngrid).T\n",
|
|
|
|
"tli = mtri.LinearTriInterpolator(mtri.Triangulation(lons.flatten(),\n",
|
|
|
|
" lats.flatten()), data.getRawData().flatten())\n",
|
|
|
|
"rdata = tli(rlons, rlats)\n",
|
2016-03-12 20:07:23 -06:00
|
|
|
"cs = map.pcolormesh(rlons, rlats, rdata, latlon=True, vmin=0, vmax=100, cmap='YlGn')\n",
|
2016-03-12 14:17:35 -07:00
|
|
|
"\n",
|
|
|
|
"# add colorbar.\n",
|
|
|
|
"cbar = map.colorbar(cs,location='bottom',pad=\"5%\")\n",
|
2016-03-12 20:07:23 -06:00
|
|
|
"cbar.set_label(data.getParameter() + data.getUnit() )\n",
|
|
|
|
"\n",
|
|
|
|
"# Show plot\n",
|
2016-03-12 14:17:35 -07:00
|
|
|
"plt.show()\n"
|
|
|
|
]
|
|
|
|
},
|
2016-03-12 20:07:23 -06:00
|
|
|
{
|
|
|
|
"cell_type": "markdown",
|
|
|
|
"metadata": {},
|
|
|
|
"source": [
|
|
|
|
"## Plotting a Grid using Cartopy\n"
|
|
|
|
]
|
|
|
|
},
|
2016-03-12 14:17:35 -07:00
|
|
|
{
|
|
|
|
"cell_type": "code",
|
2016-03-12 20:07:23 -06:00
|
|
|
"execution_count": 54,
|
2016-03-12 14:17:35 -07:00
|
|
|
"metadata": {
|
2016-03-12 20:07:23 -06:00
|
|
|
"collapsed": false
|
2016-03-12 14:17:35 -07:00
|
|
|
},
|
2016-03-12 20:07:23 -06:00
|
|
|
"outputs": [
|
|
|
|
{
|
|
|
|
"ename": "ImportError",
|
|
|
|
"evalue": "No module named netCDF4",
|
|
|
|
"output_type": "error",
|
|
|
|
"traceback": [
|
|
|
|
"\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
|
|
|
|
"\u001b[1;31mImportError\u001b[0m Traceback (most recent call last)",
|
|
|
|
"\u001b[1;32m<ipython-input-54-90187fbaa2aa>\u001b[0m in \u001b[0;36m<module>\u001b[1;34m()\u001b[0m\n\u001b[0;32m 1\u001b[0m \u001b[1;32mimport\u001b[0m \u001b[0mos\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 2\u001b[0m \u001b[1;32mimport\u001b[0m \u001b[0mmatplotlib\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mpyplot\u001b[0m \u001b[1;32mas\u001b[0m \u001b[0mplt\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 3\u001b[1;33m \u001b[1;32mfrom\u001b[0m \u001b[0mnetCDF4\u001b[0m \u001b[1;32mimport\u001b[0m \u001b[0mDataset\u001b[0m \u001b[1;32mas\u001b[0m \u001b[0mnetcdf_dataset\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 4\u001b[0m \u001b[1;32mimport\u001b[0m \u001b[0mnumpy\u001b[0m \u001b[1;32mas\u001b[0m \u001b[0mnp\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 5\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n",
|
|
|
|
"\u001b[1;31mImportError\u001b[0m: No module named netCDF4"
|
|
|
|
]
|
|
|
|
}
|
|
|
|
],
|
|
|
|
"source": [
|
|
|
|
"import os\n",
|
|
|
|
"import matplotlib.pyplot as plt\n",
|
|
|
|
"from netCDF4 import Dataset as netcdf_dataset\n",
|
|
|
|
"import numpy as np\n",
|
|
|
|
"\n",
|
|
|
|
"from cartopy import config\n",
|
|
|
|
"import cartopy.crs as ccrs\n",
|
|
|
|
"\n",
|
|
|
|
"\n",
|
|
|
|
"# get the path of the file. It can be found in the repo data directory.\n",
|
|
|
|
"fname = os.path.join(config[\"repo_data_dir\"],\n",
|
|
|
|
" 'netcdf', 'HadISST1_SST_update.nc'\n",
|
|
|
|
" )\n",
|
|
|
|
"\n",
|
|
|
|
"dataset = netcdf_dataset(fname)\n",
|
|
|
|
"sst = dataset.variables['sst'][0, :, :]\n",
|
|
|
|
"lats = dataset.variables['lat'][:]\n",
|
|
|
|
"lons = dataset.variables['lon'][:]\n",
|
|
|
|
"\n",
|
|
|
|
"ax = plt.axes(projection=ccrs.PlateCarree())\n",
|
|
|
|
"\n",
|
|
|
|
"plt.contourf(lons, lats, sst, 60,\n",
|
|
|
|
" transform=ccrs.PlateCarree())\n",
|
|
|
|
"\n",
|
|
|
|
"ax.coastlines()\n",
|
|
|
|
"\n",
|
|
|
|
"plt.show()"
|
|
|
|
]
|
2016-03-12 14:17:35 -07:00
|
|
|
},
|
|
|
|
{
|
|
|
|
"cell_type": "code",
|
|
|
|
"execution_count": null,
|
|
|
|
"metadata": {
|
|
|
|
"collapsed": true
|
|
|
|
},
|
|
|
|
"outputs": [],
|
|
|
|
"source": []
|
|
|
|
}
|
|
|
|
],
|
|
|
|
"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",
|
2016-03-12 20:07:23 -06:00
|
|
|
"version": "2.7.9"
|
2016-03-12 14:17:35 -07:00
|
|
|
}
|
|
|
|
},
|
|
|
|
"nbformat": 4,
|
|
|
|
"nbformat_minor": 0
|
|
|
|
}
|