This commit is contained in:
srcarter3 2022-06-03 19:57:40 +00:00
parent b6a8c6ccd4
commit 29efc6045f
64 changed files with 1651 additions and 1214 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 212 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 254 KiB

View file

@ -13,6 +13,7 @@
<script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js"></script> <script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js"></script>
<script src="../../_static/jquery.js"></script> <script src="../../_static/jquery.js"></script>
<script src="../../_static/underscore.js"></script> <script src="../../_static/underscore.js"></script>
<script src="../../_static/_sphinx_javascript_frameworks_compat.js"></script>
<script src="../../_static/doctools.js"></script> <script src="../../_static/doctools.js"></script>
<script src="../../_static/js/theme.js"></script> <script src="../../_static/js/theme.js"></script>
<link rel="author" title="About these documents" href="../../about.html" /> <link rel="author" title="About these documents" href="../../about.html" />

View file

@ -13,6 +13,7 @@
<script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js"></script> <script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js"></script>
<script src="../../_static/jquery.js"></script> <script src="../../_static/jquery.js"></script>
<script src="../../_static/underscore.js"></script> <script src="../../_static/underscore.js"></script>
<script src="../../_static/_sphinx_javascript_frameworks_compat.js"></script>
<script src="../../_static/doctools.js"></script> <script src="../../_static/doctools.js"></script>
<script src="../../_static/js/theme.js"></script> <script src="../../_static/js/theme.js"></script>
<link rel="author" title="About these documents" href="../../about.html" /> <link rel="author" title="About these documents" href="../../about.html" />

View file

@ -13,6 +13,7 @@
<script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js"></script> <script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js"></script>
<script src="../../_static/jquery.js"></script> <script src="../../_static/jquery.js"></script>
<script src="../../_static/underscore.js"></script> <script src="../../_static/underscore.js"></script>
<script src="../../_static/_sphinx_javascript_frameworks_compat.js"></script>
<script src="../../_static/doctools.js"></script> <script src="../../_static/doctools.js"></script>
<script src="../../_static/js/theme.js"></script> <script src="../../_static/js/theme.js"></script>
<link rel="author" title="About these documents" href="../../about.html" /> <link rel="author" title="About these documents" href="../../about.html" />

View file

@ -13,6 +13,7 @@
<script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js"></script> <script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js"></script>
<script src="../../_static/jquery.js"></script> <script src="../../_static/jquery.js"></script>
<script src="../../_static/underscore.js"></script> <script src="../../_static/underscore.js"></script>
<script src="../../_static/_sphinx_javascript_frameworks_compat.js"></script>
<script src="../../_static/doctools.js"></script> <script src="../../_static/doctools.js"></script>
<script src="../../_static/js/theme.js"></script> <script src="../../_static/js/theme.js"></script>
<link rel="author" title="About these documents" href="../../about.html" /> <link rel="author" title="About these documents" href="../../about.html" />

View file

@ -13,6 +13,7 @@
<script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js"></script> <script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js"></script>
<script src="../../_static/jquery.js"></script> <script src="../../_static/jquery.js"></script>
<script src="../../_static/underscore.js"></script> <script src="../../_static/underscore.js"></script>
<script src="../../_static/_sphinx_javascript_frameworks_compat.js"></script>
<script src="../../_static/doctools.js"></script> <script src="../../_static/doctools.js"></script>
<script src="../../_static/js/theme.js"></script> <script src="../../_static/js/theme.js"></script>
<link rel="author" title="About these documents" href="../../about.html" /> <link rel="author" title="About these documents" href="../../about.html" />

View file

@ -13,6 +13,7 @@
<script data-url_root="../../../" id="documentation_options" src="../../../_static/documentation_options.js"></script> <script data-url_root="../../../" id="documentation_options" src="../../../_static/documentation_options.js"></script>
<script src="../../../_static/jquery.js"></script> <script src="../../../_static/jquery.js"></script>
<script src="../../../_static/underscore.js"></script> <script src="../../../_static/underscore.js"></script>
<script src="../../../_static/_sphinx_javascript_frameworks_compat.js"></script>
<script src="../../../_static/doctools.js"></script> <script src="../../../_static/doctools.js"></script>
<script src="../../../_static/js/theme.js"></script> <script src="../../../_static/js/theme.js"></script>
<link rel="author" title="About these documents" href="../../../about.html" /> <link rel="author" title="About these documents" href="../../../about.html" />

View file

@ -13,6 +13,7 @@
<script data-url_root="../../../" id="documentation_options" src="../../../_static/documentation_options.js"></script> <script data-url_root="../../../" id="documentation_options" src="../../../_static/documentation_options.js"></script>
<script src="../../../_static/jquery.js"></script> <script src="../../../_static/jquery.js"></script>
<script src="../../../_static/underscore.js"></script> <script src="../../../_static/underscore.js"></script>
<script src="../../../_static/_sphinx_javascript_frameworks_compat.js"></script>
<script src="../../../_static/doctools.js"></script> <script src="../../../_static/doctools.js"></script>
<script src="../../../_static/js/theme.js"></script> <script src="../../../_static/js/theme.js"></script>
<link rel="author" title="About these documents" href="../../../about.html" /> <link rel="author" title="About these documents" href="../../../about.html" />

View file

@ -13,6 +13,7 @@
<script data-url_root="../../../" id="documentation_options" src="../../../_static/documentation_options.js"></script> <script data-url_root="../../../" id="documentation_options" src="../../../_static/documentation_options.js"></script>
<script src="../../../_static/jquery.js"></script> <script src="../../../_static/jquery.js"></script>
<script src="../../../_static/underscore.js"></script> <script src="../../../_static/underscore.js"></script>
<script src="../../../_static/_sphinx_javascript_frameworks_compat.js"></script>
<script src="../../../_static/doctools.js"></script> <script src="../../../_static/doctools.js"></script>
<script src="../../../_static/js/theme.js"></script> <script src="../../../_static/js/theme.js"></script>
<link rel="author" title="About these documents" href="../../../about.html" /> <link rel="author" title="About these documents" href="../../../about.html" />

View file

@ -13,6 +13,7 @@
<script data-url_root="../../../" id="documentation_options" src="../../../_static/documentation_options.js"></script> <script data-url_root="../../../" id="documentation_options" src="../../../_static/documentation_options.js"></script>
<script src="../../../_static/jquery.js"></script> <script src="../../../_static/jquery.js"></script>
<script src="../../../_static/underscore.js"></script> <script src="../../../_static/underscore.js"></script>
<script src="../../../_static/_sphinx_javascript_frameworks_compat.js"></script>
<script src="../../../_static/doctools.js"></script> <script src="../../../_static/doctools.js"></script>
<script src="../../../_static/js/theme.js"></script> <script src="../../../_static/js/theme.js"></script>
<link rel="author" title="About these documents" href="../../../about.html" /> <link rel="author" title="About these documents" href="../../../about.html" />

View file

@ -13,6 +13,7 @@
<script data-url_root="../../../" id="documentation_options" src="../../../_static/documentation_options.js"></script> <script data-url_root="../../../" id="documentation_options" src="../../../_static/documentation_options.js"></script>
<script src="../../../_static/jquery.js"></script> <script src="../../../_static/jquery.js"></script>
<script src="../../../_static/underscore.js"></script> <script src="../../../_static/underscore.js"></script>
<script src="../../../_static/_sphinx_javascript_frameworks_compat.js"></script>
<script src="../../../_static/doctools.js"></script> <script src="../../../_static/doctools.js"></script>
<script src="../../../_static/js/theme.js"></script> <script src="../../../_static/js/theme.js"></script>
<link rel="author" title="About these documents" href="../../../about.html" /> <link rel="author" title="About these documents" href="../../../about.html" />

View file

@ -13,6 +13,7 @@
<script data-url_root="../../../" id="documentation_options" src="../../../_static/documentation_options.js"></script> <script data-url_root="../../../" id="documentation_options" src="../../../_static/documentation_options.js"></script>
<script src="../../../_static/jquery.js"></script> <script src="../../../_static/jquery.js"></script>
<script src="../../../_static/underscore.js"></script> <script src="../../../_static/underscore.js"></script>
<script src="../../../_static/_sphinx_javascript_frameworks_compat.js"></script>
<script src="../../../_static/doctools.js"></script> <script src="../../../_static/doctools.js"></script>
<script src="../../../_static/js/theme.js"></script> <script src="../../../_static/js/theme.js"></script>
<link rel="author" title="About these documents" href="../../../about.html" /> <link rel="author" title="About these documents" href="../../../about.html" />

View file

@ -13,6 +13,7 @@
<script data-url_root="../../../" id="documentation_options" src="../../../_static/documentation_options.js"></script> <script data-url_root="../../../" id="documentation_options" src="../../../_static/documentation_options.js"></script>
<script src="../../../_static/jquery.js"></script> <script src="../../../_static/jquery.js"></script>
<script src="../../../_static/underscore.js"></script> <script src="../../../_static/underscore.js"></script>
<script src="../../../_static/_sphinx_javascript_frameworks_compat.js"></script>
<script src="../../../_static/doctools.js"></script> <script src="../../../_static/doctools.js"></script>
<script src="../../../_static/js/theme.js"></script> <script src="../../../_static/js/theme.js"></script>
<link rel="author" title="About these documents" href="../../../about.html" /> <link rel="author" title="About these documents" href="../../../about.html" />

View file

@ -13,6 +13,7 @@
<script data-url_root="../../../" id="documentation_options" src="../../../_static/documentation_options.js"></script> <script data-url_root="../../../" id="documentation_options" src="../../../_static/documentation_options.js"></script>
<script src="../../../_static/jquery.js"></script> <script src="../../../_static/jquery.js"></script>
<script src="../../../_static/underscore.js"></script> <script src="../../../_static/underscore.js"></script>
<script src="../../../_static/_sphinx_javascript_frameworks_compat.js"></script>
<script src="../../../_static/doctools.js"></script> <script src="../../../_static/doctools.js"></script>
<script src="../../../_static/js/theme.js"></script> <script src="../../../_static/js/theme.js"></script>
<link rel="author" title="About these documents" href="../../../about.html" /> <link rel="author" title="About these documents" href="../../../about.html" />

View file

@ -13,6 +13,7 @@
<script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script> <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
<script src="../_static/jquery.js"></script> <script src="../_static/jquery.js"></script>
<script src="../_static/underscore.js"></script> <script src="../_static/underscore.js"></script>
<script src="../_static/_sphinx_javascript_frameworks_compat.js"></script>
<script src="../_static/doctools.js"></script> <script src="../_static/doctools.js"></script>
<script src="../_static/js/theme.js"></script> <script src="../_static/js/theme.js"></script>
<link rel="author" title="About these documents" href="../about.html" /> <link rel="author" title="About these documents" href="../about.html" />

View file

@ -2,8 +2,60 @@
METAR Station Plot with MetPy METAR Station Plot with MetPy
============================= =============================
`Notebook <http://nbviewer.ipython.org/github/Unidata/python-awips/blob/master/examples/notebooks/METAR_Station_Plot_with_MetPy.ipynb>`_ `Notebook <http://nbviewer.ipython.org/github/Unidata/python-awips/blob/master/examples/notebooks/METAR_Station_Plot_with_MetPy.ipynb>`_
This exercise creates a METAR plot for North America using AWIPS METAR Python-AWIPS Tutorial Notebook
observations (datatype *obs*) and MetPy.
--------------
Objectives
==========
- Use python-awips to connect to an edex server
- Define and filter data request for METAR surface obs
- Extract necessary data and reformat it for plotting
- Stylize and plot METAR station data using Cartopy, Matplotlib, and
MetPy
--------------
Table of Contents
-----------------
| `1
Imports <https://unidata.github.io/python-awips/examples/generated/METAR_Station_Plot_with_MetPy.html#imports>`__\
| `2 Function:
get_cloud_cover() <https://unidata.github.io/python-awips/examples/generated/METAR_Station_Plot_with_MetPy.html#function-get-cloud-cover>`__\
| `3 Initial
Setup <https://unidata.github.io/python-awips/examples/generated/METAR_Station_Plot_with_MetPy.html#initial-setup>`__\
|     `3.1 Initial EDEX
Connection <https://unidata.github.io/python-awips/examples/generated/METAR_Station_Plot_with_MetPy.html#initial-edex-connection>`__\
|     `3.2 Setting Connection Location
Names <https://unidata.github.io/python-awips/examples/generated/WMETAR_Station_Plot_with_MetPy.html#setting-connection-location-names>`__\
| `4 Filter by
Time <https://unidata.github.io/python-awips/examples/generated/METAR_Station_Plot_with_MetPy.html#filter-by-time>`__\
| `5 Use the
Data! <https://unidata.github.io/python-awips/examples/generated/METAR_Station_Plot_with_MetPy.html#use-the-data>`__\
|     `5.1 Get the
Data! <https://unidata.github.io/python-awips/examples/generated/METAR_Station_Plot_with_MetPy.html#get-the-data>`__\
|     `5.2 Extract all
Parameters <https://unidata.github.io/python-awips/examples/generated/METAR_Station_Plot_with_MetPy.html#extract-all-parameters>`__\
|     `5.3 Populate the Data
Dictionary <https://unidata.github.io/python-awips/examples/generated/METAR_Station_Plot_with_MetPy.html#populate-the-data-dictionary>`__\
| `6 Plot the
Data! <https://unidata.github.io/python-awips/examples/generated/METAR_Station_Plot_with_MetPy.html#plot-the-data>`__\
| `7 See
Also <https://unidata.github.io/python-awips/examples/generated/METAR_Station_Plot_with_MetPy.html#see-also>`__\
|     `7.1 Related
Notebooks <https://unidata.github.io/python-awips/examples/generated/METAR_Station_Plot_with_MetPy.html#related-notebooks>`__\
|     `7.2 Additional
Documentation <https://unidata.github.io/python-awips/examples/generated/METAR_Station_Plot_with_MetPy.html#additional-documentation>`__\
1 Imports
---------
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.
.. code:: ipython3 .. code:: ipython3
@ -15,36 +67,53 @@ observations (datatype *obs*) and MetPy.
import cartopy.feature as cfeature import cartopy.feature as cfeature
import matplotlib.pyplot as plt import matplotlib.pyplot as plt
from metpy.calc import wind_components from metpy.calc import wind_components
from metpy.plots import StationPlot, StationPlotLayout from metpy.plots import StationPlot, StationPlotLayout, sky_cover
from metpy.units import units from metpy.units import units
import warnings
%matplotlib inline `Top <https://unidata.github.io/python-awips/examples/generated/METAR_Station_Plot_with_MetPy.html>`__
warnings.filterwarnings("ignore",category =RuntimeWarning)
--------------
2 Function: get_cloud_cover()
-----------------------------
Returns the cloud fraction values as integer codes (0 through 8).
.. code:: ipython3
def get_cloud_cover(code): def get_cloud_cover(code):
if 'OVC' in code: if 'OVC' in code:
return 1.0 return 8
elif 'BKN' in code: elif 'BKN' in code:
return 6.0/8.0 return 6
elif 'SCT' in code: elif 'SCT' in code:
return 4.0/8.0 return 4
elif 'FEW' in code: elif 'FEW' in code:
return 2.0/8.0 return 2
else: else:
return 0 return 0
# Pull out these specific stations (prepend K for AWIPS identifiers) `Top <https://unidata.github.io/python-awips/examples/generated/METAR_Station_Plot_with_MetPy.html>`__
selected = ['PDX', 'OKC', 'ICT', 'GLD', 'MEM', 'BOS', 'MIA', 'MOB', 'ABQ', 'PHX', 'TTF',
'ORD', 'BIL', 'BIS', 'CPR', 'LAX', 'ATL', 'MSP', 'SLC', 'DFW', 'NYC', 'PHL', --------------
'PIT', 'IND', 'OLY', 'SYR', 'LEX', 'CHS', 'TLH', 'HOU', 'GJT', 'LBB', 'LSV',
'GRB', 'CLT', 'LNK', 'DSM', 'BOI', 'FSD', 'RAP', 'RIC', 'JAN', 'HSV', 'CRW', 3 Initial Setup
'SAT', 'BUY', '0CO', 'ZPC', 'VIH', 'BDG', 'MLF', 'ELY', 'WMC', 'OTH', 'CAR', ---------------
'LMT', 'RDM', 'PDT', 'SEA', 'UIL', 'EPH', 'PUW', 'COE', 'MLP', 'PIH', 'IDA',
'MSO', 'ACV', 'HLN', 'BIL', 'OLF', 'RUT', 'PSM', 'JAX', 'TPA', 'SHV', 'MSY', 3.1 Initial EDEX Connection
'ELP', 'RNO', 'FAT', 'SFO', 'NYL', 'BRO', 'MRF', 'DRT', 'FAR', 'BDE', 'DLH', ~~~~~~~~~~~~~~~~~~~~~~~~~~~
'HOT', 'LBF', 'FLG', 'CLE', 'UNV']
selected = ['K{0}'.format(id) for id in selected] First we establish a connection to Unidatas public EDEX server. With
data_arr = [] that connection made, we can create a `new data request
object <http://unidata.github.io/python-awips/api/IDataRequest.html>`__
and set the data type to **obs**.
Then, because were going to uses MetPys
`StationPlot <https://unidata.github.io/MetPy/latest/api/generated/metpy.plots.StationPlot.html>`__
and
`StationPlotLayout <https://unidata.github.io/MetPy/latest/api/generated/metpy.plots.StationPlotLayout.html>`__
we need to define several parameters, and then set them on the data
request object.
.. code:: ipython3 .. code:: ipython3
@ -52,21 +121,52 @@ observations (datatype *obs*) and MetPy.
edexServer = "edex-cloud.unidata.ucar.edu" edexServer = "edex-cloud.unidata.ucar.edu"
DataAccessLayer.changeEDEXHost(edexServer) DataAccessLayer.changeEDEXHost(edexServer)
request = DataAccessLayer.newDataRequest("obs") request = DataAccessLayer.newDataRequest("obs")
availableProducts = DataAccessLayer.getAvailableParameters(request)
# define desired parameters
single_value_params = ["timeObs", "stationName", "longitude", "latitude", single_value_params = ["timeObs", "stationName", "longitude", "latitude",
"temperature", "dewpoint", "windDir", "temperature", "dewpoint", "windDir",
"windSpeed", "seaLevelPress"] "windSpeed"]
multi_value_params = ["presWeather", "skyCover", "skyLayerBase"] multi_value_params = ["skyCover"]
pres_weather, sky_cov, sky_layer_base = [],[],[]
params = single_value_params + multi_value_params
obs = dict({params: [] for params in params})
params = single_value_params + multi_value_params
# set all parameters on the request
request.setParameters(*(params)) request.setParameters(*(params))
3.2 Setting Connection Location Names
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
We are also going to define specific station IDs so that our plot is not
too cluttered.
.. code:: ipython3
# Define a list of station IDs to plot
selected = ['KPDX', 'KOKC', 'KICT', 'KGLD', 'KMEM', 'KBOS', 'KMIA', 'KMOB', 'KABQ', 'KPHX', 'KTTF',
'KORD', 'KBIL', 'KBIS', 'KCPR', 'KLAX', 'KATL', 'KMSP', 'KSLC', 'KDFW', 'KNYC', 'KPHL',
'KPIT', 'KIND', 'KOLY', 'KSYR', 'KLEX', 'KCHS', 'KTLH', 'KHOU', 'KGJT', 'KLBB', 'KLSV',
'KGRB', 'KCLT', 'KLNK', 'KDSM', 'KBOI', 'KFSD', 'KRAP', 'KRIC', 'KJAN', 'KHSV', 'KCRW',
'KSAT', 'KBUY', 'K0CO', 'KZPC', 'KVIH', 'KBDG', 'KMLF', 'KELY', 'KWMC', 'KOTH', 'KCAR',
'KLMT', 'KRDM', 'KPDT', 'KSEA', 'KUIL', 'KEPH', 'KPUW', 'KCOE', 'KMLP', 'KPIH', 'KIDA',
'KMSO', 'KACV', 'KHLN', 'KBIL', 'KOLF', 'KRUT', 'KPSM', 'KJAX', 'KTPA', 'KSHV', 'KMSY',
'KELP', 'KRNO', 'KFAT', 'KSFO', 'KNYL', 'KBRO', 'KMRF', 'KDRT', 'KFAR', 'KBDE', 'KDLH',
'KHOT', 'KLBF', 'KFLG', 'KCLE', 'KUNV']
# set the location names to the desired station IDs
request.setLocationNames(*(selected)) request.setLocationNames(*(selected))
Here we use the Python-AWIPS class **TimeRange** to prepare a beginning `Top <https://unidata.github.io/python-awips/examples/generated/METAR_Station_Plot_with_MetPy.html>`__
and end time span for requesting observations (the last hour):
--------------
4 Filter by Time
----------------
Here we decide how much data we want to pull from EDEX. By default well
request 1 hour, but that value can easily be modified by `adjusting the
``timedelta(hours = 1)`` <https://docs.python.org/3/library/datetime.html#timedelta-objects>`__
in line ``2``. The more data we request, the longer this section will
take to run.
.. code:: ipython3 .. code:: ipython3
@ -77,19 +177,64 @@ and end time span for requesting observations (the last hour):
endRange = datetime.strptime( start + ":59:59", "%Y-%m-%d %H:%M:%S") endRange = datetime.strptime( start + ":59:59", "%Y-%m-%d %H:%M:%S")
timerange = TimeRange(beginRange, endRange) timerange = TimeRange(beginRange, endRange)
response = DataAccessLayer.getGeometryData(request,timerange) `Top <https://unidata.github.io/python-awips/examples/generated/METAR_Station_Plot_with_MetPy.html>`__
--------------
5 Use the Data!
---------------
5.1 Get the Data!
~~~~~~~~~~~~~~~~~
Now that we have our ``request`` and TimeRange ``timerange`` objects
ready, were ready to get the data array from EDEX.
.. code:: ipython3 .. code:: ipython3
# Get response
response = DataAccessLayer.getGeometryData(request,timerange)
5.2 Extract all Parameters
~~~~~~~~~~~~~~~~~~~~~~~~~~
In this section we start gathering all the information well need to
properly display our data. First we create an empty dictionary and array
to keep track of all data and unique station IDs. We also create a
boolean to help us only grab the first entry for ``skyCover`` related to
a station id.
.. container:: alert-info
::
<b>Note:</b> The way the data responses are returned, we recieve many <code>skyCover</code> entries for each station ID, but we only want to keep track of the most recent one (first one returned).
After defining these variables, we are ready to start looping through
our response data. If the response is an entry of ``skyCover``, and this
is a new station id, then set the skyCover value in the obs dictionary.
If this is not a skyCover entry, then explicitly set the ``timeObs``
variable (because we have to manipulate it slightly), and dynamically
set all the remaining parameters.
.. code:: ipython3
# define a dictionary and array that will be populated from our for loop below
obs = dict({params: [] for params in params})
station_names = [] station_names = []
# only grab the first skyCover record related to a station
new_station_id = True
# cycle through all the data in the response
for ob in response: for ob in response:
avail_params = ob.getParameters() avail_params = ob.getParameters()
if "presWeather" in avail_params: # if it has cloud information and is the first entry for this station id
pres_weather.append(ob.getString("presWeather")) if "skyCover" in avail_params and new_station_id:
elif "skyCover" in avail_params and "skyLayerBase" in avail_params: # store the associated cloud cover int for the skyCover string
sky_cov.append(ob.getString("skyCover")) obs['skyCover'].append(get_cloud_cover(ob.getString("skyCover")))
sky_layer_base.append(ob.getNumber("skyLayerBase")) new_station_id = False
else: elif "stationName" in avail_params:
new_station_id=True
# If we already have a record for this stationName, skip # If we already have a record for this stationName, skip
if ob.getString('stationName') not in station_names: if ob.getString('stationName') not in station_names:
station_names.append(ob.getString('stationName')) station_names.append(ob.getString('stationName'))
@ -105,20 +250,13 @@ and end time span for requesting observations (the last hour):
else: else:
obs[param].append(None) obs[param].append(None)
obs['presWeather'].append(pres_weather); 5.3 Populate the Data Dictionary
obs['skyCover'].append(sky_cov); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
obs['skyLayerBase'].append(sky_layer_base);
pres_weather = []
sky_cov = []
sky_layer_base = []
Next grab the simple variables out of the data we have (attaching Next grab the variables out of the obs dictionary we just populated,
correct units), and put them into a dictionary that we will hand the attach correct units, (calculate their components, in the instance of
plotting function later: wind) and put them into a new dictionary that we will hand the plotting
function later.
- Get wind components from speed and direction
- Convert cloud fraction values to integer codes [0 - 8]
- Map METAR weather codes to WMO codes for weather symbols
.. code:: ipython3 .. code:: ipython3
@ -128,7 +266,6 @@ plotting function later:
data['longitude'] = np.array(obs['longitude']) data['longitude'] = np.array(obs['longitude'])
data['air_temperature'] = np.array(obs['temperature'], dtype=float)* units.degC data['air_temperature'] = np.array(obs['temperature'], dtype=float)* units.degC
data['dew_point_temperature'] = np.array(obs['dewpoint'], dtype=float)* units.degC data['dew_point_temperature'] = np.array(obs['dewpoint'], dtype=float)* units.degC
data['air_pressure_at_sea_level'] = np.array(obs['seaLevelPress'])* units('mbar')
direction = np.array(obs['windDir']) direction = np.array(obs['windDir'])
direction[direction == -9999.0] = 'nan' direction[direction == -9999.0] = 'nan'
@ -136,37 +273,35 @@ plotting function later:
u, v = wind_components(np.array(obs['windSpeed']) * units('knots'), u, v = wind_components(np.array(obs['windSpeed']) * units('knots'),
direction * units.degree) direction * units.degree)
data['eastward_wind'], data['northward_wind'] = u, v data['eastward_wind'], data['northward_wind'] = u, v
data['cloud_coverage'] = [int(get_cloud_cover(x)*8) for x in obs['skyCover']] data['cloud_coverage'] = np.array(obs['skyCover'])
data['present_weather'] = obs['presWeather']
.. code:: ipython3 `Top <https://unidata.github.io/python-awips/examples/generated/METAR_Station_Plot_with_MetPy.html>`__
print(obs['stationName']) --------------
6 Plot the Data!
----------------
.. parsed-literal:: Now we have all the data we need to create our plot! First well assign
a projection and create our figure and axes.
['K0CO', 'KHOT', 'KSHV', 'KIND', 'KBDE', 'KPSM', 'KORD', 'KDFW', 'KPHL', 'KTTF', 'KBDG', 'KOLY', 'KNYC', 'KABQ', 'KLEX', 'KDRT', 'KELP', 'KRUT', 'KRIC', 'KPIT', 'KMSP', 'KHSV', 'KUNV', 'KSAT', 'KCLE', 'KPHX', 'KMIA', 'KBOI', 'KBRO', 'KLAX', 'KLBB', 'KMSO', 'KPDX', 'KTLH', 'KUIL', 'KTPA', 'KVIH', 'KBIL', 'KMLF', 'KCPR', 'KATL', 'KBIS', 'KCLT', 'KOKC', 'KRAP', 'KACV', 'KEPH', 'KELY', 'KFAR', 'KFAT', 'KMSY', 'KOLF', 'KPDT', 'KLMT', 'KHLN', 'KHOU', 'KICT', 'KIDA', 'KPIH', 'KPUW', 'KGJT', 'KGLD', 'KGRB', 'KLBF', 'KMLP', 'KBOS', 'KSYR', 'KDLH', 'KCOE', 'KOTH', 'KCRW', 'KSEA', 'KCAR', 'KDSM', 'KJAN', 'KSLC', 'KBUY', 'KLNK', 'KMEM', 'KNYL', 'KRDM', 'KCHS', 'KFSD', 'KJAX', 'KMOB', 'KRNO', 'KSFO', 'KWMC', 'KFLG', 'KLSV'] Next, we use Cartopy to add common features (land, ocean, lakes,
borders, etc) to help give us a more contextual map of the United States
to plot the METAR stations on. We create and add a title for our figure
as well.
Additionally, we use `MetPys
StationPlotLayout <https://unidata.github.io/MetPy/latest/api/generated/metpy.plots.StationPlotLayout.html>`__
to instantiate a custom layout and define all the attributes we want
displayed. We need to then set the data dictionary (containing all of
our data values) on the custom layout so it knows what to draw.
MetPy Surface Obs Plot Finally, we display the plot!
----------------------
.. code:: ipython3 .. code:: ipython3
proj = ccrs.LambertConformal(central_longitude=-95, central_latitude=35, proj = ccrs.LambertConformal(central_longitude=-95, central_latitude=35,
standard_parallels=[35]) standard_parallels=[35])
# Change the DPI of the figure
plt.rcParams['savefig.dpi'] = 255
# Winds, temps, dewpoint, station id
custom_layout = StationPlotLayout()
custom_layout.add_barb('eastward_wind', 'northward_wind', units='knots')
custom_layout.add_value('NW', 'air_temperature', fmt='.0f', units='degF', color='darkred')
custom_layout.add_value('SW', 'dew_point_temperature', fmt='.0f', units='degF', color='darkgreen')
custom_layout.add_value('E', 'precipitation', fmt='0.1f', units='inch', color='blue')
# Create the figure # Create the figure
fig = plt.figure(figsize=(20, 10)) fig = plt.figure(figsize=(20, 10))
ax = fig.add_subplot(1, 1, 1, projection=proj) ax = fig.add_subplot(1, 1, 1, projection=proj)
@ -183,13 +318,87 @@ MetPy Surface Obs Plot
ax.set_extent((-118, -73, 23, 50)) ax.set_extent((-118, -73, 23, 50))
ax.set_title(str(ob.getDataTime()) + " | METAR | " + edexServer) ax.set_title(str(ob.getDataTime()) + " | METAR | " + edexServer)
# Winds, temps, dewpoint, station id
custom_layout = StationPlotLayout()
custom_layout.add_barb('eastward_wind', 'northward_wind', units='knots')
custom_layout.add_value('NW', 'air_temperature', fmt='.0f', units='degF', color='darkred')
custom_layout.add_value('SW', 'dew_point_temperature', fmt='.0f', units='degF', color='darkgreen')
custom_layout.add_symbol('C', 'cloud_coverage', sky_cover)
stationplot = StationPlot(ax, data['longitude'], data['latitude'], clip_on=True, stationplot = StationPlot(ax, data['longitude'], data['latitude'], clip_on=True,
transform=ccrs.PlateCarree(), fontsize=10) transform=ccrs.PlateCarree(), fontsize=10)
stationplot.plot_text((2, 0), data['stid']) stationplot.plot_text((2, 0), data['stid'])
custom_layout.plot(stationplot, data) custom_layout.plot(stationplot, data)
plt.show() plt.show()
.. image:: METAR_Station_Plot_with_MetPy_files/METAR_Station_Plot_with_MetPy_10_0.png .. image:: METAR_Station_Plot_with_MetPy_files/METAR_Station_Plot_with_MetPy_26_0.png
`Top <https://unidata.github.io/python-awips/examples/generated/METAR_Station_Plot_with_MetPy.html>`__
--------------
7 See Also
----------
- `Aviation Weather Center Static METAR Plots
Information <https://www.aviationweather.gov/metar/help?page=plot>`__
7.1 Related Notebooks
~~~~~~~~~~~~~~~~~~~~~
- `Grid Levels and
Parameters <http://unidata.github.io/python-awips/examples/generated/Grid_Levels_and_Parameters.html>`__
- `Colored Surface Temperature
Plot <http://unidata.github.io/python-awips/examples/generated/Colored_Surface_Temperature_Plot.html>`__
7.2 Additional Documentation
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
**python-awips:**
- `DataAccessLayer.changeEDEXHost() <http://unidata.github.io/python-awips/api/DataAccessLayer.html#awips.dataaccess.DataAccessLayer.changeEDEXHost>`__
- `DataAccessLayer.newDataRequest() <http://unidata.github.io/python-awips/api/DataAccessLayer.html#awips.dataaccess.DataAccessLayer.newDataRequest>`__
- `IDataRequest <http://unidata.github.io/python-awips/api/IDataRequest.html>`__
- `DataAccessLayer.getGeometryData <http://unidata.github.io/python-awips/api/PyGeometryData.html>`__
**datetime:**
- `datetime.datetime <https://docs.python.org/3/library/datetime.html#datetime-objects>`__
- `datetime.utcnow() <https://docs.python.org/3/library/datetime.html?#datetime.datetime.utcnow>`__
- `datetime.timedelta <https://docs.python.org/3/library/datetime.html#timedelta-objects>`__
- `datetime.strftime() and
datetime.strptime() <https://docs.python.org/3/library/datetime.html#strftime-and-strptime-behavior>`__
**numpy:**
- `np.array <https://numpy.org/doc/stable/reference/generated/numpy.array.html>`__
**cartopy:**
- `cartopy projection
list <https://scitools.org.uk/cartopy/docs/v0.14/crs/projections.html?#cartopy-projection-list>`__
- `cartopy feature
interface <https://scitools.org.uk/cartopy/docs/v0.14/matplotlib/feature_interface.html>`__
**matplotlib:**
- `matplotlib.pyplot() <https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.html>`__
- `matplotlib.pyplot.figure() <https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.figure.html>`__
- `matplotlib.pyplot.figure.add_subplot <https://matplotlib.org/stable/api/figure_api.html#matplotlib.figure.Figure.add_subplot>`__
- `ax.set_extent <https://matplotlib.org/stable/api/image_api.html?highlight=set_extent#matplotlib.image.AxesImage.set_extent>`__
- `ax.set_title <https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.set_title.html>`__
**metpy:**
- `metpy.calc.wind_components <https://unidata.github.io/MetPy/latest/api/generated/metpy.calc.wind_components.html>`__
- `metpy.plots.StationPlot() <https://unidata.github.io/MetPy/latest/api/generated/metpy.plots.StationPlot.html>`__
- `metpy.plots.StationPlotLayout() <https://unidata.github.io/MetPy/latest/api/generated/metpy.plots.StationPlotLayout.html>`__
- `metpy.units <https://unidata.github.io/MetPy/latest/api/generated/metpy.units.html>`__
`Top <https://unidata.github.io/python-awips/examples/generated/METAR_Station_Plot_with_MetPy.html>`__
--------------

View file

@ -0,0 +1,134 @@
/*
* _sphinx_javascript_frameworks_compat.js
* ~~~~~~~~~~
*
* Compatability shim for jQuery and underscores.js.
*
* WILL BE REMOVED IN Sphinx 6.0
* xref RemovedInSphinx60Warning
*
*/
/**
* select a different prefix for underscore
*/
$u = _.noConflict();
/**
* small helper function to urldecode strings
*
* See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/decodeURIComponent#Decoding_query_parameters_from_a_URL
*/
jQuery.urldecode = function(x) {
if (!x) {
return x
}
return decodeURIComponent(x.replace(/\+/g, ' '));
};
/**
* small helper function to urlencode strings
*/
jQuery.urlencode = encodeURIComponent;
/**
* This function returns the parsed url parameters of the
* current request. Multiple values per key are supported,
* it will always return arrays of strings for the value parts.
*/
jQuery.getQueryParameters = function(s) {
if (typeof s === 'undefined')
s = document.location.search;
var parts = s.substr(s.indexOf('?') + 1).split('&');
var result = {};
for (var i = 0; i < parts.length; i++) {
var tmp = parts[i].split('=', 2);
var key = jQuery.urldecode(tmp[0]);
var value = jQuery.urldecode(tmp[1]);
if (key in result)
result[key].push(value);
else
result[key] = [value];
}
return result;
};
/**
* highlight a given string on a jquery object by wrapping it in
* span elements with the given class name.
*/
jQuery.fn.highlightText = function(text, className) {
function highlight(node, addItems) {
if (node.nodeType === 3) {
var val = node.nodeValue;
var pos = val.toLowerCase().indexOf(text);
if (pos >= 0 &&
!jQuery(node.parentNode).hasClass(className) &&
!jQuery(node.parentNode).hasClass("nohighlight")) {
var span;
var isInSVG = jQuery(node).closest("body, svg, foreignObject").is("svg");
if (isInSVG) {
span = document.createElementNS("http://www.w3.org/2000/svg", "tspan");
} else {
span = document.createElement("span");
span.className = className;
}
span.appendChild(document.createTextNode(val.substr(pos, text.length)));
node.parentNode.insertBefore(span, node.parentNode.insertBefore(
document.createTextNode(val.substr(pos + text.length)),
node.nextSibling));
node.nodeValue = val.substr(0, pos);
if (isInSVG) {
var rect = document.createElementNS("http://www.w3.org/2000/svg", "rect");
var bbox = node.parentElement.getBBox();
rect.x.baseVal.value = bbox.x;
rect.y.baseVal.value = bbox.y;
rect.width.baseVal.value = bbox.width;
rect.height.baseVal.value = bbox.height;
rect.setAttribute('class', className);
addItems.push({
"parent": node.parentNode,
"target": rect});
}
}
}
else if (!jQuery(node).is("button, select, textarea")) {
jQuery.each(node.childNodes, function() {
highlight(this, addItems);
});
}
}
var addItems = [];
var result = this.each(function() {
highlight(this, addItems);
});
for (var i = 0; i < addItems.length; ++i) {
jQuery(addItems[i].parent).before(addItems[i].target);
}
return result;
};
/*
* backward compatibility for jQuery.browser
* This will be supported until firefox bug is fixed.
*/
if (!jQuery.browser) {
jQuery.uaMatch = function(ua) {
ua = ua.toLowerCase();
var match = /(chrome)[ \/]([\w.]+)/.exec(ua) ||
/(webkit)[ \/]([\w.]+)/.exec(ua) ||
/(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) ||
/(msie) ([\w.]+)/.exec(ua) ||
ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) ||
[];
return {
browser: match[ 1 ] || "",
version: match[ 2 ] || "0"
};
};
jQuery.browser = {};
jQuery.browser[jQuery.uaMatch(navigator.userAgent).browser] = true;
}

View file

@ -222,7 +222,7 @@ table.modindextable td {
/* -- general body styles --------------------------------------------------- */ /* -- general body styles --------------------------------------------------- */
div.body { div.body {
min-width: 450px; min-width: 360px;
max-width: 800px; max-width: 800px;
} }
@ -335,13 +335,13 @@ p.sidebar-title {
font-weight: bold; font-weight: bold;
} }
div.admonition, div.topic, blockquote { div.admonition, div.topic, aside.topic, blockquote {
clear: left; clear: left;
} }
/* -- topics ---------------------------------------------------------------- */ /* -- topics ---------------------------------------------------------------- */
div.topic { div.topic, aside.topic {
border: 1px solid #ccc; border: 1px solid #ccc;
padding: 7px; padding: 7px;
margin: 10px 0 10px 0; margin: 10px 0 10px 0;
@ -380,6 +380,7 @@ div.body p.centered {
div.sidebar > :last-child, div.sidebar > :last-child,
aside.sidebar > :last-child, aside.sidebar > :last-child,
div.topic > :last-child, div.topic > :last-child,
aside.topic > :last-child,
div.admonition > :last-child { div.admonition > :last-child {
margin-bottom: 0; margin-bottom: 0;
} }
@ -387,6 +388,7 @@ div.admonition > :last-child {
div.sidebar::after, div.sidebar::after,
aside.sidebar::after, aside.sidebar::after,
div.topic::after, div.topic::after,
aside.topic::after,
div.admonition::after, div.admonition::after,
blockquote::after { blockquote::after {
display: block; display: block;
@ -428,10 +430,6 @@ table.docutils td, table.docutils th {
border-bottom: 1px solid #aaa; border-bottom: 1px solid #aaa;
} }
table.footnote td, table.footnote th {
border: 0 !important;
}
th { th {
text-align: left; text-align: left;
padding-right: 5px; padding-right: 5px;
@ -615,6 +613,7 @@ ul.simple p {
margin-bottom: 0; margin-bottom: 0;
} }
/* Docutils 0.17 and older (footnotes & citations) */
dl.footnote > dt, dl.footnote > dt,
dl.citation > dt { dl.citation > dt {
float: left; float: left;
@ -632,6 +631,33 @@ dl.citation > dd:after {
clear: both; clear: both;
} }
/* Docutils 0.18+ (footnotes & citations) */
aside.footnote > span,
div.citation > span {
float: left;
}
aside.footnote > span:last-of-type,
div.citation > span:last-of-type {
padding-right: 0.5em;
}
aside.footnote > p {
margin-left: 2em;
}
div.citation > p {
margin-left: 4em;
}
aside.footnote > p:last-of-type,
div.citation > p:last-of-type {
margin-bottom: 0em;
}
aside.footnote > p:last-of-type:after,
div.citation > p:last-of-type:after {
content: "";
clear: both;
}
/* Footnotes & citations ends */
dl.field-list { dl.field-list {
display: grid; display: grid;
grid-template-columns: fit-content(30%) auto; grid-template-columns: fit-content(30%) auto;

View file

@ -2,357 +2,263 @@
* doctools.js * doctools.js
* ~~~~~~~~~~~ * ~~~~~~~~~~~
* *
* Sphinx JavaScript utilities for all documentation. * Base JavaScript utilities for all Sphinx HTML documentation.
* *
* :copyright: Copyright 2007-2022 by the Sphinx team, see AUTHORS. * :copyright: Copyright 2007-2022 by the Sphinx team, see AUTHORS.
* :license: BSD, see LICENSE for details. * :license: BSD, see LICENSE for details.
* *
*/ */
"use strict";
/** const _ready = (callback) => {
* select a different prefix for underscore if (document.readyState !== "loading") {
*/ callback();
$u = _.noConflict(); } else {
document.addEventListener("DOMContentLoaded", callback);
/**
* make the code below compatible with browsers without
* an installed firebug like debugger
if (!window.console || !console.firebug) {
var names = ["log", "debug", "info", "warn", "error", "assert", "dir",
"dirxml", "group", "groupEnd", "time", "timeEnd", "count", "trace",
"profile", "profileEnd"];
window.console = {};
for (var i = 0; i < names.length; ++i)
window.console[names[i]] = function() {};
}
*/
/**
* small helper function to urldecode strings
*
* See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/decodeURIComponent#Decoding_query_parameters_from_a_URL
*/
jQuery.urldecode = function(x) {
if (!x) {
return x
} }
return decodeURIComponent(x.replace(/\+/g, ' '));
}; };
/** /**
* small helper function to urlencode strings * highlight a given string on a node by wrapping it in
*/
jQuery.urlencode = encodeURIComponent;
/**
* This function returns the parsed url parameters of the
* current request. Multiple values per key are supported,
* it will always return arrays of strings for the value parts.
*/
jQuery.getQueryParameters = function(s) {
if (typeof s === 'undefined')
s = document.location.search;
var parts = s.substr(s.indexOf('?') + 1).split('&');
var result = {};
for (var i = 0; i < parts.length; i++) {
var tmp = parts[i].split('=', 2);
var key = jQuery.urldecode(tmp[0]);
var value = jQuery.urldecode(tmp[1]);
if (key in result)
result[key].push(value);
else
result[key] = [value];
}
return result;
};
/**
* highlight a given string on a jquery object by wrapping it in
* span elements with the given class name. * span elements with the given class name.
*/ */
jQuery.fn.highlightText = function(text, className) { const _highlight = (node, addItems, text, className) => {
function highlight(node, addItems) { if (node.nodeType === Node.TEXT_NODE) {
if (node.nodeType === 3) { const val = node.nodeValue;
var val = node.nodeValue; const parent = node.parentNode;
var pos = val.toLowerCase().indexOf(text); const pos = val.toLowerCase().indexOf(text);
if (pos >= 0 && if (
!jQuery(node.parentNode).hasClass(className) && pos >= 0 &&
!jQuery(node.parentNode).hasClass("nohighlight")) { !parent.classList.contains(className) &&
var span; !parent.classList.contains("nohighlight")
var isInSVG = jQuery(node).closest("body, svg, foreignObject").is("svg"); ) {
let span;
const closestNode = parent.closest("body, svg, foreignObject");
const isInSVG = closestNode && closestNode.matches("svg");
if (isInSVG) { if (isInSVG) {
span = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); span = document.createElementNS("http://www.w3.org/2000/svg", "tspan");
} else { } else {
span = document.createElement("span"); span = document.createElement("span");
span.className = className; span.classList.add(className);
} }
span.appendChild(document.createTextNode(val.substr(pos, text.length))); span.appendChild(document.createTextNode(val.substr(pos, text.length)));
node.parentNode.insertBefore(span, node.parentNode.insertBefore( parent.insertBefore(
span,
parent.insertBefore(
document.createTextNode(val.substr(pos + text.length)), document.createTextNode(val.substr(pos + text.length)),
node.nextSibling)); node.nextSibling
)
);
node.nodeValue = val.substr(0, pos); node.nodeValue = val.substr(0, pos);
if (isInSVG) { if (isInSVG) {
var rect = document.createElementNS("http://www.w3.org/2000/svg", "rect"); const rect = document.createElementNS(
var bbox = node.parentElement.getBBox(); "http://www.w3.org/2000/svg",
"rect"
);
const bbox = parent.getBBox();
rect.x.baseVal.value = bbox.x; rect.x.baseVal.value = bbox.x;
rect.y.baseVal.value = bbox.y; rect.y.baseVal.value = bbox.y;
rect.width.baseVal.value = bbox.width; rect.width.baseVal.value = bbox.width;
rect.height.baseVal.value = bbox.height; rect.height.baseVal.value = bbox.height;
rect.setAttribute('class', className); rect.setAttribute("class", className);
addItems.push({ addItems.push({ parent: parent, target: rect });
"parent": node.parentNode,
"target": rect});
} }
} }
} else if (node.matches && !node.matches("button, select, textarea")) {
node.childNodes.forEach((el) => _highlight(el, addItems, text, className));
} }
else if (!jQuery(node).is("button, select, textarea")) {
jQuery.each(node.childNodes, function() {
highlight(this, addItems);
});
}
}
var addItems = [];
var result = this.each(function() {
highlight(this, addItems);
});
for (var i = 0; i < addItems.length; ++i) {
jQuery(addItems[i].parent).before(addItems[i].target);
}
return result;
}; };
const _highlightText = (thisNode, text, className) => {
/* let addItems = [];
* backward compatibility for jQuery.browser _highlight(thisNode, addItems, text, className);
* This will be supported until firefox bug is fixed. addItems.forEach((obj) =>
*/ obj.parent.insertAdjacentElement("beforebegin", obj.target)
if (!jQuery.browser) { );
jQuery.uaMatch = function(ua) { };
ua = ua.toLowerCase();
var match = /(chrome)[ \/]([\w.]+)/.exec(ua) ||
/(webkit)[ \/]([\w.]+)/.exec(ua) ||
/(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) ||
/(msie) ([\w.]+)/.exec(ua) ||
ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) ||
[];
return {
browser: match[ 1 ] || "",
version: match[ 2 ] || "0"
};
};
jQuery.browser = {};
jQuery.browser[jQuery.uaMatch(navigator.userAgent).browser] = true;
}
/** /**
* Small JavaScript module for the documentation. * Small JavaScript module for the documentation.
*/ */
var Documentation = { const Documentation = {
init: () => {
init : function() { Documentation.highlightSearchWords();
this.fixFirefoxAnchorBug(); Documentation.initDomainIndexTable();
this.highlightSearchWords(); Documentation.initOnKeyListeners();
this.initIndexTable();
this.initOnKeyListeners();
}, },
/** /**
* i18n support * i18n support
*/ */
TRANSLATIONS : {}, TRANSLATIONS: {},
PLURAL_EXPR : function(n) { return n === 1 ? 0 : 1; }, PLURAL_EXPR: (n) => (n === 1 ? 0 : 1),
LOCALE : 'unknown', LOCALE: "unknown",
// gettext and ngettext don't access this so that the functions // gettext and ngettext don't access this so that the functions
// can safely bound to a different name (_ = Documentation.gettext) // can safely bound to a different name (_ = Documentation.gettext)
gettext : function(string) { gettext: (string) => {
var translated = Documentation.TRANSLATIONS[string]; const translated = Documentation.TRANSLATIONS[string];
if (typeof translated === 'undefined') switch (typeof translated) {
return string; case "undefined":
return (typeof translated === 'string') ? translated : translated[0]; return string; // no translation
case "string":
return translated; // translation exists
default:
return translated[0]; // (singular, plural) translation tuple exists
}
}, },
ngettext : function(singular, plural, n) { ngettext: (singular, plural, n) => {
var translated = Documentation.TRANSLATIONS[singular]; const translated = Documentation.TRANSLATIONS[singular];
if (typeof translated === 'undefined') if (typeof translated !== "undefined")
return (n == 1) ? singular : plural; return translated[Documentation.PLURAL_EXPR(n)];
return translated[Documentation.PLURALEXPR(n)]; return n === 1 ? singular : plural;
}, },
addTranslations : function(catalog) { addTranslations: (catalog) => {
for (var key in catalog.messages) Object.assign(Documentation.TRANSLATIONS, catalog.messages);
this.TRANSLATIONS[key] = catalog.messages[key]; Documentation.PLURAL_EXPR = new Function(
this.PLURAL_EXPR = new Function('n', 'return +(' + catalog.plural_expr + ')'); "n",
this.LOCALE = catalog.locale; `return (${catalog.plural_expr})`
}, );
Documentation.LOCALE = catalog.locale;
/**
* add context elements like header anchor links
*/
addContextElements : function() {
$('div[id] > :header:first').each(function() {
$('<a class="headerlink">\u00B6</a>').
attr('href', '#' + this.id).
attr('title', _('Permalink to this headline')).
appendTo(this);
});
$('dt[id]').each(function() {
$('<a class="headerlink">\u00B6</a>').
attr('href', '#' + this.id).
attr('title', _('Permalink to this definition')).
appendTo(this);
});
},
/**
* workaround a firefox stupidity
* see: https://bugzilla.mozilla.org/show_bug.cgi?id=645075
*/
fixFirefoxAnchorBug : function() {
if (document.location.hash && $.browser.mozilla)
window.setTimeout(function() {
document.location.href += '';
}, 10);
}, },
/** /**
* highlight the search words provided in the url in the text * highlight the search words provided in the url in the text
*/ */
highlightSearchWords : function() { highlightSearchWords: () => {
var params = $.getQueryParameters(); const highlight =
var terms = (params.highlight) ? params.highlight[0].split(/\s+/) : []; new URLSearchParams(window.location.search).get("highlight") || "";
if (terms.length) { const terms = highlight.toLowerCase().split(/\s+/).filter(x => x);
var body = $('div.body'); if (terms.length === 0) return; // nothing to do
if (!body.length) {
body = $('body');
}
window.setTimeout(function() {
$.each(terms, function() {
body.highlightText(this.toLowerCase(), 'highlighted');
});
}, 10);
$('<p class="highlight-link"><a href="javascript:Documentation.' +
'hideSearchWords()">' + _('Hide Search Matches') + '</a></p>')
.appendTo($('#searchbox'));
}
},
/** // There should never be more than one element matching "div.body"
* init the domain index toggle buttons const divBody = document.querySelectorAll("div.body");
*/ const body = divBody.length ? divBody[0] : document.querySelector("body");
initIndexTable : function() { window.setTimeout(() => {
var togglers = $('img.toggler').click(function() { terms.forEach((term) => _highlightText(body, term, "highlighted"));
var src = $(this).attr('src'); }, 10);
var idnum = $(this).attr('id').substr(7);
$('tr.cg-' + idnum).toggle(); const searchBox = document.getElementById("searchbox");
if (src.substr(-9) === 'minus.png') if (searchBox === null) return;
$(this).attr('src', src.substr(0, src.length-9) + 'plus.png'); searchBox.appendChild(
else document
$(this).attr('src', src.substr(0, src.length-8) + 'minus.png'); .createRange()
}).css('display', ''); .createContextualFragment(
if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) { '<p class="highlight-link">' +
togglers.click(); '<a href="javascript:Documentation.hideSearchWords()">' +
} Documentation.gettext("Hide Search Matches") +
"</a></p>"
)
);
}, },
/** /**
* helper function to hide the search marks again * helper function to hide the search marks again
*/ */
hideSearchWords : function() { hideSearchWords: () => {
$('#searchbox .highlight-link').fadeOut(300); document
$('span.highlighted').removeClass('highlighted'); .querySelectorAll("#searchbox .highlight-link")
var url = new URL(window.location); .forEach((el) => el.remove());
url.searchParams.delete('highlight'); document
window.history.replaceState({}, '', url); .querySelectorAll("span.highlighted")
.forEach((el) => el.classList.remove("highlighted"));
const url = new URL(window.location);
url.searchParams.delete("highlight");
window.history.replaceState({}, "", url);
}, },
/** /**
* helper function to focus on search bar * helper function to focus on search bar
*/ */
focusSearchBar : function() { focusSearchBar: () => {
$('input[name=q]').first().focus(); document.querySelectorAll("input[name=q]")[0]?.focus();
}, },
/** /**
* make the url absolute * Initialise the domain index toggle buttons
*/ */
makeURL : function(relativeURL) { initDomainIndexTable: () => {
return DOCUMENTATION_OPTIONS.URL_ROOT + '/' + relativeURL; const toggler = (el) => {
const idNumber = el.id.substr(7);
const toggledRows = document.querySelectorAll(`tr.cg-${idNumber}`);
if (el.src.substr(-9) === "minus.png") {
el.src = `${el.src.substr(0, el.src.length - 9)}plus.png`;
toggledRows.forEach((el) => (el.style.display = "none"));
} else {
el.src = `${el.src.substr(0, el.src.length - 8)}minus.png`;
toggledRows.forEach((el) => (el.style.display = ""));
}
};
const togglerElements = document.querySelectorAll("img.toggler");
togglerElements.forEach((el) =>
el.addEventListener("click", (event) => toggler(event.currentTarget))
);
togglerElements.forEach((el) => (el.style.display = ""));
if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) togglerElements.forEach(toggler);
}, },
/** initOnKeyListeners: () => {
* get the current relative url
*/
getCurrentURL : function() {
var path = document.location.pathname;
var parts = path.split(/\//);
$.each(DOCUMENTATION_OPTIONS.URL_ROOT.split(/\//), function() {
if (this === '..')
parts.pop();
});
var url = parts.join('/');
return path.substring(url.lastIndexOf('/') + 1, path.length - 1);
},
initOnKeyListeners: function() {
// only install a listener if it is really needed // only install a listener if it is really needed
if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS && if (
!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) !DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS &&
!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS
)
return; return;
$(document).keydown(function(event) { const blacklistedElements = new Set([
var activeElementType = document.activeElement.tagName; "TEXTAREA",
// don't navigate when in search box, textarea, dropdown or button "INPUT",
if (activeElementType !== 'TEXTAREA' && activeElementType !== 'INPUT' && activeElementType !== 'SELECT' "SELECT",
&& activeElementType !== 'BUTTON') { "BUTTON",
if (event.altKey || event.ctrlKey || event.metaKey) ]);
return; document.addEventListener("keydown", (event) => {
if (blacklistedElements.has(document.activeElement.tagName)) return; // bail for input elements
if (event.altKey || event.ctrlKey || event.metaKey) return; // bail with special keys
if (!event.shiftKey) { if (!event.shiftKey) {
switch (event.key) { switch (event.key) {
case 'ArrowLeft': case "ArrowLeft":
if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break;
break;
var prevHref = $('link[rel="prev"]').prop('href'); const prevLink = document.querySelector('link[rel="prev"]');
if (prevHref) { if (prevLink && prevLink.href) {
window.location.href = prevHref; window.location.href = prevLink.href;
return false; event.preventDefault();
} }
break; break;
case 'ArrowRight': case "ArrowRight":
if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break;
break;
var nextHref = $('link[rel="next"]').prop('href'); const nextLink = document.querySelector('link[rel="next"]');
if (nextHref) { if (nextLink && nextLink.href) {
window.location.href = nextHref; window.location.href = nextLink.href;
return false; event.preventDefault();
} }
break; break;
case 'Escape': case "Escape":
if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) break;
break;
Documentation.hideSearchWords(); Documentation.hideSearchWords();
return false; event.preventDefault();
} }
} }
// some keyboard layouts may need Shift to get / // some keyboard layouts may need Shift to get /
switch (event.key) { switch (event.key) {
case '/': case "/":
if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) break;
break;
Documentation.focusSearchBar(); Documentation.focusSearchBar();
return false; event.preventDefault();
}
} }
}); });
} },
}; };
// quick alias for translations // quick alias for translations
_ = Documentation.gettext; const _ = Documentation.gettext;
$(document).ready(function() { _ready(Documentation.init);
Documentation.init();
});

View file

@ -1,7 +1,7 @@
var DOCUMENTATION_OPTIONS = { var DOCUMENTATION_OPTIONS = {
URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'), URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'),
VERSION: '', VERSION: '',
LANGUAGE: 'None', LANGUAGE: 'en',
COLLAPSE_INDEX: false, COLLAPSE_INDEX: false,
BUILDER: 'html', BUILDER: 'html',
FILE_SUFFIX: '.html', FILE_SUFFIX: '.html',
@ -10,5 +10,5 @@ var DOCUMENTATION_OPTIONS = {
SOURCELINK_SUFFIX: '.txt', SOURCELINK_SUFFIX: '.txt',
NAVIGATION_WITH_KEYS: false, NAVIGATION_WITH_KEYS: false,
SHOW_SEARCH_SUMMARY: true, SHOW_SEARCH_SUMMARY: true,
ENABLE_SEARCH_SHORTCUTS: true, ENABLE_SEARCH_SHORTCUTS: false,
}; };

View file

@ -1,15 +1,15 @@
/*! /*!
* jQuery JavaScript Library v3.5.1 * jQuery JavaScript Library v3.6.0
* https://jquery.com/ * https://jquery.com/
* *
* Includes Sizzle.js * Includes Sizzle.js
* https://sizzlejs.com/ * https://sizzlejs.com/
* *
* Copyright JS Foundation and other contributors * Copyright OpenJS Foundation and other contributors
* Released under the MIT license * Released under the MIT license
* https://jquery.org/license * https://jquery.org/license
* *
* Date: 2020-05-04T22:49Z * Date: 2021-03-02T17:08Z
*/ */
( function( global, factory ) { ( function( global, factory ) {
@ -80,7 +80,11 @@ var isFunction = function isFunction( obj ) {
// In some browsers, typeof returns "function" for HTML <object> elements // In some browsers, typeof returns "function" for HTML <object> elements
// (i.e., `typeof document.createElement( "object" ) === "function"`). // (i.e., `typeof document.createElement( "object" ) === "function"`).
// We don't want to classify *any* DOM node as a function. // We don't want to classify *any* DOM node as a function.
return typeof obj === "function" && typeof obj.nodeType !== "number"; // Support: QtWeb <=3.8.5, WebKit <=534.34, wkhtmltopdf tool <=0.12.5
// Plus for old WebKit, typeof returns "function" for HTML collections
// (e.g., `typeof document.getElementsByTagName("div") === "function"`). (gh-4756)
return typeof obj === "function" && typeof obj.nodeType !== "number" &&
typeof obj.item !== "function";
}; };
@ -147,7 +151,7 @@ function toType( obj ) {
var var
version = "3.5.1", version = "3.6.0",
// Define a local copy of jQuery // Define a local copy of jQuery
jQuery = function( selector, context ) { jQuery = function( selector, context ) {
@ -496,9 +500,9 @@ if ( typeof Symbol === "function" ) {
// Populate the class2type map // Populate the class2type map
jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ), jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ),
function( _i, name ) { function( _i, name ) {
class2type[ "[object " + name + "]" ] = name.toLowerCase(); class2type[ "[object " + name + "]" ] = name.toLowerCase();
} ); } );
function isArrayLike( obj ) { function isArrayLike( obj ) {
@ -518,14 +522,14 @@ function isArrayLike( obj ) {
} }
var Sizzle = var Sizzle =
/*! /*!
* Sizzle CSS Selector Engine v2.3.5 * Sizzle CSS Selector Engine v2.3.6
* https://sizzlejs.com/ * https://sizzlejs.com/
* *
* Copyright JS Foundation and other contributors * Copyright JS Foundation and other contributors
* Released under the MIT license * Released under the MIT license
* https://js.foundation/ * https://js.foundation/
* *
* Date: 2020-03-14 * Date: 2021-02-16
*/ */
( function( window ) { ( function( window ) {
var i, var i,
@ -1108,8 +1112,8 @@ support = Sizzle.support = {};
* @returns {Boolean} True iff elem is a non-HTML XML node * @returns {Boolean} True iff elem is a non-HTML XML node
*/ */
isXML = Sizzle.isXML = function( elem ) { isXML = Sizzle.isXML = function( elem ) {
var namespace = elem.namespaceURI, var namespace = elem && elem.namespaceURI,
docElem = ( elem.ownerDocument || elem ).documentElement; docElem = elem && ( elem.ownerDocument || elem ).documentElement;
// Support: IE <=8 // Support: IE <=8
// Assume HTML when documentElement doesn't yet exist, such as inside loading iframes // Assume HTML when documentElement doesn't yet exist, such as inside loading iframes
@ -3026,7 +3030,7 @@ function nodeName( elem, name ) {
return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();
}; }
var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i ); var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i );
@ -3997,8 +4001,8 @@ jQuery.extend( {
resolveContexts = Array( i ), resolveContexts = Array( i ),
resolveValues = slice.call( arguments ), resolveValues = slice.call( arguments ),
// the master Deferred // the primary Deferred
master = jQuery.Deferred(), primary = jQuery.Deferred(),
// subordinate callback factory // subordinate callback factory
updateFunc = function( i ) { updateFunc = function( i ) {
@ -4006,30 +4010,30 @@ jQuery.extend( {
resolveContexts[ i ] = this; resolveContexts[ i ] = this;
resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value; resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;
if ( !( --remaining ) ) { if ( !( --remaining ) ) {
master.resolveWith( resolveContexts, resolveValues ); primary.resolveWith( resolveContexts, resolveValues );
} }
}; };
}; };
// Single- and empty arguments are adopted like Promise.resolve // Single- and empty arguments are adopted like Promise.resolve
if ( remaining <= 1 ) { if ( remaining <= 1 ) {
adoptValue( singleValue, master.done( updateFunc( i ) ).resolve, master.reject, adoptValue( singleValue, primary.done( updateFunc( i ) ).resolve, primary.reject,
!remaining ); !remaining );
// Use .then() to unwrap secondary thenables (cf. gh-3000) // Use .then() to unwrap secondary thenables (cf. gh-3000)
if ( master.state() === "pending" || if ( primary.state() === "pending" ||
isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) { isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) {
return master.then(); return primary.then();
} }
} }
// Multiple arguments are aggregated like Promise.all array elements // Multiple arguments are aggregated like Promise.all array elements
while ( i-- ) { while ( i-- ) {
adoptValue( resolveValues[ i ], updateFunc( i ), master.reject ); adoptValue( resolveValues[ i ], updateFunc( i ), primary.reject );
} }
return master.promise(); return primary.promise();
} }
} ); } );
@ -5089,10 +5093,7 @@ function buildFragment( elems, context, scripts, selection, ignored ) {
} }
var var rtypenamespace = /^([^.]*)(?:\.(.+)|)/;
rkeyEvent = /^key/,
rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/,
rtypenamespace = /^([^.]*)(?:\.(.+)|)/;
function returnTrue() { function returnTrue() {
return true; return true;
@ -5656,7 +5657,13 @@ function leverageNative( el, type, expectSync ) {
// Cancel the outer synthetic event // Cancel the outer synthetic event
event.stopImmediatePropagation(); event.stopImmediatePropagation();
event.preventDefault(); event.preventDefault();
return result.value;
// Support: Chrome 86+
// In Chrome, if an element having a focusout handler is blurred by
// clicking outside of it, it invokes the handler synchronously. If
// that handler calls `.remove()` on the element, the data is cleared,
// leaving `result` undefined. We need to guard against this.
return result && result.value;
} }
// If this is an inner synthetic event for an event with a bubbling surrogate // If this is an inner synthetic event for an event with a bubbling surrogate
@ -5821,34 +5828,7 @@ jQuery.each( {
targetTouches: true, targetTouches: true,
toElement: true, toElement: true,
touches: true, touches: true,
which: true
which: function( event ) {
var button = event.button;
// Add which for key events
if ( event.which == null && rkeyEvent.test( event.type ) ) {
return event.charCode != null ? event.charCode : event.keyCode;
}
// Add which for click: 1 === left; 2 === middle; 3 === right
if ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) {
if ( button & 1 ) {
return 1;
}
if ( button & 2 ) {
return 3;
}
if ( button & 4 ) {
return 2;
}
return 0;
}
return event.which;
}
}, jQuery.event.addProp ); }, jQuery.event.addProp );
jQuery.each( { focus: "focusin", blur: "focusout" }, function( type, delegateType ) { jQuery.each( { focus: "focusin", blur: "focusout" }, function( type, delegateType ) {
@ -5874,6 +5854,12 @@ jQuery.each( { focus: "focusin", blur: "focusout" }, function( type, delegateTyp
return true; return true;
}, },
// Suppress native focus or blur as it's already being fired
// in leverageNative.
_default: function() {
return true;
},
delegateType: delegateType delegateType: delegateType
}; };
} ); } );
@ -6541,6 +6527,10 @@ var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" );
// set in CSS while `offset*` properties report correct values. // set in CSS while `offset*` properties report correct values.
// Behavior in IE 9 is more subtle than in newer versions & it passes // Behavior in IE 9 is more subtle than in newer versions & it passes
// some versions of this test; make sure not to make it pass there! // some versions of this test; make sure not to make it pass there!
//
// Support: Firefox 70+
// Only Firefox includes border widths
// in computed dimensions. (gh-4529)
reliableTrDimensions: function() { reliableTrDimensions: function() {
var table, tr, trChild, trStyle; var table, tr, trChild, trStyle;
if ( reliableTrDimensionsVal == null ) { if ( reliableTrDimensionsVal == null ) {
@ -6548,17 +6538,32 @@ var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" );
tr = document.createElement( "tr" ); tr = document.createElement( "tr" );
trChild = document.createElement( "div" ); trChild = document.createElement( "div" );
table.style.cssText = "position:absolute;left:-11111px"; table.style.cssText = "position:absolute;left:-11111px;border-collapse:separate";
tr.style.cssText = "border:1px solid";
// Support: Chrome 86+
// Height set through cssText does not get applied.
// Computed height then comes back as 0.
tr.style.height = "1px"; tr.style.height = "1px";
trChild.style.height = "9px"; trChild.style.height = "9px";
// Support: Android 8 Chrome 86+
// In our bodyBackground.html iframe,
// display for all div elements is set to "inline",
// which causes a problem only in Android 8 Chrome 86.
// Ensuring the div is display: block
// gets around this issue.
trChild.style.display = "block";
documentElement documentElement
.appendChild( table ) .appendChild( table )
.appendChild( tr ) .appendChild( tr )
.appendChild( trChild ); .appendChild( trChild );
trStyle = window.getComputedStyle( tr ); trStyle = window.getComputedStyle( tr );
reliableTrDimensionsVal = parseInt( trStyle.height ) > 3; reliableTrDimensionsVal = ( parseInt( trStyle.height, 10 ) +
parseInt( trStyle.borderTopWidth, 10 ) +
parseInt( trStyle.borderBottomWidth, 10 ) ) === tr.offsetHeight;
documentElement.removeChild( table ); documentElement.removeChild( table );
} }
@ -7761,6 +7766,7 @@ jQuery.fn.extend( {
anim.stop( true ); anim.stop( true );
} }
}; };
doAnimation.finish = doAnimation; doAnimation.finish = doAnimation;
return empty || optall.queue === false ? return empty || optall.queue === false ?
@ -8707,9 +8713,7 @@ jQuery.extend( jQuery.event, {
special.bindType || type; special.bindType || type;
// jQuery handler // jQuery handler
handle = ( handle = ( dataPriv.get( cur, "events" ) || Object.create( null ) )[ event.type ] &&
dataPriv.get( cur, "events" ) || Object.create( null )
)[ event.type ] &&
dataPriv.get( cur, "handle" ); dataPriv.get( cur, "handle" );
if ( handle ) { if ( handle ) {
handle.apply( cur, data ); handle.apply( cur, data );
@ -8856,7 +8860,7 @@ var rquery = ( /\?/ );
// Cross-browser xml parsing // Cross-browser xml parsing
jQuery.parseXML = function( data ) { jQuery.parseXML = function( data ) {
var xml; var xml, parserErrorElem;
if ( !data || typeof data !== "string" ) { if ( !data || typeof data !== "string" ) {
return null; return null;
} }
@ -8865,12 +8869,17 @@ jQuery.parseXML = function( data ) {
// IE throws on parseFromString with invalid input. // IE throws on parseFromString with invalid input.
try { try {
xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" ); xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" );
} catch ( e ) { } catch ( e ) {}
xml = undefined;
}
if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) { parserErrorElem = xml && xml.getElementsByTagName( "parsererror" )[ 0 ];
jQuery.error( "Invalid XML: " + data ); if ( !xml || parserErrorElem ) {
jQuery.error( "Invalid XML: " + (
parserErrorElem ?
jQuery.map( parserErrorElem.childNodes, function( el ) {
return el.textContent;
} ).join( "\n" ) :
data
) );
} }
return xml; return xml;
}; };
@ -8971,16 +8980,14 @@ jQuery.fn.extend( {
// Can add propHook for "elements" to filter or add form elements // Can add propHook for "elements" to filter or add form elements
var elements = jQuery.prop( this, "elements" ); var elements = jQuery.prop( this, "elements" );
return elements ? jQuery.makeArray( elements ) : this; return elements ? jQuery.makeArray( elements ) : this;
} ) } ).filter( function() {
.filter( function() {
var type = this.type; var type = this.type;
// Use .is( ":disabled" ) so that fieldset[disabled] works // Use .is( ":disabled" ) so that fieldset[disabled] works
return this.name && !jQuery( this ).is( ":disabled" ) && return this.name && !jQuery( this ).is( ":disabled" ) &&
rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) && rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&
( this.checked || !rcheckableType.test( type ) ); ( this.checked || !rcheckableType.test( type ) );
} ) } ).map( function( _i, elem ) {
.map( function( _i, elem ) {
var val = jQuery( this ).val(); var val = jQuery( this ).val();
if ( val == null ) { if ( val == null ) {
@ -9033,7 +9040,8 @@ var
// Anchor tag for parsing the document origin // Anchor tag for parsing the document origin
originAnchor = document.createElement( "a" ); originAnchor = document.createElement( "a" );
originAnchor.href = location.href;
originAnchor.href = location.href;
// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport // Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport
function addToPrefiltersOrTransports( structure ) { function addToPrefiltersOrTransports( structure ) {
@ -9727,8 +9735,10 @@ jQuery.extend( {
response = ajaxHandleResponses( s, jqXHR, responses ); response = ajaxHandleResponses( s, jqXHR, responses );
} }
// Use a noop converter for missing script // Use a noop converter for missing script but not if jsonp
if ( !isSuccess && jQuery.inArray( "script", s.dataTypes ) > -1 ) { if ( !isSuccess &&
jQuery.inArray( "script", s.dataTypes ) > -1 &&
jQuery.inArray( "json", s.dataTypes ) < 0 ) {
s.converters[ "text script" ] = function() {}; s.converters[ "text script" ] = function() {};
} }
@ -10466,12 +10476,6 @@ jQuery.offset = {
options.using.call( elem, props ); options.using.call( elem, props );
} else { } else {
if ( typeof props.top === "number" ) {
props.top += "px";
}
if ( typeof props.left === "number" ) {
props.left += "px";
}
curElem.css( props ); curElem.css( props );
} }
} }
@ -10640,8 +10644,11 @@ jQuery.each( [ "top", "left" ], function( _i, prop ) {
// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods // Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods
jQuery.each( { Height: "height", Width: "width" }, function( name, type ) { jQuery.each( { Height: "height", Width: "width" }, function( name, type ) {
jQuery.each( { padding: "inner" + name, content: type, "": "outer" + name }, jQuery.each( {
function( defaultExtra, funcName ) { padding: "inner" + name,
content: type,
"": "outer" + name
}, function( defaultExtra, funcName ) {
// Margin is only for outerHeight, outerWidth // Margin is only for outerHeight, outerWidth
jQuery.fn[ funcName ] = function( margin, value ) { jQuery.fn[ funcName ] = function( margin, value ) {
@ -10726,7 +10733,8 @@ jQuery.fn.extend( {
} }
} ); } );
jQuery.each( ( "blur focus focusin focusout resize scroll click dblclick " + jQuery.each(
( "blur focus focusin focusout resize scroll click dblclick " +
"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " + "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
"change select submit keydown keypress keyup contextmenu" ).split( " " ), "change select submit keydown keypress keyup contextmenu" ).split( " " ),
function( _i, name ) { function( _i, name ) {
@ -10737,7 +10745,8 @@ jQuery.each( ( "blur focus focusin focusout resize scroll click dblclick " +
this.on( name, null, data, fn ) : this.on( name, null, data, fn ) :
this.trigger( name ); this.trigger( name );
}; };
} ); }
);

4
_static/jquery.js vendored

File diff suppressed because one or more lines are too long

View file

@ -10,7 +10,7 @@
* *
*/ */
var stopwords = ["a","and","are","as","at","be","but","by","for","if","in","into","is","it","near","no","not","of","on","or","such","that","the","their","then","there","these","they","this","to","was","will","with"]; var stopwords = ["a", "and", "are", "as", "at", "be", "but", "by", "for", "if", "in", "into", "is", "it", "near", "no", "not", "of", "on", "or", "such", "that", "the", "their", "then", "there", "these", "they", "this", "to", "was", "will", "with"];
/* Non-minified version is copied as a separate JS file, is available */ /* Non-minified version is copied as a separate JS file, is available */
@ -197,101 +197,3 @@ var Stemmer = function() {
} }
} }
var splitChars = (function() {
var result = {};
var singles = [96, 180, 187, 191, 215, 247, 749, 885, 903, 907, 909, 930, 1014, 1648,
1748, 1809, 2416, 2473, 2481, 2526, 2601, 2609, 2612, 2615, 2653, 2702,
2706, 2729, 2737, 2740, 2857, 2865, 2868, 2910, 2928, 2948, 2961, 2971,
2973, 3085, 3089, 3113, 3124, 3213, 3217, 3241, 3252, 3295, 3341, 3345,
3369, 3506, 3516, 3633, 3715, 3721, 3736, 3744, 3748, 3750, 3756, 3761,
3781, 3912, 4239, 4347, 4681, 4695, 4697, 4745, 4785, 4799, 4801, 4823,
4881, 5760, 5901, 5997, 6313, 7405, 8024, 8026, 8028, 8030, 8117, 8125,
8133, 8181, 8468, 8485, 8487, 8489, 8494, 8527, 11311, 11359, 11687, 11695,
11703, 11711, 11719, 11727, 11735, 12448, 12539, 43010, 43014, 43019, 43587,
43696, 43713, 64286, 64297, 64311, 64317, 64319, 64322, 64325, 65141];
var i, j, start, end;
for (i = 0; i < singles.length; i++) {
result[singles[i]] = true;
}
var ranges = [[0, 47], [58, 64], [91, 94], [123, 169], [171, 177], [182, 184], [706, 709],
[722, 735], [741, 747], [751, 879], [888, 889], [894, 901], [1154, 1161],
[1318, 1328], [1367, 1368], [1370, 1376], [1416, 1487], [1515, 1519], [1523, 1568],
[1611, 1631], [1642, 1645], [1750, 1764], [1767, 1773], [1789, 1790], [1792, 1807],
[1840, 1868], [1958, 1968], [1970, 1983], [2027, 2035], [2038, 2041], [2043, 2047],
[2070, 2073], [2075, 2083], [2085, 2087], [2089, 2307], [2362, 2364], [2366, 2383],
[2385, 2391], [2402, 2405], [2419, 2424], [2432, 2436], [2445, 2446], [2449, 2450],
[2483, 2485], [2490, 2492], [2494, 2509], [2511, 2523], [2530, 2533], [2546, 2547],
[2554, 2564], [2571, 2574], [2577, 2578], [2618, 2648], [2655, 2661], [2672, 2673],
[2677, 2692], [2746, 2748], [2750, 2767], [2769, 2783], [2786, 2789], [2800, 2820],
[2829, 2830], [2833, 2834], [2874, 2876], [2878, 2907], [2914, 2917], [2930, 2946],
[2955, 2957], [2966, 2968], [2976, 2978], [2981, 2983], [2987, 2989], [3002, 3023],
[3025, 3045], [3059, 3076], [3130, 3132], [3134, 3159], [3162, 3167], [3170, 3173],
[3184, 3191], [3199, 3204], [3258, 3260], [3262, 3293], [3298, 3301], [3312, 3332],
[3386, 3388], [3390, 3423], [3426, 3429], [3446, 3449], [3456, 3460], [3479, 3481],
[3518, 3519], [3527, 3584], [3636, 3647], [3655, 3663], [3674, 3712], [3717, 3718],
[3723, 3724], [3726, 3731], [3752, 3753], [3764, 3772], [3774, 3775], [3783, 3791],
[3802, 3803], [3806, 3839], [3841, 3871], [3892, 3903], [3949, 3975], [3980, 4095],
[4139, 4158], [4170, 4175], [4182, 4185], [4190, 4192], [4194, 4196], [4199, 4205],
[4209, 4212], [4226, 4237], [4250, 4255], [4294, 4303], [4349, 4351], [4686, 4687],
[4702, 4703], [4750, 4751], [4790, 4791], [4806, 4807], [4886, 4887], [4955, 4968],
[4989, 4991], [5008, 5023], [5109, 5120], [5741, 5742], [5787, 5791], [5867, 5869],
[5873, 5887], [5906, 5919], [5938, 5951], [5970, 5983], [6001, 6015], [6068, 6102],
[6104, 6107], [6109, 6111], [6122, 6127], [6138, 6159], [6170, 6175], [6264, 6271],
[6315, 6319], [6390, 6399], [6429, 6469], [6510, 6511], [6517, 6527], [6572, 6592],
[6600, 6607], [6619, 6655], [6679, 6687], [6741, 6783], [6794, 6799], [6810, 6822],
[6824, 6916], [6964, 6980], [6988, 6991], [7002, 7042], [7073, 7085], [7098, 7167],
[7204, 7231], [7242, 7244], [7294, 7400], [7410, 7423], [7616, 7679], [7958, 7959],
[7966, 7967], [8006, 8007], [8014, 8015], [8062, 8063], [8127, 8129], [8141, 8143],
[8148, 8149], [8156, 8159], [8173, 8177], [8189, 8303], [8306, 8307], [8314, 8318],
[8330, 8335], [8341, 8449], [8451, 8454], [8456, 8457], [8470, 8472], [8478, 8483],
[8506, 8507], [8512, 8516], [8522, 8525], [8586, 9311], [9372, 9449], [9472, 10101],
[10132, 11263], [11493, 11498], [11503, 11516], [11518, 11519], [11558, 11567],
[11622, 11630], [11632, 11647], [11671, 11679], [11743, 11822], [11824, 12292],
[12296, 12320], [12330, 12336], [12342, 12343], [12349, 12352], [12439, 12444],
[12544, 12548], [12590, 12592], [12687, 12689], [12694, 12703], [12728, 12783],
[12800, 12831], [12842, 12880], [12896, 12927], [12938, 12976], [12992, 13311],
[19894, 19967], [40908, 40959], [42125, 42191], [42238, 42239], [42509, 42511],
[42540, 42559], [42592, 42593], [42607, 42622], [42648, 42655], [42736, 42774],
[42784, 42785], [42889, 42890], [42893, 43002], [43043, 43055], [43062, 43071],
[43124, 43137], [43188, 43215], [43226, 43249], [43256, 43258], [43260, 43263],
[43302, 43311], [43335, 43359], [43389, 43395], [43443, 43470], [43482, 43519],
[43561, 43583], [43596, 43599], [43610, 43615], [43639, 43641], [43643, 43647],
[43698, 43700], [43703, 43704], [43710, 43711], [43715, 43738], [43742, 43967],
[44003, 44015], [44026, 44031], [55204, 55215], [55239, 55242], [55292, 55295],
[57344, 63743], [64046, 64047], [64110, 64111], [64218, 64255], [64263, 64274],
[64280, 64284], [64434, 64466], [64830, 64847], [64912, 64913], [64968, 65007],
[65020, 65135], [65277, 65295], [65306, 65312], [65339, 65344], [65371, 65381],
[65471, 65473], [65480, 65481], [65488, 65489], [65496, 65497]];
for (i = 0; i < ranges.length; i++) {
start = ranges[i][0];
end = ranges[i][1];
for (j = start; j <= end; j++) {
result[j] = true;
}
}
return result;
})();
function splitQuery(query) {
var result = [];
var start = -1;
for (var i = 0; i < query.length; i++) {
if (splitChars[query.charCodeAt(i)]) {
if (start !== -1) {
result.push(query.slice(start, i));
start = -1;
}
} else if (start === -1) {
start = i;
}
}
if (start !== -1) {
result.push(query.slice(start));
}
return result;
}

View file

@ -8,18 +8,20 @@
* :license: BSD, see LICENSE for details. * :license: BSD, see LICENSE for details.
* *
*/ */
"use strict";
if (!Scorer) { /**
/**
* Simple result scoring code. * Simple result scoring code.
*/ */
if (typeof Scorer === "undefined") {
var Scorer = { var Scorer = {
// Implement the following function to further tweak the score for each result // Implement the following function to further tweak the score for each result
// The function takes a result array [filename, title, anchor, descr, score] // The function takes a result array [docname, title, anchor, descr, score, filename]
// and returns the new score. // and returns the new score.
/* /*
score: function(result) { score: result => {
return result[4]; const [docname, title, anchor, descr, score, filename] = result
return score
}, },
*/ */
@ -28,9 +30,11 @@ if (!Scorer) {
// or matches in the last dotted part of the object name // or matches in the last dotted part of the object name
objPartialMatch: 6, objPartialMatch: 6,
// Additive scores depending on the priority of the object // Additive scores depending on the priority of the object
objPrio: {0: 15, // used to be importantResults objPrio: {
0: 15, // used to be importantResults
1: 5, // used to be objectResults 1: 5, // used to be objectResults
2: -5}, // used to be unimportantResults 2: -5, // used to be unimportantResults
},
// Used when the priority is not in the mapping. // Used when the priority is not in the mapping.
objPrioDefault: 0, objPrioDefault: 0,
@ -39,452 +43,455 @@ if (!Scorer) {
partialTitle: 7, partialTitle: 7,
// query found in terms // query found in terms
term: 5, term: 5,
partialTerm: 2 partialTerm: 2,
}; };
} }
if (!splitQuery) { const _removeChildren = (element) => {
function splitQuery(query) { while (element && element.lastChild) element.removeChild(element.lastChild);
return query.split(/\s+/); };
/**
* See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions#escaping
*/
const _escapeRegExp = (string) =>
string.replace(/[.*+\-?^${}()|[\]\\]/g, "\\$&"); // $& means the whole matched string
const _displayItem = (item, highlightTerms, searchTerms) => {
const docBuilder = DOCUMENTATION_OPTIONS.BUILDER;
const docUrlRoot = DOCUMENTATION_OPTIONS.URL_ROOT;
const docFileSuffix = DOCUMENTATION_OPTIONS.FILE_SUFFIX;
const docLinkSuffix = DOCUMENTATION_OPTIONS.LINK_SUFFIX;
const showSearchSummary = DOCUMENTATION_OPTIONS.SHOW_SEARCH_SUMMARY;
const [docName, title, anchor, descr] = item;
let listItem = document.createElement("li");
let requestUrl;
let linkUrl;
if (docBuilder === "dirhtml") {
// dirhtml builder
let dirname = docName + "/";
if (dirname.match(/\/index\/$/))
dirname = dirname.substring(0, dirname.length - 6);
else if (dirname === "index/") dirname = "";
requestUrl = docUrlRoot + dirname;
linkUrl = requestUrl;
} else {
// normal html builders
requestUrl = docUrlRoot + docName + docFileSuffix;
linkUrl = docName + docLinkSuffix;
} }
const params = new URLSearchParams();
params.set("highlight", [...highlightTerms].join(" "));
let linkEl = listItem.appendChild(document.createElement("a"));
linkEl.href = linkUrl + "?" + params.toString() + anchor;
linkEl.innerHTML = title;
if (descr)
listItem.appendChild(document.createElement("span")).innerText =
" (" + descr + ")";
else if (showSearchSummary)
fetch(requestUrl)
.then((responseData) => responseData.text())
.then((data) => {
if (data)
listItem.appendChild(
Search.makeSearchSummary(data, searchTerms, highlightTerms)
);
});
Search.output.appendChild(listItem);
};
const _finishSearch = (resultCount) => {
Search.stopPulse();
Search.title.innerText = _("Search Results");
if (!resultCount)
Search.status.innerText = Documentation.gettext(
"Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories."
);
else
Search.status.innerText = _(
`Search finished, found ${resultCount} page(s) matching the search query.`
);
};
const _displayNextItem = (
results,
resultCount,
highlightTerms,
searchTerms
) => {
// results left, load the summary and display it
// this is intended to be dynamic (don't sub resultsCount)
if (results.length) {
_displayItem(results.pop(), highlightTerms, searchTerms);
setTimeout(
() => _displayNextItem(results, resultCount, highlightTerms, searchTerms),
5
);
}
// search finished, update title and status message
else _finishSearch(resultCount);
};
/**
* Default splitQuery function. Can be overridden in ``sphinx.search`` with a
* custom function per language.
*
* The regular expression works by splitting the string on consecutive characters
* that are not Unicode letters, numbers, underscores, or emoji characters.
* This is the same as ``\W+`` in Python, preserving the surrogate pair area.
*/
if (typeof splitQuery === "undefined") {
var splitQuery = (query) => query
.split(/[^\p{Letter}\p{Number}_\p{Emoji_Presentation}]+/gu)
.filter(term => term) // remove remaining empty strings
} }
/** /**
* Search Module * Search Module
*/ */
var Search = { const Search = {
_index: null,
_queued_query: null,
_pulse_status: -1,
_index : null, htmlToText: (htmlString) => {
_queued_query : null, const htmlElement = document
_pulse_status : -1, .createRange()
.createContextualFragment(htmlString);
htmlToText : function(htmlString) { _removeChildren(htmlElement.querySelectorAll(".headerlink"));
var virtualDocument = document.implementation.createHTMLDocument('virtual'); const docContent = htmlElement.querySelector('[role="main"]');
var htmlElement = $(htmlString, virtualDocument); if (docContent !== undefined) return docContent.textContent;
htmlElement.find('.headerlink').remove(); console.warn(
docContent = htmlElement.find('[role=main]')[0]; "Content block not found. Sphinx search tries to obtain it via '[role=main]'. Could you check your theme or template."
if(docContent === undefined) { );
console.warn("Content block not found. Sphinx search tries to obtain it " +
"via '[role=main]'. Could you check your theme or template.");
return ""; return "";
}
return docContent.textContent || docContent.innerText;
}, },
init : function() { init: () => {
var params = $.getQueryParameters(); const query = new URLSearchParams(window.location.search).get("q");
if (params.q) { document
var query = params.q[0]; .querySelectorAll('input[name="q"]')
$('input[name="q"]')[0].value = query; .forEach((el) => (el.value = query));
this.performSearch(query); if (query) Search.performSearch(query);
},
loadIndex: (url) =>
(document.body.appendChild(document.createElement("script")).src = url),
setIndex: (index) => {
Search._index = index;
if (Search._queued_query !== null) {
const query = Search._queued_query;
Search._queued_query = null;
Search.query(query);
} }
}, },
loadIndex : function(url) { hasIndex: () => Search._index !== null,
$.ajax({type: "GET", url: url, data: null,
dataType: "script", cache: true,
complete: function(jqxhr, textstatus) {
if (textstatus != "success") {
document.getElementById("searchindexloader").src = url;
}
}});
},
setIndex : function(index) { deferQuery: (query) => (Search._queued_query = query),
var q;
this._index = index;
if ((q = this._queued_query) !== null) {
this._queued_query = null;
Search.query(q);
}
},
hasIndex : function() { stopPulse: () => (Search._pulse_status = -1),
return this._index !== null;
},
deferQuery : function(query) { startPulse: () => {
this._queued_query = query; if (Search._pulse_status >= 0) return;
},
stopPulse : function() { const pulse = () => {
this._pulse_status = 0;
},
startPulse : function() {
if (this._pulse_status >= 0)
return;
function pulse() {
var i;
Search._pulse_status = (Search._pulse_status + 1) % 4; Search._pulse_status = (Search._pulse_status + 1) % 4;
var dotString = ''; Search.dots.innerText = ".".repeat(Search._pulse_status);
for (i = 0; i < Search._pulse_status; i++) if (Search._pulse_status >= 0) window.setTimeout(pulse, 500);
dotString += '.'; };
Search.dots.text(dotString);
if (Search._pulse_status > -1)
window.setTimeout(pulse, 500);
}
pulse(); pulse();
}, },
/** /**
* perform a search for something (or wait until index is loaded) * perform a search for something (or wait until index is loaded)
*/ */
performSearch : function(query) { performSearch: (query) => {
// create the required interface elements // create the required interface elements
this.out = $('#search-results'); const searchText = document.createElement("h2");
this.title = $('<h2>' + _('Searching') + '</h2>').appendTo(this.out); searchText.textContent = _("Searching");
this.dots = $('<span></span>').appendTo(this.title); const searchSummary = document.createElement("p");
this.status = $('<p class="search-summary">&nbsp;</p>').appendTo(this.out); searchSummary.classList.add("search-summary");
this.output = $('<ul class="search"/>').appendTo(this.out); searchSummary.innerText = "";
const searchList = document.createElement("ul");
searchList.classList.add("search");
$('#search-progress').text(_('Preparing search...')); const out = document.getElementById("search-results");
this.startPulse(); Search.title = out.appendChild(searchText);
Search.dots = Search.title.appendChild(document.createElement("span"));
Search.status = out.appendChild(searchSummary);
Search.output = out.appendChild(searchList);
const searchProgress = document.getElementById("search-progress");
// Some themes don't use the search progress node
if (searchProgress) {
searchProgress.innerText = _("Preparing search...");
}
Search.startPulse();
// index already loaded, the browser was quick! // index already loaded, the browser was quick!
if (this.hasIndex()) if (Search.hasIndex()) Search.query(query);
this.query(query); else Search.deferQuery(query);
else
this.deferQuery(query);
}, },
/** /**
* execute search (requires search index to be loaded) * execute search (requires search index to be loaded)
*/ */
query : function(query) { query: (query) => {
var i; // stem the search terms and add them to the correct list
const stemmer = new Stemmer();
const searchTerms = new Set();
const excludedTerms = new Set();
const highlightTerms = new Set();
const objectTerms = new Set(splitQuery(query.toLowerCase().trim()));
splitQuery(query.trim()).forEach((queryTerm) => {
const queryTermLower = queryTerm.toLowerCase();
// stem the searchterms and add them to the correct list // maybe skip this "word"
var stemmer = new Stemmer(); // stopwords array is from language_data.js
var searchterms = []; if (
var excluded = []; stopwords.indexOf(queryTermLower) !== -1 ||
var hlterms = []; queryTerm.match(/^\d+$/)
var tmp = splitQuery(query); )
var objectterms = []; return;
for (i = 0; i < tmp.length; i++) {
if (tmp[i] !== "") {
objectterms.push(tmp[i].toLowerCase());
}
if ($u.indexOf(stopwords, tmp[i].toLowerCase()) != -1 || tmp[i] === "") {
// skip this "word"
continue;
}
// stem the word // stem the word
var word = stemmer.stemWord(tmp[i].toLowerCase()); let word = stemmer.stemWord(queryTermLower);
var toAppend;
// select the correct list // select the correct list
if (word[0] == '-') { if (word[0] === "-") excludedTerms.add(word.substr(1));
toAppend = excluded;
word = word.substr(1);
}
else { else {
toAppend = searchterms; searchTerms.add(word);
hlterms.push(tmp[i].toLowerCase()); highlightTerms.add(queryTermLower);
} }
// only add if not already in the list });
if (!$u.contains(toAppend, word))
toAppend.push(word);
}
var highlightstring = '?highlight=' + $.urlencode(hlterms.join(" "));
// console.debug('SEARCH: searching for:'); // console.debug("SEARCH: searching for:");
// console.info('required: ', searchterms); // console.info("required: ", [...searchTerms]);
// console.info('excluded: ', excluded); // console.info("excluded: ", [...excludedTerms]);
// prepare search // array of [docname, title, anchor, descr, score, filename]
var terms = this._index.terms; let results = [];
var titleterms = this._index.titleterms; _removeChildren(document.getElementById("search-progress"));
// array of [filename, title, anchor, descr, score]
var results = [];
$('#search-progress').empty();
// lookup as object // lookup as object
for (i = 0; i < objectterms.length; i++) { objectTerms.forEach((term) =>
var others = [].concat(objectterms.slice(0, i), results.push(...Search.performObjectSearch(term, objectTerms))
objectterms.slice(i+1, objectterms.length)); );
results = results.concat(this.performObjectSearch(objectterms[i], others));
}
// lookup as search terms in fulltext // lookup as search terms in fulltext
results = results.concat(this.performTermsSearch(searchterms, excluded, terms, titleterms)); results.push(...Search.performTermsSearch(searchTerms, excludedTerms));
// let the scorer override scores with a custom scoring function // let the scorer override scores with a custom scoring function
if (Scorer.score) { if (Scorer.score) results.forEach((item) => (item[4] = Scorer.score(item)));
for (i = 0; i < results.length; i++)
results[i][4] = Scorer.score(results[i]);
}
// now sort the results by score (in opposite order of appearance, since the // now sort the results by score (in opposite order of appearance, since the
// display function below uses pop() to retrieve items) and then // display function below uses pop() to retrieve items) and then
// alphabetically // alphabetically
results.sort(function(a, b) { results.sort((a, b) => {
var left = a[4]; const leftScore = a[4];
var right = b[4]; const rightScore = b[4];
if (left > right) { if (leftScore === rightScore) {
return 1;
} else if (left < right) {
return -1;
} else {
// same score: sort alphabetically // same score: sort alphabetically
left = a[1].toLowerCase(); const leftTitle = a[1].toLowerCase();
right = b[1].toLowerCase(); const rightTitle = b[1].toLowerCase();
return (left > right) ? -1 : ((left < right) ? 1 : 0); if (leftTitle === rightTitle) return 0;
return leftTitle > rightTitle ? -1 : 1; // inverted is intentional
} }
return leftScore > rightScore ? 1 : -1;
}); });
// remove duplicate search results
// note the reversing of results, so that in the case of duplicates, the highest-scoring entry is kept
let seen = new Set();
results = results.reverse().reduce((acc, result) => {
let resultStr = result.slice(0, 4).concat([result[5]]).map(v => String(v)).join(',');
if (!seen.has(resultStr)) {
acc.push(result);
seen.add(resultStr);
}
return acc;
}, []);
results = results.reverse();
// for debugging // for debugging
//Search.lastresults = results.slice(); // a copy //Search.lastresults = results.slice(); // a copy
//console.info('search results:', Search.lastresults); // console.info("search results:", Search.lastresults);
// print the results // print the results
var resultCount = results.length; _displayNextItem(results, results.length, highlightTerms, searchTerms);
function displayNextItem() {
// results left, load the summary and display it
if (results.length) {
var item = results.pop();
var listItem = $('<li></li>');
var requestUrl = "";
var linkUrl = "";
if (DOCUMENTATION_OPTIONS.BUILDER === 'dirhtml') {
// dirhtml builder
var dirname = item[0] + '/';
if (dirname.match(/\/index\/$/)) {
dirname = dirname.substring(0, dirname.length-6);
} else if (dirname == 'index/') {
dirname = '';
}
requestUrl = DOCUMENTATION_OPTIONS.URL_ROOT + dirname;
linkUrl = requestUrl;
} else {
// normal html builders
requestUrl = DOCUMENTATION_OPTIONS.URL_ROOT + item[0] + DOCUMENTATION_OPTIONS.FILE_SUFFIX;
linkUrl = item[0] + DOCUMENTATION_OPTIONS.LINK_SUFFIX;
}
listItem.append($('<a/>').attr('href',
linkUrl +
highlightstring + item[2]).html(item[1]));
if (item[3]) {
listItem.append($('<span> (' + item[3] + ')</span>'));
Search.output.append(listItem);
setTimeout(function() {
displayNextItem();
}, 5);
} else if (DOCUMENTATION_OPTIONS.SHOW_SEARCH_SUMMARY) {
$.ajax({url: requestUrl,
dataType: "text",
complete: function(jqxhr, textstatus) {
var data = jqxhr.responseText;
if (data !== '' && data !== undefined) {
var summary = Search.makeSearchSummary(data, searchterms, hlterms);
if (summary) {
listItem.append(summary);
}
}
Search.output.append(listItem);
setTimeout(function() {
displayNextItem();
}, 5);
}});
} else {
// just display title
Search.output.append(listItem);
setTimeout(function() {
displayNextItem();
}, 5);
}
}
// search finished, update title and status message
else {
Search.stopPulse();
Search.title.text(_('Search Results'));
if (!resultCount)
Search.status.text(_('Your search did not match any documents. Please make sure that all words are spelled correctly and that you\'ve selected enough categories.'));
else
Search.status.text(_('Search finished, found %s page(s) matching the search query.').replace('%s', resultCount));
Search.status.fadeIn(500);
}
}
displayNextItem();
}, },
/** /**
* search for object names * search for object names
*/ */
performObjectSearch : function(object, otherterms) { performObjectSearch: (object, objectTerms) => {
var filenames = this._index.filenames; const filenames = Search._index.filenames;
var docnames = this._index.docnames; const docNames = Search._index.docnames;
var objects = this._index.objects; const objects = Search._index.objects;
var objnames = this._index.objnames; const objNames = Search._index.objnames;
var titles = this._index.titles; const titles = Search._index.titles;
var i; const results = [];
var results = [];
const objectSearchCallback = (prefix, match) => {
const name = match[4]
const fullname = (prefix ? prefix + "." : "") + name;
const fullnameLower = fullname.toLowerCase();
if (fullnameLower.indexOf(object) < 0) return;
let score = 0;
const parts = fullnameLower.split(".");
for (var prefix in objects) {
for (var iMatch = 0; iMatch != objects[prefix].length; ++iMatch) {
var match = objects[prefix][iMatch];
var name = match[4];
var fullname = (prefix ? prefix + '.' : '') + name;
var fullnameLower = fullname.toLowerCase()
if (fullnameLower.indexOf(object) > -1) {
var score = 0;
var parts = fullnameLower.split('.');
// check for different match types: exact matches of full name or // check for different match types: exact matches of full name or
// "last name" (i.e. last dotted part) // "last name" (i.e. last dotted part)
if (fullnameLower == object || parts[parts.length - 1] == object) { if (fullnameLower === object || parts.slice(-1)[0] === object)
score += Scorer.objNameMatch; score += Scorer.objNameMatch;
// matches in last name else if (parts.slice(-1)[0].indexOf(object) > -1)
} else if (parts[parts.length - 1].indexOf(object) > -1) { score += Scorer.objPartialMatch; // matches in last name
score += Scorer.objPartialMatch;
} const objName = objNames[match[1]][2];
var objname = objnames[match[1]][2]; const title = titles[match[0]];
var title = titles[match[0]];
// If more than one term searched for, we require other words to be // If more than one term searched for, we require other words to be
// found in the name/title/description // found in the name/title/description
if (otherterms.length > 0) { const otherTerms = new Set(objectTerms);
var haystack = (prefix + ' ' + name + ' ' + otherTerms.delete(object);
objname + ' ' + title).toLowerCase(); if (otherTerms.size > 0) {
var allfound = true; const haystack = `${prefix} ${name} ${objName} ${title}`.toLowerCase();
for (i = 0; i < otherterms.length; i++) { if (
if (haystack.indexOf(otherterms[i]) == -1) { [...otherTerms].some((otherTerm) => haystack.indexOf(otherTerm) < 0)
allfound = false; )
break; return;
} }
}
if (!allfound) {
continue;
}
}
var descr = objname + _(', in ') + title;
var anchor = match[3]; let anchor = match[3];
if (anchor === '') if (anchor === "") anchor = fullname;
anchor = fullname; else if (anchor === "-") anchor = objNames[match[1]][1] + "-" + fullname;
else if (anchor == '-')
anchor = objnames[match[1]][1] + '-' + fullname; const descr = objName + _(", in ") + title;
// add custom score for some objects according to scorer // add custom score for some objects according to scorer
if (Scorer.objPrio.hasOwnProperty(match[2])) { if (Scorer.objPrio.hasOwnProperty(match[2]))
score += Scorer.objPrio[match[2]]; score += Scorer.objPrio[match[2]];
} else { else score += Scorer.objPrioDefault;
score += Scorer.objPrioDefault;
}
results.push([docnames[match[0]], fullname, '#'+anchor, descr, score, filenames[match[0]]]);
}
}
}
results.push([
docNames[match[0]],
fullname,
"#" + anchor,
descr,
score,
filenames[match[0]],
]);
};
Object.keys(objects).forEach((prefix) =>
objects[prefix].forEach((array) =>
objectSearchCallback(prefix, array)
)
);
return results; return results;
}, },
/**
* See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions
*/
escapeRegExp : function(string) {
return string.replace(/[.*+\-?^${}()|[\]\\]/g, '\\$&'); // $& means the whole matched string
},
/** /**
* search for full-text terms in the index * search for full-text terms in the index
*/ */
performTermsSearch : function(searchterms, excluded, terms, titleterms) { performTermsSearch: (searchTerms, excludedTerms) => {
var docnames = this._index.docnames; // prepare search
var filenames = this._index.filenames; const terms = Search._index.terms;
var titles = this._index.titles; const titleTerms = Search._index.titleterms;
const docNames = Search._index.docnames;
const filenames = Search._index.filenames;
const titles = Search._index.titles;
var i, j, file; const scoreMap = new Map();
var fileMap = {}; const fileMap = new Map();
var scoreMap = {};
var results = [];
// perform the search on the required terms // perform the search on the required terms
for (i = 0; i < searchterms.length; i++) { searchTerms.forEach((word) => {
var word = searchterms[i]; const files = [];
var files = []; const arr = [
var _o = [ { files: terms[word], score: Scorer.term },
{files: terms[word], score: Scorer.term}, { files: titleTerms[word], score: Scorer.title },
{files: titleterms[word], score: Scorer.title}
]; ];
// add support for partial matches // add support for partial matches
if (word.length > 2) { if (word.length > 2) {
var word_regex = this.escapeRegExp(word); const escapedWord = _escapeRegExp(word);
for (var w in terms) { Object.keys(terms).forEach((term) => {
if (w.match(word_regex) && !terms[word]) { if (term.match(escapedWord) && !terms[word])
_o.push({files: terms[w], score: Scorer.partialTerm}) arr.push({ files: terms[term], score: Scorer.partialTerm });
} });
} Object.keys(titleTerms).forEach((term) => {
for (var w in titleterms) { if (term.match(escapedWord) && !titleTerms[word])
if (w.match(word_regex) && !titleterms[word]) { arr.push({ files: titleTerms[word], score: Scorer.partialTitle });
_o.push({files: titleterms[w], score: Scorer.partialTitle}) });
}
}
} }
// no match but word was a required one // no match but word was a required one
if ($u.every(_o, function(o){return o.files === undefined;})) { if (arr.every((record) => record.files === undefined)) return;
break;
}
// found search word in contents // found search word in contents
$u.each(_o, function(o) { arr.forEach((record) => {
var _files = o.files; if (record.files === undefined) return;
if (_files === undefined)
return
if (_files.length === undefined) let recordFiles = record.files;
_files = [_files]; if (recordFiles.length === undefined) recordFiles = [recordFiles];
files = files.concat(_files); files.push(...recordFiles);
// set score for the word in each file to Scorer.term // set score for the word in each file
for (j = 0; j < _files.length; j++) { recordFiles.forEach((file) => {
file = _files[j]; if (!scoreMap.has(file)) scoreMap.set(file, {});
if (!(file in scoreMap)) scoreMap.get(file)[word] = record.score;
scoreMap[file] = {}; });
scoreMap[file][word] = o.score;
}
}); });
// create the mapping // create the mapping
for (j = 0; j < files.length; j++) { files.forEach((file) => {
file = files[j]; if (fileMap.has(file) && fileMap.get(file).indexOf(word) === -1)
if (file in fileMap && fileMap[file].indexOf(word) === -1) fileMap.get(file).push(word);
fileMap[file].push(word); else fileMap.set(file, [word]);
else });
fileMap[file] = [word]; });
}
}
// now check if the files don't contain excluded terms // now check if the files don't contain excluded terms
for (file in fileMap) { const results = [];
var valid = true; for (const [file, wordList] of fileMap) {
// check if all requirements are matched // check if all requirements are matched
var filteredTermCount = // as search terms with length < 3 are discarded: ignore
searchterms.filter(function(term){return term.length > 2}).length // as search terms with length < 3 are discarded
const filteredTermCount = [...searchTerms].filter(
(term) => term.length > 2
).length;
if ( if (
fileMap[file].length != searchterms.length && wordList.length !== searchTerms.size &&
fileMap[file].length != filteredTermCount wordList.length !== filteredTermCount
) continue; )
continue;
// ensure that none of the excluded terms is in the search result // ensure that none of the excluded terms is in the search result
for (i = 0; i < excluded.length; i++) { if (
if (terms[excluded[i]] == file || [...excludedTerms].some(
titleterms[excluded[i]] == file || (term) =>
$u.contains(terms[excluded[i]] || [], file) || terms[term] === file ||
$u.contains(titleterms[excluded[i]] || [], file)) { titleTerms[term] === file ||
valid = false; (terms[term] || []).includes(file) ||
(titleTerms[term] || []).includes(file)
)
)
break; break;
}
}
// if we have still a valid result we can add it to the result list
if (valid) {
// select one (max) score for the file. // select one (max) score for the file.
// for better ranking, we should calculate ranking by using words statistics like basic tf-idf... const score = Math.max(...wordList.map((w) => scoreMap.get(file)[w]));
var score = $u.max($u.map(fileMap[file], function(w){return scoreMap[file][w]})); // add result to the result list
results.push([docnames[file], titles[file], '', null, score, filenames[file]]); results.push([
} docNames[file],
titles[file],
"",
null,
score,
filenames[file],
]);
} }
return results; return results;
}, },
@ -492,34 +499,33 @@ var Search = {
/** /**
* helper function to return a node containing the * helper function to return a node containing the
* search summary for a given text. keywords is a list * search summary for a given text. keywords is a list
* of stemmed words, hlwords is the list of normal, unstemmed * of stemmed words, highlightWords is the list of normal, unstemmed
* words. the first one is used to find the occurrence, the * words. the first one is used to find the occurrence, the
* latter for highlighting it. * latter for highlighting it.
*/ */
makeSearchSummary : function(htmlText, keywords, hlwords) { makeSearchSummary: (htmlText, keywords, highlightWords) => {
var text = Search.htmlToText(htmlText); const text = Search.htmlToText(htmlText).toLowerCase();
if (text == "") { if (text === "") return null;
return null;
} const actualStartPosition = [...keywords]
var textLower = text.toLowerCase(); .map((k) => text.indexOf(k.toLowerCase()))
var start = 0; .filter((i) => i > -1)
$.each(keywords, function() { .slice(-1)[0];
var i = textLower.indexOf(this.toLowerCase()); const startWithContext = Math.max(actualStartPosition - 120, 0);
if (i > -1)
start = i; const top = startWithContext === 0 ? "" : "...";
}); const tail = startWithContext + 240 < text.length ? "..." : "";
start = Math.max(start - 120, 0);
var excerpt = ((start > 0) ? '...' : '') + let summary = document.createElement("div");
$.trim(text.substr(start, 240)) + summary.classList.add("context");
((start + 240 - text.length) ? '...' : ''); summary.innerText = top + text.substr(startWithContext, 240).trim() + tail;
var rv = $('<p class="context"></p>').text(excerpt);
$.each(hlwords, function() { highlightWords.forEach((highlightWord) =>
rv = rv.highlightText(this, 'highlighted'); _highlightText(summary, highlightWord, "highlighted")
}); );
return rv;
} return summary;
},
}; };
$(document).ready(function() { _ready(Search.init);
Search.init();
});

View file

@ -14,6 +14,7 @@
<script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script> <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
<script src="_static/jquery.js"></script> <script src="_static/jquery.js"></script>
<script src="_static/underscore.js"></script> <script src="_static/underscore.js"></script>
<script src="_static/_sphinx_javascript_frameworks_compat.js"></script>
<script src="_static/doctools.js"></script> <script src="_static/doctools.js"></script>
<script src="_static/js/theme.js"></script> <script src="_static/js/theme.js"></script>
<link rel="author" title="About these documents" href="#" /> <link rel="author" title="About these documents" href="#" />
@ -87,7 +88,7 @@
<div itemprop="articleBody"> <div itemprop="articleBody">
<section id="about-unidata-awips"> <section id="about-unidata-awips">
<h1>About Unidata AWIPS<a class="headerlink" href="#about-unidata-awips" title="Permalink to this headline"></a></h1> <h1>About Unidata AWIPS<a class="headerlink" href="#about-unidata-awips" title="Permalink to this heading"></a></h1>
<p>AWIPS is a weather forecasting display and analysis package <p>AWIPS is a weather forecasting display and analysis package
developed by the National Weather Service and Raytheon. AWIPS is a developed by the National Weather Service and Raytheon. AWIPS is a
Java application consisting of a data-rendering client (CAVE, which runs Java application consisting of a data-rendering client (CAVE, which runs
@ -110,7 +111,7 @@ inter-process communication.</p>
</figcaption> </figcaption>
</figure> </figure>
<section id="license"> <section id="license">
<h2>License<a class="headerlink" href="#license" title="Permalink to this headline"></a></h2> <h2>License<a class="headerlink" href="#license" title="Permalink to this heading"></a></h2>
<p>The AWIPS software package released by the Unidata Program Center is considered to <p>The AWIPS software package released by the Unidata Program Center is considered to
be in the public domain since it is released without proprietary code. As such, export be in the public domain since it is released without proprietary code. As such, export
controls do not apply.  Any person is free to download, modify, distribute, or share controls do not apply.  Any person is free to download, modify, distribute, or share
@ -120,7 +121,7 @@ to ensure that they remain compatible with the associated terms (see
FOSS_COTS_License.pdf at <a class="reference external" href="https://github.com/Unidata/awips2">https://github.com/Unidata/awips2</a>).</p> FOSS_COTS_License.pdf at <a class="reference external" href="https://github.com/Unidata/awips2">https://github.com/Unidata/awips2</a>).</p>
</section> </section>
<section id="about-awips"> <section id="about-awips">
<h2>About AWIPS<a class="headerlink" href="#about-awips" title="Permalink to this headline"></a></h2> <h2>About AWIPS<a class="headerlink" href="#about-awips" title="Permalink to this heading"></a></h2>
<p>The primary AWIPS application for data ingest, processing, and <p>The primary AWIPS application for data ingest, processing, and
storage is the Environmental Data EXchange (<strong>EDEX</strong>) server; the storage is the Environmental Data EXchange (<strong>EDEX</strong>) server; the
primary AWIPS application for visualization/data manipulation is the primary AWIPS application for visualization/data manipulation is the
@ -133,7 +134,7 @@ several commercial off-the-shelf (COTS) and Free or Open Source software
working together and communicating, compose the entire AWIPS system.</p> working together and communicating, compose the entire AWIPS system.</p>
</section> </section>
<section id="edex"> <section id="edex">
<h2>EDEX<a class="headerlink" href="#edex" title="Permalink to this headline"></a></h2> <h2>EDEX<a class="headerlink" href="#edex" title="Permalink to this heading"></a></h2>
<p>The main server for AWIPS. Qpid sends alerts to EDEX when data stored <p>The main server for AWIPS. Qpid sends alerts to EDEX when data stored
by the LDM is ready for processing. These Qpid messages include file by the LDM is ready for processing. These Qpid messages include file
header information which allows EDEX to determine the appropriate data header information which allows EDEX to determine the appropriate data
@ -147,7 +148,7 @@ ingest and request servers are started and stopped with the commands
<code class="docutils literal notranslate"><span class="pre">/etc/rc.d/init.d/edex_camel</span></code></p> <code class="docutils literal notranslate"><span class="pre">/etc/rc.d/init.d/edex_camel</span></code></p>
</section> </section>
<section id="cave"> <section id="cave">
<h2>CAVE<a class="headerlink" href="#cave" title="Permalink to this headline"></a></h2> <h2>CAVE<a class="headerlink" href="#cave" title="Permalink to this heading"></a></h2>
<p>Common AWIPS Visualization Environment. The data rendering and <p>Common AWIPS Visualization Environment. The data rendering and
visualization tool for AWIPS. CAVE contains of a number of different visualization tool for AWIPS. CAVE contains of a number of different
data display configurations called perspectives. Perspectives used in data display configurations called perspectives. Perspectives used in
@ -163,7 +164,7 @@ Two-Dimensional), <strong>GFE</strong> (Graphical Forecast Editor), and <strong>
</figure> </figure>
</section> </section>
<section id="alertviz"> <section id="alertviz">
<h2>Alertviz<a class="headerlink" href="#alertviz" title="Permalink to this headline"></a></h2> <h2>Alertviz<a class="headerlink" href="#alertviz" title="Permalink to this heading"></a></h2>
<p><strong>Alertviz</strong> is a modernized version of an AWIPS I application, designed <p><strong>Alertviz</strong> is a modernized version of an AWIPS I application, designed
to present various notifications, error messages, and alarms to the user to present various notifications, error messages, and alarms to the user
(forecaster). AlertViz can be executed either independently or from CAVE (forecaster). AlertViz can be executed either independently or from CAVE
@ -172,7 +173,7 @@ not required to be run separately. The toolbar is also <strong>hidden from
view</strong> and is accessed by right-click on the desktop taskbar icon.</p> view</strong> and is accessed by right-click on the desktop taskbar icon.</p>
</section> </section>
<section id="id1"> <section id="id1">
<h2>LDM<a class="headerlink" href="#id1" title="Permalink to this headline"></a></h2> <h2>LDM<a class="headerlink" href="#id1" title="Permalink to this heading"></a></h2>
<p><a class="reference external" href="http://www.unidata.ucar.edu/software/ldm/">http://www.unidata.ucar.edu/software/ldm/</a></p> <p><a class="reference external" href="http://www.unidata.ucar.edu/software/ldm/">http://www.unidata.ucar.edu/software/ldm/</a></p>
<p>The <strong>LDM</strong> (Local Data Manager), developed and supported by Unidata, is <p>The <strong>LDM</strong> (Local Data Manager), developed and supported by Unidata, is
a suite of client and server programs designed for data distribution, a suite of client and server programs designed for data distribution,
@ -186,14 +187,14 @@ processing. The LDM is started and stopped with the commands
<code class="docutils literal notranslate"><span class="pre">service</span> <span class="pre">edex_ldm</span> <span class="pre">start</span></code> and <code class="docutils literal notranslate"><span class="pre">service</span> <span class="pre">edex_ldm</span> <span class="pre">stop</span></code></p> <code class="docutils literal notranslate"><span class="pre">service</span> <span class="pre">edex_ldm</span> <span class="pre">start</span></code> and <code class="docutils literal notranslate"><span class="pre">service</span> <span class="pre">edex_ldm</span> <span class="pre">stop</span></code></p>
</section> </section>
<section id="edexbridge"> <section id="edexbridge">
<h2>edexBridge<a class="headerlink" href="#edexbridge" title="Permalink to this headline"></a></h2> <h2>edexBridge<a class="headerlink" href="#edexbridge" title="Permalink to this heading"></a></h2>
<p>edexBridge, invoked in the LDM configuration file <p>edexBridge, invoked in the LDM configuration file
<code class="docutils literal notranslate"><span class="pre">/awips2/ldm/etc/ldmd.conf</span></code>, is used by the LDM to post “data <code class="docutils literal notranslate"><span class="pre">/awips2/ldm/etc/ldmd.conf</span></code>, is used by the LDM to post “data
available” messaged to Qpid, which alerts the EDEX Ingest server that a available” messaged to Qpid, which alerts the EDEX Ingest server that a
file is ready for processing.</p> file is ready for processing.</p>
</section> </section>
<section id="id2"> <section id="id2">
<h2>Qpid<a class="headerlink" href="#id2" title="Permalink to this headline"></a></h2> <h2>Qpid<a class="headerlink" href="#id2" title="Permalink to this heading"></a></h2>
<p><a class="reference external" href="http://qpid.apache.org">http://qpid.apache.org</a></p> <p><a class="reference external" href="http://qpid.apache.org">http://qpid.apache.org</a></p>
<p><strong>Apache Qpid</strong>, the Queue Processor Interface Daemon, is the messaging <p><strong>Apache Qpid</strong>, the Queue Processor Interface Daemon, is the messaging
system used by AWIPS to facilitate communication between services. system used by AWIPS to facilitate communication between services.
@ -205,7 +206,7 @@ and stopped by <code class="docutils literal notranslate"><span class="pre">edex
the system script <code class="docutils literal notranslate"><span class="pre">/etc/rc.d/init.d/qpidd</span></code></p> the system script <code class="docutils literal notranslate"><span class="pre">/etc/rc.d/init.d/qpidd</span></code></p>
</section> </section>
<section id="postgresql"> <section id="postgresql">
<h2>PostgreSQL<a class="headerlink" href="#postgresql" title="Permalink to this headline"></a></h2> <h2>PostgreSQL<a class="headerlink" href="#postgresql" title="Permalink to this heading"></a></h2>
<p><a class="reference external" href="http://www.postgresql.org">http://www.postgresql.org</a></p> <p><a class="reference external" href="http://www.postgresql.org">http://www.postgresql.org</a></p>
<p><strong>PostgreSQL</strong>, known simply as Postgres, is a relational database <p><strong>PostgreSQL</strong>, known simply as Postgres, is a relational database
management system (DBMS) which handles the storage and retrieval of management system (DBMS) which handles the storage and retrieval of
@ -217,7 +218,7 @@ called <strong>psql</strong>. Postgres is started and stopped by <code class="do
<code class="docutils literal notranslate"><span class="pre">/etc/rc.d/init.d/edex_postgres</span></code></p> <code class="docutils literal notranslate"><span class="pre">/etc/rc.d/init.d/edex_postgres</span></code></p>
</section> </section>
<section id="hdf5"> <section id="hdf5">
<h2>HDF5<a class="headerlink" href="#hdf5" title="Permalink to this headline"></a></h2> <h2>HDF5<a class="headerlink" href="#hdf5" title="Permalink to this heading"></a></h2>
<p><a class="reference external" href="http://www.hdfgroup.org/HDF5/">http://www.hdfgroup.org/HDF5/</a></p> <p><a class="reference external" href="http://www.hdfgroup.org/HDF5/">http://www.hdfgroup.org/HDF5/</a></p>
<p><strong>Hierarchical Data Format (v.5)</strong> is <p><strong>Hierarchical Data Format (v.5)</strong> is
the primary data storage format used by AWIPS for processed grids, the primary data storage format used by AWIPS for processed grids,
@ -230,7 +231,7 @@ also contain data from multiple radars. HDF5 is stored in
<code class="docutils literal notranslate"><span class="pre">/awips2/edex/data/hdf5/</span></code></p> <code class="docutils literal notranslate"><span class="pre">/awips2/edex/data/hdf5/</span></code></p>
</section> </section>
<section id="pypies-httpd-pypies"> <section id="pypies-httpd-pypies">
<h2>PyPIES (httpd-pypies)<a class="headerlink" href="#pypies-httpd-pypies" title="Permalink to this headline"></a></h2> <h2>PyPIES (httpd-pypies)<a class="headerlink" href="#pypies-httpd-pypies" title="Permalink to this heading"></a></h2>
<p><strong>PyPIES</strong>, Python Process Isolated Enhanced Storage, was created for <p><strong>PyPIES</strong>, Python Process Isolated Enhanced Storage, was created for
AWIPS to isolate the management of HDF5 Processed Data Storage from AWIPS to isolate the management of HDF5 Processed Data Storage from
the EDEX processes. PyPIES manages access, i.e., reads and writes, of the EDEX processes. PyPIES manages access, i.e., reads and writes, of

View file

@ -14,6 +14,7 @@
<script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script> <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
<script src="../_static/jquery.js"></script> <script src="../_static/jquery.js"></script>
<script src="../_static/underscore.js"></script> <script src="../_static/underscore.js"></script>
<script src="../_static/_sphinx_javascript_frameworks_compat.js"></script>
<script src="../_static/doctools.js"></script> <script src="../_static/doctools.js"></script>
<script src="../_static/js/theme.js"></script> <script src="../_static/js/theme.js"></script>
<link rel="author" title="About these documents" href="../about.html" /> <link rel="author" title="About these documents" href="../about.html" />
@ -91,7 +92,7 @@
<div itemprop="articleBody"> <div itemprop="articleBody">
<section id="module-awips.dataaccess.CombinedTimeQuery"> <section id="module-awips.dataaccess.CombinedTimeQuery">
<span id="combinedtimequery"></span><h1>CombinedTimeQuery<a class="headerlink" href="#module-awips.dataaccess.CombinedTimeQuery" title="Permalink to this headline"></a></h1> <span id="combinedtimequery"></span><h1>CombinedTimeQuery<a class="headerlink" href="#module-awips.dataaccess.CombinedTimeQuery" title="Permalink to this heading"></a></h1>
<dl class="py function"> <dl class="py function">
<dt class="sig sig-object py" id="awips.dataaccess.CombinedTimeQuery.getAvailableTimes"> <dt class="sig sig-object py" id="awips.dataaccess.CombinedTimeQuery.getAvailableTimes">
<span class="sig-prename descclassname"><span class="pre">awips.dataaccess.CombinedTimeQuery.</span></span><span class="sig-name descname"><span class="pre">getAvailableTimes</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">request</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">refTimeOnly</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/awips/dataaccess/CombinedTimeQuery.html#getAvailableTimes"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#awips.dataaccess.CombinedTimeQuery.getAvailableTimes" title="Permalink to this definition"></a></dt> <span class="sig-prename descclassname"><span class="pre">awips.dataaccess.CombinedTimeQuery.</span></span><span class="sig-name descname"><span class="pre">getAvailableTimes</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">request</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">refTimeOnly</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/awips/dataaccess/CombinedTimeQuery.html#getAvailableTimes"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#awips.dataaccess.CombinedTimeQuery.getAvailableTimes" title="Permalink to this definition"></a></dt>

View file

@ -14,6 +14,7 @@
<script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script> <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
<script src="../_static/jquery.js"></script> <script src="../_static/jquery.js"></script>
<script src="../_static/underscore.js"></script> <script src="../_static/underscore.js"></script>
<script src="../_static/_sphinx_javascript_frameworks_compat.js"></script>
<script src="../_static/doctools.js"></script> <script src="../_static/doctools.js"></script>
<script src="../_static/js/theme.js"></script> <script src="../_static/js/theme.js"></script>
<link rel="author" title="About these documents" href="../about.html" /> <link rel="author" title="About these documents" href="../about.html" />
@ -91,7 +92,7 @@
<div itemprop="articleBody"> <div itemprop="articleBody">
<section id="module-awips.dataaccess.DataAccessLayer"> <section id="module-awips.dataaccess.DataAccessLayer">
<span id="dataaccesslayer"></span><h1>DataAccessLayer<a class="headerlink" href="#module-awips.dataaccess.DataAccessLayer" title="Permalink to this headline"></a></h1> <span id="dataaccesslayer"></span><h1>DataAccessLayer<a class="headerlink" href="#module-awips.dataaccess.DataAccessLayer" title="Permalink to this heading"></a></h1>
<dl class="py function"> <dl class="py function">
<dt class="sig sig-object py" id="awips.dataaccess.DataAccessLayer.changeEDEXHost"> <dt class="sig sig-object py" id="awips.dataaccess.DataAccessLayer.changeEDEXHost">
<span class="sig-prename descclassname"><span class="pre">awips.dataaccess.DataAccessLayer.</span></span><span class="sig-name descname"><span class="pre">changeEDEXHost</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">newHostName</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/awips/dataaccess/DataAccessLayer.html#changeEDEXHost"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#awips.dataaccess.DataAccessLayer.changeEDEXHost" title="Permalink to this definition"></a></dt> <span class="sig-prename descclassname"><span class="pre">awips.dataaccess.DataAccessLayer.</span></span><span class="sig-name descname"><span class="pre">changeEDEXHost</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">newHostName</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/awips/dataaccess/DataAccessLayer.html#changeEDEXHost"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#awips.dataaccess.DataAccessLayer.changeEDEXHost" title="Permalink to this definition"></a></dt>

View file

@ -14,6 +14,7 @@
<script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script> <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
<script src="../_static/jquery.js"></script> <script src="../_static/jquery.js"></script>
<script src="../_static/underscore.js"></script> <script src="../_static/underscore.js"></script>
<script src="../_static/_sphinx_javascript_frameworks_compat.js"></script>
<script src="../_static/doctools.js"></script> <script src="../_static/doctools.js"></script>
<script src="../_static/js/theme.js"></script> <script src="../_static/js/theme.js"></script>
<link rel="author" title="About these documents" href="../about.html" /> <link rel="author" title="About these documents" href="../about.html" />
@ -91,7 +92,7 @@
<div itemprop="articleBody"> <div itemprop="articleBody">
<section id="module-awips.DateTimeConverter"> <section id="module-awips.DateTimeConverter">
<span id="datetimeconverter"></span><h1>DateTimeConverter<a class="headerlink" href="#module-awips.DateTimeConverter" title="Permalink to this headline"></a></h1> <span id="datetimeconverter"></span><h1>DateTimeConverter<a class="headerlink" href="#module-awips.DateTimeConverter" title="Permalink to this heading"></a></h1>
<dl class="py function"> <dl class="py function">
<dt class="sig sig-object py" id="awips.DateTimeConverter.constructTimeRange"> <dt class="sig sig-object py" id="awips.DateTimeConverter.constructTimeRange">
<span class="sig-prename descclassname"><span class="pre">awips.DateTimeConverter.</span></span><span class="sig-name descname"><span class="pre">constructTimeRange</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="o"><span class="pre">*</span></span><span class="n"><span class="pre">args</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/awips/DateTimeConverter.html#constructTimeRange"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#awips.DateTimeConverter.constructTimeRange" title="Permalink to this definition"></a></dt> <span class="sig-prename descclassname"><span class="pre">awips.DateTimeConverter.</span></span><span class="sig-name descname"><span class="pre">constructTimeRange</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="o"><span class="pre">*</span></span><span class="n"><span class="pre">args</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/awips/DateTimeConverter.html#constructTimeRange"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#awips.DateTimeConverter.constructTimeRange" title="Permalink to this definition"></a></dt>

View file

@ -14,6 +14,7 @@
<script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script> <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
<script src="../_static/jquery.js"></script> <script src="../_static/jquery.js"></script>
<script src="../_static/underscore.js"></script> <script src="../_static/underscore.js"></script>
<script src="../_static/_sphinx_javascript_frameworks_compat.js"></script>
<script src="../_static/doctools.js"></script> <script src="../_static/doctools.js"></script>
<script src="../_static/js/theme.js"></script> <script src="../_static/js/theme.js"></script>
<link rel="author" title="About these documents" href="../about.html" /> <link rel="author" title="About these documents" href="../about.html" />
@ -91,7 +92,7 @@
<div itemprop="articleBody"> <div itemprop="articleBody">
<section id="idatarequest-newdatarequest"> <section id="idatarequest-newdatarequest">
<h1>IDataRequest (newDataRequest())<a class="headerlink" href="#idatarequest-newdatarequest" title="Permalink to this headline"></a></h1> <h1>IDataRequest (newDataRequest())<a class="headerlink" href="#idatarequest-newdatarequest" title="Permalink to this heading"></a></h1>
<dl class="py class"> <dl class="py class">
<dt class="sig sig-object py" id="awips.dataaccess.IDataRequest"> <dt class="sig sig-object py" id="awips.dataaccess.IDataRequest">
<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">awips.dataaccess.</span></span><span class="sig-name descname"><span class="pre">IDataRequest</span></span><a class="reference internal" href="../_modules/awips/dataaccess.html#IDataRequest"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#awips.dataaccess.IDataRequest" title="Permalink to this definition"></a></dt> <em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">awips.dataaccess.</span></span><span class="sig-name descname"><span class="pre">IDataRequest</span></span><a class="reference internal" href="../_modules/awips/dataaccess.html#IDataRequest"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#awips.dataaccess.IDataRequest" title="Permalink to this definition"></a></dt>

View file

@ -14,6 +14,7 @@
<script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script> <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
<script src="../_static/jquery.js"></script> <script src="../_static/jquery.js"></script>
<script src="../_static/underscore.js"></script> <script src="../_static/underscore.js"></script>
<script src="../_static/_sphinx_javascript_frameworks_compat.js"></script>
<script src="../_static/doctools.js"></script> <script src="../_static/doctools.js"></script>
<script src="../_static/js/theme.js"></script> <script src="../_static/js/theme.js"></script>
<link rel="author" title="About these documents" href="../about.html" /> <link rel="author" title="About these documents" href="../about.html" />
@ -91,7 +92,7 @@
<div itemprop="articleBody"> <div itemprop="articleBody">
<section id="module-awips.gfe.IFPClient"> <section id="module-awips.gfe.IFPClient">
<span id="ifpclient"></span><h1>IFPClient<a class="headerlink" href="#module-awips.gfe.IFPClient" title="Permalink to this headline"></a></h1> <span id="ifpclient"></span><h1>IFPClient<a class="headerlink" href="#module-awips.gfe.IFPClient" title="Permalink to this heading"></a></h1>
<dl class="py class"> <dl class="py class">
<dt class="sig sig-object py" id="awips.gfe.IFPClient.IFPClient"> <dt class="sig sig-object py" id="awips.gfe.IFPClient.IFPClient">
<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">awips.gfe.IFPClient.</span></span><span class="sig-name descname"><span class="pre">IFPClient</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">host</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">port</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">user</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">site</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">progName</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/awips/gfe/IFPClient.html#IFPClient"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#awips.gfe.IFPClient.IFPClient" title="Permalink to this definition"></a></dt> <em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">awips.gfe.IFPClient.</span></span><span class="sig-name descname"><span class="pre">IFPClient</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">host</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">port</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">user</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">site</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">progName</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/awips/gfe/IFPClient.html#IFPClient"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#awips.gfe.IFPClient.IFPClient" title="Permalink to this definition"></a></dt>

View file

@ -14,6 +14,7 @@
<script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script> <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
<script src="../_static/jquery.js"></script> <script src="../_static/jquery.js"></script>
<script src="../_static/underscore.js"></script> <script src="../_static/underscore.js"></script>
<script src="../_static/_sphinx_javascript_frameworks_compat.js"></script>
<script src="../_static/doctools.js"></script> <script src="../_static/doctools.js"></script>
<script src="../_static/js/theme.js"></script> <script src="../_static/js/theme.js"></script>
<link rel="author" title="About these documents" href="../about.html" /> <link rel="author" title="About these documents" href="../about.html" />
@ -91,7 +92,7 @@
<div itemprop="articleBody"> <div itemprop="articleBody">
<section id="module-awips.dataaccess.ModelSounding"> <section id="module-awips.dataaccess.ModelSounding">
<span id="modelsounding"></span><h1>ModelSounding<a class="headerlink" href="#module-awips.dataaccess.ModelSounding" title="Permalink to this headline"></a></h1> <span id="modelsounding"></span><h1>ModelSounding<a class="headerlink" href="#module-awips.dataaccess.ModelSounding" title="Permalink to this heading"></a></h1>
<dl class="py function"> <dl class="py function">
<dt class="sig sig-object py" id="awips.dataaccess.ModelSounding.changeEDEXHost"> <dt class="sig sig-object py" id="awips.dataaccess.ModelSounding.changeEDEXHost">
<span class="sig-prename descclassname"><span class="pre">awips.dataaccess.ModelSounding.</span></span><span class="sig-name descname"><span class="pre">changeEDEXHost</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">host</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/awips/dataaccess/ModelSounding.html#changeEDEXHost"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#awips.dataaccess.ModelSounding.changeEDEXHost" title="Permalink to this definition"></a></dt> <span class="sig-prename descclassname"><span class="pre">awips.dataaccess.ModelSounding.</span></span><span class="sig-name descname"><span class="pre">changeEDEXHost</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">host</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/awips/dataaccess/ModelSounding.html#changeEDEXHost"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#awips.dataaccess.ModelSounding.changeEDEXHost" title="Permalink to this definition"></a></dt>

View file

@ -14,6 +14,7 @@
<script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script> <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
<script src="../_static/jquery.js"></script> <script src="../_static/jquery.js"></script>
<script src="../_static/underscore.js"></script> <script src="../_static/underscore.js"></script>
<script src="../_static/_sphinx_javascript_frameworks_compat.js"></script>
<script src="../_static/doctools.js"></script> <script src="../_static/doctools.js"></script>
<script src="../_static/js/theme.js"></script> <script src="../_static/js/theme.js"></script>
<link rel="author" title="About these documents" href="../about.html" /> <link rel="author" title="About these documents" href="../about.html" />
@ -91,7 +92,7 @@
<div itemprop="articleBody"> <div itemprop="articleBody">
<section id="module-awips.dataaccess.PyData"> <section id="module-awips.dataaccess.PyData">
<span id="pydata"></span><h1>PyData<a class="headerlink" href="#module-awips.dataaccess.PyData" title="Permalink to this headline"></a></h1> <span id="pydata"></span><h1>PyData<a class="headerlink" href="#module-awips.dataaccess.PyData" title="Permalink to this heading"></a></h1>
<dl class="py class"> <dl class="py class">
<dt class="sig sig-object py" id="awips.dataaccess.PyData.PyData"> <dt class="sig sig-object py" id="awips.dataaccess.PyData.PyData">
<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">awips.dataaccess.PyData.</span></span><span class="sig-name descname"><span class="pre">PyData</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">dataRecord</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/awips/dataaccess/PyData.html#PyData"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#awips.dataaccess.PyData.PyData" title="Permalink to this definition"></a></dt> <em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">awips.dataaccess.PyData.</span></span><span class="sig-name descname"><span class="pre">PyData</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">dataRecord</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/awips/dataaccess/PyData.html#PyData"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#awips.dataaccess.PyData.PyData" title="Permalink to this definition"></a></dt>

View file

@ -14,6 +14,7 @@
<script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script> <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
<script src="../_static/jquery.js"></script> <script src="../_static/jquery.js"></script>
<script src="../_static/underscore.js"></script> <script src="../_static/underscore.js"></script>
<script src="../_static/_sphinx_javascript_frameworks_compat.js"></script>
<script src="../_static/doctools.js"></script> <script src="../_static/doctools.js"></script>
<script src="../_static/js/theme.js"></script> <script src="../_static/js/theme.js"></script>
<link rel="author" title="About these documents" href="../about.html" /> <link rel="author" title="About these documents" href="../about.html" />
@ -91,7 +92,7 @@
<div itemprop="articleBody"> <div itemprop="articleBody">
<section id="module-awips.dataaccess.PyGeometryData"> <section id="module-awips.dataaccess.PyGeometryData">
<span id="pygeometrydata"></span><h1>PyGeometryData<a class="headerlink" href="#module-awips.dataaccess.PyGeometryData" title="Permalink to this headline"></a></h1> <span id="pygeometrydata"></span><h1>PyGeometryData<a class="headerlink" href="#module-awips.dataaccess.PyGeometryData" title="Permalink to this heading"></a></h1>
<dl class="py class"> <dl class="py class">
<dt class="sig sig-object py" id="awips.dataaccess.PyGeometryData.PyGeometryData"> <dt class="sig sig-object py" id="awips.dataaccess.PyGeometryData.PyGeometryData">
<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">awips.dataaccess.PyGeometryData.</span></span><span class="sig-name descname"><span class="pre">PyGeometryData</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">geoDataRecord</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">geometry</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/awips/dataaccess/PyGeometryData.html#PyGeometryData"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#awips.dataaccess.PyGeometryData.PyGeometryData" title="Permalink to this definition"></a></dt> <em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">awips.dataaccess.PyGeometryData.</span></span><span class="sig-name descname"><span class="pre">PyGeometryData</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">geoDataRecord</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">geometry</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/awips/dataaccess/PyGeometryData.html#PyGeometryData"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#awips.dataaccess.PyGeometryData.PyGeometryData" title="Permalink to this definition"></a></dt>

View file

@ -14,6 +14,7 @@
<script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script> <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
<script src="../_static/jquery.js"></script> <script src="../_static/jquery.js"></script>
<script src="../_static/underscore.js"></script> <script src="../_static/underscore.js"></script>
<script src="../_static/_sphinx_javascript_frameworks_compat.js"></script>
<script src="../_static/doctools.js"></script> <script src="../_static/doctools.js"></script>
<script src="../_static/js/theme.js"></script> <script src="../_static/js/theme.js"></script>
<link rel="author" title="About these documents" href="../about.html" /> <link rel="author" title="About these documents" href="../about.html" />
@ -91,7 +92,7 @@
<div itemprop="articleBody"> <div itemprop="articleBody">
<section id="module-awips.dataaccess.PyGridData"> <section id="module-awips.dataaccess.PyGridData">
<span id="pygriddata"></span><h1>PyGridData<a class="headerlink" href="#module-awips.dataaccess.PyGridData" title="Permalink to this headline"></a></h1> <span id="pygriddata"></span><h1>PyGridData<a class="headerlink" href="#module-awips.dataaccess.PyGridData" title="Permalink to this heading"></a></h1>
<dl class="py class"> <dl class="py class">
<dt class="sig sig-object py" id="awips.dataaccess.PyGridData.PyGridData"> <dt class="sig sig-object py" id="awips.dataaccess.PyGridData.PyGridData">
<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">awips.dataaccess.PyGridData.</span></span><span class="sig-name descname"><span class="pre">PyGridData</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">gridDataRecord</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">nx</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">ny</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">latLonGrid</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">latLonDelegate</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/awips/dataaccess/PyGridData.html#PyGridData"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#awips.dataaccess.PyGridData.PyGridData" title="Permalink to this definition"></a></dt> <em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">awips.dataaccess.PyGridData.</span></span><span class="sig-name descname"><span class="pre">PyGridData</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">gridDataRecord</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">nx</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">ny</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">latLonGrid</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">latLonDelegate</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/awips/dataaccess/PyGridData.html#PyGridData"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#awips.dataaccess.PyGridData.PyGridData" title="Permalink to this definition"></a></dt>

View file

@ -14,6 +14,7 @@
<script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script> <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
<script src="../_static/jquery.js"></script> <script src="../_static/jquery.js"></script>
<script src="../_static/underscore.js"></script> <script src="../_static/underscore.js"></script>
<script src="../_static/_sphinx_javascript_frameworks_compat.js"></script>
<script src="../_static/doctools.js"></script> <script src="../_static/doctools.js"></script>
<script src="../_static/js/theme.js"></script> <script src="../_static/js/theme.js"></script>
<link rel="author" title="About these documents" href="../about.html" /> <link rel="author" title="About these documents" href="../about.html" />
@ -91,7 +92,7 @@
<div itemprop="articleBody"> <div itemprop="articleBody">
<section id="module-awips.RadarCommon"> <section id="module-awips.RadarCommon">
<span id="radarcommon"></span><h1>RadarCommon<a class="headerlink" href="#module-awips.RadarCommon" title="Permalink to this headline"></a></h1> <span id="radarcommon"></span><h1>RadarCommon<a class="headerlink" href="#module-awips.RadarCommon" title="Permalink to this heading"></a></h1>
<dl class="py function"> <dl class="py function">
<dt class="sig sig-object py" id="awips.RadarCommon.encode_dep_vals"> <dt class="sig sig-object py" id="awips.RadarCommon.encode_dep_vals">
<span class="sig-prename descclassname"><span class="pre">awips.RadarCommon.</span></span><span class="sig-name descname"><span class="pre">encode_dep_vals</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">depVals</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/awips/RadarCommon.html#encode_dep_vals"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#awips.RadarCommon.encode_dep_vals" title="Permalink to this definition"></a></dt> <span class="sig-prename descclassname"><span class="pre">awips.RadarCommon.</span></span><span class="sig-name descname"><span class="pre">encode_dep_vals</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">depVals</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/awips/RadarCommon.html#encode_dep_vals"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#awips.RadarCommon.encode_dep_vals" title="Permalink to this definition"></a></dt>

View file

@ -14,6 +14,7 @@
<script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script> <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
<script src="../_static/jquery.js"></script> <script src="../_static/jquery.js"></script>
<script src="../_static/underscore.js"></script> <script src="../_static/underscore.js"></script>
<script src="../_static/_sphinx_javascript_frameworks_compat.js"></script>
<script src="../_static/doctools.js"></script> <script src="../_static/doctools.js"></script>
<script src="../_static/js/theme.js"></script> <script src="../_static/js/theme.js"></script>
<link rel="author" title="About these documents" href="../about.html" /> <link rel="author" title="About these documents" href="../about.html" />
@ -91,7 +92,7 @@
<div itemprop="articleBody"> <div itemprop="articleBody">
<section id="module-awips.ThriftClient"> <section id="module-awips.ThriftClient">
<span id="thriftclient"></span><h1>ThriftClient<a class="headerlink" href="#module-awips.ThriftClient" title="Permalink to this headline"></a></h1> <span id="thriftclient"></span><h1>ThriftClient<a class="headerlink" href="#module-awips.ThriftClient" title="Permalink to this heading"></a></h1>
<dl class="py class"> <dl class="py class">
<dt class="sig sig-object py" id="awips.ThriftClient.ThriftClient"> <dt class="sig sig-object py" id="awips.ThriftClient.ThriftClient">
<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">awips.ThriftClient.</span></span><span class="sig-name descname"><span class="pre">ThriftClient</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">host</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">port</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">9581</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">uri</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">'/services'</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/awips/ThriftClient.html#ThriftClient"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#awips.ThriftClient.ThriftClient" title="Permalink to this definition"></a></dt> <em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">awips.ThriftClient.</span></span><span class="sig-name descname"><span class="pre">ThriftClient</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">host</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">port</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">9581</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">uri</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">'/services'</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/awips/ThriftClient.html#ThriftClient"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#awips.ThriftClient.ThriftClient" title="Permalink to this definition"></a></dt>

View file

@ -14,6 +14,7 @@
<script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script> <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
<script src="../_static/jquery.js"></script> <script src="../_static/jquery.js"></script>
<script src="../_static/underscore.js"></script> <script src="../_static/underscore.js"></script>
<script src="../_static/_sphinx_javascript_frameworks_compat.js"></script>
<script src="../_static/doctools.js"></script> <script src="../_static/doctools.js"></script>
<script src="../_static/js/theme.js"></script> <script src="../_static/js/theme.js"></script>
<link rel="author" title="About these documents" href="../about.html" /> <link rel="author" title="About these documents" href="../about.html" />
@ -91,7 +92,7 @@
<div itemprop="articleBody"> <div itemprop="articleBody">
<section id="module-awips.dataaccess.ThriftClientRouter"> <section id="module-awips.dataaccess.ThriftClientRouter">
<span id="thriftclientrouter"></span><h1>ThriftClientRouter<a class="headerlink" href="#module-awips.dataaccess.ThriftClientRouter" title="Permalink to this headline"></a></h1> <span id="thriftclientrouter"></span><h1>ThriftClientRouter<a class="headerlink" href="#module-awips.dataaccess.ThriftClientRouter" title="Permalink to this heading"></a></h1>
<dl class="py class"> <dl class="py class">
<dt class="sig sig-object py" id="awips.dataaccess.ThriftClientRouter.LazyGridLatLon"> <dt class="sig sig-object py" id="awips.dataaccess.ThriftClientRouter.LazyGridLatLon">
<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">awips.dataaccess.ThriftClientRouter.</span></span><span class="sig-name descname"><span class="pre">LazyGridLatLon</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">client</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">nx</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">ny</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">envelope</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">crsWkt</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/awips/dataaccess/ThriftClientRouter.html#LazyGridLatLon"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#awips.dataaccess.ThriftClientRouter.LazyGridLatLon" title="Permalink to this definition"></a></dt> <em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">awips.dataaccess.ThriftClientRouter.</span></span><span class="sig-name descname"><span class="pre">LazyGridLatLon</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">client</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">nx</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">ny</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">envelope</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">crsWkt</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/awips/dataaccess/ThriftClientRouter.html#LazyGridLatLon"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#awips.dataaccess.ThriftClientRouter.LazyGridLatLon" title="Permalink to this definition"></a></dt>

View file

@ -14,6 +14,7 @@
<script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script> <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
<script src="../_static/jquery.js"></script> <script src="../_static/jquery.js"></script>
<script src="../_static/underscore.js"></script> <script src="../_static/underscore.js"></script>
<script src="../_static/_sphinx_javascript_frameworks_compat.js"></script>
<script src="../_static/doctools.js"></script> <script src="../_static/doctools.js"></script>
<script src="../_static/js/theme.js"></script> <script src="../_static/js/theme.js"></script>
<link rel="author" title="About these documents" href="../about.html" /> <link rel="author" title="About these documents" href="../about.html" />
@ -91,7 +92,7 @@
<div itemprop="articleBody"> <div itemprop="articleBody">
<section id="module-awips.TimeUtil"> <section id="module-awips.TimeUtil">
<span id="timeutil"></span><h1>TimeUtil<a class="headerlink" href="#module-awips.TimeUtil" title="Permalink to this headline"></a></h1> <span id="timeutil"></span><h1>TimeUtil<a class="headerlink" href="#module-awips.TimeUtil" title="Permalink to this heading"></a></h1>
<dl class="py function"> <dl class="py function">
<dt class="sig sig-object py" id="awips.TimeUtil.determineDrtOffset"> <dt class="sig sig-object py" id="awips.TimeUtil.determineDrtOffset">
<span class="sig-prename descclassname"><span class="pre">awips.TimeUtil.</span></span><span class="sig-name descname"><span class="pre">determineDrtOffset</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">timeStr</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/awips/TimeUtil.html#determineDrtOffset"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#awips.TimeUtil.determineDrtOffset" title="Permalink to this definition"></a></dt> <span class="sig-prename descclassname"><span class="pre">awips.TimeUtil.</span></span><span class="sig-name descname"><span class="pre">determineDrtOffset</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">timeStr</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/awips/TimeUtil.html#determineDrtOffset"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#awips.TimeUtil.determineDrtOffset" title="Permalink to this definition"></a></dt>

View file

@ -14,6 +14,7 @@
<script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script> <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
<script src="../_static/jquery.js"></script> <script src="../_static/jquery.js"></script>
<script src="../_static/underscore.js"></script> <script src="../_static/underscore.js"></script>
<script src="../_static/_sphinx_javascript_frameworks_compat.js"></script>
<script src="../_static/doctools.js"></script> <script src="../_static/doctools.js"></script>
<script src="../_static/js/theme.js"></script> <script src="../_static/js/theme.js"></script>
<link rel="author" title="About these documents" href="../about.html" /> <link rel="author" title="About these documents" href="../about.html" />
@ -90,7 +91,7 @@
<div itemprop="articleBody"> <div itemprop="articleBody">
<section id="api-documentation"> <section id="api-documentation">
<h1>API Documentation<a class="headerlink" href="#api-documentation" title="Permalink to this headline"></a></h1> <h1>API Documentation<a class="headerlink" href="#api-documentation" title="Permalink to this heading"></a></h1>
<div class="toctree-wrapper compound"> <div class="toctree-wrapper compound">
<ul> <ul>
<li class="toctree-l1"><a class="reference internal" href="DataAccessLayer.html">DataAccessLayer</a></li> <li class="toctree-l1"><a class="reference internal" href="DataAccessLayer.html">DataAccessLayer</a></li>

View file

@ -14,6 +14,7 @@
<script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script> <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
<script src="_static/jquery.js"></script> <script src="_static/jquery.js"></script>
<script src="_static/underscore.js"></script> <script src="_static/underscore.js"></script>
<script src="_static/_sphinx_javascript_frameworks_compat.js"></script>
<script src="_static/doctools.js"></script> <script src="_static/doctools.js"></script>
<script src="_static/js/theme.js"></script> <script src="_static/js/theme.js"></script>
<link rel="author" title="About these documents" href="about.html" /> <link rel="author" title="About these documents" href="about.html" />
@ -82,9 +83,9 @@
<div itemprop="articleBody"> <div itemprop="articleBody">
<section id="available-data-types"> <section id="available-data-types">
<h1>Available Data Types<a class="headerlink" href="#available-data-types" title="Permalink to this headline"></a></h1> <h1>Available Data Types<a class="headerlink" href="#available-data-types" title="Permalink to this heading"></a></h1>
<section id="satellite"> <section id="satellite">
<h2>satellite<a class="headerlink" href="#satellite" title="Permalink to this headline"></a></h2> <h2>satellite<a class="headerlink" href="#satellite" title="Permalink to this heading"></a></h2>
<ul> <ul>
<li><p>2-D NumPy Array</p></li> <li><p>2-D NumPy Array</p></li>
<li><p>returned by: <a class="reference external" href="api/DataAccessLayer.html#awips.dataaccess.DataAccessLayer.getGridData">awips.dataaccess.DataAccessLayer.getGridData(request, times=[])</a></p></li> <li><p>returned by: <a class="reference external" href="api/DataAccessLayer.html#awips.dataaccess.DataAccessLayer.getGridData">awips.dataaccess.DataAccessLayer.getGridData(request, times=[])</a></p></li>
@ -113,7 +114,7 @@
<p></p> <p></p>
</section> </section>
<section id="binlightning"> <section id="binlightning">
<h2>binlightning<a class="headerlink" href="#binlightning" title="Permalink to this headline"></a></h2> <h2>binlightning<a class="headerlink" href="#binlightning" title="Permalink to this heading"></a></h2>
<ul> <ul>
<li><p>Shapely Point:</p> <li><p>Shapely Point:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">POINT</span> <span class="p">(</span><span class="o">-</span><span class="mf">65.65293884277344</span> <span class="o">-</span><span class="mf">16.94915580749512</span><span class="p">)</span> <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">POINT</span> <span class="p">(</span><span class="o">-</span><span class="mf">65.65293884277344</span> <span class="o">-</span><span class="mf">16.94915580749512</span><span class="p">)</span>
@ -136,7 +137,7 @@
<p></p> <p></p>
</section> </section>
<section id="grid"> <section id="grid">
<h2>grid<a class="headerlink" href="#grid" title="Permalink to this headline"></a></h2> <h2>grid<a class="headerlink" href="#grid" title="Permalink to this heading"></a></h2>
<ul> <ul>
<li><p>2-D NumPy Array</p></li> <li><p>2-D NumPy Array</p></li>
<li><p>returned by: <a class="reference external" href="api/DataAccessLayer.html#awips.dataaccess.DataAccessLayer.getGridData">awips.dataaccess.DataAccessLayer.getGridData(request, times=[])</a></p></li> <li><p>returned by: <a class="reference external" href="api/DataAccessLayer.html#awips.dataaccess.DataAccessLayer.getGridData">awips.dataaccess.DataAccessLayer.getGridData(request, times=[])</a></p></li>
@ -160,7 +161,7 @@
<p></p> <p></p>
</section> </section>
<section id="warning"> <section id="warning">
<h2>warning<a class="headerlink" href="#warning" title="Permalink to this headline"></a></h2> <h2>warning<a class="headerlink" href="#warning" title="Permalink to this heading"></a></h2>
<ul> <ul>
<li><p>Shapely MultiPolygon, Polygon:</p> <li><p>Shapely MultiPolygon, Polygon:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">MULTIPOLYGON</span> <span class="p">((</span><span class="o">-</span><span class="mf">92.092348410</span> <span class="mf">46.782322971</span><span class="p">,</span> <span class="o">...</span><span class="p">,</span> <span class="o">-</span><span class="mf">92.092348410</span> <span class="mf">46.782322971</span><span class="p">),</span> <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">MULTIPOLYGON</span> <span class="p">((</span><span class="o">-</span><span class="mf">92.092348410</span> <span class="mf">46.782322971</span><span class="p">,</span> <span class="o">...</span><span class="p">,</span> <span class="o">-</span><span class="mf">92.092348410</span> <span class="mf">46.782322971</span><span class="p">),</span>
@ -190,7 +191,7 @@
<p></p> <p></p>
</section> </section>
<section id="radar"> <section id="radar">
<h2>radar<a class="headerlink" href="#radar" title="Permalink to this headline"></a></h2> <h2>radar<a class="headerlink" href="#radar" title="Permalink to this heading"></a></h2>
<ul> <ul>
<li><p>2-D NumPy Array</p></li> <li><p>2-D NumPy Array</p></li>
<li><p>returned by: <a class="reference external" href="api/DataAccessLayer.html#awips.dataaccess.DataAccessLayer.getGridData">awips.dataaccess.DataAccessLayer.getGridData(request, times=[])</a></p></li> <li><p>returned by: <a class="reference external" href="api/DataAccessLayer.html#awips.dataaccess.DataAccessLayer.getGridData">awips.dataaccess.DataAccessLayer.getGridData(request, times=[])</a></p></li>

View file

@ -14,6 +14,7 @@
<script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script> <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
<script src="_static/jquery.js"></script> <script src="_static/jquery.js"></script>
<script src="_static/underscore.js"></script> <script src="_static/underscore.js"></script>
<script src="_static/_sphinx_javascript_frameworks_compat.js"></script>
<script src="_static/doctools.js"></script> <script src="_static/doctools.js"></script>
<script src="_static/js/theme.js"></script> <script src="_static/js/theme.js"></script>
<link rel="author" title="About these documents" href="about.html" /> <link rel="author" title="About these documents" href="about.html" />
@ -90,14 +91,14 @@
<div itemprop="articleBody"> <div itemprop="articleBody">
<section id="development-guide"> <section id="development-guide">
<h1>Development Guide<a class="headerlink" href="#development-guide" title="Permalink to this headline"></a></h1> <h1>Development Guide<a class="headerlink" href="#development-guide" title="Permalink to this heading"></a></h1>
<p>The Data Access Framework allows developers to retrieve different types <p>The Data Access Framework allows developers to retrieve different types
of data without having dependencies on those types of data. It provides of data without having dependencies on those types of data. It provides
a single, unified data type that can be customized by individual a single, unified data type that can be customized by individual
implementing plug-ins to provide full functionality pertinent to each implementing plug-ins to provide full functionality pertinent to each
data type.</p> data type.</p>
<section id="writing-a-new-factory"> <section id="writing-a-new-factory">
<h2>Writing a New Factory<a class="headerlink" href="#writing-a-new-factory" title="Permalink to this headline"></a></h2> <h2>Writing a New Factory<a class="headerlink" href="#writing-a-new-factory" title="Permalink to this heading"></a></h2>
<p>Factories will most often be written in a dataplugin, but should always <p>Factories will most often be written in a dataplugin, but should always
be written in a common plug-in. This will allow for clean dependencies be written in a common plug-in. This will allow for clean dependencies
from both CAVE and EDEX.</p> from both CAVE and EDEX.</p>
@ -168,7 +169,7 @@ should be thrown.</p></li>
</ul> </ul>
</section> </section>
<section id="registering-the-factory-with-the-framework"> <section id="registering-the-factory-with-the-framework">
<h2>Registering the Factory with the Framework<a class="headerlink" href="#registering-the-factory-with-the-framework" title="Permalink to this headline"></a></h2> <h2>Registering the Factory with the Framework<a class="headerlink" href="#registering-the-factory-with-the-framework" title="Permalink to this heading"></a></h2>
<p>The following needs to be added in a spring file in the plug-in that <p>The following needs to be added in a spring file in the plug-in that
contains the new factory:</p> contains the new factory:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="o">&lt;</span><span class="n">bean</span> <span class="nb">id</span><span class="o">=</span><span class="s2">&quot;radarGridFactory&quot;</span> <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="o">&lt;</span><span class="n">bean</span> <span class="nb">id</span><span class="o">=</span><span class="s2">&quot;radarGridFactory&quot;</span>
@ -184,7 +185,7 @@ allows it to be used any time the code makes a request for the data type
“radar.”</p> “radar.”</p>
</section> </section>
<section id="retrieving-data-using-the-factory"> <section id="retrieving-data-using-the-factory">
<h2>Retrieving Data Using the Factory<a class="headerlink" href="#retrieving-data-using-the-factory" title="Permalink to this headline"></a></h2> <h2>Retrieving Data Using the Factory<a class="headerlink" href="#retrieving-data-using-the-factory" title="Permalink to this heading"></a></h2>
<p>For ease of use and more diverse use, there are multiple interfaces into <p>For ease of use and more diverse use, there are multiple interfaces into
the Data Access Layer. Currently, there is a Python implementation and a the Data Access Layer. Currently, there is a Python implementation and a
Java implementation, which have very similar method calls and work in a Java implementation, which have very similar method calls and work in a
@ -248,7 +249,7 @@ the best way to identify what parameters are to be used is to reference
the code.</p> the code.</p>
</section> </section>
<section id="development-background"> <section id="development-background">
<h2>Development Background<a class="headerlink" href="#development-background" title="Permalink to this headline"></a></h2> <h2>Development Background<a class="headerlink" href="#development-background" title="Permalink to this heading"></a></h2>
<p>In support of Hazard Services Raytheon Technical Services is building a <p>In support of Hazard Services Raytheon Technical Services is building a
generic data access framework that can be called via JAVA or Python. The generic data access framework that can be called via JAVA or Python. The
data access framework code can be found within the AWIPS Baseline in</p> data access framework code can be found within the AWIPS Baseline in</p>
@ -289,7 +290,7 @@ classes</p>
attached and modified slightly.</p> attached and modified slightly.</p>
</section> </section>
<section id="design-implementation"> <section id="design-implementation">
<h2>Design/Implementation<a class="headerlink" href="#design-implementation" title="Permalink to this headline"></a></h2> <h2>Design/Implementation<a class="headerlink" href="#design-implementation" title="Permalink to this heading"></a></h2>
<p>The Data Access Framework is designed to provide a consistent interface <p>The Data Access Framework is designed to provide a consistent interface
for requesting and using geospatial data within CAVE or EDEX. Examples for requesting and using geospatial data within CAVE or EDEX. Examples
of geospatial data are grids, satellite, radar, metars, maps, river gage of geospatial data are grids, satellite, radar, metars, maps, river gage
@ -349,7 +350,7 @@ the framework will make use of existing APIs such as <strong>IDataStore</strong>
</ul> </ul>
</section> </section>
<section id="how-users-of-the-framework-retrieve-and-use-the-data"> <section id="how-users-of-the-framework-retrieve-and-use-the-data">
<h2>How users of the framework retrieve and use the data<a class="headerlink" href="#how-users-of-the-framework-retrieve-and-use-the-data" title="Permalink to this headline"></a></h2> <h2>How users of the framework retrieve and use the data<a class="headerlink" href="#how-users-of-the-framework-retrieve-and-use-the-data" title="Permalink to this heading"></a></h2>
<p>When a user of the framework wishes to request data, they must <p>When a user of the framework wishes to request data, they must
instantiate a request object and set some of the values on that request. instantiate a request object and set some of the values on that request.
Two request interfaces will be supported, for detailed methods see Two request interfaces will be supported, for detailed methods see
@ -391,7 +392,7 @@ making the request and returned data objects pure python it will not be
a huge undertaking to add this support in the future.</p> a huge undertaking to add this support in the future.</p>
</section> </section>
<section id="how-plugin-developers-contribute-support-for-new-datatypes"> <section id="how-plugin-developers-contribute-support-for-new-datatypes">
<h2>How plugin developers contribute support for new datatypes<a class="headerlink" href="#how-plugin-developers-contribute-support-for-new-datatypes" title="Permalink to this headline"></a></h2> <h2>How plugin developers contribute support for new datatypes<a class="headerlink" href="#how-plugin-developers-contribute-support-for-new-datatypes" title="Permalink to this heading"></a></h2>
<p>When a developer wishes to add support for another data type to the <p>When a developer wishes to add support for another data type to the
framework, they must implement one or both of the factory interfaces framework, they must implement one or both of the factory interfaces
within a common plugin. Two factory interfaces will be supported, for within a common plugin. Two factory interfaces will be supported, for
@ -455,7 +456,7 @@ both.</p>
</div> </div>
</section> </section>
<section id="how-the-framework-works-when-it-receives-a-request"> <section id="how-the-framework-works-when-it-receives-a-request">
<h2>How the framework works when it receives a request<a class="headerlink" href="#how-the-framework-works-when-it-receives-a-request" title="Permalink to this headline"></a></h2> <h2>How the framework works when it receives a request<a class="headerlink" href="#how-the-framework-works-when-it-receives-a-request" title="Permalink to this heading"></a></h2>
<p><strong>IDataRequest</strong> requires a datatype to be set on every request. The <p><strong>IDataRequest</strong> requires a datatype to be set on every request. The
framework will have a registry of existing factories for each data type framework will have a registry of existing factories for each data type
(grid and geometry). When the Data Access Layer methods are called, it (grid and geometry). When the Data Access Layer methods are called, it
@ -485,7 +486,7 @@ be tasked to add the factories necessary to support the needed data
types.</p> types.</p>
</section> </section>
<section id="request-interfaces"> <section id="request-interfaces">
<h2>Request interfaces<a class="headerlink" href="#request-interfaces" title="Permalink to this headline"></a></h2> <h2>Request interfaces<a class="headerlink" href="#request-interfaces" title="Permalink to this heading"></a></h2>
<p>Requests and returned data interfaces will exist in both Java and <p>Requests and returned data interfaces will exist in both Java and
Python. The Java interfaces are listed below and the Python interfaces Python. The Java interfaces are listed below and the Python interfaces
will match the Java interfaces except where noted. Factories will only will match the Java interfaces except where noted. Factories will only
@ -531,7 +532,7 @@ requesting data by names such as ICAOs, airports, stationIDs, etc</p></li>
as rectangular polygons)</p></li> as rectangular polygons)</p></li>
</ul> </ul>
<section id="data-interfaces"> <section id="data-interfaces">
<h3>Data Interfaces<a class="headerlink" href="#data-interfaces" title="Permalink to this headline"></a></h3> <h3>Data Interfaces<a class="headerlink" href="#data-interfaces" title="Permalink to this heading"></a></h3>
<p><strong>IData</strong></p> <p><strong>IData</strong></p>
<ul class="simple"> <ul class="simple">
<li><p><strong>Object getAttribute(String key)</strong> - <strong>getAttribute</strong> provides a way <li><p><strong>Object getAttribute(String key)</strong> - <strong>getAttribute</strong> provides a way
@ -604,7 +605,7 @@ cell</p></li>
</ul> </ul>
</section> </section>
<section id="factory-interfaces-java-only"> <section id="factory-interfaces-java-only">
<h3>Factory Interfaces (Java only)<a class="headerlink" href="#factory-interfaces-java-only" title="Permalink to this headline"></a></h3> <h3>Factory Interfaces (Java only)<a class="headerlink" href="#factory-interfaces-java-only" title="Permalink to this heading"></a></h3>
<ul class="simple"> <ul class="simple">
<li><p><strong>IDataFactory</strong></p></li> <li><p><strong>IDataFactory</strong></p></li>
<li><p><strong>DataTime[] getAvailableTimes(R request)</strong> - queries the <li><p><strong>DataTime[] getAvailableTimes(R request)</strong> - queries the

View file

@ -14,6 +14,7 @@
<script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js"></script> <script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js"></script>
<script src="../../_static/jquery.js"></script> <script src="../../_static/jquery.js"></script>
<script src="../../_static/underscore.js"></script> <script src="../../_static/underscore.js"></script>
<script src="../../_static/_sphinx_javascript_frameworks_compat.js"></script>
<script src="../../_static/doctools.js"></script> <script src="../../_static/doctools.js"></script>
<script src="../../_static/js/theme.js"></script> <script src="../../_static/js/theme.js"></script>
<link rel="author" title="About these documents" href="../../about.html" /> <link rel="author" title="About these documents" href="../../about.html" />
@ -106,12 +107,12 @@
<div itemprop="articleBody"> <div itemprop="articleBody">
<section id="colored-surface-temperature-plot"> <section id="colored-surface-temperature-plot">
<h1>Colored Surface Temperature Plot<a class="headerlink" href="#colored-surface-temperature-plot" title="Permalink to this headline"></a></h1> <h1>Colored Surface Temperature Plot<a class="headerlink" href="#colored-surface-temperature-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/Colored_Surface_Temperature_Plot.ipynb">Notebook</a> <p><a class="reference external" href="http://nbviewer.ipython.org/github/Unidata/python-awips/blob/master/examples/notebooks/Colored_Surface_Temperature_Plot.ipynb">Notebook</a>
Python-AWIPS Tutorial Notebook</p> Python-AWIPS Tutorial Notebook</p>
<hr class="docutils" /> <hr class="docutils" />
<section id="objectives"> <section id="objectives">
<h2>Objectives<a class="headerlink" href="#objectives" title="Permalink to this headline"></a></h2> <h2>Objectives<a class="headerlink" href="#objectives" title="Permalink to this heading"></a></h2>
<ul class="simple"> <ul class="simple">
<li><p>Use python-awips to connect to an edex server</p></li> <li><p>Use python-awips to connect to an edex server</p></li>
<li><p>Define and filter data request for METAR surface obs</p></li> <li><p>Define and filter data request for METAR surface obs</p></li>
@ -120,7 +121,7 @@ Python-AWIPS Tutorial Notebook</p>
</ul> </ul>
<hr class="docutils" /> <hr class="docutils" />
<section id="table-of-contents"> <section id="table-of-contents">
<h3>Table of Contents<a class="headerlink" href="#table-of-contents" title="Permalink to this headline"></a></h3> <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-block">
<div class="line"><a class="reference external" href="https://unidata.github.io/python-awips/examples/generated/Colored_Surface_Temperature_Plot.html#imports">1 <div class="line"><a class="reference external" href="https://unidata.github.io/python-awips/examples/generated/Colored_Surface_Temperature_Plot.html#imports">1
Imports</a></div> Imports</a></div>
@ -146,7 +147,7 @@ Documentation</a></div>
</section> </section>
<hr class="docutils" /> <hr class="docutils" />
<section id="imports"> <section id="imports">
<h3>1 Imports<a class="headerlink" href="#imports" title="Permalink to this headline"></a></h3> <h3>1 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 <p>The imports below are used throughout the notebook. Note the first
import is coming directly from python-awips and allows us to connect to import is coming directly from python-awips and allows us to connect to
an EDEX server. The subsequent imports are for data manipulation and an EDEX server. The subsequent imports are for data manipulation and
@ -166,9 +167,9 @@ visualization.</p>
</section> </section>
<hr class="docutils" /> <hr class="docutils" />
<section id="initial-setup"> <section id="initial-setup">
<h3>2 Initial Setup<a class="headerlink" href="#initial-setup" title="Permalink to this headline"></a></h3> <h3>2 Initial Setup<a class="headerlink" href="#initial-setup" title="Permalink to this heading"></a></h3>
<section id="geographic-filter"> <section id="geographic-filter">
<h4>2.1 Geographic Filter<a class="headerlink" href="#geographic-filter" title="Permalink to this headline"></a></h4> <h4>2.1 Geographic Filter<a class="headerlink" href="#geographic-filter" title="Permalink to this heading"></a></h4>
<p>By defining a bounding box for the Continental US (CONUS), were able to <p>By defining a bounding box for the Continental US (CONUS), were able to
optimize the data request sent to the EDEX server.</p> optimize the data request sent to the EDEX server.</p>
<div class="highlight-ipython3 notranslate"><div class="highlight"><pre><span></span><span class="c1"># CONUS bounding box and envelope geometry</span> <div class="highlight-ipython3 notranslate"><div class="highlight"><pre><span></span><span class="c1"># CONUS bounding box and envelope geometry</span>
@ -180,7 +181,7 @@ optimize the data request sent to the EDEX server.</p>
</div> </div>
</section> </section>
<section id="edex-connection"> <section id="edex-connection">
<h4>2.2 EDEX Connection<a class="headerlink" href="#edex-connection" title="Permalink to this headline"></a></h4> <h4>2.2 EDEX Connection<a class="headerlink" href="#edex-connection" title="Permalink to this heading"></a></h4>
<p>First we establish a connection to Unidatas public EDEX server. With <p>First we establish a connection to Unidatas public EDEX server. With
that connection made, we can create a <a class="reference external" href="http://unidata.github.io/python-awips/api/IDataRequest.html">new data request that connection made, we can create a <a class="reference external" href="http://unidata.github.io/python-awips/api/IDataRequest.html">new data request
object</a> object</a>
@ -199,7 +200,7 @@ just created.</p>
</section> </section>
<hr class="docutils" /> <hr class="docutils" />
<section id="filter-by-time"> <section id="filter-by-time">
<h3>3 Filter by Time<a class="headerlink" href="#filter-by-time" title="Permalink to this headline"></a></h3> <h3>3 Filter by Time<a class="headerlink" href="#filter-by-time" title="Permalink to this heading"></a></h3>
<p>We then want to limit our results based on time, so we create a time <p>We then want to limit our results based on time, so we create a time
range for the last 15 minutes, and then send the request to the EDEX range for the last 15 minutes, and then send the request to the EDEX
server to get our results, which are kept in the <strong>obs</strong> variable.</p> server to get our results, which are kept in the <strong>obs</strong> variable.</p>
@ -230,7 +231,7 @@ server to get our results, which are kept in the <strong>obs</strong> variable.<
</section> </section>
<hr class="docutils" /> <hr class="docutils" />
<section id="access-and-convert-temp-data"> <section id="access-and-convert-temp-data">
<h3>4 Access and Convert Temp Data<a class="headerlink" href="#access-and-convert-temp-data" title="Permalink to this headline"></a></h3> <h3>4 Access and Convert Temp Data<a class="headerlink" href="#access-and-convert-temp-data" title="Permalink to this heading"></a></h3>
<p>We access the <em>temperature</em> data from the <strong>obs</strong> variable which is <p>We access the <em>temperature</em> data from the <strong>obs</strong> variable which is
stored in degrees Celsius (°C). To make it more relatable, we then stored in degrees Celsius (°C). To make it more relatable, we then
convert the data to degrees Fahreheit (°F)</p> convert the data to degrees Fahreheit (°F)</p>
@ -247,7 +248,7 @@ convert the data to degrees Fahreheit (°F)</p>
</section> </section>
<hr class="docutils" /> <hr class="docutils" />
<section id="define-temperature-thresholds"> <section id="define-temperature-thresholds">
<h3>5 Define Temperature Thresholds<a class="headerlink" href="#define-temperature-thresholds" title="Permalink to this headline"></a></h3> <h3>5 Define Temperature Thresholds<a class="headerlink" href="#define-temperature-thresholds" title="Permalink to this heading"></a></h3>
<p>In order to distinguish the temperatures, well create a color map to <p>In order to distinguish the temperatures, well create a color map to
separate the values into different colors. This mapping will be used separate the values into different colors. This mapping will be used
when plotting the temperature values on the map of the United States.</p> when plotting the temperature values on the map of the United States.</p>
@ -271,7 +272,7 @@ affects the final plot.</p>
</section> </section>
<hr class="docutils" /> <hr class="docutils" />
<section id="plot-the-data"> <section id="plot-the-data">
<h3>6 Plot the Data!<a class="headerlink" href="#plot-the-data" title="Permalink to this headline"></a></h3> <h3>6 Plot the Data!<a class="headerlink" href="#plot-the-data" title="Permalink to this heading"></a></h3>
<p>Here we create a plot and cycle through all the values from our color <p>Here we create a plot and cycle through all the values from our color
mapping. For each segement of our color mapping, mask the temperature mapping. For each segement of our color mapping, mask the temperature
values to only include the relevent temperatures and draw those on the values to only include the relevent temperatures and draw those on the
@ -306,9 +307,9 @@ final, colored figure.</p>
</section> </section>
<hr class="docutils" /> <hr class="docutils" />
<section id="see-also"> <section id="see-also">
<h3>7 See Also<a class="headerlink" href="#see-also" title="Permalink to this headline"></a></h3> <h3>7 See Also<a class="headerlink" href="#see-also" title="Permalink to this heading"></a></h3>
<section id="additional-documention"> <section id="additional-documention">
<h4>7.1 Additional Documention<a class="headerlink" href="#additional-documention" title="Permalink to this headline"></a></h4> <h4>7.1 Additional Documention<a class="headerlink" href="#additional-documention" title="Permalink to this heading"></a></h4>
<p><strong>python-awips</strong></p> <p><strong>python-awips</strong></p>
<ul class="simple"> <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.changeEDEXHost">DataAccessLayer.changeEDEXHost()</a></p></li>

View file

@ -14,6 +14,7 @@
<script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js"></script> <script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js"></script>
<script src="../../_static/jquery.js"></script> <script src="../../_static/jquery.js"></script>
<script src="../../_static/underscore.js"></script> <script src="../../_static/underscore.js"></script>
<script src="../../_static/_sphinx_javascript_frameworks_compat.js"></script>
<script src="../../_static/doctools.js"></script> <script src="../../_static/doctools.js"></script>
<script src="../../_static/js/theme.js"></script> <script src="../../_static/js/theme.js"></script>
<link rel="author" title="About these documents" href="../../about.html" /> <link rel="author" title="About these documents" href="../../about.html" />
@ -105,12 +106,12 @@
<div itemprop="articleBody"> <div itemprop="articleBody">
<section id="colorized-grid-data"> <section id="colorized-grid-data">
<h1>Colorized Grid Data<a class="headerlink" href="#colorized-grid-data" title="Permalink to this headline"></a></h1> <h1>Colorized Grid Data<a class="headerlink" href="#colorized-grid-data" 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/Colorized_Grid_Data.ipynb">Notebook</a> <p><a class="reference external" href="http://nbviewer.ipython.org/github/Unidata/python-awips/blob/master/examples/notebooks/Colorized_Grid_Data.ipynb">Notebook</a>
Python-AWIPS Tutorial Notebook</p> Python-AWIPS Tutorial Notebook</p>
<hr class="docutils" /> <hr class="docutils" />
<section id="objectives"> <section id="objectives">
<h2>Objectives<a class="headerlink" href="#objectives" title="Permalink to this headline"></a></h2> <h2>Objectives<a class="headerlink" href="#objectives" title="Permalink to this heading"></a></h2>
<ul class="simple"> <ul class="simple">
<li><p>Create a colorized plot for the continental US of model data (grib).</p></li> <li><p>Create a colorized plot for the continental US of model data (grib).</p></li>
<li><p>Access the model data from an EDEX server and limit the data returned <li><p>Access the model data from an EDEX server and limit the data returned
@ -120,7 +121,7 @@ compare the differences between the two.</p></li>
</ul> </ul>
<hr class="docutils" /> <hr class="docutils" />
<section id="table-of-contents"> <section id="table-of-contents">
<h3>Table of Contents<a class="headerlink" href="#table-of-contents" title="Permalink to this headline"></a></h3> <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-block">
<div class="line"><a class="reference external" href="https://unidata.github.io/python-awips/examples/generated/Colorized_Grid_Data.html#imports">1 <div class="line"><a class="reference external" href="https://unidata.github.io/python-awips/examples/generated/Colorized_Grid_Data.html#imports">1
Imports</a></div> Imports</a></div>
@ -146,7 +147,7 @@ Documentation</a></div>
</section> </section>
<hr class="docutils" /> <hr class="docutils" />
<section id="imports"> <section id="imports">
<h3>1 Imports<a class="headerlink" href="#imports" title="Permalink to this headline"></a></h3> <h3>1 Imports<a class="headerlink" href="#imports" title="Permalink to this heading"></a></h3>
<p>Start by importing both the python-awips specific library, as well as <p>Start by importing both the python-awips specific library, as well as
the libraries needed for plotting and manipulating the data</p> the libraries needed for plotting and manipulating the data</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> <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>
@ -160,7 +161,7 @@ the libraries needed for plotting and manipulating the data</p>
</section> </section>
<hr class="docutils" /> <hr class="docutils" />
<section id="define-data-request"> <section id="define-data-request">
<h3>2 Define Data Request<a class="headerlink" href="#define-data-request" title="Permalink to this headline"></a></h3> <h3>2 Define Data Request<a class="headerlink" href="#define-data-request" title="Permalink to this heading"></a></h3>
<p>If you read through the <a class="reference external" href="https://nbviewer.jupyter.org/github/Unidata/pyaos-ams-2021/blob/master/notebooks/dataAccess/python-awips-HowToAccessData.ipynb">python-awips: How to Access <p>If you read through the <a class="reference external" href="https://nbviewer.jupyter.org/github/Unidata/pyaos-ams-2021/blob/master/notebooks/dataAccess/python-awips-HowToAccessData.ipynb">python-awips: How to Access
Data</a> Data</a>
training, you will know that we need to set an EDEX url to access our training, you will know that we need to set an EDEX url to access our
@ -187,7 +188,7 @@ in meters), respectively.</p>
</section> </section>
<hr class="docutils" /> <hr class="docutils" />
<section id="limit-results-based-on-time"> <section id="limit-results-based-on-time">
<h3>3 Limit Results Based on Time<a class="headerlink" href="#limit-results-based-on-time" title="Permalink to this headline"></a></h3> <h3>3 Limit Results Based on Time<a class="headerlink" href="#limit-results-based-on-time" title="Permalink to this heading"></a></h3>
<p>Models produce many different time variants during their runs, so lets <p>Models produce many different time variants during their runs, so lets
limit the data to the most recent time and forecast run.</p> limit the data to the most recent time and forecast run.</p>
<blockquote> <blockquote>
@ -213,7 +214,7 @@ to see the differences.</p>
</section> </section>
<hr class="docutils" /> <hr class="docutils" />
<section id="function-make-map"> <section id="function-make-map">
<h3>4 Function: make_map()<a class="headerlink" href="#function-make-map" title="Permalink to this headline"></a></h3> <h3>4 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, its easiest to define common <p>In order to plot more than one image, its easiest to define common
logic in a function. Here, a new function called <strong>make_map</strong> is 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 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
@ -236,7 +237,7 @@ added, along with lat/lon grids.</p>
</section> </section>
<hr class="docutils" /> <hr class="docutils" />
<section id="use-the-grid-data"> <section id="use-the-grid-data">
<h3>5 Use the Grid Data!<a class="headerlink" href="#use-the-grid-data" title="Permalink to this headline"></a></h3> <h3>5 Use the Grid Data!<a class="headerlink" href="#use-the-grid-data" title="Permalink to this heading"></a></h3>
<p>Here we get our grid data object from our previous response, and then <p>Here we get our grid data object from our previous response, and then
get the raw data array off that object. We also get the latitude and get the raw data array off that object. We also get the latitude and
longitude arrays, and create a bounding box that well use when creating longitude arrays, and create a bounding box that well use when creating
@ -254,7 +255,7 @@ understandable.</p>
</pre></div> </pre></div>
</div> </div>
<section id="plot-using-pcolormesh"> <section id="plot-using-pcolormesh">
<h4>5.1 Plot Using pcolormesh<a class="headerlink" href="#plot-using-pcolormesh" title="Permalink to this headline"></a></h4> <h4>5.1 Plot Using pcolormesh<a class="headerlink" href="#plot-using-pcolormesh" title="Permalink to this heading"></a></h4>
<p>This example shows how to use <p>This example shows how to use
<a class="reference external" href="https://matplotlib.org/3.3.3/api/_as_gen/matplotlib.pyplot.pcolormesh.html">matplotlib.pyplot.pcolormesh</a> <a class="reference external" href="https://matplotlib.org/3.3.3/api/_as_gen/matplotlib.pyplot.pcolormesh.html">matplotlib.pyplot.pcolormesh</a>
to create a colorized plot. We use our <strong>make_map</strong> function to create a to create a colorized plot. We use our <strong>make_map</strong> function to create a
@ -280,7 +281,7 @@ okay, and will go away with subsequent runs of the cell.</p>
<img alt="../../_images/Colorized_Grid_Data_21_1.png" src="../../_images/Colorized_Grid_Data_21_1.png" /> <img alt="../../_images/Colorized_Grid_Data_21_1.png" src="../../_images/Colorized_Grid_Data_21_1.png" />
</section> </section>
<section id="plot-using-contourf"> <section id="plot-using-contourf">
<h4>5.2 Plot Using contourf<a class="headerlink" href="#plot-using-contourf" title="Permalink to this headline"></a></h4> <h4>5.2 Plot Using contourf<a class="headerlink" href="#plot-using-contourf" title="Permalink to this heading"></a></h4>
<p>This example shows how to use <p>This example shows how to use
<a class="reference external" href="https://matplotlib.org/3.3.3/api/_as_gen/matplotlib.pyplot.contourf.html">matplotlib.pyplot.contourf</a> <a class="reference external" href="https://matplotlib.org/3.3.3/api/_as_gen/matplotlib.pyplot.contourf.html">matplotlib.pyplot.contourf</a>
to create a colorized plot. We use our <strong>make_map</strong> function to create a to create a colorized plot. We use our <strong>make_map</strong> function to create a
@ -301,16 +302,16 @@ a label for our plot.</p>
</section> </section>
<hr class="docutils" /> <hr class="docutils" />
<section id="see-also"> <section id="see-also">
<h3>6 See Also<a class="headerlink" href="#see-also" title="Permalink to this headline"></a></h3> <h3>6 See Also<a class="headerlink" href="#see-also" title="Permalink to this heading"></a></h3>
<section id="related-notebooks"> <section id="related-notebooks">
<h4>6.1 Related Notebooks<a class="headerlink" href="#related-notebooks" title="Permalink to this headline"></a></h4> <h4>6.1 Related Notebooks<a class="headerlink" href="#related-notebooks" title="Permalink to this heading"></a></h4>
<ul class="simple"> <ul class="simple">
<li><p><a class="reference external" href="https://unidata.github.io/python-awips/examples/generated/Grid_Levels_and_Parameters.html">Grid Levels and <li><p><a class="reference external" href="https://unidata.github.io/python-awips/examples/generated/Grid_Levels_and_Parameters.html">Grid Levels and
Parameters</a></p></li> Parameters</a></p></li>
</ul> </ul>
</section> </section>
<section id="additional-documentation"> <section id="additional-documentation">
<h4>6.2 Additional Documentation<a class="headerlink" href="#additional-documentation" title="Permalink to this headline"></a></h4> <h4>6.2 Additional Documentation<a class="headerlink" href="#additional-documentation" title="Permalink to this heading"></a></h4>
<p><strong>python-awips:</strong></p> <p><strong>python-awips:</strong></p>
<ul class="simple"> <ul class="simple">
<li><p><a class="reference external" href="http://unidata.github.io/python-awips/api/DataAccessLayer.html">awips.DataAccessLayer</a></p></li> <li><p><a class="reference external" href="http://unidata.github.io/python-awips/api/DataAccessLayer.html">awips.DataAccessLayer</a></p></li>

View file

@ -14,6 +14,7 @@
<script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js"></script> <script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js"></script>
<script src="../../_static/jquery.js"></script> <script src="../../_static/jquery.js"></script>
<script src="../../_static/underscore.js"></script> <script src="../../_static/underscore.js"></script>
<script src="../../_static/_sphinx_javascript_frameworks_compat.js"></script>
<script src="../../_static/doctools.js"></script> <script src="../../_static/doctools.js"></script>
<script src="../../_static/js/theme.js"></script> <script src="../../_static/js/theme.js"></script>
<link rel="author" title="About these documents" href="../../about.html" /> <link rel="author" title="About these documents" href="../../about.html" />
@ -97,7 +98,7 @@
<div itemprop="articleBody"> <div itemprop="articleBody">
<section id="forecast-model-vertical-sounding"> <section id="forecast-model-vertical-sounding">
<h1>Forecast Model Vertical Sounding<a class="headerlink" href="#forecast-model-vertical-sounding" title="Permalink to this headline"></a></h1> <h1>Forecast Model Vertical Sounding<a class="headerlink" href="#forecast-model-vertical-sounding" 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/Forecast_Model_Vertical_Sounding.ipynb">Notebook</a> <p><a class="reference external" href="http://nbviewer.ipython.org/github/Unidata/python-awips/blob/master/examples/notebooks/Forecast_Model_Vertical_Sounding.ipynb">Notebook</a>
The ModelSounding class allows us to create a vertical sounding through The ModelSounding class allows us to create a vertical sounding through
any available AWIPS model with isobaric levels.</p> any available AWIPS model with isobaric levels.</p>
@ -230,7 +231,7 @@ are returned as Kelvin and wind components as m/s.</p></li>
</div> </div>
<hr class="docutils" /> <hr class="docutils" />
<section id="skew-t-log-p"> <section id="skew-t-log-p">
<h2>Skew-T/Log-P<a class="headerlink" href="#skew-t-log-p" title="Permalink to this headline"></a></h2> <h2>Skew-T/Log-P<a class="headerlink" href="#skew-t-log-p" title="Permalink to this heading"></a></h2>
<div class="highlight-ipython3 notranslate"><div class="highlight"><pre><span></span><span class="n">plt</span><span class="o">.</span><span class="n">rcParams</span><span class="p">[</span><span class="s1">&#39;figure.figsize&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="p">(</span><span class="mi">12</span><span class="p">,</span> <span class="mi">14</span><span class="p">)</span> <div class="highlight-ipython3 notranslate"><div class="highlight"><pre><span></span><span class="n">plt</span><span class="o">.</span><span class="n">rcParams</span><span class="p">[</span><span class="s1">&#39;figure.figsize&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="p">(</span><span class="mi">12</span><span class="p">,</span> <span class="mi">14</span><span class="p">)</span>
<span class="c1"># Skew-T</span> <span class="c1"># Skew-T</span>
@ -263,7 +264,7 @@ are returned as Kelvin and wind components as m/s.</p></li>
<img alt="../../_images/Forecast_Model_Vertical_Sounding_5_0.png" src="../../_images/Forecast_Model_Vertical_Sounding_5_0.png" /> <img alt="../../_images/Forecast_Model_Vertical_Sounding_5_0.png" src="../../_images/Forecast_Model_Vertical_Sounding_5_0.png" />
</section> </section>
<section id="model-sounding-comparison"> <section id="model-sounding-comparison">
<h2>Model Sounding Comparison<a class="headerlink" href="#model-sounding-comparison" title="Permalink to this headline"></a></h2> <h2>Model Sounding Comparison<a class="headerlink" href="#model-sounding-comparison" title="Permalink to this heading"></a></h2>
<div class="highlight-ipython3 notranslate"><div class="highlight"><pre><span></span><span class="n">models</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;CMC&quot;</span><span class="p">,</span> <span class="s2">&quot;GFS20&quot;</span><span class="p">,</span> <span class="s2">&quot;NAM40&quot;</span><span class="p">]</span> <div class="highlight-ipython3 notranslate"><div class="highlight"><pre><span></span><span class="n">models</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;CMC&quot;</span><span class="p">,</span> <span class="s2">&quot;GFS20&quot;</span><span class="p">,</span> <span class="s2">&quot;NAM40&quot;</span><span class="p">]</span>
<span class="n">parms</span> <span class="o">=</span> <span class="p">[</span><span class="s1">&#39;T&#39;</span><span class="p">,</span><span class="s1">&#39;DpT&#39;</span><span class="p">,</span><span class="s1">&#39;uW&#39;</span><span class="p">,</span><span class="s1">&#39;vW&#39;</span><span class="p">]</span> <span class="n">parms</span> <span class="o">=</span> <span class="p">[</span><span class="s1">&#39;T&#39;</span><span class="p">,</span><span class="s1">&#39;DpT&#39;</span><span class="p">,</span><span class="s1">&#39;uW&#39;</span><span class="p">,</span><span class="s1">&#39;vW&#39;</span><span class="p">]</span>

View file

@ -14,6 +14,7 @@
<script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js"></script> <script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js"></script>
<script src="../../_static/jquery.js"></script> <script src="../../_static/jquery.js"></script>
<script src="../../_static/underscore.js"></script> <script src="../../_static/underscore.js"></script>
<script src="../../_static/_sphinx_javascript_frameworks_compat.js"></script>
<script src="../../_static/doctools.js"></script> <script src="../../_static/doctools.js"></script>
<script src="../../_static/js/theme.js"></script> <script src="../../_static/js/theme.js"></script>
<link rel="author" title="About these documents" href="../../about.html" /> <link rel="author" title="About these documents" href="../../about.html" />
@ -105,12 +106,12 @@
<div itemprop="articleBody"> <div itemprop="articleBody">
<section id="goes-cira-product-writer"> <section id="goes-cira-product-writer">
<h1>GOES CIRA Product Writer<a class="headerlink" href="#goes-cira-product-writer" title="Permalink to this headline"></a></h1> <h1>GOES CIRA Product Writer<a class="headerlink" href="#goes-cira-product-writer" 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/GOES_CIRA_Product_Writer.ipynb">Notebook</a> <p><a class="reference external" href="http://nbviewer.ipython.org/github/Unidata/python-awips/blob/master/examples/notebooks/GOES_CIRA_Product_Writer.ipynb">Notebook</a>
Python-AWIPS Tutorial Notebook</p> Python-AWIPS Tutorial Notebook</p>
<hr class="docutils" /> <hr class="docutils" />
<section id="objectives"> <section id="objectives">
<h2>Objectives<a class="headerlink" href="#objectives" title="Permalink to this headline"></a></h2> <h2>Objectives<a class="headerlink" href="#objectives" title="Permalink to this heading"></a></h2>
<ul class="simple"> <ul class="simple">
<li><p>Use python-awips to connect to an EDEX server</p></li> <li><p>Use python-awips to connect to an EDEX server</p></li>
<li><p>Define and filter the data request specifically for new <a class="reference external" href="https://unidata.github.io/python-awips/examples/generated/GOES_CIRA_Product_Writer.html#additional-documentation">CIRA GOES16 <li><p>Define and filter the data request specifically for new <a class="reference external" href="https://unidata.github.io/python-awips/examples/generated/GOES_CIRA_Product_Writer.html#additional-documentation">CIRA GOES16
@ -122,7 +123,7 @@ products</a></p></li>
</ul> </ul>
<hr class="docutils" /> <hr class="docutils" />
<section id="table-of-contents"> <section id="table-of-contents">
<h3>Table of Contents<a class="headerlink" href="#table-of-contents" title="Permalink to this headline"></a></h3> <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-block">
<div class="line"><a class="reference external" href="https://unidata.github.io/python-awips/examples/generated/GOES_CIRA_Product_Writer.html#imports">1 <div class="line"><a class="reference external" href="https://unidata.github.io/python-awips/examples/generated/GOES_CIRA_Product_Writer.html#imports">1
Imports</a></div> Imports</a></div>
@ -154,7 +155,7 @@ Documentation</a></div>
</section> </section>
<hr class="docutils" /> <hr class="docutils" />
<section id="imports"> <section id="imports">
<h3>1 Imports<a class="headerlink" href="#imports" title="Permalink to this headline"></a></h3> <h3>1 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 <p>The imports below are used throughout the notebook. Note the first
import is coming directly from python-awips and allows us to connect to import is coming directly from python-awips and allows us to connect to
an EDEX server. The subsequent imports are for data manipulation and an EDEX server. The subsequent imports are for data manipulation and
@ -172,9 +173,9 @@ visualization.</p>
</section> </section>
<hr class="docutils" /> <hr class="docutils" />
<section id="initial-setup"> <section id="initial-setup">
<h3>2 Initial Setup<a class="headerlink" href="#initial-setup" title="Permalink to this headline"></a></h3> <h3>2 Initial Setup<a class="headerlink" href="#initial-setup" title="Permalink to this heading"></a></h3>
<section id="edex-connection"> <section id="edex-connection">
<h4>2.1 EDEX Connection<a class="headerlink" href="#edex-connection" title="Permalink to this headline"></a></h4> <h4>2.1 EDEX Connection<a class="headerlink" href="#edex-connection" title="Permalink to this heading"></a></h4>
<p>First we establish a connection to Unidatas public EDEX server. With <p>First we establish a connection to Unidatas public EDEX server. With
that connection made, we can create a <a class="reference external" href="http://unidata.github.io/python-awips/api/IDataRequest.html">new data request that connection made, we can create a <a class="reference external" href="http://unidata.github.io/python-awips/api/IDataRequest.html">new data request
object</a> object</a>
@ -187,7 +188,7 @@ and set the data type to <strong>satellite</strong>.</p>
</div> </div>
</section> </section>
<section id="parameter-definition"> <section id="parameter-definition">
<h4>2.2 Parameter Definition<a class="headerlink" href="#parameter-definition" title="Permalink to this headline"></a></h4> <h4>2.2 Parameter Definition<a class="headerlink" href="#parameter-definition" title="Permalink to this heading"></a></h4>
<p>After establishing the python-awips specific objects, we create a few <p>After establishing the python-awips specific objects, we create a few
other parameters that will be used for the data query based off of known other parameters that will be used for the data query based off of known
values: projection, and extent.</p> values: projection, and extent.</p>
@ -207,7 +208,7 @@ values: projection, and extent.</p>
</section> </section>
<hr class="docutils" /> <hr class="docutils" />
<section id="function-set-size"> <section id="function-set-size">
<h3>3 Function: set_size()<a class="headerlink" href="#function-set-size" title="Permalink to this headline"></a></h3> <h3>3 Function: set_size()<a class="headerlink" href="#function-set-size" title="Permalink to this heading"></a></h3>
<p>Here were defining a function that will allow us to pass in the <p>Here were defining a function that will allow us to pass in the
dimensions of the output file we desire in pixels. Default Python dimensions of the output file we desire in pixels. Default Python
methods require the size to be set in inches, which is confusing in our methods require the size to be set in inches, which is confusing in our
@ -247,7 +248,7 @@ pixels, with no padding or buffers.</p>
</section> </section>
<hr class="docutils" /> <hr class="docutils" />
<section id="function-write-img"> <section id="function-write-img">
<h3>4 Function: write_img()<a class="headerlink" href="#function-write-img" title="Permalink to this headline"></a></h3> <h3>4 Function: write_img()<a class="headerlink" href="#function-write-img" title="Permalink to this heading"></a></h3>
<p>Next, were defining another function which takes the image data, file <p>Next, were defining another function which takes the image data, file
name, projection, extent, reference time, and whether or not to print name, projection, extent, reference time, and whether or not to print
out a footnote.</p> out a footnote.</p>
@ -292,9 +293,9 @@ modify these values if you wish to print out an image of another size
</section> </section>
<hr class="docutils" /> <hr class="docutils" />
<section id="get-the-data-and-write-it-out"> <section id="get-the-data-and-write-it-out">
<h3>5 Get the Data and Write it Out!<a class="headerlink" href="#get-the-data-and-write-it-out" title="Permalink to this headline"></a></h3> <h3>5 Get the Data and Write it Out!<a class="headerlink" href="#get-the-data-and-write-it-out" title="Permalink to this heading"></a></h3>
<section id="filter-the-data"> <section id="filter-the-data">
<h4>5.1 Filter the Data<a class="headerlink" href="#filter-the-data" title="Permalink to this headline"></a></h4> <h4>5.1 Filter the Data<a class="headerlink" href="#filter-the-data" title="Permalink to this heading"></a></h4>
<p>Define exactly what data we want to be printing out. This notebook is <p>Define exactly what data we want to be printing out. This notebook is
designed to loop through and print out multiple images, so here we can designed to loop through and print out multiple images, so here we can
pick which images were wanting to print out. Were specifying pick which images were wanting to print out. Were specifying
@ -332,7 +333,7 @@ after the dataType has been set to satellite on the request object:</p>
</div> </div>
</section> </section>
<section id="define-output-location"> <section id="define-output-location">
<h4>5.2 Define Output Location<a class="headerlink" href="#define-output-location" title="Permalink to this headline"></a></h4> <h4>5.2 Define Output Location<a class="headerlink" href="#define-output-location" title="Permalink to this heading"></a></h4>
<p>Here we define a folder for where the satellite images will be written <p>Here we define a folder for where the satellite images will be written
to. The default directory is a new folder called output that lives to. The default directory is a new folder called output that lives
whereever this notebook lives.</p> whereever this notebook lives.</p>
@ -361,7 +362,7 @@ depend on where this notebook is located. For example (for a Mac):</p>
</div> </div>
</section> </section>
<section id="write-out-goes-images"> <section id="write-out-goes-images">
<h4>5.3 Write Out GOES Images<a class="headerlink" href="#write-out-goes-images" title="Permalink to this headline"></a></h4> <h4>5.3 Write Out GOES Images<a class="headerlink" href="#write-out-goes-images" title="Permalink to this heading"></a></h4>
<div class="highlight-ipython3 notranslate"><div class="highlight"><pre><span></span><span class="c1"># First loop through the sectors (location names)</span> <div class="highlight-ipython3 notranslate"><div class="highlight"><pre><span></span><span class="c1"># First loop through the sectors (location names)</span>
<span class="k">for</span> <span class="n">sector</span> <span class="ow">in</span> <span class="n">sectors</span><span class="p">:</span> <span class="k">for</span> <span class="n">sector</span> <span class="ow">in</span> <span class="n">sectors</span><span class="p">:</span>
@ -471,16 +472,16 @@ Done!
</section> </section>
<hr class="docutils" /> <hr class="docutils" />
<section id="see-also"> <section id="see-also">
<h3>6 See Also<a class="headerlink" href="#see-also" title="Permalink to this headline"></a></h3> <h3>6 See Also<a class="headerlink" href="#see-also" title="Permalink to this heading"></a></h3>
<section id="related-notebooks"> <section id="related-notebooks">
<h4>6.1 Related Notebooks<a class="headerlink" href="#related-notebooks" title="Permalink to this headline"></a></h4> <h4>6.1 Related Notebooks<a class="headerlink" href="#related-notebooks" title="Permalink to this heading"></a></h4>
<ul class="simple"> <ul class="simple">
<li><p><a class="reference external" href="http://unidata.github.io/python-awips/examples/generated/Satellite_Imagery.html">Satellite <li><p><a class="reference external" href="http://unidata.github.io/python-awips/examples/generated/Satellite_Imagery.html">Satellite
Imagery</a></p></li> Imagery</a></p></li>
</ul> </ul>
</section> </section>
<section id="additional-documentation"> <section id="additional-documentation">
<h4>6.2 Additional Documentation<a class="headerlink" href="#additional-documentation" title="Permalink to this headline"></a></h4> <h4>6.2 Additional Documentation<a class="headerlink" href="#additional-documentation" title="Permalink to this heading"></a></h4>
<p><strong>CIRA Quick Guides</strong></p> <p><strong>CIRA Quick Guides</strong></p>
<ul class="simple"> <ul class="simple">
<li><p><a class="reference external" href="https://rammb.cira.colostate.edu/training/visit/quick_guides/QuickGuide_DEBRA-Dust_20210217.pdf">DEBRA-Dust</a></p></li> <li><p><a class="reference external" href="https://rammb.cira.colostate.edu/training/visit/quick_guides/QuickGuide_DEBRA-Dust_20210217.pdf">DEBRA-Dust</a></p></li>

View file

@ -14,6 +14,7 @@
<script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js"></script> <script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js"></script>
<script src="../../_static/jquery.js"></script> <script src="../../_static/jquery.js"></script>
<script src="../../_static/underscore.js"></script> <script src="../../_static/underscore.js"></script>
<script src="../../_static/_sphinx_javascript_frameworks_compat.js"></script>
<script src="../../_static/doctools.js"></script> <script src="../../_static/doctools.js"></script>
<script src="../../_static/js/theme.js"></script> <script src="../../_static/js/theme.js"></script>
<link rel="author" title="About these documents" href="../../about.html" /> <link rel="author" title="About these documents" href="../../about.html" />
@ -96,7 +97,7 @@
<div itemprop="articleBody"> <div itemprop="articleBody">
<section id="goes-geostationary-lightning-mapper"> <section id="goes-geostationary-lightning-mapper">
<h1>GOES Geostationary Lightning Mapper<a class="headerlink" href="#goes-geostationary-lightning-mapper" title="Permalink to this headline"></a></h1> <h1>GOES Geostationary Lightning Mapper<a class="headerlink" href="#goes-geostationary-lightning-mapper" 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/GOES_Geostationary_Lightning_Mapper.ipynb">Notebook</a> <p><a class="reference external" href="http://nbviewer.ipython.org/github/Unidata/python-awips/blob/master/examples/notebooks/GOES_Geostationary_Lightning_Mapper.ipynb">Notebook</a>
The Geostationary Lightning Mapper, or GLM, on board GOES-R Series The Geostationary Lightning Mapper, or GLM, on board GOES-R Series
spacecraft, is the first operational lightning mapper flown in spacecraft, is the first operational lightning mapper flown in
@ -124,7 +125,7 @@ tornadoes, hurricanes, flash floods, snowstorms and fires.</p>
<li><p>strikeType</p></li> <li><p>strikeType</p></li>
</ul> </ul>
<section id="glm-sources-and-parameters"> <section id="glm-sources-and-parameters">
<h2>GLM Sources and Parameters<a class="headerlink" href="#glm-sources-and-parameters" title="Permalink to this headline"></a></h2> <h2>GLM Sources and Parameters<a class="headerlink" href="#glm-sources-and-parameters" title="Permalink to this heading"></a></h2>
<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> <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">import</span> <span class="nn">cartopy.crs</span> <span class="k">as</span> <span class="nn">ccrs</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">import</span> <span class="nn">cartopy.feature</span> <span class="k">as</span> <span class="nn">cfeat</span> <span class="kn">import</span> <span class="nn">cartopy.feature</span> <span class="k">as</span> <span class="nn">cfeat</span>

View file

@ -14,6 +14,7 @@
<script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js"></script> <script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js"></script>
<script src="../../_static/jquery.js"></script> <script src="../../_static/jquery.js"></script>
<script src="../../_static/underscore.js"></script> <script src="../../_static/underscore.js"></script>
<script src="../../_static/_sphinx_javascript_frameworks_compat.js"></script>
<script src="../../_static/doctools.js"></script> <script src="../../_static/doctools.js"></script>
<script src="../../_static/js/theme.js"></script> <script src="../../_static/js/theme.js"></script>
<link rel="author" title="About these documents" href="../../about.html" /> <link rel="author" title="About these documents" href="../../about.html" />
@ -109,12 +110,12 @@
<div itemprop="articleBody"> <div itemprop="articleBody">
<section id="grid-levels-and-parameters"> <section id="grid-levels-and-parameters">
<h1>Grid Levels and Parameters<a class="headerlink" href="#grid-levels-and-parameters" title="Permalink to this headline"></a></h1> <h1>Grid Levels and Parameters<a class="headerlink" href="#grid-levels-and-parameters" 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/Grid_Levels_and_Parameters.ipynb">Notebook</a> <p><a class="reference external" href="http://nbviewer.ipython.org/github/Unidata/python-awips/blob/master/examples/notebooks/Grid_Levels_and_Parameters.ipynb">Notebook</a>
Python-AWIPS Tutorial Notebook</p> Python-AWIPS Tutorial Notebook</p>
<hr class="docutils" /> <hr class="docutils" />
<section id="objectives"> <section id="objectives">
<h2>Objectives<a class="headerlink" href="#objectives" title="Permalink to this headline"></a></h2> <h2>Objectives<a class="headerlink" href="#objectives" title="Permalink to this heading"></a></h2>
<ul class="simple"> <ul class="simple">
<li><p>Cover the relevant methods for accessing EDEX and investigating what <li><p>Cover the relevant methods for accessing EDEX and investigating what
data is available.</p></li> data is available.</p></li>
@ -127,7 +128,7 @@ might be a helpful reference.</p></li>
</ul> </ul>
<hr class="docutils" /> <hr class="docutils" />
<section id="table-of-contents"> <section id="table-of-contents">
<h3>Table of Contents<a class="headerlink" href="#table-of-contents" title="Permalink to this headline"></a></h3> <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-block">
<div class="line"><a class="reference external" href="https://unidata.github.io/python-awips/examples/generated/Grid_Levels_and_Parameters.html#imports">1 <div class="line"><a class="reference external" href="https://unidata.github.io/python-awips/examples/generated/Grid_Levels_and_Parameters.html#imports">1
Imports</a></div> Imports</a></div>
@ -155,7 +156,7 @@ Notebooks</a></div>
</section> </section>
<hr class="docutils" /> <hr class="docutils" />
<section id="imports"> <section id="imports">
<h3>1 Imports<a class="headerlink" href="#imports" title="Permalink to this headline"></a></h3> <h3>1 Imports<a class="headerlink" href="#imports" title="Permalink to this heading"></a></h3>
<p>Start by importing the DataAccessLayer package from python-awips:</p> <p>Start by importing the DataAccessLayer package from python-awips:</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> <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>
</pre></div> </pre></div>
@ -164,7 +165,7 @@ Notebooks</a></div>
</section> </section>
<hr class="docutils" /> <hr class="docutils" />
<section id="connect-to-edex"> <section id="connect-to-edex">
<h3>2 Connect to EDEX<a class="headerlink" href="#connect-to-edex" title="Permalink to this headline"></a></h3> <h3>2 Connect to EDEX<a class="headerlink" href="#connect-to-edex" title="Permalink to this heading"></a></h3>
<p>Define a url for your EDEX connection, and then point python-awips at <p>Define a url for your EDEX connection, and then point python-awips at
that EDEX</p> that EDEX</p>
<div class="highlight-ipython3 notranslate"><div class="highlight"><pre><span></span><span class="c1"># Unidata&#39;s cloud EDEX instance is used in this example</span> <div class="highlight-ipython3 notranslate"><div class="highlight"><pre><span></span><span class="c1"># Unidata&#39;s cloud EDEX instance is used in this example</span>
@ -176,7 +177,7 @@ that EDEX</p>
</section> </section>
<hr class="docutils" /> <hr class="docutils" />
<section id="get-a-list-of-supported-data-types"> <section id="get-a-list-of-supported-data-types">
<h3>3 Get a List of Supported Data Types<a class="headerlink" href="#get-a-list-of-supported-data-types" title="Permalink to this headline"></a></h3> <h3>3 Get a List of Supported Data Types<a class="headerlink" href="#get-a-list-of-supported-data-types" title="Permalink to this heading"></a></h3>
<p><a class="reference external" href="http://unidata.github.io/python-awips/api/DataAccessLayer.html#awips.dataaccess.DataAccessLayer.getSupportedDatatypes">DataAccessLayer.getSupportedDatatypes()</a> <p><a class="reference external" href="http://unidata.github.io/python-awips/api/DataAccessLayer.html#awips.dataaccess.DataAccessLayer.getSupportedDatatypes">DataAccessLayer.getSupportedDatatypes()</a>
returns a list of supported data types offered by the EDEX server returns a list of supported data types offered by the EDEX server
defined above. The code below shows how to populate, sort, and print out defined above. The code below shows how to populate, sort, and print out
@ -219,7 +220,7 @@ that list.</p>
</section> </section>
<hr class="docutils" /> <hr class="docutils" />
<section id="create-a-new-data-request-and-set-the-type"> <section id="create-a-new-data-request-and-set-the-type">
<h3>4 Create a New Data Request and Set the Type<a class="headerlink" href="#create-a-new-data-request-and-set-the-type" title="Permalink to this headline"></a></h3> <h3>4 Create a New Data Request and Set the Type<a class="headerlink" href="#create-a-new-data-request-and-set-the-type" title="Permalink to this heading"></a></h3>
<p>Now create a new data request using <p>Now create a new data request using
<a class="reference external" href="http://unidata.github.io/python-awips/api/DataAccessLayer.html#awips.dataaccess.DataAccessLayer.newDataRequest">DataAccessLayer.newDataRequest()</a>, <a class="reference external" href="http://unidata.github.io/python-awips/api/DataAccessLayer.html#awips.dataaccess.DataAccessLayer.newDataRequest">DataAccessLayer.newDataRequest()</a>,
and set the data type using and set the data type using
@ -238,7 +239,7 @@ is where the model data can be found, along with some other datasets
</section> </section>
<hr class="docutils" /> <hr class="docutils" />
<section id="get-available-locations"> <section id="get-available-locations">
<h3>5 Get Available Locations<a class="headerlink" href="#get-available-locations" title="Permalink to this headline"></a></h3> <h3>5 Get Available Locations<a class="headerlink" href="#get-available-locations" title="Permalink to this heading"></a></h3>
<p>Use the <p>Use the
<a class="reference external" href="http://unidata.github.io/python-awips/api/DataAccessLayer.html#awips.dataaccess.DataAccessLayer.getAvailableLocationNames">DataAccessLayer.getAvailableLocationNames(request)</a> <a class="reference external" href="http://unidata.github.io/python-awips/api/DataAccessLayer.html#awips.dataaccess.DataAccessLayer.getAvailableLocationNames">DataAccessLayer.getAvailableLocationNames(request)</a>
method to find out what locations are available for the given dataset. method to find out what locations are available for the given dataset.
@ -316,7 +317,7 @@ outputted for the grid_request, for example.</p>
</section> </section>
<hr class="docutils" /> <hr class="docutils" />
<section id="get-available-parameters"> <section id="get-available-parameters">
<h3>6 Get Available Parameters<a class="headerlink" href="#get-available-parameters" title="Permalink to this headline"></a></h3> <h3>6 Get Available Parameters<a class="headerlink" href="#get-available-parameters" title="Permalink to this heading"></a></h3>
<p>Were setting the “location” (in this case, what model we are interested <p>Were setting the “location” (in this case, what model we are interested
in) to specify our request before we look at the available parameters.</p> in) to specify our request before we look at the available parameters.</p>
<p>Take a look at the available parameters for the data set by using <p>Take a look at the available parameters for the data set by using
@ -608,7 +609,7 @@ in) to specify our request before we look at the available parameters.</p>
</section> </section>
<hr class="docutils" /> <hr class="docutils" />
<section id="get-available-levels"> <section id="get-available-levels">
<h3>7 Get Available Levels<a class="headerlink" href="#get-available-levels" title="Permalink to this headline"></a></h3> <h3>7 Get Available Levels<a class="headerlink" href="#get-available-levels" title="Permalink to this heading"></a></h3>
<p>Setting the parameters is just an option, you do not need to filter the <p>Setting the parameters is just an option, you do not need to filter the
data if you do not wish to. Also, although we are only setting one data if you do not wish to. Also, although we are only setting one
parameter in this example, you can set multiple parameters by using an parameter in this example, you can set multiple parameters by using an
@ -899,7 +900,7 @@ likely because levels are not supported for that data type.</p>
</section> </section>
<hr class="docutils" /> <hr class="docutils" />
<section id="get-available-times"> <section id="get-available-times">
<h3>8 Get Available Times<a class="headerlink" href="#get-available-times" title="Permalink to this headline"></a></h3> <h3>8 Get Available Times<a class="headerlink" href="#get-available-times" title="Permalink to this heading"></a></h3>
<p>Take a look at what time options are available for the data youre <p>Take a look at what time options are available for the data youre
looking at using the looking at using the
<a class="reference external" href="http://unidata.github.io/python-awips/api/DataAccessLayer.html#awips.dataaccess.DataAccessLayer.getAvailableTimes">DataAccessLayer.getAvailableTimes()</a> <a class="reference external" href="http://unidata.github.io/python-awips/api/DataAccessLayer.html#awips.dataaccess.DataAccessLayer.getAvailableTimes">DataAccessLayer.getAvailableTimes()</a>
@ -986,7 +987,7 @@ single forecast cycle.</p></li>
</section> </section>
<hr class="docutils" /> <hr class="docutils" />
<section id="get-the-data"> <section id="get-the-data">
<h3>9 Get the Data!<a class="headerlink" href="#get-the-data" title="Permalink to this headline"></a></h3> <h3>9 Get the Data!<a class="headerlink" href="#get-the-data" title="Permalink to this heading"></a></h3>
<p>Now that we have our <code class="docutils literal notranslate"><span class="pre">request</span></code> and DataTime <code class="docutils literal notranslate"><span class="pre">fcstRun</span></code> arrays ready, <p>Now that we have our <code class="docutils literal notranslate"><span class="pre">request</span></code> and DataTime <code class="docutils literal notranslate"><span class="pre">fcstRun</span></code> arrays ready,
its time to request the data array from EDEX. Depending on what kind of its time to request the data array from EDEX. Depending on what kind of
data were working with, well either use data were working with, well either use
@ -1022,13 +1023,13 @@ visualize the data once you have what you want.</p>
</section> </section>
<hr class="docutils" /> <hr class="docutils" />
<section id="see-also"> <section id="see-also">
<h3>10 See Also<a class="headerlink" href="#see-also" title="Permalink to this headline"></a></h3> <h3>10 See Also<a class="headerlink" href="#see-also" title="Permalink to this heading"></a></h3>
<p>Several functions are used throughout this notebook from the <p>Several functions are used throughout this notebook from the
DataAccessLayer class in python-awips, to see full documentation for DataAccessLayer class in python-awips, to see full documentation for
these functions vist these functions vist
<a class="reference external" href="http://unidata.github.io/python-awips/api/DataAccessLayer.html#">here</a>.</p> <a class="reference external" href="http://unidata.github.io/python-awips/api/DataAccessLayer.html#">here</a>.</p>
<section id="related-notebooks"> <section id="related-notebooks">
<h4>10.1 Related Notebooks<a class="headerlink" href="#related-notebooks" title="Permalink to this headline"></a></h4> <h4>10.1 Related Notebooks<a class="headerlink" href="#related-notebooks" title="Permalink to this heading"></a></h4>
<ul class="simple"> <ul class="simple">
<li><p><a class="reference external" href="https://unidata.github.io/python-awips/examples/generated/Colored_Surface_Temperature_Plot.html">Colored Surface Temperature <li><p><a class="reference external" href="https://unidata.github.io/python-awips/examples/generated/Colored_Surface_Temperature_Plot.html">Colored Surface Temperature
Plot</a></p></li> Plot</a></p></li>

File diff suppressed because one or more lines are too long

View file

@ -14,6 +14,7 @@
<script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js"></script> <script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js"></script>
<script src="../../_static/jquery.js"></script> <script src="../../_static/jquery.js"></script>
<script src="../../_static/underscore.js"></script> <script src="../../_static/underscore.js"></script>
<script src="../../_static/_sphinx_javascript_frameworks_compat.js"></script>
<script src="../../_static/doctools.js"></script> <script src="../../_static/doctools.js"></script>
<script src="../../_static/js/theme.js"></script> <script src="../../_static/js/theme.js"></script>
<link rel="author" title="About these documents" href="../../about.html" /> <link rel="author" title="About these documents" href="../../about.html" />
@ -110,12 +111,12 @@
<div itemprop="articleBody"> <div itemprop="articleBody">
<section id="map-resources-and-topography"> <section id="map-resources-and-topography">
<h1>Map Resources and Topography<a class="headerlink" href="#map-resources-and-topography" title="Permalink to this headline"></a></h1> <h1>Map Resources and Topography<a class="headerlink" href="#map-resources-and-topography" 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/Map_Resources_and_Topography.ipynb">Notebook</a> <p><a class="reference external" href="http://nbviewer.ipython.org/github/Unidata/python-awips/blob/master/examples/notebooks/Map_Resources_and_Topography.ipynb">Notebook</a>
Python-AWIPS Tutorial Notebook</p> Python-AWIPS Tutorial Notebook</p>
<hr class="docutils" /> <hr class="docutils" />
<section id="objectives"> <section id="objectives">
<h2>Objectives<a class="headerlink" href="#objectives" title="Permalink to this headline"></a></h2> <h2>Objectives<a class="headerlink" href="#objectives" title="Permalink to this heading"></a></h2>
<ul class="simple"> <ul class="simple">
<li><p>Use python-awips to connect to an edex server</p></li> <li><p>Use python-awips to connect to an edex server</p></li>
<li><p>Define data request object specifically for the maps database</p></li> <li><p>Define data request object specifically for the maps database</p></li>
@ -125,7 +126,7 @@ context</p></li>
</ul> </ul>
<hr class="docutils" /> <hr class="docutils" />
<section id="table-of-contents"> <section id="table-of-contents">
<h3>Table of Contents<a class="headerlink" href="#table-of-contents" title="Permalink to this headline"></a></h3> <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-block">
<div class="line"><a class="reference external" href="https://unidata.github.io/python-awips/examples/generated/Map_Resources_and_Topography.html#imports">1 <div class="line"><a class="reference external" href="https://unidata.github.io/python-awips/examples/generated/Map_Resources_and_Topography.html#imports">1
Imports</a></div> Imports</a></div>
@ -154,7 +155,7 @@ Documentation</a></div>
</div> </div>
</section> </section>
<section id="imports"> <section id="imports">
<h3>1 Imports<a class="headerlink" href="#imports" title="Permalink to this headline"></a></h3> <h3>1 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 <p>The imports below are used throughout the notebook. Note the first
import is coming directly from python-awips and allows us to connect to import is coming directly from python-awips and allows us to connect to
an EDEX server. The subsequent imports are for data manipulation and an EDEX server. The subsequent imports are for data manipulation and
@ -172,7 +173,7 @@ visualization.</p>
</section> </section>
<hr class="docutils" /> <hr class="docutils" />
<section id="connect-to-edex"> <section id="connect-to-edex">
<h3>2 Connect to EDEX<a class="headerlink" href="#connect-to-edex" title="Permalink to this headline"></a></h3> <h3>2 Connect to EDEX<a class="headerlink" href="#connect-to-edex" title="Permalink to this heading"></a></h3>
<p>First we establish a connection to Unidatas public EDEX server. With <p>First we establish a connection to Unidatas public EDEX server. With
that connection made, we can create a <a class="reference external" href="http://unidata.github.io/python-awips/api/IDataRequest.html">new data request that connection made, we can create a <a class="reference external" href="http://unidata.github.io/python-awips/api/IDataRequest.html">new data request
object</a> object</a>
@ -186,7 +187,7 @@ and set the data type to <strong>maps</strong>.</p>
</section> </section>
<hr class="docutils" /> <hr class="docutils" />
<section id="function-make-map"> <section id="function-make-map">
<h3>3 Function: make_map()<a class="headerlink" href="#function-make-map" title="Permalink to this headline"></a></h3> <h3>3 Function: make_map()<a class="headerlink" href="#function-make-map" title="Permalink to this heading"></a></h3>
<p>In many of our notebooks we end up plotting map images, and this logic <p>In many of our notebooks we end up plotting map images, and this logic
below is the same from those other notebooks. Typically, functions are below is the same from those other notebooks. Typically, functions are
defined when they are called multiple times throughout a notebook. In defined when they are called multiple times throughout a notebook. In
@ -210,7 +211,7 @@ logic neatly defined for consistency.</p>
</section> </section>
<hr class="docutils" /> <hr class="docutils" />
<section id="create-initial-map-from-cwa"> <section id="create-initial-map-from-cwa">
<h3>4 Create Initial Map From CWA<a class="headerlink" href="#create-initial-map-from-cwa" title="Permalink to this headline"></a></h3> <h3>4 Create Initial Map From CWA<a class="headerlink" href="#create-initial-map-from-cwa" title="Permalink to this heading"></a></h3>
<p>The python-awips package provides access to the entire AWIPS Maps <p>The python-awips package provides access to the entire AWIPS Maps
Database for use in Python GIS applications. Map objects are returned as Database for use in Python GIS applications. Map objects are returned as
Shapely geometries and can be easily plotted by many Python packages.</p> Shapely geometries and can be easily plotted by many Python packages.</p>
@ -292,7 +293,7 @@ to refine our query to EDEX.</p>
</section> </section>
<hr class="docutils" /> <hr class="docutils" />
<section id="draw-merged-cwa"> <section id="draw-merged-cwa">
<h3>5 Draw Merged CWA<a class="headerlink" href="#draw-merged-cwa" title="Permalink to this headline"></a></h3> <h3>5 Draw Merged CWA<a class="headerlink" href="#draw-merged-cwa" title="Permalink to this heading"></a></h3>
<p>In the previous section we created a merged polygon with the applicable <p>In the previous section we created a merged polygon with the applicable
counties. Here, we draw this new shape on top of our existing map in a counties. Here, we draw this new shape on top of our existing map in a
burnt orange color.</p> burnt orange color.</p>
@ -309,7 +310,7 @@ burnt orange color.</p>
</section> </section>
<hr class="docutils" /> <hr class="docutils" />
<section id="draw-interstates-using-boundary-filter"> <section id="draw-interstates-using-boundary-filter">
<h3>6 Draw Interstates using Boundary Filter<a class="headerlink" href="#draw-interstates-using-boundary-filter" title="Permalink to this headline"></a></h3> <h3>6 Draw Interstates using Boundary Filter<a class="headerlink" href="#draw-interstates-using-boundary-filter" title="Permalink to this heading"></a></h3>
<p>Now, well use the previously-defined <p>Now, well use the previously-defined
<strong>envelope=merged_counties.buffer(2)</strong> in a <strong>newDataRequest()</strong> to <strong>envelope=merged_counties.buffer(2)</strong> in a <strong>newDataRequest()</strong> to
request interstate geometries which fall inside the buffered boundary.</p> request interstate geometries which fall inside the buffered boundary.</p>
@ -336,7 +337,7 @@ request interstate geometries which fall inside the buffered boundary.</p>
</section> </section>
<hr class="docutils" /> <hr class="docutils" />
<section id="draw-nearby-cities"> <section id="draw-nearby-cities">
<h3>7 Draw Nearby Cities<a class="headerlink" href="#draw-nearby-cities" title="Permalink to this headline"></a></h3> <h3>7 Draw Nearby Cities<a class="headerlink" href="#draw-nearby-cities" title="Permalink to this heading"></a></h3>
<p>Request the city table based using the <strong>envelope</strong> attribute and filter <p>Request the city table based using the <strong>envelope</strong> attribute and filter
by population and progressive disclosure level.</p> by population and progressive disclosure level.</p>
<blockquote> <blockquote>
@ -383,7 +384,7 @@ values appear to change significantly depending on WFO site.</p>
</section> </section>
<hr class="docutils" /> <hr class="docutils" />
<section id="draw-nearby-lakes"> <section id="draw-nearby-lakes">
<h3>8 Draw Nearby Lakes<a class="headerlink" href="#draw-nearby-lakes" title="Permalink to this headline"></a></h3> <h3>8 Draw Nearby Lakes<a class="headerlink" href="#draw-nearby-lakes" title="Permalink to this heading"></a></h3>
<p>Again, use the <strong>envelope</strong> attribute to define a new data requst for <p>Again, use the <strong>envelope</strong> attribute to define a new data requst for
the nearby lakes.</p> the nearby lakes.</p>
<div class="highlight-ipython3 notranslate"><div class="highlight"><pre><span></span><span class="c1"># Define request for lakes</span> <div class="highlight-ipython3 notranslate"><div class="highlight"><pre><span></span><span class="c1"># Define request for lakes</span>
@ -410,7 +411,7 @@ the nearby lakes.</p>
</section> </section>
<hr class="docutils" /> <hr class="docutils" />
<section id="draw-major-rivers"> <section id="draw-major-rivers">
<h3>9 Draw Major Rivers<a class="headerlink" href="#draw-major-rivers" title="Permalink to this headline"></a></h3> <h3>9 Draw Major Rivers<a class="headerlink" href="#draw-major-rivers" title="Permalink to this heading"></a></h3>
<div class="highlight-ipython3 notranslate"><div class="highlight"><pre><span></span><span class="c1"># Define request for rivers</span> <div class="highlight-ipython3 notranslate"><div class="highlight"><pre><span></span><span class="c1"># Define request for rivers</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">&#39;maps&#39;</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">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">&#39;maps&#39;</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">request</span><span class="o">.</span><span class="n">addIdentifier</span><span class="p">(</span><span class="s1">&#39;table&#39;</span><span class="p">,</span> <span class="s1">&#39;mapdata.majorrivers&#39;</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">&#39;table&#39;</span><span class="p">,</span> <span class="s1">&#39;mapdata.majorrivers&#39;</span><span class="p">)</span>
@ -433,7 +434,7 @@ the nearby lakes.</p>
</section> </section>
<hr class="docutils" /> <hr class="docutils" />
<section id="draw-topography"> <section id="draw-topography">
<h3>10 Draw Topography<a class="headerlink" href="#draw-topography" title="Permalink to this headline"></a></h3> <h3>10 Draw Topography<a class="headerlink" href="#draw-topography" title="Permalink to this heading"></a></h3>
<p>Spatial envelopes are required for topo requests, which can become slow <p>Spatial envelopes are required for topo requests, which can become slow
to download and render for large (CONUS) maps.</p> to download and render for large (CONUS) maps.</p>
<div class="highlight-ipython3 notranslate"><div class="highlight"><pre><span></span><span class="c1"># Define topography request</span> <div class="highlight-ipython3 notranslate"><div class="highlight"><pre><span></span><span class="c1"># Define topography request</span>
@ -485,9 +486,9 @@ to download and render for large (CONUS) maps.</p>
</section> </section>
<hr class="docutils" /> <hr class="docutils" />
<section id="see-also"> <section id="see-also">
<h3>11 See Also<a class="headerlink" href="#see-also" title="Permalink to this headline"></a></h3> <h3>11 See Also<a class="headerlink" href="#see-also" title="Permalink to this heading"></a></h3>
<section id="additional-documentation"> <section id="additional-documentation">
<h4>11.1 Additional Documentation<a class="headerlink" href="#additional-documentation" title="Permalink to this headline"></a></h4> <h4>11.1 Additional Documentation<a class="headerlink" href="#additional-documentation" title="Permalink to this heading"></a></h4>
<ul> <ul>
<li><p>This notebook requires: <strong>python-awips, numpy, matplotplib, cartopy, <li><p>This notebook requires: <strong>python-awips, numpy, matplotplib, cartopy,
shapely</strong></p></li> shapely</strong></p></li>

View file

@ -14,6 +14,7 @@
<script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js"></script> <script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js"></script>
<script src="../../_static/jquery.js"></script> <script src="../../_static/jquery.js"></script>
<script src="../../_static/underscore.js"></script> <script src="../../_static/underscore.js"></script>
<script src="../../_static/_sphinx_javascript_frameworks_compat.js"></script>
<script src="../../_static/doctools.js"></script> <script src="../../_static/doctools.js"></script>
<script src="../../_static/js/theme.js"></script> <script src="../../_static/js/theme.js"></script>
<link rel="author" title="About these documents" href="../../about.html" /> <link rel="author" title="About these documents" href="../../about.html" />
@ -99,7 +100,7 @@
<div itemprop="articleBody"> <div itemprop="articleBody">
<section id="model-sounding-data"> <section id="model-sounding-data">
<h1>Model Sounding Data<a class="headerlink" href="#model-sounding-data" title="Permalink to this headline"></a></h1> <h1>Model Sounding Data<a class="headerlink" href="#model-sounding-data" 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/Model_Sounding_Data.ipynb">Notebook</a> <p><a class="reference external" href="http://nbviewer.ipython.org/github/Unidata/python-awips/blob/master/examples/notebooks/Model_Sounding_Data.ipynb">Notebook</a>
The EDEX modelsounding plugin creates 64-level vertical profiles from The EDEX modelsounding plugin creates 64-level vertical profiles from
GFS and ETA (NAM) BUFR products distirubted over NOAAport. Paramters GFS and ETA (NAM) BUFR products distirubted over NOAAport. Paramters
@ -126,7 +127,7 @@ which are requestable are <strong>pressure</strong>, <strong>temperature</strong
</pre></div> </pre></div>
</div> </div>
<section id="available-locations"> <section id="available-locations">
<h2>Available Locations<a class="headerlink" href="#available-locations" title="Permalink to this headline"></a></h2> <h2>Available Locations<a class="headerlink" href="#available-locations" title="Permalink to this heading"></a></h2>
<div class="highlight-ipython3 notranslate"><div class="highlight"><pre><span></span><span class="n">locations</span> <span class="o">=</span> <span class="n">DataAccessLayer</span><span class="o">.</span><span class="n">getAvailableLocationNames</span><span class="p">(</span><span class="n">request</span><span class="p">)</span> <div class="highlight-ipython3 notranslate"><div class="highlight"><pre><span></span><span class="n">locations</span> <span class="o">=</span> <span class="n">DataAccessLayer</span><span class="o">.</span><span class="n">getAvailableLocationNames</span><span class="p">(</span><span class="n">request</span><span class="p">)</span>
<span class="n">locations</span><span class="o">.</span><span class="n">sort</span><span class="p">()</span> <span class="n">locations</span><span class="o">.</span><span class="n">sort</span><span class="p">()</span>
<span class="nb">list</span><span class="p">(</span><span class="n">locations</span><span class="p">)</span> <span class="nb">list</span><span class="p">(</span><span class="n">locations</span><span class="p">)</span>
@ -1150,7 +1151,7 @@ which are requestable are <strong>pressure</strong>, <strong>temperature</strong
</div> </div>
</section> </section>
<section id="model-sounding-parameters"> <section id="model-sounding-parameters">
<h2>Model Sounding Parameters<a class="headerlink" href="#model-sounding-parameters" title="Permalink to this headline"></a></h2> <h2>Model Sounding Parameters<a class="headerlink" href="#model-sounding-parameters" title="Permalink to this heading"></a></h2>
<p>Construct arrays for each parameter to plot (temperature, pressure, <p>Construct arrays for each parameter to plot (temperature, pressure,
moisutre (spec. humidity), wind components, and cloud cover)</p> moisutre (spec. humidity), wind components, and cloud cover)</p>
<div class="highlight-ipython3 notranslate"><div class="highlight"><pre><span></span><span class="n">tmp</span><span class="p">,</span><span class="n">prs</span><span class="p">,</span><span class="n">sh</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">np</span><span class="o">.</span><span class="n">array</span><span class="p">([]),</span><span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">([])</span> <div class="highlight-ipython3 notranslate"><div class="highlight"><pre><span></span><span class="n">tmp</span><span class="p">,</span><span class="n">prs</span><span class="p">,</span><span class="n">sh</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">np</span><span class="o">.</span><span class="n">array</span><span class="p">([]),</span><span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">([])</span>
@ -1185,7 +1186,7 @@ moisutre (spec. humidity), wind components, and cloud cover)</p>
</div> </div>
</section> </section>
<section id="calculating-dewpoint-from-specific-humidity"> <section id="calculating-dewpoint-from-specific-humidity">
<h2>Calculating Dewpoint from Specific Humidity<a class="headerlink" href="#calculating-dewpoint-from-specific-humidity" title="Permalink to this headline"></a></h2> <h2>Calculating Dewpoint from Specific Humidity<a class="headerlink" href="#calculating-dewpoint-from-specific-humidity" title="Permalink to this heading"></a></h2>
<p>Because the modelsounding plugin does not return dewpoint values, we <p>Because the modelsounding plugin does not return dewpoint values, we
must calculate the profile ourselves. Here are three examples of must calculate the profile ourselves. Here are three examples of
dewpoint calculated from specific humidity, including a manual dewpoint calculated from specific humidity, including a manual
@ -1223,7 +1224,7 @@ calculation following NCEP AWIPS/NSHARP.</p>
</div> </div>
</section> </section>
<section id="metpy-skewt-and-hodograph"> <section id="metpy-skewt-and-hodograph">
<h2>MetPy SkewT and Hodograph<a class="headerlink" href="#metpy-skewt-and-hodograph" title="Permalink to this headline"></a></h2> <h2>MetPy SkewT and Hodograph<a class="headerlink" href="#metpy-skewt-and-hodograph" title="Permalink to this heading"></a></h2>
<div class="highlight-ipython3 notranslate"><div class="highlight"><pre><span></span><span class="o">%</span><span class="k">matplotlib</span> inline <div class="highlight-ipython3 notranslate"><div class="highlight"><pre><span></span><span class="o">%</span><span class="k">matplotlib</span> inline
<span class="n">plt</span><span class="o">.</span><span class="n">rcParams</span><span class="p">[</span><span class="s1">&#39;figure.figsize&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="p">(</span><span class="mi">12</span><span class="p">,</span> <span class="mi">14</span><span class="p">)</span> <span class="n">plt</span><span class="o">.</span><span class="n">rcParams</span><span class="p">[</span><span class="s1">&#39;figure.figsize&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="p">(</span><span class="mi">12</span><span class="p">,</span> <span class="mi">14</span><span class="p">)</span>

View file

@ -14,6 +14,7 @@
<script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js"></script> <script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js"></script>
<script src="../../_static/jquery.js"></script> <script src="../../_static/jquery.js"></script>
<script src="../../_static/underscore.js"></script> <script src="../../_static/underscore.js"></script>
<script src="../../_static/_sphinx_javascript_frameworks_compat.js"></script>
<script src="../../_static/doctools.js"></script> <script src="../../_static/doctools.js"></script>
<script src="../../_static/js/theme.js"></script> <script src="../../_static/js/theme.js"></script>
<link rel="author" title="About these documents" href="../../about.html" /> <link rel="author" title="About these documents" href="../../about.html" />
@ -93,7 +94,7 @@
<div itemprop="articleBody"> <div itemprop="articleBody">
<section id="nexrad-level3-radar"> <section id="nexrad-level3-radar">
<h1>NEXRAD Level3 Radar<a class="headerlink" href="#nexrad-level3-radar" title="Permalink to this headline"></a></h1> <h1>NEXRAD Level3 Radar<a class="headerlink" href="#nexrad-level3-radar" 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/NEXRAD_Level3_Radar.ipynb">Notebook</a> <p><a class="reference external" href="http://nbviewer.ipython.org/github/Unidata/python-awips/blob/master/examples/notebooks/NEXRAD_Level3_Radar.ipynb">Notebook</a>
.. code:: ipython3</p> .. code:: ipython3</p>
<blockquote> <blockquote>

View file

@ -14,6 +14,7 @@
<script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js"></script> <script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js"></script>
<script src="../../_static/jquery.js"></script> <script src="../../_static/jquery.js"></script>
<script src="../../_static/underscore.js"></script> <script src="../../_static/underscore.js"></script>
<script src="../../_static/_sphinx_javascript_frameworks_compat.js"></script>
<script src="../../_static/doctools.js"></script> <script src="../../_static/doctools.js"></script>
<script src="../../_static/js/theme.js"></script> <script src="../../_static/js/theme.js"></script>
<link rel="author" title="About these documents" href="../../about.html" /> <link rel="author" title="About these documents" href="../../about.html" />
@ -93,7 +94,7 @@
<div itemprop="articleBody"> <div itemprop="articleBody">
<section id="precip-accumulation-region-of-interest"> <section id="precip-accumulation-region-of-interest">
<h1>Precip Accumulation-Region Of Interest<a class="headerlink" href="#precip-accumulation-region-of-interest" title="Permalink to this headline"></a></h1> <h1>Precip Accumulation-Region Of Interest<a class="headerlink" href="#precip-accumulation-region-of-interest" 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/Precip_Accumulation-Region_Of_Interest.ipynb">Notebook</a> <p><a class="reference external" href="http://nbviewer.ipython.org/github/Unidata/python-awips/blob/master/examples/notebooks/Precip_Accumulation-Region_Of_Interest.ipynb">Notebook</a>
A way to determine areas of greatest precipitation and generate imagery A way to determine areas of greatest precipitation and generate imagery
for that sector.</p> for that sector.</p>

View file

@ -14,6 +14,7 @@
<script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js"></script> <script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js"></script>
<script src="../../_static/jquery.js"></script> <script src="../../_static/jquery.js"></script>
<script src="../../_static/underscore.js"></script> <script src="../../_static/underscore.js"></script>
<script src="../../_static/_sphinx_javascript_frameworks_compat.js"></script>
<script src="../../_static/doctools.js"></script> <script src="../../_static/doctools.js"></script>
<script src="../../_static/js/theme.js"></script> <script src="../../_static/js/theme.js"></script>
<link rel="author" title="About these documents" href="../../about.html" /> <link rel="author" title="About these documents" href="../../about.html" />
@ -98,7 +99,7 @@
<div itemprop="articleBody"> <div itemprop="articleBody">
<section id="regional-surface-obs-plot"> <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> <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> <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 This exercise creates a surface observsation station plot for the state
of Florida, using both METAR (datatype <em>obs</em>) and Synoptic (datatype of Florida, using both METAR (datatype <em>obs</em>) and Synoptic (datatype
@ -210,7 +211,7 @@ exercise.</p>
<img alt="../../_images/Regional_Surface_Obs_Plot_4_1.png" src="../../_images/Regional_Surface_Obs_Plot_4_1.png" /> <img alt="../../_images/Regional_Surface_Obs_Plot_4_1.png" src="../../_images/Regional_Surface_Obs_Plot_4_1.png" />
<hr class="docutils" /> <hr class="docutils" />
<section id="plot-metar-obs"> <section id="plot-metar-obs">
<h2>Plot METAR (obs)<a class="headerlink" href="#plot-metar-obs" title="Permalink to this headline"></a></h2> <h2>Plot METAR (obs)<a class="headerlink" href="#plot-metar-obs" title="Permalink to this heading"></a></h2>
<p>Here we use a spatial envelope to limit the request to the boundary or <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 our plot. Without such a filter you may be requesting many tens of
thousands of records.</p> thousands of records.</p>
@ -298,7 +299,7 @@ plotting function later:</p>
</section> </section>
<hr class="docutils" /> <hr class="docutils" />
<section id="plot-synoptic-sfcobs"> <section id="plot-synoptic-sfcobs">
<h2>Plot Synoptic (sfcobs)<a class="headerlink" href="#plot-synoptic-sfcobs" title="Permalink to this headline"></a></h2> <h2>Plot Synoptic (sfcobs)<a class="headerlink" href="#plot-synoptic-sfcobs" title="Permalink to this heading"></a></h2>
<div class="highlight-ipython3 notranslate"><div class="highlight"><pre><span></span><span class="c1"># New sfcobs/SYNOP request</span> <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">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">&quot;sfcobs&quot;</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">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">&quot;sfcobs&quot;</span><span class="p">,</span> <span class="n">envelope</span><span class="o">=</span><span class="n">envelope</span><span class="p">)</span>
@ -378,7 +379,7 @@ plotting function later:</p>
</section> </section>
<hr class="docutils" /> <hr class="docutils" />
<section id="plot-both-metar-and-synop"> <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> <h2>Plot both METAR and SYNOP<a class="headerlink" href="#plot-both-metar-and-synop" title="Permalink to this heading"></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> <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">&#39;eastward_wind&#39;</span><span class="p">,</span> <span class="s1">&#39;northward_wind&#39;</span><span class="p">,</span> <span class="n">units</span><span class="o">=</span><span class="s1">&#39;knots&#39;</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">&#39;eastward_wind&#39;</span><span class="p">,</span> <span class="s1">&#39;northward_wind&#39;</span><span class="p">,</span> <span class="n">units</span><span class="o">=</span><span class="s1">&#39;knots&#39;</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">&#39;NW&#39;</span><span class="p">,</span> <span class="s1">&#39;air_temperature&#39;</span><span class="p">,</span> <span class="n">fmt</span><span class="o">=</span><span class="s1">&#39;.0f&#39;</span><span class="p">,</span> <span class="n">units</span><span class="o">=</span><span class="s1">&#39;degF&#39;</span><span class="p">,</span> <span class="n">color</span><span class="o">=</span><span class="s1">&#39;darkred&#39;</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">&#39;NW&#39;</span><span class="p">,</span> <span class="s1">&#39;air_temperature&#39;</span><span class="p">,</span> <span class="n">fmt</span><span class="o">=</span><span class="s1">&#39;.0f&#39;</span><span class="p">,</span> <span class="n">units</span><span class="o">=</span><span class="s1">&#39;degF&#39;</span><span class="p">,</span> <span class="n">color</span><span class="o">=</span><span class="s1">&#39;darkred&#39;</span><span class="p">)</span>

View file

@ -14,6 +14,7 @@
<script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js"></script> <script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js"></script>
<script src="../../_static/jquery.js"></script> <script src="../../_static/jquery.js"></script>
<script src="../../_static/underscore.js"></script> <script src="../../_static/underscore.js"></script>
<script src="../../_static/_sphinx_javascript_frameworks_compat.js"></script>
<script src="../../_static/doctools.js"></script> <script src="../../_static/doctools.js"></script>
<script src="../../_static/js/theme.js"></script> <script src="../../_static/js/theme.js"></script>
<link rel="author" title="About these documents" href="../../about.html" /> <link rel="author" title="About these documents" href="../../about.html" />
@ -99,13 +100,13 @@
<div itemprop="articleBody"> <div itemprop="articleBody">
<section id="satellite-imagery"> <section id="satellite-imagery">
<h1>Satellite Imagery<a class="headerlink" href="#satellite-imagery" title="Permalink to this headline"></a></h1> <h1>Satellite Imagery<a class="headerlink" href="#satellite-imagery" 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/Satellite_Imagery.ipynb">Notebook</a> <p><a class="reference external" href="http://nbviewer.ipython.org/github/Unidata/python-awips/blob/master/examples/notebooks/Satellite_Imagery.ipynb">Notebook</a>
Satellite images are returned by Python AWIPS as grids, and can be Satellite images are returned by Python AWIPS as grids, and can be
rendered with Cartopy pcolormesh the same as gridded forecast models in rendered with Cartopy pcolormesh the same as gridded forecast models in
other python-awips examples.</p> other python-awips examples.</p>
<section id="available-sources-creating-entities-sectors-and-products"> <section id="available-sources-creating-entities-sectors-and-products">
<h2>Available Sources, Creating Entities, Sectors, and Products<a class="headerlink" href="#available-sources-creating-entities-sectors-and-products" title="Permalink to this headline"></a></h2> <h2>Available Sources, Creating Entities, Sectors, and Products<a class="headerlink" href="#available-sources-creating-entities-sectors-and-products" title="Permalink to this heading"></a></h2>
<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> <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">import</span> <span class="nn">cartopy.crs</span> <span class="k">as</span> <span class="nn">ccrs</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">import</span> <span class="nn">cartopy.feature</span> <span class="k">as</span> <span class="nn">cfeat</span> <span class="kn">import</span> <span class="nn">cartopy.feature</span> <span class="k">as</span> <span class="nn">cfeat</span>
@ -653,7 +654,7 @@ other python-awips examples.</p>
</pre></div> </pre></div>
</div> </div>
<section id="goes-16-mesoscale-sectors"> <section id="goes-16-mesoscale-sectors">
<h3>GOES 16 Mesoscale Sectors<a class="headerlink" href="#goes-16-mesoscale-sectors" title="Permalink to this headline"></a></h3> <h3>GOES 16 Mesoscale Sectors<a class="headerlink" href="#goes-16-mesoscale-sectors" title="Permalink to this heading"></a></h3>
<p>Define our imports, and define our map properties first.</p> <p>Define our imports, and define our map properties first.</p>
<div class="highlight-ipython3 notranslate"><div class="highlight"><pre><span></span><span class="o">%</span><span class="k">matplotlib</span> inline <div class="highlight-ipython3 notranslate"><div class="highlight"><pre><span></span><span class="o">%</span><span class="k">matplotlib</span> inline

View file

@ -14,6 +14,7 @@
<script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js"></script> <script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js"></script>
<script src="../../_static/jquery.js"></script> <script src="../../_static/jquery.js"></script>
<script src="../../_static/underscore.js"></script> <script src="../../_static/underscore.js"></script>
<script src="../../_static/_sphinx_javascript_frameworks_compat.js"></script>
<script src="../../_static/doctools.js"></script> <script src="../../_static/doctools.js"></script>
<script src="../../_static/js/theme.js"></script> <script src="../../_static/js/theme.js"></script>
<link rel="author" title="About these documents" href="../../about.html" /> <link rel="author" title="About these documents" href="../../about.html" />
@ -93,7 +94,7 @@
<div itemprop="articleBody"> <div itemprop="articleBody">
<section id="upper-air-bufr-soundings"> <section id="upper-air-bufr-soundings">
<h1>Upper Air BUFR Soundings<a class="headerlink" href="#upper-air-bufr-soundings" title="Permalink to this headline"></a></h1> <h1>Upper Air BUFR Soundings<a class="headerlink" href="#upper-air-bufr-soundings" 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/Upper_Air_BUFR_Soundings.ipynb">Notebook</a> <p><a class="reference external" href="http://nbviewer.ipython.org/github/Unidata/python-awips/blob/master/examples/notebooks/Upper_Air_BUFR_Soundings.ipynb">Notebook</a>
The following script takes you through the steps of retrieving an Upper The following script takes you through the steps of retrieving an Upper
Air vertical profile from an AWIPS EDEX server and plotting a Air vertical profile from an AWIPS EDEX server and plotting a

View file

@ -14,6 +14,7 @@
<script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js"></script> <script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js"></script>
<script src="../../_static/jquery.js"></script> <script src="../../_static/jquery.js"></script>
<script src="../../_static/underscore.js"></script> <script src="../../_static/underscore.js"></script>
<script src="../../_static/_sphinx_javascript_frameworks_compat.js"></script>
<script src="../../_static/doctools.js"></script> <script src="../../_static/doctools.js"></script>
<script src="../../_static/js/theme.js"></script> <script src="../../_static/js/theme.js"></script>
<link rel="author" title="About these documents" href="../../about.html" /> <link rel="author" title="About these documents" href="../../about.html" />
@ -108,12 +109,12 @@
<div itemprop="articleBody"> <div itemprop="articleBody">
<section id="watch-warning-and-advisory-plotting"> <section id="watch-warning-and-advisory-plotting">
<h1>Watch Warning and Advisory Plotting<a class="headerlink" href="#watch-warning-and-advisory-plotting" title="Permalink to this headline"></a></h1> <h1>Watch Warning and Advisory Plotting<a class="headerlink" href="#watch-warning-and-advisory-plotting" 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/Watch_Warning_and_Advisory_Plotting.ipynb">Notebook</a> <p><a class="reference external" href="http://nbviewer.ipython.org/github/Unidata/python-awips/blob/master/examples/notebooks/Watch_Warning_and_Advisory_Plotting.ipynb">Notebook</a>
Python-AWIPS Tutorial Notebook</p> Python-AWIPS Tutorial Notebook</p>
<hr class="docutils" /> <hr class="docutils" />
<section id="objectives"> <section id="objectives">
<h2>Objectives<a class="headerlink" href="#objectives" title="Permalink to this headline"></a></h2> <h2>Objectives<a class="headerlink" href="#objectives" title="Permalink to this heading"></a></h2>
<ul class="simple"> <ul class="simple">
<li><p>Create a colorized plot with <a class="reference external" href="https://weather.cod.edu/notes/criteria/">Warnings, Watches, Advisories and <li><p>Create a colorized plot with <a class="reference external" href="https://weather.cod.edu/notes/criteria/">Warnings, Watches, Advisories and
Statements (WWAs)</a></p></li> Statements (WWAs)</a></p></li>
@ -129,7 +130,7 @@ maps</p></li>
</ul> </ul>
<hr class="docutils" /> <hr class="docutils" />
<section id="table-of-contents"> <section id="table-of-contents">
<h3>Table of Contents<a class="headerlink" href="#table-of-contents" title="Permalink to this headline"></a></h3> <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-block">
<div class="line"><a class="reference external" href="https://unidata.github.io/python-awips/examples/generated/Watch_Warning_and_Advisory_Plotting.html#imports">1 <div class="line"><a class="reference external" href="https://unidata.github.io/python-awips/examples/generated/Watch_Warning_and_Advisory_Plotting.html#imports">1
Imports</a></div> Imports</a></div>
@ -168,7 +169,7 @@ Documentation</a></div>
</div> </div>
</section> </section>
<section id="imports"> <section id="imports">
<h3>1 Imports<a class="headerlink" href="#imports" title="Permalink to this headline"></a></h3> <h3>1 Imports<a class="headerlink" href="#imports" title="Permalink to this heading"></a></h3>
<p>The imports below are used throughout the notebook. The python-awips <p>The imports below are used throughout the notebook. The python-awips
imports allow us to connect to an EDEX server, use the warning lookup imports allow us to connect to an EDEX server, use the warning lookup
dictionary, and define a TimeRange. The additional imports are for data dictionary, and define a TimeRange. The additional imports are for data
@ -193,7 +194,7 @@ manipulation and visualization.</p>
</section> </section>
<hr class="docutils" /> <hr class="docutils" />
<section id="function-make-map"> <section id="function-make-map">
<h3>2 Function: make_map()<a class="headerlink" href="#function-make-map" title="Permalink to this headline"></a></h3> <h3>2 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, its easiest to define common <p>In order to plot more than one image, its easiest to define common
logic in a function. However, for this notebook we only use it in one logic in a function. However, for this notebook we only use it in one
place. It is a function you will find in most of our example notebooks.</p> place. It is a function you will find in most of our example notebooks.</p>
@ -216,7 +217,7 @@ to create a figure and axis. The lat/lon grids are added.</p>
</section> </section>
<hr class="docutils" /> <hr class="docutils" />
<section id="function-get-color"> <section id="function-get-color">
<h3>3 Function: get_color()<a class="headerlink" href="#function-get-color" title="Permalink to this headline"></a></h3> <h3>3 Function: get_color()<a class="headerlink" href="#function-get-color" title="Permalink to this heading"></a></h3>
<p>Since well be needing to access the color using the vtec lookup table <p>Since well be needing to access the color using the vtec lookup table
in several places, creating an easily recognizable function is useful.</p> in several places, creating an easily recognizable function is useful.</p>
<div class="highlight-ipython3 notranslate"><div class="highlight"><pre><span></span><span class="k">def</span> <span class="nf">get_color</span><span class="p">(</span><span class="n">phensig</span><span class="p">):</span> <div class="highlight-ipython3 notranslate"><div class="highlight"><pre><span></span><span class="k">def</span> <span class="nf">get_color</span><span class="p">(</span><span class="n">phensig</span><span class="p">):</span>
@ -227,7 +228,7 @@ in several places, creating an easily recognizable function is useful.</p>
</section> </section>
<hr class="docutils" /> <hr class="docutils" />
<section id="function-get-title"> <section id="function-get-title">
<h3>4 Function get_title()<a class="headerlink" href="#function-get-title" title="Permalink to this headline"></a></h3> <h3>4 Function get_title()<a class="headerlink" href="#function-get-title" title="Permalink to this heading"></a></h3>
<p>Similar to the color function just defined, accessing the full name for <p>Similar to the color function just defined, accessing the full name for
the phensig will also be necessary, so this function will be helpful.</p> the phensig will also be necessary, so this function will be helpful.</p>
<div class="highlight-ipython3 notranslate"><div class="highlight"><pre><span></span><span class="k">def</span> <span class="nf">get_title</span><span class="p">(</span><span class="n">phensig</span><span class="p">):</span> <div class="highlight-ipython3 notranslate"><div class="highlight"><pre><span></span><span class="k">def</span> <span class="nf">get_title</span><span class="p">(</span><span class="n">phensig</span><span class="p">):</span>
@ -238,9 +239,9 @@ the phensig will also be necessary, so this function will be helpful.</p>
</section> </section>
<hr class="docutils" /> <hr class="docutils" />
<section id="initial-setup"> <section id="initial-setup">
<h3>5 Initial Setup<a class="headerlink" href="#initial-setup" title="Permalink to this headline"></a></h3> <h3>5 Initial Setup<a class="headerlink" href="#initial-setup" title="Permalink to this heading"></a></h3>
<section id="edex-connection"> <section id="edex-connection">
<h4>5.1 EDEX Connection<a class="headerlink" href="#edex-connection" title="Permalink to this headline"></a></h4> <h4>5.1 EDEX Connection<a class="headerlink" href="#edex-connection" title="Permalink to this heading"></a></h4>
<p>First we establish a connection to Unidatas public EDEX server. With <p>First we establish a connection to Unidatas public EDEX server. With
that connection made, we can create a <a class="reference external" href="http://unidata.github.io/python-awips/api/IDataRequest.html">new data request that connection made, we can create a <a class="reference external" href="http://unidata.github.io/python-awips/api/IDataRequest.html">new data request
object</a> object</a>
@ -260,7 +261,7 @@ Levels and Parameters Notebook.</p>
</div> </div>
</section> </section>
<section id="significance-sig-constants"> <section id="significance-sig-constants">
<h4>5.2 Significance (Sig) Constants<a class="headerlink" href="#significance-sig-constants" title="Permalink to this headline"></a></h4> <h4>5.2 Significance (Sig) Constants<a class="headerlink" href="#significance-sig-constants" title="Permalink to this heading"></a></h4>
<p>The two parameters were requesting for our warning objects are <p>The two parameters were requesting for our warning objects are
<strong>phensig</strong> and <strong>sig</strong> where phensig is styled “XX.Y” and sig is “Y”. <strong>phensig</strong> and <strong>sig</strong> where phensig is styled “XX.Y” and sig is “Y”.
Phen stands for “Phenomena” and sig stands for “Significance”. <a class="reference external" href="https://www.weather.gov/media/vtec/VTEC_explanation4-20.pdf">A more Phen stands for “Phenomena” and sig stands for “Significance”. <a class="reference external" href="https://www.weather.gov/media/vtec/VTEC_explanation4-20.pdf">A more
@ -280,7 +281,7 @@ message it is (what significance it is).</p>
</section> </section>
<hr class="docutils" /> <hr class="docutils" />
<section id="filter-by-time"> <section id="filter-by-time">
<h3>6 Filter by Time<a class="headerlink" href="#filter-by-time" title="Permalink to this headline"></a></h3> <h3>6 Filter by Time<a class="headerlink" href="#filter-by-time" title="Permalink to this heading"></a></h3>
<p>Here we decide how much data we want to pull from EDEX. By default well <p>Here we decide how much data we want to pull from EDEX. By default well
request 12 hours, but that value can easily be modified by <cite>adjusting request 12 hours, but that value can easily be modified by <cite>adjusting
the the
@ -301,9 +302,9 @@ will take to run.</p>
</section> </section>
<hr class="docutils" /> <hr class="docutils" />
<section id="use-the-data"> <section id="use-the-data">
<h3>7 Use the Data!<a class="headerlink" href="#use-the-data" title="Permalink to this headline"></a></h3> <h3>7 Use the Data!<a class="headerlink" href="#use-the-data" title="Permalink to this heading"></a></h3>
<section id="get-the-data"> <section id="get-the-data">
<h4>7.1 Get the Data<a class="headerlink" href="#get-the-data" title="Permalink to this headline"></a></h4> <h4>7.1 Get the Data<a class="headerlink" href="#get-the-data" title="Permalink to this heading"></a></h4>
<p>Now that we have our <code class="docutils literal notranslate"><span class="pre">request</span></code> and TimeRange <code class="docutils literal notranslate"><span class="pre">timerange</span></code> objects <p>Now that we have our <code class="docutils literal notranslate"><span class="pre">request</span></code> and TimeRange <code class="docutils literal notranslate"><span class="pre">timerange</span></code> objects
ready, its time to request the data array from EDEX.</p> ready, its time to request the data array from EDEX.</p>
<div class="alert-info docutils container"> <div class="alert-info docutils container">
@ -321,7 +322,7 @@ run.</p>
</div> </div>
</section> </section>
<section id="extract-phensigs-geometries-and-times"> <section id="extract-phensigs-geometries-and-times">
<h4>7.2 Extract Phensigs, Geometries, and Times<a class="headerlink" href="#extract-phensigs-geometries-and-times" title="Permalink to this headline"></a></h4> <h4>7.2 Extract Phensigs, Geometries, and Times<a class="headerlink" href="#extract-phensigs-geometries-and-times" title="Permalink to this heading"></a></h4>
<p>In this section we start gathering all the information well need to <p>In this section we start gathering all the information well need to
properly display our data. First we create an array to keep track of properly display our data. First we create an array to keep track of
unique phensigs. This is useful summary information and will be used to unique phensigs. This is useful summary information and will be used to
@ -446,9 +447,9 @@ phensig.</p>
</section> </section>
<hr class="docutils" /> <hr class="docutils" />
<section id="plot-the-data"> <section id="plot-the-data">
<h3>8 Plot the Data!<a class="headerlink" href="#plot-the-data" title="Permalink to this headline"></a></h3> <h3>8 Plot the Data!<a class="headerlink" href="#plot-the-data" title="Permalink to this heading"></a></h3>
<section id="create-state-and-political-boundaries"> <section id="create-state-and-political-boundaries">
<h4>8.1 Create State and Political Boundaries<a class="headerlink" href="#create-state-and-political-boundaries" title="Permalink to this headline"></a></h4> <h4>8.1 Create State and Political Boundaries<a class="headerlink" href="#create-state-and-political-boundaries" title="Permalink to this heading"></a></h4>
<p>Define the state and political boundaries that well use in our plot to <p>Define the state and political boundaries that well use in our plot to
give more of a frame of reference. These objects are standard method give more of a frame of reference. These objects are standard method
calls in the <a class="reference external" href="https://scitools.org.uk/cartopy/docs/v0.14/matplotlib/feature_interface.html#cartopy.feature.NaturalEarthFeature">Cartopy Feature package, using the NaturalEarthFeature calls in the <a class="reference external" href="https://scitools.org.uk/cartopy/docs/v0.14/matplotlib/feature_interface.html#cartopy.feature.NaturalEarthFeature">Cartopy Feature package, using the NaturalEarthFeature
@ -466,7 +467,7 @@ function</a>.</p>
</div> </div>
</section> </section>
<section id="draw-the-plot-and-legend-for-wwas"> <section id="draw-the-plot-and-legend-for-wwas">
<h4>8.2 Draw the Plot and Legend for WWAs<a class="headerlink" href="#draw-the-plot-and-legend-for-wwas" title="Permalink to this headline"></a></h4> <h4>8.2 Draw the Plot and Legend for WWAs<a class="headerlink" href="#draw-the-plot-and-legend-for-wwas" title="Permalink to this heading"></a></h4>
<p>Here is where we finally get ot draw something! The very first few lines <p>Here is where we finally get ot draw something! The very first few lines
of this section are constants that we can manually “switch on and off” of this section are constants that we can manually “switch on and off”
for what records we want displayed. By default we have all significance for what records we want displayed. By default we have all significance
@ -570,7 +571,7 @@ all the features to the axes, and add the legend as well.</p>
</section> </section>
<hr class="docutils" /> <hr class="docutils" />
<section id="see-also"> <section id="see-also">
<h3>9 See Also<a class="headerlink" href="#see-also" title="Permalink to this headline"></a></h3> <h3>9 See Also<a class="headerlink" href="#see-also" title="Permalink to this heading"></a></h3>
<ul class="simple"> <ul class="simple">
<li><p><a class="reference external" href="https://www.weather.gov/lwx/warningsdefined#:~:text=A%20Winter%20Storm%20Warning%20is%20issued%20when%20a,combination%20of%20snow%20and%2For%20ice%20accumulation%20with%20wind.">National Weather Service WWA Definitions (Baltimore <li><p><a class="reference external" href="https://www.weather.gov/lwx/warningsdefined#:~:text=A%20Winter%20Storm%20Warning%20is%20issued%20when%20a,combination%20of%20snow%20and%2For%20ice%20accumulation%20with%20wind.">National Weather Service WWA Definitions (Baltimore
Office)</a></p></li> Office)</a></p></li>
@ -580,14 +581,14 @@ Definitions</a></p></li>
Explanation</a></p></li> Explanation</a></p></li>
</ul> </ul>
<section id="related-notebooks"> <section id="related-notebooks">
<h4>9.1 Related Notebooks<a class="headerlink" href="#related-notebooks" title="Permalink to this headline"></a></h4> <h4>9.1 Related Notebooks<a class="headerlink" href="#related-notebooks" title="Permalink to this heading"></a></h4>
<ul class="simple"> <ul class="simple">
<li><p><a class="reference external" href="http://unidata.github.io/python-awips/examples/generated/Grid_Levels_and_Parameters.html">Grid Levels and <li><p><a class="reference external" href="http://unidata.github.io/python-awips/examples/generated/Grid_Levels_and_Parameters.html">Grid Levels and
Parameters</a></p></li> Parameters</a></p></li>
</ul> </ul>
</section> </section>
<section id="additional-documentation"> <section id="additional-documentation">
<h4>9.2 Additional Documentation<a class="headerlink" href="#additional-documentation" title="Permalink to this headline"></a></h4> <h4>9.2 Additional Documentation<a class="headerlink" href="#additional-documentation" title="Permalink to this heading"></a></h4>
<p><strong>python-awips</strong></p> <p><strong>python-awips</strong></p>
<ul class="simple"> <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.changeEDEXHost">DataAccessLayer.changeEDEXHost()</a></p></li>

View file

@ -14,6 +14,7 @@
<script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script> <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
<script src="../_static/jquery.js"></script> <script src="../_static/jquery.js"></script>
<script src="../_static/underscore.js"></script> <script src="../_static/underscore.js"></script>
<script src="../_static/_sphinx_javascript_frameworks_compat.js"></script>
<script src="../_static/doctools.js"></script> <script src="../_static/doctools.js"></script>
<script src="../_static/js/theme.js"></script> <script src="../_static/js/theme.js"></script>
<link rel="author" title="About these documents" href="../about.html" /> <link rel="author" title="About these documents" href="../about.html" />
@ -92,7 +93,7 @@
<div itemprop="articleBody"> <div itemprop="articleBody">
<section id="data-plotting-examples"> <section id="data-plotting-examples">
<span id="examples-index"></span><h1>Data Plotting Examples<a class="headerlink" href="#data-plotting-examples" title="Permalink to this headline"></a></h1> <span id="examples-index"></span><h1>Data Plotting Examples<a class="headerlink" href="#data-plotting-examples" title="Permalink to this heading"></a></h1>
<div class="toctree-wrapper compound"> <div class="toctree-wrapper compound">
<ul> <ul>
<li class="toctree-l1"><a class="reference internal" href="generated/Colored_Surface_Temperature_Plot.html">Colored Surface Temperature Plot</a></li> <li class="toctree-l1"><a class="reference internal" href="generated/Colored_Surface_Temperature_Plot.html">Colored Surface Temperature Plot</a></li>

View file

@ -13,6 +13,7 @@
<script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script> <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
<script src="_static/jquery.js"></script> <script src="_static/jquery.js"></script>
<script src="_static/underscore.js"></script> <script src="_static/underscore.js"></script>
<script src="_static/_sphinx_javascript_frameworks_compat.js"></script>
<script src="_static/doctools.js"></script> <script src="_static/doctools.js"></script>
<script src="_static/js/theme.js"></script> <script src="_static/js/theme.js"></script>
<link rel="author" title="About these documents" href="about.html" /> <link rel="author" title="About these documents" href="about.html" />

View file

@ -14,6 +14,7 @@
<script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script> <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
<script src="_static/jquery.js"></script> <script src="_static/jquery.js"></script>
<script src="_static/underscore.js"></script> <script src="_static/underscore.js"></script>
<script src="_static/_sphinx_javascript_frameworks_compat.js"></script>
<script src="_static/doctools.js"></script> <script src="_static/doctools.js"></script>
<script src="_static/js/theme.js"></script> <script src="_static/js/theme.js"></script>
<link rel="author" title="About these documents" href="about.html" /> <link rel="author" title="About these documents" href="about.html" />
@ -74,11 +75,11 @@
<div itemprop="articleBody"> <div itemprop="articleBody">
<section id="python-awips-data-access-framework"> <section id="python-awips-data-access-framework">
<h1>Python AWIPS Data Access Framework<a class="headerlink" href="#python-awips-data-access-framework" title="Permalink to this headline"></a></h1> <h1>Python AWIPS Data Access Framework<a class="headerlink" href="#python-awips-data-access-framework" title="Permalink to this heading"></a></h1>
<p>The python-awips package provides a data access framework for requesting meteorological and geographic datasets from an <a class="reference external" href="http://unidata.github.io/awips2/#edex">EDEX</a> server.</p> <p>The python-awips package provides a data access framework for requesting meteorological and geographic datasets from an <a class="reference external" href="http://unidata.github.io/awips2/#edex">EDEX</a> server.</p>
<p><a class="reference external" href="http://unidata.github.io/awips2">AWIPS</a> is a weather display and analysis package developed by the National Weather Service for operational forecasting. UCARs <a class="reference external" href="http://www.unidata.ucar.edu/software/awips2/">Unidata Program Center</a> supports a non-operational open-source release of the AWIPS software (<a class="reference external" href="http://unidata.github.io/awips2/#edex">EDEX</a>, <a class="reference external" href="http://unidata.github.io/awips2/#cave">CAVE</a>, and <a class="reference external" href="https://github.com/Unidata/python-awips">python-awips</a>).</p> <p><a class="reference external" href="http://unidata.github.io/awips2">AWIPS</a> is a weather display and analysis package developed by the National Weather Service for operational forecasting. UCARs <a class="reference external" href="http://www.unidata.ucar.edu/software/awips2/">Unidata Program Center</a> supports a non-operational open-source release of the AWIPS software (<a class="reference external" href="http://unidata.github.io/awips2/#edex">EDEX</a>, <a class="reference external" href="http://unidata.github.io/awips2/#cave">CAVE</a>, and <a class="reference external" href="https://github.com/Unidata/python-awips">python-awips</a>).</p>
<section id="pre-requisite-software"> <section id="pre-requisite-software">
<h2>Pre-requisite Software<a class="headerlink" href="#pre-requisite-software" title="Permalink to this headline"></a></h2> <h2>Pre-requisite Software<a class="headerlink" href="#pre-requisite-software" title="Permalink to this heading"></a></h2>
<dl class="simple"> <dl class="simple">
<dt>In order to effictively use python-awips youll need to have these installed already:</dt><dd><ul class="simple"> <dt>In order to effictively use python-awips youll need to have these installed already:</dt><dd><ul class="simple">
<li><p>python3</p></li> <li><p>python3</p></li>
@ -89,24 +90,24 @@
</dl> </dl>
</section> </section>
<section id="package-only-install"> <section id="package-only-install">
<h2>Package-Only Install<a class="headerlink" href="#package-only-install" title="Permalink to this headline"></a></h2> <h2>Package-Only Install<a class="headerlink" href="#package-only-install" title="Permalink to this heading"></a></h2>
<p>If you already work with Python, you might just be interested in how to install the python-awips pacakge. <p>If you already work with Python, you might just be interested in how to install the python-awips pacakge.
The package can be installed with either of the two well known package managers: <strong>pip</strong> and <strong>conda</strong>.</p> The package can be installed with either of the two well known package managers: <strong>pip</strong> and <strong>conda</strong>.</p>
<section id="pip-install"> <section id="pip-install">
<h3>Pip Install<a class="headerlink" href="#pip-install" title="Permalink to this headline"></a></h3> <h3>Pip Install<a class="headerlink" href="#pip-install" title="Permalink to this heading"></a></h3>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">pip</span> <span class="n">install</span> <span class="n">python</span><span class="o">-</span><span class="n">awips</span> <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">pip</span> <span class="n">install</span> <span class="n">python</span><span class="o">-</span><span class="n">awips</span>
</pre></div> </pre></div>
</div> </div>
</section> </section>
<section id="conda-install"> <section id="conda-install">
<h3>Conda Install<a class="headerlink" href="#conda-install" title="Permalink to this headline"></a></h3> <h3>Conda Install<a class="headerlink" href="#conda-install" title="Permalink to this heading"></a></h3>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">conda</span> <span class="n">install</span> <span class="o">-</span><span class="n">c</span> <span class="n">conda</span><span class="o">-</span><span class="n">forge</span> <span class="n">python</span><span class="o">-</span><span class="n">awips</span> <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">conda</span> <span class="n">install</span> <span class="o">-</span><span class="n">c</span> <span class="n">conda</span><span class="o">-</span><span class="n">forge</span> <span class="n">python</span><span class="o">-</span><span class="n">awips</span>
</pre></div> </pre></div>
</div> </div>
</section> </section>
</section> </section>
<section id="source-code-with-examples-install"> <section id="source-code-with-examples-install">
<h2>Source Code with Examples Install<a class="headerlink" href="#source-code-with-examples-install" title="Permalink to this headline"></a></h2> <h2>Source Code with Examples Install<a class="headerlink" href="#source-code-with-examples-install" title="Permalink to this heading"></a></h2>
<p>Below are instructions on how to install the source code of python-awips, with all included example notebooks. This will create a new conda environment called <code class="docutils literal notranslate"><span class="pre">python3-awips</span></code> and start up a browser for the jupyter notebook examples.</p> <p>Below are instructions on how to install the source code of python-awips, with all included example notebooks. This will create a new conda environment called <code class="docutils literal notranslate"><span class="pre">python3-awips</span></code> and start up a browser for the jupyter notebook examples.</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">git</span> <span class="n">clone</span> <span class="n">https</span><span class="p">:</span><span class="o">//</span><span class="n">github</span><span class="o">.</span><span class="n">com</span><span class="o">/</span><span class="n">Unidata</span><span class="o">/</span><span class="n">python</span><span class="o">-</span><span class="n">awips</span><span class="o">.</span><span class="n">git</span> <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">git</span> <span class="n">clone</span> <span class="n">https</span><span class="p">:</span><span class="o">//</span><span class="n">github</span><span class="o">.</span><span class="n">com</span><span class="o">/</span><span class="n">Unidata</span><span class="o">/</span><span class="n">python</span><span class="o">-</span><span class="n">awips</span><span class="o">.</span><span class="n">git</span>
<span class="n">cd</span> <span class="n">python</span><span class="o">-</span><span class="n">awips</span> <span class="n">cd</span> <span class="n">python</span><span class="o">-</span><span class="n">awips</span>
@ -122,7 +123,7 @@ The package can be installed with either of the two well known package managers:
</div> </div>
</section> </section>
<section id="questions-contact-us"> <section id="questions-contact-us">
<h2>Questions Contact Us!<a class="headerlink" href="#questions-contact-us" title="Permalink to this headline"></a></h2> <h2>Questions Contact Us!<a class="headerlink" href="#questions-contact-us" title="Permalink to this heading"></a></h2>
<p>Please feel free to reach out to us at our support email at <strong>support-awips&#64;unidata.ucar.edu</strong></p> <p>Please feel free to reach out to us at our support email at <strong>support-awips&#64;unidata.ucar.edu</strong></p>
<div class="toctree-wrapper compound"> <div class="toctree-wrapper compound">
</div> </div>

Binary file not shown.

View file

@ -13,6 +13,7 @@
<script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script> <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
<script src="_static/jquery.js"></script> <script src="_static/jquery.js"></script>
<script src="_static/underscore.js"></script> <script src="_static/underscore.js"></script>
<script src="_static/_sphinx_javascript_frameworks_compat.js"></script>
<script src="_static/doctools.js"></script> <script src="_static/doctools.js"></script>
<script src="_static/js/theme.js"></script> <script src="_static/js/theme.js"></script>
<link rel="author" title="About these documents" href="about.html" /> <link rel="author" title="About these documents" href="about.html" />

View file

@ -14,6 +14,7 @@
<script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script> <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
<script src="_static/jquery.js"></script> <script src="_static/jquery.js"></script>
<script src="_static/underscore.js"></script> <script src="_static/underscore.js"></script>
<script src="_static/_sphinx_javascript_frameworks_compat.js"></script>
<script src="_static/doctools.js"></script> <script src="_static/doctools.js"></script>
<script src="_static/js/theme.js"></script> <script src="_static/js/theme.js"></script>
<script src="_static/searchtools.js"></script> <script src="_static/searchtools.js"></script>

File diff suppressed because one or more lines are too long