mirror of
https://github.com/Unidata/python-awips.git
synced 2025-02-24 06:57:56 -05:00
539 lines
67 KiB
HTML
539 lines
67 KiB
HTML
|
|
||
|
|
||
|
<!DOCTYPE html>
|
||
|
<html class="writer-html5" lang="en" >
|
||
|
<head>
|
||
|
<meta charset="utf-8">
|
||
|
|
||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||
|
|
||
|
<title>Regional Surface Obs Plot — python-awips documentation</title>
|
||
|
|
||
|
|
||
|
|
||
|
<link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" />
|
||
|
<link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
<!--[if lt IE 9]>
|
||
|
<script src="../../_static/js/html5shiv.min.js"></script>
|
||
|
<![endif]-->
|
||
|
|
||
|
|
||
|
<script type="text/javascript" id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script>
|
||
|
<script src="../../_static/jquery.js"></script>
|
||
|
<script src="../../_static/underscore.js"></script>
|
||
|
<script src="../../_static/doctools.js"></script>
|
||
|
<script src="../../_static/language_data.js"></script>
|
||
|
|
||
|
<script type="text/javascript" src="../../_static/js/theme.js"></script>
|
||
|
|
||
|
|
||
|
<link rel="author" title="About these documents" href="../../about.html" />
|
||
|
<link rel="index" title="Index" href="../../genindex.html" />
|
||
|
<link rel="search" title="Search" href="../../search.html" />
|
||
|
<link rel="next" title="Satellite Imagery" href="Satellite_Imagery.html" />
|
||
|
<link rel="prev" title="Precip Accumulation-Region Of Interest" href="Precip_Accumulation-Region_Of_Interest.html" />
|
||
|
</head>
|
||
|
|
||
|
<body class="wy-body-for-nav">
|
||
|
|
||
|
|
||
|
<div class="wy-grid-for-nav">
|
||
|
|
||
|
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
|
||
|
<div class="wy-side-scroll">
|
||
|
<div class="wy-side-nav-search" >
|
||
|
|
||
|
|
||
|
|
||
|
<a href="../../index.html" class="icon icon-home" alt="Documentation Home"> python-awips
|
||
|
|
||
|
|
||
|
|
||
|
</a>
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
<div class="version">
|
||
|
18.1.7
|
||
|
</div>
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
<div role="search">
|
||
|
<form id="rtd-search-form" class="wy-form" action="../../search.html" method="get">
|
||
|
<input type="text" name="q" placeholder="Search docs" />
|
||
|
<input type="hidden" name="check_keywords" value="yes" />
|
||
|
<input type="hidden" name="area" value="default" />
|
||
|
</form>
|
||
|
</div>
|
||
|
|
||
|
|
||
|
</div>
|
||
|
|
||
|
|
||
|
<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
<ul class="current">
|
||
|
<li class="toctree-l1"><a class="reference internal" href="../../api/index.html">API Documentation</a></li>
|
||
|
<li class="toctree-l1"><a class="reference internal" href="../../datatypes.html">Available Data Types</a></li>
|
||
|
<li class="toctree-l1 current"><a class="reference internal" href="../index.html">Data Plotting Examples</a><ul class="current">
|
||
|
<li class="toctree-l2"><a class="reference internal" href="AWIPS_Grids_and_Cartopy.html">AWIPS Grids and Cartopy</a></li>
|
||
|
<li class="toctree-l2"><a class="reference internal" href="Colored_Surface_Temperature_Plot.html">Colored Surface Temperature Plot</a></li>
|
||
|
<li class="toctree-l2"><a class="reference internal" href="Forecast_Model_Vertical_Sounding.html">Forecast Model Vertical Sounding</a></li>
|
||
|
<li class="toctree-l2"><a class="reference internal" href="GOES_Geostationary_Lightning_Mapper.html">GOES Geostationary Lightning Mapper</a></li>
|
||
|
<li class="toctree-l2"><a class="reference internal" href="Grid_Levels_and_Parameters.html">Grid Levels and Parameters</a></li>
|
||
|
<li class="toctree-l2"><a class="reference internal" href="METAR_Station_Plot_with_MetPy.html">METAR Station Plot with MetPy</a></li>
|
||
|
<li class="toctree-l2"><a class="reference internal" href="Map_Resources_and_Topography.html">Map Resources and Topography</a></li>
|
||
|
<li class="toctree-l2"><a class="reference internal" href="Model_Sounding_Data.html">Model Sounding Data</a></li>
|
||
|
<li class="toctree-l2"><a class="reference internal" href="NEXRAD_Level3_Radar.html">NEXRAD Level3 Radar</a></li>
|
||
|
<li class="toctree-l2"><a class="reference internal" href="Precip_Accumulation-Region_Of_Interest.html">Precip Accumulation-Region Of Interest</a></li>
|
||
|
<li class="toctree-l2 current"><a class="current reference internal" href="#">Regional Surface Obs Plot</a><ul>
|
||
|
<li class="toctree-l3"><a class="reference internal" href="#plot-metar-obs">Plot METAR (obs)</a></li>
|
||
|
<li class="toctree-l3"><a class="reference internal" href="#plot-synoptic-sfcobs">Plot Synoptic (sfcobs)</a></li>
|
||
|
<li class="toctree-l3"><a class="reference internal" href="#plot-both-metar-and-synop">Plot both METAR and SYNOP</a></li>
|
||
|
</ul>
|
||
|
</li>
|
||
|
<li class="toctree-l2"><a class="reference internal" href="Satellite_Imagery.html">Satellite Imagery</a></li>
|
||
|
<li class="toctree-l2"><a class="reference internal" href="Upper_Air_BUFR_Soundings.html">Upper Air BUFR Soundings</a></li>
|
||
|
<li class="toctree-l2"><a class="reference internal" href="Watch_and_Warning_Polygons.html">Watch and Warning Polygons</a></li>
|
||
|
</ul>
|
||
|
</li>
|
||
|
<li class="toctree-l1"><a class="reference internal" href="../../dev.html">Development Guide</a></li>
|
||
|
<li class="toctree-l1"><a class="reference internal" href="../../gridparms.html">Grid Parameters</a></li>
|
||
|
<li class="toctree-l1"><a class="reference internal" href="../../about.html">About Unidata AWIPS</a></li>
|
||
|
</ul>
|
||
|
|
||
|
|
||
|
|
||
|
</div>
|
||
|
|
||
|
</div>
|
||
|
</nav>
|
||
|
|
||
|
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
|
||
|
|
||
|
|
||
|
<nav class="wy-nav-top" aria-label="top navigation">
|
||
|
|
||
|
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
|
||
|
<a href="../../index.html">python-awips</a>
|
||
|
|
||
|
</nav>
|
||
|
|
||
|
|
||
|
<div class="wy-nav-content">
|
||
|
|
||
|
<div class="rst-content">
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
<div role="navigation" aria-label="breadcrumbs navigation">
|
||
|
|
||
|
<ul class="wy-breadcrumbs">
|
||
|
|
||
|
<li><a href="../../index.html" class="icon icon-home"></a> »</li>
|
||
|
|
||
|
<li><a href="../index.html">Data Plotting Examples</a> »</li>
|
||
|
|
||
|
<li>Regional Surface Obs Plot</li>
|
||
|
|
||
|
|
||
|
<li class="wy-breadcrumbs-aside">
|
||
|
|
||
|
|
||
|
<a href="../../_sources/examples/generated/Regional_Surface_Obs_Plot.rst.txt" rel="nofollow"> View page source</a>
|
||
|
|
||
|
|
||
|
</li>
|
||
|
|
||
|
</ul>
|
||
|
|
||
|
|
||
|
<hr/>
|
||
|
</div>
|
||
|
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
|
||
|
<div itemprop="articleBody">
|
||
|
|
||
|
<div class="section" id="regional-surface-obs-plot">
|
||
|
<h1>Regional Surface Obs Plot<a class="headerlink" href="#regional-surface-obs-plot" title="Permalink to this headline">¶</a></h1>
|
||
|
<p><a class="reference external" href="http://nbviewer.ipython.org/github/Unidata/python-awips/blob/master/examples/notebooks/Regional_Surface_Obs_Plot.ipynb">Notebook</a>
|
||
|
This exercise creates a surface observsation station plot for the state
|
||
|
of Florida, using both METAR (datatype <em>obs</em>) and Synoptic (datatype
|
||
|
<em>sfcobs</em>). Because we are using the AWIPS Map Database for state and
|
||
|
county boundaries, there is no use of Cartopy <code class="docutils literal notranslate"><span class="pre">cfeature</span></code> in this
|
||
|
exercise.</p>
|
||
|
<div class="highlight-ipython3 notranslate"><div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">awips.dataaccess</span> <span class="kn">import</span> <span class="n">DataAccessLayer</span>
|
||
|
<span class="kn">from</span> <span class="nn">dynamicserialize.dstypes.com.raytheon.uf.common.time</span> <span class="kn">import</span> <span class="n">TimeRange</span>
|
||
|
<span class="kn">from</span> <span class="nn">datetime</span> <span class="kn">import</span> <span class="n">datetime</span><span class="p">,</span> <span class="n">timedelta</span>
|
||
|
<span class="kn">import</span> <span class="nn">numpy</span> <span class="k">as</span> <span class="nn">np</span>
|
||
|
<span class="kn">import</span> <span class="nn">cartopy.crs</span> <span class="k">as</span> <span class="nn">ccrs</span>
|
||
|
<span class="kn">from</span> <span class="nn">cartopy.mpl.gridliner</span> <span class="kn">import</span> <span class="n">LONGITUDE_FORMATTER</span><span class="p">,</span> <span class="n">LATITUDE_FORMATTER</span>
|
||
|
<span class="kn">from</span> <span class="nn">cartopy.feature</span> <span class="kn">import</span> <span class="n">ShapelyFeature</span>
|
||
|
<span class="kn">from</span> <span class="nn">shapely.geometry</span> <span class="kn">import</span> <span class="n">Polygon</span>
|
||
|
<span class="kn">import</span> <span class="nn">matplotlib.pyplot</span> <span class="k">as</span> <span class="nn">plt</span>
|
||
|
<span class="kn">from</span> <span class="nn">metpy.units</span> <span class="kn">import</span> <span class="n">units</span>
|
||
|
<span class="kn">from</span> <span class="nn">metpy.calc</span> <span class="kn">import</span> <span class="n">wind_components</span>
|
||
|
<span class="kn">from</span> <span class="nn">metpy.plots</span> <span class="kn">import</span> <span class="n">simple_layout</span><span class="p">,</span> <span class="n">StationPlot</span><span class="p">,</span> <span class="n">StationPlotLayout</span>
|
||
|
<span class="kn">import</span> <span class="nn">warnings</span>
|
||
|
<span class="o">%</span><span class="k">matplotlib</span> inline
|
||
|
|
||
|
<span class="k">def</span> <span class="nf">get_cloud_cover</span><span class="p">(</span><span class="n">code</span><span class="p">):</span>
|
||
|
<span class="k">if</span> <span class="s1">'OVC'</span> <span class="ow">in</span> <span class="n">code</span><span class="p">:</span>
|
||
|
<span class="k">return</span> <span class="mf">1.0</span>
|
||
|
<span class="k">elif</span> <span class="s1">'BKN'</span> <span class="ow">in</span> <span class="n">code</span><span class="p">:</span>
|
||
|
<span class="k">return</span> <span class="mf">6.0</span><span class="o">/</span><span class="mf">8.0</span>
|
||
|
<span class="k">elif</span> <span class="s1">'SCT'</span> <span class="ow">in</span> <span class="n">code</span><span class="p">:</span>
|
||
|
<span class="k">return</span> <span class="mf">4.0</span><span class="o">/</span><span class="mf">8.0</span>
|
||
|
<span class="k">elif</span> <span class="s1">'FEW'</span> <span class="ow">in</span> <span class="n">code</span><span class="p">:</span>
|
||
|
<span class="k">return</span> <span class="mf">2.0</span><span class="o">/</span><span class="mf">8.0</span>
|
||
|
<span class="k">else</span><span class="p">:</span>
|
||
|
<span class="k">return</span> <span class="mi">0</span>
|
||
|
</pre></div>
|
||
|
</div>
|
||
|
<div class="highlight-ipython3 notranslate"><div class="highlight"><pre><span></span><span class="c1"># EDEX request for a single state</span>
|
||
|
<span class="n">edexServer</span> <span class="o">=</span> <span class="s2">"edex-cloud.unidata.ucar.edu"</span>
|
||
|
<span class="n">DataAccessLayer</span><span class="o">.</span><span class="n">changeEDEXHost</span><span class="p">(</span><span class="n">edexServer</span><span class="p">)</span>
|
||
|
<span class="n">request</span> <span class="o">=</span> <span class="n">DataAccessLayer</span><span class="o">.</span><span class="n">newDataRequest</span><span class="p">(</span><span class="s1">'maps'</span><span class="p">)</span>
|
||
|
<span class="n">request</span><span class="o">.</span><span class="n">addIdentifier</span><span class="p">(</span><span class="s1">'table'</span><span class="p">,</span> <span class="s1">'mapdata.states'</span><span class="p">)</span>
|
||
|
<span class="n">request</span><span class="o">.</span><span class="n">addIdentifier</span><span class="p">(</span><span class="s1">'state'</span><span class="p">,</span> <span class="s1">'FL'</span><span class="p">)</span>
|
||
|
<span class="n">request</span><span class="o">.</span><span class="n">addIdentifier</span><span class="p">(</span><span class="s1">'geomField'</span><span class="p">,</span> <span class="s1">'the_geom'</span><span class="p">)</span>
|
||
|
<span class="n">request</span><span class="o">.</span><span class="n">setParameters</span><span class="p">(</span><span class="s1">'state'</span><span class="p">,</span><span class="s1">'name'</span><span class="p">,</span><span class="s1">'lat'</span><span class="p">,</span><span class="s1">'lon'</span><span class="p">)</span>
|
||
|
<span class="n">response</span> <span class="o">=</span> <span class="n">DataAccessLayer</span><span class="o">.</span><span class="n">getGeometryData</span><span class="p">(</span><span class="n">request</span><span class="p">)</span>
|
||
|
<span class="n">record</span> <span class="o">=</span> <span class="n">response</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
|
||
|
<span class="nb">print</span><span class="p">(</span><span class="s2">"Found "</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">response</span><span class="p">))</span> <span class="o">+</span> <span class="s2">" MultiPolygon"</span><span class="p">)</span>
|
||
|
<span class="n">state</span><span class="o">=</span><span class="p">{}</span>
|
||
|
<span class="n">state</span><span class="p">[</span><span class="s1">'name'</span><span class="p">]</span> <span class="o">=</span> <span class="n">record</span><span class="o">.</span><span class="n">getString</span><span class="p">(</span><span class="s1">'name'</span><span class="p">)</span>
|
||
|
<span class="n">state</span><span class="p">[</span><span class="s1">'state'</span><span class="p">]</span> <span class="o">=</span> <span class="n">record</span><span class="o">.</span><span class="n">getString</span><span class="p">(</span><span class="s1">'state'</span><span class="p">)</span>
|
||
|
<span class="n">state</span><span class="p">[</span><span class="s1">'lat'</span><span class="p">]</span> <span class="o">=</span> <span class="n">record</span><span class="o">.</span><span class="n">getNumber</span><span class="p">(</span><span class="s1">'lat'</span><span class="p">)</span>
|
||
|
<span class="n">state</span><span class="p">[</span><span class="s1">'lon'</span><span class="p">]</span> <span class="o">=</span> <span class="n">record</span><span class="o">.</span><span class="n">getNumber</span><span class="p">(</span><span class="s1">'lon'</span><span class="p">)</span>
|
||
|
<span class="c1">#state['geom'] = record.getGeometry()</span>
|
||
|
<span class="n">state</span><span class="p">[</span><span class="s1">'bounds'</span><span class="p">]</span> <span class="o">=</span> <span class="n">record</span><span class="o">.</span><span class="n">getGeometry</span><span class="p">()</span><span class="o">.</span><span class="n">bounds</span>
|
||
|
<span class="nb">print</span><span class="p">(</span><span class="n">state</span><span class="p">[</span><span class="s1">'name'</span><span class="p">],</span> <span class="n">state</span><span class="p">[</span><span class="s1">'state'</span><span class="p">],</span> <span class="n">state</span><span class="p">[</span><span class="s1">'lat'</span><span class="p">],</span> <span class="n">state</span><span class="p">[</span><span class="s1">'lon'</span><span class="p">],</span> <span class="n">state</span><span class="p">[</span><span class="s1">'bounds'</span><span class="p">])</span>
|
||
|
<span class="nb">print</span><span class="p">()</span>
|
||
|
|
||
|
<span class="c1"># EDEX request for multiple states</span>
|
||
|
<span class="n">request</span> <span class="o">=</span> <span class="n">DataAccessLayer</span><span class="o">.</span><span class="n">newDataRequest</span><span class="p">(</span><span class="s1">'maps'</span><span class="p">)</span>
|
||
|
<span class="n">request</span><span class="o">.</span><span class="n">addIdentifier</span><span class="p">(</span><span class="s1">'table'</span><span class="p">,</span> <span class="s1">'mapdata.states'</span><span class="p">)</span>
|
||
|
<span class="n">request</span><span class="o">.</span><span class="n">addIdentifier</span><span class="p">(</span><span class="s1">'geomField'</span><span class="p">,</span> <span class="s1">'the_geom'</span><span class="p">)</span>
|
||
|
<span class="n">request</span><span class="o">.</span><span class="n">addIdentifier</span><span class="p">(</span><span class="s1">'inLocation'</span><span class="p">,</span> <span class="s1">'true'</span><span class="p">)</span>
|
||
|
<span class="n">request</span><span class="o">.</span><span class="n">addIdentifier</span><span class="p">(</span><span class="s1">'locationField'</span><span class="p">,</span> <span class="s1">'state'</span><span class="p">)</span>
|
||
|
<span class="n">request</span><span class="o">.</span><span class="n">setParameters</span><span class="p">(</span><span class="s1">'state'</span><span class="p">,</span><span class="s1">'name'</span><span class="p">,</span><span class="s1">'lat'</span><span class="p">,</span><span class="s1">'lon'</span><span class="p">)</span>
|
||
|
<span class="n">request</span><span class="o">.</span><span class="n">setLocationNames</span><span class="p">(</span><span class="s1">'FL'</span><span class="p">,</span><span class="s1">'GA'</span><span class="p">,</span><span class="s1">'MS'</span><span class="p">,</span><span class="s1">'AL'</span><span class="p">,</span><span class="s1">'SC'</span><span class="p">,</span><span class="s1">'LA'</span><span class="p">)</span>
|
||
|
<span class="n">response</span> <span class="o">=</span> <span class="n">DataAccessLayer</span><span class="o">.</span><span class="n">getGeometryData</span><span class="p">(</span><span class="n">request</span><span class="p">)</span>
|
||
|
<span class="nb">print</span><span class="p">(</span><span class="s2">"Found "</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">response</span><span class="p">))</span> <span class="o">+</span> <span class="s2">" MultiPolygons"</span><span class="p">)</span>
|
||
|
|
||
|
<span class="c1"># Append each geometry to a numpy array</span>
|
||
|
<span class="n">states</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">([])</span>
|
||
|
<span class="k">for</span> <span class="n">ob</span> <span class="ow">in</span> <span class="n">response</span><span class="p">:</span>
|
||
|
<span class="nb">print</span><span class="p">(</span><span class="n">ob</span><span class="o">.</span><span class="n">getString</span><span class="p">(</span><span class="s1">'name'</span><span class="p">),</span> <span class="n">ob</span><span class="o">.</span><span class="n">getString</span><span class="p">(</span><span class="s1">'state'</span><span class="p">),</span> <span class="n">ob</span><span class="o">.</span><span class="n">getNumber</span><span class="p">(</span><span class="s1">'lat'</span><span class="p">),</span> <span class="n">ob</span><span class="o">.</span><span class="n">getNumber</span><span class="p">(</span><span class="s1">'lon'</span><span class="p">))</span>
|
||
|
<span class="n">states</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">states</span><span class="p">,</span><span class="n">ob</span><span class="o">.</span><span class="n">getGeometry</span><span class="p">())</span>
|
||
|
</pre></div>
|
||
|
</div>
|
||
|
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">Found</span> <span class="mi">1</span> <span class="n">MultiPolygon</span>
|
||
|
<span class="n">Florida</span> <span class="n">FL</span> <span class="mf">28.67402</span> <span class="o">-</span><span class="mf">82.50934</span> <span class="p">(</span><span class="o">-</span><span class="mf">87.63429260299995</span><span class="p">,</span> <span class="mf">24.521051616000022</span><span class="p">,</span> <span class="o">-</span><span class="mf">80.03199876199994</span><span class="p">,</span> <span class="mf">31.001012802000048</span><span class="p">)</span>
|
||
|
|
||
|
<span class="n">Found</span> <span class="mi">6</span> <span class="n">MultiPolygons</span>
|
||
|
<span class="n">Florida</span> <span class="n">FL</span> <span class="mf">28.67402</span> <span class="o">-</span><span class="mf">82.50934</span>
|
||
|
<span class="n">Georgia</span> <span class="n">GA</span> <span class="mf">32.65155</span> <span class="o">-</span><span class="mf">83.44848</span>
|
||
|
<span class="n">Louisiana</span> <span class="n">LA</span> <span class="mf">31.0891</span> <span class="o">-</span><span class="mf">92.02905</span>
|
||
|
<span class="n">Alabama</span> <span class="n">AL</span> <span class="mf">32.79354</span> <span class="o">-</span><span class="mf">86.82676</span>
|
||
|
<span class="n">Mississippi</span> <span class="n">MS</span> <span class="mf">32.75201</span> <span class="o">-</span><span class="mf">89.66553</span>
|
||
|
<span class="n">South</span> <span class="n">Carolina</span> <span class="n">SC</span> <span class="mf">33.93574</span> <span class="o">-</span><span class="mf">80.89899</span>
|
||
|
</pre></div>
|
||
|
</div>
|
||
|
<p>Now make sure we can plot the states with a lat/lon grid.</p>
|
||
|
<div class="highlight-ipython3 notranslate"><div class="highlight"><pre><span></span><span class="k">def</span> <span class="nf">make_map</span><span class="p">(</span><span class="n">bbox</span><span class="p">,</span> <span class="n">proj</span><span class="o">=</span><span class="n">ccrs</span><span class="o">.</span><span class="n">PlateCarree</span><span class="p">()):</span>
|
||
|
<span class="n">fig</span><span class="p">,</span> <span class="n">ax</span> <span class="o">=</span> <span class="n">plt</span><span class="o">.</span><span class="n">subplots</span><span class="p">(</span><span class="n">figsize</span><span class="o">=</span><span class="p">(</span><span class="mi">16</span><span class="p">,</span><span class="mi">12</span><span class="p">),</span><span class="n">subplot_kw</span><span class="o">=</span><span class="nb">dict</span><span class="p">(</span><span class="n">projection</span><span class="o">=</span><span class="n">proj</span><span class="p">))</span>
|
||
|
<span class="n">ax</span><span class="o">.</span><span class="n">set_extent</span><span class="p">(</span><span class="n">bbox</span><span class="p">)</span>
|
||
|
<span class="n">gl</span> <span class="o">=</span> <span class="n">ax</span><span class="o">.</span><span class="n">gridlines</span><span class="p">(</span><span class="n">draw_labels</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">color</span><span class="o">=</span><span class="s1">'#e7e7e7'</span><span class="p">)</span>
|
||
|
<span class="n">gl</span><span class="o">.</span><span class="n">top_labels</span> <span class="o">=</span> <span class="n">gl</span><span class="o">.</span><span class="n">right_labels</span> <span class="o">=</span> <span class="kc">False</span>
|
||
|
<span class="n">gl</span><span class="o">.</span><span class="n">xformatter</span> <span class="o">=</span> <span class="n">LONGITUDE_FORMATTER</span>
|
||
|
<span class="n">gl</span><span class="o">.</span><span class="n">yformatter</span> <span class="o">=</span> <span class="n">LATITUDE_FORMATTER</span>
|
||
|
<span class="k">return</span> <span class="n">fig</span><span class="p">,</span> <span class="n">ax</span>
|
||
|
|
||
|
<span class="c1"># buffer our bounds by +/i degrees lat/lon</span>
|
||
|
<span class="n">bounds</span> <span class="o">=</span> <span class="n">state</span><span class="p">[</span><span class="s1">'bounds'</span><span class="p">]</span>
|
||
|
<span class="n">bbox</span><span class="o">=</span><span class="p">[</span><span class="n">bounds</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">-</span><span class="mi">3</span><span class="p">,</span><span class="n">bounds</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="o">+</span><span class="mi">3</span><span class="p">,</span><span class="n">bounds</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">-</span><span class="mf">1.5</span><span class="p">,</span><span class="n">bounds</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span><span class="o">+</span><span class="mf">1.5</span><span class="p">]</span>
|
||
|
|
||
|
<span class="n">fig</span><span class="p">,</span> <span class="n">ax</span> <span class="o">=</span> <span class="n">make_map</span><span class="p">(</span><span class="n">bbox</span><span class="o">=</span><span class="n">bbox</span><span class="p">)</span>
|
||
|
<span class="n">shape_feature</span> <span class="o">=</span> <span class="n">ShapelyFeature</span><span class="p">(</span><span class="n">states</span><span class="p">,</span><span class="n">ccrs</span><span class="o">.</span><span class="n">PlateCarree</span><span class="p">(),</span>
|
||
|
<span class="n">facecolor</span><span class="o">=</span><span class="s1">'none'</span><span class="p">,</span> <span class="n">linestyle</span><span class="o">=</span><span class="s2">"-"</span><span class="p">,</span><span class="n">edgecolor</span><span class="o">=</span><span class="s1">'#000000'</span><span class="p">,</span><span class="n">linewidth</span><span class="o">=</span><span class="mi">2</span><span class="p">)</span>
|
||
|
<span class="n">ax</span><span class="o">.</span><span class="n">add_feature</span><span class="p">(</span><span class="n">shape_feature</span><span class="p">)</span>
|
||
|
</pre></div>
|
||
|
</div>
|
||
|
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="o"><</span><span class="n">cartopy</span><span class="o">.</span><span class="n">mpl</span><span class="o">.</span><span class="n">feature_artist</span><span class="o">.</span><span class="n">FeatureArtist</span> <span class="n">at</span> <span class="mh">0x11dcfedd8</span><span class="o">></span>
|
||
|
</pre></div>
|
||
|
</div>
|
||
|
<img alt="../../_images/Regional_Surface_Obs_Plot_4_1.png" src="../../_images/Regional_Surface_Obs_Plot_4_1.png" />
|
||
|
<hr class="docutils" />
|
||
|
<div class="section" id="plot-metar-obs">
|
||
|
<h2>Plot METAR (obs)<a class="headerlink" href="#plot-metar-obs" title="Permalink to this headline">¶</a></h2>
|
||
|
<p>Here we use a spatial envelope to limit the request to the boundary or
|
||
|
our plot. Without such a filter you may be requesting many tens of
|
||
|
thousands of records.</p>
|
||
|
<div class="highlight-ipython3 notranslate"><div class="highlight"><pre><span></span><span class="c1"># Create envelope geometry</span>
|
||
|
<span class="n">envelope</span> <span class="o">=</span> <span class="n">Polygon</span><span class="p">([(</span><span class="n">bbox</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span><span class="n">bbox</span><span class="p">[</span><span class="mi">2</span><span class="p">]),(</span><span class="n">bbox</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span><span class="n">bbox</span><span class="p">[</span><span class="mi">3</span><span class="p">]),</span>
|
||
|
<span class="p">(</span><span class="n">bbox</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span> <span class="n">bbox</span><span class="p">[</span><span class="mi">3</span><span class="p">]),(</span><span class="n">bbox</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span><span class="n">bbox</span><span class="p">[</span><span class="mi">2</span><span class="p">]),</span>
|
||
|
<span class="p">(</span><span class="n">bbox</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span><span class="n">bbox</span><span class="p">[</span><span class="mi">2</span><span class="p">])])</span>
|
||
|
|
||
|
<span class="c1"># New obs request</span>
|
||
|
<span class="n">DataAccessLayer</span><span class="o">.</span><span class="n">changeEDEXHost</span><span class="p">(</span><span class="n">edexServer</span><span class="p">)</span>
|
||
|
<span class="n">request</span> <span class="o">=</span> <span class="n">DataAccessLayer</span><span class="o">.</span><span class="n">newDataRequest</span><span class="p">(</span><span class="s2">"obs"</span><span class="p">,</span> <span class="n">envelope</span><span class="o">=</span><span class="n">envelope</span><span class="p">)</span>
|
||
|
<span class="n">availableProducts</span> <span class="o">=</span> <span class="n">DataAccessLayer</span><span class="o">.</span><span class="n">getAvailableParameters</span><span class="p">(</span><span class="n">request</span><span class="p">)</span>
|
||
|
<span class="n">single_value_params</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"timeObs"</span><span class="p">,</span> <span class="s2">"stationName"</span><span class="p">,</span> <span class="s2">"longitude"</span><span class="p">,</span> <span class="s2">"latitude"</span><span class="p">,</span>
|
||
|
<span class="s2">"temperature"</span><span class="p">,</span> <span class="s2">"dewpoint"</span><span class="p">,</span> <span class="s2">"windDir"</span><span class="p">,</span>
|
||
|
<span class="s2">"windSpeed"</span><span class="p">,</span> <span class="s2">"seaLevelPress"</span><span class="p">]</span>
|
||
|
<span class="n">multi_value_params</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"presWeather"</span><span class="p">,</span> <span class="s2">"skyCover"</span><span class="p">,</span> <span class="s2">"skyLayerBase"</span><span class="p">]</span>
|
||
|
<span class="n">params</span> <span class="o">=</span> <span class="n">single_value_params</span> <span class="o">+</span> <span class="n">multi_value_params</span>
|
||
|
<span class="n">request</span><span class="o">.</span><span class="n">setParameters</span><span class="p">(</span><span class="o">*</span><span class="p">(</span><span class="n">params</span><span class="p">))</span>
|
||
|
|
||
|
<span class="c1"># Time range</span>
|
||
|
<span class="n">lastHourDateTime</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">utcnow</span><span class="p">()</span> <span class="o">-</span> <span class="n">timedelta</span><span class="p">(</span><span class="n">minutes</span> <span class="o">=</span> <span class="mi">60</span><span class="p">)</span>
|
||
|
<span class="n">start</span> <span class="o">=</span> <span class="n">lastHourDateTime</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s1">'%Y-%m-</span><span class="si">%d</span><span class="s1"> %H:%M:%S'</span><span class="p">)</span>
|
||
|
<span class="n">end</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">utcnow</span><span class="p">()</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s1">'%Y-%m-</span><span class="si">%d</span><span class="s1"> %H:%M:%S'</span><span class="p">)</span>
|
||
|
|
||
|
<span class="n">beginRange</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">strptime</span><span class="p">(</span> <span class="n">start</span> <span class="p">,</span> <span class="s2">"%Y-%m-</span><span class="si">%d</span><span class="s2"> %H:%M:%S"</span><span class="p">)</span>
|
||
|
<span class="n">endRange</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">strptime</span><span class="p">(</span> <span class="n">end</span> <span class="p">,</span> <span class="s2">"%Y-%m-</span><span class="si">%d</span><span class="s2"> %H:%M:%S"</span><span class="p">)</span>
|
||
|
<span class="n">timerange</span> <span class="o">=</span> <span class="n">TimeRange</span><span class="p">(</span><span class="n">beginRange</span><span class="p">,</span> <span class="n">endRange</span><span class="p">)</span>
|
||
|
<span class="c1"># Get response</span>
|
||
|
<span class="n">response</span> <span class="o">=</span> <span class="n">DataAccessLayer</span><span class="o">.</span><span class="n">getGeometryData</span><span class="p">(</span><span class="n">request</span><span class="p">,</span><span class="n">timerange</span><span class="p">)</span>
|
||
|
<span class="c1"># function getMetarObs was added in python-awips 18.1.4</span>
|
||
|
<span class="n">obs</span> <span class="o">=</span> <span class="n">DataAccessLayer</span><span class="o">.</span><span class="n">getMetarObs</span><span class="p">(</span><span class="n">response</span><span class="p">)</span>
|
||
|
<span class="nb">print</span><span class="p">(</span><span class="s2">"Found "</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">response</span><span class="p">))</span> <span class="o">+</span> <span class="s2">" records"</span><span class="p">)</span>
|
||
|
<span class="nb">print</span><span class="p">(</span><span class="s2">"Using "</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">obs</span><span class="p">[</span><span class="s1">'temperature'</span><span class="p">]))</span> <span class="o">+</span> <span class="s2">" temperature records"</span><span class="p">)</span>
|
||
|
</pre></div>
|
||
|
</div>
|
||
|
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">Found</span> <span class="mi">3468</span> <span class="n">records</span>
|
||
|
<span class="n">Using</span> <span class="mi">152</span> <span class="n">temperature</span> <span class="n">records</span>
|
||
|
</pre></div>
|
||
|
</div>
|
||
|
<p>Next grab the simple variables out of the data we have (attaching
|
||
|
correct units), and put them into a dictionary that we will hand the
|
||
|
plotting function later:</p>
|
||
|
<ul class="simple">
|
||
|
<li><p>Get wind components from speed and direction</p></li>
|
||
|
<li><p>Convert cloud fraction values to integer codes [0 - 8]</p></li>
|
||
|
<li><p>Map METAR weather codes to WMO codes for weather symbols</p></li>
|
||
|
</ul>
|
||
|
<div class="highlight-ipython3 notranslate"><div class="highlight"><pre><span></span><span class="n">data</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">()</span>
|
||
|
<span class="n">data</span><span class="p">[</span><span class="s1">'stid'</span><span class="p">]</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">obs</span><span class="p">[</span><span class="s1">'stationName'</span><span class="p">])</span>
|
||
|
<span class="n">data</span><span class="p">[</span><span class="s1">'latitude'</span><span class="p">]</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">obs</span><span class="p">[</span><span class="s1">'latitude'</span><span class="p">])</span>
|
||
|
<span class="n">data</span><span class="p">[</span><span class="s1">'longitude'</span><span class="p">]</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">obs</span><span class="p">[</span><span class="s1">'longitude'</span><span class="p">])</span>
|
||
|
<span class="n">tmp</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">obs</span><span class="p">[</span><span class="s1">'temperature'</span><span class="p">],</span> <span class="n">dtype</span><span class="o">=</span><span class="nb">float</span><span class="p">)</span>
|
||
|
<span class="n">dpt</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">obs</span><span class="p">[</span><span class="s1">'dewpoint'</span><span class="p">],</span> <span class="n">dtype</span><span class="o">=</span><span class="nb">float</span><span class="p">)</span>
|
||
|
|
||
|
<span class="c1"># Suppress nan masking warnings</span>
|
||
|
<span class="n">warnings</span><span class="o">.</span><span class="n">filterwarnings</span><span class="p">(</span><span class="s2">"ignore"</span><span class="p">,</span><span class="n">category</span> <span class="o">=</span><span class="ne">RuntimeWarning</span><span class="p">)</span>
|
||
|
|
||
|
<span class="n">tmp</span><span class="p">[</span><span class="n">tmp</span> <span class="o">==</span> <span class="o">-</span><span class="mf">9999.0</span><span class="p">]</span> <span class="o">=</span> <span class="s1">'nan'</span>
|
||
|
<span class="n">dpt</span><span class="p">[</span><span class="n">dpt</span> <span class="o">==</span> <span class="o">-</span><span class="mf">9999.</span><span class="p">]</span> <span class="o">=</span> <span class="s1">'nan'</span>
|
||
|
<span class="n">data</span><span class="p">[</span><span class="s1">'air_temperature'</span><span class="p">]</span> <span class="o">=</span> <span class="n">tmp</span> <span class="o">*</span> <span class="n">units</span><span class="o">.</span><span class="n">degC</span>
|
||
|
<span class="n">data</span><span class="p">[</span><span class="s1">'dew_point_temperature'</span><span class="p">]</span> <span class="o">=</span> <span class="n">dpt</span> <span class="o">*</span> <span class="n">units</span><span class="o">.</span><span class="n">degC</span>
|
||
|
<span class="n">data</span><span class="p">[</span><span class="s1">'air_pressure_at_sea_level'</span><span class="p">]</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">obs</span><span class="p">[</span><span class="s1">'seaLevelPress'</span><span class="p">])</span><span class="o">*</span> <span class="n">units</span><span class="p">(</span><span class="s1">'mbar'</span><span class="p">)</span>
|
||
|
<span class="n">direction</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">obs</span><span class="p">[</span><span class="s1">'windDir'</span><span class="p">])</span>
|
||
|
<span class="n">direction</span><span class="p">[</span><span class="n">direction</span> <span class="o">==</span> <span class="o">-</span><span class="mf">9999.0</span><span class="p">]</span> <span class="o">=</span> <span class="s1">'nan'</span>
|
||
|
<span class="n">u</span><span class="p">,</span> <span class="n">v</span> <span class="o">=</span> <span class="n">wind_components</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">obs</span><span class="p">[</span><span class="s1">'windSpeed'</span><span class="p">])</span> <span class="o">*</span> <span class="n">units</span><span class="p">(</span><span class="s1">'knots'</span><span class="p">),</span>
|
||
|
<span class="n">direction</span> <span class="o">*</span> <span class="n">units</span><span class="o">.</span><span class="n">degree</span><span class="p">)</span>
|
||
|
<span class="n">data</span><span class="p">[</span><span class="s1">'eastward_wind'</span><span class="p">],</span> <span class="n">data</span><span class="p">[</span><span class="s1">'northward_wind'</span><span class="p">]</span> <span class="o">=</span> <span class="n">u</span><span class="p">,</span> <span class="n">v</span>
|
||
|
<span class="n">data</span><span class="p">[</span><span class="s1">'cloud_coverage'</span><span class="p">]</span> <span class="o">=</span> <span class="p">[</span><span class="nb">int</span><span class="p">(</span><span class="n">get_cloud_cover</span><span class="p">(</span><span class="n">x</span><span class="p">)</span><span class="o">*</span><span class="mi">8</span><span class="p">)</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">obs</span><span class="p">[</span><span class="s1">'skyCover'</span><span class="p">]]</span>
|
||
|
<span class="n">data</span><span class="p">[</span><span class="s1">'present_weather'</span><span class="p">]</span> <span class="o">=</span> <span class="n">obs</span><span class="p">[</span><span class="s1">'presWeather'</span><span class="p">]</span>
|
||
|
<span class="n">proj</span> <span class="o">=</span> <span class="n">ccrs</span><span class="o">.</span><span class="n">LambertConformal</span><span class="p">(</span><span class="n">central_longitude</span><span class="o">=</span><span class="n">state</span><span class="p">[</span><span class="s1">'lon'</span><span class="p">],</span> <span class="n">central_latitude</span><span class="o">=</span><span class="n">state</span><span class="p">[</span><span class="s1">'lat'</span><span class="p">],</span>
|
||
|
<span class="n">standard_parallels</span><span class="o">=</span><span class="p">[</span><span class="mi">35</span><span class="p">])</span>
|
||
|
<span class="n">custom_layout</span> <span class="o">=</span> <span class="n">StationPlotLayout</span><span class="p">()</span>
|
||
|
<span class="n">custom_layout</span><span class="o">.</span><span class="n">add_barb</span><span class="p">(</span><span class="s1">'eastward_wind'</span><span class="p">,</span> <span class="s1">'northward_wind'</span><span class="p">,</span> <span class="n">units</span><span class="o">=</span><span class="s1">'knots'</span><span class="p">)</span>
|
||
|
<span class="n">custom_layout</span><span class="o">.</span><span class="n">add_value</span><span class="p">(</span><span class="s1">'NW'</span><span class="p">,</span> <span class="s1">'air_temperature'</span><span class="p">,</span> <span class="n">fmt</span><span class="o">=</span><span class="s1">'.0f'</span><span class="p">,</span> <span class="n">units</span><span class="o">=</span><span class="s1">'degF'</span><span class="p">,</span> <span class="n">color</span><span class="o">=</span><span class="s1">'darkred'</span><span class="p">)</span>
|
||
|
<span class="n">custom_layout</span><span class="o">.</span><span class="n">add_value</span><span class="p">(</span><span class="s1">'SW'</span><span class="p">,</span> <span class="s1">'dew_point_temperature'</span><span class="p">,</span> <span class="n">fmt</span><span class="o">=</span><span class="s1">'.0f'</span><span class="p">,</span> <span class="n">units</span><span class="o">=</span><span class="s1">'degF'</span><span class="p">,</span> <span class="n">color</span><span class="o">=</span><span class="s1">'darkgreen'</span><span class="p">)</span>
|
||
|
<span class="n">custom_layout</span><span class="o">.</span><span class="n">add_value</span><span class="p">(</span><span class="s1">'E'</span><span class="p">,</span> <span class="s1">'precipitation'</span><span class="p">,</span> <span class="n">fmt</span><span class="o">=</span><span class="s1">'0.1f'</span><span class="p">,</span> <span class="n">units</span><span class="o">=</span><span class="s1">'inch'</span><span class="p">,</span> <span class="n">color</span><span class="o">=</span><span class="s1">'blue'</span><span class="p">)</span>
|
||
|
<span class="n">ax</span><span class="o">.</span><span class="n">set_title</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">response</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">getDataTime</span><span class="p">())</span> <span class="o">+</span> <span class="s2">" | METAR Surface Obs | "</span> <span class="o">+</span> <span class="n">edexServer</span><span class="p">)</span>
|
||
|
<span class="n">stationplot</span> <span class="o">=</span> <span class="n">StationPlot</span><span class="p">(</span><span class="n">ax</span><span class="p">,</span> <span class="n">data</span><span class="p">[</span><span class="s1">'longitude'</span><span class="p">],</span> <span class="n">data</span><span class="p">[</span><span class="s1">'latitude'</span><span class="p">],</span> <span class="n">clip_on</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
|
||
|
<span class="n">transform</span><span class="o">=</span><span class="n">ccrs</span><span class="o">.</span><span class="n">PlateCarree</span><span class="p">(),</span> <span class="n">fontsize</span><span class="o">=</span><span class="mi">10</span><span class="p">)</span>
|
||
|
<span class="n">custom_layout</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">stationplot</span><span class="p">,</span> <span class="n">data</span><span class="p">)</span>
|
||
|
<span class="n">fig</span>
|
||
|
</pre></div>
|
||
|
</div>
|
||
|
<img alt="../../_images/Regional_Surface_Obs_Plot_8_0.png" src="../../_images/Regional_Surface_Obs_Plot_8_0.png" />
|
||
|
</div>
|
||
|
<hr class="docutils" />
|
||
|
<div class="section" id="plot-synoptic-sfcobs">
|
||
|
<h2>Plot Synoptic (sfcobs)<a class="headerlink" href="#plot-synoptic-sfcobs" title="Permalink to this headline">¶</a></h2>
|
||
|
<div class="highlight-ipython3 notranslate"><div class="highlight"><pre><span></span><span class="c1"># New sfcobs/SYNOP request</span>
|
||
|
<span class="n">DataAccessLayer</span><span class="o">.</span><span class="n">changeEDEXHost</span><span class="p">(</span><span class="n">edexServer</span><span class="p">)</span>
|
||
|
<span class="n">request</span> <span class="o">=</span> <span class="n">DataAccessLayer</span><span class="o">.</span><span class="n">newDataRequest</span><span class="p">(</span><span class="s2">"sfcobs"</span><span class="p">,</span> <span class="n">envelope</span><span class="o">=</span><span class="n">envelope</span><span class="p">)</span>
|
||
|
<span class="n">availableProducts</span> <span class="o">=</span> <span class="n">DataAccessLayer</span><span class="o">.</span><span class="n">getAvailableParameters</span><span class="p">(</span><span class="n">request</span><span class="p">)</span>
|
||
|
<span class="c1"># (sfcobs) uses stationId, while (obs) uses stationName,</span>
|
||
|
<span class="c1"># the rest of these parameters are the same.</span>
|
||
|
<span class="n">single_value_params</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"timeObs"</span><span class="p">,</span> <span class="s2">"stationId"</span><span class="p">,</span> <span class="s2">"longitude"</span><span class="p">,</span> <span class="s2">"latitude"</span><span class="p">,</span>
|
||
|
<span class="s2">"temperature"</span><span class="p">,</span> <span class="s2">"dewpoint"</span><span class="p">,</span> <span class="s2">"windDir"</span><span class="p">,</span>
|
||
|
<span class="s2">"windSpeed"</span><span class="p">,</span> <span class="s2">"seaLevelPress"</span><span class="p">]</span>
|
||
|
<span class="n">multi_value_params</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"presWeather"</span><span class="p">,</span> <span class="s2">"skyCover"</span><span class="p">,</span> <span class="s2">"skyLayerBase"</span><span class="p">]</span>
|
||
|
<span class="n">pres_weather</span><span class="p">,</span> <span class="n">sky_cov</span><span class="p">,</span> <span class="n">sky_layer_base</span> <span class="o">=</span> <span class="p">[],[],[]</span>
|
||
|
<span class="n">params</span> <span class="o">=</span> <span class="n">single_value_params</span> <span class="o">+</span> <span class="n">multi_value_params</span>
|
||
|
<span class="n">request</span><span class="o">.</span><span class="n">setParameters</span><span class="p">(</span><span class="o">*</span><span class="p">(</span><span class="n">params</span><span class="p">))</span>
|
||
|
|
||
|
<span class="c1"># Time range</span>
|
||
|
<span class="n">lastHourDateTime</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">utcnow</span><span class="p">()</span> <span class="o">-</span> <span class="n">timedelta</span><span class="p">(</span><span class="n">minutes</span> <span class="o">=</span> <span class="mi">60</span><span class="p">)</span>
|
||
|
<span class="n">start</span> <span class="o">=</span> <span class="n">lastHourDateTime</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s1">'%Y-%m-</span><span class="si">%d</span><span class="s1"> %H:%M:%S'</span><span class="p">)</span>
|
||
|
<span class="n">end</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">utcnow</span><span class="p">()</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s1">'%Y-%m-</span><span class="si">%d</span><span class="s1"> %H:%M:%S'</span><span class="p">)</span>
|
||
|
|
||
|
<span class="n">beginRange</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">strptime</span><span class="p">(</span> <span class="n">start</span> <span class="p">,</span> <span class="s2">"%Y-%m-</span><span class="si">%d</span><span class="s2"> %H:%M:%S"</span><span class="p">)</span>
|
||
|
<span class="n">endRange</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">strptime</span><span class="p">(</span> <span class="n">end</span> <span class="p">,</span> <span class="s2">"%Y-%m-</span><span class="si">%d</span><span class="s2"> %H:%M:%S"</span><span class="p">)</span>
|
||
|
<span class="n">timerange</span> <span class="o">=</span> <span class="n">TimeRange</span><span class="p">(</span><span class="n">beginRange</span><span class="p">,</span> <span class="n">endRange</span><span class="p">)</span>
|
||
|
|
||
|
<span class="c1"># Get response</span>
|
||
|
<span class="n">response</span> <span class="o">=</span> <span class="n">DataAccessLayer</span><span class="o">.</span><span class="n">getGeometryData</span><span class="p">(</span><span class="n">request</span><span class="p">,</span><span class="n">timerange</span><span class="p">)</span>
|
||
|
<span class="c1"># function getSynopticObs was added in python-awips 18.1.4</span>
|
||
|
<span class="n">sfcobs</span> <span class="o">=</span> <span class="n">DataAccessLayer</span><span class="o">.</span><span class="n">getSynopticObs</span><span class="p">(</span><span class="n">response</span><span class="p">)</span>
|
||
|
<span class="nb">print</span><span class="p">(</span><span class="s2">"Found "</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">response</span><span class="p">))</span> <span class="o">+</span> <span class="s2">" records"</span><span class="p">)</span>
|
||
|
<span class="nb">print</span><span class="p">(</span><span class="s2">"Using "</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">sfcobs</span><span class="p">[</span><span class="s1">'temperature'</span><span class="p">]))</span> <span class="o">+</span> <span class="s2">" temperature records"</span><span class="p">)</span>
|
||
|
</pre></div>
|
||
|
</div>
|
||
|
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">Found</span> <span class="mi">260</span> <span class="n">records</span>
|
||
|
<span class="n">Using</span> <span class="mi">78</span> <span class="n">temperature</span> <span class="n">records</span>
|
||
|
</pre></div>
|
||
|
</div>
|
||
|
<div class="highlight-ipython3 notranslate"><div class="highlight"><pre><span></span><span class="n">data</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">()</span>
|
||
|
<span class="n">data</span><span class="p">[</span><span class="s1">'stid'</span><span class="p">]</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">sfcobs</span><span class="p">[</span><span class="s1">'stationId'</span><span class="p">])</span>
|
||
|
<span class="n">data</span><span class="p">[</span><span class="s1">'lat'</span><span class="p">]</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">sfcobs</span><span class="p">[</span><span class="s1">'latitude'</span><span class="p">])</span>
|
||
|
<span class="n">data</span><span class="p">[</span><span class="s1">'lon'</span><span class="p">]</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">sfcobs</span><span class="p">[</span><span class="s1">'longitude'</span><span class="p">])</span>
|
||
|
|
||
|
<span class="c1"># Synop/sfcobs temps are stored in kelvin (degC for METAR/obs)</span>
|
||
|
<span class="n">tmp</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">sfcobs</span><span class="p">[</span><span class="s1">'temperature'</span><span class="p">],</span> <span class="n">dtype</span><span class="o">=</span><span class="nb">float</span><span class="p">)</span>
|
||
|
<span class="n">dpt</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">sfcobs</span><span class="p">[</span><span class="s1">'dewpoint'</span><span class="p">],</span> <span class="n">dtype</span><span class="o">=</span><span class="nb">float</span><span class="p">)</span>
|
||
|
<span class="n">direction</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">sfcobs</span><span class="p">[</span><span class="s1">'windDir'</span><span class="p">])</span>
|
||
|
<span class="c1"># Account for missing values</span>
|
||
|
<span class="n">tmp</span><span class="p">[</span><span class="n">tmp</span> <span class="o">==</span> <span class="o">-</span><span class="mf">9999.0</span><span class="p">]</span> <span class="o">=</span> <span class="s1">'nan'</span>
|
||
|
<span class="n">dpt</span><span class="p">[</span><span class="n">dpt</span> <span class="o">==</span> <span class="o">-</span><span class="mf">9999.</span><span class="p">]</span> <span class="o">=</span> <span class="s1">'nan'</span>
|
||
|
<span class="n">direction</span><span class="p">[</span><span class="n">direction</span> <span class="o">==</span> <span class="o">-</span><span class="mf">9999.0</span><span class="p">]</span> <span class="o">=</span> <span class="s1">'nan'</span>
|
||
|
|
||
|
<span class="n">data</span><span class="p">[</span><span class="s1">'air_temperature'</span><span class="p">]</span> <span class="o">=</span> <span class="n">tmp</span> <span class="o">*</span> <span class="n">units</span><span class="o">.</span><span class="n">kelvin</span>
|
||
|
<span class="n">data</span><span class="p">[</span><span class="s1">'dew_point_temperature'</span><span class="p">]</span> <span class="o">=</span> <span class="n">dpt</span> <span class="o">*</span> <span class="n">units</span><span class="o">.</span><span class="n">kelvin</span>
|
||
|
<span class="n">data</span><span class="p">[</span><span class="s1">'air_pressure_at_sea_level'</span><span class="p">]</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">sfcobs</span><span class="p">[</span><span class="s1">'seaLevelPress'</span><span class="p">])</span><span class="o">*</span> <span class="n">units</span><span class="p">(</span><span class="s1">'mbar'</span><span class="p">)</span>
|
||
|
<span class="k">try</span><span class="p">:</span>
|
||
|
<span class="n">data</span><span class="p">[</span><span class="s1">'eastward_wind'</span><span class="p">],</span> <span class="n">data</span><span class="p">[</span><span class="s1">'northward_wind'</span><span class="p">]</span> <span class="o">=</span> <span class="n">wind_components</span><span class="p">(</span>
|
||
|
<span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">sfcobs</span><span class="p">[</span><span class="s1">'windSpeed'</span><span class="p">])</span> <span class="o">*</span> <span class="n">units</span><span class="p">(</span><span class="s1">'knots'</span><span class="p">),</span><span class="n">direction</span> <span class="o">*</span> <span class="n">units</span><span class="o">.</span><span class="n">degree</span><span class="p">)</span>
|
||
|
<span class="n">data</span><span class="p">[</span><span class="s1">'present_weather'</span><span class="p">]</span> <span class="o">=</span> <span class="n">sfcobs</span><span class="p">[</span><span class="s1">'presWeather'</span><span class="p">]</span>
|
||
|
<span class="k">except</span> <span class="ne">ValueError</span><span class="p">:</span>
|
||
|
<span class="k">pass</span>
|
||
|
|
||
|
<span class="n">fig_synop</span><span class="p">,</span> <span class="n">ax_synop</span> <span class="o">=</span> <span class="n">make_map</span><span class="p">(</span><span class="n">bbox</span><span class="o">=</span><span class="n">bbox</span><span class="p">)</span>
|
||
|
<span class="n">shape_feature</span> <span class="o">=</span> <span class="n">ShapelyFeature</span><span class="p">(</span><span class="n">states</span><span class="p">,</span><span class="n">ccrs</span><span class="o">.</span><span class="n">PlateCarree</span><span class="p">(),</span>
|
||
|
<span class="n">facecolor</span><span class="o">=</span><span class="s1">'none'</span><span class="p">,</span> <span class="n">linestyle</span><span class="o">=</span><span class="s2">"-"</span><span class="p">,</span><span class="n">edgecolor</span><span class="o">=</span><span class="s1">'#000000'</span><span class="p">,</span><span class="n">linewidth</span><span class="o">=</span><span class="mi">2</span><span class="p">)</span>
|
||
|
<span class="n">ax_synop</span><span class="o">.</span><span class="n">add_feature</span><span class="p">(</span><span class="n">shape_feature</span><span class="p">)</span>
|
||
|
|
||
|
<span class="n">custom_layout</span> <span class="o">=</span> <span class="n">StationPlotLayout</span><span class="p">()</span>
|
||
|
<span class="n">custom_layout</span><span class="o">.</span><span class="n">add_barb</span><span class="p">(</span><span class="s1">'eastward_wind'</span><span class="p">,</span> <span class="s1">'northward_wind'</span><span class="p">,</span> <span class="n">units</span><span class="o">=</span><span class="s1">'knots'</span><span class="p">)</span>
|
||
|
<span class="n">custom_layout</span><span class="o">.</span><span class="n">add_value</span><span class="p">(</span><span class="s1">'NW'</span><span class="p">,</span> <span class="s1">'air_temperature'</span><span class="p">,</span> <span class="n">fmt</span><span class="o">=</span><span class="s1">'.0f'</span><span class="p">,</span> <span class="n">units</span><span class="o">=</span><span class="s1">'degF'</span><span class="p">,</span> <span class="n">color</span><span class="o">=</span><span class="s1">'darkred'</span><span class="p">)</span>
|
||
|
<span class="n">custom_layout</span><span class="o">.</span><span class="n">add_value</span><span class="p">(</span><span class="s1">'SW'</span><span class="p">,</span> <span class="s1">'dew_point_temperature'</span><span class="p">,</span> <span class="n">fmt</span><span class="o">=</span><span class="s1">'.0f'</span><span class="p">,</span> <span class="n">units</span><span class="o">=</span><span class="s1">'degF'</span><span class="p">,</span> <span class="n">color</span><span class="o">=</span><span class="s1">'darkgreen'</span><span class="p">)</span>
|
||
|
<span class="n">custom_layout</span><span class="o">.</span><span class="n">add_value</span><span class="p">(</span><span class="s1">'E'</span><span class="p">,</span> <span class="s1">'precipitation'</span><span class="p">,</span> <span class="n">fmt</span><span class="o">=</span><span class="s1">'0.1f'</span><span class="p">,</span> <span class="n">units</span><span class="o">=</span><span class="s1">'inch'</span><span class="p">,</span> <span class="n">color</span><span class="o">=</span><span class="s1">'blue'</span><span class="p">)</span>
|
||
|
<span class="n">ax_synop</span><span class="o">.</span><span class="n">set_title</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">response</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">getDataTime</span><span class="p">())</span> <span class="o">+</span> <span class="s2">" | SYNOP Surface Obs | "</span> <span class="o">+</span> <span class="n">edexServer</span><span class="p">)</span>
|
||
|
<span class="n">stationplot</span> <span class="o">=</span> <span class="n">StationPlot</span><span class="p">(</span><span class="n">ax_synop</span><span class="p">,</span> <span class="n">data</span><span class="p">[</span><span class="s1">'lon'</span><span class="p">],</span> <span class="n">data</span><span class="p">[</span><span class="s1">'lat'</span><span class="p">],</span> <span class="n">clip_on</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
|
||
|
<span class="n">transform</span><span class="o">=</span><span class="n">ccrs</span><span class="o">.</span><span class="n">PlateCarree</span><span class="p">(),</span> <span class="n">fontsize</span><span class="o">=</span><span class="mi">10</span><span class="p">)</span>
|
||
|
<span class="n">custom_layout</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">stationplot</span><span class="p">,</span> <span class="n">data</span><span class="p">)</span>
|
||
|
</pre></div>
|
||
|
</div>
|
||
|
<img alt="../../_images/Regional_Surface_Obs_Plot_11_0.png" src="../../_images/Regional_Surface_Obs_Plot_11_0.png" />
|
||
|
</div>
|
||
|
<hr class="docutils" />
|
||
|
<div class="section" id="plot-both-metar-and-synop">
|
||
|
<h2>Plot both METAR and SYNOP<a class="headerlink" href="#plot-both-metar-and-synop" title="Permalink to this headline">¶</a></h2>
|
||
|
<div class="highlight-ipython3 notranslate"><div class="highlight"><pre><span></span><span class="n">custom_layout</span> <span class="o">=</span> <span class="n">StationPlotLayout</span><span class="p">()</span>
|
||
|
<span class="n">custom_layout</span><span class="o">.</span><span class="n">add_barb</span><span class="p">(</span><span class="s1">'eastward_wind'</span><span class="p">,</span> <span class="s1">'northward_wind'</span><span class="p">,</span> <span class="n">units</span><span class="o">=</span><span class="s1">'knots'</span><span class="p">)</span>
|
||
|
<span class="n">custom_layout</span><span class="o">.</span><span class="n">add_value</span><span class="p">(</span><span class="s1">'NW'</span><span class="p">,</span> <span class="s1">'air_temperature'</span><span class="p">,</span> <span class="n">fmt</span><span class="o">=</span><span class="s1">'.0f'</span><span class="p">,</span> <span class="n">units</span><span class="o">=</span><span class="s1">'degF'</span><span class="p">,</span> <span class="n">color</span><span class="o">=</span><span class="s1">'darkred'</span><span class="p">)</span>
|
||
|
<span class="n">custom_layout</span><span class="o">.</span><span class="n">add_value</span><span class="p">(</span><span class="s1">'SW'</span><span class="p">,</span> <span class="s1">'dew_point_temperature'</span><span class="p">,</span> <span class="n">fmt</span><span class="o">=</span><span class="s1">'.0f'</span><span class="p">,</span> <span class="n">units</span><span class="o">=</span><span class="s1">'degF'</span><span class="p">,</span> <span class="n">color</span><span class="o">=</span><span class="s1">'darkgreen'</span><span class="p">)</span>
|
||
|
<span class="n">custom_layout</span><span class="o">.</span><span class="n">add_value</span><span class="p">(</span><span class="s1">'E'</span><span class="p">,</span> <span class="s1">'precipitation'</span><span class="p">,</span> <span class="n">fmt</span><span class="o">=</span><span class="s1">'0.1f'</span><span class="p">,</span> <span class="n">units</span><span class="o">=</span><span class="s1">'inch'</span><span class="p">,</span> <span class="n">color</span><span class="o">=</span><span class="s1">'blue'</span><span class="p">)</span>
|
||
|
<span class="n">ax</span><span class="o">.</span><span class="n">set_title</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">response</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">getDataTime</span><span class="p">())</span> <span class="o">+</span> <span class="s2">" | METAR/SYNOP Surface Obs | "</span> <span class="o">+</span> <span class="n">edexServer</span><span class="p">)</span>
|
||
|
<span class="n">stationplot</span> <span class="o">=</span> <span class="n">StationPlot</span><span class="p">(</span><span class="n">ax</span><span class="p">,</span> <span class="n">data</span><span class="p">[</span><span class="s1">'lon'</span><span class="p">],</span> <span class="n">data</span><span class="p">[</span><span class="s1">'lat'</span><span class="p">],</span> <span class="n">clip_on</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
|
||
|
<span class="n">transform</span><span class="o">=</span><span class="n">ccrs</span><span class="o">.</span><span class="n">PlateCarree</span><span class="p">(),</span> <span class="n">fontsize</span><span class="o">=</span><span class="mi">10</span><span class="p">)</span>
|
||
|
<span class="n">custom_layout</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">stationplot</span><span class="p">,</span> <span class="n">data</span><span class="p">)</span>
|
||
|
<span class="n">fig</span>
|
||
|
</pre></div>
|
||
|
</div>
|
||
|
<img alt="../../_images/Regional_Surface_Obs_Plot_13_0.png" src="../../_images/Regional_Surface_Obs_Plot_13_0.png" />
|
||
|
</div>
|
||
|
</div>
|
||
|
|
||
|
|
||
|
</div>
|
||
|
|
||
|
</div>
|
||
|
<footer>
|
||
|
|
||
|
<div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
|
||
|
|
||
|
<a href="Satellite_Imagery.html" class="btn btn-neutral float-right" title="Satellite Imagery" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right"></span></a>
|
||
|
|
||
|
|
||
|
<a href="Precip_Accumulation-Region_Of_Interest.html" class="btn btn-neutral float-left" title="Precip Accumulation-Region Of Interest" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left"></span> Previous</a>
|
||
|
|
||
|
</div>
|
||
|
|
||
|
|
||
|
<hr/>
|
||
|
|
||
|
<div role="contentinfo">
|
||
|
<p>
|
||
|
|
||
|
© Copyright 2018, Unidata
|
||
|
|
||
|
</p>
|
||
|
</div>
|
||
|
|
||
|
|
||
|
|
||
|
Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a
|
||
|
|
||
|
<a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a>
|
||
|
|
||
|
provided by <a href="https://readthedocs.org">Read the Docs</a>.
|
||
|
|
||
|
</footer>
|
||
|
|
||
|
</div>
|
||
|
</div>
|
||
|
|
||
|
</section>
|
||
|
|
||
|
</div>
|
||
|
|
||
|
|
||
|
<script type="text/javascript">
|
||
|
jQuery(function () {
|
||
|
SphinxRtdTheme.Navigation.enable(true);
|
||
|
});
|
||
|
</script>
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
</body>
|
||
|
</html>
|