mirror of
https://github.com/Unidata/python-awips.git
synced 2025-02-24 06:57:56 -05:00
722 lines
No EOL
81 KiB
HTML
722 lines
No EOL
81 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" />
|
||
|
||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||
<title>Regional Surface Obs Plot — python-awips documentation</title>
|
||
<link rel="stylesheet" type="text/css" href="../../_static/pygments.css?v=03e43079" />
|
||
<link rel="stylesheet" type="text/css" href="../../_static/css/theme.css?v=e59714d7" />
|
||
|
||
|
||
<script src="../../_static/jquery.js?v=5d32c60e"></script>
|
||
<script src="../../_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
|
||
<script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js?v=b3ba4146"></script>
|
||
<script src="../../_static/doctools.js?v=888ff710"></script>
|
||
<script src="../../_static/sphinx_highlight.js?v=4825356b"></script>
|
||
<script 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">
|
||
python-awips
|
||
</a>
|
||
<div role="search">
|
||
<form id="rtd-search-form" class="wy-form" action="../../search.html" method="get">
|
||
<input type="text" name="q" placeholder="Search docs" aria-label="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="Navigation menu">
|
||
<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="Colored_Surface_Temperature_Plot.html">Colored Surface Temperature Plot</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="Colorized_Grid_Data.html">Colorized Grid Data</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_CIRA_Product_Writer.html">GOES CIRA Product Writer</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="#objectives">Objectives</a><ul>
|
||
<li class="toctree-l4"><a class="reference internal" href="#table-of-contents">Table of Contents</a></li>
|
||
<li class="toctree-l4"><a class="reference internal" href="#imports">Imports</a></li>
|
||
<li class="toctree-l4"><a class="reference internal" href="#function-get-cloud-cover">Function: get_cloud_cover()</a></li>
|
||
<li class="toctree-l4"><a class="reference internal" href="#function-make-map">Function: make_map()</a></li>
|
||
<li class="toctree-l4"><a class="reference internal" href="#function-extract-plotting-data">Function: extract_plotting_data()</a></li>
|
||
<li class="toctree-l4"><a class="reference internal" href="#function-plot-data">Function: plot_data()</a></li>
|
||
<li class="toctree-l4"><a class="reference internal" href="#initial-setup">Initial Setup</a></li>
|
||
<li class="toctree-l4"><a class="reference internal" href="#get-the-data">Get the Data!</a></li>
|
||
<li class="toctree-l4"><a class="reference internal" href="#plot-the-data">Plot the Data</a></li>
|
||
<li class="toctree-l4"><a class="reference internal" href="#see-also">See Also</a></li>
|
||
</ul>
|
||
</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_Warning_and_Advisory_Plotting.html">Watch Warning and Advisory Plotting</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="Mobile navigation menu" >
|
||
<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="Page navigation">
|
||
<ul class="wy-breadcrumbs">
|
||
<li><a href="../../index.html" class="icon icon-home" aria-label="Home"></a></li>
|
||
<li class="breadcrumb-item"><a href="../index.html">Data Plotting Examples</a></li>
|
||
<li class="breadcrumb-item active">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">
|
||
|
||
<section id="regional-surface-obs-plot">
|
||
<h1>Regional Surface Obs Plot<a class="headerlink" href="#regional-surface-obs-plot" title="Permalink to this heading"></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>
|
||
Python-AWIPS Tutorial Notebook</p>
|
||
<hr class="docutils" />
|
||
<section id="objectives">
|
||
<h2>Objectives<a class="headerlink" href="#objectives" title="Permalink to this heading"></a></h2>
|
||
<ul class="simple">
|
||
<li><p>Use python-awips to connect to an edex server</p></li>
|
||
<li><p>Create a plot for a regional area of the United States (Florida)</p></li>
|
||
<li><p>Define and filter data request for METAR and Synoptic surface obs</p></li>
|
||
<li><p>Use the maps database to request and draw state boundaries (no use of
|
||
Cartopy.Feature in this example)</p></li>
|
||
<li><p>Stylize and plot surface data using Metpy</p></li>
|
||
</ul>
|
||
<hr class="docutils" />
|
||
<section id="table-of-contents">
|
||
<h3>Table of Contents<a class="headerlink" href="#table-of-contents" title="Permalink to this heading"></a></h3>
|
||
<div class="line-block">
|
||
<div class="line"><a class="reference external" href="https://unidata.github.io/python-awips/examples/generated/Regional_Surface_Obs_Plot.html#imports">1
|
||
Imports</a></div>
|
||
<div class="line"><a class="reference external" href="https://unidata.github.io/python-awips/examples/generated/Regional_Surface_Obs_Plot.html#function-get-cloud-cover">2 Function:
|
||
get_cloud_cover()</a></div>
|
||
<div class="line"><a class="reference external" href="https://unidata.github.io/python-awips/examples/generated/Regional_Surface_Obs_Plot.html#function-make-map">3 Function:
|
||
make_map()</a></div>
|
||
<div class="line"><a class="reference external" href="https://unidata.github.io/python-awips/examples/generated/Regional_Surface_Obs_Plot.html#function-extract-plotting-data">4 Function:
|
||
extract_plotting_data()</a></div>
|
||
<div class="line"><a class="reference external" href="https://unidata.github.io/python-awips/examples/generated/Regional_Surface_Obs_Plot.html#function-plot-data">5 Function:
|
||
plot_data()</a></div>
|
||
<div class="line"><a class="reference external" href="https://unidata.github.io/python-awips/examples/generated/Regional_Surface_Obs_Plot.html#initial-setup">6 Initial
|
||
Setup</a></div>
|
||
<div class="line"> <a class="reference external" href="https://unidata.github.io/python-awips/examples/generated/Regional_Surface_Obs_Plot.html#initial-edex-connection">6.1 Initial EDEX
|
||
Connection</a></div>
|
||
<div class="line"> <a class="reference external" href="https://unidata.github.io/python-awips/examples/generated/Regional_Surface_Obs_Plot.html#maps-request-and-response">6.2 Maps Request and
|
||
Response</a></div>
|
||
<div class="line"> <a class="reference external" href="https://unidata.github.io/python-awips/examples/generated/Regional_Surface_Obs_Plot.html#define-geographic-filter">6.3 Define Geographic
|
||
Filter</a></div>
|
||
<div class="line"> <a class="reference external" href="https://unidata.github.io/python-awips/examples/generated/Regional_Surface_Obs_Plot.html#define-time-filter">6.4 Define Time
|
||
Filter</a></div>
|
||
<div class="line"> <a class="reference external" href="https://unidata.github.io/python-awips/examples/generated/Regional_Surface_Obs_Plot.html#define-common-parameters-for-data-requests">6.5 Define Common Parameters for Data
|
||
Requests</a></div>
|
||
<div class="line"> <a class="reference external" href="https://unidata.github.io/python-awips/examples/generated/Regional_Surface_Obs_Plot.html#define-metar-request">6.6 Define METAR
|
||
Request</a></div>
|
||
<div class="line"> <a class="reference external" href="https://unidata.github.io/python-awips/examples/generated/Regional_Surface_Obs_Plot.html#define-synoptic-request">6.7 Define Synoptic
|
||
Request</a></div>
|
||
<div class="line"><a class="reference external" href="https://unidata.github.io/python-awips/examples/generated/Regional_Surface_Obs_Plot.html#get-the-data">7 Get the
|
||
Data!</a></div>
|
||
<div class="line"> <a class="reference external" href="https://unidata.github.io/python-awips/examples/generated/Regional_Surface_Obs_Plot.html#get-the-edex-responses">7.1 Get the EDEX
|
||
Responses</a></div>
|
||
<div class="line"> <a class="reference external" href="https://unidata.github.io/python-awips/examples/generated/Regional_Surface_Obs_Plot.html#extract-plotting-data">7.2 Extract Plotting
|
||
Data</a></div>
|
||
<div class="line"><a class="reference external" href="https://unidata.github.io/python-awips/examples/generated/Regional_Surface_Obs_Plot.html#plot-the-data">8 Plot the
|
||
Data</a></div>
|
||
<div class="line"> <a class="reference external" href="https://unidata.github.io/python-awips/examples/generated/Regional_Surface_Obs_Plot.html#draw-the-region">8.1 Draw the
|
||
Region</a></div>
|
||
<div class="line"> <a class="reference external" href="https://unidata.github.io/python-awips/examples/generated/Regional_Surface_Obs_Plot.html#plot-metar-data">8.2 Plot METAR
|
||
Data</a></div>
|
||
<div class="line"> <a class="reference external" href="https://unidata.github.io/python-awips/examples/generated/Regional_Surface_Obs_Plot.html#plot-synoptic-data">8.3 Plot Synoptic
|
||
Data</a></div>
|
||
<div class="line"> <a class="reference external" href="https://unidata.github.io/python-awips/examples/generated/Regional_Surface_Obs_Plot.html#plot-both-metar-and-synoptic-data">8.4 Plot both METAR and Synoptic
|
||
Data</a></div>
|
||
<div class="line"><a class="reference external" href="https://unidata.github.io/python-awips/examples/generated/Regional_Surface_Obs_Plot.html#see-also">9 See
|
||
Also</a></div>
|
||
<div class="line"> <a class="reference external" href="https://unidata.github.io/python-awips/examples/generated/Regional_Surface_Obs_Plot.html#related-notebooks">9.1 Related
|
||
Notebooks</a></div>
|
||
<div class="line"> <a class="reference external" href="https://unidata.github.io/python-awips/examples/generated/Regional_Surface_Obs_Plot.html#additional-documentation">9.2 Additional
|
||
Documentation</a></div>
|
||
</div>
|
||
</section>
|
||
<section id="imports">
|
||
<h3>Imports<a class="headerlink" href="#imports" title="Permalink to this heading"></a></h3>
|
||
<p>The imports below are used throughout the notebook. Note the first two
|
||
imports are coming directly from python-awips and allow us to connect to
|
||
an EDEX server, and define a timrange used for filtering the data. The
|
||
subsequent imports are for data manipulation and visualization.</p>
|
||
<div class="highlight-ipython3 notranslate"><div class="highlight"><pre><span></span><span class="kn">from</span><span class="w"> </span><span class="nn">awips.dataaccess</span><span class="w"> </span><span class="kn">import</span> <span class="n">DataAccessLayer</span>
|
||
<span class="kn">from</span><span class="w"> </span><span class="nn">dynamicserialize.dstypes.com.raytheon.uf.common.time</span><span class="w"> </span><span class="kn">import</span> <span class="n">TimeRange</span>
|
||
<span class="kn">from</span><span class="w"> </span><span class="nn">datetime</span><span class="w"> </span><span class="kn">import</span> <span class="n">datetime</span><span class="p">,</span> <span class="n">timedelta</span><span class="p">,</span> <span class="n">UTC</span>
|
||
<span class="kn">import</span><span class="w"> </span><span class="nn">numpy</span><span class="w"> </span><span class="k">as</span><span class="w"> </span><span class="nn">np</span>
|
||
<span class="kn">import</span><span class="w"> </span><span class="nn">cartopy.crs</span><span class="w"> </span><span class="k">as</span><span class="w"> </span><span class="nn">ccrs</span>
|
||
<span class="kn">from</span><span class="w"> </span><span class="nn">cartopy.mpl.gridliner</span><span class="w"> </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="w"> </span><span class="nn">cartopy.feature</span><span class="w"> </span><span class="kn">import</span> <span class="n">ShapelyFeature</span>
|
||
<span class="kn">from</span><span class="w"> </span><span class="nn">shapely.geometry</span><span class="w"> </span><span class="kn">import</span> <span class="n">Polygon</span>
|
||
<span class="kn">import</span><span class="w"> </span><span class="nn">matplotlib.pyplot</span><span class="w"> </span><span class="k">as</span><span class="w"> </span><span class="nn">plt</span>
|
||
<span class="kn">from</span><span class="w"> </span><span class="nn">metpy.units</span><span class="w"> </span><span class="kn">import</span> <span class="n">units</span>
|
||
<span class="kn">from</span><span class="w"> </span><span class="nn">metpy.calc</span><span class="w"> </span><span class="kn">import</span> <span class="n">wind_components</span>
|
||
<span class="kn">from</span><span class="w"> </span><span class="nn">metpy.plots</span><span class="w"> </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="p">,</span> <span class="n">sky_cover</span>
|
||
<span class="kn">import</span><span class="w"> </span><span class="nn">warnings</span>
|
||
</pre></div>
|
||
</div>
|
||
<p><a class="reference external" href="https://unidata.github.io/python-awips/examples/generated/Regional_Surface_Obs_Plot.html">Top</a></p>
|
||
</section>
|
||
<hr class="docutils" />
|
||
<section id="function-get-cloud-cover">
|
||
<h3>Function: get_cloud_cover()<a class="headerlink" href="#function-get-cloud-cover" title="Permalink to this heading"></a></h3>
|
||
<p>Returns the cloud coverage values as integer codes (0 through 8).</p>
|
||
<div class="highlight-ipython3 notranslate"><div class="highlight"><pre><span></span><span class="k">def</span><span class="w"> </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="mi">8</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="mi">6</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="mi">4</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="mi">2</span>
|
||
<span class="k">else</span><span class="p">:</span>
|
||
<span class="k">return</span> <span class="mi">0</span>
|
||
</pre></div>
|
||
</div>
|
||
<p><a class="reference external" href="https://unidata.github.io/python-awips/examples/generated/Regional_Surface_Obs_Plot.html">Top</a></p>
|
||
</section>
|
||
<hr class="docutils" />
|
||
<section id="function-make-map">
|
||
<h3>Function: make_map()<a class="headerlink" href="#function-make-map" title="Permalink to this heading"></a></h3>
|
||
<p>In order to plot more than one image, it’s easiest to define common
|
||
logic in a function. Here, a new function called <strong>make_map</strong> is
|
||
defined. This function uses the <a class="reference external" href="https://matplotlib.org/3.3.3/api/_as_gen/matplotlib.pyplot.html">matplotlib.pyplot package
|
||
(plt)</a>
|
||
to create a figure and axis. The geographic extent is set and lat/lon
|
||
gridlines are added for context.</p>
|
||
<div class="highlight-ipython3 notranslate"><div class="highlight"><pre><span></span><span class="k">def</span><span class="w"> </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>
|
||
</pre></div>
|
||
</div>
|
||
<p><a class="reference external" href="https://unidata.github.io/python-awips/examples/generated/Regional_Surface_Obs_Plot.html">Top</a></p>
|
||
</section>
|
||
<hr class="docutils" />
|
||
<section id="function-extract-plotting-data">
|
||
<h3>Function: extract_plotting_data()<a class="headerlink" href="#function-extract-plotting-data" title="Permalink to this heading"></a></h3>
|
||
<p>Grab the simple variables out of the response 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 coverage values to integer codes [0 - 8]</p></li>
|
||
<li><p>Assign temperature, dewpoint, and sea level pressure the the correct
|
||
units</p></li>
|
||
<li><p>Account for missing values (by using <code class="docutils literal notranslate"><span class="pre">nan</span></code>)</p></li>
|
||
</ul>
|
||
<div class="highlight-ipython3 notranslate"><div class="highlight"><pre><span></span><span class="k">def</span><span class="w"> </span><span class="nf">extract_plotting_data</span><span class="p">(</span><span class="n">arr</span><span class="p">,</span> <span class="n">datatype</span><span class="p">):</span>
|
||
<span class="w"> </span><span class="sd">"""</span>
|
||
<span class="sd"> Extract all necessary data for plotting for either</span>
|
||
<span class="sd"> datatype: 'obs' or 'sfcobs'</span>
|
||
<span class="sd"> """</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">'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">arr</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">arr</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">arr</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">arr</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">arr</span><span class="p">[</span><span class="s1">'windDir'</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="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_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">arr</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">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">arr</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">'present_weather'</span><span class="p">]</span> <span class="o">=</span> <span class="n">arr</span><span class="p">[</span><span class="s1">'presWeather'</span><span class="p">]</span>
|
||
|
||
|
||
<span class="c1"># metars uses 'stationName' for its identifier and temps are in deg C</span>
|
||
<span class="c1"># metars also has sky coverage</span>
|
||
<span class="k">if</span> <span class="n">datatype</span> <span class="o">==</span> <span class="s2">"obs"</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">arr</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">'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">'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="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">arr</span><span class="p">[</span><span class="s1">'skyCover'</span><span class="p">]]</span>
|
||
|
||
<span class="c1"># synoptic obs uses 'stationId', and temps are in Kelvin</span>
|
||
<span class="k">elif</span> <span class="n">datatype</span> <span class="o">==</span> <span class="s2">"sfcobs"</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">arr</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">'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="k">return</span> <span class="n">data</span>
|
||
</pre></div>
|
||
</div>
|
||
<p><a class="reference external" href="https://unidata.github.io/python-awips/examples/generated/Regional_Surface_Obs_Plot.html">Top</a></p>
|
||
</section>
|
||
<hr class="docutils" />
|
||
<section id="function-plot-data">
|
||
<h3>Function: plot_data()<a class="headerlink" href="#function-plot-data" title="Permalink to this heading"></a></h3>
|
||
<p>This function makes use of Metpy.StationPlotLayout and Metpy.StationPlot
|
||
to add all surface observation data to our plot. The logic is very
|
||
similar for both METAR and Synoptic data, so a <code class="docutils literal notranslate"><span class="pre">datatype</span></code> argument is
|
||
used to distinguish between which data is being drawn, and then draws
|
||
the appropriate features.</p>
|
||
<p>This function plots: - Wind barbs - Air temperature - Dew point
|
||
temperature - Precipitation - Cloud coverage (for METARS)</p>
|
||
<div class="highlight-ipython3 notranslate"><div class="highlight"><pre><span></span><span class="k">def</span><span class="w"> </span><span class="nf">plot_data</span><span class="p">(</span><span class="n">data</span><span class="p">,</span> <span class="n">title</span><span class="p">,</span> <span class="n">axes</span><span class="p">,</span> <span class="n">datatype</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="c1"># metars has sky coverage</span>
|
||
<span class="k">if</span> <span class="n">datatype</span> <span class="o">==</span> <span class="s1">'obs'</span><span class="p">:</span>
|
||
<span class="n">custom_layout</span><span class="o">.</span><span class="n">add_symbol</span><span class="p">(</span><span class="s1">'C'</span><span class="p">,</span> <span class="s1">'cloud_coverage'</span><span class="p">,</span> <span class="n">sky_cover</span><span class="p">)</span>
|
||
<span class="n">axes</span><span class="o">.</span><span class="n">set_title</span><span class="p">(</span><span class="n">title</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">axes</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>
|
||
</pre></div>
|
||
</div>
|
||
<p><a class="reference external" href="https://unidata.github.io/python-awips/examples/generated/Regional_Surface_Obs_Plot.html">Top</a></p>
|
||
</section>
|
||
<hr class="docutils" />
|
||
<section id="initial-setup">
|
||
<h3>Initial Setup<a class="headerlink" href="#initial-setup" title="Permalink to this heading"></a></h3>
|
||
<p>Connect to an EDEX server and define several <a class="reference external" href="http://unidata.github.io/python-awips/api/IDataRequest.html">new data request
|
||
objects</a>.</p>
|
||
<p>In this example we’re using multiple different datatypes from EDEX, so
|
||
we’ll create a request object for each of the following: - <a class="reference external" href="#Define-Maps-Request">The states
|
||
outlines (datatype maps)</a> - <a class="reference external" href="#Define-METAR-Request">The METAR data
|
||
(datatype obs)</a> - <a class="reference external" href="#Define-Synoptic-Request">The Synoptic data (datatype
|
||
sfc)</a></p>
|
||
<p>Some of the request use filters, so we’ll also create several filters
|
||
than can be used for the various data requests as well.</p>
|
||
<section id="initial-edex-connection">
|
||
<h4>Initial EDEX Connection<a class="headerlink" href="#initial-edex-connection" title="Permalink to this heading"></a></h4>
|
||
<p>First we establish a connection to Unidata’s public EDEX server.</p>
|
||
<div class="highlight-ipython3 notranslate"><div class="highlight"><pre><span></span><span class="c1"># EDEX connection</span>
|
||
<span class="n">edexServer</span> <span class="o">=</span> <span class="s2">"edex-beta.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>
|
||
</pre></div>
|
||
</div>
|
||
</section>
|
||
<section id="maps-request-and-response">
|
||
<h4>Maps Request and Response<a class="headerlink" href="#maps-request-and-response" title="Permalink to this heading"></a></h4>
|
||
<p>The maps data request will give us data to draw our state outlines of
|
||
interest (Florida and its neighboring states). We will retrieve the data
|
||
response object here so we can create a geographic filter for the METAR
|
||
and Synoptic data requests.</p>
|
||
<div class="highlight-ipython3 notranslate"><div class="highlight"><pre><span></span><span class="c1"># Define the maps request</span>
|
||
<span class="n">maps_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="c1"># filter for multiple states</span>
|
||
<span class="n">maps_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">maps_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">maps_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">maps_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">maps_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">maps_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">maps_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">maps_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">maps_response</span><span class="p">))</span> <span class="o">+</span> <span class="s2">" MultiPolygons"</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">6</span> <span class="n">MultiPolygons</span>
|
||
</pre></div>
|
||
</div>
|
||
</section>
|
||
<section id="define-geographic-filter">
|
||
<h4>Define Geographic Filter<a class="headerlink" href="#define-geographic-filter" title="Permalink to this heading"></a></h4>
|
||
<p>The previous EDEX request limited the data by using a <strong>parameter</strong> for
|
||
the maps database called <strong>state</strong>. We can take the results from that
|
||
filter and get a geographic <strong>envelope</strong> based on the Florida polygon
|
||
that was returned from the previous cell.</p>
|
||
<blockquote>
|
||
<div><p><strong>Warning</strong>: Without such a filter you may be requesting many tens of
|
||
thousands of records.</p>
|
||
</div></blockquote>
|
||
<div class="highlight-ipython3 notranslate"><div class="highlight"><pre><span></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">maps_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>
|
||
<span class="c1"># if this is Florida grab geographic info</span>
|
||
<span class="k">if</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="o">==</span> <span class="s2">"Florida"</span><span class="p">:</span>
|
||
<span class="n">bounds</span> <span class="o">=</span> <span class="n">ob</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="n">fl_lat</span> <span class="o">=</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">fl_lon</span> <span class="o">=</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="k">if</span> <span class="n">bounds</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
||
<span class="nb">print</span><span class="p">(</span><span class="s2">"Error, no record found for Florida!"</span><span class="p">)</span>
|
||
|
||
<span class="k">else</span><span class="p">:</span>
|
||
<span class="c1"># buffer our bounds by +/i degrees lat/lon</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="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="nb">print</span><span class="p">(</span><span class="n">envelope</span><span class="p">)</span>
|
||
</pre></div>
|
||
</div>
|
||
<div class="highlight-default notranslate"><div class="highlight"><pre><span></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>
|
||
<span class="n">POLYGON</span> <span class="p">((</span><span class="o">-</span><span class="mf">90.63429260299995</span> <span class="mf">23.02105161600002</span><span class="p">,</span> <span class="o">-</span><span class="mf">90.63429260299995</span> <span class="mf">32.50101280200016</span><span class="p">,</span> <span class="o">-</span><span class="mf">77.03199876199994</span> <span class="mf">32.50101280200016</span><span class="p">,</span> <span class="o">-</span><span class="mf">77.03199876199994</span> <span class="mf">23.02105161600002</span><span class="p">,</span> <span class="o">-</span><span class="mf">90.63429260299995</span> <span class="mf">23.02105161600002</span><span class="p">))</span>
|
||
</pre></div>
|
||
</div>
|
||
</section>
|
||
<section id="define-time-filter">
|
||
<h4>Define Time Filter<a class="headerlink" href="#define-time-filter" title="Permalink to this heading"></a></h4>
|
||
<p>Both the METAR and Synoptic datasets should be filtered by time to avoid
|
||
requesting an unreasonable amount of data. By defining one filter now,
|
||
we can use it in both of their data requests to EDEX.</p>
|
||
<blockquote>
|
||
<div><p><strong>Note</strong>: Here we will use the most recent hour as our default
|
||
filter. Try adjusting the timerange and see the difference in the
|
||
final plots.</p>
|
||
</div></blockquote>
|
||
<div class="highlight-ipython3 notranslate"><div class="highlight"><pre><span></span><span class="c1"># Filter for the last hour</span>
|
||
<span class="n">lastHourDateTime</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">now</span><span class="p">(</span><span class="n">UTC</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">now</span><span class="p">(</span><span class="n">UTC</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="nb">print</span><span class="p">(</span><span class="n">timerange</span><span class="p">)</span>
|
||
</pre></div>
|
||
</div>
|
||
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="p">(</span><span class="n">Nov</span> <span class="mi">11</span> <span class="mi">22</span> <span class="mi">19</span><span class="p">:</span><span class="mi">00</span><span class="p">:</span><span class="mi">54</span> <span class="p">,</span> <span class="n">Nov</span> <span class="mi">11</span> <span class="mi">22</span> <span class="mi">20</span><span class="p">:</span><span class="mi">00</span><span class="p">:</span><span class="mi">54</span> <span class="p">)</span>
|
||
</pre></div>
|
||
</div>
|
||
</section>
|
||
<section id="define-common-parameters-for-data-requests">
|
||
<h4>Define Common Parameters for Data Requests<a class="headerlink" href="#define-common-parameters-for-data-requests" title="Permalink to this heading"></a></h4>
|
||
<p>METAR obs and Synoptic obs share several of the same parameters. By
|
||
defining them here, they can be reused for both of the requests and this
|
||
makes our code more efficient.</p>
|
||
<div class="highlight-ipython3 notranslate"><div class="highlight"><pre><span></span><span class="n">shared_params</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"timeObs"</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="s2">"presWeather"</span><span class="p">,</span> <span class="s2">"skyLayerBase"</span><span class="p">]</span>
|
||
<span class="nb">print</span><span class="p">(</span><span class="n">shared_params</span><span class="p">)</span>
|
||
</pre></div>
|
||
</div>
|
||
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="p">[</span><span class="s1">'timeObs'</span><span class="p">,</span> <span class="s1">'longitude'</span><span class="p">,</span> <span class="s1">'latitude'</span><span class="p">,</span> <span class="s1">'temperature'</span><span class="p">,</span> <span class="s1">'dewpoint'</span><span class="p">,</span> <span class="s1">'windDir'</span><span class="p">,</span> <span class="s1">'windSpeed'</span><span class="p">,</span> <span class="s1">'seaLevelPress'</span><span class="p">,</span> <span class="s1">'presWeather'</span><span class="p">,</span> <span class="s1">'skyLayerBase'</span><span class="p">]</span>
|
||
</pre></div>
|
||
</div>
|
||
</section>
|
||
<section id="define-metar-request">
|
||
<h4>Define METAR Request<a class="headerlink" href="#define-metar-request" title="Permalink to this heading"></a></h4>
|
||
<p>To get METAR data we must use the <strong>obs</strong> datatype. To help limit the
|
||
amount of data returned, we will narrow the request by using a
|
||
geographic <strong>envelope</strong>, setting the request <strong>parameters</strong>, and using
|
||
<strong>timerange</strong> as a time filter.</p>
|
||
<div class="highlight-ipython3 notranslate"><div class="highlight"><pre><span></span><span class="c1"># New metar request</span>
|
||
<span class="n">metar_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="c1"># metar specifc parameters</span>
|
||
<span class="n">metar_params</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"stationName"</span><span class="p">,</span> <span class="s2">"skyCover"</span><span class="p">]</span>
|
||
<span class="c1"># combine all parameters</span>
|
||
<span class="n">all_metar_params</span> <span class="o">=</span> <span class="n">shared_params</span> <span class="o">+</span> <span class="n">metar_params</span>
|
||
<span class="c1"># set the parameters on the metar request</span>
|
||
<span class="n">metar_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">all_metar_params</span><span class="p">))</span>
|
||
|
||
<span class="nb">print</span><span class="p">(</span><span class="n">metar_request</span><span class="p">)</span>
|
||
</pre></div>
|
||
</div>
|
||
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">DefaultDataRequest</span><span class="p">(</span><span class="n">datatype</span><span class="o">=</span><span class="n">obs</span><span class="p">,</span> <span class="n">identifiers</span><span class="o">=</span><span class="p">{},</span> <span class="n">parameters</span><span class="o">=</span><span class="p">[</span><span class="s1">'timeObs'</span><span class="p">,</span> <span class="s1">'longitude'</span><span class="p">,</span> <span class="s1">'latitude'</span><span class="p">,</span> <span class="s1">'temperature'</span><span class="p">,</span> <span class="s1">'dewpoint'</span><span class="p">,</span> <span class="s1">'windDir'</span><span class="p">,</span> <span class="s1">'windSpeed'</span><span class="p">,</span> <span class="s1">'seaLevelPress'</span><span class="p">,</span> <span class="s1">'presWeather'</span><span class="p">,</span> <span class="s1">'skyLayerBase'</span><span class="p">,</span> <span class="s1">'stationName'</span><span class="p">,</span> <span class="s1">'skyCover'</span><span class="p">],</span> <span class="n">levels</span><span class="o">=</span><span class="p">[],</span> <span class="n">locationNames</span><span class="o">=</span><span class="p">[],</span> <span class="n">envelope</span><span class="o">=<</span><span class="n">dynamicserialize</span><span class="o">.</span><span class="n">dstypes</span><span class="o">.</span><span class="n">com</span><span class="o">.</span><span class="n">vividsolutions</span><span class="o">.</span><span class="n">jts</span><span class="o">.</span><span class="n">geom</span><span class="o">.</span><span class="n">Envelope</span><span class="o">.</span><span class="n">Envelope</span> <span class="nb">object</span> <span class="n">at</span> <span class="mh">0x13abe40a0</span><span class="o">></span><span class="p">)</span>
|
||
</pre></div>
|
||
</div>
|
||
</section>
|
||
<section id="define-synoptic-request">
|
||
<h4>Define Synoptic Request<a class="headerlink" href="#define-synoptic-request" title="Permalink to this heading"></a></h4>
|
||
<p>Similar to the request above, we will limit the amount of data returned
|
||
by using a geographic <strong>envelope</strong>, setting the request <strong>parameters</strong>,
|
||
and using <strong>timerange</strong> as a time filter.</p>
|
||
<p>However, in order to access synoptic observations we will use the
|
||
<strong>sfcobs</strong> datatype.</p>
|
||
<div class="highlight-ipython3 notranslate"><div class="highlight"><pre><span></span><span class="c1"># New sfcobs/SYNOP request</span>
|
||
<span class="n">syn_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="c1"># (sfcobs) uses stationId, while (obs) uses stationName</span>
|
||
<span class="n">syn_params</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"stationId"</span><span class="p">]</span>
|
||
<span class="c1"># combine all parameters</span>
|
||
<span class="n">all_syn_params</span> <span class="o">=</span> <span class="n">shared_params</span> <span class="o">+</span> <span class="n">syn_params</span>
|
||
<span class="c1"># set the parameters on the synoptic request</span>
|
||
<span class="n">syn_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">all_syn_params</span><span class="p">))</span>
|
||
|
||
<span class="nb">print</span><span class="p">(</span><span class="n">syn_request</span><span class="p">)</span>
|
||
</pre></div>
|
||
</div>
|
||
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">DefaultDataRequest</span><span class="p">(</span><span class="n">datatype</span><span class="o">=</span><span class="n">sfcobs</span><span class="p">,</span> <span class="n">identifiers</span><span class="o">=</span><span class="p">{},</span> <span class="n">parameters</span><span class="o">=</span><span class="p">[</span><span class="s1">'timeObs'</span><span class="p">,</span> <span class="s1">'longitude'</span><span class="p">,</span> <span class="s1">'latitude'</span><span class="p">,</span> <span class="s1">'temperature'</span><span class="p">,</span> <span class="s1">'dewpoint'</span><span class="p">,</span> <span class="s1">'windDir'</span><span class="p">,</span> <span class="s1">'windSpeed'</span><span class="p">,</span> <span class="s1">'seaLevelPress'</span><span class="p">,</span> <span class="s1">'presWeather'</span><span class="p">,</span> <span class="s1">'skyLayerBase'</span><span class="p">,</span> <span class="s1">'stationId'</span><span class="p">],</span> <span class="n">levels</span><span class="o">=</span><span class="p">[],</span> <span class="n">locationNames</span><span class="o">=</span><span class="p">[],</span> <span class="n">envelope</span><span class="o">=<</span><span class="n">dynamicserialize</span><span class="o">.</span><span class="n">dstypes</span><span class="o">.</span><span class="n">com</span><span class="o">.</span><span class="n">vividsolutions</span><span class="o">.</span><span class="n">jts</span><span class="o">.</span><span class="n">geom</span><span class="o">.</span><span class="n">Envelope</span><span class="o">.</span><span class="n">Envelope</span> <span class="nb">object</span> <span class="n">at</span> <span class="mh">0x105048bb0</span><span class="o">></span><span class="p">)</span>
|
||
</pre></div>
|
||
</div>
|
||
<p><a class="reference external" href="https://unidata.github.io/python-awips/examples/generated/Regional_Surface_Obs_Plot.html">Top</a></p>
|
||
</section>
|
||
</section>
|
||
<hr class="docutils" />
|
||
<section id="get-the-data">
|
||
<h3>Get the Data!<a class="headerlink" href="#get-the-data" title="Permalink to this heading"></a></h3>
|
||
<p>We have already obtained our maps data, but we still have to collect our
|
||
observation data.</p>
|
||
<section id="get-the-edex-responses">
|
||
<h4>Get the EDEX Responses<a class="headerlink" href="#get-the-edex-responses" title="Permalink to this heading"></a></h4>
|
||
<div class="highlight-ipython3 notranslate"><div class="highlight"><pre><span></span><span class="c1"># METARs data</span>
|
||
<span class="n">metar_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">metar_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">metars</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">metar_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">metar_response</span><span class="p">))</span> <span class="o">+</span> <span class="s2">" METAR records"</span><span class="p">)</span>
|
||
<span class="nb">print</span><span class="p">(</span><span class="s2">"</span><span class="se">\t</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">metars</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>
|
||
|
||
<span class="c1"># Synoptic data</span>
|
||
<span class="n">syn_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">syn_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">synoptic</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">syn_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">syn_response</span><span class="p">))</span> <span class="o">+</span> <span class="s2">" Synoptic records"</span><span class="p">)</span>
|
||
<span class="nb">print</span><span class="p">(</span><span class="s2">"</span><span class="se">\t</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">synoptic</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">4116</span> <span class="n">METAR</span> <span class="n">records</span>
|
||
<span class="n">Using</span> <span class="mi">179</span> <span class="n">temperature</span> <span class="n">records</span>
|
||
<span class="n">Found</span> <span class="mi">259</span> <span class="n">Synoptic</span> <span class="n">records</span>
|
||
<span class="n">Using</span> <span class="mi">63</span> <span class="n">temperature</span> <span class="n">records</span>
|
||
</pre></div>
|
||
</div>
|
||
</section>
|
||
<section id="extract-plotting-data">
|
||
<h4>Extract Plotting Data<a class="headerlink" href="#extract-plotting-data" title="Permalink to this heading"></a></h4>
|
||
<div class="highlight-ipython3 notranslate"><div class="highlight"><pre><span></span><span class="c1"># Pull all necessary plotting information for the metar data</span>
|
||
<span class="n">metars_data</span> <span class="o">=</span> <span class="n">extract_plotting_data</span><span class="p">(</span><span class="n">metars</span><span class="p">,</span> <span class="s1">'obs'</span><span class="p">)</span>
|
||
<span class="nb">print</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">metars_data</span><span class="p">[</span><span class="s1">'stid'</span><span class="p">]))</span> <span class="o">+</span> <span class="s2">" METARs stations"</span><span class="p">)</span>
|
||
|
||
<span class="c1"># Pull all necessary plotting information for the synoptic data</span>
|
||
<span class="n">synoptic_data</span> <span class="o">=</span> <span class="n">extract_plotting_data</span><span class="p">(</span><span class="n">synoptic</span><span class="p">,</span> <span class="s1">'sfcobs'</span><span class="p">)</span>
|
||
<span class="nb">print</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">synoptic_data</span><span class="p">[</span><span class="s1">'stid'</span><span class="p">]))</span> <span class="o">+</span> <span class="s2">" Synoptic stations"</span><span class="p">)</span>
|
||
</pre></div>
|
||
</div>
|
||
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="mi">179</span> <span class="n">METARs</span> <span class="n">stations</span>
|
||
<span class="mi">63</span> <span class="n">Synoptic</span> <span class="n">stations</span>
|
||
</pre></div>
|
||
</div>
|
||
<p><a class="reference external" href="https://unidata.github.io/python-awips/examples/generated/Regional_Surface_Obs_Plot.html">Top</a></p>
|
||
</section>
|
||
</section>
|
||
<hr class="docutils" />
|
||
<section id="plot-the-data">
|
||
<h3>Plot the Data<a class="headerlink" href="#plot-the-data" title="Permalink to this heading"></a></h3>
|
||
<section id="draw-the-region">
|
||
<h4>Draw the Region<a class="headerlink" href="#draw-the-region" title="Permalink to this heading"></a></h4>
|
||
<p>Here we will draw our region by using the <strong>states</strong> polygons we
|
||
retreived from EDEX <a class="reference external" href="#Maps-Request-and-Response">earlier in this
|
||
example</a>. To create this plot we use the
|
||
<a class="reference external" href="#Function:-make_map()">make_map()</a> function which also adds lines of
|
||
latitude and longitude for additional context.</p>
|
||
<div class="highlight-ipython3 notranslate"><div class="highlight"><pre><span></span><span class="c1"># Create the figure and axes used for the plot</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="c1"># Create a feature based off our states polygons</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">0x13b2ae5e0</span><span class="o">></span>
|
||
</pre></div>
|
||
</div>
|
||
<img alt="../../_images/Regional_Surface_Obs_Plot_42_1.png" src="../../_images/Regional_Surface_Obs_Plot_42_1.png" />
|
||
</section>
|
||
<section id="plot-metar-data">
|
||
<h4>Plot METAR Data<a class="headerlink" href="#plot-metar-data" title="Permalink to this heading"></a></h4>
|
||
<p>On the same axes (<strong>ax</strong>) and figure (<strong>fig</strong>) plot the METAR data.</p>
|
||
<div class="highlight-ipython3 notranslate"><div class="highlight"><pre><span></span><span class="c1"># Create a title for the plot</span>
|
||
<span class="n">title</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">metar_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="c1"># Plot the station information for METARs data</span>
|
||
<span class="n">plot_data</span><span class="p">(</span><span class="n">metars_data</span><span class="p">,</span> <span class="n">title</span><span class="p">,</span> <span class="n">ax</span><span class="p">,</span> <span class="s1">'obs'</span><span class="p">)</span>
|
||
<span class="c1"># Display the figure</span>
|
||
<span class="n">fig</span>
|
||
</pre></div>
|
||
</div>
|
||
<img alt="../../_images/Regional_Surface_Obs_Plot_44_0.png" src="../../_images/Regional_Surface_Obs_Plot_44_0.png" />
|
||
</section>
|
||
<section id="plot-synoptic-data">
|
||
<h4>Plot Synoptic Data<a class="headerlink" href="#plot-synoptic-data" title="Permalink to this heading"></a></h4>
|
||
<p>On a new axes and figure (<strong>ax_syn</strong>, <strong>fig_syn</strong>) plot the map and
|
||
synoptic data.</p>
|
||
<div class="highlight-ipython3 notranslate"><div class="highlight"><pre><span></span><span class="c1"># Create a new figure and axes for the synoptic data</span>
|
||
<span class="n">fig_syn</span><span class="p">,</span> <span class="n">ax_syn</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="c1"># Create the states feature from the polygons</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_syn</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="c1"># Create a title for the figure</span>
|
||
<span class="n">title</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">syn_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="c1"># Draw the synoptic data</span>
|
||
<span class="n">plot_data</span><span class="p">(</span><span class="n">synoptic_data</span><span class="p">,</span> <span class="n">title</span><span class="p">,</span> <span class="n">ax_syn</span><span class="p">,</span> <span class="s1">'sfcobs'</span><span class="p">)</span>
|
||
</pre></div>
|
||
</div>
|
||
<img alt="../../_images/Regional_Surface_Obs_Plot_46_0.png" src="../../_images/Regional_Surface_Obs_Plot_46_0.png" />
|
||
</section>
|
||
<section id="plot-both-metar-and-synoptic-data">
|
||
<h4>Plot both METAR and Synoptic Data<a class="headerlink" href="#plot-both-metar-and-synoptic-data" title="Permalink to this heading"></a></h4>
|
||
<p>Add the synoptic data to our first axes and figure (<strong>ax</strong>, <strong>fig</strong>)
|
||
that already contains our map and METARs data.</p>
|
||
<div class="highlight-ipython3 notranslate"><div class="highlight"><pre><span></span><span class="c1"># Create a title for both the METAR and Synopotic data</span>
|
||
<span class="n">title</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">syn_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 & Synoptic Surface Obs | "</span> <span class="o">+</span> <span class="n">edexServer</span>
|
||
<span class="c1"># Draw the synoptic on the first axes that already has the metar data</span>
|
||
<span class="n">plot_data</span><span class="p">(</span><span class="n">synoptic_data</span><span class="p">,</span> <span class="n">title</span><span class="p">,</span> <span class="n">ax</span><span class="p">,</span> <span class="s1">'sfcobs'</span><span class="p">)</span>
|
||
<span class="c1"># Display the figure</span>
|
||
<span class="n">fig</span>
|
||
</pre></div>
|
||
</div>
|
||
<img alt="../../_images/Regional_Surface_Obs_Plot_48_0.png" src="../../_images/Regional_Surface_Obs_Plot_48_0.png" />
|
||
<p><a class="reference external" href="https://unidata.github.io/python-awips/examples/generated/Regional_Surface_Obs_Plot.html">Top</a></p>
|
||
</section>
|
||
</section>
|
||
<hr class="docutils" />
|
||
<section id="see-also">
|
||
<h3>See Also<a class="headerlink" href="#see-also" title="Permalink to this heading"></a></h3>
|
||
<ul class="simple">
|
||
<li><p><a class="reference external" href="https://www.aviationweather.gov/metar/help?page=plot">Aviation Weather Center Static METAR Plots
|
||
Information</a></p></li>
|
||
</ul>
|
||
<section id="related-notebooks">
|
||
<h4>Related Notebooks<a class="headerlink" href="#related-notebooks" title="Permalink to this heading"></a></h4>
|
||
<ul class="simple">
|
||
<li><p><a class="reference external" href="http://unidata.github.io/python-awips/examples/generated/METAR_Station_Plot_with_MetPy.html">Metar Station Plot with
|
||
MetPy</a></p></li>
|
||
<li><p><a class="reference external" href="http://unidata.github.io/python-awips/examples/generated/Map_Resources_and_Topography.html">Map Resources and
|
||
Topography</a></p></li>
|
||
</ul>
|
||
</section>
|
||
<section id="additional-documentation">
|
||
<h4>Additional Documentation<a class="headerlink" href="#additional-documentation" title="Permalink to this heading"></a></h4>
|
||
<p><strong>python-awips:</strong></p>
|
||
<ul class="simple">
|
||
<li><p><a class="reference external" href="http://unidata.github.io/python-awips/api/DataAccessLayer.html#awips.dataaccess.DataAccessLayer.changeEDEXHost">DataAccessLayer.changeEDEXHost()</a></p></li>
|
||
<li><p><a class="reference external" href="http://unidata.github.io/python-awips/api/DataAccessLayer.html#awips.dataaccess.DataAccessLayer.newDataRequest">DataAccessLayer.newDataRequest()</a></p></li>
|
||
<li><p><a class="reference external" href="http://unidata.github.io/python-awips/api/IDataRequest.html">IDataRequest</a></p></li>
|
||
<li><p><a class="reference external" href="http://unidata.github.io/python-awips/api/PyGeometryData.html">DataAccessLayer.getGeometryData</a></p></li>
|
||
</ul>
|
||
<p><strong>datetime:</strong></p>
|
||
<ul class="simple">
|
||
<li><p><a class="reference external" href="https://docs.python.org/3/library/datetime.html#datetime-objects">datetime.datetime</a></p></li>
|
||
<li><p><a class="reference external" href="https://docs.python.org/3/library/datetime.html?#datetime.datetime.utcnow">datetime.now(UTC)</a></p></li>
|
||
<li><p><a class="reference external" href="https://docs.python.org/3/library/datetime.html#timedelta-objects">datetime.timedelta</a></p></li>
|
||
<li><p><a class="reference external" href="https://docs.python.org/3/library/datetime.html#strftime-and-strptime-behavior">datetime.strftime() and
|
||
datetime.strptime()</a></p></li>
|
||
</ul>
|
||
<p><strong>numpy:</strong></p>
|
||
<ul class="simple">
|
||
<li><p><a class="reference external" href="https://numpy.org/doc/stable/reference/generated/numpy.array.html">np.array</a></p></li>
|
||
</ul>
|
||
<p><strong>cartopy:</strong></p>
|
||
<ul class="simple">
|
||
<li><p><a class="reference external" href="https://scitools.org.uk/cartopy/docs/v0.14/crs/projections.html?#cartopy-projection-list">cartopy projection
|
||
list</a></p></li>
|
||
</ul>
|
||
<p><strong>matplotlib:</strong></p>
|
||
<ul class="simple">
|
||
<li><p><a class="reference external" href="https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.html">matplotlib.pyplot()</a></p></li>
|
||
<li><p><a class="reference external" href="https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.figure.html">matplotlib.pyplot.figure()</a></p></li>
|
||
<li><p><a class="reference external" href="https://matplotlib.org/stable/api/image_api.html?highlight=set_extent#matplotlib.image.AxesImage.set_extent">ax.set_extent</a></p></li>
|
||
<li><p><a class="reference external" href="https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.set_title.html">ax.set_title</a></p></li>
|
||
</ul>
|
||
<p><strong>metpy:</strong></p>
|
||
<ul class="simple">
|
||
<li><p><a class="reference external" href="https://unidata.github.io/MetPy/latest/api/generated/metpy.calc.wind_components.html">metpy.calc.wind_components</a></p></li>
|
||
<li><p><a class="reference external" href="https://unidata.github.io/MetPy/latest/api/generated/metpy.plots.StationPlot.html">metpy.plots.StationPlot()</a></p></li>
|
||
<li><p><a class="reference external" href="https://unidata.github.io/MetPy/latest/api/generated/metpy.plots.StationPlotLayout.html">metpy.plots.StationPlotLayout()</a></p></li>
|
||
<li><p><a class="reference external" href="https://unidata.github.io/MetPy/latest/api/generated/metpy.units.html">metpy.units</a></p></li>
|
||
</ul>
|
||
<p><a class="reference external" href="https://unidata.github.io/python-awips/examples/generated/Regional_Surface_Obs_Plot.html">Top</a></p>
|
||
<hr class="docutils" />
|
||
</section>
|
||
</section>
|
||
</section>
|
||
</section>
|
||
|
||
|
||
</div>
|
||
</div>
|
||
<footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
|
||
<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" aria-hidden="true"></span> Previous</a>
|
||
<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" aria-hidden="true"></span></a>
|
||
</div>
|
||
|
||
<hr/>
|
||
|
||
<div role="contentinfo">
|
||
<p>© Copyright 2025, NSF Unidata.</p>
|
||
</div>
|
||
|
||
Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
|
||
<a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
|
||
provided by <a href="https://readthedocs.org">Read the Docs</a>.
|
||
|
||
|
||
</footer>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
</div>
|
||
<script>
|
||
jQuery(function () {
|
||
SphinxRtdTheme.Navigation.enable(true);
|
||
});
|
||
</script>
|
||
|
||
</body>
|
||
</html> |