deploy: 752e91b141
Before Width: | Height: | Size: 72 KiB |
Before Width: | Height: | Size: 90 KiB |
BIN
_images/Map_Resources_and_Topography_13_2.png
Normal file
After Width: | Height: | Size: 29 KiB |
Before Width: | Height: | Size: 138 KiB |
BIN
_images/Map_Resources_and_Topography_16_0.png
Normal file
After Width: | Height: | Size: 30 KiB |
Before Width: | Height: | Size: 372 KiB |
BIN
_images/Map_Resources_and_Topography_19_1.png
Normal file
After Width: | Height: | Size: 47 KiB |
BIN
_images/Map_Resources_and_Topography_22_1.png
Normal file
After Width: | Height: | Size: 69 KiB |
BIN
_images/Map_Resources_and_Topography_25_1.png
Normal file
After Width: | Height: | Size: 87 KiB |
BIN
_images/Map_Resources_and_Topography_28_1.png
Normal file
After Width: | Height: | Size: 135 KiB |
BIN
_images/Map_Resources_and_Topography_32_1.png
Normal file
After Width: | Height: | Size: 367 KiB |
Before Width: | Height: | Size: 30 KiB |
Before Width: | Height: | Size: 32 KiB |
Before Width: | Height: | Size: 48 KiB |
|
@ -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 Unidata’s 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, it’s 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 we’ll be using Boulder (BOU) as our example for plotting the County
|
||||||
|
Warning Area (CWA). We’ll 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, we’ll 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, we’ll 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>`__
|
||||||
|
|
||||||
|
--------------
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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’, <postgres maps
|
|
||||||
schema>)</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">'geomField'</span><span class="p">,</span> <span class="s1">'the_geom'</span><span class="p">)</span>
|
|
||||||
<span class="n">request</span><span class="o">.</span><span class="n">addIdentifier</span><span class="p">(</span><span class="s1">'inLocation'</span><span class="p">,</span> <span class="s1">'true'</span><span class="p">)</span>
|
|
||||||
<span class="n">request</span><span class="o">.</span><span class="n">addIdentifier</span><span class="p">(</span><span class="s1">'locationField'</span><span class="p">,</span> <span class="s1">'cwa'</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">'BOU'</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">'cwa'</span><span class="p">,</span> <span class="s1">'BOU'</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 Unidata’s 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">"edex-cloud.unidata.ucar.edu"</span><span class="p">)</span>
|
||||||
|
<span class="n">request</span> <span class="o">=</span> <span class="n">DataAccessLayer</span><span class="o">.</span><span class="n">newDataRequest</span><span class="p">(</span><span class="s1">'maps'</span><span class="p">)</span>
|
||||||
|
</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, it’s 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">"edex-cloud.unidata.ucar.edu"</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">'maps'</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">'table'</span><span class="p">,</span> <span class="s1">'mapdata.county'</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"><</span><span class="n">b</span><span class="o">></span><span class="n">Tip</span><span class="p">:</span><span class="o"></</span><span class="n">b</span><span class="o">></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"><</span><span class="n">code</span><span class="o">></span><span class="n">the_geom</span><span class="o"></</span><span class="n">code</span><span class="o">></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"><</span><span class="n">b</span><span class="o">></span><span class="n">Point</span><span class="o"></</span><span class="n">b</span><span class="o">></span><span class="p">,</span> <span class="o"><</span><span class="n">b</span><span class="o">></span><span class="n">MultiPolygon</span><span class="o"></</span><span class="n">b</span><span class="o">></span><span class="p">,</span> <span class="ow">or</span> <span class="o"><</span><span class="n">b</span><span class="o">></span><span class="n">MultiLineString</span><span class="o"></</span><span class="n">b</span><span class="o">>.</span>
|
||||||
</pre></div>
|
</pre></div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="section" id="request-county-boundaries-for-a-wfo">
|
<p>Here we’ll 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). We’ll 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, we’ll 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">'table'</span><span class="p">,</span> <span class="s1">'mapdata.county'</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 "cwa" for filtering</span>
|
<span class="c1"># tie this ID to the mapdata.county column "cwa" for filtering</span>
|
||||||
<span class="n">request</span><span class="o">.</span><span class="n">setLocationNames</span><span class="p">(</span><span class="s1">'BOU'</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">'BOU'</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">'cwa'</span><span class="p">,</span> <span class="s1">'BOU'</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">'cwa'</span><span class="p">,</span> <span class="s1">'BOU'</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">'geomField'</span><span class="p">,</span> <span class="s1">'the_geom'</span><span class="p">)</span>
|
<span class="n">request</span><span class="o">.</span><span class="n">addIdentifier</span><span class="p">(</span><span class="s1">'geomField'</span><span class="p">,</span> <span class="s1">'the_geom'</span><span class="p">)</span>
|
||||||
<span class="n">request</span><span class="o">.</span><span class="n">addIdentifier</span><span class="p">(</span><span class="s1">'inLocation'</span><span class="p">,</span> <span class="s1">'true'</span><span class="p">)</span>
|
<span class="n">request</span><span class="o">.</span><span class="n">addIdentifier</span><span class="p">(</span><span class="s1">'inLocation'</span><span class="p">,</span> <span class="s1">'true'</span><span class="p">)</span>
|
||||||
<span class="n">request</span><span class="o">.</span><span class="n">addIdentifier</span><span class="p">(</span><span class="s1">'locationField'</span><span class="p">,</span> <span class="s1">'cwa'</span><span class="p">)</span>
|
<span class="n">request</span><span class="o">.</span><span class="n">addIdentifier</span><span class="p">(</span><span class="s1">'locationField'</span><span class="p">,</span> <span class="s1">'cwa'</span><span class="p">)</span>
|
||||||
|
|
||||||
<span class="c1"># This is essentially the same as "'"select count(*) from mapdata.cwa where cwa='BOU';" (=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">"Using "</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">counties</span><span class="p">))</span> <span class="o">+</span> <span class="s2">" county MultiPolygons"</span><span class="p">)</span>
|
<span class="nb">print</span><span class="p">(</span><span class="s2">"Using "</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">counties</span><span class="p">))</span> <span class="o">+</span> <span class="s2">" county MultiPolygons"</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'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">'cultural'</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">'cultural'</span><span class="p">,</span>
|
||||||
<span class="n">name</span><span class="o">=</span><span class="s1">'admin_0_boundary_lines_land'</span><span class="p">,</span>
|
<span class="n">name</span><span class="o">=</span><span class="s1">'admin_0_boundary_lines_land'</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">'-'</span><span class="p">,</span> <span class="n">edgecolor</span><span class="o">=</span><span class="s1">'black'</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">'-'</span><span class="p">,</span> <span class="n">edgecolor</span><span class="o">=</span><span class="s1">'black'</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">'none'</span><span class="p">,</span> <span class="n">linestyle</span><span class="o">=</span><span class="s2">"-"</span><span class="p">,</span><span class="n">edgecolor</span><span class="o">=</span><span class="s1">'#86989B'</span><span class="p">)</span>
|
<span class="n">facecolor</span><span class="o">=</span><span class="s1">'none'</span><span class="p">,</span> <span class="n">linestyle</span><span class="o">=</span><span class="s2">"-"</span><span class="p">,</span><span class="n">edgecolor</span><span class="o">=</span><span class="s1">'#86989B'</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"><</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">></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">'none'</span><span class="p">,</span> <span class="n">linestyle</span><span class="o">=</span><span class="s2">"-"</span><span class="p">,</span><span class="n">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">'#cc5000'</span><span class="p">)</span>
|
<span class="n">facecolor</span><span class="o">=</span><span class="s1">'none'</span><span class="p">,</span> <span class="n">linestyle</span><span class="o">=</span><span class="s2">"-"</span><span class="p">,</span><span class="n">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">'#cc5000'</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, we’ll 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">'maps'</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">'maps'</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">'table'</span><span class="p">,</span> <span class="s1">'mapdata.interstate'</span><span class="p">)</span>
|
<span class="n">request</span><span class="o">.</span><span class="n">addIdentifier</span><span class="p">(</span><span class="s1">'table'</span><span class="p">,</span> <span class="s1">'mapdata.interstate'</span><span class="p">)</span>
|
||||||
<span class="n">request</span><span class="o">.</span><span class="n">addIdentifier</span><span class="p">(</span><span class="s1">'geomField'</span><span class="p">,</span> <span class="s1">'the_geom'</span><span class="p">)</span>
|
<span class="n">request</span><span class="o">.</span><span class="n">addIdentifier</span><span class="p">(</span><span class="s1">'geomField'</span><span class="p">,</span> <span class="s1">'the_geom'</span><span class="p">)</span>
|
||||||
<span class="n">request</span><span class="o">.</span><span class="n">setParameters</span><span class="p">(</span><span class="s1">'name'</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">"Using "</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">interstates</span><span class="p">))</span> <span class="o">+</span> <span class="s2">" interstate MultiLineStrings"</span><span class="p">)</span>
|
<span class="nb">print</span><span class="p">(</span><span class="s2">"Using "</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">interstates</span><span class="p">))</span> <span class="o">+</span> <span class="s2">" interstate MultiLineStrings"</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">'maps'</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"><</span><span class="n">b</span><span class="o">></span><span class="ne">Warning</span><span class="p">:</span><span class="o"></</span><span class="n">b</span><span class="o">></span> <span class="n">the</span> <span class="o"><</span><span class="n">code</span><span class="o">></span><span class="n">prog_disc</span><span class="o"></</span><span class="n">code</span><span class="o">></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">'maps'</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">'table'</span><span class="p">,</span> <span class="s1">'mapdata.city'</span><span class="p">)</span>
|
<span class="n">request</span><span class="o">.</span><span class="n">addIdentifier</span><span class="p">(</span><span class="s1">'table'</span><span class="p">,</span> <span class="s1">'mapdata.city'</span><span class="p">)</span>
|
||||||
<span class="n">request</span><span class="o">.</span><span class="n">addIdentifier</span><span class="p">(</span><span class="s1">'geomField'</span><span class="p">,</span> <span class="s1">'the_geom'</span><span class="p">)</span>
|
<span class="n">request</span><span class="o">.</span><span class="n">addIdentifier</span><span class="p">(</span><span class="s1">'geomField'</span><span class="p">,</span> <span class="s1">'the_geom'</span><span class="p">)</span>
|
||||||
<span class="n">request</span><span class="o">.</span><span class="n">setParameters</span><span class="p">(</span><span class="s1">'name'</span><span class="p">,</span><span class="s1">'population'</span><span class="p">,</span><span class="s1">'prog_disc'</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">'name'</span><span class="p">,</span><span class="s1">'population'</span><span class="p">,</span><span class="s1">'prog_disc'</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">"Queried "</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">" total cities"</span><span class="p">)</span>
|
<span class="nb">print</span><span class="p">(</span><span class="s2">"Queried "</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">" total cities"</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">"population"</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">"population"</span><span class="p">)</span> <span class="o">!=</span> <span class="s1">'None'</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">"prog_disc"</span><span class="p">)</span> <span class="o">></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">"prog_disc"</span><span class="p">)</span> <span class="o">></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">"population"</span><span class="p">))</span> <span class="o">></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">"population"</span><span class="p">))</span> <span class="o">></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">"name"</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">"name"</span><span class="p">))</span>
|
||||||
<span class="nb">print</span><span class="p">(</span><span class="s2">"Plotting "</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">" cities"</span><span class="p">)</span>
|
<span class="nb">print</span><span class="p">(</span><span class="s2">"Plotting "</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">" cities"</span><span class="p">)</span>
|
||||||
|
@ -412,75 +468,72 @@ 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">'maps'</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">'maps'</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">'table'</span><span class="p">,</span> <span class="s1">'mapdata.lake'</span><span class="p">)</span>
|
<span class="n">request</span><span class="o">.</span><span class="n">addIdentifier</span><span class="p">(</span><span class="s1">'table'</span><span class="p">,</span> <span class="s1">'mapdata.lake'</span><span class="p">)</span>
|
||||||
<span class="n">request</span><span class="o">.</span><span class="n">addIdentifier</span><span class="p">(</span><span class="s1">'geomField'</span><span class="p">,</span> <span class="s1">'the_geom'</span><span class="p">)</span>
|
<span class="n">request</span><span class="o">.</span><span class="n">addIdentifier</span><span class="p">(</span><span class="s1">'geomField'</span><span class="p">,</span> <span class="s1">'the_geom'</span><span class="p">)</span>
|
||||||
<span class="n">request</span><span class="o">.</span><span class="n">setParameters</span><span class="p">(</span><span class="s1">'name'</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">"Using "</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">response</span><span class="p">))</span> <span class="o">+</span> <span class="s2">" lake MultiPolygons"</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">"Using "</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">lakes</span><span class="p">))</span> <span class="o">+</span> <span class="s2">" lake MultiPolygons"</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">'blue'</span><span class="p">,</span> <span class="n">linestyle</span><span class="o">=</span><span class="s2">"-"</span><span class="p">,</span><span class="n">edgecolor</span><span class="o">=</span><span class="s1">'#20B2AA'</span><span class="p">)</span>
|
<span class="n">facecolor</span><span class="o">=</span><span class="s1">'blue'</span><span class="p">,</span> <span class="n">linestyle</span><span class="o">=</span><span class="s2">"-"</span><span class="p">,</span><span class="n">edgecolor</span><span class="o">=</span><span class="s1">'#20B2AA'</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>
|
||||||
<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">'maps'</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">'maps'</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">'table'</span><span class="p">,</span> <span class="s1">'mapdata.majorrivers'</span><span class="p">)</span>
|
<span class="n">request</span><span class="o">.</span><span class="n">addIdentifier</span><span class="p">(</span><span class="s1">'table'</span><span class="p">,</span> <span class="s1">'mapdata.majorrivers'</span><span class="p">)</span>
|
||||||
<span class="n">request</span><span class="o">.</span><span class="n">addIdentifier</span><span class="p">(</span><span class="s1">'geomField'</span><span class="p">,</span> <span class="s1">'the_geom'</span><span class="p">)</span>
|
<span class="n">request</span><span class="o">.</span><span class="n">addIdentifier</span><span class="p">(</span><span class="s1">'geomField'</span><span class="p">,</span> <span class="s1">'the_geom'</span><span class="p">)</span>
|
||||||
<span class="n">request</span><span class="o">.</span><span class="n">setParameters</span><span class="p">(</span><span class="s1">'pname'</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">"Using "</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">rivers</span><span class="p">))</span> <span class="o">+</span> <span class="s2">" river MultiLineStrings"</span><span class="p">)</span>
|
<span class="nb">print</span><span class="p">(</span><span class="s2">"Using "</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">rivers</span><span class="p">))</span> <span class="o">+</span> <span class="s2">" river MultiLineStrings"</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">'none'</span><span class="p">,</span> <span class="n">linestyle</span><span class="o">=</span><span class="s2">":"</span><span class="p">,</span><span class="n">edgecolor</span><span class="o">=</span><span class="s1">'#20B2AA'</span><span class="p">)</span>
|
<span class="n">facecolor</span><span class="o">=</span><span class="s1">'none'</span><span class="p">,</span> <span class="n">linestyle</span><span class="o">=</span><span class="s2">":"</span><span class="p">,</span><span class="n">edgecolor</span><span class="o">=</span><span class="s1">'#20B2AA'</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>
|
||||||
<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">"topo"</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">"topo"</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">"group"</span><span class="p">,</span> <span class="s2">"/"</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">"group"</span><span class="p">,</span> <span class="s2">"/"</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">"dataset"</span><span class="p">,</span> <span class="s2">"full"</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">"dataset"</span><span class="p">,</span> <span class="s2">"full"</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">"Number of grid records: "</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">"Number of grid records: "</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">"Sample grid data:</span><span class="se">\n</span><span class="s2">"</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">"</span><span class="se">\n</span><span class="s2">"</span><span class="p">)</span>
|
<span class="nb">print</span><span class="p">(</span><span class="s2">"Sample grid data:</span><span class="se">\n</span><span class="s2">"</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">"</span><span class="se">\n</span><span class="s2">"</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"><</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">></span><span class="p">]</span>
|
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="p">[</span><span class="o"><</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">></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’, <postgres maps
|
||||||
|
schema>)</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">'geomField'</span><span class="p">,</span> <span class="s1">'the_geom'</span><span class="p">)</span>
|
||||||
|
<span class="n">request</span><span class="o">.</span><span class="n">addIdentifier</span><span class="p">(</span><span class="s1">'inLocation'</span><span class="p">,</span> <span class="s1">'true'</span><span class="p">)</span>
|
||||||
|
<span class="n">request</span><span class="o">.</span><span class="n">addIdentifier</span><span class="p">(</span><span class="s1">'locationField'</span><span class="p">,</span> <span class="s1">'cwa'</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">'BOU'</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">'cwa'</span><span class="p">,</span> <span class="s1">'BOU'</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>
|
||||||
|
|
||||||
|
|