This commit is contained in:
srcarter3 2021-09-01 18:40:35 +00:00
parent e6ebfa5263
commit 6dac12e6d1
19 changed files with 501 additions and 291 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 72 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 90 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 138 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 372 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 69 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 87 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 135 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 367 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 48 KiB

View file

@ -2,59 +2,101 @@
Map Resources and Topography Map Resources and Topography
============================ ============================
`Notebook <http://nbviewer.ipython.org/github/Unidata/python-awips/blob/master/examples/notebooks/Map_Resources_and_Topography.ipynb>`_ `Notebook <http://nbviewer.ipython.org/github/Unidata/python-awips/blob/master/examples/notebooks/Map_Resources_and_Topography.ipynb>`_
The python-awips package provides access to the entire AWIPS Maps Python-AWIPS Tutorial Notebook
Database for use in Python GIS applications. Map objects are returned as
Shapely geometries (*Polygon*, *Point*, *MultiLineString*, etc.) and can
be easily plotted by Matplotlib, Cartopy, MetPy, and other packages.
Each map database table has a geometry field called ``the_geom``, which --------------
can be used to spatially select map resources for any column of type
geometry,
Notes Objectives
----- ==========
- This notebook requires: **python-awips, numpy, matplotplib, cartopy, - Use python-awips to connect to an edex server
shapely** - Define data request object specifically for the maps database
- Use datatype **maps** and **addIdentifier(table, <postgres maps - Manipulate request object for various different map resources
schema>)** to define the map table: - Plot map resources in combination with one another for geographical
DataAccessLayer.changeEDEXHost(“edex-cloud.unidata.ucar.edu”) request context
= DataAccessLayer.newDataRequest(maps)
request.addIdentifier(table, mapdata.county)
- Use **request.setLocationNames()** and **request.addIdentifier()** to
spatially filter a map resource. In the example below, WFO ID **BOU**
(Boulder, Colorado) is used to query counties within the BOU county
watch area (CWA)
:: --------------
request.addIdentifier('geomField', 'the_geom') Table of Contents
request.addIdentifier('inLocation', 'true') -----------------
request.addIdentifier('locationField', 'cwa')
request.setLocationNames('BOU')
request.addIdentifier('cwa', 'BOU')
See the Maps Database Reference Page for available database tables, | `1
column names, and types. Imports <https://unidata.github.io/python-awips/examples/generated/Map_Resources_and_Topography.html#imports>`__\
| `2 Connect to
EDEX <https://unidata.github.io/python-awips/examples/generated/Map_Resources_and_Topography.html#connect-to-edex>`__\
| `3 Function:
make_map() <https://unidata.github.io/python-awips/examples/generated/Map_Resources_and_Topography.html#function-make-map>`__\
| `4 Create Initial Map From
CWA <https://unidata.github.io/python-awips/examples/generated/Map_Resources_and_Topography.html#create-initial-map-from-cwa>`__\
| `5 Draw Merged
CWA <https://unidata.github.io/python-awips/examples/generated/Map_Resources_and_Topography.html#draw-merged-cwa>`__\
| `6 Draw Interstates using Boundary
Filter <https://unidata.github.io/python-awips/examples/generated/Map_Resources_and_Topography.html#draw-interstates-using-boundary-filter>`__\
| `7 Draw Nearby
Cities <https://unidata.github.io/python-awips/examples/generated/Map_Resources_and_Topography.html#draw-nearby-cities>`__\
| `8 Draw Nearby
Lakes <https://unidata.github.io/python-awips/examples/generated/Map_Resources_and_Topography.html#draw-nearby-lakes>`__\
| `9 Draw Major
Rivers <https://unidata.github.io/python-awips/examples/generated/Map_Resources_and_Topography.html#draw-major-rivers>`__\
| `10 Draw
Topography <https://unidata.github.io/python-awips/examples/generated/Map_Resources_and_Topography.html#draw-topography>`__\
| `11 See
Also <https://unidata.github.io/python-awips/examples/generated/Map_Resources_and_Topography.html#see-also>`__\
|     `11.1 Additional
Documentation <https://unidata.github.io/python-awips/examples/generated/Map_Resources_and_Topography.html#additional-documentation>`__\
Note the geometry definition of ``the_geom`` for each data type, 1 Imports
which can be **Point**, **MultiPolygon**, or **MultiLineString**. ---------
Setup The imports below are used throughout the notebook. Note the first
----- import is coming directly from python-awips and allows us to connect to
an EDEX server. The subsequent imports are for data manipulation and
visualization.
.. code:: ipython3 .. code:: ipython3
from __future__ import print_function
from awips.dataaccess import DataAccessLayer from awips.dataaccess import DataAccessLayer
import matplotlib.pyplot as plt import matplotlib.pyplot as plt
import cartopy.crs as ccrs import cartopy.crs as ccrs
import numpy as np import numpy.ma as ma
from cartopy.mpl.gridliner import LONGITUDE_FORMATTER, LATITUDE_FORMATTER from cartopy.mpl.gridliner import LONGITUDE_FORMATTER, LATITUDE_FORMATTER
from cartopy.feature import ShapelyFeature,NaturalEarthFeature from cartopy.feature import ShapelyFeature,NaturalEarthFeature
from shapely.geometry import Polygon
from shapely.ops import cascaded_union from shapely.ops import cascaded_union
`Top <https://unidata.github.io/python-awips/examples/generated/Map_Resources_and_Topography.html>`__
--------------
2 Connect to EDEX
-----------------
First we establish a connection to Unidatas public EDEX server. With
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 **maps**.
.. code:: ipython3
# Server, Data Request Type, and Database Table
DataAccessLayer.changeEDEXHost("edex-cloud.unidata.ucar.edu")
request = DataAccessLayer.newDataRequest('maps')
`Top <https://unidata.github.io/python-awips/examples/generated/Map_Resources_and_Topography.html>`__
--------------
3 Function: make_map()
----------------------
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
defined when they are called multiple times throughout a notebook. In
this case, we only use it in one code block cell, but because it is a
common function from several of our notebooks, its nice to keep the
logic neatly defined for consistency.
.. code:: ipython3
# Standard map plot # Standard map plot
def make_map(bbox, projection=ccrs.PlateCarree()): def make_map(bbox, projection=ccrs.PlateCarree()):
fig, ax = plt.subplots(figsize=(12,12), fig, ax = plt.subplots(figsize=(12,12),
@ -67,41 +109,58 @@ Setup
gl.yformatter = LATITUDE_FORMATTER gl.yformatter = LATITUDE_FORMATTER
return fig, ax return fig, ax
# Server, Data Request Type, and Database Table `Top <https://unidata.github.io/python-awips/examples/generated/Map_Resources_and_Topography.html>`__
DataAccessLayer.changeEDEXHost("edex-cloud.unidata.ucar.edu")
request = DataAccessLayer.newDataRequest('maps')
request.addIdentifier('table', 'mapdata.county')
Request County Boundaries for a WFO --------------
-----------------------------------
- Use **request.setParameters()** to define fields to be returned by 4 Create Initial Map From CWA
the request. -----------------------------
The python-awips package provides access to the entire AWIPS Maps
Database for use in Python GIS applications. Map objects are returned as
Shapely geometries and can be easily plotted by many Python packages.
- Each map database table has a geometry field called ``the_geom``,
which can be used to spatially select map resources for any column of
type geometry.
.. container:: alert-info
::
<b>Tip:</b> Note the geometry definition of <code>the_geom</code> for each data type, which can be <b>Point</b>, <b>MultiPolygon</b>, or <b>MultiLineString</b>.
Here well be using Boulder (BOU) as our example for plotting the County
Warning Area (CWA). Well query our EDEX server to get all counties in
the CWA for BOU, and then plot those counties along withe the state
boundaries and lines of longitude and latitude. In order to get this
information from EDEX, well need to set several characteristics on our
data request object. We will use
`request.setParameters() <http://unidata.github.io/python-awips/api/IDataRequest.html#awips.dataaccess.IDataRequest.setParameters>`__
to refine our query to EDEX.
.. code:: ipython3 .. code:: ipython3
# Specify the necessary identifiers for requesting the Boulder CWA
request.addIdentifier('table', 'mapdata.county')
# Define a WFO ID for location # Define a WFO ID for location
# tie this ID to the mapdata.county column "cwa" for filtering # tie this ID to the mapdata.county column "cwa" for filtering
request.setLocationNames('BOU') request.setLocationNames('BOU')
request.addIdentifier('cwa', 'BOU') request.addIdentifier('cwa', 'BOU')
# enable location filtering (inLocation) # enable location filtering (inLocation)
# locationField is tied to the above cwa definition (BOU) # locationField is tied to the above cwa definition (BOU)
request.addIdentifier('geomField', 'the_geom') request.addIdentifier('geomField', 'the_geom')
request.addIdentifier('inLocation', 'true') request.addIdentifier('inLocation', 'true')
request.addIdentifier('locationField', 'cwa') request.addIdentifier('locationField', 'cwa')
# This is essentially the same as "'"select count(*) from mapdata.cwa where cwa='BOU';" (=1)
# Get response and create dict of county geometries # Get response and create dict of county geometries
response = DataAccessLayer.getGeometryData(request, []) response = DataAccessLayer.getGeometryData(request)
counties = np.array([]) counties = []
for ob in response: for ob in response:
counties = np.append(counties,ob.getGeometry()) counties.append(ob.getGeometry())
print("Using " + str(len(counties)) + " county MultiPolygons") print("Using " + str(len(counties)) + " county MultiPolygons")
%matplotlib inline
# All WFO counties merged to a single Polygon # All WFO counties merged to a single Polygon
merged_counties = cascaded_union(counties) merged_counties = cascaded_union(counties)
envelope = merged_counties.buffer(2) envelope = merged_counties.buffer(2)
@ -111,8 +170,10 @@ Request County Boundaries for a WFO
bounds = merged_counties.bounds bounds = merged_counties.bounds
bbox=[bounds[0]-1,bounds[2]+1,bounds[1]-1.5,bounds[3]+1.5] bbox=[bounds[0]-1,bounds[2]+1,bounds[1]-1.5,bounds[3]+1.5]
# Create the map we'll use for the rest of this notebook based on the
# boundaries of the CWA
fig, ax = make_map(bbox=bbox) fig, ax = make_map(bbox=bbox)
# Plot political/state boundaries handled by Cartopy # Plot political/state boundaries handled by Cartopy
political_boundaries = NaturalEarthFeature(category='cultural', political_boundaries = NaturalEarthFeature(category='cultural',
name='admin_0_boundary_lines_land', name='admin_0_boundary_lines_land',
@ -124,39 +185,43 @@ Request County Boundaries for a WFO
ax.add_feature(states, linestyle='-', edgecolor='black',linewidth=2) ax.add_feature(states, linestyle='-', edgecolor='black',linewidth=2)
# Plot CWA counties # Plot CWA counties
for i, geom in enumerate(counties): shape_feature = ShapelyFeature(counties,ccrs.PlateCarree(),
cbounds = Polygon(geom)
intersection = cbounds.intersection
geoms = (intersection(geom)
for geom in counties
if cbounds.intersects(geom))
shape_feature = ShapelyFeature(geoms,ccrs.PlateCarree(),
facecolor='none', linestyle="-",edgecolor='#86989B') facecolor='none', linestyle="-",edgecolor='#86989B')
ax.add_feature(shape_feature) ax.add_feature(shape_feature)
.. parsed-literal:: .. parsed-literal::
Using 23 county MultiPolygons Using 22 county MultiPolygons
.. image:: Map_Resources_and_Topography_files/Map_Resources_and_Topography_4_1.png
.. parsed-literal::
<cartopy.mpl.feature_artist.FeatureArtist at 0x11568f6d0>
Create a merged CWA with cascaded_union
---------------------------------------
.. image:: Map_Resources_and_Topography_files/Map_Resources_and_Topography_13_2.png
`Top <https://unidata.github.io/python-awips/examples/generated/Map_Resources_and_Topography.html>`__
--------------
5 Draw Merged CWA
-----------------
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
burnt orange color.
.. code:: ipython3 .. code:: ipython3
# Plot CWA envelope # Plot CWA envelope
for i, geom in enumerate(boundaries): shape_feature = ShapelyFeature(boundaries,ccrs.PlateCarree(),
gbounds = Polygon(geom)
intersection = gbounds.intersection
geoms = (intersection(geom)
for geom in boundaries
if gbounds.intersects(geom))
shape_feature = ShapelyFeature(geoms,ccrs.PlateCarree(),
facecolor='none', linestyle="-",linewidth=3.,edgecolor='#cc5000') facecolor='none', linestyle="-",linewidth=3.,edgecolor='#cc5000')
ax.add_feature(shape_feature) ax.add_feature(shape_feature)
@ -165,24 +230,28 @@ Create a merged CWA with cascaded_union
.. image:: Map_Resources_and_Topography_files/Map_Resources_and_Topography_6_0.png .. image:: Map_Resources_and_Topography_files/Map_Resources_and_Topography_16_0.png
WFO boundary spatial filter for interstates `Top <https://unidata.github.io/python-awips/examples/generated/Map_Resources_and_Topography.html>`__
-------------------------------------------
Using the previously-defined **envelope=merged_counties.buffer(2)** in --------------
**newDataRequest()** to request geometries which fall inside the
buffered boundary. 6 Draw Interstates using Boundary Filter
----------------------------------------
Now, well use the previously-defined
**envelope=merged_counties.buffer(2)** in a **newDataRequest()** to
request interstate geometries which fall inside the buffered boundary.
.. code:: ipython3 .. code:: ipython3
# Define the request for the interstate query
request = DataAccessLayer.newDataRequest('maps', envelope=envelope) request = DataAccessLayer.newDataRequest('maps', envelope=envelope)
request.addIdentifier('table', 'mapdata.interstate') request.addIdentifier('table', 'mapdata.interstate')
request.addIdentifier('geomField', 'the_geom') request.addIdentifier('geomField', 'the_geom')
request.setParameters('name') interstates = DataAccessLayer.getGeometryData(request)
interstates = DataAccessLayer.getGeometryData(request, [])
print("Using " + str(len(interstates)) + " interstate MultiLineStrings") print("Using " + str(len(interstates)) + " interstate MultiLineStrings")
# Plot interstates # Plot interstates
@ -200,35 +269,43 @@ buffered boundary.
.. image:: Map_Resources_and_Topography_files/Map_Resources_and_Topography_8_1.png .. image:: Map_Resources_and_Topography_files/Map_Resources_and_Topography_19_1.png
Nearby cities `Top <https://unidata.github.io/python-awips/examples/generated/Map_Resources_and_Topography.html>`__
-------------
Request the city table and filter by population and progressive --------------
disclosure level:
**Warning**: the ``prog_disc`` field is not entirely understood and 7 Draw Nearby Cities
values appear to change significantly depending on WFO site. --------------------
Request the city table based using the **envelope** attribute and filter
by population and progressive disclosure level.
.. container:: alert-warning
::
<b>Warning:</b> the <code>prog_disc</code> field is not entirely understood and values appear to change significantly depending on WFO site.
.. code:: ipython3 .. code:: ipython3
# Define the request for the city query
request = DataAccessLayer.newDataRequest('maps', envelope=envelope) request = DataAccessLayer.newDataRequest('maps', envelope=envelope)
request.addIdentifier('table', 'mapdata.city') request.addIdentifier('table', 'mapdata.city')
request.addIdentifier('geomField', 'the_geom') request.addIdentifier('geomField', 'the_geom')
request.setParameters('name','population','prog_disc') request.setParameters('name','population','prog_disc')
cities = DataAccessLayer.getGeometryData(request, []) cities = DataAccessLayer.getGeometryData(request)
print("Queried " + str(len(cities)) + " total cities") print("Queried " + str(len(cities)) + " total cities")
# Set aside two arrays - one for the geometry of the cities and one for their names
citylist = [] citylist = []
cityname = [] cityname = []
# For BOU, progressive disclosure values above 50 and pop above 5000 looks good # For BOU, progressive disclosure values above 50 and pop above 5000 looks good
for ob in cities: for ob in cities:
if ob.getString("population"): if ob.getString("population") != 'None':
if ob.getNumber("prog_disc") > 50: if ob.getNumber("prog_disc") > 50 and int(ob.getString("population")) > 5000:
if int(ob.getString("population")) > 5000:
citylist.append(ob.getGeometry()) citylist.append(ob.getGeometry())
cityname.append(ob.getString("name")) cityname.append(ob.getString("name"))
print("Plotting " + str(len(cityname)) + " cities") print("Plotting " + str(len(cityname)) + " cities")
@ -247,41 +324,39 @@ values appear to change significantly depending on WFO site.
.. parsed-literal:: .. parsed-literal::
Queried 1203 total cities Queried 1205 total cities
Plotting 57 cities Plotting 58 cities
.. image:: Map_Resources_and_Topography_files/Map_Resources_and_Topography_10_1.png .. image:: Map_Resources_and_Topography_files/Map_Resources_and_Topography_22_1.png
Lakes `Top <https://unidata.github.io/python-awips/examples/generated/Map_Resources_and_Topography.html>`__
-----
--------------
8 Draw Nearby Lakes
-------------------
Again, use the **envelope** attribute to define a new data requst for
the nearby lakes.
.. code:: ipython3 .. code:: ipython3
# Define request for lakes
request = DataAccessLayer.newDataRequest('maps', envelope=envelope) request = DataAccessLayer.newDataRequest('maps', envelope=envelope)
request.addIdentifier('table', 'mapdata.lake') request.addIdentifier('table', 'mapdata.lake')
request.addIdentifier('geomField', 'the_geom') request.addIdentifier('geomField', 'the_geom')
request.setParameters('name')
# Get lake geometries # Get lake geometries
response = DataAccessLayer.getGeometryData(request, []) response = DataAccessLayer.getGeometryData(request)
lakes = np.array([]) print("Using " + str(len(response)) + " lake MultiPolygons")
for ob in response:
lakes = np.append(lakes,ob.getGeometry())
print("Using " + str(len(lakes)) + " lake MultiPolygons")
# Plot lakes # Plot lakes
for i, geom in enumerate(lakes): shape_feature = ShapelyFeature([lake.getGeometry() for lake in response],ccrs.PlateCarree(),
cbounds = Polygon(geom)
intersection = cbounds.intersection
geoms = (intersection(geom)
for geom in lakes
if cbounds.intersects(geom))
shape_feature = ShapelyFeature(geoms,ccrs.PlateCarree(),
facecolor='blue', linestyle="-",edgecolor='#20B2AA') facecolor='blue', linestyle="-",edgecolor='#20B2AA')
ax.add_feature(shape_feature) ax.add_feature(shape_feature)
fig fig
@ -295,25 +370,28 @@ Lakes
.. image:: Map_Resources_and_Topography_files/Map_Resources_and_Topography_12_1.png .. image:: Map_Resources_and_Topography_files/Map_Resources_and_Topography_25_1.png
Major Rivers `Top <https://unidata.github.io/python-awips/examples/generated/Map_Resources_and_Topography.html>`__
------------
--------------
9 Draw Major Rivers
-------------------
.. code:: ipython3 .. code:: ipython3
# Define request for rivers
request = DataAccessLayer.newDataRequest('maps', envelope=envelope) request = DataAccessLayer.newDataRequest('maps', envelope=envelope)
request.addIdentifier('table', 'mapdata.majorrivers') request.addIdentifier('table', 'mapdata.majorrivers')
request.addIdentifier('geomField', 'the_geom') request.addIdentifier('geomField', 'the_geom')
request.setParameters('pname') rivers = DataAccessLayer.getGeometryData(request)
rivers = DataAccessLayer.getGeometryData(request, [])
print("Using " + str(len(rivers)) + " river MultiLineStrings") print("Using " + str(len(rivers)) + " river MultiLineStrings")
# Plot rivers # Plot rivers
for ob in rivers: shape_feature = ShapelyFeature([river.getGeometry() for river in rivers],ccrs.PlateCarree(),
shape_feature = ShapelyFeature(ob.getGeometry(),ccrs.PlateCarree(),
facecolor='none', linestyle=":",edgecolor='#20B2AA') facecolor='none', linestyle=":",edgecolor='#20B2AA')
ax.add_feature(shape_feature) ax.add_feature(shape_feature)
fig fig
@ -326,23 +404,26 @@ Major Rivers
.. image:: Map_Resources_and_Topography_files/Map_Resources_and_Topography_14_1.png .. image:: Map_Resources_and_Topography_files/Map_Resources_and_Topography_28_1.png
Topography `Top <https://unidata.github.io/python-awips/examples/generated/Map_Resources_and_Topography.html>`__
----------
--------------
10 Draw Topography
------------------
Spatial envelopes are required for topo requests, which can become slow Spatial envelopes are required for topo requests, which can become slow
to download and render for large (CONUS) maps. to download and render for large (CONUS) maps.
.. code:: ipython3 .. code:: ipython3
import numpy.ma as ma # Define topography request
request = DataAccessLayer.newDataRequest("topo") request = DataAccessLayer.newDataRequest("topo", envelope=envelope)
request.addIdentifier("group", "/") request.addIdentifier("group", "/")
request.addIdentifier("dataset", "full") request.addIdentifier("dataset", "full")
request.setEnvelope(envelope)
gridData = DataAccessLayer.getGridData(request) gridData = DataAccessLayer.getGridData(request)
print(gridData) print(gridData)
print("Number of grid records: " + str(len(gridData))) print("Number of grid records: " + str(len(gridData)))
@ -352,7 +433,7 @@ to download and render for large (CONUS) maps.
.. parsed-literal:: .. parsed-literal::
[<awips.dataaccess.PyGridData.PyGridData object at 0x7ffd0f33c040>] [<awips.dataaccess.PyGridData.PyGridData object at 0x115a20370>]
Number of grid records: 1 Number of grid records: 1
Sample grid data shape: Sample grid data shape:
(778, 1058) (778, 1058)
@ -392,7 +473,43 @@ to download and render for large (CONUS) maps.
.. image:: Map_Resources_and_Topography_files/Map_Resources_and_Topography_17_1.png .. image:: Map_Resources_and_Topography_files/Map_Resources_and_Topography_32_1.png
`Top <https://unidata.github.io/python-awips/examples/generated/Map_Resources_and_Topography.html>`__
--------------
11 See Also
-----------
11.1 Additional Documentation
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- This notebook requires: **python-awips, numpy, matplotplib, cartopy,
shapely**
- Use datatype **maps** and **addIdentifier(table, <postgres maps
schema>)** to define the map table:
DataAccessLayer.changeEDEXHost(“edex-cloud.unidata.ucar.edu”) request
= DataAccessLayer.newDataRequest(maps)
request.addIdentifier(table, mapdata.county)
- Use **request.setLocationNames()** and **request.addIdentifier()** to
spatially filter a map resource. In the example below, WFO ID **BOU**
(Boulder, Colorado) is used to query counties within the BOU county
watch area (CWA)
::
request.addIdentifier('geomField', 'the_geom')
request.addIdentifier('inLocation', 'true')
request.addIdentifier('locationField', 'cwa')
request.setLocationNames('BOU')
request.addIdentifier('cwa', 'BOU')
See the Maps Database Reference Page for available database tables,
column names, and types.
`Top <https://unidata.github.io/python-awips/examples/generated/Map_Resources_and_Topography.html>`__
--------------

View file

@ -276,7 +276,7 @@ var Search = {
setTimeout(function() { setTimeout(function() {
displayNextItem(); displayNextItem();
}, 5); }, 5);
} else { } else if (DOCUMENTATION_OPTIONS.HAS_SOURCE) {
$.ajax({url: requestUrl, $.ajax({url: requestUrl,
dataType: "text", dataType: "text",
complete: function(jqxhr, textstatus) { complete: function(jqxhr, textstatus) {
@ -289,6 +289,12 @@ var Search = {
displayNextItem(); displayNextItem();
}, 5); }, 5);
}}); }});
} else {
// no source available, just display title
Search.output.append(listItem);
setTimeout(function() {
displayNextItem();
}, 5);
} }
} }
// search finished, update title and status message // search finished, update title and status message

View file

@ -104,15 +104,21 @@
<li class="toctree-l2"><a class="reference internal" href="Grids_and_Cartopy.html">Grids and Cartopy</a></li> <li class="toctree-l2"><a class="reference internal" href="Grids_and_Cartopy.html">Grids and Cartopy</a></li>
<li class="toctree-l2"><a class="reference internal" href="METAR_Station_Plot_with_MetPy.html">METAR Station Plot with MetPy</a></li> <li class="toctree-l2"><a class="reference internal" href="METAR_Station_Plot_with_MetPy.html">METAR Station Plot with MetPy</a></li>
<li class="toctree-l2 current"><a class="current reference internal" href="#">Map Resources and Topography</a><ul> <li class="toctree-l2 current"><a class="current reference internal" href="#">Map Resources and Topography</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#notes">Notes</a></li> <li class="toctree-l3"><a class="reference internal" href="#objectives">Objectives</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#setup">Setup</a></li> <li class="toctree-l4"><a class="reference internal" href="#table-of-contents">Table of Contents</a></li>
<li class="toctree-l3"><a class="reference internal" href="#request-county-boundaries-for-a-wfo">Request County Boundaries for a WFO</a></li> <li class="toctree-l4"><a class="reference internal" href="#imports">1 Imports</a></li>
<li class="toctree-l3"><a class="reference internal" href="#create-a-merged-cwa-with-cascaded-union">Create a merged CWA with cascaded_union</a></li> <li class="toctree-l4"><a class="reference internal" href="#connect-to-edex">2 Connect to EDEX</a></li>
<li class="toctree-l3"><a class="reference internal" href="#wfo-boundary-spatial-filter-for-interstates">WFO boundary spatial filter for interstates</a></li> <li class="toctree-l4"><a class="reference internal" href="#function-make-map">3 Function: make_map()</a></li>
<li class="toctree-l3"><a class="reference internal" href="#nearby-cities">Nearby cities</a></li> <li class="toctree-l4"><a class="reference internal" href="#create-initial-map-from-cwa">4 Create Initial Map From CWA</a></li>
<li class="toctree-l3"><a class="reference internal" href="#lakes">Lakes</a></li> <li class="toctree-l4"><a class="reference internal" href="#draw-merged-cwa">5 Draw Merged CWA</a></li>
<li class="toctree-l3"><a class="reference internal" href="#major-rivers">Major Rivers</a></li> <li class="toctree-l4"><a class="reference internal" href="#draw-interstates-using-boundary-filter">6 Draw Interstates using Boundary Filter</a></li>
<li class="toctree-l3"><a class="reference internal" href="#topography">Topography</a></li> <li class="toctree-l4"><a class="reference internal" href="#draw-nearby-cities">7 Draw Nearby Cities</a></li>
<li class="toctree-l4"><a class="reference internal" href="#draw-nearby-lakes">8 Draw Nearby Lakes</a></li>
<li class="toctree-l4"><a class="reference internal" href="#draw-major-rivers">9 Draw Major Rivers</a></li>
<li class="toctree-l4"><a class="reference internal" href="#draw-topography">10 Draw Topography</a></li>
<li class="toctree-l4"><a class="reference internal" href="#see-also">11 See Also</a></li>
</ul>
</li>
</ul> </ul>
</li> </li>
<li class="toctree-l2"><a class="reference internal" href="Model_Sounding_Data.html">Model Sounding Data</a></li> <li class="toctree-l2"><a class="reference internal" href="Model_Sounding_Data.html">Model Sounding Data</a></li>
@ -199,56 +205,88 @@
<div class="section" id="map-resources-and-topography"> <div class="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 headline"></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>
The python-awips package provides access to the entire AWIPS Maps Python-AWIPS Tutorial Notebook</p>
Database for use in Python GIS applications. Map objects are returned as <hr class="docutils" />
Shapely geometries (<em>Polygon</em>, <em>Point</em>, <em>MultiLineString</em>, etc.) and can <div class="section" id="objectives">
be easily plotted by Matplotlib, Cartopy, MetPy, and other packages.</p> <h2>Objectives<a class="headerlink" href="#objectives" title="Permalink to this headline"></a></h2>
<p>Each map database table has a geometry field called <code class="docutils literal notranslate"><span class="pre">the_geom</span></code>, which <ul class="simple">
can be used to spatially select map resources for any column of type <li><p>Use python-awips to connect to an edex server</p></li>
geometry,</p> <li><p>Define data request object specifically for the maps database</p></li>
<div class="section" id="notes"> <li><p>Manipulate request object for various different map resources</p></li>
<h2>Notes<a class="headerlink" href="#notes" title="Permalink to this headline"></a></h2> <li><p>Plot map resources in combination with one another for geographical
<ul> context</p></li>
<li><p>This notebook requires: <strong>python-awips, numpy, matplotplib, cartopy,
shapely</strong></p></li>
<li><p>Use datatype <strong>maps</strong> and <strong>addIdentifier(table, &lt;postgres maps
schema&gt;)</strong> to define the map table:
DataAccessLayer.changeEDEXHost(“edex-cloud.unidata.ucar.edu”) request
= DataAccessLayer.newDataRequest(maps)
request.addIdentifier(table, mapdata.county)</p></li>
<li><p>Use <strong>request.setLocationNames()</strong> and <strong>request.addIdentifier()</strong> to
spatially filter a map resource. In the example below, WFO ID <strong>BOU</strong>
(Boulder, Colorado) is used to query counties within the BOU county
watch area (CWA)</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">request</span><span class="o">.</span><span class="n">addIdentifier</span><span class="p">(</span><span class="s1">&#39;geomField&#39;</span><span class="p">,</span> <span class="s1">&#39;the_geom&#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;inLocation&#39;</span><span class="p">,</span> <span class="s1">&#39;true&#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;locationField&#39;</span><span class="p">,</span> <span class="s1">&#39;cwa&#39;</span><span class="p">)</span>
<span class="n">request</span><span class="o">.</span><span class="n">setLocationNames</span><span class="p">(</span><span class="s1">&#39;BOU&#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;cwa&#39;</span><span class="p">,</span> <span class="s1">&#39;BOU&#39;</span><span class="p">)</span>
</pre></div>
</div>
</li>
</ul> </ul>
<p>See the Maps Database Reference Page for available database tables, <hr class="docutils" />
column names, and types.</p> <div class="section" id="table-of-contents">
<blockquote> <h3>Table of Contents<a class="headerlink" href="#table-of-contents" title="Permalink to this headline"></a></h3>
<div><p>Note the geometry definition of <code class="docutils literal notranslate"><span class="pre">the_geom</span></code> for each data type, <div class="line-block">
which can be <strong>Point</strong>, <strong>MultiPolygon</strong>, or <strong>MultiLineString</strong>.</p> <div class="line"><a class="reference external" href="https://unidata.github.io/python-awips/examples/generated/Map_Resources_and_Topography.html#imports">1
</div></blockquote> Imports</a></div>
<div class="line"><a class="reference external" href="https://unidata.github.io/python-awips/examples/generated/Map_Resources_and_Topography.html#connect-to-edex">2 Connect to
EDEX</a></div>
<div class="line"><a class="reference external" href="https://unidata.github.io/python-awips/examples/generated/Map_Resources_and_Topography.html#function-make-map">3 Function:
make_map()</a></div>
<div class="line"><a class="reference external" href="https://unidata.github.io/python-awips/examples/generated/Map_Resources_and_Topography.html#create-initial-map-from-cwa">4 Create Initial Map From
CWA</a></div>
<div class="line"><a class="reference external" href="https://unidata.github.io/python-awips/examples/generated/Map_Resources_and_Topography.html#draw-merged-cwa">5 Draw Merged
CWA</a></div>
<div class="line"><a class="reference external" href="https://unidata.github.io/python-awips/examples/generated/Map_Resources_and_Topography.html#draw-interstates-using-boundary-filter">6 Draw Interstates using Boundary
Filter</a></div>
<div class="line"><a class="reference external" href="https://unidata.github.io/python-awips/examples/generated/Map_Resources_and_Topography.html#draw-nearby-cities">7 Draw Nearby
Cities</a></div>
<div class="line"><a class="reference external" href="https://unidata.github.io/python-awips/examples/generated/Map_Resources_and_Topography.html#draw-nearby-lakes">8 Draw Nearby
Lakes</a></div>
<div class="line"><a class="reference external" href="https://unidata.github.io/python-awips/examples/generated/Map_Resources_and_Topography.html#draw-major-rivers">9 Draw Major
Rivers</a></div>
<div class="line"><a class="reference external" href="https://unidata.github.io/python-awips/examples/generated/Map_Resources_and_Topography.html#draw-topography">10 Draw
Topography</a></div>
<div class="line"><a class="reference external" href="https://unidata.github.io/python-awips/examples/generated/Map_Resources_and_Topography.html#see-also">11 See
Also</a></div>
<div class="line">    <a class="reference external" href="https://unidata.github.io/python-awips/examples/generated/Map_Resources_and_Topography.html#additional-documentation">11.1 Additional
Documentation</a></div>
</div> </div>
<div class="section" id="setup"> </div>
<h2>Setup<a class="headerlink" href="#setup" title="Permalink to this headline"></a></h2> <div class="section" id="imports">
<div class="highlight-ipython3 notranslate"><div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">__future__</span> <span class="kn">import</span> <span class="n">print_function</span> <h3>1 Imports<a class="headerlink" href="#imports" title="Permalink to this headline"></a></h3>
<span class="kn">from</span> <span class="nn">awips.dataaccess</span> <span class="kn">import</span> <span class="n">DataAccessLayer</span> <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
an EDEX server. The subsequent imports are for data manipulation and
visualization.</p>
<div class="highlight-ipython3 notranslate"><div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">awips.dataaccess</span> <span class="kn">import</span> <span class="n">DataAccessLayer</span>
<span class="kn">import</span> <span class="nn">matplotlib.pyplot</span> <span class="k">as</span> <span class="nn">plt</span> <span class="kn">import</span> <span class="nn">matplotlib.pyplot</span> <span class="k">as</span> <span class="nn">plt</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">numpy</span> <span class="k">as</span> <span class="nn">np</span> <span class="kn">import</span> <span class="nn">numpy.ma</span> <span class="k">as</span> <span class="nn">ma</span>
<span class="kn">from</span> <span class="nn">cartopy.mpl.gridliner</span> <span class="kn">import</span> <span class="n">LONGITUDE_FORMATTER</span><span class="p">,</span> <span class="n">LATITUDE_FORMATTER</span> <span class="kn">from</span> <span class="nn">cartopy.mpl.gridliner</span> <span class="kn">import</span> <span class="n">LONGITUDE_FORMATTER</span><span class="p">,</span> <span class="n">LATITUDE_FORMATTER</span>
<span class="kn">from</span> <span class="nn">cartopy.feature</span> <span class="kn">import</span> <span class="n">ShapelyFeature</span><span class="p">,</span><span class="n">NaturalEarthFeature</span> <span class="kn">from</span> <span class="nn">cartopy.feature</span> <span class="kn">import</span> <span class="n">ShapelyFeature</span><span class="p">,</span><span class="n">NaturalEarthFeature</span>
<span class="kn">from</span> <span class="nn">shapely.geometry</span> <span class="kn">import</span> <span class="n">Polygon</span>
<span class="kn">from</span> <span class="nn">shapely.ops</span> <span class="kn">import</span> <span class="n">cascaded_union</span> <span class="kn">from</span> <span class="nn">shapely.ops</span> <span class="kn">import</span> <span class="n">cascaded_union</span>
</pre></div>
<span class="c1"># Standard map plot</span> </div>
<p><a class="reference external" href="https://unidata.github.io/python-awips/examples/generated/Map_Resources_and_Topography.html">Top</a></p>
</div>
<hr class="docutils" />
<div class="section" id="connect-to-edex">
<h3>2 Connect to EDEX<a class="headerlink" href="#connect-to-edex" title="Permalink to this headline"></a></h3>
<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
object</a>
and set the data type to <strong>maps</strong>.</p>
<div class="highlight-ipython3 notranslate"><div class="highlight"><pre><span></span><span class="c1"># Server, Data Request Type, and Database Table</span>
<span class="n">DataAccessLayer</span><span class="o">.</span><span class="n">changeEDEXHost</span><span class="p">(</span><span class="s2">&quot;edex-cloud.unidata.ucar.edu&quot;</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>
</pre></div>
</div>
<p><a class="reference external" href="https://unidata.github.io/python-awips/examples/generated/Map_Resources_and_Topography.html">Top</a></p>
</div>
<hr class="docutils" />
<div class="section" id="function-make-map">
<h3>3 Function: make_map()<a class="headerlink" href="#function-make-map" title="Permalink to this headline"></a></h3>
<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
defined when they are called multiple times throughout a notebook. In
this case, we only use it in one code block cell, but because it is a
common function from several of our notebooks, its nice to keep the
logic neatly defined for consistency.</p>
<div class="highlight-ipython3 notranslate"><div class="highlight"><pre><span></span><span class="c1"># Standard map plot</span>
<span class="k">def</span> <span class="nf">make_map</span><span class="p">(</span><span class="n">bbox</span><span class="p">,</span> <span class="n">projection</span><span class="o">=</span><span class="n">ccrs</span><span class="o">.</span><span class="n">PlateCarree</span><span class="p">()):</span> <span class="k">def</span> <span class="nf">make_map</span><span class="p">(</span><span class="n">bbox</span><span class="p">,</span> <span class="n">projection</span><span class="o">=</span><span class="n">ccrs</span><span class="o">.</span><span class="n">PlateCarree</span><span class="p">()):</span>
<span class="n">fig</span><span class="p">,</span> <span class="n">ax</span> <span class="o">=</span> <span class="n">plt</span><span class="o">.</span><span class="n">subplots</span><span class="p">(</span><span class="n">figsize</span><span class="o">=</span><span class="p">(</span><span class="mi">12</span><span class="p">,</span><span class="mi">12</span><span class="p">),</span> <span class="n">fig</span><span class="p">,</span> <span class="n">ax</span> <span class="o">=</span> <span class="n">plt</span><span class="o">.</span><span class="n">subplots</span><span class="p">(</span><span class="n">figsize</span><span class="o">=</span><span class="p">(</span><span class="mi">12</span><span class="p">,</span><span class="mi">12</span><span class="p">),</span>
<span class="n">subplot_kw</span><span class="o">=</span><span class="nb">dict</span><span class="p">(</span><span class="n">projection</span><span class="o">=</span><span class="n">projection</span><span class="p">))</span> <span class="n">subplot_kw</span><span class="o">=</span><span class="nb">dict</span><span class="p">(</span><span class="n">projection</span><span class="o">=</span><span class="n">projection</span><span class="p">))</span>
@ -259,42 +297,54 @@ which can be <strong>Point</strong>, <strong>MultiPolygon</strong>, or <strong>M
<span class="n">gl</span><span class="o">.</span><span class="n">xformatter</span> <span class="o">=</span> <span class="n">LONGITUDE_FORMATTER</span> <span class="n">gl</span><span class="o">.</span><span class="n">xformatter</span> <span class="o">=</span> <span class="n">LONGITUDE_FORMATTER</span>
<span class="n">gl</span><span class="o">.</span><span class="n">yformatter</span> <span class="o">=</span> <span class="n">LATITUDE_FORMATTER</span> <span class="n">gl</span><span class="o">.</span><span class="n">yformatter</span> <span class="o">=</span> <span class="n">LATITUDE_FORMATTER</span>
<span class="k">return</span> <span class="n">fig</span><span class="p">,</span> <span class="n">ax</span> <span class="k">return</span> <span class="n">fig</span><span class="p">,</span> <span class="n">ax</span>
</pre></div>
<span class="c1"># Server, Data Request Type, and Database Table</span> </div>
<span class="n">DataAccessLayer</span><span class="o">.</span><span class="n">changeEDEXHost</span><span class="p">(</span><span class="s2">&quot;edex-cloud.unidata.ucar.edu&quot;</span><span class="p">)</span> <p><a class="reference external" href="https://unidata.github.io/python-awips/examples/generated/Map_Resources_and_Topography.html">Top</a></p>
<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> </div>
<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.county&#39;</span><span class="p">)</span> <hr class="docutils" />
<div class="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>
<p>The python-awips package provides access to the entire AWIPS Maps
Database for use in Python GIS applications. Map objects are returned as
Shapely geometries and can be easily plotted by many Python packages.</p>
<ul class="simple">
<li><p>Each map database table has a geometry field called <code class="docutils literal notranslate"><span class="pre">the_geom</span></code>,
which can be used to spatially select map resources for any column of
type geometry.</p></li>
</ul>
<div class="alert-info docutils container">
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="o">&lt;</span><span class="n">b</span><span class="o">&gt;</span><span class="n">Tip</span><span class="p">:</span><span class="o">&lt;/</span><span class="n">b</span><span class="o">&gt;</span> <span class="n">Note</span> <span class="n">the</span> <span class="n">geometry</span> <span class="n">definition</span> <span class="n">of</span> <span class="o">&lt;</span><span class="n">code</span><span class="o">&gt;</span><span class="n">the_geom</span><span class="o">&lt;/</span><span class="n">code</span><span class="o">&gt;</span> <span class="k">for</span> <span class="n">each</span> <span class="n">data</span> <span class="nb">type</span><span class="p">,</span> <span class="n">which</span> <span class="n">can</span> <span class="n">be</span> <span class="o">&lt;</span><span class="n">b</span><span class="o">&gt;</span><span class="n">Point</span><span class="o">&lt;/</span><span class="n">b</span><span class="o">&gt;</span><span class="p">,</span> <span class="o">&lt;</span><span class="n">b</span><span class="o">&gt;</span><span class="n">MultiPolygon</span><span class="o">&lt;/</span><span class="n">b</span><span class="o">&gt;</span><span class="p">,</span> <span class="ow">or</span> <span class="o">&lt;</span><span class="n">b</span><span class="o">&gt;</span><span class="n">MultiLineString</span><span class="o">&lt;/</span><span class="n">b</span><span class="o">&gt;.</span>
</pre></div> </pre></div>
</div> </div>
</div> </div>
<div class="section" id="request-county-boundaries-for-a-wfo"> <p>Here well be using Boulder (BOU) as our example for plotting the County
<h2>Request County Boundaries for a WFO<a class="headerlink" href="#request-county-boundaries-for-a-wfo" title="Permalink to this headline"></a></h2> Warning Area (CWA). Well query our EDEX server to get all counties in
<ul class="simple"> the CWA for BOU, and then plot those counties along withe the state
<li><p>Use <strong>request.setParameters()</strong> to define fields to be returned by boundaries and lines of longitude and latitude. In order to get this
the request.</p></li> information from EDEX, well need to set several characteristics on our
</ul> data request object. We will use
<div class="highlight-ipython3 notranslate"><div class="highlight"><pre><span></span><span class="c1"># Define a WFO ID for location</span> <a class="reference external" href="http://unidata.github.io/python-awips/api/IDataRequest.html#awips.dataaccess.IDataRequest.setParameters">request.setParameters()</a>
to refine our query to EDEX.</p>
<div class="highlight-ipython3 notranslate"><div class="highlight"><pre><span></span><span class="c1"># Specify the necessary identifiers for requesting the Boulder CWA</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.county&#39;</span><span class="p">)</span>
<span class="c1"># Define a WFO ID for location</span>
<span class="c1"># tie this ID to the mapdata.county column &quot;cwa&quot; for filtering</span> <span class="c1"># tie this ID to the mapdata.county column &quot;cwa&quot; for filtering</span>
<span class="n">request</span><span class="o">.</span><span class="n">setLocationNames</span><span class="p">(</span><span class="s1">&#39;BOU&#39;</span><span class="p">)</span> <span class="n">request</span><span class="o">.</span><span class="n">setLocationNames</span><span class="p">(</span><span class="s1">&#39;BOU&#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;cwa&#39;</span><span class="p">,</span> <span class="s1">&#39;BOU&#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;cwa&#39;</span><span class="p">,</span> <span class="s1">&#39;BOU&#39;</span><span class="p">)</span>
<span class="c1"># enable location filtering (inLocation)</span> <span class="c1"># enable location filtering (inLocation)</span>
<span class="c1"># locationField is tied to the above cwa definition (BOU)</span> <span class="c1"># locationField is tied to the above cwa definition (BOU)</span>
<span class="n">request</span><span class="o">.</span><span class="n">addIdentifier</span><span class="p">(</span><span class="s1">&#39;geomField&#39;</span><span class="p">,</span> <span class="s1">&#39;the_geom&#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;geomField&#39;</span><span class="p">,</span> <span class="s1">&#39;the_geom&#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;inLocation&#39;</span><span class="p">,</span> <span class="s1">&#39;true&#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;inLocation&#39;</span><span class="p">,</span> <span class="s1">&#39;true&#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;locationField&#39;</span><span class="p">,</span> <span class="s1">&#39;cwa&#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;locationField&#39;</span><span class="p">,</span> <span class="s1">&#39;cwa&#39;</span><span class="p">)</span>
<span class="c1"># This is essentially the same as &quot;&#39;&quot;select count(*) from mapdata.cwa where cwa=&#39;BOU&#39;;&quot; (=1)</span>
<span class="c1"># Get response and create dict of county geometries</span> <span class="c1"># Get response and create dict of county geometries</span>
<span class="n">response</span> <span class="o">=</span> <span class="n">DataAccessLayer</span><span class="o">.</span><span class="n">getGeometryData</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="p">[])</span> <span class="n">response</span> <span class="o">=</span> <span class="n">DataAccessLayer</span><span class="o">.</span><span class="n">getGeometryData</span><span class="p">(</span><span class="n">request</span><span class="p">)</span>
<span class="n">counties</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">counties</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">for</span> <span class="n">ob</span> <span class="ow">in</span> <span class="n">response</span><span class="p">:</span> <span class="k">for</span> <span class="n">ob</span> <span class="ow">in</span> <span class="n">response</span><span class="p">:</span>
<span class="n">counties</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">counties</span><span class="p">,</span><span class="n">ob</span><span class="o">.</span><span class="n">getGeometry</span><span class="p">())</span> <span class="n">counties</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">ob</span><span class="o">.</span><span class="n">getGeometry</span><span class="p">())</span>
<span class="nb">print</span><span class="p">(</span><span class="s2">&quot;Using &quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">counties</span><span class="p">))</span> <span class="o">+</span> <span class="s2">&quot; county MultiPolygons&quot;</span><span class="p">)</span> <span class="nb">print</span><span class="p">(</span><span class="s2">&quot;Using &quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">counties</span><span class="p">))</span> <span class="o">+</span> <span class="s2">&quot; county MultiPolygons&quot;</span><span class="p">)</span>
<span class="o">%</span><span class="k">matplotlib</span> inline
<span class="c1"># All WFO counties merged to a single Polygon</span> <span class="c1"># All WFO counties merged to a single Polygon</span>
<span class="n">merged_counties</span> <span class="o">=</span> <span class="n">cascaded_union</span><span class="p">(</span><span class="n">counties</span><span class="p">)</span> <span class="n">merged_counties</span> <span class="o">=</span> <span class="n">cascaded_union</span><span class="p">(</span><span class="n">counties</span><span class="p">)</span>
<span class="n">envelope</span> <span class="o">=</span> <span class="n">merged_counties</span><span class="o">.</span><span class="n">buffer</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span> <span class="n">envelope</span> <span class="o">=</span> <span class="n">merged_counties</span><span class="o">.</span><span class="n">buffer</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span>
@ -304,8 +354,10 @@ the request.</p></li>
<span class="n">bounds</span> <span class="o">=</span> <span class="n">merged_counties</span><span class="o">.</span><span class="n">bounds</span> <span class="n">bounds</span> <span class="o">=</span> <span class="n">merged_counties</span><span class="o">.</span><span class="n">bounds</span>
<span class="n">bbox</span><span class="o">=</span><span class="p">[</span><span class="n">bounds</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span><span class="n">bounds</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="o">+</span><span class="mi">1</span><span class="p">,</span><span class="n">bounds</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">-</span><span class="mf">1.5</span><span class="p">,</span><span class="n">bounds</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span><span class="o">+</span><span class="mf">1.5</span><span class="p">]</span> <span class="n">bbox</span><span class="o">=</span><span class="p">[</span><span class="n">bounds</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span><span class="n">bounds</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="o">+</span><span class="mi">1</span><span class="p">,</span><span class="n">bounds</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">-</span><span class="mf">1.5</span><span class="p">,</span><span class="n">bounds</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span><span class="o">+</span><span class="mf">1.5</span><span class="p">]</span>
<span class="c1"># Create the map we&#39;ll use for the rest of this notebook based on the</span>
<span class="c1"># boundaries of the CWA</span>
<span class="n">fig</span><span class="p">,</span> <span class="n">ax</span> <span class="o">=</span> <span class="n">make_map</span><span class="p">(</span><span class="n">bbox</span><span class="o">=</span><span class="n">bbox</span><span class="p">)</span> <span class="n">fig</span><span class="p">,</span> <span class="n">ax</span> <span class="o">=</span> <span class="n">make_map</span><span class="p">(</span><span class="n">bbox</span><span class="o">=</span><span class="n">bbox</span><span class="p">)</span>
<span class="c1"># Plot political/state boundaries handled by Cartopy</span> <span class="c1"># Plot political/state boundaries handled by Cartopy</span>
<span class="n">political_boundaries</span> <span class="o">=</span> <span class="n">NaturalEarthFeature</span><span class="p">(</span><span class="n">category</span><span class="o">=</span><span class="s1">&#39;cultural&#39;</span><span class="p">,</span> <span class="n">political_boundaries</span> <span class="o">=</span> <span class="n">NaturalEarthFeature</span><span class="p">(</span><span class="n">category</span><span class="o">=</span><span class="s1">&#39;cultural&#39;</span><span class="p">,</span>
<span class="n">name</span><span class="o">=</span><span class="s1">&#39;admin_0_boundary_lines_land&#39;</span><span class="p">,</span> <span class="n">name</span><span class="o">=</span><span class="s1">&#39;admin_0_boundary_lines_land&#39;</span><span class="p">,</span>
@ -317,50 +369,48 @@ the request.</p></li>
<span class="n">ax</span><span class="o">.</span><span class="n">add_feature</span><span class="p">(</span><span class="n">states</span><span class="p">,</span> <span class="n">linestyle</span><span class="o">=</span><span class="s1">&#39;-&#39;</span><span class="p">,</span> <span class="n">edgecolor</span><span class="o">=</span><span class="s1">&#39;black&#39;</span><span class="p">,</span><span class="n">linewidth</span><span class="o">=</span><span class="mi">2</span><span class="p">)</span> <span class="n">ax</span><span class="o">.</span><span class="n">add_feature</span><span class="p">(</span><span class="n">states</span><span class="p">,</span> <span class="n">linestyle</span><span class="o">=</span><span class="s1">&#39;-&#39;</span><span class="p">,</span> <span class="n">edgecolor</span><span class="o">=</span><span class="s1">&#39;black&#39;</span><span class="p">,</span><span class="n">linewidth</span><span class="o">=</span><span class="mi">2</span><span class="p">)</span>
<span class="c1"># Plot CWA counties</span> <span class="c1"># Plot CWA counties</span>
<span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">geom</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">counties</span><span class="p">):</span> <span class="n">shape_feature</span> <span class="o">=</span> <span class="n">ShapelyFeature</span><span class="p">(</span><span class="n">counties</span><span class="p">,</span><span class="n">ccrs</span><span class="o">.</span><span class="n">PlateCarree</span><span class="p">(),</span>
<span class="n">cbounds</span> <span class="o">=</span> <span class="n">Polygon</span><span class="p">(</span><span class="n">geom</span><span class="p">)</span>
<span class="n">intersection</span> <span class="o">=</span> <span class="n">cbounds</span><span class="o">.</span><span class="n">intersection</span>
<span class="n">geoms</span> <span class="o">=</span> <span class="p">(</span><span class="n">intersection</span><span class="p">(</span><span class="n">geom</span><span class="p">)</span>
<span class="k">for</span> <span class="n">geom</span> <span class="ow">in</span> <span class="n">counties</span>
<span class="k">if</span> <span class="n">cbounds</span><span class="o">.</span><span class="n">intersects</span><span class="p">(</span><span class="n">geom</span><span class="p">))</span>
<span class="n">shape_feature</span> <span class="o">=</span> <span class="n">ShapelyFeature</span><span class="p">(</span><span class="n">geoms</span><span class="p">,</span><span class="n">ccrs</span><span class="o">.</span><span class="n">PlateCarree</span><span class="p">(),</span>
<span class="n">facecolor</span><span class="o">=</span><span class="s1">&#39;none&#39;</span><span class="p">,</span> <span class="n">linestyle</span><span class="o">=</span><span class="s2">&quot;-&quot;</span><span class="p">,</span><span class="n">edgecolor</span><span class="o">=</span><span class="s1">&#39;#86989B&#39;</span><span class="p">)</span> <span class="n">facecolor</span><span class="o">=</span><span class="s1">&#39;none&#39;</span><span class="p">,</span> <span class="n">linestyle</span><span class="o">=</span><span class="s2">&quot;-&quot;</span><span class="p">,</span><span class="n">edgecolor</span><span class="o">=</span><span class="s1">&#39;#86989B&#39;</span><span class="p">)</span>
<span class="n">ax</span><span class="o">.</span><span class="n">add_feature</span><span class="p">(</span><span class="n">shape_feature</span><span class="p">)</span> <span class="n">ax</span><span class="o">.</span><span class="n">add_feature</span><span class="p">(</span><span class="n">shape_feature</span><span class="p">)</span>
</pre></div> </pre></div>
</div> </div>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">Using</span> <span class="mi">23</span> <span class="n">county</span> <span class="n">MultiPolygons</span> <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">Using</span> <span class="mi">22</span> <span class="n">county</span> <span class="n">MultiPolygons</span>
</pre></div> </pre></div>
</div> </div>
<img alt="../../_images/Map_Resources_and_Topography_4_1.png" src="../../_images/Map_Resources_and_Topography_4_1.png" /> <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="o">&lt;</span><span class="n">cartopy</span><span class="o">.</span><span class="n">mpl</span><span class="o">.</span><span class="n">feature_artist</span><span class="o">.</span><span class="n">FeatureArtist</span> <span class="n">at</span> <span class="mh">0x11568f6d0</span><span class="o">&gt;</span>
</pre></div>
</div> </div>
<div class="section" id="create-a-merged-cwa-with-cascaded-union"> <img alt="../../_images/Map_Resources_and_Topography_13_2.png" src="../../_images/Map_Resources_and_Topography_13_2.png" />
<h2>Create a merged CWA with cascaded_union<a class="headerlink" href="#create-a-merged-cwa-with-cascaded-union" title="Permalink to this headline"></a></h2> <p><a class="reference external" href="https://unidata.github.io/python-awips/examples/generated/Map_Resources_and_Topography.html">Top</a></p>
</div>
<hr class="docutils" />
<div class="section" id="draw-merged-cwa">
<h3>5 Draw Merged CWA<a class="headerlink" href="#draw-merged-cwa" title="Permalink to this headline"></a></h3>
<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
burnt orange color.</p>
<div class="highlight-ipython3 notranslate"><div class="highlight"><pre><span></span><span class="c1"># Plot CWA envelope</span> <div class="highlight-ipython3 notranslate"><div class="highlight"><pre><span></span><span class="c1"># Plot CWA envelope</span>
<span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">geom</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">boundaries</span><span class="p">):</span> <span class="n">shape_feature</span> <span class="o">=</span> <span class="n">ShapelyFeature</span><span class="p">(</span><span class="n">boundaries</span><span class="p">,</span><span class="n">ccrs</span><span class="o">.</span><span class="n">PlateCarree</span><span class="p">(),</span>
<span class="n">gbounds</span> <span class="o">=</span> <span class="n">Polygon</span><span class="p">(</span><span class="n">geom</span><span class="p">)</span>
<span class="n">intersection</span> <span class="o">=</span> <span class="n">gbounds</span><span class="o">.</span><span class="n">intersection</span>
<span class="n">geoms</span> <span class="o">=</span> <span class="p">(</span><span class="n">intersection</span><span class="p">(</span><span class="n">geom</span><span class="p">)</span>
<span class="k">for</span> <span class="n">geom</span> <span class="ow">in</span> <span class="n">boundaries</span>
<span class="k">if</span> <span class="n">gbounds</span><span class="o">.</span><span class="n">intersects</span><span class="p">(</span><span class="n">geom</span><span class="p">))</span>
<span class="n">shape_feature</span> <span class="o">=</span> <span class="n">ShapelyFeature</span><span class="p">(</span><span class="n">geoms</span><span class="p">,</span><span class="n">ccrs</span><span class="o">.</span><span class="n">PlateCarree</span><span class="p">(),</span>
<span class="n">facecolor</span><span class="o">=</span><span class="s1">&#39;none&#39;</span><span class="p">,</span> <span class="n">linestyle</span><span class="o">=</span><span class="s2">&quot;-&quot;</span><span class="p">,</span><span class="n">linewidth</span><span class="o">=</span><span class="mf">3.</span><span class="p">,</span><span class="n">edgecolor</span><span class="o">=</span><span class="s1">&#39;#cc5000&#39;</span><span class="p">)</span> <span class="n">facecolor</span><span class="o">=</span><span class="s1">&#39;none&#39;</span><span class="p">,</span> <span class="n">linestyle</span><span class="o">=</span><span class="s2">&quot;-&quot;</span><span class="p">,</span><span class="n">linewidth</span><span class="o">=</span><span class="mf">3.</span><span class="p">,</span><span class="n">edgecolor</span><span class="o">=</span><span class="s1">&#39;#cc5000&#39;</span><span class="p">)</span>
<span class="n">ax</span><span class="o">.</span><span class="n">add_feature</span><span class="p">(</span><span class="n">shape_feature</span><span class="p">)</span> <span class="n">ax</span><span class="o">.</span><span class="n">add_feature</span><span class="p">(</span><span class="n">shape_feature</span><span class="p">)</span>
<span class="n">fig</span> <span class="n">fig</span>
</pre></div> </pre></div>
</div> </div>
<img alt="../../_images/Map_Resources_and_Topography_6_0.png" src="../../_images/Map_Resources_and_Topography_6_0.png" /> <img alt="../../_images/Map_Resources_and_Topography_16_0.png" src="../../_images/Map_Resources_and_Topography_16_0.png" />
<p><a class="reference external" href="https://unidata.github.io/python-awips/examples/generated/Map_Resources_and_Topography.html">Top</a></p>
</div> </div>
<div class="section" id="wfo-boundary-spatial-filter-for-interstates"> <hr class="docutils" />
<h2>WFO boundary spatial filter for interstates<a class="headerlink" href="#wfo-boundary-spatial-filter-for-interstates" title="Permalink to this headline"></a></h2> <div class="section" id="draw-interstates-using-boundary-filter">
<p>Using the previously-defined <strong>envelope=merged_counties.buffer(2)</strong> in <h3>6 Draw Interstates using Boundary Filter<a class="headerlink" href="#draw-interstates-using-boundary-filter" title="Permalink to this headline"></a></h3>
<strong>newDataRequest()</strong> to request geometries which fall inside the <p>Now, well use the previously-defined
buffered boundary.</p> <strong>envelope=merged_counties.buffer(2)</strong> in a <strong>newDataRequest()</strong> to
<div class="highlight-ipython3 notranslate"><div class="highlight"><pre><span></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> request interstate geometries which fall inside the buffered boundary.</p>
<div class="highlight-ipython3 notranslate"><div class="highlight"><pre><span></span><span class="c1"># Define the request for the interstate query</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.interstate&#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.interstate&#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;geomField&#39;</span><span class="p">,</span> <span class="s1">&#39;the_geom&#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;geomField&#39;</span><span class="p">,</span> <span class="s1">&#39;the_geom&#39;</span><span class="p">)</span>
<span class="n">request</span><span class="o">.</span><span class="n">setParameters</span><span class="p">(</span><span class="s1">&#39;name&#39;</span><span class="p">)</span> <span class="n">interstates</span> <span class="o">=</span> <span class="n">DataAccessLayer</span><span class="o">.</span><span class="n">getGeometryData</span><span class="p">(</span><span class="n">request</span><span class="p">)</span>
<span class="n">interstates</span> <span class="o">=</span> <span class="n">DataAccessLayer</span><span class="o">.</span><span class="n">getGeometryData</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="p">[])</span>
<span class="nb">print</span><span class="p">(</span><span class="s2">&quot;Using &quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">interstates</span><span class="p">))</span> <span class="o">+</span> <span class="s2">&quot; interstate MultiLineStrings&quot;</span><span class="p">)</span> <span class="nb">print</span><span class="p">(</span><span class="s2">&quot;Using &quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">interstates</span><span class="p">))</span> <span class="o">+</span> <span class="s2">&quot; interstate MultiLineStrings&quot;</span><span class="p">)</span>
<span class="c1"># Plot interstates</span> <span class="c1"># Plot interstates</span>
@ -374,28 +424,34 @@ buffered boundary.</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">Using</span> <span class="mi">225</span> <span class="n">interstate</span> <span class="n">MultiLineStrings</span> <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">Using</span> <span class="mi">225</span> <span class="n">interstate</span> <span class="n">MultiLineStrings</span>
</pre></div> </pre></div>
</div> </div>
<img alt="../../_images/Map_Resources_and_Topography_8_1.png" src="../../_images/Map_Resources_and_Topography_8_1.png" /> <img alt="../../_images/Map_Resources_and_Topography_19_1.png" src="../../_images/Map_Resources_and_Topography_19_1.png" />
<p><a class="reference external" href="https://unidata.github.io/python-awips/examples/generated/Map_Resources_and_Topography.html">Top</a></p>
</div> </div>
<div class="section" id="nearby-cities"> <hr class="docutils" />
<h2>Nearby cities<a class="headerlink" href="#nearby-cities" title="Permalink to this headline"></a></h2> <div class="section" id="draw-nearby-cities">
<p>Request the city table and filter by population and progressive <h3>7 Draw Nearby Cities<a class="headerlink" href="#draw-nearby-cities" title="Permalink to this headline"></a></h3>
disclosure level:</p> <p>Request the city table based using the <strong>envelope</strong> attribute and filter
<p><strong>Warning</strong>: the <code class="docutils literal notranslate"><span class="pre">prog_disc</span></code> field is not entirely understood and by population and progressive disclosure level.</p>
values appear to change significantly depending on WFO site.</p> <div class="alert-warning docutils container">
<div class="highlight-ipython3 notranslate"><div class="highlight"><pre><span></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> <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="o">&lt;</span><span class="n">b</span><span class="o">&gt;</span><span class="ne">Warning</span><span class="p">:</span><span class="o">&lt;/</span><span class="n">b</span><span class="o">&gt;</span> <span class="n">the</span> <span class="o">&lt;</span><span class="n">code</span><span class="o">&gt;</span><span class="n">prog_disc</span><span class="o">&lt;/</span><span class="n">code</span><span class="o">&gt;</span> <span class="n">field</span> <span class="ow">is</span> <span class="ow">not</span> <span class="n">entirely</span> <span class="n">understood</span> <span class="ow">and</span> <span class="n">values</span> <span class="n">appear</span> <span class="n">to</span> <span class="n">change</span> <span class="n">significantly</span> <span class="n">depending</span> <span class="n">on</span> <span class="n">WFO</span> <span class="n">site</span><span class="o">.</span>
</pre></div>
</div>
</div>
<div class="highlight-ipython3 notranslate"><div class="highlight"><pre><span></span><span class="c1"># Define the request for the city query</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.city&#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.city&#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;geomField&#39;</span><span class="p">,</span> <span class="s1">&#39;the_geom&#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;geomField&#39;</span><span class="p">,</span> <span class="s1">&#39;the_geom&#39;</span><span class="p">)</span>
<span class="n">request</span><span class="o">.</span><span class="n">setParameters</span><span class="p">(</span><span class="s1">&#39;name&#39;</span><span class="p">,</span><span class="s1">&#39;population&#39;</span><span class="p">,</span><span class="s1">&#39;prog_disc&#39;</span><span class="p">)</span> <span class="n">request</span><span class="o">.</span><span class="n">setParameters</span><span class="p">(</span><span class="s1">&#39;name&#39;</span><span class="p">,</span><span class="s1">&#39;population&#39;</span><span class="p">,</span><span class="s1">&#39;prog_disc&#39;</span><span class="p">)</span>
<span class="n">cities</span> <span class="o">=</span> <span class="n">DataAccessLayer</span><span class="o">.</span><span class="n">getGeometryData</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="p">[])</span> <span class="n">cities</span> <span class="o">=</span> <span class="n">DataAccessLayer</span><span class="o">.</span><span class="n">getGeometryData</span><span class="p">(</span><span class="n">request</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span><span class="s2">&quot;Queried &quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">cities</span><span class="p">))</span> <span class="o">+</span> <span class="s2">&quot; total cities&quot;</span><span class="p">)</span> <span class="nb">print</span><span class="p">(</span><span class="s2">&quot;Queried &quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">cities</span><span class="p">))</span> <span class="o">+</span> <span class="s2">&quot; total cities&quot;</span><span class="p">)</span>
<span class="c1"># Set aside two arrays - one for the geometry of the cities and one for their names</span>
<span class="n">citylist</span> <span class="o">=</span> <span class="p">[]</span> <span class="n">citylist</span> <span class="o">=</span> <span class="p">[]</span>
<span class="n">cityname</span> <span class="o">=</span> <span class="p">[]</span> <span class="n">cityname</span> <span class="o">=</span> <span class="p">[]</span>
<span class="c1"># For BOU, progressive disclosure values above 50 and pop above 5000 looks good</span> <span class="c1"># For BOU, progressive disclosure values above 50 and pop above 5000 looks good</span>
<span class="k">for</span> <span class="n">ob</span> <span class="ow">in</span> <span class="n">cities</span><span class="p">:</span> <span class="k">for</span> <span class="n">ob</span> <span class="ow">in</span> <span class="n">cities</span><span class="p">:</span>
<span class="k">if</span> <span class="n">ob</span><span class="o">.</span><span class="n">getString</span><span class="p">(</span><span class="s2">&quot;population&quot;</span><span class="p">):</span> <span class="k">if</span> <span class="n">ob</span><span class="o">.</span><span class="n">getString</span><span class="p">(</span><span class="s2">&quot;population&quot;</span><span class="p">)</span> <span class="o">!=</span> <span class="s1">&#39;None&#39;</span><span class="p">:</span>
<span class="k">if</span> <span class="n">ob</span><span class="o">.</span><span class="n">getNumber</span><span class="p">(</span><span class="s2">&quot;prog_disc&quot;</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">50</span><span class="p">:</span> <span class="k">if</span> <span class="n">ob</span><span class="o">.</span><span class="n">getNumber</span><span class="p">(</span><span class="s2">&quot;prog_disc&quot;</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">50</span> <span class="ow">and</span> <span class="nb">int</span><span class="p">(</span><span class="n">ob</span><span class="o">.</span><span class="n">getString</span><span class="p">(</span><span class="s2">&quot;population&quot;</span><span class="p">))</span> <span class="o">&gt;</span> <span class="mi">5000</span><span class="p">:</span>
<span class="k">if</span> <span class="nb">int</span><span class="p">(</span><span class="n">ob</span><span class="o">.</span><span class="n">getString</span><span class="p">(</span><span class="s2">&quot;population&quot;</span><span class="p">))</span> <span class="o">&gt;</span> <span class="mi">5000</span><span class="p">:</span>
<span class="n">citylist</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">ob</span><span class="o">.</span><span class="n">getGeometry</span><span class="p">())</span> <span class="n">citylist</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">ob</span><span class="o">.</span><span class="n">getGeometry</span><span class="p">())</span>
<span class="n">cityname</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">ob</span><span class="o">.</span><span class="n">getString</span><span class="p">(</span><span class="s2">&quot;name&quot;</span><span class="p">))</span> <span class="n">cityname</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">ob</span><span class="o">.</span><span class="n">getString</span><span class="p">(</span><span class="s2">&quot;name&quot;</span><span class="p">))</span>
<span class="nb">print</span><span class="p">(</span><span class="s2">&quot;Plotting &quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">cityname</span><span class="p">))</span> <span class="o">+</span> <span class="s2">&quot; cities&quot;</span><span class="p">)</span> <span class="nb">print</span><span class="p">(</span><span class="s2">&quot;Plotting &quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">cityname</span><span class="p">))</span> <span class="o">+</span> <span class="s2">&quot; cities&quot;</span><span class="p">)</span>
@ -412,34 +468,29 @@ values appear to change significantly depending on WFO site.</p>
<span class="n">fig</span> <span class="n">fig</span>
</pre></div> </pre></div>
</div> </div>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">Queried</span> <span class="mi">1203</span> <span class="n">total</span> <span class="n">cities</span> <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">Queried</span> <span class="mi">1205</span> <span class="n">total</span> <span class="n">cities</span>
<span class="n">Plotting</span> <span class="mi">57</span> <span class="n">cities</span> <span class="n">Plotting</span> <span class="mi">58</span> <span class="n">cities</span>
</pre></div> </pre></div>
</div> </div>
<img alt="../../_images/Map_Resources_and_Topography_10_1.png" src="../../_images/Map_Resources_and_Topography_10_1.png" /> <img alt="../../_images/Map_Resources_and_Topography_22_1.png" src="../../_images/Map_Resources_and_Topography_22_1.png" />
<p><a class="reference external" href="https://unidata.github.io/python-awips/examples/generated/Map_Resources_and_Topography.html">Top</a></p>
</div> </div>
<div class="section" id="lakes"> <hr class="docutils" />
<h2>Lakes<a class="headerlink" href="#lakes" title="Permalink to this headline"></a></h2> <div class="section" id="draw-nearby-lakes">
<div class="highlight-ipython3 notranslate"><div class="highlight"><pre><span></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> <h3>8 Draw Nearby Lakes<a class="headerlink" href="#draw-nearby-lakes" title="Permalink to this headline"></a></h3>
<p>Again, use the <strong>envelope</strong> attribute to define a new data requst for
the nearby lakes.</p>
<div class="highlight-ipython3 notranslate"><div class="highlight"><pre><span></span><span class="c1"># Define request for lakes</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.lake&#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.lake&#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;geomField&#39;</span><span class="p">,</span> <span class="s1">&#39;the_geom&#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;geomField&#39;</span><span class="p">,</span> <span class="s1">&#39;the_geom&#39;</span><span class="p">)</span>
<span class="n">request</span><span class="o">.</span><span class="n">setParameters</span><span class="p">(</span><span class="s1">&#39;name&#39;</span><span class="p">)</span>
<span class="c1"># Get lake geometries</span> <span class="c1"># Get lake geometries</span>
<span class="n">response</span> <span class="o">=</span> <span class="n">DataAccessLayer</span><span class="o">.</span><span class="n">getGeometryData</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="p">[])</span> <span class="n">response</span> <span class="o">=</span> <span class="n">DataAccessLayer</span><span class="o">.</span><span class="n">getGeometryData</span><span class="p">(</span><span class="n">request</span><span class="p">)</span>
<span class="n">lakes</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="nb">print</span><span class="p">(</span><span class="s2">&quot;Using &quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">response</span><span class="p">))</span> <span class="o">+</span> <span class="s2">&quot; lake MultiPolygons&quot;</span><span class="p">)</span>
<span class="k">for</span> <span class="n">ob</span> <span class="ow">in</span> <span class="n">response</span><span class="p">:</span>
<span class="n">lakes</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">lakes</span><span class="p">,</span><span class="n">ob</span><span class="o">.</span><span class="n">getGeometry</span><span class="p">())</span>
<span class="nb">print</span><span class="p">(</span><span class="s2">&quot;Using &quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">lakes</span><span class="p">))</span> <span class="o">+</span> <span class="s2">&quot; lake MultiPolygons&quot;</span><span class="p">)</span>
<span class="c1"># Plot lakes</span> <span class="c1"># Plot lakes</span>
<span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">geom</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">lakes</span><span class="p">):</span> <span class="n">shape_feature</span> <span class="o">=</span> <span class="n">ShapelyFeature</span><span class="p">([</span><span class="n">lake</span><span class="o">.</span><span class="n">getGeometry</span><span class="p">()</span> <span class="k">for</span> <span class="n">lake</span> <span class="ow">in</span> <span class="n">response</span><span class="p">],</span><span class="n">ccrs</span><span class="o">.</span><span class="n">PlateCarree</span><span class="p">(),</span>
<span class="n">cbounds</span> <span class="o">=</span> <span class="n">Polygon</span><span class="p">(</span><span class="n">geom</span><span class="p">)</span>
<span class="n">intersection</span> <span class="o">=</span> <span class="n">cbounds</span><span class="o">.</span><span class="n">intersection</span>
<span class="n">geoms</span> <span class="o">=</span> <span class="p">(</span><span class="n">intersection</span><span class="p">(</span><span class="n">geom</span><span class="p">)</span>
<span class="k">for</span> <span class="n">geom</span> <span class="ow">in</span> <span class="n">lakes</span>
<span class="k">if</span> <span class="n">cbounds</span><span class="o">.</span><span class="n">intersects</span><span class="p">(</span><span class="n">geom</span><span class="p">))</span>
<span class="n">shape_feature</span> <span class="o">=</span> <span class="n">ShapelyFeature</span><span class="p">(</span><span class="n">geoms</span><span class="p">,</span><span class="n">ccrs</span><span class="o">.</span><span class="n">PlateCarree</span><span class="p">(),</span>
<span class="n">facecolor</span><span class="o">=</span><span class="s1">&#39;blue&#39;</span><span class="p">,</span> <span class="n">linestyle</span><span class="o">=</span><span class="s2">&quot;-&quot;</span><span class="p">,</span><span class="n">edgecolor</span><span class="o">=</span><span class="s1">&#39;#20B2AA&#39;</span><span class="p">)</span> <span class="n">facecolor</span><span class="o">=</span><span class="s1">&#39;blue&#39;</span><span class="p">,</span> <span class="n">linestyle</span><span class="o">=</span><span class="s2">&quot;-&quot;</span><span class="p">,</span><span class="n">edgecolor</span><span class="o">=</span><span class="s1">&#39;#20B2AA&#39;</span><span class="p">)</span>
<span class="n">ax</span><span class="o">.</span><span class="n">add_feature</span><span class="p">(</span><span class="n">shape_feature</span><span class="p">)</span> <span class="n">ax</span><span class="o">.</span><span class="n">add_feature</span><span class="p">(</span><span class="n">shape_feature</span><span class="p">)</span>
<span class="n">fig</span> <span class="n">fig</span>
@ -448,20 +499,21 @@ values appear to change significantly depending on WFO site.</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">Using</span> <span class="mi">208</span> <span class="n">lake</span> <span class="n">MultiPolygons</span> <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">Using</span> <span class="mi">208</span> <span class="n">lake</span> <span class="n">MultiPolygons</span>
</pre></div> </pre></div>
</div> </div>
<img alt="../../_images/Map_Resources_and_Topography_12_1.png" src="../../_images/Map_Resources_and_Topography_12_1.png" /> <img alt="../../_images/Map_Resources_and_Topography_25_1.png" src="../../_images/Map_Resources_and_Topography_25_1.png" />
<p><a class="reference external" href="https://unidata.github.io/python-awips/examples/generated/Map_Resources_and_Topography.html">Top</a></p>
</div> </div>
<div class="section" id="major-rivers"> <hr class="docutils" />
<h2>Major Rivers<a class="headerlink" href="#major-rivers" title="Permalink to this headline"></a></h2> <div class="section" id="draw-major-rivers">
<div class="highlight-ipython3 notranslate"><div class="highlight"><pre><span></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> <h3>9 Draw Major Rivers<a class="headerlink" href="#draw-major-rivers" title="Permalink to this headline"></a></h3>
<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">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>
<span class="n">request</span><span class="o">.</span><span class="n">addIdentifier</span><span class="p">(</span><span class="s1">&#39;geomField&#39;</span><span class="p">,</span> <span class="s1">&#39;the_geom&#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;geomField&#39;</span><span class="p">,</span> <span class="s1">&#39;the_geom&#39;</span><span class="p">)</span>
<span class="n">request</span><span class="o">.</span><span class="n">setParameters</span><span class="p">(</span><span class="s1">&#39;pname&#39;</span><span class="p">)</span> <span class="n">rivers</span> <span class="o">=</span> <span class="n">DataAccessLayer</span><span class="o">.</span><span class="n">getGeometryData</span><span class="p">(</span><span class="n">request</span><span class="p">)</span>
<span class="n">rivers</span> <span class="o">=</span> <span class="n">DataAccessLayer</span><span class="o">.</span><span class="n">getGeometryData</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="p">[])</span>
<span class="nb">print</span><span class="p">(</span><span class="s2">&quot;Using &quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">rivers</span><span class="p">))</span> <span class="o">+</span> <span class="s2">&quot; river MultiLineStrings&quot;</span><span class="p">)</span> <span class="nb">print</span><span class="p">(</span><span class="s2">&quot;Using &quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">rivers</span><span class="p">))</span> <span class="o">+</span> <span class="s2">&quot; river MultiLineStrings&quot;</span><span class="p">)</span>
<span class="c1"># Plot rivers</span> <span class="c1"># Plot rivers</span>
<span class="k">for</span> <span class="n">ob</span> <span class="ow">in</span> <span class="n">rivers</span><span class="p">:</span> <span class="n">shape_feature</span> <span class="o">=</span> <span class="n">ShapelyFeature</span><span class="p">([</span><span class="n">river</span><span class="o">.</span><span class="n">getGeometry</span><span class="p">()</span> <span class="k">for</span> <span class="n">river</span> <span class="ow">in</span> <span class="n">rivers</span><span class="p">],</span><span class="n">ccrs</span><span class="o">.</span><span class="n">PlateCarree</span><span class="p">(),</span>
<span class="n">shape_feature</span> <span class="o">=</span> <span class="n">ShapelyFeature</span><span class="p">(</span><span class="n">ob</span><span class="o">.</span><span class="n">getGeometry</span><span class="p">(),</span><span class="n">ccrs</span><span class="o">.</span><span class="n">PlateCarree</span><span class="p">(),</span>
<span class="n">facecolor</span><span class="o">=</span><span class="s1">&#39;none&#39;</span><span class="p">,</span> <span class="n">linestyle</span><span class="o">=</span><span class="s2">&quot;:&quot;</span><span class="p">,</span><span class="n">edgecolor</span><span class="o">=</span><span class="s1">&#39;#20B2AA&#39;</span><span class="p">)</span> <span class="n">facecolor</span><span class="o">=</span><span class="s1">&#39;none&#39;</span><span class="p">,</span> <span class="n">linestyle</span><span class="o">=</span><span class="s2">&quot;:&quot;</span><span class="p">,</span><span class="n">edgecolor</span><span class="o">=</span><span class="s1">&#39;#20B2AA&#39;</span><span class="p">)</span>
<span class="n">ax</span><span class="o">.</span><span class="n">add_feature</span><span class="p">(</span><span class="n">shape_feature</span><span class="p">)</span> <span class="n">ax</span><span class="o">.</span><span class="n">add_feature</span><span class="p">(</span><span class="n">shape_feature</span><span class="p">)</span>
<span class="n">fig</span> <span class="n">fig</span>
@ -470,17 +522,18 @@ values appear to change significantly depending on WFO site.</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">Using</span> <span class="mi">1400</span> <span class="n">river</span> <span class="n">MultiLineStrings</span> <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">Using</span> <span class="mi">1400</span> <span class="n">river</span> <span class="n">MultiLineStrings</span>
</pre></div> </pre></div>
</div> </div>
<img alt="../../_images/Map_Resources_and_Topography_14_1.png" src="../../_images/Map_Resources_and_Topography_14_1.png" /> <img alt="../../_images/Map_Resources_and_Topography_28_1.png" src="../../_images/Map_Resources_and_Topography_28_1.png" />
<p><a class="reference external" href="https://unidata.github.io/python-awips/examples/generated/Map_Resources_and_Topography.html">Top</a></p>
</div> </div>
<div class="section" id="topography"> <hr class="docutils" />
<h2>Topography<a class="headerlink" href="#topography" title="Permalink to this headline"></a></h2> <div class="section" id="draw-topography">
<h3>10 Draw Topography<a class="headerlink" href="#draw-topography" title="Permalink to this headline"></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="kn">import</span> <span class="nn">numpy.ma</span> <span class="k">as</span> <span class="nn">ma</span> <div class="highlight-ipython3 notranslate"><div class="highlight"><pre><span></span><span class="c1"># Define topography request</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;topo&quot;</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;topo&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">addIdentifier</span><span class="p">(</span><span class="s2">&quot;group&quot;</span><span class="p">,</span> <span class="s2">&quot;/&quot;</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="s2">&quot;group&quot;</span><span class="p">,</span> <span class="s2">&quot;/&quot;</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="s2">&quot;dataset&quot;</span><span class="p">,</span> <span class="s2">&quot;full&quot;</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="s2">&quot;dataset&quot;</span><span class="p">,</span> <span class="s2">&quot;full&quot;</span><span class="p">)</span>
<span class="n">request</span><span class="o">.</span><span class="n">setEnvelope</span><span class="p">(</span><span class="n">envelope</span><span class="p">)</span>
<span class="n">gridData</span> <span class="o">=</span> <span class="n">DataAccessLayer</span><span class="o">.</span><span class="n">getGridData</span><span class="p">(</span><span class="n">request</span><span class="p">)</span> <span class="n">gridData</span> <span class="o">=</span> <span class="n">DataAccessLayer</span><span class="o">.</span><span class="n">getGridData</span><span class="p">(</span><span class="n">request</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span><span class="n">gridData</span><span class="p">)</span> <span class="nb">print</span><span class="p">(</span><span class="n">gridData</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span><span class="s2">&quot;Number of grid records: &quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">gridData</span><span class="p">)))</span> <span class="nb">print</span><span class="p">(</span><span class="s2">&quot;Number of grid records: &quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">gridData</span><span class="p">)))</span>
@ -488,7 +541,7 @@ to download and render for large (CONUS) maps.</p>
<span class="nb">print</span><span class="p">(</span><span class="s2">&quot;Sample grid data:</span><span class="se">\n</span><span class="s2">&quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">gridData</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">getRawData</span><span class="p">())</span> <span class="o">+</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">)</span> <span class="nb">print</span><span class="p">(</span><span class="s2">&quot;Sample grid data:</span><span class="se">\n</span><span class="s2">&quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">gridData</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">getRawData</span><span class="p">())</span> <span class="o">+</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">)</span>
</pre></div> </pre></div>
</div> </div>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="p">[</span><span class="o">&lt;</span><span class="n">awips</span><span class="o">.</span><span class="n">dataaccess</span><span class="o">.</span><span class="n">PyGridData</span><span class="o">.</span><span class="n">PyGridData</span> <span class="nb">object</span> <span class="n">at</span> <span class="mh">0x7ffd0f33c040</span><span class="o">&gt;</span><span class="p">]</span> <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="p">[</span><span class="o">&lt;</span><span class="n">awips</span><span class="o">.</span><span class="n">dataaccess</span><span class="o">.</span><span class="n">PyGridData</span><span class="o">.</span><span class="n">PyGridData</span> <span class="nb">object</span> <span class="n">at</span> <span class="mh">0x115a20370</span><span class="o">&gt;</span><span class="p">]</span>
<span class="n">Number</span> <span class="n">of</span> <span class="n">grid</span> <span class="n">records</span><span class="p">:</span> <span class="mi">1</span> <span class="n">Number</span> <span class="n">of</span> <span class="n">grid</span> <span class="n">records</span><span class="p">:</span> <span class="mi">1</span>
<span class="n">Sample</span> <span class="n">grid</span> <span class="n">data</span> <span class="n">shape</span><span class="p">:</span> <span class="n">Sample</span> <span class="n">grid</span> <span class="n">data</span> <span class="n">shape</span><span class="p">:</span>
<span class="p">(</span><span class="mi">778</span><span class="p">,</span> <span class="mi">1058</span><span class="p">)</span> <span class="p">(</span><span class="mi">778</span><span class="p">,</span> <span class="mi">1058</span><span class="p">)</span>
@ -521,7 +574,41 @@ to download and render for large (CONUS) maps.</p>
<span class="mf">4328.0</span> <span class="mf">4328.0</span>
</pre></div> </pre></div>
</div> </div>
<img alt="../../_images/Map_Resources_and_Topography_17_1.png" src="../../_images/Map_Resources_and_Topography_17_1.png" /> <img alt="../../_images/Map_Resources_and_Topography_32_1.png" src="../../_images/Map_Resources_and_Topography_32_1.png" />
<p><a class="reference external" href="https://unidata.github.io/python-awips/examples/generated/Map_Resources_and_Topography.html">Top</a></p>
</div>
<hr class="docutils" />
<div class="section" id="see-also">
<h3>11 See Also<a class="headerlink" href="#see-also" title="Permalink to this headline"></a></h3>
<div class="section" id="additional-documentation">
<h4>11.1 Additional Documentation<a class="headerlink" href="#additional-documentation" title="Permalink to this headline"></a></h4>
<ul>
<li><p>This notebook requires: <strong>python-awips, numpy, matplotplib, cartopy,
shapely</strong></p></li>
<li><p>Use datatype <strong>maps</strong> and <strong>addIdentifier(table, &lt;postgres maps
schema&gt;)</strong> to define the map table:
DataAccessLayer.changeEDEXHost(“edex-cloud.unidata.ucar.edu”) request
= DataAccessLayer.newDataRequest(maps)
request.addIdentifier(table, mapdata.county)</p></li>
<li><p>Use <strong>request.setLocationNames()</strong> and <strong>request.addIdentifier()</strong> to
spatially filter a map resource. In the example below, WFO ID <strong>BOU</strong>
(Boulder, Colorado) is used to query counties within the BOU county
watch area (CWA)</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">request</span><span class="o">.</span><span class="n">addIdentifier</span><span class="p">(</span><span class="s1">&#39;geomField&#39;</span><span class="p">,</span> <span class="s1">&#39;the_geom&#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;inLocation&#39;</span><span class="p">,</span> <span class="s1">&#39;true&#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;locationField&#39;</span><span class="p">,</span> <span class="s1">&#39;cwa&#39;</span><span class="p">)</span>
<span class="n">request</span><span class="o">.</span><span class="n">setLocationNames</span><span class="p">(</span><span class="s1">&#39;BOU&#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;cwa&#39;</span><span class="p">,</span> <span class="s1">&#39;BOU&#39;</span><span class="p">)</span>
</pre></div>
</div>
</li>
</ul>
<p>See the Maps Database Reference Page for available database tables,
column names, and types.</p>
<p><a class="reference external" href="https://unidata.github.io/python-awips/examples/generated/Map_Resources_and_Topography.html">Top</a></p>
<hr class="docutils" />
</div>
</div>
</div> </div>
</div> </div>

Binary file not shown.

File diff suppressed because one or more lines are too long