Added files to index.


Former-commit-id: 874ae116e412c39b73dc3cc74ee3f3a3b02d82f7
This commit is contained in:
Roger Ferrel 2012-01-26 15:05:25 -06:00
parent 472e788dba
commit cf1383a412
550 changed files with 98209 additions and 0 deletions

View file

@ -0,0 +1,244 @@
/**
*
* gov.noaa.nws.ncep.viz.ui.locator.resource.SurfaceStationPointData
*
* This java class performs the surface station locator functions.
* This code has been developed by the SIB for use in the AWIPS2 system.
*
* <pre>
* SOFTWARE HISTORY
*
* Date Ticket# Engineer Description
* ------- ------- -------- -----------
* 11/08/2010 229 Chin Chen Initial coding
*
* </pre>
*
* @author Chin Chen
* @version 1.0
*/
package gov.noaa.nws.ncep.ui.nsharp;
import gov.noaa.nws.ncep.viz.common.dbQuery.NcDirectDbQuery;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.geotools.referencing.GeodeticCalculator;
import org.geotools.referencing.datum.DefaultEllipsoid;
import com.raytheon.uf.common.dataquery.db.QueryResult;
import com.raytheon.uf.common.dataquery.db.QueryResultRow;
import com.raytheon.uf.edex.database.DataAccessLayerException;
import com.raytheon.uf.viz.core.catalog.DirectDbQuery.QueryLanguage;
import com.raytheon.uf.viz.core.exception.VizException;
import com.vividsolutions.jts.geom.Coordinate;
public class SurfaceStationPointData {
//private Log logger = LogFactory.getLog(getClass());
public static final int DEFAULT_LATLON=999;
private static List<PointData> pointList;
private static double latitude,longitude;
public SurfaceStationPointData() {
// TODO Auto-generated constructor stub
}
public static class PointData {
private String name = null;
private double lat = -999.99;
private double lon = -999.99;
private double dir = -999.99;
private int distanceInMeter = -999;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public PointData() {
}
public PointData( PointData pd ) {
name = pd.name;
lat = pd.lat;
lon = pd.lon;
dir = pd.dir;
distanceInMeter = pd.distanceInMeter;
}
public double getLat() {
return lat;
}
public void setLat(double lat) {
this.lat = lat;
}
public double getLon() {
return lon;
}
public void setLon(double lon) {
this.lon = lon;
}
public int getDistanceInMeter() {
return distanceInMeter;
}
public void setDistanceInMeter(int distanceInMeter) {
this.distanceInMeter = distanceInMeter;
}
public double getDir() {
return dir;
}
public void setDir(double dir) {
this.dir = dir;
}
}
private static List<PointData> stationIdQuery(double lat,double lon)
throws DataAccessLayerException {
String query1,query2;
QueryResultRow[] stnResults = null;
double corr = 0.2;
List<PointData> rtnPointList = new ArrayList<PointData>();
double minLat= lat-5*corr;
double maxLat =lat+ 5*corr;
double minLon=lon-corr*5;
double maxLon=lon+corr*5;
query1="Select station_id,latitude,longitude " +
"FROM stns.sfstns WHERE latitude BETWEEN "+
minLat+" AND "+maxLat+" AND longitude BETWEEN "+
minLon+" AND "+maxLon;
query2="Select station_id,latitude,longitude " +
"FROM stns.sfstns WHERE latitude BETWEEN "+
minLat+" AND "+maxLat;
stnResults = getStnList(query1,query2);
if(stnResults!= null){
for(QueryResultRow rows:stnResults){
PointData pointData = new PointData();
pointData.setName((String)rows.getColumn(0));
pointData.setLat((Double) rows.getColumn(1));
pointData.setLon((Double) rows.getColumn(2));
rtnPointList.add(pointData);
}
}
return rtnPointList;
}
private static QueryResultRow[] getStnList(String query1,String query2){
QueryResult stnList=null;
QueryResultRow[] stnRowResults = null;
try {
stnList = NcDirectDbQuery.executeMappedQuery(query1, "ncep", QueryLanguage.SQL);
if(stnList != null){
stnRowResults= stnList.getRows();
}
else {
stnList = NcDirectDbQuery.executeMappedQuery(query2, "ncep", QueryLanguage.SQL);
if(stnList != null)
stnRowResults= stnList.getRows();
}
}
catch (Exception e ){
System.out.println("db exception!");
}
return stnRowResults ;
}
private static int getNearestPointStnIndex(){
/*
* Compute distance (in meter) of the nearest point
*/
int index = -1;
double distance = -999.99;
int i=0;
for (PointData point: pointList){
GeodeticCalculator gc = new GeodeticCalculator(
DefaultEllipsoid.WGS84);
gc.setStartingGeographicPoint( longitude,latitude);
gc.setDestinationGeographicPoint(point.getLon(), point.getLat());
double dist = 0;
dist = gc.getOrthodromicDistance();
if (i == 0) {
distance = dist;
index = 0;
} else {
if (distance > dist ) {
distance = dist;
index = i;
}
}
i++;
}
return index;
}
public static String calculateNearestPoint(Coordinate co) {
if (co.x > 180.0 || co.x < -180.0 || co.y > 90.0 || co.y < -90.0)
return null;// Check for invalid Coordinate
try {
latitude = co.y;
longitude = co.x;
pointList = stationIdQuery(latitude , longitude);
} catch (DataAccessLayerException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}//Retrieve all points within the envelope
if (pointList == null || pointList.size() ==0 )
return null;
int index = getNearestPointStnIndex();
String output = pointList.get(index).getName();
//update input coordinate of picked stn so Nsharp can use it
co.x = pointList.get(index).getLon();
co.y = pointList.get(index).getLat();
return output;
}
public static Coordinate getStnCoordinate(String stnName){
Coordinate co = new Coordinate(DEFAULT_LATLON,DEFAULT_LATLON);
//Chin: station id length in sfstns table is 8 chars. It fills whole 8 chars with space after real station id.
// in order to make a successful query from user entered station id. We have to make sure using a 8 chars string
// with space stuffed at end.
String fixedLengthStnName = stnName + " ";
fixedLengthStnName = fixedLengthStnName.substring(0, 8);
String query="Select latitude,longitude " +
"FROM stns.sfstns WHERE station_id = '"+fixedLengthStnName+"'";
List<Object[]> list = null;
try {
list = NcDirectDbQuery.executeQuery( query, "ncep", QueryLanguage.SQL);
if(list != null && list.size()>0){
//we only care for one and only first one station
Object[] obj = list.get(0);
co.y = (Double)obj[0];
co.x = (Double)obj[1];
}
}
catch (Exception e ){
System.out.println("-----DB exception at getStnCoordinate: "+e.getMessage());
}
return co;
}
}

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,224 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!--
This file contains a list of Island Breakpoints that can be specified for Tropical
Cyclone Watches and Warnings. The information for each Island breakpoint is included
in an <island> tag. The <island> tag must contain one <breakpoint> tag, one or more <path>
tags, and may contain an optional <landZones> tag.
The <breakpoint> tag is used to identify a unique breakpoint and has required attributes:
name, state, country, and location. The value of the "name" attribute must be unique among
all of the breakpoints.
The <path> tags are used to specify the longitude/latitude coordinate pairs used to draw a
line path depicting the geographic area covered by a watch
or warning for the breakpoint. Coordinate pairs must be specified with east longitude first,
then latitude separated by a comma. Any number of coordinate pairs can be used in the path,
and they should be separated by a "space". Multiple <path> tags can be used to draw separate
line paths.
The <landZone> tag is optional for each breakpoint, and it is used to specify any
forecast zones associated with the breakpoint. If specified, these land zones will
be included in the UGC group of a Tropical Cyclone VTEC (TCV) product, if there is
a watch/warning issued for the associated breakpoint.
-->
<islandBreakpoints>
<island>
<breakpoint name="Antigua/Barbuda" state="--" country="AD" location="-61.8,17.35"/>
<path>-61.72,16.7 -61.8,17.85</path>
</island>
<island>
<breakpoint name="Aruba,_Bonaire,_Curacao" state="--" country="AC" location="-69,12.35"/>
<path>-68,12.1 -70.23,12.5</path>
</island>
<island>
<breakpoint name="Bahamas_(Central)" state="--" country="BA" location="-75.5,24.00"/>
<path>-74.85,22.85 -75.36,23.7</path>
<path>-74.49,23.95 -74.49,24.15</path>
<path>-75.36,24.15 -75.73,24.7</path>
<path>-75.48,23.39 -76.08,23.68</path>
<path>-74.7,23.68 -75,23.68</path>
</island>
<island>
<breakpoint name="Bahamas_(Andros_only)" state="--" country="BA" location="-77.9,24.40"/>
<path>-77.57,23.75 -77.74,24.7 -78.21,25.2 -78.4,24.57 -77.57,23.75</path>
</island>
<island>
<breakpoint name="Bahamas_(NW_not_Andros)" state="--" country="BA" location="-77.4,25.90"/>
<path>-77.34,25.87 -77.08,26.5 -77.58,26.91</path>
<path>-77.89,26.7 -78.97,26.67</path>
<path>-77.27,25.05 -77.59,25.02</path>
<path>-76.28,24.65 -76.13,25.15 -76.69,25.5 -76.85,25.35</path>
</island>
<island>
<breakpoint name="Bahamas_(Southeast)" state="--" country="BA" location="-73.5,22.00"/>
<path>-73.11,20.93 -73,21.5 -73.23,21.05 -73.5,21.11 -73.68,20.93</path>
<path>-72.72,22.3 -73.15,22.43</path>
<path>-74.27,22.2 -73.84,22.54 -74.37,22.83</path>
</island>
<island>
<breakpoint name="Barbados" state="--" country="BR" location="-59.55,13.15"/>
<path>-59.57,12.85 -59.57,13.4</path>
</island>
<island>
<breakpoint name="Bermuda" state="--" country="BE" location="-64.75,32.30"/>
<path>-64.95,32.2 -64.58,32.43</path>
</island>
<island>
<breakpoint name="Grand_Cayman" state="--" country="GC" location="-81.26,19.32"/>
<path>-81.48,19.38 -81.06,19.32</path>
</island>
<island>
<breakpoint name="Little_Cayman,_Cayman_Brac" state="--" country="GC" location="-79.94,19.70"/>
<path>-80.15,19.65 -79.71,19.76</path>
</island>
<island>
<breakpoint name="Dominica" state="--" country="DO" location="-61.35,15.40"/>
<path>-61.22,15.08 -61.35,15.8</path>
</island>
<island>
<breakpoint name="Grenada" state="--" country="GD" location="-61.7,12.10"/>
<path>-61.82,11.95 -61.44,12.55</path>
</island>
<island>
<breakpoint name="Grenadines/St._Vincent" state="--" country="GV" location="-61.2,13.20"/>
<path>-61.44,12.55 -61,13.5</path>
</island>
<island>
<breakpoint name="Guadeloupe" state="--" country="GP" location="-61.5,16.20"/>
<path>-61.35,15.8 -61.72,16.7</path>
</island>
<island>
<breakpoint name="Jamaica_(all)" state="--" country="JM" location="-77.3,18.10"/>
<path>-76.16,18.02 -77.19,18.45 -78.37,18.33 -77.74,17.85 -77.19,17.77 -76.16,18.02</path>
</island>
<island>
<breakpoint name="Jamaica_(north_coast)" state="--" country="JM" location="-77.5,18.50"/>
<path>-76.16,18.02 -77.19,18.45 -78.37,18.33</path>
</island>
<island>
<breakpoint name="Jamaica_(south_coast)" state="--" country="JM" location="-77.2,17.70"/>
<path>-78.37,18.33 -77.74,17.85 -77.19,17.77 -76.19,17.91</path>
</island>
<island>
<breakpoint name="Martinique" state="--" country="MR" location="-61,14.70"/>
<path>-60.86,14.3 -61.22,15.08</path>
</island>
<island>
<breakpoint name="Saba/Nevis/StKitt/StE/Montserrat" state="--" country="KM" location="-62.7,17.30"/>
<path>-62,16.65 -63.3,17.73</path>
</island>
<island>
<breakpoint name="San_Andres" state="--" country="SS" location="-81.7,12.55"/>
<path>-81.72,12.49 -81.68,12.59</path>
</island>
<island>
<breakpoint name="St._Lucia" state="--" country="LC" location="-60.95,13.90"/>
<path>-61,13.5 -60.86,14.3</path>
</island>
<island>
<breakpoint name="St._Mart/St._Bart/Anguilla" state="--" country="AA" location="-63,18.00"/>
<path>-62.83,17.87 -63.32,18.3</path>
</island>
<island>
<breakpoint name="Tobago" state="--" country="TD" location="-60.65,11.25"/>
<path>-60.9,11.1 -60.46,11.35</path>
</island>
<island>
<breakpoint name="Trinidad" state="--" country="TD" location="-61.25,10.50"/>
<path>-61,10.1 -61,10.85 -61.7,10.68 -61.47,10.42 -61.92,10.05 -61,10.1</path>
</island>
<island>
<breakpoint name="Turks_and_Caicos" state="--" country="TI" location="-71.6,21.75"/>
<path>-71.65,21.31 -71.44,21.65 -71.96,21.92 -72.35,21.8</path>
<path>-71.2,21.31 -71.12,21.49</path>
</island>
<island>
<breakpoint name="Venezuela_(Isla_de_Margarita)" state="--" country="VN" location="-64,11.00"/>
<path>-63.72,11 -64.51,11</path>
</island>
<island>
<breakpoint name="Virgin_Is._(British)" state="--" country="VI" location="-64.45,18.55"/>
<path>-64.68,18.4 -64.29,18.78</path>
</island>
<island>
<breakpoint name="Virgin_Is._(U.S.)" state="--" country="VI" location="-64.8,18.05"/>
<path>-64.74,17.62 -64.99,18.35</path>
<landZones>VIZ001 VIZ002</landZones>
</island>
<island>
<breakpoint name="Isle_of_Youth_(Cuba)" state="--" country="CU" location="-82.85,21.70"/>
<path>-82.52,21.6 -82.66,21.9 -83,21.9 -83.11,21.5 -82.52,21.6</path>
</island>
<island>
<breakpoint name="Dry_Tortugas_Island" state="FL" country="US" location="-82.86,24.66"/>
<path>-82.86,24.67 -82.6,24.67</path>
</island>
<island>
<breakpoint name="Hawaii" state="HI" country="US" location="-155.5,19.65"/>
<path>-155.86,20.28 -154.79,19.53 -155.66,18.91 -156.04,19.76 -155.8,20.02 -155.86,20.28</path>
<landZones>HIZ023 HIZ024 HIZ025 HIZ026 HIZ027 HIZ028</landZones>
</island>
<island>
<breakpoint name="Kauai" state="HI" country="US" location="-159.51,22.06"/>
<path>-159.79,22.04 -159.32,22.21 -159.42,21.87 -159.79,22.04</path>
<path>-160.04,22.02 -160.26,21.78</path>
<landZones>HIZ001 HIZ002 HIZ003 HIZ004</landZones>
</island>
<island>
<breakpoint name="Maui" state="HI" country="US" location="-156.35,20.80"/>
<path>-156.61,21.05 -156.47,20.9 -156.25,20.95 -155.97,20.75 -156.42,20.57 -156.48,20.79 -156.71,20.93 -156.61,21.05</path>
<path>-157.06,20.92 -156.96,20.72 -156.8,20.82 -157.06,20.92</path>
<path>-157.32,21.14 -156.69,21.14</path>
<path>-156.73,20.49 -156.51,20.59</path>
<landZones>HIZ012 HIZ013 HIZ014 HIZ015 HIZ016 HIZ017 HIZ018 HIZ019 HIZ020 HIZ021 HIZ022</landZones>
</island>
<island>
<breakpoint name="Oahu" state="HI" country="US" location="-158,21.46"/>
<path>-157.97,21.71 -157.67,21.29 -158.1,21.27 -158.28,21.57 -157.97,21.71</path>
<landZones>HIZ005 HIZ006 HIZ007 HIZ008 HIZ009 HIZ010 HIZ011</landZones>
</island>
<island>
<breakpoint name="Johnston_Atoll" state="HI" country="US" location="-169.5,16.75"/>
<path>-169.65,16.75 -169.35,16.75</path>
</island>
<island>
<breakpoint name="Midway_Island" state="HI" country="US" location="-177.37,28.22"/>
<path>-177.22,28.22 -177.52,28.22</path>
</island>
<island>
<breakpoint name="Kure_Atoll" state="HI" country="US" location="-178.33,28.42"/>
<path>-178.18,28.42 -178.48,28.42</path>
</island>
<island>
<breakpoint name="Block_Island" state="RI" country="US" location="-71.56,41.16"/>
<path>-71.57,41.23 -71.58,41.2</path>
<landZones>RIZ008</landZones>
</island>
<island>
<breakpoint name="Nantucket" state="MA" country="US" location="-70.04,41.27"/>
<path>-70.23,41.28 -70,41.36</path>
<landZones>MAZ024</landZones>
</island>
<island>
<breakpoint name="Marthas_Vineyard" state="MA" country="US" location="-70.63,41.38"/>
<path>-70.44,41.38 -70.77,41.3</path>
<landZones>MAZ023</landZones>
</island>
<island>
<breakpoint name="Grand_Manan" state="--" country="CN" location="-66.81,44.72"/>
<path>-66.78,44.8 -66.9,44.6</path>
</island>
<island>
<breakpoint name="Magdalen_Islands" state="--" country="CN" location="-61.78,47.46"/>
<path>-62,47.22 -61.4,47.62</path>
</island>
<island>
<breakpoint name="Anticosti_Island" state="--" country="CN" location="-63.08,49.49"/>
<path>-64.3,49.83 -63.23,49.3 -61.7,49.08 -62.88,49.68 -64.3,49.83</path>
</island>
<island>
<breakpoint name="Prince_Edward_Island" state="--" country="CN" location="-63.35,46.34"/>
<path>-63.48,46.22 -62.67,45.95 -61.97,46.43 -62.85,46.42 -63.62,46.55 -64,47.05 -64.4,46.65 -63.48,46.22</path>
</island>
</islandBreakpoints>

View file

@ -0,0 +1,147 @@
PGEN - Product Generation
Product Generation, or PGEN, is the set of tools and techniques that allows the forecaster to draw and edit meteorological objects for creating graphical, text-based, and gridded products.
Upon entering PGEN, the user should choose what type of activity they intend to develop. Multiple activities may be managed simultaneously. Activities could be easily pre-defined. For now, each activity could have its own configurable PGEN palette, settings table, layers, save mode and products it could generate.
Configure PGEN Activities
Using the PGEN Activities is a convenient way for the user to create and customize his own tools for using PGEN. An PGEN activity could be identified by a combination of type and an optional subtype, or by an unique alias. Once created, the user could start a specific activity with a customized PGEN palette, pre-populated layers, pre-defined save mode, and more. Here is the way to do it:
1. Click on the CAVE main menu "Tools", then select "Configure PGEN Activity" to start the configuration dialog
2. The dialog always starts with "New" type with only a few buttons pre-selected and colored blue. All pre-defined activity types defined in "productTypes.xml" are loaded in the pull-down menu after "New", and subtypes within a given type will be loaded under "Subtype" menu. CAVE first look for "productTypes.xml" in the $HOME/caveData/etc/user/jwu/ncep/pgen; if not found, look in the Desk, Site and finally in the Base.
3. Create a new activity - there are two ways to create a new PGEN activity:
(1). Select "New" -> type a name and optionally a subtype name and/or alias -> click "Add". Then continue to configure PGEN palette, layers , save mode, as well as products. Remember to click "Apply" to save your changes when switching from one page to anther page..
(2). Select an existing activity -> edit its selections -> give a new type name -> Click "Apply".
Note than the new activity name cannot be any variations of "New" and the name of any existing activities.
4. Edit an existing activity: select the activity through its type and subtype, edit its configurations and "Apply".
5. Delete an existing activity: select the activity, click "Delete" and confirm it. Note, once an activity is deleted, you cannot get it back (you have to re-create it).
6. Exit the configuration: click either "Ok" or "Close". "Ok" will save the changes to the current selected activity (if it is "New" and no type name is given, then no save). "Close" will not save changes. Upon exit, the PGEN palette will be reset to its default status.
7. Configure palette: click "Palette" tab -> select desired controls, actions, classes -> click on selected class button to see and select the objects for that class.
8. Define layers: click "Layer" tab -> give a name -> select its display mode, color mode (all colors or mono color), color, and filled mode -> Click "Apply". Defined layers will show up in the lower panel. You can click on a layer name button to switch to it and edit its attributes. The green "Delete" button allows you to delete the current layer. After 'Delete" a layer, you need to click "Apply" button at the bottom to confirm it.
9. Edit an activity's layers: Select the activity -> click "Layer" tab -> edit the layers -> Click "Apply".
10. Define save mode: click "Save" tab -> define default file to save this product -> select if you want the layers to be saved individually -> Click "Apply",
11. Notes:
(1) When switching between activities by selecting from the pull-down menu, the selected controls/actions/classes on the "Palette" page will be highlighted as "blue" while those unselected will be colored "grey". The PGEN palette will be updated with only selected buttons.
(2) There are a few controls/actions are always selected (cannot be unselected) and always show up for all activities - it is controlled by the "alwayVisible" attribute in the PGEN plugin.xml. You can either set it to "false" or delete it if you do want to select/unselect a button in the configuration dialog.
(3) Select a class: click the check box to select then click the activated class name button to display/select the objects within that class (by default, all objects are selected for that class). Notice that the title of the object group will be the name of the clicked class.
Activity Management Center
Multiple PGEN activities could be managed through the Activity Management Center as following:
1. Start an activity - there are two ways to start an activity:
(1) Default: Click the "Start" button on the PGEN toolbar to activate the default activity management center.
(2) Quick: Click the little triangle at the right of the "Start" button to see all pre-defined activities and select one of the them to start the Activity Management Center. All definitions for that activity will be populated for you.
2. Add a new activity: Click "New" and a activity attribute dialog pops up. Select an activity and optionally enter a name for it and click "Accept".
3. Edit an activity's attribute (name, type, save layers, output file name, etc.): first click an activity's name button to make it active, then click again to pop up the product attribute window.
4. Delete an activity: Click "Delete", the current activity is deleted. (if "Delete" is not shown, click ">>" at the bottom to expand the dialog).
5. Display/Hide an activity: click the check box after the activity name.
6. Change an activity to another activity: select from the activity pull-down menu to select a new activity. Empty existing layers will be removed. If an existing layer has the same name as one defined in the new activity, the layer' attributes will be updated. Layers in the new activity with different names than existing layers' are attached as new layers.
7. Layering - the lower part functions the same as the legacy layering control for the active activity. However, if layers are predefined for that activity in its "layer", those layers and their attributes are populated here. You can add new layers or editing pre-defined layers.
8. Exit activity management - Click "Exit", you will first be asked to save the activities. After confirmation, all activities will be wiped off and the PGEN palette will be reset to its default state.
9. Save current activity - click "Save" or "Save As" to open the file window to save. If the current activity has not been saved before, its pre-configured path and filename will be populated as the default. Once an activity has been saved once, "Save" will always save it to its last-saved file.
10. Save all activities - click "Save All". If an activity has not been saved before, it will be save to its pre-configured file, otherwise it will be saved to its last-saved file.
11. Open an saved activity - Click "Open" on PGEN palette. Select an activity file with one of three modes. If the file has at least one non-Default activity, the activity management center will be activated automatically.
(1) "Add" - Empty "Default" activity is removed (if exists). Then the activity in the selected file is added as a separate activity.
(2) "Replace" - The active activity is replaced by the activity in the selected file.
(3) "Append" - Empty "Default" activity is removed (if exists). If there is only ONE layer in the incoming activity, its contents is combined into the active layer. If there are more than one layer in the incoming activity, we will first try to match the active layer with the incoming layers by this order: a. a layer with the same name as the active layers'; b. a "Default" layer. All other layers in the incoming activity will be matched against the layers in the active activity by the layer's name. If no match found, the incoming layer is attached as a separate layer.
12. Notes:
(1) Each activity file can have multiple layers and multiple activities can be managed at the same time.
(2) You can only work on one activity and one layer at a time (active activity's active layer).
(3) Default activity: If an activity is a non-existing, "Default" is used. (E.g., create an activity with one existing activity and later that activity is deleted from the "productTypes.xml").
(4) How does the new activity management interacts with the legacy layering mechanism?
The activity management supersedes the layering control (layering is a built-in within the new activity management dialog). However, you can activate the layering control any time - it will close the activity management and start the layering dialog on the current activity that is last set before the activity management dialog closes.
(5) How does the new activity management tool simulates the legacy NMAP Product Generation environment?
Simply putting, the legacy NMAP Product Generation environment is the simplest special case of the new activity management tool - with only one "Default" activity that has only one "Default" layer works behind the scene. So without activating the tool explicitly ("Start" or open an activity file with a non-default activity), everything works the same way as in the legacy PGEN.
Open Legacy Layer Product File LPF in CAVE
The Layer Product File (*.lpf) created in NMAP2 or through pre-processing scripts could be opened in CAVE with the following steps:
1. First convert the input VGF files specified for the layers in the LPF into new PGEN xml format using "vgfconverter".
2. Edit the LPF file make sure the input file for each layer has the correct path (full path is preferred) - by default, we will try to first find them under the directory corresponding to the activity specified in LPF; if not found, then we search under the same directory where this LPF exists.
3. Specify the activity for this LPF file by adding the following to the LPF file (manually or through script)
<activitity alias> alias
or
<activitity type> type
<activitity subtype> subtype
If both are presented, alias will have higher priority.
4. The activity could also be specified when converting VGF file into PGEN xml file such as "vgfconverter a.vgf a.xml "activity type" ["activity subtype"]". So if you do not specify activity in LPF file, the activity will be the activity type in the first non-Default files found in the layers.
Save and Storage of PGEN Activity Files
In the new CAVE PGEN, the files are designed to be saved and stored in a configured place for easy access. A PGEN base directory $PGEN_OPR should be defined either in .cshrc or cave.sh. By default, it would be the user's home directory. It could also be set up in the CAVE "File"->Preferences...->"NCEP"->"PGEN". A PGEN activity's files will be saved under this base directory with its own sub-directory structure as:
$PGEN_OPR/"activity type"/xml
Only activity type is used here regardless of the activity's subtype - so activities with the same type but different subtypes will be saved under the same directory but will be distinguished by the file names. For "Default" type, it will be directly saved under $PGEN_OPR. For now, the file name will use the template:
"[activity name]"."activity type"."[activity subtype].DDMMYYYY.HH.xml
The activity name only appears when it is different from the activity type.
The template for each layer will be:
"[activity name]"."activity type"."[activity subtype].DDMMYYYY.HH.."layer name".xml
When trying to open a file, each activity will be listed as a directory in the GUI so it is easy for the user to select a desired directory(activity) and then a file.
Note that the user can always browse and try to save to different locations other than the one configured. But then it is upon the user to manage those file locations.

View file

@ -0,0 +1,48 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<TCAAttributeInfo>
<issuingStatus>
<entry>Experimental</entry>
<entry>Test</entry>
<entry>Operational</entry>
<entry>Experimental Operational</entry>
</issuingStatus>
<stormTypes>
<entry>Hurricane</entry>
<entry>Tropical Storm</entry>
<entry>Tropical Depression</entry>
<entry>Subtropical Storm</entry>
<entry>Subtropical Depression</entry>
</stormTypes>
<basins>
<entry>Atlantic</entry>
<entry>E. Pacific</entry>
<entry>C. Pacific</entry>
<entry>W. Pacific</entry>
</basins>
<timeZones>
<entry>AST</entry>
<entry>EST</entry>
<entry>EDT</entry>
<entry>CST</entry>
<entry>CDT</entry>
<entry>PST</entry>
<entry>PDT</entry>
</timeZones>
<advisorySeverity>
<entry>Tropical Storm</entry>
<entry>Hurricane</entry>
</advisorySeverity>
<advisoryTypes>
<entry>Watch</entry>
<entry>Warning</entry>
</advisoryTypes>
<breakpointTypes>
<entry>Official</entry>
<entry>All</entry>
</breakpointTypes>
<geographyTypes>
<entry>None</entry>
<entry>Islands</entry>
<entry>Water</entry>
</geographyTypes>
</TCAAttributeInfo>

View file

@ -0,0 +1,147 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!--
This file contains a list of Water Breakpoints that can be specified for Tropical
Cyclone Watches and Warnings. The information for each Water breakpoint is included
in a <waterway> tag. The <waterway> tag must contain one <breakpoint> tag, one or more <path>
tags, and may contain an optional <landZones> tag.
The <breakpoint> tag is used to identify a unique breakpoint and has required attributes:
name, state, country, and location. The value of the "name" attribute must be unique among
all of the breakpoints.
The <path> tags are used to specify the longitude/latitude coordinate pairs used to draw a
line path depicting the geographic area covered by a watch
or warning for the breakpoint. Coordinate pairs must be specified with east longitude first,
then latitude separated by a comma. Any number of coordinate pairs can be used in the path,
and they should be separated by a "space". Multiple <path> tags can be used to draw separate
line paths. Note that if the last coordinate pair is the same as the first within any <path>
tag, the coordinate pairs are treated as a closed polygon, and the area of the polygon will
be filled when displayed.
The <landZone> tag is optional for each breakpoint, and it is used to specify any
forecast zones associated with the breakpoint. If specified, these land zones will
be included in the UGC group of a Tropical Cyclone VTEC (TCV) product, if there is
a watch/warning issued for the associated breakpoint.
-->
<waterBreakpoints>
<waterway>
<breakpoint name="Florida_Bay" state="FL" country="US" location="-80.9,24.95"/>
<path>-81.08,25.11 -81.25,24.67 -80.76,24.84 -80.43,25.2 -81.08,25.11</path>
</waterway>
<waterway>
<breakpoint name="Lake_Maurepas" state="LA" country="US" location="-90.54,30.25"/>
<path>-90.49,30.34 -90.44,30.26 -90.54,30.17 -90.57,30.25 -90.49,30.34</path>
<landZones>LAZ049 LAZ050 LAZ057</landZones>
</waterway>
<waterway>
<breakpoint name="Lake_Okeechobee" state="FL" country="US" location="-80.8,26.95"/>
<path>-81.12,26.9 -80.8,27.21 -80.62,26.92 -80.73,26.7 -81.12,26.9</path>
</waterway>
<waterway>
<breakpoint name="Pamlico_Sound" state="NC" country="US" location="-75.85,35.35"/>
<path>-75.65,35.45 -76.35,35.1 -76.47,35.18 -75.77,35.55 -75.67,35.8 -75.65,35.45</path>
<landZones>NCZ104 NCZ047 NCZ081 NCZ080 NCZ094 NCZ093 NCZ095</landZones>
</waterway>
<waterway>
<breakpoint name="North_Pamlico_Sound" state="NC" country="US" location="-76.04,35.26"/>
<path>-75.65,35.45 -76.35,35.1</path>
<landZones>NCZ047 NCZ080 NCZ081</landZones>
</waterway>
<waterway>
<breakpoint name="South_Pamlico_Sound" state="NC" country="US" location="-76.04,35.24"/>
<path>-75.65,35.45 -76.35,35.1</path>
<landZones>NCZ093 NCZ094 NCZ095</landZones>
</waterway>
<waterway>
<breakpoint name="Albemarle_Sound" state="NC" country="US" location="-76,36.05"/>
<path>-75.75,35.9 -76.5,36 -75.9,36.11 -75.75,35.9 -75.75,35.9</path>
<landZones>NCZ015 NCZ016 NCZ030 NCZ031 NCZ032 NCZ017 NCZ045 NCZ046 NCZ047 NCZ103</landZones>
</waterway>
<waterway>
<breakpoint name="East_Albemarle_Sound" state="NC" country="US" location="-76.35,36.05"/>
<path>-75.75,35.9 -75.75,35.9 -75.75,35.9</path>
<landZones>NCZ015 NCZ016 NCZ017 NCZ046 NCZ047</landZones>
</waterway>
<waterway>
<breakpoint name="Chesapeake_Bay_New_Point_Comfort" state="VA" country="US" location="-76.28,37.3"/>
<path>-76.26,37.3 -76,37.3 -75.95,36.9 -76.38,36.93 -76.28,37.3</path>
<landZones>VAZ091 VAZ093 VAZ094 VAZ095 VAZ096 VAZ097 VAZ098</landZones>
</waterway>
<waterway>
<breakpoint name="Chesapeake_Bay_Windmill_Point" state="VA" country="US" location="-76.28,37.61"/>
<path>-76.26,37.61 -75.9,37.61 -76,37.3 -76.28,37.3 -76.28,37.61</path>
<landZones>VAZ084 VAZ085 VAZ086</landZones>
</waterway>
<waterway>
<breakpoint name="Chesapeake_Bay_Smith_Point" state="VA" country="US" location="-76.24,37.89"/>
<path>-76.22,37.89 -75.7,37.89 -75.9,37.61 -76.28,37.61 -76.24,37.89</path>
<landZones>VAZ077 VAZ078</landZones>
</waterway>
<waterway>
<breakpoint name="Chesapeake_Bay_Drum_Point" state="MD" country="US" location="-76.1,38.1"/>
<path>-76.42,38.32 -76.03,38.32 -75.7,37.89 -76.24,37.89 -76.42,38.32</path>
<landZones>MDZ017 MDZ021 MDZ022 MDZ023 MDZ019 MDZ020</landZones>
</waterway>
<waterway>
<breakpoint name="Chesapeake_Bay_North_Beach" state="MD" country="US" location="-76.4,38.5"/>
<path>-76.53,38.7 -76.22,38.7 -76.03,38.32 -76.42,38.32 -76.53,38.7</path>
<landZones>MDZ018 MDZ019 MDZ015 MDZ020</landZones>
</waterway>
<waterway>
<breakpoint name="Chesapeake_Bay_Sandy_Point" state="MD" country="US" location="-76.4,38.85"/>
<path>-76.4,39.02 -76.22,39.02 -76.22,38.7 -76.53,38.7 -76.4,39.02</path>
<landZones>MDZ014 MDZ012 MDZ015</landZones>
</waterway>
<waterway>
<breakpoint name="Chesapeake_Bay_Pooles_Island" state="MD" country="US" location="-76.35,39.15"/>
<path>-76.27,39.29 -76.22,39.02 -76.4,39.02 -76.27,39.29</path>
<landZones>MDZ008 MDZ011 MDZ012</landZones>
</waterway>
<waterway>
<breakpoint name="Chesa_Bay_North_of_Pooles_Islnd" state="MD" country="US" location="-76.1,39.4"/>
<path>-76.27,39.29 -76.03,39.45</path>
<landZones>MDZ007 MDZ008 MDZ012</landZones>
</waterway>
<waterway>
<breakpoint name="Tidal_Potomac_Cobb_Island" state="MD" country="US" location="-76.6,38.15"/>
<path>-76.84,38.26 -76.33,38</path>
<landZones>MDZ017 VAZ075 VAZ077</landZones>
</waterway>
<waterway>
<breakpoint name="Tidal_Potomac_Indian_Head" state="MD" country="US" location="-77.1,38.4"/>
<path>-77.15,38.61 -77.25,38.38 -77,38.45 -76.84,38.26</path>
<landZones>MDZ016 VAZ057 VAZ055 VAZ052 VAZ075</landZones>
</waterway>
<waterway>
<breakpoint name="Tidal_Potomac_Key_Bridge" state="MD" country="US" location="-77.05,38.8"/>
<path>-77.07,38.89 -77.15,38.61</path>
<landZones>DCZ001 VAZ054 VAZ053 MDZ013</landZones>
</waterway>
<waterway>
<breakpoint name="Delaware_Bay_South_Sl_B_to_E_Pt" state="DE" country="US" location="-75.3,38.91"/>
<path>-75.3,38.92 -75.02,39.2 -74.9,39.1 -75.16,38.8 -75.3,38.92</path>
<landZones>DEZ003 NJZ023</landZones>
</waterway>
<waterway>
<breakpoint name="Delaware_Bay_North_Sl_B_to_E_Pt" state="DE" country="US" location="-75.25,39.1"/>
<path>-75.3,39.2 -75.02,39.2 -75.3,38.92 -75.3,39.2</path>
<landZones>DEZ001 DEZ002 NJZ016 NJZ021</landZones>
</waterway>
<waterway>
<breakpoint name="Nihoa_to_French_Frigate_Shoals" state="HI" country="US" location="-161.92,23.06"/>
<path>-161.92,23.06 -166.27,23.86</path>
</waterway>
<waterway>
<breakpoint name="French_Frigate_Shoals_to_Maro" state="HI" country="US" location="-166.27,23.86"/>
<path>-166.27,23.86 -170.5,25.33</path>
</waterway>
<waterway>
<breakpoint name="Maro_Reef_to_Lisianski_Island" state="HI" country="US" location="-170.5,25.33"/>
<path>-170.5,25.33 -174,26.08</path>
</waterway>
<waterway>
<breakpoint name="Lisianski_Island_to_Pearl_Hermes" state="HI" country="US" location="-174,26.08"/>
<path>-174,26.08 -175.83,27.83</path>
</waterway>
</waterBreakpoints>

View file

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
This table contains the airmet cycle and corresponding issue times for
use with the GFA element and the airmet text reports.
Time Setting Cycle Time Issue Time
-->
<airmetcycle>
<element cycle="02" issue="0145"/>
<element cycle="08" issue="0745"/>
<element cycle="14" issue="1345"/>
<element cycle="20" issue="1945"/>
<element cycle="03" issue="0245"/>
<element cycle="09" issue="0845"/>
<element cycle="15" issue="1445"/>
<element cycle="21" issue="2045"/>
<element timezone="DEFAULT" delayMin="15"/>
</airmetcycle>

View file

@ -0,0 +1,20 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!-- Copied from ccfp.tbl
This table specifies the CCFP issue and valid time hours that appear in the
"CCFP" GUI when generating a CCFP text product.
The table format is as follows. Each row contains an issue time followed
by one or more valid times separated by semi-colons, ';'. The time is
specified as HH for hours from 00 to 23. The maximum number of issue
times and the maximum number of valid times per issue time is 20.
-->
<CcfpTimes>
<Time issue="1500" valid1="1700" valid2="1900" valid3="2100" />
<Time issue="1900" valid1="2100" valid2="2300" valid3="0100" />
<Time issue="2300" valid1="0100" valid2="0300" valid3="0500" />
<Time issue="0300" valid1="0500" valid2="0700" />
</CcfpTimes>

View file

@ -0,0 +1,131 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
This xml file is used to provide Contours attributes information, including
the parameter name, level, and forecast hour.
It is also used to select a list of symbols/markers that will show up
in the Contours attributes GUI for quick access. The first 15 symbols/markers
with their "quickAccess" flags as "true" will be used.
-->
<root>
<contoursInfo name="Parm" >
<label text="HGMT"/>
<label text="TEMP"/>
<label text="PRES"/>
</contoursInfo>
<contoursInfo name="Level">
<label text="1000"/>
<label text="850"/>
<label text="700"/>
<label text="500"/>
<label text="300"/>
<label text="200"/>
<label text="100"/>
</contoursInfo>
<contoursInfo name="ForecastHour" >
<label text="f000"/>
<label text="f006"/>
<label text="f012"/>
<label text="f018"/>
<label text="f024"/>
<label text="f030"/>
<label text="f036"/>
<label text="f042"/>
<label text="f048"/>
<label text="f054"/>
<label text="f060"/>
<label text="f066"/>
<label text="f072"/>
</contoursInfo>
<!-- The following are symbols and markers defined in pgen/plugin.xml.
Change the value of "quickAccess" to "true" if you want it to appear on the
Contours Attribute window for quick access. Don't change anything else!
If none of them is set to "true", "FILLED_HIGH_PRESSURE_H" and "FILLED_LOW_PRESSURE_L"
will appear on the GUI as the defaults.
-->
<contoursInfo name="QuickSymbols">
<!-- All available symbols -->
<object name="PRESENT_WX_088" quickAccess="false" label="Moderate Hail Showers" className="Symbol"/>
<object name="FILLED_HIGH_PRESSURE_H" quickAccess="true" label="High Presure H(filled)" className="Symbol"/>
<object name="FILLED_LOW_PRESSURE_L" quickAccess="true" label="Low Presure L(filled)" className="Symbol"/>
<object name="HIGH_PRESSURE_H" quickAccess="false" label="High Presure H" className="Symbol"/>
<object name="LOW_PRESSURE_L" quickAccess="false" label="Low Presure L" className="Symbol"/>
<object name="PRESENT_WX_005" quickAccess="false" label="Haze" className="Symbol"/>
<object name="PRESENT_WX_010" quickAccess="false" label="Light Fog" className="Symbol"/>
<object name="PRESENT_WX_045" quickAccess="false" label="Fog, Sky not discernible" className="Symbol"/>
<object name="PRESENT_WX_051" quickAccess="false" label="Continuous drizzle, slight at observation time" className="Symbol"/>
<object name="PRESENT_WX_056" quickAccess="false" label="Slight freezing drizzle" className="Symbol"/>
<object name="PRESENT_WX_061" quickAccess="false" label="Continuous rain" className="Symbol"/>
<object name="PRESENT_WX_063" quickAccess="false" label="Continuous moderate rain" className="Symbol"/>
<object name="PRESENT_WX_065" quickAccess="false" label="Continuous heavy rain" className="Symbol"/>
<object name="PRESENT_WX_066" quickAccess="false" label="Slight freezing rain" className="Symbol"/>
<object name="PRESENT_WX_071" quickAccess="false" label="Continuous Light Snow" className="Symbol"/>
<object name="PRESENT_WX_073" quickAccess="false" label="Moderate Snow" className="Symbol"/>
<object name="PRESENT_WX_075" quickAccess="false" label="Continuous Heavy Snow" className="Symbol"/>
<object name="PRESENT_WX_079" quickAccess="false" label="Ice pellets" className="Symbol"/>
<object name="PRESENT_WX_080" quickAccess="false" label="Slight rain shower" className="Symbol"/>
<object name="PRESENT_WX_085" quickAccess="false" label="Slight Snow Showers" className="Symbol"/>
<object name="PRESENT_WX_089" quickAccess="false" label="Slight Shower of Hail" className="Symbol"/>
<object name="PRESENT_WX_095" quickAccess="false" label="Slight or mod thunderstorm with rain" className="Symbol"/>
<object name="PRESENT_WX_105" quickAccess="false" label="Slight or Mod Thunderstorm with Snow" className="Symbol"/>
<object name="PRESENT_WX_201" quickAccess="false" label="Volcanic activity" className="Symbol"/>
<object name="TROPICAL_STORM_NH" quickAccess="true" label="Tropical Storm (Northern Hemisphere)" className="Symbol"/>
<object name="HURRICANE_NH" quickAccess="true" label="Hurricane (Northern Hemisphere)" className="Symbol"/>
<object name="TROPICAL_STORM_SH" quickAccess="false" label="Tropical Storm (Southern Hemisphere)" className="Symbol"/>
<object name="HURRICANE_SH" quickAccess="false" label="Hurricane (Southern Hemisphere)" className="Symbol"/>
<object name="STORM_CENTER" quickAccess="false" label="Storm Center" className="Symbol"/>
<object name="TROPICAL_DEPRESSION" quickAccess="true" label="Tropical Depression" className="Symbol"/>
<object name="TROPICAL_CYCLONE" quickAccess="true" label="Tropical Cyclone" className="Symbol"/>
<object name="FLAME" quickAccess="false" label="Flame" className="Symbol"/>
<object name="X_CROSS" quickAccess="false" label="X Cross" className="Symbol"/>
<object name="LOW_X_OUTLINE" quickAccess="false" label="LowX (outline)" className="Symbol"/>
<object name="LOW_X_FILLED" quickAccess="false" label="LowX (filled)" className="Symbol"/>
<object name="TROPICAL_STORM_NH_WPAC" quickAccess="false" label="Tropical Storm NH" className="Symbol"/>
<object name="TROPICAL_STORM_SH_WPAC" quickAccess="false" label="Tropical Storm SH" className="Symbol"/>
<object name="NUCLEAR_FALLOUT" quickAccess="false" label="Nuclear Fallout" className="Symbol"/>
<object name="LETTER_A_FILLED" quickAccess="false" label="Letter A filled" className="Symbol"/>
<object name="LETTER_C" quickAccess="false" label="Letter C" className="Symbol"/>
<object name="LETTER_C_FILLED" quickAccess="false" label="Letter C filled" className="Symbol"/>
<object name="LETTER_X" quickAccess="false" label="Letter X" className="Symbol"/>
<object name="LETTER_X_FILLED" quickAccess="false" label="Letter X filled" className="Symbol"/>
<object name="LETTER_N" quickAccess="false" label="Letter N" className="Symbol"/>
<object name="LETTER_N_FILLED" quickAccess="false" label="Letter N filled" className="Symbol"/>
<object name="30_KT_BARB" quickAccess="false" label="Thirty knot wind barb" className="Symbol"/>
<object name="LETTER_B" quickAccess="false" label="Letter B" className="Symbol"/>
<object name="LETTER_B_FILLED" quickAccess="false" label="Letter B filled" className="Symbol"/>
<object name="ICING_09" quickAccess="false" label="Light superstructure icing" className="Symbol"/>
<object name="ICING_10" quickAccess="false" label="Heavy superstructure icing" className="Symbol"/>
<object name="PAST_WX_09" quickAccess="false" label="Thunderstorm" className="Symbol"/>
<!-- All available Markers -->
<object name="PLUS_SIGN" quickAccess="false" label="Plus Sign" className="Marker"/>
<object name="OCTAGON" quickAccess="false" label="Octagon" className="Marker"/>
<object name="TRIANGLE" quickAccess="false" label="Triangle" className="Marker"/>
<object name="BOX" quickAccess="false" label="Box" className="Marker"/>
<object name="SMALL_X" quickAccess="false" label="Small X" className="Marker"/>
<object name="Z_WITH_BAR" quickAccess="false" label="Z" className="Marker"/>
<object name="X_WITH_TOP_BAR" quickAccess="false" label="Bar X" className="Marker"/>
<object ame="DIAMOND" quickAccess="false" label="Diamond" className="Marker"/>
<object name="UP_ARROW" quickAccess="false" label="Up Arrow" className="Marker"/>
<object name="Y" quickAccess="false" label="Y" className="Marker"/>
<object name="BOX_WITH_DIAGONALS" quickAccess="false" label="Box X" className="Marker"/>
<object name="ASTERISK" quickAccess="false" label="Asterisk" className="Marker"/>
<object name="HOURGLASS_X" quickAccess="false" label="Hourglass" className="Marker"/>
<object name="STAR" quickAccess="false" label="Star" className="Marker"/>
<object name="DOT" quickAccess="false" label="Dot" className="Marker"/>
<object name="LARGE_X" quickAccess="false" label="Large X" className="Marker"/>
<object name="FILLED_OCTAGON" quickAccess="false" label="Filled Octagon" className="Marker"/>
<object name="FILLED_TRIANGLE" quickAccess="false" label="Filled Triangle" className="Marker"/>
<object name="FILLED_BOX" quickAccess="false" label="Filled Box" className="Marker"/>
<object name="FILLED_DIAMOND" quickAccess="false" label="Filled Diamond" className="Marker"/>
<object name="FILLED_STAR" quickAccess="false" label="Filled Star" className="Marker"/>
<object name="MINUS_SIGN" quickAccess="false" label="Minus Sign" className="Marker"/>
</contoursInfo>
</root>

View file

@ -0,0 +1,27 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
This xml file is to be used for filter to filt out the hours.
the 'prefix' attribute is used for the name of the output outlook file.
-->
<root>
<filterHour name="HOUR" prefix="" >
<label text="0"/>
<label text="0+"/>
<label text="3"/>
<label text="3+"/>
<label text="6"/>
<label text="9"/>
<label text="12"/>
<label text="0-0"/>
<label text="3-3"/>
<label text="6-6"/>
<label text="0-3"/>
<label text="0-6"/>
<label text="3-6"/>
<label text="6-9"/>
<label text="6-12"/>
<label text="9-12"/>
<label text="AIRM"/>
<label text="OTLK"/>
</filterHour>
</root>

View file

@ -0,0 +1,266 @@
<?xml version="1.0" encoding="UTF-8"?>
<root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="gfa.xsd">
<!--
This xml file is to be used for gui configuration for GFA elements.
The data originally came from gfa.tbl and setting.tbl
-->
<!--
Hazard attributes:
name - the hazard type
snapshot - the color of the snapshot gfa elements ( forecast hour tied to cycle), the entries with "Z". Look for fcstHr definitions below
smear - the color of the smear gfa element (from 0 to 6 hours)
outlook - the color of the outlook gfa elements (from 6 to 12 hours)
other - the color of the other element
format - "FROM -> Format All" will not be performed is this attribute is false. true by default
The colors must be defined at the bottom of this document.
Hazard elements:
checkbox. Attributes: "label" - the label placed in front of the checkbox;
"checked" - whether the checkbox is cheked by default
popup. Attributes: "label" - the label in front of the button
Values: checkbox
text. Required attributes: type ("input" for input textbox or "type" for a textbox to store selected
types from other checkboxes/dropdowns; max one such text per hazard), width, height, label, and "required".
Optional Attributes: scrollable (false by default), editable (true by default),
characterType ("digitsOnly" or "digitsAndSlash"), characterLimit (a max number of characters )
dropdown. Attributes: "label" - the label placed in front of this text,
Values: value
-->
<hazard name="IFR" snapshot="red" smear="violet" outlook="cyan" other="red" category="SIERRA">
<checkbox label="CIG BLW 010" type="type" checked="false"/>
<popup label="VIS BLW 3SM">
<checkbox label="PCPN"/>
<checkbox label="BR"/>
<checkbox label="FG"/>
<checkbox label="HZ"/>
<checkbox label="FU"/>
<checkbox label="BLSN"/>
</popup>
<text type="type" width="200" height="25" required="true" scrollable="true" editable="false" category="NONE"/>
</hazard>
<hazard name="MVFR" snapshot="cyan" smear="cyan" outlook="cyan" other="cyan" format="false" category="NONE">
<checkbox label="CIG 010-030" type="type" checked="false"/>
<popup label="VIS BLW 3SM">
<checkbox label="BR"/>
<checkbox label="FG"/>
<checkbox label="HZ"/>
<checkbox label="FU"/>
<checkbox label="BLSN"/>
</popup>
<text type="type" width="200" height="25" scrollable="true" editable="false"/>
</hazard>
<hazard name="CLD" snapshot="green" smear="green" outlook="green" other="green" format="false" category="NONE">
<text type="input" width="100" height="18" label="Bottom" required="true" scrollable="false" editable="true" characterType="digitsOnly" characterLimit="3" padWithZeros="3"/>
<dropdown label="Coverage">
<value>SCT</value>
<value>BKN</value>
<value>OVC</value>
</dropdown>
</hazard>
<hazard name="CLD_TOPS" snapshot="green" smear="green" outlook="green" other="green" format="false" category="NONE">
<text type="input" width="100" height="18" label="Top" required="true" scrollable="false" editable="true" characterType="digitsOnly" characterLimit="3" padWithZeros="3"/>
<checkbox label="LYR" checked="false"/>
</hazard>
<hazard name="MT_OBSC" snapshot="yellow" smear="violet" outlook="cyan" other="yellow" category="SIERRA">
<text type="input" width="100" height="18" label="Top/Bottom" scrollable="false" editable="true" characterType="digitsAndSlash" characterLimit="7" padWithZeros="3"/>
<popup label="MTNS OBSC BY">
<checkbox label="CLDS"/>
<checkbox label="PCPN"/>
<checkbox label="BR"/>
<checkbox label="FG"/>
<checkbox label="FU"/>
<checkbox label="HZ"/>
</popup>
<text type="type" width="200" height="25" required="true" scrollable="true" editable="false"/>
</hazard>
<hazard name="ICE" snapshot="green" smear="violet" outlook="cyan" other="green" category="ZULU">
<fzlText width="100" height="18" label="FZL Top/Bottom" scrollable="false" characterType="digitsAndSlash" characterLimit="7" padWithZeros="3"/>
<dropdown label="Type">
<value>RIME/MXD ICGICIP</value>
<value>RIME ICGIC</value>
<value>CLR ICGIP</value>
</dropdown>
</hazard>
<hazard name="TURB" snapshot="blue" smear="blue" outlook="blue" other="blue" category="TANGO">
<text type="input" width="100" height="18" label="Top/Bottom" required="true" scrollable="false" editable="true" characterType="digitsAndSlash" characterLimit="7" padWithZeros="3"/>
<dropdown label="DUE TO">
<value></value>
<value>STG LOW LVL WNDS</value>
<value>UPR TROF AND WIND SHEAR ASSOC WITH JTST</value>
<value>STG LOW LVL WNDS AND CDFNT MOVG THRU AREA</value>
<value>STG LOW LVL WNDS OVR RUFF TRRN</value>
<value>STG LOW/MID LVL WNDS</value>
<value>UPR TROF</value>
<value>WIND SHEAR ASSOC WITH JTST</value>
<value>MTN WAVE ACT</value>
<value>WIND SHEAR ASSOC WITH JTST AND MTN WAVE ACT</value>
</dropdown>
</hazard>
<hazard name="TURB-HI" snapshot="pink" smear="violet" outlook="cyan" other="pink" category="TANGO">
<text type="input" width="100" height="18" label="Top/Bottom" required="true" scrollable="false" editable="true" characterType="digitsAndSlash" characterLimit="7" padWithZeros="3"/>
<dropdown label="DUE TO">
<value></value>
<value>STG LOW LVL WNDS</value>
<value>UPR TROF AND WIND SHEAR ASSOC WITH JTST</value>
<value>STG LOW LVL WNDS AND CDFNT MOVG THRU AREA</value>
<value>STG LOW LVL WNDS OVR RUFF TRRN</value>
<value>STG LOW/MID LVL WNDS</value>
<value>UPR TROF</value>
<value>WIND SHEAR ASSOC WITH JTST</value>
<value>MTN WAVE ACT</value>
<value>WIND SHEAR ASSOC WITH JTST AND MTN WAVE ACT</value>
</dropdown>
</hazard>
<hazard name="TURB-LO" snapshot="lightBlue" smear="violet" outlook="cyan" other="lightBlue" category="TANGO">
<text type="input" width="100" height="18" label="Top/Bottom" required="true" scrollable="false" editable="true" characterType="digitsAndSlash" characterLimit="7" padWithZeros="3"/>
<dropdown label="DUE TO">
<value></value>
<value>STG LOW LVL WNDS</value>
<value>UPR TROF AND WIND SHEAR ASSOC WITH JTST</value>
<value>STG LOW LVL WNDS AND CDFNT MOVG THRU AREA</value>
<value>STG LOW LVL WNDS OVR RUFF TRRN</value>
<value>STG LOW/MID LVL WNDS</value>
<value>UPR TROF</value>
<value>WIND SHEAR ASSOC WITH JTST</value>
<value>MTN WAVE ACT</value>
<value>WIND SHEAR ASSOC WITH JTST AND MTN WAVE ACT</value>
</dropdown>
</hazard>
<hazard name="SFC_WND" snapshot="orange" smear="violet" outlook="cyan" other="orange" category="TANGO">
<dropdown label="Speed">
<value>30KT</value>
<value>20KT</value>
</dropdown>
</hazard>
<hazard name="SIGWX" snapshot="green" smear="green" outlook="green" other="green" format="false" category="NONE"/>
<hazard name="CIG_CLD" snapshot="green" smear="green" outlook="green" other="green" format="false" category="NONE"/>
<hazard name="TCU_CLD" snapshot="green" smear="green" outlook="green" other="green" format="false" category="NONE"/>
<hazard name="MTW" snapshot="green" smear="green" outlook="green" other="green" format="false" category="NONE">
<text type="input" width="100" height="18" label="Top/Bottom" required="true" scrollable="false" editable="true" characterType="digitsAndSlash" characterLimit="7" padWithZeros="3"/>
<dropdown label="Intensity">
<value>MOD</value>
</dropdown>
</hazard>
<hazard name="FZLVL" snapshot="llBlue" smear="lightBlue" outlook="lightBlue" other="llBlue" format="false" category="ZULU">
<dropdown label="Contour">
<value>Open</value>
<value>Closed</value>
</dropdown>
<dropdown label="Level">
<value>SFC</value>
<value>040</value>
<value>080</value>
<value>120</value>
<value>160</value>
</dropdown>
<text type="input" width="100" height="18" label="FZL RANGE" scrollable="false" editable="true"/>
</hazard>
<hazard name="M_FZLVL" snapshot="cyan" smear="violet" outlook="cyan" other="cyan" category="ZULU">
<text type="input" width="100" height="18" label="Top/Bottom" required="true" scrollable="false" editable="true" characterType="digitsAndSlash" characterLimit="7" padWithZeros="3"/>
</hazard>
<hazard name="LLWS" snapshot="cyan" smear="violet" outlook="cyan" other="cyan" category="TANGO">
</hazard>
<hazard name="TS" snapshot="green" smear="green" outlook="green" other="green" format="false" category="NONE">
<text type="input" width="100" height="18" label="Top/Bottom" required="true" scrollable="false" editable="true" characterType="digitsAndSlash" characterLimit="7" padWithZeros="3"/>
<dropdown label="Category">
<value></value>
<value>EMBD</value>
<value>OBSC</value>
</dropdown>
<dropdown label="Frequency">
<value>ISOL</value>
<value>OCNL</value>
</dropdown>
<checkbox label="GR" checked="false"/>
</hazard>
<!--
"Fcst Hr" dropdown values.
4 types: snapshot, smear, outlook, and other. Hazard + type define the color. All the attributes are required .
example: "3 Z" will be displayed as "3 17Z" in the "Fcst Hr" dropdown box if cycle is set to 14.
-->
<fcstHr name="0-6" type="smear" linewidth="3"/>
<fcstHr name="0 Z" type="snapshot" linewidth="2"/>
<fcstHr name="3 Z" type="snapshot" linewidth="2"/>
<fcstHr name="6 Z" type="snapshot" linewidth="2"/>
<fcstHr name="9 Z" type="snapshot" linewidth="2"/>
<fcstHr name="12 Z" type="snapshot" linewidth="2"/>
<fcstHr name="0-0" type="smear" linewidth="3"/>
<fcstHr name="3-3" type="smear" linewidth="3"/>
<fcstHr name="6-6" type="smear" linewidth="3"/>
<fcstHr name="9-9" type="outlook" linewidth="4"/>
<fcstHr name="12-12" type="outlook" linewidth="4"/>
<fcstHr name="0-3" type="smear" linewidth="3"/>
<fcstHr name="3-6" type="smear" linewidth="3"/>
<fcstHr name="6-9" type="outlook" linewidth="4"/>
<fcstHr name="6-12" type="outlook" linewidth="4"/>
<fcstHr name="9-12" type="outlook" linewidth="4"/>
<fcstHr name="Other" type="other" linewidth="2"/>
<!--
"Tag" dropdown must contain "New", other values are populated dynamically.
-->
<tag name="New"/>
<!--
"Desk" dropdown values.
-->
<desk name="W"/>
<desk name="C"/>
<desk name="E"/>
<!--
"Issue Type" dropdown values.
-->
<issueType name="NRML"/>
<issueType name="NEW"/>
<issueType name="COR"/>
<issueType name="AMD"/>
<issueType name="CAN"/>
<!--
Color definitions for hazard types. Each hazard type has 4 attributes,
Example: element <hazard name="LLWS" snapshot="cyan" smear="violet" outlook="cyan" other="cyan"> will use cyan
for snapshot, outlook, and other gfa elements; and violet for smear ones.
-->
<color>
<value name="" r="137" g="104" b="205"/>
<value name="violet" r="137" g="104" b="205"/>
<value name="red" r="255" g="0" b="0"/>
<value name="yellow" r="255" g="255" b="0"/>
<value name="cyan" r="0" g="255" b="255"/>
<value name="green" r="0" g="255" b="0"/>
<value name="blue" r="0" g="0" b="255"/>
<value name="lightBlue" r="30" g="144" b="255"/>
<value name="llBlue" r="0" g="178" b="238"/>
<value name="pink" r="255" g="0" b="255"/>
<value name="orange" r="255" g="127" b="0"/>
</color>
<!--
These texts will be displayed in the gfa textboxs as following (order matters).
Example: element <value hazard="IFR" originalText="VIS BLW 3SM" displayAs="VIS"/> shows that for IFR hazard types
text "VIS BLW 3SM" will not be fully displayed, but replaced with "VIS".
"ICONHERE" keyword will be replaced with the image, corresponding to this particular hazard and its settings.
-->
<displayText>
<value hazard="IFR" originalText="CIG BLW 010:VIS BLW 3SM " displayAs=""/>
<value hazard="IFR" originalText="CIG BLW 010" displayAs="CIG"/>
<value hazard="IFR" originalText="VIS BLW 3SM" displayAs="VIS"/>
<value hazard="MVFR" originalText="MVFR" displayAs=""/>
<value hazard="MVFR" originalText="CIG 010-030" displayAs="CIG,,BLW 030"/> <!-- ",," will insert a new line -->
<value hazard="MT_OBSC" originalText="MT_OBSC MTNS OBSC BY " displayAs="ICONHERE,,"/>
<value hazard="ICE" originalText="ICE" displayAs="ICONHERE,,"/>
<value hazard="TURB" originalText="TURB" displayAs="ICONHERE,,"/>
<value hazard="TURB-HI" originalText="TURB-HI" displayAs="ICONHERE,,"/>
<value hazard="TURB-LO" originalText="TURB-LO" displayAs="ICONHERE,,"/>
<value hazard="SFC_WND" originalText="SFC_WND" displayAs="ICONHERE,,,,"/>
<value hazard="M_FZLVL" originalText="M_FZLVL" displayAs="0°"/>
<!-- for all hazards -->
<value hazard="" originalText=":" displayAs=" "/>
<value hazard="" originalText="_" displayAs=" "/>
</displayText>
<gfaOtlkgenRatio>0.25</gfaOtlkgenRatio>
</root>

View file

@ -0,0 +1,134 @@
<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
<xs:element name="root">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" ref="hazard"/>
<xs:element maxOccurs="unbounded" ref="fcstHr"/>
<xs:element ref="tag"/>
<xs:element maxOccurs="unbounded" ref="desk"/>
<xs:element maxOccurs="unbounded" ref="issueType"/>
<xs:element ref="color"/>
<xs:element ref="displayText"/>
<xs:element ref="gfaOtlkgenRatio"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="hazard">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" ref="fzlText"/>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element ref="checkbox"/>
<xs:element ref="dropdown"/>
<xs:element ref="popup"/>
<xs:element ref="text"/>
</xs:choice>
</xs:sequence>
<xs:attribute name="category" use="required" type="xs:NCName"/>
<xs:attribute name="format" type="xs:boolean"/>
<xs:attribute name="name" use="required" type="xs:NCName"/>
<xs:attribute name="other" use="required" type="xs:NCName"/>
<xs:attribute name="outlook" use="required" type="xs:NCName"/>
<xs:attribute name="smear" use="required" type="xs:NCName"/>
<xs:attribute name="snapshot" use="required" type="xs:NCName"/>
</xs:complexType>
</xs:element>
<xs:element name="fzlText">
<xs:complexType>
<xs:attribute name="characterLimit" type="xs:integer"/>
<xs:attribute name="characterType" type="xs:NCName"/>
<xs:attribute name="height" use="required" type="xs:integer"/>
<xs:attribute name="label" use="required"/>
<xs:attribute name="padWithZeros" use="required" type="xs:integer"/>
<xs:attribute name="scrollable" type="xs:boolean"/>
<xs:attribute name="width" use="required" type="xs:integer"/>
</xs:complexType>
</xs:element>
<xs:element name="dropdown">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" ref="value"/>
</xs:sequence>
<xs:attribute name="label" use="required"/>
</xs:complexType>
</xs:element>
<xs:element name="popup">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" ref="checkbox"/>
</xs:sequence>
<xs:attribute name="label" use="required"/>
</xs:complexType>
</xs:element>
<xs:element name="text">
<xs:complexType>
<xs:attribute name="category" type="xs:NCName"/>
<xs:attribute name="characterLimit" type="xs:integer"/>
<xs:attribute name="characterType" type="xs:NCName"/>
<xs:attribute name="editable" type="xs:boolean"/>
<xs:attribute name="height" use="required" type="xs:integer"/>
<xs:attribute name="label"/>
<xs:attribute name="padWithZeros" type="xs:integer"/>
<xs:attribute name="required" type="xs:boolean"/>
<xs:attribute name="scrollable" type="xs:boolean"/>
<xs:attribute name="type" use="required" type="xs:NCName"/>
<xs:attribute name="width" use="required" type="xs:integer"/>
</xs:complexType>
</xs:element>
<xs:element name="fcstHr">
<xs:complexType>
<xs:attribute name="linewidth" use="required" type="xs:integer"/>
<xs:attribute name="name" use="required"/>
<xs:attribute name="type" use="required" type="xs:NCName"/>
</xs:complexType>
</xs:element>
<xs:element name="tag">
<xs:complexType>
<xs:attribute name="name" use="required" type="xs:NCName"/>
</xs:complexType>
</xs:element>
<xs:element name="desk">
<xs:complexType>
<xs:attribute name="name" use="required" type="xs:NCName"/>
</xs:complexType>
</xs:element>
<xs:element name="issueType">
<xs:complexType>
<xs:attribute name="name" use="required" type="xs:NCName"/>
</xs:complexType>
</xs:element>
<xs:element name="color">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" ref="value"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="displayText">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" ref="value"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="gfaOtlkgenRatio" type="xs:decimal"/>
<xs:element name="checkbox">
<xs:complexType>
<xs:attribute name="checked" type="xs:boolean"/>
<xs:attribute name="label" use="required"/>
<xs:attribute name="type" type="xs:NCName"/>
</xs:complexType>
</xs:element>
<xs:element name="value">
<xs:complexType mixed="true">
<xs:attribute name="b" type="xs:integer"/>
<xs:attribute name="displayAs"/>
<xs:attribute name="g" type="xs:integer"/>
<xs:attribute name="hazard"/>
<xs:attribute name="name"/>
<xs:attribute name="originalText"/>
<xs:attribute name="r" type="xs:integer"/>
</xs:complexType>
</xs:element>
</xs:schema>

View file

@ -0,0 +1,66 @@
!
! GRPHGD.TBL
!
! This table contains the identifiers for the CAVE->PGEN contours graph-to-grid
! processing and the associated "restore" tables.
!
! The first entry in this table will be the default presented to the user.
!
!*******************************************************************************
!
! Valid parameters within each RESTORE_FILENAME are:
!
! TEMPLATE - parse vgf filename for GPARM and date info
! (only PPPP_YYYYMMDDHHfFFF allowed at this time)
! GDOUTF - GRPHGD parameter output grid filename
! PATH - directory path to put GDFILE
! GFUNC - GRPHGD parameter name (eg, PMSL, P06I, etc.)
! GVCORD - GRPHGD parameter vertical coord name
! GLEVEL - GRPHGD parameter vertical coord level value
! GGLIMS - GRPHGD grid value limitations and control
! CNTRFL - GRPHGD Contour file
! KEYCOL - GRPHGD color key to control processing
! KEYLINE - GRPHGD line key to control processing
! OLKDAY - GRPHGD extended outlook day
! MAXGRD - GRPHGD maximum grids per file
! HISTGRD - GRPHGD flag for history grid creation
! CPYFIL - GRPHGD grid navigation specification
! PROJ - GRPHGD grid navigation specification
! GRDAREA - GRPHGD grid navigation specification
! KXKY - GRPHGD grid navigation specification
! ANLYSS - GRPHGD grid navigation specification
! CINT - Contour interval(s)
! LINE - Line color/type/width
!
! NOTES:
! 1) If a parameter is not listed, it's value will be blank, with the
! exception of LOCATION which will be "." (dot, the current directory).
! 2) If CPYFIL is specified, then PROJ, GRDAREA, KXKY and ANLYSS
! are ignored.
! 3) In VGF_TEMPLATE, the string "PPPP" overrides GPARM and may be up to
! 12 characters long; also, the following specify the date/time and
! forecast hour (exact number of characters):
! YY (or YYYY) - year
! MM - month
! DD - day
! HH - hour
! FFF - forecast hour
! 4) CINT and LINE are used to contour/display the grid in NMAP
!
!Notes for CAVE:
! 1) the user version of this table and the sub-tables listed here are
! placed under $HOME/caveData/etc/user/"your user name"/ncep/pgen
! 2) non-existing tables under the above directory are ignored.
!*******************************************************************************
!
!
!!
! Log:
! D.W.Plummer/NCEP 3/00
! J. Wu 10/11 updated for CAVE localization
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!
!NAME RESTORE_FILENAME
!
QPF_CED qpf.tbl
QPF_STR str.tbl

View file

@ -0,0 +1,450 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<linePatternList>
<patternEntry>
<patternId>DOUBLE_LINE</patternId>
<linePattern hasArrowHead="false" name="Double Line">
<patternSegment reverseSide="false" offsetSize="2" numberInArc="0" colorLocation="0" type="DOUBLE_LINE" length="1.0"/>
</linePattern>
</patternEntry>
<patternEntry>
<patternId>LINE_FILLED_CIRCLE_ARROW</patternId>
<linePattern arrowHeadType="FILLED" hasArrowHead="true" name="Line-Filled-Circle-Line with filled arrow head">
<patternSegment reverseSide="false" offsetSize="0" numberInArc="0" colorLocation="0" type="LINE" length="4.0"/>
<patternSegment reverseSide="false" offsetSize="0" numberInArc="8" colorLocation="0" type="CIRCLE_FILLED" length="4.0"/>
<patternSegment reverseSide="false" offsetSize="0" numberInArc="0" colorLocation="0" type="LINE" length="4.0"/>
</linePattern>
</patternEntry>
<patternEntry>
<patternId>FILLED_CIRCLES</patternId>
<linePattern hasArrowHead="false" name="Filled Circle">
<patternSegment reverseSide="false" offsetSize="0" numberInArc="8" colorLocation="0" type="CIRCLE_FILLED" length="4.0"/>
<patternSegment reverseSide="false" offsetSize="0" numberInArc="0" colorLocation="0" type="BLANK" length="2.0"/>
</linePattern>
</patternEntry>
<patternEntry>
<patternId>LINE_XX_LINE</patternId>
<linePattern hasArrowHead="false" name="Line-2Xs-Line">
<patternSegment reverseSide="false" offsetSize="0" numberInArc="0" colorLocation="0" type="LINE" length="4.0"/>
<patternSegment reverseSide="false" offsetSize="0" numberInArc="0" colorLocation="0" type="BLANK" length="2.0"/>
<patternSegment reverseSide="false" offsetSize="2" numberInArc="0" colorLocation="0" type="X_PATTERN" length="4.0"/>
<patternSegment reverseSide="false" offsetSize="0" numberInArc="0" colorLocation="0" type="BLANK" length="2.0"/>
<patternSegment reverseSide="false" offsetSize="2" numberInArc="0" colorLocation="0" type="X_PATTERN" length="4.0"/>
<patternSegment reverseSide="false" offsetSize="0" numberInArc="0" colorLocation="0" type="BLANK" length="2.0"/>
<patternSegment reverseSide="false" offsetSize="0" numberInArc="0" colorLocation="0" type="LINE" length="4.0"/>
</linePattern>
</patternEntry>
<patternEntry>
<patternId>INSTABILITY</patternId>
<linePattern hasArrowHead="false" name="Instability (Squall) Line">
<patternSegment reverseSide="false" offsetSize="0" numberInArc="0" colorLocation="0" type="LINE" length="8.0"/>
<patternSegment reverseSide="false" offsetSize="0" numberInArc="0" colorLocation="0" type="BLANK" length="2.0"/>
<patternSegment reverseSide="false" offsetSize="0" numberInArc="8" colorLocation="0" type="CIRCLE_FILLED" length="4.0"/>
<patternSegment reverseSide="false" offsetSize="0" numberInArc="0" colorLocation="0" type="BLANK" length="2.0"/>
<patternSegment reverseSide="false" offsetSize="0" numberInArc="8" colorLocation="0" type="CIRCLE_FILLED" length="4.0"/>
<patternSegment reverseSide="false" offsetSize="0" numberInArc="0" colorLocation="0" type="BLANK" length="2.0"/>
<patternSegment reverseSide="false" offsetSize="0" numberInArc="0" colorLocation="0" type="LINE" length="8.0"/>
</linePattern>
</patternEntry>
<patternEntry>
<patternId>ZZZ_LINE</patternId>
<linePattern hasArrowHead="false" name="Z-Line">
<patternSegment reverseSide="false" offsetSize="2" numberInArc="0" colorLocation="0" type="Z_PATTERN" length="8.0"/>
</linePattern>
</patternEntry>
<patternEntry>
<patternId>STATIONARY_FRONT_DISS</patternId>
<linePattern hasArrowHead="false" name="Stationary Front Frontolysis">
<patternSegment reverseSide="false" offsetSize="0" numberInArc="0" colorLocation="0" type="LINE" length="4.0"/>
<patternSegment reverseSide="true" offsetSize="0" numberInArc="8" colorLocation="0" type="ARC_180_DEGREE_FILLED" length="8.0"/>
<patternSegment reverseSide="false" offsetSize="0" numberInArc="0" colorLocation="0" type="LINE" length="4.0"/>
<patternSegment reverseSide="false" offsetSize="0" numberInArc="0" colorLocation="0" type="BLANK" length="4.0"/>
<patternSegment reverseSide="false" offsetSize="0" numberInArc="0" colorLocation="0" type="LINE" length="8.0"/>
<patternSegment reverseSide="false" offsetSize="0" numberInArc="0" colorLocation="1" type="LINE" length="8.0"/>
<patternSegment reverseSide="false" offsetSize="0" numberInArc="0" colorLocation="1" type="BLANK" length="4.0"/>
<patternSegment reverseSide="false" offsetSize="0" numberInArc="0" colorLocation="1" type="LINE" length="4.0"/>
<patternSegment reverseSide="false" offsetSize="0" numberInArc="2" colorLocation="1" type="ARC_180_DEGREE_FILLED" length="8.0"/>
<patternSegment reverseSide="false" offsetSize="0" numberInArc="0" colorLocation="1" type="LINE" length="4.0"/>
<patternSegment reverseSide="false" offsetSize="0" numberInArc="0" colorLocation="1" type="BLANK" length="4.0"/>
<patternSegment reverseSide="false" offsetSize="0" numberInArc="0" colorLocation="1" type="LINE" length="8.0"/>
<patternSegment reverseSide="false" offsetSize="0" numberInArc="0" colorLocation="0" type="LINE" length="8.0"/>
<patternSegment reverseSide="false" offsetSize="0" numberInArc="0" colorLocation="0" type="BLANK" length="4.0"/>
</linePattern>
</patternEntry>
<patternEntry>
<patternId>LINE_DASHED_4</patternId>
<linePattern hasArrowHead="false" name="Medium Dashed">
<patternSegment reverseSide="false" offsetSize="0" numberInArc="0" colorLocation="0" type="LINE" length="4.0"/>
<patternSegment reverseSide="false" offsetSize="0" numberInArc="0" colorLocation="0" type="BLANK" length="4.0"/>
</linePattern>
</patternEntry>
<patternEntry>
<patternId>LINE_DASHED_3</patternId>
<linePattern hasArrowHead="false" name="Short Dashed">
<patternSegment reverseSide="false" offsetSize="0" numberInArc="0" colorLocation="0" type="LINE" length="2.0"/>
<patternSegment reverseSide="false" offsetSize="0" numberInArc="0" colorLocation="0" type="BLANK" length="3.0"/>
</linePattern>
</patternEntry>
<patternEntry>
<patternId>LINE_DASHED_6</patternId>
<linePattern hasArrowHead="false" name="Long Dashed">
<patternSegment reverseSide="false" offsetSize="0" numberInArc="0" colorLocation="0" type="LINE" length="5.0"/>
<patternSegment reverseSide="false" offsetSize="0" numberInArc="0" colorLocation="0" type="BLANK" length="2.0"/>
</linePattern>
</patternEntry>
<patternEntry>
<patternId>LINE_DASHED_5</patternId>
<linePattern hasArrowHead="false" name="Long Dash Short Dash">
<patternSegment reverseSide="false" offsetSize="0" numberInArc="0" colorLocation="0" type="LINE" length="6.0"/>
<patternSegment reverseSide="false" offsetSize="0" numberInArc="0" colorLocation="0" type="BLANK" length="3.0"/>
<patternSegment reverseSide="false" offsetSize="0" numberInArc="0" colorLocation="0" type="LINE" length="2.0"/>
<patternSegment reverseSide="false" offsetSize="0" numberInArc="0" colorLocation="0" type="BLANK" length="3.0"/>
</linePattern>
</patternEntry>
<patternEntry>
<patternId>LINE_DASHED_8</patternId>
<linePattern hasArrowHead="false" name="Long Dash Dot">
<patternSegment reverseSide="false" offsetSize="0" numberInArc="0" colorLocation="0" type="LINE" length="8.0"/>
<patternSegment reverseSide="false" offsetSize="0" numberInArc="0" colorLocation="0" type="BLANK" length="0.0"/>
<patternSegment reverseSide="false" offsetSize="0" numberInArc="8" colorLocation="0" type="CIRCLE_FILLED" length="0.0"/>
<patternSegment reverseSide="false" offsetSize="0" numberInArc="0" colorLocation="0" type="BLANK" length="0.0"/>
</linePattern>
</patternEntry>
<patternEntry>
<patternId>LINE_DASHED_7</patternId>
<linePattern hasArrowHead="false" name="Long Dash Three Short Dashes">
<patternSegment reverseSide="false" offsetSize="0" numberInArc="0" colorLocation="0" type="LINE" length="8.0"/>
<patternSegment reverseSide="false" offsetSize="0" numberInArc="0" colorLocation="0" type="BLANK" length="3.0"/>
<patternSegment reverseSide="false" offsetSize="0" numberInArc="0" colorLocation="0" type="LINE" length="2.0"/>
<patternSegment reverseSide="false" offsetSize="0" numberInArc="0" colorLocation="0" type="BLANK" length="3.0"/>
<patternSegment reverseSide="false" offsetSize="0" numberInArc="0" colorLocation="0" type="LINE" length="2.0"/>
<patternSegment reverseSide="false" offsetSize="0" numberInArc="0" colorLocation="0" type="BLANK" length="3.0"/>
<patternSegment reverseSide="false" offsetSize="0" numberInArc="0" colorLocation="0" type="LINE" length="2.0"/>
<patternSegment reverseSide="false" offsetSize="0" numberInArc="0" colorLocation="0" type="BLANK" length="3.0"/>
</linePattern>
</patternEntry>
<patternEntry>
<patternId>LINE_DASHED_9</patternId>
<linePattern hasArrowHead="false" name="Medium Dash Dot Dot Dot">
<patternSegment reverseSide="false" offsetSize="0" numberInArc="0" colorLocation="0" type="LINE" length="6.0"/>
<patternSegment reverseSide="false" offsetSize="0" numberInArc="0" colorLocation="0" type="BLANK" length="0.0"/>
<patternSegment reverseSide="false" offsetSize="0" numberInArc="8" colorLocation="0" type="CIRCLE_FILLED" length="0.0"/>
<patternSegment reverseSide="false" offsetSize="0" numberInArc="0" colorLocation="0" type="BLANK" length="0.0"/>
<patternSegment reverseSide="false" offsetSize="0" numberInArc="8" colorLocation="0" type="CIRCLE_FILLED" length="0.0"/>
<patternSegment reverseSide="false" offsetSize="0" numberInArc="0" colorLocation="0" type="BLANK" length="0.0"/>
<patternSegment reverseSide="false" offsetSize="0" numberInArc="8" colorLocation="0" type="CIRCLE_FILLED" length="0.0"/>
<patternSegment reverseSide="false" offsetSize="0" numberInArc="0" colorLocation="0" type="BLANK" length="0.0"/>
</linePattern>
</patternEntry>
<patternEntry>
<patternId>TROPICAL_TROF</patternId>
<linePattern hasArrowHead="false" name="Tropical TROF"/>
</patternEntry>
<patternEntry>
<patternId>LINE_DASHED_10</patternId>
<linePattern hasArrowHead="false" name="Long Dash Dot Dot">
<patternSegment reverseSide="false" offsetSize="0" numberInArc="0" colorLocation="0" type="LINE" length="15.0"/>
<patternSegment reverseSide="false" offsetSize="0" numberInArc="0" colorLocation="0" type="BLANK" length="0.0"/>
<patternSegment reverseSide="false" offsetSize="0" numberInArc="8" colorLocation="0" type="CIRCLE_FILLED" length="0.0"/>
<patternSegment reverseSide="false" offsetSize="0" numberInArc="0" colorLocation="0" type="BLANK" length="0.0"/>
<patternSegment reverseSide="false" offsetSize="0" numberInArc="8" colorLocation="0" type="CIRCLE_FILLED" length="0.0"/>
<patternSegment reverseSide="false" offsetSize="0" numberInArc="0" colorLocation="0" type="BLANK" length="0.0"/>
</linePattern>
</patternEntry>
<patternEntry>
<patternId>STATIONARY_FRONT</patternId>
<linePattern hasArrowHead="false" name="Stationary Front at the surface">
<patternSegment reverseSide="false" offsetSize="0" numberInArc="0" colorLocation="0" type="LINE" length="4.0"/>
<patternSegment reverseSide="true" offsetSize="0" numberInArc="8" colorLocation="0" type="ARC_180_DEGREE_FILLED" length="8.0"/>
<patternSegment reverseSide="false" offsetSize="0" numberInArc="0" colorLocation="0" type="LINE" length="4.0"/>
<patternSegment reverseSide="false" offsetSize="0" numberInArc="0" colorLocation="1" type="LINE" length="4.0"/>
<patternSegment reverseSide="false" offsetSize="0" numberInArc="2" colorLocation="1" type="ARC_180_DEGREE_FILLED" length="8.0"/>
<patternSegment reverseSide="false" offsetSize="0" numberInArc="0" colorLocation="1" type="LINE" length="4.0"/>
</linePattern>
</patternEntry>
<patternEntry>
<patternId>TROF</patternId>
<linePattern hasArrowHead="false" name="TROF">
<patternSegment reverseSide="false" offsetSize="0" numberInArc="0" colorLocation="0" type="LINE" length="12.0"/>
<patternSegment reverseSide="false" offsetSize="0" numberInArc="0" colorLocation="0" type="BLANK" length="4.0"/>
</linePattern>
</patternEntry>
<patternEntry>
<patternId>LINE_DASHED_2</patternId>
<linePattern hasArrowHead="false" name="Dotted Line">
<patternSegment reverseSide="false" offsetSize="0" numberInArc="0" colorLocation="0" type="BLANK" length="0.0"/>
<patternSegment reverseSide="false" offsetSize="0" numberInArc="8" colorLocation="0" type="CIRCLE_FILLED" length="0.0"/>
</linePattern>
</patternEntry>
<patternEntry>
<patternId>DASHED_ARROW</patternId>
<linePattern arrowHeadType="OPEN" hasArrowHead="true" name="Dashed Line with open arrow head">
<patternSegment reverseSide="false" offsetSize="0" numberInArc="0" colorLocation="0" type="LINE" length="8.0"/>
<patternSegment reverseSide="false" offsetSize="0" numberInArc="0" colorLocation="0" type="BLANK" length="6.0"/>
<patternSegment reverseSide="false" offsetSize="0" numberInArc="0" colorLocation="0" type="LINE" length="8.0"/>
</linePattern>
</patternEntry>
<patternEntry>
<patternId>OCCLUDED_FRONT_FORM</patternId>
<linePattern hasArrowHead="false" name="Occluded Front Frontogenesis">
<patternSegment reverseSide="false" offsetSize="0" numberInArc="0" colorLocation="0" type="LINE" length="4.0"/>
<patternSegment reverseSide="false" offsetSize="0" numberInArc="2" colorLocation="0" type="ARC_180_DEGREE_FILLED" length="8.0"/>
<patternSegment reverseSide="false" offsetSize="0" numberInArc="0" colorLocation="0" type="LINE" length="4.0"/>
<patternSegment reverseSide="false" offsetSize="0" numberInArc="0" colorLocation="0" type="BLANK" length="4.0"/>
<patternSegment reverseSide="false" offsetSize="0" numberInArc="0" colorLocation="0" type="LINE" length="4.0"/>
<patternSegment reverseSide="false" offsetSize="0" numberInArc="8" colorLocation="0" type="ARC_180_DEGREE_FILLED" length="8.0"/>
<patternSegment reverseSide="false" offsetSize="0" numberInArc="0" colorLocation="0" type="LINE" length="4.0"/>
<patternSegment reverseSide="false" offsetSize="0" numberInArc="0" colorLocation="0" type="BLANK" length="4.0"/>
</linePattern>
</patternEntry>
<patternEntry>
<patternId>FILL_OPEN_BOX</patternId>
<linePattern arrowHeadType="FILLED" hasArrowHead="true" name="Filled Box-Open Box with filled arrow head">
<patternSegment reverseSide="false" offsetSize="2" numberInArc="0" colorLocation="0" type="BOX_FILLED" length="4.0"/>
<patternSegment reverseSide="false" offsetSize="2" numberInArc="0" colorLocation="0" type="BOX" length="4.0"/>
<patternSegment reverseSide="false" offsetSize="2" numberInArc="0" colorLocation="0" type="BOX_FILLED" length="4.0"/>
</linePattern>
</patternEntry>
<patternEntry>
<patternId>COLD_FRONT_FORM</patternId>
<linePattern hasArrowHead="false" name="Cold Front Frontogenesis">
<patternSegment reverseSide="false" offsetSize="0" numberInArc="0" colorLocation="0" type="LINE" length="4.0"/>
<patternSegment reverseSide="false" offsetSize="0" numberInArc="2" colorLocation="0" type="ARC_180_DEGREE_FILLED" length="8.0"/>
<patternSegment reverseSide="false" offsetSize="0" numberInArc="0" colorLocation="0" type="LINE" length="4.0"/>
<patternSegment reverseSide="false" offsetSize="0" numberInArc="0" colorLocation="0" type="BLANK" length="4.0"/>
</linePattern>
</patternEntry>
<patternEntry>
<patternId>BALL_CHAIN</patternId>
<linePattern hasArrowHead="false" name="Ball-and-Chain">
<patternSegment reverseSide="false" offsetSize="0" numberInArc="0" colorLocation="0" type="LINE" length="4.0"/>
<patternSegment reverseSide="false" offsetSize="0" numberInArc="0" colorLocation="0" type="BLANK" length="2.0"/>
<patternSegment reverseSide="false" offsetSize="0" numberInArc="8" colorLocation="0" type="CIRCLE" length="4.0"/>
<patternSegment reverseSide="false" offsetSize="0" numberInArc="0" colorLocation="0" type="BLANK" length="2.0"/>
<patternSegment reverseSide="false" offsetSize="0" numberInArc="0" colorLocation="0" type="LINE" length="4.0"/>
</linePattern>
</patternEntry>
<patternEntry>
<patternId>LINE_WITH_CARETS</patternId>
<linePattern hasArrowHead="false" name="Line-Caret-Line">
<patternSegment reverseSide="false" offsetSize="0" numberInArc="0" colorLocation="0" type="LINE" length="4.0"/>
<patternSegment reverseSide="false" offsetSize="0" numberInArc="2" colorLocation="0" type="ARC_270_DEGREE_WITH_LINE" length="6.0"/>
<patternSegment reverseSide="false" offsetSize="0" numberInArc="0" colorLocation="0" type="LINE" length="4.0"/>
</linePattern>
</patternEntry>
<patternEntry>
<patternId>OCCLUDED_FRONT</patternId>
<linePattern hasArrowHead="false" name="Occluded Front at the surface">
<patternSegment reverseSide="false" offsetSize="0" numberInArc="0" colorLocation="0" type="LINE" length="4.0"/>
<patternSegment reverseSide="false" offsetSize="0" numberInArc="2" colorLocation="0" type="ARC_180_DEGREE_FILLED" length="8.0"/>
<patternSegment reverseSide="false" offsetSize="0" numberInArc="0" colorLocation="0" type="LINE" length="4.0"/>
<patternSegment reverseSide="false" offsetSize="0" numberInArc="0" colorLocation="0" type="LINE" length="4.0"/>
<patternSegment reverseSide="false" offsetSize="0" numberInArc="8" colorLocation="0" type="ARC_180_DEGREE_FILLED" length="8.0"/>
<patternSegment reverseSide="false" offsetSize="0" numberInArc="0" colorLocation="0" type="LINE" length="4.0"/>
</linePattern>
</patternEntry>
<patternEntry>
<patternId>COLD_FRONT</patternId>
<linePattern hasArrowHead="false" name="Cold Front at the surface">
<patternSegment reverseSide="false" offsetSize="0" numberInArc="0" colorLocation="0" type="LINE" length="4.0"/>
<patternSegment reverseSide="false" offsetSize="0" numberInArc="2" colorLocation="0" type="ARC_180_DEGREE_FILLED" length="8.0"/>
<patternSegment reverseSide="false" offsetSize="0" numberInArc="0" colorLocation="0" type="LINE" length="4.0"/>
</linePattern>
</patternEntry>
<patternEntry>
<patternId>LINE_X_LINE</patternId>
<linePattern hasArrowHead="false" name="Line-X-Line">
<patternSegment reverseSide="false" offsetSize="0" numberInArc="0" colorLocation="0" type="LINE" length="4.0"/>
<patternSegment reverseSide="false" offsetSize="0" numberInArc="0" colorLocation="0" type="BLANK" length="2.0"/>
<patternSegment reverseSide="false" offsetSize="2" numberInArc="0" colorLocation="0" type="X_PATTERN" length="4.0"/>
<patternSegment reverseSide="false" offsetSize="0" numberInArc="0" colorLocation="0" type="BLANK" length="2.0"/>
<patternSegment reverseSide="false" offsetSize="0" numberInArc="0" colorLocation="0" type="LINE" length="4.0"/>
</linePattern>
</patternEntry>
<patternEntry>
<patternId>POINTED_ARROW</patternId>
<linePattern arrowHeadType="OPEN" hasArrowHead="true" name="Line with open arrow head"/>
</patternEntry>
<patternEntry>
<patternId>BOX_CIRCLE</patternId>
<linePattern hasArrowHead="false" name="Box-Circle">
<patternSegment reverseSide="false" offsetSize="2" numberInArc="0" colorLocation="0" type="BOX" length="8.0"/>
<patternSegment reverseSide="false" offsetSize="0" numberInArc="0" colorLocation="0" type="BLANK" length="2.0"/>
<patternSegment reverseSide="false" offsetSize="0" numberInArc="8" colorLocation="0" type="CIRCLE" length="4.0"/>
<patternSegment reverseSide="false" offsetSize="0" numberInArc="0" colorLocation="0" type="BLANK" length="2.0"/>
</linePattern>
</patternEntry>
<patternEntry>
<patternId>BOX_X</patternId>
<linePattern hasArrowHead="false" name="Box-X">
<patternSegment reverseSide="false" offsetSize="2" numberInArc="0" colorLocation="0" type="BOX" length="8.0"/>
<patternSegment reverseSide="false" offsetSize="0" numberInArc="0" colorLocation="0" type="BLANK" length="2.0"/>
<patternSegment reverseSide="false" offsetSize="2" numberInArc="0" colorLocation="0" type="X_PATTERN" length="4.0"/>
<patternSegment reverseSide="false" offsetSize="0" numberInArc="0" colorLocation="0" type="BLANK" length="2.0"/>
</linePattern>
</patternEntry>
<patternEntry>
<patternId>OCCLUDED_FRONT_DISS</patternId>
<linePattern hasArrowHead="false" name="Occluded Front Frontolysis">
<patternSegment reverseSide="false" offsetSize="0" numberInArc="0" colorLocation="0" type="LINE" length="4.0"/>
<patternSegment reverseSide="false" offsetSize="0" numberInArc="2" colorLocation="0" type="ARC_180_DEGREE_FILLED" length="8.0"/>
<patternSegment reverseSide="false" offsetSize="0" numberInArc="0" colorLocation="0" type="LINE" length="4.0"/>
<patternSegment reverseSide="false" offsetSize="0" numberInArc="0" colorLocation="0" type="BLANK" length="4.0"/>
<patternSegment reverseSide="false" offsetSize="0" numberInArc="0" colorLocation="0" type="LINE" length="16.0"/>
<patternSegment reverseSide="false" offsetSize="0" numberInArc="0" colorLocation="0" type="BLANK" length="4.0"/>
<patternSegment reverseSide="false" offsetSize="0" numberInArc="0" colorLocation="0" type="LINE" length="4.0"/>
<patternSegment reverseSide="false" offsetSize="0" numberInArc="8" colorLocation="0" type="ARC_180_DEGREE_FILLED" length="8.0"/>
<patternSegment reverseSide="false" offsetSize="0" numberInArc="0" colorLocation="0" type="LINE" length="4.0"/>
<patternSegment reverseSide="false" offsetSize="0" numberInArc="0" colorLocation="0" type="BLANK" length="4.0"/>
<patternSegment reverseSide="false" offsetSize="0" numberInArc="0" colorLocation="0" type="LINE" length="16.0"/>
<patternSegment reverseSide="false" offsetSize="0" numberInArc="0" colorLocation="0" type="BLANK" length="4.0"/>
</linePattern>
</patternEntry>
<patternEntry>
<patternId>FILL_CIRCLE_X</patternId>
<linePattern hasArrowHead="false" name="Filled Circle-X">
<patternSegment reverseSide="false" offsetSize="0" numberInArc="8" colorLocation="0" type="CIRCLE_FILLED" length="4.0"/>
<patternSegment reverseSide="false" offsetSize="0" numberInArc="0" colorLocation="0" type="BLANK" length="2.0"/>
<patternSegment reverseSide="false" offsetSize="2" numberInArc="0" colorLocation="0" type="X_PATTERN" length="4.0"/>
<patternSegment reverseSide="false" offsetSize="0" numberInArc="0" colorLocation="0" type="BLANK" length="2.0"/>
</linePattern>
</patternEntry>
<patternEntry>
<patternId>WARM_FRONT_DISS</patternId>
<linePattern hasArrowHead="false" name="Warm Front Frontolysis">
<patternSegment reverseSide="false" offsetSize="0" numberInArc="0" colorLocation="0" type="LINE" length="4.0"/>
<patternSegment reverseSide="false" offsetSize="0" numberInArc="8" colorLocation="0" type="ARC_180_DEGREE_FILLED" length="8.0"/>
<patternSegment reverseSide="false" offsetSize="0" numberInArc="0" colorLocation="0" type="LINE" length="4.0"/>
<patternSegment reverseSide="false" offsetSize="0" numberInArc="0" colorLocation="0" type="BLANK" length="4.0"/>
<patternSegment reverseSide="false" offsetSize="0" numberInArc="0" colorLocation="0" type="LINE" length="16.0"/>
<patternSegment reverseSide="false" offsetSize="0" numberInArc="0" colorLocation="0" type="BLANK" length="4.0"/>
</linePattern>
</patternEntry>
<patternEntry>
<patternId>COLD_FRONT_DISS</patternId>
<linePattern hasArrowHead="false" name="Cold Front Frontolysis">
<patternSegment reverseSide="false" offsetSize="0" numberInArc="0" colorLocation="0" type="LINE" length="4.0"/>
<patternSegment reverseSide="false" offsetSize="0" numberInArc="2" colorLocation="0" type="ARC_180_DEGREE_FILLED" length="8.0"/>
<patternSegment reverseSide="false" offsetSize="0" numberInArc="0" colorLocation="0" type="LINE" length="4.0"/>
<patternSegment reverseSide="false" offsetSize="0" numberInArc="0" colorLocation="0" type="BLANK" length="4.0"/>
<patternSegment reverseSide="false" offsetSize="0" numberInArc="0" colorLocation="0" type="LINE" length="16.0"/>
<patternSegment reverseSide="false" offsetSize="0" numberInArc="0" colorLocation="0" type="BLANK" length="4.0"/>
</linePattern>
</patternEntry>
<patternEntry>
<patternId>ZIGZAG</patternId>
<linePattern hasArrowHead="false" name="ZigZag">
<patternSegment reverseSide="false" offsetSize="0" numberInArc="2" colorLocation="0" type="ARC_180_DEGREE" length="8.0"/>
<patternSegment reverseSide="true" offsetSize="0" numberInArc="2" colorLocation="0" type="ARC_180_DEGREE" length="8.0"/>
</linePattern>
</patternEntry>
<patternEntry>
<patternId>WARM_FRONT</patternId>
<linePattern hasArrowHead="false" name="Warm Front at the surface">
<patternSegment reverseSide="false" offsetSize="0" numberInArc="0" colorLocation="0" type="LINE" length="4.0"/>
<patternSegment reverseSide="false" offsetSize="0" numberInArc="8" colorLocation="0" type="ARC_180_DEGREE_FILLED" length="8.0"/>
<patternSegment reverseSide="false" offsetSize="0" numberInArc="0" colorLocation="0" type="LINE" length="4.0"/>
</linePattern>
</patternEntry>
<patternEntry>
<patternId>SINE_CURVE</patternId>
<linePattern hasArrowHead="false" name="Sine Curve">
<patternSegment reverseSide="false" offsetSize="0" numberInArc="8" colorLocation="0" type="ARC_180_DEGREE" length="8.0"/>
<patternSegment reverseSide="true" offsetSize="0" numberInArc="8" colorLocation="0" type="ARC_180_DEGREE" length="8.0"/>
</linePattern>
</patternEntry>
<patternEntry>
<patternId>SCALLOPED</patternId>
<linePattern hasArrowHead="false" name="Scallop">
<patternSegment reverseSide="false" offsetSize="0" numberInArc="8" colorLocation="0" type="ARC_180_DEGREE" length="8.0"/>
</linePattern>
</patternEntry>
<patternEntry>
<patternId>STATIONARY_FRONT_FORM</patternId>
<linePattern hasArrowHead="false" name="Stationary Front Frontogenesis">
<patternSegment reverseSide="false" offsetSize="0" numberInArc="0" colorLocation="0" type="LINE" length="4.0"/>
<patternSegment reverseSide="true" offsetSize="0" numberInArc="8" colorLocation="0" type="ARC_180_DEGREE_FILLED" length="8.0"/>
<patternSegment reverseSide="false" offsetSize="0" numberInArc="0" colorLocation="0" type="LINE" length="4.0"/>
<patternSegment reverseSide="false" offsetSize="0" numberInArc="0" colorLocation="0" type="BLANK" length="4.0"/>
<patternSegment reverseSide="false" offsetSize="0" numberInArc="0" colorLocation="1" type="LINE" length="4.0"/>
<patternSegment reverseSide="false" offsetSize="0" numberInArc="2" colorLocation="1" type="ARC_180_DEGREE_FILLED" length="8.0"/>
<patternSegment reverseSide="false" offsetSize="0" numberInArc="0" colorLocation="1" type="LINE" length="4.0"/>
<patternSegment reverseSide="false" offsetSize="0" numberInArc="0" colorLocation="0" type="BLANK" length="4.0"/>
</linePattern>
</patternEntry>
<patternEntry>
<patternId>LINE_SOLID</patternId>
<linePattern hasArrowHead="false" name="Solid Line"/>
</patternEntry>
<patternEntry>
<patternId>STORM_TRACK</patternId>
<linePattern hasArrowHead="false" name="Storm Track"/>
</patternEntry>
<patternEntry>
<patternId>STREAM_LINE</patternId>
<linePattern hasArrowHead="false" name="Streamline-like">
<patternSegment reverseSide="false" offsetSize="0" numberInArc="0" colorLocation="0" type="LINE" length="12.0"/>
<patternSegment reverseSide="false" offsetSize="0" numberInArc="2" colorLocation="0" type="ARROW_HEAD" length="8.0"/>
</linePattern>
</patternEntry>
<patternEntry>
<patternId>WARM_FRONT_FORM</patternId>
<linePattern hasArrowHead="false" name="Warm Front Frontogenesis">
<patternSegment reverseSide="false" offsetSize="0" numberInArc="0" colorLocation="0" type="LINE" length="4.0"/>
<patternSegment reverseSide="false" offsetSize="0" numberInArc="8" colorLocation="0" type="ARC_180_DEGREE_FILLED" length="8.0"/>
<patternSegment reverseSide="false" offsetSize="0" numberInArc="0" colorLocation="0" type="LINE" length="4.0"/>
<patternSegment reverseSide="false" offsetSize="0" numberInArc="0" colorLocation="0" type="BLANK" length="4.0"/>
</linePattern>
</patternEntry>
<patternEntry>
<patternId>LINE_CIRCLE_ARROW</patternId>
<linePattern arrowHeadType="FILLED" hasArrowHead="true" name="Line-Circle-Line with filled arrow head">
<patternSegment reverseSide="false" offsetSize="0" numberInArc="0" colorLocation="0" type="LINE" length="4.0"/>
<patternSegment reverseSide="false" offsetSize="0" numberInArc="8" colorLocation="0" type="CIRCLE" length="4.0"/>
<patternSegment reverseSide="false" offsetSize="0" numberInArc="0" colorLocation="0" type="LINE" length="4.0"/>
</linePattern>
</patternEntry>
<patternEntry>
<patternId>FILLED_ARROW</patternId>
<linePattern arrowHeadType="FILLED" hasArrowHead="true" name="Line with closed arrow head"/>
</patternEntry>
<patternEntry>
<patternId>ANGLED_TICKS_ALT</patternId>
<linePattern hasArrowHead="false" name="Alternating Angled Ticks">
<patternSegment reverseSide="false" offsetSize="0" numberInArc="0" colorLocation="0" type="LINE" length="4.0"/>
<patternSegment reverseSide="false" offsetSize="0" numberInArc="1" colorLocation="0" type="ARC_90_DEGREE" length="4.0"/>
<patternSegment reverseSide="false" offsetSize="0" numberInArc="0" colorLocation="0" type="LINE" length="8.0"/>
<patternSegment reverseSide="true" offsetSize="0" numberInArc="1" colorLocation="0" type="ARC_90_DEGREE" length="4.0"/>
<patternSegment reverseSide="false" offsetSize="0" numberInArc="0" colorLocation="0" type="LINE" length="4.0"/>
</linePattern>
</patternEntry>
<patternEntry>
<patternId>LINE_CARET_LINE</patternId>
<linePattern hasArrowHead="false" name="Line-Caret-Line with spaces">
<patternSegment reverseSide="false" offsetSize="0" numberInArc="0" colorLocation="0" type="LINE" length="4.0"/>
<patternSegment reverseSide="false" offsetSize="0" numberInArc="0" colorLocation="0" type="BLANK" length="2.0"/>
<patternSegment reverseSide="false" offsetSize="0" numberInArc="2" colorLocation="0" type="ARC_270_DEGREE" length="6.0"/>
<patternSegment reverseSide="false" offsetSize="0" numberInArc="0" colorLocation="0" type="BLANK" length="2.0"/>
<patternSegment reverseSide="false" offsetSize="0" numberInArc="0" colorLocation="0" type="LINE" length="4.0"/>
</linePattern>
</patternEntry>
<patternEntry>
<patternId>DRY_LINE</patternId>
<linePattern hasArrowHead="false" name="Dry-Line">
<patternSegment reverseSide="false" offsetSize="0" numberInArc="8" colorLocation="0" type="ARC_180_DEGREE_CLOSED" length="8.0"/>
</linePattern>
</patternEntry>
<patternEntry>
<patternId>DASHED_ARROW_FILLED</patternId>
<linePattern arrowHeadType="FILLED" hasArrowHead="true" name="Dashed Line with filled arrow head">
<patternSegment reverseSide="false" offsetSize="0" numberInArc="0" colorLocation="0" type="LINE" length="8.0"/>
<patternSegment reverseSide="false" offsetSize="0" numberInArc="0" colorLocation="0" type="BLANK" length="6.0"/>
<patternSegment reverseSide="false" offsetSize="0" numberInArc="0" colorLocation="0" type="LINE" length="8.0"/>
</linePattern>
</patternEntry>
<patternEntry>
<patternId>TICK_MARKS</patternId>
<linePattern hasArrowHead="false" name="Tick Mark">
<patternSegment reverseSide="false" offsetSize="2" numberInArc="0" colorLocation="0" type="TICK" length="8.0"/>
</linePattern>
</patternEntry>
</linePatternList>

View file

@ -0,0 +1,64 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
Mountain Obscuration State Inclusion Table
This table contains the states within each of the 6 FA Areas that
_is_ permitted to have Mountain Obscuration hazards (MT_OBSC).
MT_OBSC is not permitted over all states not on this list.
log
===
E. Safford 3/06 generated table from AWC information
-->
<MT_OBSC>
<area name="SFO">
<state>WA</state>
<state>OR</state>
<state>CA</state>
</area>
<area name="SLC">
<state>ID</state>
<state>MT</state>
<state>WY</state>
<state>NV</state>
<state>UT</state>
<state>CO</state>
<state>AZ</state>
<state>NM</state>
</area>
<area name="CHI">
<state>KY</state>
</area>
<area name="DFW">
<state>TN</state>
<state>TX</state>
</area>
<area name="BOS">
<state>ME</state>
<state>NH</state>
<state>VT</state>
<state>MA</state>
<state>NY</state>
<state>PA</state>
<state>MD</state>
<state>WV</state>
<state>VA</state>
</area>
<area name="MIA">
<state>NC</state>
<state>SC</state>
<state>GA</state>
</area>
</MT_OBSC>

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,44 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
This xml file is to be used for default initial time and
expiration time in outlook format dialog.
-->
<root>
<days name="DAY1">
<range from="2201" to="2359" init="0100" initAdj="1" exp="1200" expAdj="1"/>
<range from="1801" to="2200" init="2000" initAdj="0" exp="1200" expAdj="1"/>
<range from="1431" to="1800" init="1630" initAdj="0" exp="1200" expAdj="1"/>
<range from="1100" to="1430" init="1300" initAdj="0" exp="1200" expAdj="1"/>
<range from="0301" to="1059" init="1200" initAdj="0" exp="1200" expAdj="1"/>
<range from="0000" to="0300" init="0100" initAdj="0" exp="1200" expAdj="0"/>
</days>
<days name="DAY2">
<range from="0200" to="2359" init="1200" initAdj="1" exp="1200" expAdj="2"/>
<range from="0000" to="0159" init="1200" initAdj="0" exp="1200" expAdj="1"/>
</days>
<days name="DAY3">
<range from="0200" to="2359" init="1200" initAdj="2" exp="1200" expAdj="3"/>
<range from="0000" to="0159" init="1200" initAdj="1" exp="1200" expAdj="2"/>
</days>
<days name="DAY3-8">
<range from="0200" to="2359" init="1200" initAdj="2" exp="1200" expAdj="8"/>
</days>
<days name="DAY4-8">
<range from="0200" to="2359" init="1200" initAdj="3" exp="1200" expAdj="8"/>
</days>
<days name="ENH00">
<range from="0000" to="2359" init="2000" initAdj="0" exp="0000" expAdj="1"/>
</days>
<days name="ENH04">
<range from="0000" to="2359" init="0000" initAdj="1" exp="0400" expAdj="1"/>
</days>
<days name="ENH12">
<range from="0300" to="2359" init="0400" initAdj="1" exp="1200" expAdj="1"/>
</days>
<days name="ENH16">
<range from="0000" to="0259" init="0400" initAdj="0" exp="1200" expAdj="0"/>
</days>
<days name="ENH20">
<range from="0000" to="2359" init="1600" initAdj="0" exp="2000" expAdj="0"/>
</days>
</root>

View file

@ -0,0 +1,335 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
This xml file is to be used for outlook types/labels in the outlook GUI.
the 'prefix' attribute is used for the name of the output outlook file.
-->
<root>
<otlktype name="OUTLOOK" prefix="" >
<label text="TSTM" value="0"/>
<label text="SLGT" value="20"/>
<label text="MDT" value="40"/>
<label text="HIGH" value="60"/>
<label text="2%"/>
<label text="5%"/>
<label text="10%"/>
<label text="15%"/>
<label text="30%"/>
<label text="40%"/>
<label text="45%"/>
<label text="60%"/>
<label text="70%"/>
<label text="SIG" value="100"/>
</otlktype>
<otlktype name="LABEL" prefix="">
<label text="TSTM" value="0"/>
<label text=".01"/>
<label text=".10"/>
<label text=".25"/>
<label text=".50"/>
<label text="1"/>
<label text="1.5"/>
<label text="2"/>
<label text="2.5"/>
<label text="3"/>
<label text="4"/>
<label text="5"/>
<label text="6"/>
</otlktype>
<otlktype name="TROPICAL" prefix="" makegrid="false" flagLabel="true" flagAction="false">
<label text="1"/>
<label text="2"/>
<label text="3"/>
<label text="4"/>
<label text="5"/>
<label text="6"/>
<label text="7"/>
<label text="8"/>
<label text="9"/>
<label text="10"/>
</otlktype>
<otlktype name="HAILOTLK" prefix="hail">
<label text="5%"/>
<label text="10%"/>
<label text="15%"/>
<label text="30%"/>
<label text="45%"/>
<label text="60%"/>
<label text="SIG" value="100"/>
</otlktype>
<otlktype name="TORNOTLK" prefix="torn">
<label text="2%"/>
<label text="5%"/>
<label text="10%"/>
<label text="15%"/>
<label text="30%"/>
<label text="45%"/>
<label text="60%"/>
<label text="SIG" value="100"/>
</otlktype>
<otlktype name="WINDOTLK" prefix="wind">
<label text="5%"/>
<label text="15%"/>
<label text="30%"/>
<label text="45%"/>
<label text="60%"/>
<label text="SIG" value="100"/>
</otlktype>
<otlktype name="TOTL_SVR" prefix="prob">
<label text="5%"/>
<label text="15%"/>
<label text="30%"/>
<label text="45%"/>
<label text="60%"/>
<label text="SIG" value="100"/>
</otlktype>
<otlktype name="FIREOUTL" prefix="fire">
<label text="CRITICAL" value="60"/>
<label text="EXTREME" value="80"/>
<label text="DRY-TSTM" value="100"/>
</otlktype>
<otlktype name="CATG_SVR" prefix="category_severe">
<label text="SLGT" value="20"/>
<label text="MDT" value="40"/>
<label text="HIGH" value="60"/>
</otlktype>
<otlktype name="MESO_DSC" prefix="">
<label text="CNVTV" value="20"/>
<label text="SVRUK" value="40"/>
<label text="SVRRED" value="60"/>
<label text="SVRBLUE" value="80"/>
<label text="HVYRA" value="100"/>
<label text="HVYSN" value="120"/>
<label text="FZRA" value="140"/>
</otlktype>
<otlktype name="TSTMOLK" prefix="">
<label text="5%"/>
<label text="15%"/>
<label text="30%"/>
<label text="45%"/>
<label text="60%"/>
<label text="SIG" value="100"/>
</otlktype>
<otlktype name="EXT_SVR" prefix="">
<label text="D4" value="40"/>
<label text="D5" value="50"/>
<label text="D6" value="60"/>
<label text="D7" value="70"/>
<label text="D8" value="80"/>
<label text="D4-5" value="45"/>
<label text="D4-6" value="46"/>
<label text="D4-7" value="47"/>
<label text="D4-8" value="48"/>
<label text="D5-6" value="56"/>
<label text="D5-7" value="57"/>
<label text="D5-8" value="58"/>
<label text="D6-7" value="67"/>
<label text="D6-8" value="68"/>
<label text="D7-8" value="78"/>
</otlktype>
<otlktype name="EXT_FIRE" prefix="fire">
<label text="D3" value="30"/>
<label text="D4" value="40"/>
<label text="D5" value="50"/>
<label text="D6" value="60"/>
<label text="D7" value="70"/>
<label text="D8" value="80"/>
<label text="D3-4" value="34"/>
<label text="D3-5" value="35"/>
<label text="D3-6" value="36"/>
<label text="D3-7" value="37"/>
<label text="D3-8" value="38"/>
<label text="D4-5" value="45"/>
<label text="D4-6" value="46"/>
<label text="D4-7" value="47"/>
<label text="D4-8" value="48"/>
<label text="D5-6" value="56"/>
<label text="D5-7" value="57"/>
<label text="D5-8" value="58"/>
<label text="D6-7" value="67"/>
<label text="D6-8" value="68"/>
<label text="D7-8" value="78"/>
</otlktype>
<otlktype name="ISO_BARS" prefix="">
<label text="956"/>
<label text="960"/>
<label text="968"/>
<label text="972"/>
<label text="976"/>
<label text="980"/>
<label text="984"/>
<label text="988"/>
<label text="992"/>
<label text="996"/>
<label text="1000"/>
<label text="1004"/>
<label text="1008"/>
<label text="1012"/>
<label text="1016"/>
<label text="1020"/>
<label text="1024"/>
<label text="1028"/>
<label text="1032"/>
</otlktype>
<otlktype name="HI_FCST" prefix="">
<label text="08"/>
<label text="10"/>
<label text="12"/>
<label text="14"/>
<label text="16"/>
<label text="20"/>
<label text="22"/>
<label text="24"/>
<label text="28"/>
<label text="30"/>
<label text="32"/>
<label text="34"/>
<label text="36"/>
<label text="38"/>
<label text="40"/>
<label text="42"/>
<label text="44"/>
<label text="46"/>
</otlktype>
<otlktype name="LO_FCST" prefix="">
<label text="60"/>
<label text="64"/>
<label text="68"/>
<label text="72"/>
<label text="76"/>
<label text="80"/>
<label text="82"/>
<label text="84"/>
<label text="86"/>
<label text="88"/>
<label text="90"/>
<label text="92"/>
<label text="94"/>
<label text="96"/>
<label text="98"/>
<label text="00"/>
<label text="02"/>
<label text="04"/>
<label text="08"/>
</otlktype>
<otlktype name="WHFT" prefix="">
<label text="1.5"/>
<label text="3"/>
<label text="4.5"/>
<label text="6"/>
<label text="9"/>
<label text="12"/>
<label text="15"/>
<label text="18"/>
<label text="21"/>
<label text="24"/>
<label text="27"/>
<label text="30"/>
<label text="33"/>
<label text="36"/>
<label text="39"/>
<label text="42"/>
<label text="45"/>
<label text="48"/>
</otlktype>
<otlktype name="WHM" prefix="">
<label text="0.5"/>
<label text="1"/>
<label text="1.5"/>
<label text="2"/>
<label text="3"/>
<label text="4"/>
<label text="5"/>
<label text="6"/>
<label text="7"/>
<label text="8"/>
<label text="9"/>
<label text="10"/>
<label text="11"/>
<label text="12"/>
<label text="13"/>
<label text="14"/>
<label text="15"/>
<label text="16"/>
<label text="17"/>
<label text="18"/>
</otlktype>
<otlktype name="WPER" prefix="">
<label text="6"/>
<label text="8"/>
<label text="10"/>
<label text="12"/>
<label text="14"/>
<label text="16"/>
</otlktype>
<otlktype name="PROB" prefix="">
<label text="10"/>
<label text="20"/>
<label text="25"/>
<label text="30"/>
<label text="40"/>
<label text="50"/>
<label text="60"/>
<label text="70"/>
<label text="75"/>
<label text="80"/>
<label text="90"/>
<label text="100"/>
</otlktype>
<otlktype name="EXCE_RAIN" prefix="" makegrid="false" fromline ="true" >
<label text="SLGT"/>
<label text="MDT"/>
<label text="HIGH"/>
<label text="5 INCH"/>
</otlktype>
<otlktype name="ENH00" prefix="enh00">
<label text="10%"/>
<label text="40%"/>
<label text="70%"/>
</otlktype>
<otlktype name="ENH04" prefix="enh04">
<label text="10%"/>
<label text="40%"/>
<label text="70%"/>
</otlktype>
<otlktype name="ENH12" prefix="enh12">
<label text="10%"/>
<label text="40%"/>
<label text="70%"/>
</otlktype>
<otlktype name="ENH16" prefix="enh16">
<label text="10%"/>
<label text="40%"/>
<label text="70%"/>
</otlktype>
<otlktype name="ENH20" prefix="enh20">
<label text="10%"/>
<label text="40%"/>
<label text="70%"/>
</otlktype>
</root>

View file

@ -0,0 +1,65 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!--
Copied from the Phenomenon part of
software/gempak/tables/pgen/sigmetinfo.tbl
below are taken off from INTL
<phenomenon>WDSPR_TS</phenomenon>
<phenomenon>ACT_TS</phenomenon>
<phenomenon>ISOL_SEV_TS</phenomenon>
<phenomenon>MOD_TO_SEV_CAT</phenomenon>
<phenomenon>MOD_OCNL_SEV_TURB</phenomenon>
<phenomenon>MOD_OCNL_SEV_CAT_TURB</phenomenon>
<phenomenon>MOD_TURB</phenomenon>
<phenomenon>OCNL_SEV_TURB</phenomenon>
<phenomenon>OCNL_SEV_TURB</phenomenon>
<phenomenon>SEV_ICE_(FZRA)</phenomenon>
<phenomenon>ISOL_CB</phenomenon>
<phenomenon>OCNL_CB</phenomenon>
<phenomenon>FRQ_CB</phenomenon>
<phenomenon>MOD-SEV_TURB</phenomenon>
<phenomenon>MOD-SEV_ICE</phenomenon>
<phenomenon>TROPICAL_STORM</phenomenon>
<phenomenon>TROPICAL_DEPRESSION</phenomenon>
-->
<phenomenons>
<AIRM>
<phenomenon>IFR</phenomenon>
<phenomenon>TURB</phenomenon>
<phenomenon>ICE</phenomenon>
</AIRM>
<CONV>
<phenomenon>TORNADO</phenomenon>
<phenomenon>HAIL</phenomenon>
<phenomenon>WIND_GUSTS</phenomenon>
</CONV>
<INTL>
<phenomenon>FRQ_TS</phenomenon>
<phenomenon>OBSC_TS</phenomenon>
<phenomenon>EMBD_TS</phenomenon>
<phenomenon>SQL_TS</phenomenon>
<phenomenon>SEV_TURB</phenomenon>
<phenomenon>SEV_ICE</phenomenon>
<phenomenon>VOLCANIC_ASH</phenomenon>
<phenomenon>TROPICAL_CYCLONE</phenomenon>
<phenomenon>RDOACT_CLD</phenomenon>
</INTL>
<NCON>
<phenomenon>TURBULENCE</phenomenon>
<phenomenon>ICING</phenomenon>
<phenomenon>DUST_STORM</phenomenon>
<phenomenon>VOLCANIC_ERUPTION</phenomenon>
</NCON>
</phenomenons>

View file

@ -0,0 +1,677 @@
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
<xsd:element name="Products">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="Product" maxOccurs="unbounded" minOccurs="1">
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="Product">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="Layer" maxOccurs="unbounded"
minOccurs="1">
</xsd:element>
</xsd:sequence>
<xsd:attribute name="inputFile" type="xsd:string"></xsd:attribute>
<xsd:attribute name="outputFile" type="xsd:string"></xsd:attribute>
<xsd:attribute name="useFile" type="xsd:boolean"></xsd:attribute>
<xsd:attribute name="saveLayers" type="xsd:boolean"></xsd:attribute>
<xsd:attribute name="onOff" type="xsd:boolean"></xsd:attribute>
<xsd:attribute name="center" type="xsd:string"></xsd:attribute>
<xsd:attribute name="forecaster" type="xsd:string"></xsd:attribute>
<xsd:attribute name="type" type="xsd:string"></xsd:attribute>
<xsd:attribute name="name" type="xsd:string"></xsd:attribute>
</xsd:complexType>
</xsd:element>
<xsd:element name="Layer">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="Color" maxOccurs="1" minOccurs="1"></xsd:element>
<xsd:element ref="DrawableElement" maxOccurs="1"
minOccurs="0">
</xsd:element>
</xsd:sequence>
<xsd:attribute name="outputFile" type="xsd:string"></xsd:attribute>
<xsd:attribute name="inputFile" type="xsd:string"></xsd:attribute>
<xsd:attribute name="filled" type="xsd:boolean"></xsd:attribute>
<xsd:attribute name="monoColor" type="xsd:boolean"></xsd:attribute>
<xsd:attribute name="onOff" type="xsd:boolean"></xsd:attribute>
<xsd:attribute name="name" type="xsd:string"></xsd:attribute>
</xsd:complexType>
</xsd:element>
<xsd:element name="DECollection">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="DrawableElement" maxOccurs="1"
minOccurs="0">
</xsd:element>
</xsd:sequence>
<xsd:attribute name="collectionName" type="xsd:string"></xsd:attribute>
<xsd:attribute name="pgenType" type="xsd:string"></xsd:attribute>
<xsd:attribute name="pgenCategory" type="xsd:string"></xsd:attribute>
</xsd:complexType>
</xsd:element>
<xsd:element name="Color">
<xsd:complexType>
<xsd:attribute name="alpha" use="optional">
<xsd:simpleType>
<xsd:restriction base="xsd:int">
<xsd:minInclusive value="0"></xsd:minInclusive>
<xsd:maxInclusive value="255"></xsd:maxInclusive>
</xsd:restriction>
</xsd:simpleType>
</xsd:attribute>
<xsd:attribute name="blue" use="required">
<xsd:simpleType>
<xsd:restriction base="xsd:int">
<xsd:minInclusive value="0"></xsd:minInclusive>
<xsd:maxInclusive value="255"></xsd:maxInclusive>
</xsd:restriction>
</xsd:simpleType>
</xsd:attribute>
<xsd:attribute name="green" use="required">
<xsd:simpleType>
<xsd:restriction base="xsd:int">
<xsd:minInclusive value="0"></xsd:minInclusive>
<xsd:maxInclusive value="255"></xsd:maxInclusive>
</xsd:restriction>
</xsd:simpleType>
</xsd:attribute>
<xsd:attribute name="red" use="required">
<xsd:simpleType>
<xsd:restriction base="xsd:int">
<xsd:minInclusive value="0"></xsd:minInclusive>
<xsd:maxInclusive value="255"></xsd:maxInclusive>
</xsd:restriction>
</xsd:simpleType>
</xsd:attribute>
</xsd:complexType>
</xsd:element>
<xsd:element name="DrawableElement">
<xsd:complexType>
<xsd:choice>
<xsd:element ref="DECollection" maxOccurs="unbounded"
minOccurs="0">
</xsd:element>
<xsd:element ref="Line" maxOccurs="unbounded"
minOccurs="0">
</xsd:element>
<xsd:element ref="Symbol" maxOccurs="unbounded"
minOccurs="0">
</xsd:element>
<xsd:element ref="Text" maxOccurs="unbounded"
minOccurs="0">
</xsd:element>
<xsd:element ref="AvnText" maxOccurs="unbounded"
minOccurs="0">
</xsd:element>
<xsd:element ref="MidCloudText" maxOccurs="unbounded"
minOccurs="0">
</xsd:element>
<xsd:element ref="Arc" maxOccurs="unbounded"
minOccurs="0">
</xsd:element>
<xsd:element ref="Vector" maxOccurs="unbounded"
minOccurs="0">
</xsd:element>
<xsd:element ref="Track" maxOccurs="unbounded"
minOccurs="0">
</xsd:element>
<xsd:element ref="Contours" maxOccurs="unbounded" minOccurs="0">
</xsd:element>
<xsd:element ref="TCA" maxOccurs="unbounded"
minOccurs="0">
</xsd:element>
<xsd:element ref="Sigmet" maxOccurs="unbounded"
minOccurs="0">
</xsd:element>
<xsd:element ref="WatchBox" maxOccurs="unbounded"
minOccurs="0">
</xsd:element>
<xsd:element ref="Gfa" maxOccurs="unbounded"
minOccurs="0">
</xsd:element>
<xsd:element ref="Volcano" maxOccurs="unbounded"
minOccurs="0">
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
<xsd:element name="Line">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="Color" maxOccurs="unbounded"
minOccurs="1">
</xsd:element>
<xsd:element ref="Point" maxOccurs="unbounded"
minOccurs="1">
</xsd:element>
</xsd:sequence>
<xsd:attribute name="flipSide" type="xsd:boolean"></xsd:attribute>
<xsd:attribute name="fillPattern" type="xsd:string"></xsd:attribute>
<xsd:attribute name="filled" type="xsd:boolean"></xsd:attribute>
<xsd:attribute name="closed" type="xsd:boolean"></xsd:attribute>
<xsd:attribute name="smoothFactor" type="xsd:int"></xsd:attribute>
<xsd:attribute name="sizeScale" type="xsd:double"></xsd:attribute>
<xsd:attribute name="lineWidth" type="xsd:float"></xsd:attribute>
<xsd:attribute name="pgenCategory" type="xsd:string"></xsd:attribute>
<xsd:attribute name="pgenType" type="xsd:string"></xsd:attribute>
</xsd:complexType>
</xsd:element>
<xsd:element name="WatchBox">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="Color" maxOccurs="unbounded"
minOccurs="1">
</xsd:element>
<xsd:element name="fillColor" type="ColorType">
</xsd:element>
<xsd:element ref="Point" maxOccurs="unbounded"
minOccurs="1">
</xsd:element>
<xsd:element name="AnchorPoints" type="xsd:string"
maxOccurs="unbounded" minOccurs="0">
</xsd:element>
<xsd:element name="Counties" type="xsd:string"
maxOccurs="unbounded" minOccurs="0">
</xsd:element>
<xsd:element name="States" type="xsd:string"
maxOccurs="unbounded" minOccurs="0">
</xsd:element>
<xsd:element name="Outline" maxOccurs="unbounded" minOccurs="0" >
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="Point" maxOccurs="unbounded"
minOccurs="3">
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="Hole" maxOccurs="unbounded" minOccurs="0" >
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="Point" maxOccurs="unbounded"
minOccurs="3">
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="Status" maxOccurs="unbounded" minOccurs="0" >
<xsd:complexType>
<xsd:attribute name="fromLine" type="xsd:string"></xsd:attribute>
<xsd:attribute name="mesoDiscussionNumber" type="xsd:int"></xsd:attribute>
<xsd:attribute name="statusValidTime" type="xsd:dateTime"></xsd:attribute>
<xsd:attribute name="statusExpTime" type="xsd:dateTime"></xsd:attribute>
<xsd:attribute name="statusForecaster" type="xsd:string"></xsd:attribute>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
<xsd:attribute name="pgenType" type="xsd:string"></xsd:attribute>
<xsd:attribute name="pgenCategory" type="xsd:string"></xsd:attribute>
<xsd:attribute name="boxShape" type="xsd:string"></xsd:attribute>
<xsd:attribute name="fillFlag" type="xsd:boolean"></xsd:attribute>
<xsd:attribute name="symbolType" type="xsd:string"></xsd:attribute>
<xsd:attribute name="symbolWidth" type="xsd:float"></xsd:attribute>
<xsd:attribute name="symbolSize" type="xsd:double"></xsd:attribute>
<xsd:attribute name="issueStatus" type="xsd:string"></xsd:attribute>
<xsd:attribute name="issueTime" type="xsd:dateTime"></xsd:attribute>
<xsd:attribute name="expTime" type="xsd:dateTime"></xsd:attribute>
<xsd:attribute name="severity" type="xsd:string"></xsd:attribute>
<xsd:attribute name="timeZone" type="xsd:string"></xsd:attribute>
<xsd:attribute name="hailSize" type="xsd:float"></xsd:attribute>
<xsd:attribute name="gust" type="xsd:int"></xsd:attribute>
<xsd:attribute name="top" type="xsd:int"></xsd:attribute>
<xsd:attribute name="moveDir" type="xsd:int"></xsd:attribute>
<xsd:attribute name="moveSpeed" type="xsd:int"></xsd:attribute>
<xsd:attribute name="adjAreas" type="xsd:string"></xsd:attribute>
<xsd:attribute name="replWatch" type="xsd:int"></xsd:attribute>
<xsd:attribute name="issueFlag" type="xsd:int"></xsd:attribute>
<xsd:attribute name="watchType" type="xsd:string"></xsd:attribute>
<xsd:attribute name="watchNumber" type="xsd:int"></xsd:attribute>
<xsd:attribute name="contWatch" type="xsd:int"></xsd:attribute>
<xsd:attribute name="forecaster" type="xsd:string"></xsd:attribute>
<xsd:attribute name="endPointAnc" type="xsd:string"></xsd:attribute>
<xsd:attribute name="endPointVor" type="xsd:string"></xsd:attribute>
<xsd:attribute name="halfWidthNm" type="xsd:int"></xsd:attribute>
<xsd:attribute name="halfWidthSm" type="xsd:int"></xsd:attribute>
<xsd:attribute name="watchAreaNm" type="xsd:int"></xsd:attribute>
<xsd:attribute name="wfos" type="xsd:string"></xsd:attribute>
</xsd:complexType>
</xsd:element>
<xsd:element name="Symbol">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="Color" maxOccurs="unbounded"
minOccurs="1">
</xsd:element>
<xsd:element ref="Point" maxOccurs="1" minOccurs="1"></xsd:element>
</xsd:sequence>
<xsd:attribute name="clear" type="xsd:boolean"></xsd:attribute>
<xsd:attribute name="sizeScale" type="xsd:double"></xsd:attribute>
<xsd:attribute name="lineWidth" type="xsd:float"></xsd:attribute>
<xsd:attribute name="pgenType" type="xsd:string"></xsd:attribute>
<xsd:attribute name="pgenCategory" type="xsd:string"></xsd:attribute>
</xsd:complexType>
</xsd:element>
<xsd:element name="Point">
<xsd:complexType>
<xsd:attribute name="Lon" type="xsd:double"></xsd:attribute>
<xsd:attribute name="Lat" type="xsd:double">
</xsd:attribute>
</xsd:complexType>
</xsd:element>
<xsd:element name="Text">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="Color" maxOccurs="unbounded"
minOccurs="1">
</xsd:element>
<xsd:element ref="Point" maxOccurs="1" minOccurs="1"></xsd:element>
<xsd:element name="textLine" type="xsd:string"
maxOccurs="unbounded" minOccurs="1">
</xsd:element>
</xsd:sequence>
<xsd:attribute name="auto" type="xsd:boolean"></xsd:attribute>
<xsd:attribute name="hide" type="xsd:boolean"></xsd:attribute>
<xsd:attribute name="xOffset" type="xsd:int"></xsd:attribute>
<xsd:attribute name="yOffset" type="xsd:int"></xsd:attribute>
<xsd:attribute name="outline" type="xsd:boolean"></xsd:attribute>
<xsd:attribute name="mask" type="xsd:boolean"></xsd:attribute>
<xsd:attribute name="rotationRelativity"
type="xsd:string">
</xsd:attribute>
<xsd:attribute name="rotation" type="xsd:double"></xsd:attribute>
<xsd:attribute name="justification" type="xsd:string"></xsd:attribute>
<xsd:attribute name="style" type="xsd:string"></xsd:attribute>
<xsd:attribute name="fontName" type="xsd:string"></xsd:attribute>
<xsd:attribute name="fontSize" type="xsd:float"></xsd:attribute>
<xsd:attribute name="pgenType" type="xsd:string"></xsd:attribute>
<xsd:attribute name="pgenCategory" type="xsd:string"></xsd:attribute>
</xsd:complexType>
</xsd:element>
<xsd:element name="AvnText">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="Color" maxOccurs="unbounded"
minOccurs="1">
</xsd:element>
<xsd:element ref="Point" maxOccurs="1" minOccurs="1"></xsd:element>
</xsd:sequence>
<xsd:attribute name="avnTextType" type="xsd:string"></xsd:attribute>
<xsd:attribute name="topValue" type="xsd:string"></xsd:attribute>
<xsd:attribute name="bottomValue" type="xsd:string"></xsd:attribute>
<xsd:attribute name="justification" type="xsd:string"></xsd:attribute>
<xsd:attribute name="style" type="xsd:string"></xsd:attribute>
<xsd:attribute name="fontName" type="xsd:string"></xsd:attribute>
<xsd:attribute name="fontSize" type="xsd:float"></xsd:attribute>
<xsd:attribute name="symbolPatternName" type="xsd:string"></xsd:attribute>
<xsd:attribute name="pgenType" type="xsd:string"></xsd:attribute>
<xsd:attribute name="pgenCategory" type="xsd:string"></xsd:attribute>
</xsd:complexType>
</xsd:element>
<xsd:element name="MidCloudText">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="Color" maxOccurs="unbounded"
minOccurs="1">
</xsd:element>
<xsd:element ref="Point" maxOccurs="1" minOccurs="1"></xsd:element>
</xsd:sequence>
<xsd:attribute name="cloudTypes" type="xsd:string"></xsd:attribute>
<xsd:attribute name="cloudAmounts" type="xsd:string"></xsd:attribute>
<xsd:attribute name="turbulenceType" type="xsd:string"></xsd:attribute>
<xsd:attribute name="turbulenceLevels" type="xsd:string"></xsd:attribute>
<xsd:attribute name="icingType" type="xsd:string"></xsd:attribute>
<xsd:attribute name="icingLevels" type="xsd:string"></xsd:attribute>
<xsd:attribute name="tstormTypes" type="xsd:string"></xsd:attribute>
<xsd:attribute name="tstormLevels" type="xsd:string"></xsd:attribute>
<xsd:attribute name="justification" type="xsd:string"></xsd:attribute>
<xsd:attribute name="style" type="xsd:string"></xsd:attribute>
<xsd:attribute name="fontName" type="xsd:string"></xsd:attribute>
<xsd:attribute name="fontSize" type="xsd:float"></xsd:attribute>
<xsd:attribute name="pgenType" type="xsd:string"></xsd:attribute>
<xsd:attribute name="pgenCategory" type="xsd:string"></xsd:attribute>
</xsd:complexType>
</xsd:element>
<xsd:element name="Arc">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="Color" maxOccurs="unbounded"
minOccurs="1">
</xsd:element>
<xsd:element ref="Point" maxOccurs="unbounded"
minOccurs="1">
</xsd:element>
</xsd:sequence>
<xsd:attribute name="fillPattern" type="xsd:string"></xsd:attribute>
<xsd:attribute name="filled" type="xsd:boolean"></xsd:attribute>
<xsd:attribute name="closed" type="xsd:boolean"></xsd:attribute>
<xsd:attribute name="smoothFactor" type="xsd:int"></xsd:attribute>
<xsd:attribute name="sizeScale" type="xsd:double"></xsd:attribute>
<xsd:attribute name="linePattern" type="xsd:string"></xsd:attribute>
<xsd:attribute name="lineWidth" type="xsd:float"></xsd:attribute>
<xsd:attribute name="axisRatio" type="xsd:double"></xsd:attribute>
<xsd:attribute name="startAngle" type="xsd:double"></xsd:attribute>
<xsd:attribute name="endAngle" type="xsd:double"></xsd:attribute>
<xsd:attribute name="pgenType" type="xsd:string"></xsd:attribute>
<xsd:attribute name="pgenCategory" type="xsd:string"></xsd:attribute>
</xsd:complexType>
</xsd:element>
<xsd:complexType name="TrackPoint">
<xsd:sequence>
<xsd:element name="time" type="xsd:dateTime" />
<xsd:element name="location">
<xsd:complexType>
<xsd:attribute name="longitude" type="xsd:double"></xsd:attribute>
<xsd:attribute name="latitude" type="xsd:double"></xsd:attribute>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="ColorType">
<xsd:sequence>
<xsd:element ref="Color" maxOccurs="1" minOccurs="1"/>
</xsd:sequence>
</xsd:complexType>
<xsd:element name="Track">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="initialColor" type="ColorType"></xsd:element>
<xsd:element name="extrapColor" type="ColorType"></xsd:element>
<xsd:element name="initialPoints" type="TrackPoint" maxOccurs="unbounded" minOccurs="1"></xsd:element>
<xsd:element name="extrapPoints" type="TrackPoint" maxOccurs="unbounded" minOccurs="1"></xsd:element>
<xsd:element name="extraPointTimeTextDisplayIndicator" type="xsd:boolean" maxOccurs="unbounded" minOccurs="1"></xsd:element>
</xsd:sequence>
<xsd:attribute name="initialLinePattern" type="xsd:string"></xsd:attribute>
<xsd:attribute name="extrapLinePattern" type="xsd:string"></xsd:attribute>
<xsd:attribute name="initialMarker" type="xsd:string"></xsd:attribute>
<xsd:attribute name="extrapMarker" type="xsd:string"></xsd:attribute>
<xsd:attribute name="lineWidth" type="xsd:float"></xsd:attribute>
<xsd:attribute name="fontName" type="xsd:string"></xsd:attribute>
<xsd:attribute name="fontSize" type="xsd:float"></xsd:attribute>
<xsd:attribute name="pgenType" type="xsd:string"></xsd:attribute>
<xsd:attribute name="pgenCategory" type="xsd:string"></xsd:attribute>
<xsd:attribute name="setTimeButtonSelected" type="xsd:boolean"></xsd:attribute>
<xsd:attribute name="intervalComboSelectedIndex" type="xsd:int"></xsd:attribute>
<xsd:attribute name="intervalTimeTextString" type="xsd:string"></xsd:attribute>
<xsd:attribute name="extraPointTimeDisplayOptionName" type="xsd:string"></xsd:attribute>
<xsd:attribute name="skipFactorTextString" type="xsd:string"></xsd:attribute>
<xsd:attribute name="fontNameComboSelectedIndex" type="xsd:int"></xsd:attribute>
<xsd:attribute name="fontSizeComboSelectedIndex" type="xsd:int"></xsd:attribute>
<xsd:attribute name="fontStyleComboSelectedIndex" type="xsd:int"></xsd:attribute>
</xsd:complexType>
</xsd:element>
<xsd:element name="Vector">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="Color" maxOccurs="unbounded"
minOccurs="1">
</xsd:element>
<xsd:element ref="Point" maxOccurs="1" minOccurs="1"></xsd:element>
</xsd:sequence>
<xsd:attribute name="clear" type="xsd:boolean"></xsd:attribute>
<xsd:attribute name="sizeScale" type="xsd:double"></xsd:attribute>
<xsd:attribute name="lineWidth" type="xsd:float"></xsd:attribute>
<xsd:attribute name="directionOnly" type="xsd:boolean"></xsd:attribute>
<xsd:attribute name="arrowHeadSize" type="xsd:double"></xsd:attribute>
<xsd:attribute name="speed" type="xsd:double"></xsd:attribute>
<xsd:attribute name="direction" type="xsd:double"></xsd:attribute>
<xsd:attribute name="pgenType" type="xsd:string"></xsd:attribute>
<xsd:attribute name="pgenCategory" type="xsd:string"></xsd:attribute>
</xsd:complexType>
</xsd:element>
<xsd:element name="Contours">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="DECollection" maxOccurs="unbounded"
minOccurs="0">
</xsd:element>
</xsd:sequence>
<xsd:attribute name="cint" type="xsd:string"></xsd:attribute>
<xsd:attribute name="time2" type="xsd:dateTime"></xsd:attribute>
<xsd:attribute name="time1" type="xsd:dateTime"></xsd:attribute>
<xsd:attribute name="forecastHour" type="xsd:string"></xsd:attribute>
<xsd:attribute name="level" type="xsd:string"></xsd:attribute>
<xsd:attribute name="parm" type="xsd:string"></xsd:attribute>
<xsd:attribute name="pgenType" type="xsd:string"></xsd:attribute>
<xsd:attribute name="pgenCategory" type="xsd:string"></xsd:attribute>
<xsd:attribute name="collectionName" type="xsd:string"></xsd:attribute>
</xsd:complexType>
</xsd:element>
<xsd:element name="Outlook">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="DECollection" maxOccurs="unbounded"
minOccurs="0">
</xsd:element>
</xsd:sequence>
<xsd:attribute name="pgenType" type="xsd:string"></xsd:attribute>
<xsd:attribute name="pgenCategory" type="xsd:string"></xsd:attribute>
<xsd:attribute name="name" type="xsd:string"></xsd:attribute>
<xsd:attribute name="outlookType" type="xsd:string"></xsd:attribute>
<xsd:attribute name="forecaster" type="xsd:string"></xsd:attribute>
<xsd:attribute name="days" type="xsd:string"></xsd:attribute>
<xsd:attribute name="lineInfo" type="xsd:string"></xsd:attribute>
<xsd:attribute name="issueTime" type="xsd:dateTime"></xsd:attribute>
<xsd:attribute name="expTime" type="xsd:dateTime"></xsd:attribute>
</xsd:complexType>
</xsd:element>
<xsd:element name="TCA">
<xsd:complexType>
<xsd:sequence>
<!--xsd:element ref="Color" maxOccurs="unbounded"
minOccurs="1">
</xsd:element-->
<!--xsd:element ref="Advisory" maxOccurs="1" minOccurs="1">
</xsd:element-->
</xsd:sequence>
<xsd:attribute name="stormNumber" type="xsd:int"></xsd:attribute>
<xsd:attribute name="stormName" type="xsd:string"></xsd:attribute>
<xsd:attribute name="basin" type="xsd:string"></xsd:attribute>
<xsd:attribute name="issueStatus" type="xsd:string"></xsd:attribute>
<xsd:attribute name="stormType" type="xsd:string"></xsd:attribute>
<xsd:attribute name="advisoryNumber" type="xsd:string"></xsd:attribute>
<xsd:attribute name="advisoryTime" type="xsd:dateTime"></xsd:attribute>
<xsd:attribute name="timeZone" type="xsd:string"></xsd:attribute>
<!--xsd:attribute name="textLocation" ref="Point"></xsd:attribute-->
<xsd:attribute name="pgenType" type="xsd:string"></xsd:attribute>
<xsd:attribute name="pgenCategory" type="xsd:string"></xsd:attribute>
</xsd:complexType>
</xsd:element>
<xsd:element name="Sigmet">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="Color" maxOccurs="unbounded"
minOccurs="1">
</xsd:element>
<xsd:element ref="Point" maxOccurs="unbounded"
minOccurs="1">
</xsd:element>
</xsd:sequence>
<xsd:attribute name="pgenType" type="xsd:string"></xsd:attribute>
<xsd:attribute name="fillPattern" type="xsd:string"></xsd:attribute>
<xsd:attribute name="filled" type="xsd:boolean"></xsd:attribute>
<xsd:attribute name="closed" type="xsd:boolean"></xsd:attribute>
<xsd:attribute name="smoothFactor" type="xsd:int"></xsd:attribute>
<xsd:attribute name="sizeScale" type="xsd:double"></xsd:attribute>
<xsd:attribute name="lineWidth" type="xsd:float"></xsd:attribute>
<xsd:attribute name="pgenCategory" type="xsd:string"></xsd:attribute>
<xsd:attribute name="type" type="xsd:string"></xsd:attribute>
<xsd:attribute name="width" type="xsd:double"></xsd:attribute>
<xsd:attribute name="editableAttrArea" type="xsd:string"></xsd:attribute>
<xsd:attribute name="editableAttrStatus" type="xsd:string"></xsd:attribute>
<xsd:attribute name="editableAttrId" type="xsd:string"></xsd:attribute>
<xsd:attribute name="editableAttrSeqNum" type="xsd:string"></xsd:attribute>
<xsd:attribute name="editableAttrStartTime" type="xsd:string"></xsd:attribute>
<xsd:attribute name="editableAttrEndTime" type="xsd:string"></xsd:attribute>
<xsd:attribute name="editableAttrRemarks" type="xsd:string"></xsd:attribute>
<xsd:attribute name="editableAttrPhenom" type="xsd:string"></xsd:attribute>
<xsd:attribute name="editableAttrPhenom2" type="xsd:string"></xsd:attribute>
<xsd:attribute name="editableAttrPhenomName" type="xsd:string"></xsd:attribute>
<xsd:attribute name="editableAttrPhenomLat" type="xsd:string"></xsd:attribute>
<xsd:attribute name="editableAttrPhenomLon" type="xsd:string"></xsd:attribute>
<xsd:attribute name="editableAttrPhenomPressure" type="xsd:string"></xsd:attribute>
<xsd:attribute name="editableAttrPhenomMaxWind" type="xsd:string"></xsd:attribute>
<xsd:attribute name="editableAttrFreeText" type="xsd:string"></xsd:attribute>
<xsd:attribute name="editableAttrTrend" type="xsd:string"></xsd:attribute>
<xsd:attribute name="editableAttrMovement" type="xsd:string"></xsd:attribute>
<xsd:attribute name="editableAttrPhenomSpeed" type="xsd:string"></xsd:attribute>
<xsd:attribute name="editableAttrPhenomDirection" type="xsd:string"></xsd:attribute>
<xsd:attribute name="editableAttrLevel" type="xsd:string"></xsd:attribute>
<xsd:attribute name="editableAttrLevelInfo1" type="xsd:string"></xsd:attribute>
<xsd:attribute name="editableAttrLevelInfo2" type="xsd:string"></xsd:attribute>
<xsd:attribute name="editableAttrLevelText1" type="xsd:string"></xsd:attribute>
<xsd:attribute name="editableAttrLevelText2" type="xsd:string"></xsd:attribute>
<xsd:attribute name="editableAttrFromLine" type="xsd:string"></xsd:attribute>
<xsd:attribute name="editableAttrFir" type="xsd:string"></xsd:attribute>
</xsd:complexType>
</xsd:element>
<xsd:element name="Gfa">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="Color" maxOccurs="unbounded"
minOccurs="1">
</xsd:element>
<xsd:element ref="Point" maxOccurs="unbounded"
minOccurs="1">
</xsd:element>
</xsd:sequence>
<xsd:attribute name="otlkCondsEndg" type="xsd:string"></xsd:attribute>
<xsd:attribute name="otlkCondsDvlpg" type="xsd:string"></xsd:attribute>
<xsd:attribute name="condsContg" type="xsd:string"></xsd:attribute>
<xsd:attribute name="fromCondsEndg" type="xsd:string"></xsd:attribute>
<xsd:attribute name="fromCondsDvlpg" type="xsd:string"></xsd:attribute>
<xsd:attribute name="untilTime" type="xsd:string"></xsd:attribute>
<xsd:attribute name="issueTime" type="xsd:string"></xsd:attribute>
<xsd:attribute name="textVor" type="xsd:string"></xsd:attribute>
<xsd:attribute name="otherValues" type="xsd:string"></xsd:attribute>
<xsd:attribute name="contour" type="xsd:string"></xsd:attribute>
<xsd:attribute name="gr" type="xsd:string"></xsd:attribute>
<xsd:attribute name="frequency" type="xsd:string"></xsd:attribute>
<xsd:attribute name="tsCategory" type="xsd:string"></xsd:attribute>
<xsd:attribute name="fzlRange" type="xsd:string"></xsd:attribute>
<xsd:attribute name="level" type="xsd:string"></xsd:attribute>
<xsd:attribute name="intensity" type="xsd:string"></xsd:attribute>
<xsd:attribute name="speed" type="xsd:string"></xsd:attribute>
<xsd:attribute name="dueTo" type="xsd:string"></xsd:attribute>
<xsd:attribute name="lyr" type="xsd:string"></xsd:attribute>
<xsd:attribute name="coverage" type="xsd:string"></xsd:attribute>
<xsd:attribute name="fzlTopBottom" type="xsd:string"></xsd:attribute>
<xsd:attribute name="bottom" type="xsd:string"></xsd:attribute>
<xsd:attribute name="top" type="xsd:string"></xsd:attribute>
<xsd:attribute name="states" type="xsd:string"></xsd:attribute>
<xsd:attribute name="ending" type="xsd:string"></xsd:attribute>
<xsd:attribute name="beginning" type="xsd:string"></xsd:attribute>
<xsd:attribute name="area" type="xsd:string"></xsd:attribute>
<xsd:attribute name="type" type="xsd:string"></xsd:attribute>
<xsd:attribute name="cycleHour" type="xsd:int"></xsd:attribute>
<xsd:attribute name="cycleDay" type="xsd:int"></xsd:attribute>
<xsd:attribute name="isOutlook" type="xsd:boolean"></xsd:attribute>
<xsd:attribute name="issueType" type="xsd:string"></xsd:attribute>
<xsd:attribute name="desk" type="xsd:string"></xsd:attribute>
<xsd:attribute name="tag" type="xsd:string"></xsd:attribute>
<xsd:attribute name="fcstHr" type="xsd:string"></xsd:attribute>
<xsd:attribute name="hazard" type="xsd:string"></xsd:attribute>
<xsd:attribute name="lonText" type="xsd:double"></xsd:attribute>
<xsd:attribute name="latText" type="xsd:double"></xsd:attribute>
<xsd:attribute name="fillPattern" type="xsd:string"></xsd:attribute>
<xsd:attribute name="filled" type="xsd:boolean"></xsd:attribute>
<xsd:attribute name="closed" type="xsd:boolean"></xsd:attribute>
<xsd:attribute name="smoothFactor" type="xsd:int"></xsd:attribute>
<xsd:attribute name="sizeScale" type="xsd:double"></xsd:attribute>
<xsd:attribute name="lineWidth" type="xsd:float"></xsd:attribute>
<xsd:attribute name="pgenType" type="xsd:string"></xsd:attribute>
<xsd:attribute name="pgenCategory" type="xsd:string"></xsd:attribute>
</xsd:complexType>
</xsd:element>
<xsd:element name="Volcano">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="Color" maxOccurs="unbounded"
minOccurs="1">
</xsd:element>
<xsd:element ref="Point" maxOccurs="unbounded"
minOccurs="1">
</xsd:element>
</xsd:sequence>
<xsd:attribute name="clear" type="xsd:boolean"></xsd:attribute>
<xsd:attribute name="sizeScale" type="xsd:double"></xsd:attribute>
<xsd:attribute name="lineWidth" type="xsd:float"></xsd:attribute>
<xsd:attribute name="pgenType" type="xsd:string"></xsd:attribute>
<xsd:attribute name="pgenCategory" type="xsd:string"></xsd:attribute>
<xsd:attribute name="name" type="xsd:string"></xsd:attribute>
<xsd:attribute name="number" type="xsd:string"></xsd:attribute>
<xsd:attribute name="txtLoc" type="xsd:string"></xsd:attribute>
<xsd:attribute name="area" type="xsd:string"></xsd:attribute>
<xsd:attribute name="elev" type="xsd:string"></xsd:attribute>
<xsd:attribute name="origStnVAAC" type="xsd:string"></xsd:attribute>
<xsd:attribute name="wmoId" type="xsd:string"></xsd:attribute>
<xsd:attribute name="hdrNum" type="xsd:string"></xsd:attribute>
<xsd:attribute name="product" type="xsd:string"></xsd:attribute>
<xsd:attribute name="year" type="xsd:string"></xsd:attribute>
<xsd:attribute name="advNum" type="xsd:string"></xsd:attribute>
<xsd:attribute name="corr" type="xsd:string"></xsd:attribute>
<xsd:attribute name="infoSource" type="xsd:string"></xsd:attribute>
<xsd:attribute name="addInfoSource" type="xsd:string"></xsd:attribute>
<xsd:attribute name="aviColorCode" type="xsd:string"></xsd:attribute>
<xsd:attribute name="erupDetails" type="xsd:string"></xsd:attribute>
<xsd:attribute name="obsAshDate" type="xsd:string"></xsd:attribute>
<xsd:attribute name="obsAshTime" type="xsd:string"></xsd:attribute>
<xsd:attribute name="nil" type="xsd:string"></xsd:attribute>
<xsd:attribute name="obsFcstAshCloudInfo" type="xsd:string"></xsd:attribute>
<xsd:attribute name="obsFcstAshCloudInfo6" type="xsd:string"></xsd:attribute>
<xsd:attribute name="obsFcstAshCloudInfo12" type="xsd:string"></xsd:attribute>
<xsd:attribute name="obsFcstAshCloudInfo18" type="xsd:string"></xsd:attribute>
<xsd:attribute name="remarks" type="xsd:string"></xsd:attribute>
<xsd:attribute name="nextAdv" type="xsd:string"></xsd:attribute>
<xsd:attribute name="forecasters" type="xsd:string"></xsd:attribute>
</xsd:complexType>
</xsd:element>
</xsd:schema>

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,65 @@
!
! QPF.TBL
!
! This table contains the "restore" information for the QPF NMAP
! graph-to-grid processing.
!
! See the table "grphgd.tbl" for the current list and explanation of all
! valid PARAMETERs and their VALUEs.
!
!
!!
! Log:
! D.W.Plummer/NCEP 3/00
! D.W.Plummer/NCEP 5/00 Added FINT, FLINE and CLRBAR
! D.W.Plummer/NCEP 8/00 Remove "| ATL" from CPYFIL parameter
! F. J. Yen/NCEP 1/08 Added KEYLINE and OLKDAY
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!
!PARAMETER VALUE
!
VGF_TEMPLATE qpf_PPPP_YYYYMMDDHHfFFF.vgf
!
GDOUTF PPPP_YYYYMMDDHHfFFF.grd
!
CNTRFL PPPP_YYYYMMDDHHfFFF.info
!
PATH .
!
GVCORD none
!
GLEVEL 0
!
GGLIMS -30;-30||-30
!
KEYCOL
!
KEYLINE
!
OLKDAY
!
MAXGRD 10
!
HISTGRD YES
!
GFUNC HGMT
! Specify either CPYFIL - OR -
CPYFIL
! the combination PROJ, GRDAREA, KXKY and ANLYSS
PROJ CED
GRDAREA US
KXKY 63;28
ANLYSS
!
!
! The following are used to contour/display the grid once it has been created
!
CINT -20;-10;0;10;20;30;40;50;60;70
!
LINE 31/1/4
!
FINT -20;-10;0;10;20;30;40;50;60;70
!
FLINE 0;21-30;14-20;5
!
CLRBAR 1

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

View file

@ -0,0 +1,932 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Products xmlns:ns2="http://www.example.org/productType" xmlns:ns3="group">
<Product name="PGEN Settings" type="Default" forecaster="Default" center="Default" onOff="true" saveLayers="false" useFile="false">
<Layer name="Default" onOff="true" monoColor="false" filled="false">
<Color red="255" green="255" blue="0" alpha="255"/>
<DrawableElement>
<DECollection pgenCategory="MET" pgenType="JET" collectionName="Jet">
<DrawableElement>
<DECollection collectionName="WindInfo">
<DrawableElement>
<Text pgenCategory="Text" pgenType="General Text" fontSize="18.0" fontName="Courier" style="REGULAR" justification="CENTER" rotation="289.0" rotationRelativity="SCREEN_RELATIVE" mask="false" displayType="NORMAL" yOffset="0" xOffset="0" hide="false" auto="false">
<Color red="255" green="0" blue="0" alpha="255"/>
<Point Lat="24.370719825166535" Lon="-122.20535221347572"/>
<textLine>FL300</textLine>
</Text>
<Vector pgenCategory="Vector" pgenType="Barb" direction="323.01585993274364" speed="120.0" arrowHeadSize="1.0" directionOnly="false" lineWidth="2.0" sizeScale="2.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Point Lat="23.48763893335557" Lon="-120.67426748783554"/>
</Vector>
</DrawableElement>
</DECollection>
<Line pgenType="FILLED_ARROW" pgenCategory="Lines" lineWidth="3.0" sizeScale="2.5" smoothFactor="2" closed="false" filled="false" fillPattern="SOLID" flipSide="false">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="22.385743592166126" Lon="-126.84696477158134"/>
<Point Lat="25.60626233946596" Lon="-123.12227870665762"/>
<Point Lat="21.951934533639328" Lon="-118.85344452470602"/>
<Point Lat="23.451422828483725" Lon="-113.78402123979879"/>
</Line>
<Vector pgenCategory="Vector" pgenType="Hash" direction="291.0" speed="10.0" arrowHeadSize="1.0" directionOnly="false" lineWidth="2.0" sizeScale="2.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Point Lat="25.496929136470555" Lon="-123.84130908818742"/>
</Vector>
<Vector pgenCategory="Vector" pgenType="Hash" direction="279.9856150498179" speed="10.0" arrowHeadSize="1.0" directionOnly="false" lineWidth="2.0" sizeScale="2.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Point Lat="21.934652835268857" Lon="-117.6045917472339"/>
</Vector>
</DrawableElement>
</DECollection>
<Line pgenType="COLD_FRONT" pgenCategory="Front" lineWidth="2.0" sizeScale="1.0" smoothFactor="2" closed="false" filled="false" fillPattern="SOLID" flipSide="false">
<Color red="0" green="0" blue="255" alpha="255"/>
<Point Lat="55.94050058070887" Lon="-131.2947265543222"/>
<Point Lat="56.92703317452704" Lon="-124.05114780456228"/>
</Line>
<Line pgenType="COLD_FRONT_FORM" pgenCategory="Front" lineWidth="2.0" sizeScale="1.0" smoothFactor="2" closed="false" filled="false" fillPattern="SOLID" flipSide="false">
<Color red="0" green="0" blue="255" alpha="255"/>
<Point Lat="54.469461460200364" Lon="-131.23929126229424"/>
<Point Lat="55.479090120068705" Lon="-123.67509493467838"/>
</Line>
<Line pgenType="COLD_FRONT_DISS" pgenCategory="Front" lineWidth="2.0" sizeScale="1.0" smoothFactor="2" closed="false" filled="false" fillPattern="SOLID" flipSide="false">
<Color red="0" green="0" blue="255" alpha="255"/>
<Point Lat="53.644502667923746" Lon="-131.03926144529453"/>
<Point Lat="54.45390335952878" Lon="-123.92966847273993"/>
</Line>
<Line pgenType="WARM_FRONT" pgenCategory="Front" lineWidth="2.0" sizeScale="1.0" smoothFactor="2" closed="false" filled="false" fillPattern="SOLID" flipSide="false">
<Color red="255" green="0" blue="0" alpha="255"/>
<Point Lat="52.331560558143536" Lon="-130.45188837028533"/>
<Point Lat="53.358408429589204" Lon="-123.79879443419208"/>
</Line>
<Line pgenType="WARM_FRONT_FORM" pgenCategory="Front" lineWidth="2.0" sizeScale="1.0" smoothFactor="2" closed="false" filled="false" fillPattern="SOLID" flipSide="false">
<Color red="255" green="0" blue="0" alpha="255"/>
<Point Lat="51.42436056937775" Lon="-129.97350321809662"/>
<Point Lat="52.2559805540691" Lon="-124.02687501632668"/>
</Line>
<Line pgenType="WARM_FRONT_DISS" pgenCategory="Front" lineWidth="2.0" sizeScale="1.0" smoothFactor="2" closed="false" filled="false" fillPattern="SOLID" flipSide="false">
<Color red="255" green="0" blue="0" alpha="255"/>
<Point Lat="50.28607010358857" Lon="-129.5023427566131"/>
<Point Lat="51.25322043299898" Lon="-123.41618856329704"/>
</Line>
<Line pgenType="STATIONARY_FRONT" pgenCategory="Front" lineWidth="2.0" sizeScale="1.0" smoothFactor="2" closed="false" filled="false" fillPattern="SOLID" flipSide="false">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="0" blue="255" alpha="255"/>
<Point Lat="49.18679867026702" Lon="-129.06404350242326"/>
<Point Lat="49.968577859313264" Lon="-123.59098898930479"/>
</Line>
<Line pgenType="STATIONARY_FRONT_FORM" pgenCategory="Front" lineWidth="2.0" sizeScale="1.0" smoothFactor="2" closed="false" filled="false" fillPattern="SOLID" flipSide="false">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="0" blue="255" alpha="255"/>
<Point Lat="48.04932315420111" Lon="-128.45703802705694"/>
<Point Lat="48.81264523519168" Lon="-123.12972759447176"/>
</Line>
<Line pgenType="STATIONARY_FRONT_DISS" pgenCategory="Front" lineWidth="2.0" sizeScale="1.0" smoothFactor="2" closed="false" filled="false" fillPattern="SOLID" flipSide="false">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="0" blue="255" alpha="255"/>
<Point Lat="46.91224524906041" Lon="-127.78630221983752"/>
<Point Lat="47.7402653944268" Lon="-122.79359750234181"/>
</Line>
<Line pgenType="OCCLUDED_FRONT" pgenCategory="Front" lineWidth="2.0" sizeScale="1.0" smoothFactor="2" closed="false" filled="false" fillPattern="SOLID" flipSide="false">
<Color red="160" green="32" blue="240" alpha="255"/>
<Point Lat="45.69616188248049" Lon="-127.52141828654428"/>
<Point Lat="46.54998215160349" Lon="-122.02056066681982"/>
</Line>
<Line pgenType="OCCLUDED_FRONT_FORM" pgenCategory="Front" lineWidth="2.0" sizeScale="1.0" smoothFactor="2" closed="false" filled="false" fillPattern="SOLID" flipSide="false">
<Color red="160" green="32" blue="240" alpha="255"/>
<Point Lat="44.441786316587034" Lon="-127.41702058478937"/>
<Point Lat="45.38858618752492" Lon="-120.9534845555878"/>
</Line>
<Line pgenType="OCCLUDED_FRONT_DISS" pgenCategory="Front" lineWidth="2.0" sizeScale="1.0" smoothFactor="2" closed="false" filled="false" fillPattern="SOLID" flipSide="false">
<Color red="160" green="32" blue="240" alpha="255"/>
<Point Lat="43.28060584220657" Lon="-126.38529622379171"/>
<Point Lat="44.18483795662828" Lon="-120.9493775179665"/>
</Line>
<Line pgenType="TROF" pgenCategory="Front" lineWidth="2.0" sizeScale="1.0" smoothFactor="2" closed="false" filled="false" fillPattern="SOLID" flipSide="false">
<Color red="255" green="165" blue="0" alpha="255"/>
<Point Lat="42.04447629723107" Lon="-126.07230844814251"/>
<Point Lat="42.857150193538786" Lon="-120.51901209329233"/>
</Line>
<Line pgenType="TROPICAL_TROF" pgenCategory="Front" lineWidth="2.0" sizeScale="1.0" smoothFactor="2" closed="false" filled="false" fillPattern="SOLID" flipSide="false">
<Color red="255" green="165" blue="0" alpha="255"/>
<Point Lat="40.673057462722916" Lon="-125.8070086034075"/>
<Point Lat="41.5982437425656" Lon="-120.35488795025793"/>
</Line>
<Line pgenType="DRY_LINE" pgenCategory="Front" lineWidth="2.0" sizeScale="1.0" smoothFactor="2" closed="false" filled="false" fillPattern="SOLID" flipSide="false">
<Color red="255" green="165" blue="0" alpha="255"/>
<Point Lat="39.530718541611584" Lon="-125.54230810486656"/>
<Point Lat="40.408239618320415" Lon="-120.05940295421559"/>
</Line>
<Line pgenType="INSTABILITY" pgenCategory="Front" lineWidth="2.0" sizeScale="1.0" smoothFactor="2" closed="false" filled="false" fillPattern="SOLID" flipSide="false">
<Color red="255" green="0" blue="0" alpha="255"/>
<Point Lat="37.779530031591975" Lon="-124.95888526230613"/>
<Point Lat="38.60506004629856" Lon="-119.85585806847165"/>
</Line>
<Line pgenType="LINE_SOLID" pgenCategory="Lines" lineWidth="2.0" sizeScale="1.0" smoothFactor="2" closed="false" filled="false" fillPattern="SOLID" flipSide="false">
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="57.704562232189716" Lon="-119.17524290838445"/>
<Point Lat="58.20726897317869" Lon="-112.46182935525103"/>
</Line>
<Line pgenType="POINTED_ARROW" pgenCategory="Lines" lineWidth="2.0" sizeScale="1.0" smoothFactor="0" closed="false" filled="false" fillPattern="SOLID" flipSide="false">
<Color red="255" green="0" blue="0" alpha="255"/>
<Point Lat="56.52980260725664" Lon="-118.78917656563178"/>
<Point Lat="57.08741025945119" Lon="-112.10090167810085"/>
</Line>
<Line pgenType="FILLED_ARROW" pgenCategory="Lines" lineWidth="2.0" sizeScale="1.0" smoothFactor="0" closed="false" filled="false" fillPattern="SOLID" flipSide="false">
<Color red="255" green="0" blue="0" alpha="255"/>
<Point Lat="55.70362802041158" Lon="-118.34555882895849"/>
<Point Lat="56.23099353997903" Lon="-112.08769103846618"/>
</Line>
<Line pgenType="LINE_DASHED_2" pgenCategory="Lines" lineWidth="2.0" sizeScale="1.0" smoothFactor="2" closed="false" filled="false" fillPattern="SOLID" flipSide="false">
<Color red="255" green="0" blue="0" alpha="255"/>
<Point Lat="54.80658941995571" Lon="-118.52589424114309"/>
<Point Lat="55.49749102257913" Lon="-111.65161464251916"/>
</Line>
<Line pgenType="LINE_DASHED_3" pgenCategory="Lines" lineWidth="2.0" sizeScale="1.0" smoothFactor="2" closed="false" filled="false" fillPattern="SOLID" flipSide="false">
<Color red="255" green="255" blue="0" alpha="255"/>
<Point Lat="53.937321349002225" Lon="-117.81957797465058"/>
<Point Lat="54.56614498076134" Lon="-111.72097286373898"/>
</Line>
<Line pgenType="LINE_DASHED_4" pgenCategory="Lines" lineWidth="2.0" sizeScale="1.0" smoothFactor="2" closed="false" filled="false" fillPattern="SOLID" flipSide="false">
<Color red="255" green="255" blue="0" alpha="255"/>
<Point Lat="52.85915673197243" Lon="-117.51511075331841"/>
<Point Lat="53.404953885387464" Lon="-111.91929527587178"/>
</Line>
<Line pgenType="LINE_DASHED_5" pgenCategory="Lines" lineWidth="2.0" sizeScale="1.0" smoothFactor="2" closed="false" filled="false" fillPattern="SOLID" flipSide="false">
<Color red="255" green="255" blue="0" alpha="255"/>
<Point Lat="51.645620451810196" Lon="-117.35975928365046"/>
<Point Lat="51.908897577572404" Lon="-114.0400949010151"/>
<Point Lat="52.208764399614815" Lon="-111.67346709290742"/>
</Line>
<Line pgenType="LINE_DASHED_6" pgenCategory="Lines" lineWidth="2.0" sizeScale="1.0" smoothFactor="2" closed="false" filled="false" fillPattern="SOLID" flipSide="false">
<Color red="255" green="255" blue="0" alpha="255"/>
<Point Lat="50.70749072049002" Lon="-117.02689975281213"/>
<Point Lat="51.19573270488142" Lon="-111.6448225897766"/>
</Line>
<Line pgenType="LINE_DASHED_7" pgenCategory="Lines" lineWidth="2.0" sizeScale="1.0" smoothFactor="2" closed="false" filled="false" fillPattern="SOLID" flipSide="false">
<Color red="255" green="255" blue="0" alpha="255"/>
<Point Lat="49.73401246530588" Lon="-116.94934248252305"/>
<Point Lat="50.272444050835496" Lon="-111.72103176011291"/>
</Line>
<Line pgenType="LINE_DASHED_8" pgenCategory="Lines" lineWidth="2.0" sizeScale="1.0" smoothFactor="2" closed="false" filled="false" fillPattern="SOLID" flipSide="false">
<Color red="255" green="255" blue="0" alpha="255"/>
<Point Lat="48.70649634267627" Lon="-116.7785176234861"/>
<Point Lat="49.23197482051737" Lon="-111.10364282577494"/>
</Line>
<Line pgenType="LINE_DASHED_9" pgenCategory="Lines" lineWidth="2.0" sizeScale="1.0" smoothFactor="2" closed="false" filled="false" fillPattern="SOLID" flipSide="false">
<Color red="255" green="255" blue="0" alpha="255"/>
<Point Lat="47.64987672428785" Lon="-116.27541315959596"/>
<Point Lat="48.0869861254374" Lon="-110.98150031116195"/>
</Line>
<Line pgenType="LINE_DASHED_10" pgenCategory="Lines" lineWidth="2.0" sizeScale="1.0" smoothFactor="2" closed="false" filled="false" fillPattern="SOLID" flipSide="false">
<Color red="255" green="255" blue="0" alpha="255"/>
<Point Lat="46.58261024346136" Lon="-115.78383966438197"/>
<Point Lat="46.994308113017304" Lon="-111.44627306791396"/>
</Line>
<Line pgenType="DASHED_ARROW" pgenCategory="Lines" lineWidth="2.0" sizeScale="1.0" smoothFactor="0" closed="false" filled="false" fillPattern="SOLID" flipSide="false">
<Color red="255" green="0" blue="0" alpha="255"/>
<Point Lat="45.241036145189355" Lon="-115.65038311948757"/>
<Point Lat="45.79254805053886" Lon="-111.07428783514753"/>
</Line>
<Line pgenType="DASHED_ARROW_FILLED" pgenCategory="Lines" lineWidth="2.0" sizeScale="1.0" smoothFactor="0" closed="false" filled="false" fillPattern="SOLID" flipSide="false">
<Color red="255" green="0" blue="0" alpha="255"/>
<Point Lat="44.02370723988077" Lon="-115.31067825262741"/>
<Point Lat="44.483245615475454" Lon="-111.17421618608887"/>
</Line>
<Line pgenType="BALL_CHAIN" pgenCategory="Lines" lineWidth="2.0" sizeScale="1.0" smoothFactor="2" closed="false" filled="false" fillPattern="SOLID" flipSide="false">
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="42.89649618841513" Lon="-115.62978401529615"/>
<Point Lat="43.35170052961868" Lon="-111.06644207382931"/>
</Line>
<Line pgenType="ZIGZAG" pgenCategory="Lines" lineWidth="2.0" sizeScale="1.0" smoothFactor="2" closed="false" filled="false" fillPattern="SOLID" flipSide="false">
<Color red="255" green="255" blue="0" alpha="255"/>
<Point Lat="41.787142477747054" Lon="-115.71341063592855"/>
<Point Lat="41.77215094542145" Lon="-111.356925583144"/>
</Line>
<Line pgenType="SCALLOPED" pgenCategory="Lines" lineWidth="2.0" sizeScale="1.0" smoothFactor="2" closed="false" filled="false" fillPattern="SOLID" flipSide="false">
<Color red="255" green="0" blue="0" alpha="255"/>
<Point Lat="39.58604606154498" Lon="-115.04420779065818"/>
<Point Lat="39.93875154393843" Lon="-111.06677329703894"/>
</Line>
<Line pgenType="ANGLED_TICKS_ALT" pgenCategory="Lines" lineWidth="2.0" sizeScale="1.0" smoothFactor="2" closed="false" filled="false" fillPattern="SOLID" flipSide="false">
<Color red="160" green="32" blue="240" alpha="255"/>
<Point Lat="38.747752381022075" Lon="-114.6576624606285"/>
<Point Lat="39.15131509357796" Lon="-110.71932750321177"/>
</Line>
<Line pgenType="FILLED_CIRCLES" pgenCategory="Lines" lineWidth="2.0" sizeScale="1.0" smoothFactor="2" closed="false" filled="false" fillPattern="SOLID" flipSide="false">
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="37.50673906457284" Lon="-114.65373557109756"/>
<Point Lat="37.88186359787375" Lon="-110.45757792364648"/>
</Line>
<Line pgenType="LINE_WITH_CARETS" pgenCategory="Lines" lineWidth="2.0" sizeScale="1.0" smoothFactor="2" closed="false" filled="false" fillPattern="SOLID" flipSide="false">
<Color red="255" green="192" blue="203" alpha="255"/>
<Point Lat="36.41817021218797" Lon="-114.30878288285577"/>
<Point Lat="36.86505588802406" Lon="-109.94255844601042"/>
</Line>
<Line pgenType="LINE_CARET_LINE" pgenCategory="Lines" lineWidth="2.0" sizeScale="1.0" smoothFactor="2" closed="false" filled="false" fillPattern="SOLID" flipSide="false">
<Color red="255" green="192" blue="203" alpha="255"/>
<Point Lat="35.18215196932056" Lon="-114.16556497464263"/>
<Point Lat="35.61495921990058" Lon="-109.9920855593144"/>
</Line>
<Line pgenType="SINE_CURVE" pgenCategory="Lines" lineWidth="2.0" sizeScale="1.0" smoothFactor="2" closed="false" filled="false" fillPattern="SOLID" flipSide="false">
<Color red="173" green="216" blue="230" alpha="255"/>
<Point Lat="34.05003052791817" Lon="-114.11641841150953"/>
<Point Lat="33.932879858534555" Lon="-110.12754813949826"/>
</Line>
<Line pgenType="BOX_CIRCLE" pgenCategory="Lines" lineWidth="2.0" sizeScale="1.0" smoothFactor="2" closed="false" filled="false" fillPattern="SOLID" flipSide="false">
<Color red="255" green="0" blue="0" alpha="255"/>
<Point Lat="32.22188504378253" Lon="-113.81046461135132"/>
<Point Lat="32.650878003798745" Lon="-109.74383810778578"/>
</Line>
<Line pgenType="FILL_OPEN_BOX" pgenCategory="Lines" lineWidth="2.0" sizeScale="1.0" smoothFactor="2" closed="false" filled="false" fillPattern="SOLID" flipSide="false">
<Color red="255" green="165" blue="0" alpha="255"/>
<Point Lat="30.86920035583086" Lon="-114.01346580343987"/>
<Point Lat="31.186374121726857" Lon="-109.97941321696214"/>
</Line>
<Line pgenType="LINE_X_LINE" pgenCategory="Lines" lineWidth="2.0" sizeScale="1.0" smoothFactor="2" closed="false" filled="false" fillPattern="SOLID" flipSide="false">
<Color red="255" green="165" blue="0" alpha="255"/>
<Point Lat="29.690335391409327" Lon="-113.75301004981685"/>
<Point Lat="30.015069748068925" Lon="-110.24770359002206"/>
</Line>
<Line pgenType="LINE_XX_LINE" pgenCategory="Lines" lineWidth="2.0" sizeScale="1.0" smoothFactor="2" closed="false" filled="false" fillPattern="SOLID" flipSide="false">
<Color red="255" green="0" blue="0" alpha="255"/>
<Point Lat="28.52691159312473" Lon="-113.84546585784113"/>
<Point Lat="28.974608328928163" Lon="-109.7689049039295"/>
</Line>
<Line pgenType="FILL_CIRCLE_X" pgenCategory="Lines" lineWidth="2.0" sizeScale="1.0" smoothFactor="2" closed="false" filled="false" fillPattern="SOLID" flipSide="false">
<Color red="255" green="165" blue="0" alpha="255"/>
<Point Lat="27.335568777372078" Lon="-113.65873647900627"/>
<Point Lat="27.766368009849128" Lon="-109.75687024399734"/>
</Line>
<Line pgenType="BOX_X" pgenCategory="Lines" lineWidth="2.0" sizeScale="1.0" smoothFactor="2" closed="false" filled="false" fillPattern="SOLID" flipSide="false">
<Color red="255" green="165" blue="0" alpha="255"/>
<Point Lat="26.134550156473527" Lon="-113.54202767552592"/>
<Point Lat="26.496817821970318" Lon="-109.73781062653394"/>
</Line>
<Line pgenType="LINE_CIRCLE_ARROW" pgenCategory="Lines" lineWidth="2.0" sizeScale="1.0" smoothFactor="2" closed="false" filled="false" fillPattern="SOLID" flipSide="false">
<Color red="255" green="0" blue="0" alpha="255"/>
<Point Lat="25.041121190893485" Lon="-113.04178096077794"/>
<Point Lat="25.30903863032713" Lon="-108.85906236863968"/>
</Line>
<Line pgenType="DOUBLE_LINE" pgenCategory="Lines" lineWidth="2.0" sizeScale="1.0" smoothFactor="2" closed="false" filled="false" fillPattern="SOLID" flipSide="false">
<Color red="255" green="0" blue="0" alpha="255"/>
<Point Lat="23.89848709334172" Lon="-112.94180947987614"/>
<Point Lat="24.133042262513104" Lon="-109.12524753064729"/>
</Line>
<Line pgenType="ZZZ_LINE" pgenCategory="Lines" lineWidth="2.0" sizeScale="1.0" smoothFactor="2" closed="false" filled="false" fillPattern="SOLID" flipSide="false">
<Color red="255" green="0" blue="0" alpha="255"/>
<Point Lat="22.49338547697529" Lon="-113.00314714932638"/>
<Point Lat="22.707540809802193" Lon="-108.83360141691881"/>
</Line>
<Line pgenType="TICK_MARKS" pgenCategory="Lines" lineWidth="2.0" sizeScale="1.0" smoothFactor="2" closed="false" filled="false" fillPattern="SOLID" flipSide="false">
<Color red="255" green="165" blue="0" alpha="255"/>
<Point Lat="20.831167317573637" Lon="-112.70241695119927"/>
<Point Lat="21.204569382850483" Lon="-108.7343450409119"/>
</Line>
<Line pgenType="STREAM_LINE" pgenCategory="Lines" lineWidth="2.0" sizeScale="1.0" smoothFactor="2" closed="false" filled="false" fillPattern="SOLID" flipSide="false">
<Color red="160" green="32" blue="240" alpha="255"/>
<Point Lat="19.282701554968984" Lon="-112.48852999239747"/>
<Point Lat="19.853243101176776" Lon="-108.33312442667157"/>
</Line>
<Symbol pgenCategory="Symbol" pgenType="PRESENT_WX_088" lineWidth="2.0" sizeScale="1.0" clear="true">
<Color red="0" green="255" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="58.00819955920095" Lon="-105.22011687306525"/>
</Symbol>
<Symbol pgenCategory="Symbol" pgenType="FILLED_HIGH_PRESSURE_H" lineWidth="2.0" sizeScale="1.0" clear="true">
<Color red="0" green="0" blue="255" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="58.096453631787895" Lon="-102.8521535528763"/>
</Symbol>
<Symbol pgenCategory="Symbol" pgenType="FILLED_LOW_PRESSURE_L" lineWidth="2.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="58.11400826582063" Lon="-93.36135550950785"/>
</Symbol>
<Symbol pgenCategory="Symbol" pgenType="HIGH_PRESSURE_H" lineWidth="2.0" sizeScale="1.0" clear="true">
<Color red="0" green="0" blue="255" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="58.096453631787895" Lon="-100.8521535528763"/>
</Symbol>
<Symbol pgenCategory="Symbol" pgenType="LOW_PRESSURE_L" lineWidth="2.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="58.11400826582063" Lon="-95.36135550950785"/>
</Symbol>
<Symbol pgenCategory="Symbol" pgenType="PRESENT_WX_005" lineWidth="2.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="58.390472160537264" Lon="-91.99944420077273"/>
</Symbol>
<Symbol pgenCategory="Symbol" pgenType="PRESENT_WX_010" lineWidth="2.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="58.098308278080225" Lon="-87.3560031389412"/>
</Symbol>
<Symbol pgenCategory="Symbol" pgenType="PRESENT_WX_045" lineWidth="2.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="55.15085257272747" Lon="-105.105325616694"/>
</Symbol>
<Symbol pgenCategory="Symbol" pgenType="PRESENT_WX_051" lineWidth="2.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="55.10383243953169" Lon="-100.26448870514633"/>
</Symbol>
<Symbol pgenCategory="Symbol" pgenType="PRESENT_WX_056" lineWidth="2.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="55.518353199439304" Lon="-95.34895228020736"/>
</Symbol>
<Symbol pgenCategory="Symbol" pgenType="PRESENT_WX_061" lineWidth="2.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="55.48864184044005" Lon="-88.78912639926419"/>
</Symbol>
<Symbol pgenCategory="Symbol" pgenType="PRESENT_WX_063" lineWidth="2.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="55.54422068413056" Lon="-84.55145514500855"/>
</Symbol>
<Symbol pgenCategory="Symbol" pgenType="PRESENT_WX_065" lineWidth="2.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="52.597496415823834" Lon="-105.30887108406327"/>
</Symbol>
<Symbol pgenCategory="Symbol" pgenType="PRESENT_WX_066" lineWidth="2.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="52.99051064014291" Lon="-99.95255482018953"/>
</Symbol>
<Symbol pgenCategory="Symbol" pgenType="PRESENT_WX_071" lineWidth="2.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="53.253908495262976" Lon="-94.90246576996036"/>
</Symbol>
<Symbol pgenCategory="Symbol" pgenType="PRESENT_WX_073" lineWidth="2.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="53.18673752176344" Lon="-89.49118257088506"/>
</Symbol>
<Symbol pgenCategory="Symbol" pgenType="PRESENT_WX_075" lineWidth="2.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="53.30641009932742" Lon="-84.14255432042914"/>
</Symbol>
<Symbol pgenCategory="Symbol" pgenType="PRESENT_WX_079" lineWidth="2.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="49.784498066520136" Lon="-104.88924391527192"/>
</Symbol>
<Symbol pgenCategory="Symbol" pgenType="PRESENT_WX_080" lineWidth="2.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="50.47348643222256" Lon="-100.90567266666028"/>
</Symbol>
<Symbol pgenCategory="Symbol" pgenType="PRESENT_WX_085" lineWidth="2.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="50.177679854711606" Lon="-95.83210180033325"/>
</Symbol>
<Symbol pgenCategory="Symbol" pgenType="PRESENT_WX_089" lineWidth="2.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="50.19264284618585" Lon="-90.86331649066942"/>
</Symbol>
<Symbol pgenCategory="Symbol" pgenType="PRESENT_WX_095" lineWidth="2.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="50.17960262345406" Lon="-85.46821231016186"/>
</Symbol>
<Symbol pgenCategory="Symbol" pgenType="PRESENT_WX_105" lineWidth="2.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="47.37519761866969" Lon="-104.87281735626959"/>
</Symbol>
<Symbol pgenCategory="Symbol" pgenType="PRESENT_WX_201" lineWidth="2.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="47.64762870840391" Lon="-100.72111674036745"/>
</Symbol>
<Symbol pgenCategory="Symbol" pgenType="TROPICAL_STORM_NH" lineWidth="2.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="46.621784197195446" Lon="-95.79994567207872"/>
</Symbol>
<Symbol pgenCategory="Symbol" pgenType="HURRICANE_NH" lineWidth="2.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="46.47534990790562" Lon="-91.19182014768862"/>
</Symbol>
<Symbol pgenCategory="Symbol" pgenType="TROPICAL_STORM_SH" lineWidth="2.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="46.550476217595254" Lon="-86.49273562321157"/>
</Symbol>
<Symbol pgenCategory="Symbol" pgenType="HURRICANE_SH" lineWidth="2.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="42.28021221631332" Lon="-104.13090936391379"/>
</Symbol>
<Symbol pgenCategory="Symbol" pgenType="STORM_CENTER" lineWidth="2.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="42.8891215326389" Lon="-100.28744133269387"/>
</Symbol>
<Symbol pgenCategory="Symbol" pgenType="TROPICAL_DEPRESSION" lineWidth="2.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="43.249623351344646" Lon="-94.99086568670687"/>
</Symbol>
<Symbol pgenCategory="Symbol" pgenType="TROPICAL_CYCLONE" lineWidth="2.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="42.450922229856054" Lon="-90.4157776640661"/>
</Symbol>
<Symbol pgenCategory="Symbol" pgenType="FLAME" lineWidth="2.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="43.0529040036441" Lon="-85.31078220164004"/>
</Symbol>
<Symbol pgenCategory="Symbol" pgenType="X_CROSS" lineWidth="2.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="38.76958581038543" Lon="-103.67575942115286"/>
</Symbol>
<Symbol pgenCategory="Symbol" pgenType="LOW_X_OUTLINE" lineWidth="2.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="38.7" Lon="-99.0"/>
</Symbol>
<Symbol pgenCategory="Symbol" pgenType="LOW_X_FILLED" lineWidth="2.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="38.764921798876955" Lon="-99.03170313210154"/>
</Symbol>
<Symbol pgenCategory="Symbol" pgenType="TROPICAL_STORM_NH_WPAC" lineWidth="1.0" sizeScale="2.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="38.92828730621715" Lon="-94.76646026829452"/>
</Symbol>
<Symbol pgenCategory="Symbol" pgenType="TROPICAL_STORM_SH_WPAC" lineWidth="1.0" sizeScale="2.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="38.73464321921994" Lon="-89.82944337328756"/>
</Symbol>
<Symbol pgenCategory="Symbol" pgenType="NUCLEAR_FALLOUT" lineWidth="2.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="38.6408657552488" Lon="-86.09261101200478"/>
</Symbol>
<Symbol pgenCategory="Symbol" pgenType="LETTER_A_FILLED" lineWidth="2.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Point Lat="36.20892967867947" Lon="-103.27254020730498"/>
</Symbol>
<Symbol pgenCategory="Symbol" pgenType="LETTER_C" lineWidth="2.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Point Lat="36.53379568117395" Lon="-98.81419647594392"/>
</Symbol>
<Symbol pgenCategory="Symbol" pgenType="LETTER_C_FILLED" lineWidth="2.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Point Lat="36.34373940693731" Lon="-94.52455018593129"/>
</Symbol>
<Symbol pgenCategory="Symbol" pgenType="LETTER_X" lineWidth="2.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Point Lat="36.587581951230405" Lon="-89.7723211310872"/>
</Symbol>
<Symbol pgenCategory="Symbol" pgenType="LETTER_X_FILLED" lineWidth="2.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Point Lat="36.335112672891455" Lon="-86.15371735319238"/>
</Symbol>
<Symbol pgenCategory="Symbol" pgenType="LETTER_N" lineWidth="2.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Point Lat="34.187552402290656" Lon="-102.95828860946654"/>
</Symbol>
<Symbol pgenCategory="Symbol" pgenType="LETTER_N_FILLED" lineWidth="2.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Point Lat="34.720274822147715" Lon="-99.35791025909238"/>
</Symbol>
<Symbol pgenCategory="Symbol" pgenType="LETTER_B" lineWidth="2.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Point Lat="34.73989789716146" Lon="-95.04520047663429"/>
</Symbol>
<Symbol pgenCategory="Symbol" pgenType="LETTER_B_FILLED" lineWidth="2.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Point Lat="34.49784841073462" Lon="-91.1416020373972"/>
</Symbol>
<Symbol pgenCategory="Symbol" pgenType="30_KT_BARB" lineWidth="2.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Point Lat="34.46462934752184" Lon="-88.01913737657048"/>
</Symbol>
<Symbol pgenCategory="Symbol" pgenType="ICING_09" lineWidth="2.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Point Lat="32.07994160653829" Lon="-102.96008140893132"/>
</Symbol>
<Symbol pgenCategory="Symbol" pgenType="ICING_10" lineWidth="2.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Point Lat="32.62400207697082" Lon="-99.88162731483665"/>
</Symbol>
<Symbol pgenCategory="Marker" pgenType="PLUS_SIGN" lineWidth="2.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="57.42373937689146" Lon="-76.31066942824172"/>
</Symbol>
<Symbol pgenCategory="Marker" pgenType="OCTAGON" lineWidth="2.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="57.122799087124434" Lon="-73.23143109676302"/>
</Symbol>
<Symbol pgenCategory="Marker" pgenType="TRIANGLE" lineWidth="2.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="56.89910597639131" Lon="-70.32563144269854"/>
</Symbol>
<Symbol pgenCategory="Marker" pgenType="BOX" lineWidth="2.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="56.435592109590885" Lon="-67.88640782518563"/>
</Symbol>
<Symbol pgenCategory="Marker" pgenType="SMALL_X" lineWidth="2.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="56.158193233674076" Lon="-65.11504225478663"/>
</Symbol>
<Symbol pgenCategory="Marker" pgenType="Z_WITH_BAR" lineWidth="2.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="55.277083891545395" Lon="-76.7490757297261"/>
</Symbol>
<Symbol pgenCategory="Marker" pgenType="X_WITH_TOP_BAR" lineWidth="2.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="55.14894482246995" Lon="-73.9775695733111"/>
</Symbol>
<Symbol pgenCategory="Marker" pgenType="DIAMOND" lineWidth="2.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="54.87853105349985" Lon="-71.15957630621844"/>
</Symbol>
<Symbol pgenCategory="Marker" pgenType="UP_ARROW" lineWidth="2.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="54.58363102821036" Lon="-68.44932539363255"/>
</Symbol>
<Symbol pgenCategory="Marker" pgenType="Y" lineWidth="2.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="54.50776445462743" Lon="-65.66587755528214"/>
</Symbol>
<Symbol pgenCategory="Marker" pgenType="BOX_WITH_DIAGONALS" lineWidth="2.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="53.27804906148571" Lon="-77.11784755376404"/>
</Symbol>
<Symbol pgenCategory="Marker" pgenType="ASTERISK" lineWidth="2.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="53.10006243551938" Lon="-74.42767652326468"/>
</Symbol>
<Symbol pgenCategory="Marker" pgenType="HOURGLASS_X" lineWidth="2.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="52.941254371548105" Lon="-71.73549227132538"/>
</Symbol>
<Symbol pgenCategory="Marker" pgenType="STAR" lineWidth="2.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="52.60534394800802" Lon="-69.18907930156391"/>
</Symbol>
<Symbol pgenCategory="Marker" pgenType="DOT" lineWidth="2.0" sizeScale="4.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="52.342334901995294" Lon="-66.62853877884156"/>
</Symbol>
<Symbol pgenCategory="Marker" pgenType="LARGE_X" lineWidth="2.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="51.41588736683589" Lon="-77.08602076751212"/>
</Symbol>
<Symbol pgenCategory="Marker" pgenType="FILLED_OCTAGON" lineWidth="2.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="51.303060619705924" Lon="-74.61129460718716"/>
</Symbol>
<Symbol pgenCategory="Marker" pgenType="FILLED_TRIANGLE" lineWidth="2.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="51.22156175791849" Lon="-71.69541140184907"/>
</Symbol>
<Symbol pgenCategory="Marker" pgenType="FILLED_BOX" lineWidth="2.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="50.8369955815884" Lon="-69.30014088544016"/>
</Symbol>
<Symbol pgenCategory="Marker" pgenType="FILLED_DIAMOND" lineWidth="2.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="50.69786387463387" Lon="-66.92319310104156"/>
</Symbol>
<Symbol pgenCategory="Marker" pgenType="FILLED_STAR" lineWidth="2.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="49.53408535218434" Lon="-77.89503174081656"/>
</Symbol>
<Symbol pgenCategory="Marker" pgenType="MINUS_SIGN" lineWidth="2.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="49.566161187293694" Lon="-75.18827384242621"/>
</Symbol>
<Symbol pgenCategory="Combo" pgenType="PRESENT_WX_061|PRESENT_WX_051" lineWidth="1.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="36.69122381078902" Lon="-77.66703008082177"/>
</Symbol>
<Symbol pgenCategory="Combo" pgenType="PRESENT_WX_061|PRESENT_WX_063" lineWidth="1.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="36.673050052715254" Lon="-73.7564370547985"/>
</Symbol>
<Symbol pgenCategory="Combo" pgenType="PRESENT_WX_061|PRESENT_WX_080" lineWidth="1.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="36.22789245582859" Lon="-69.79294508484215"/>
</Symbol>
<Symbol pgenCategory="Combo" pgenType="PRESENT_WX_061|PRESENT_WX_095" lineWidth="1.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="35.5951286736764" Lon="-65.95750957463977"/>
</Symbol>
<Symbol pgenCategory="Combo" pgenType="PRESENT_WX_063|PRESENT_WX_065" lineWidth="1.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="34.93847724299643" Lon="-62.21682989345769"/>
</Symbol>
<Symbol pgenCategory="Combo" pgenType="PRESENT_WX_063|PRESENT_WX_080" lineWidth="1.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="34.48341889757323" Lon="-78.34097466378641"/>
</Symbol>
<Symbol pgenCategory="Combo" pgenType="PRESENT_WX_063|PRESENT_WX_095" lineWidth="1.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="34.272183698705845" Lon="-74.14894908259635"/>
</Symbol>
<Symbol pgenCategory="Combo" pgenType="PRESENT_WX_065|PRESENT_WX_080" lineWidth="1.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="33.71318110715412" Lon="-70.55938208352298"/>
</Symbol>
<Symbol pgenCategory="Combo" pgenType="PRESENT_WX_065|PRESENT_WX_095" lineWidth="1.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="32.91998694416165" Lon="-66.45181633769079"/>
</Symbol>
<Symbol pgenCategory="Combo" pgenType="PRESENT_WX_051|PRESENT_WX_056" lineWidth="1.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="32.205785123324475" Lon="-62.483578897634544"/>
</Symbol>
<Symbol pgenCategory="Combo" pgenType="PRESENT_WX_061|PRESENT_WX_056" lineWidth="1.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="31.892155578484715" Lon="-79.1685139696483"/>
</Symbol>
<Symbol pgenCategory="Combo" pgenType="PRESENT_WX_061|PRESENT_WX_066" lineWidth="1.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="31.392539141408474" Lon="-74.7999687171152"/>
</Symbol>
<Symbol pgenCategory="Combo" pgenType="PRESENT_WX_061|PRESENT_WX_071" lineWidth="1.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="30.816355966545853" Lon="-70.39951521085841"/>
</Symbol>
<Symbol pgenCategory="Combo" pgenType="PRESENT_WX_071|PRESENT_WX_073" lineWidth="1.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="30.293355788383266" Lon="-66.39032139503895"/>
</Symbol>
<Symbol pgenCategory="Combo" pgenType="PRESENT_WX_073|PRESENT_WX_075" lineWidth="1.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="29.771500581637582" Lon="-62.90850194852598"/>
</Symbol>
<Symbol pgenCategory="Combo" pgenType="PRESENT_WX_071|PRESENT_WX_085" lineWidth="1.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="29.564727813305883" Lon="-80.04977799816696"/>
</Symbol>
<Symbol pgenCategory="Combo" pgenType="PRESENT_WX_073|PRESENT_WX_085" lineWidth="1.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="29.011079569716536" Lon="-76.02768768139003"/>
</Symbol>
<Symbol pgenCategory="Combo" pgenType="PRESENT_WX_075|PRESENT_WX_085" lineWidth="1.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="28.243141545875663" Lon="-71.68965631402504"/>
</Symbol>
<Symbol pgenCategory="Combo" pgenType="PRESENT_WX_071|PRESENT_WX_105" lineWidth="1.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="27.75082541663378" Lon="-67.4450987087552"/>
</Symbol>
<Symbol pgenCategory="Combo" pgenType="PRESENT_WX_073|PRESENT_WX_105" lineWidth="1.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="27.12000508188666" Lon="-63.93964183628469"/>
</Symbol>
<Symbol pgenCategory="Combo" pgenType="PRESENT_WX_075|PRESENT_WX_105" lineWidth="1.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="26.782280376359804" Lon="-80.88673209355365"/>
</Symbol>
<Symbol pgenCategory="Combo" pgenType="PRESENT_WX_080|PRESENT_WX_095" lineWidth="1.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="26.14864275533824" Lon="-77.02882100116429"/>
</Symbol>
<Symbol pgenCategory="Combo" pgenType="PRESENT_WX_080|PRESENT_WX_085" lineWidth="1.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="25.588820565486063" Lon="-72.50604148567717"/>
</Symbol>
<Symbol pgenCategory="Combo" pgenType="PRESENT_WX_061|PRESENT_WX_079" lineWidth="1.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="25.248142459380198" Lon="-68.75316845230822"/>
</Symbol>
<Symbol pgenCategory="Combo" pgenType="PRESENT_WX_079|PRESENT_WX_066" lineWidth="1.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="24.27276058908192" Lon="-65.40259289881985"/>
</Symbol>
<Symbol pgenCategory="Combo" pgenType="PRESENT_WX_071|PRESENT_WX_079" lineWidth="1.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="23.84257024289965" Lon="-81.2808164822886"/>
</Symbol>
<Symbol pgenCategory="Symbol" pgenType="PAST_WX_09" lineWidth="1.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Point Lat="32.76159880485587" Lon="-96.55504658626423"/>
</Symbol>
<Text pgenCategory="Text" pgenType="General Text" fontSize="14.0" fontName="Courier" style="BOLD_ITALIC" justification="CENTER" rotation="0.0" rotationRelativity="SCREEN_RELATIVE" mask="true" displayType="NORMAL" yOffset="0" xOffset="0" hide="false" auto="false">
<Color red="255" green="255" blue="0" alpha="255"/>
<Point Lat="46.11026640392028" Lon="-72.6692548493991"/>
<textLine>Sample</textLine>
<textLine>Text</textLine>
</Text>
<AvnText pgenCategory="Text" pgenType="AVIATION_TEXT" symbolPatternName="Not Applicable" fontSize="14.0" fontName="Courier" style="REGULAR" justification="CENTER" bottomValue="XXX" topValue="XXX" avnTextType="LOW_PRESSURE_BOX">
<Color red="255" green="255" blue="255" alpha="255"/>
<Point Lat="30.508823131419327" Lon="-98.25635229216034"/>
</AvnText>
<MidCloudText pgenCategory="Text" pgenType="MID_LEVEL_CLOUD" fontSize="14.0" fontName="Courier" style="REGULAR" justification="CENTER" tstormLevels="" tstormTypes="" icingLevels="" icingType="ICING_05" turbulenceLevels="" turbulenceType="TURBULENCE_4" cloudTypes="">
<Color red="255" green="255" blue="255" alpha="255"/>
<Point Lat="37.33487901359149" Lon="-101.59046925996388"/>
</MidCloudText>
<Arc pgenCategory="Arc" pgenType="Circle" endAngle="360.0" startAngle="0.0" axisRatio="1.0" lineWidth="3.0" sizeScale="1.0" smoothFactor="2" closed="true" filled="false" fillPattern="SOLID">
<Color red="0" green="0" blue="255" alpha="255"/>
<Point Lat="42.867103597000316" Lon="-73.86894811811908"/>
<Point Lat="41.97887089093084" Lon="-72.25745920172047"/>
</Arc>
<Vector pgenCategory="Vector" pgenType="Arrow" direction="360.0" speed="10.0" arrowHeadSize="1.0" directionOnly="false" lineWidth="1.0" sizeScale="1.0" clear="true">
<Color red="0" green="0" blue="255" alpha="255"/>
<Point Lat="40.295713472449606" Lon="-77.79680427737456"/>
</Vector>
<Vector pgenCategory="Vector" pgenType="Barb" direction="360.0" speed="100.0" arrowHeadSize="1.0" directionOnly="false" lineWidth="1.0" sizeScale="1.0" clear="true">
<Color red="0" green="0" blue="255" alpha="255"/>
<Point Lat="39.10760614739255" Lon="-76.6734081781352"/>
</Vector>
<Vector pgenCategory="Vector" pgenType="Directional" direction="0.0" speed="10.0" arrowHeadSize="1.5" directionOnly="false" lineWidth="2.0" sizeScale="1.5" clear="true">
<Color red="0" green="0" blue="255" alpha="255"/>
<Point Lat="40.0042761674099" Lon="-75.04306320917897"/>
</Vector>
<Vector pgenCategory="Vector" pgenType="Hash" direction="0.0" speed="10.0" arrowHeadSize="1.0" directionOnly="false" lineWidth="2.0" sizeScale="1.0" clear="true">
<Color red="255" green="255" blue="0" alpha="255"/>
<Point Lat="39.35390746604257" Lon="-73.2133975036754"/>
</Vector>
<Track skipFactorTextString="0" setTimeButtonSelected="true" pgenType="STORM_TRACK" pgenCategory="Track" lineWidth="1.0" intervalTimeTextString="01:00" intervalComboSelectedIndex="2" initialMarker="FILLED_DIAMOND" initialLinePattern="LINE_SOLID" fontStyleComboSelectedIndex="2" fontSizeComboSelectedIndex="2" fontSize="14.0" fontNameComboSelectedIndex="0" fontName="Courier" extrapMarker="FILLED_TRIANGLE" extrapLinePattern="LINE_SOLID" extraPointTimeDisplayOptionName="SKIP_FACTOR">
<initialColor>
<Color red="255" green="0" blue="0" alpha="255"/>
</initialColor>
<extrapColor>
<Color red="255" green="255" blue="0" alpha="255"/>
</extrapColor>
<initialPoints>
<time>2010-06-30T14:57:08.419-04:00</time>
<location longitude="-126.37951168276611" latitude="30.034228159851732"/>
</initialPoints>
<initialPoints>
<time>2010-06-30T15:57:08.419-04:00</time>
<location longitude="-123.600117459191" latitude="30.05307989167604"/>
</initialPoints>
<extrapPoints>
<time>2010-06-30T16:00:08.419-04:00</time>
<location longitude="-123.46115811309699" latitude="30.05541713520117"/>
</extrapPoints>
<extrapPoints>
<time>2010-06-30T17:00:08.419-04:00</time>
<location longitude="-120.68117208589054" latitude="30.0742437809133"/>
</extrapPoints>
<extraPointTimeTextDisplayIndicator>true</extraPointTimeTextDisplayIndicator>
<extraPointTimeTextDisplayIndicator>true</extraPointTimeTextDisplayIndicator>
</Track>
<Contours collectionName="Contours" pgenCategory="MET" pgenType="Contours" parm="HGMT" level="1000" forecastHour="f000" time1="2011-01-31T10:31:30.624Z" time2="2011-01-31T10:31:30.624Z" cint="10/0/100">
<DECollection collectionName="ContourLine">
<DrawableElement>
<Line pgenType="LINE_SOLID" pgenCategory="Lines" lineWidth="2.0" sizeScale="1.0" smoothFactor="2" closed="false" filled="false" fillPattern="SOLID" flipSide="false">
<Color red="255" green="0" blue="0" alpha="255"/>
<Point Lat="26.428785592797627" Lon="-96.45561948258505"/>
<Point Lat="25.310522417022966" Lon="-93.35768115376911"/>
<Point Lat="25.232952038817622" Lon="-88.85298910006651"/>
<Point Lat="25.823670559001588" Lon="-83.90007857750363"/>
</Line>
<Text pgenCategory="Text" pgenType="General Text" fontSize="14.0" fontName="Courier" style="REGULAR" justification="CENTER" rotation="0.0" rotationRelativity="SCREEN_RELATIVE" mask="true" displayType="NORMAL" yOffset="0" xOffset="0" hide="false" auto="true">
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="25.24318826665325" Lon="-90.54066002900755"/>
<textLine>0.0</textLine>
</Text>
</DrawableElement>
</DECollection>
<DECollection collectionName="ContourMinmax">
<DrawableElement>
<Symbol pgenCategory="Symbol" pgenType="FILLED_HIGH_PRESSURE_H" lineWidth="2.0" sizeScale="2.0" clear="true">
<Color red="0" green="0" blue="255" alpha="255"/>
<Point Lat="24.477612656422" Lon="-96.02791970899126"/>
</Symbol>
<Text pgenCategory="Text" pgenType="General Text" fontSize="14.0" fontName="Courier" style="REGULAR" justification="CENTER" rotation="0.0" rotationRelativity="SCREEN_RELATIVE" mask="true" displayType="NORMAL" yOffset="0" xOffset="0" hide="false" auto="true">
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="21.977612656422" Lon="-96.02791970899126"/>
<textLine>0.0</textLine>
</Text>
</DrawableElement>
</DECollection>
<DECollection collectionName="ContourMinmax">
<DrawableElement>
<Symbol pgenCategory="Symbol" pgenType="FILLED_LOW_PRESSURE_L" lineWidth="2.0" sizeScale="2.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Point Lat="23.795978963992948" Lon="-93.16267008905666"/>
</Symbol>
<Text pgenCategory="Text" pgenType="General Text" fontSize="14.0" fontName="Courier" style="REGULAR" justification="CENTER" rotation="0.0" rotationRelativity="SCREEN_RELATIVE" mask="true" displayType="NORMAL" yOffset="0" xOffset="0" hide="false" auto="true">
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="21.295978963992948" Lon="-93.16267008905666"/>
<textLine>0.0</textLine>
</Text>
</DrawableElement>
</DECollection>
<DECollection collectionName="ContourMinmax">
<DrawableElement>
<Symbol pgenCategory="Symbol" pgenType="TROPICAL_STORM_NH" lineWidth="2.0" sizeScale="2.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Point Lat="23.160532223358484" Lon="-90.91533071519707"/>
</Symbol>
<Text pgenCategory="Text" pgenType="General Text" fontSize="14.0" fontName="Courier" style="REGULAR" justification="CENTER" rotation="0.0" rotationRelativity="SCREEN_RELATIVE" mask="true" displayType="NORMAL" yOffset="0" xOffset="0" hide="false" auto="true">
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="20.660532223358484" Lon="-90.91533071519707"/>
<textLine>0.0</textLine>
</Text>
</DrawableElement>
</DECollection>
<DECollection collectionName="ContourMinmax">
<DrawableElement>
<Symbol pgenCategory="Symbol" pgenType="HURRICANE_NH" lineWidth="2.0" sizeScale="2.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Point Lat="23.289201256859105" Lon="-89.01095592046661"/>
</Symbol>
<Text pgenCategory="Text" pgenType="General Text" fontSize="14.0" fontName="Courier" style="REGULAR" justification="CENTER" rotation="0.0" rotationRelativity="SCREEN_RELATIVE" mask="true" displayType="NORMAL" yOffset="0" xOffset="0" hide="false" auto="true">
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="20.789201256859105" Lon="-89.01095592046661"/>
<textLine>0.0</textLine>
</Text>
</DrawableElement>
</DECollection>
<DECollection collectionName="ContourMinmax">
<DrawableElement>
<Symbol pgenCategory="Symbol" pgenType="TROPICAL_DEPRESSION" lineWidth="2.0" sizeScale="2.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Point Lat="23.486876792864617" Lon="-87.12551374508226"/>
</Symbol>
<Text pgenCategory="Text" pgenType="General Text" fontSize="14.0" fontName="Courier" style="REGULAR" justification="CENTER" rotation="0.0" rotationRelativity="SCREEN_RELATIVE" mask="true" displayType="NORMAL" yOffset="0" xOffset="0" hide="false" auto="true">
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="20.986876792864617" Lon="-87.12551374508226"/>
<textLine>0.0</textLine>
</Text>
</DrawableElement>
</DECollection>
<DECollection collectionName="ContourMinmax">
<DrawableElement>
<Symbol pgenCategory="Symbol" pgenType="TROPICAL_CYCLONE" lineWidth="2.0" sizeScale="2.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="23.665113167611565" Lon="-85.14814732119048"/>
</Symbol>
<Text pgenCategory="Text" pgenType="General Text" fontSize="14.0" fontName="Courier" style="REGULAR" justification="CENTER" rotation="0.0" rotationRelativity="SCREEN_RELATIVE" mask="true" displayType="NORMAL" yOffset="0" xOffset="0" hide="false" auto="true">
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="21.165113167611565" Lon="-85.14814732119048"/>
<textLine>0.0</textLine>
</Text>
</DrawableElement>
</DECollection>
</Contours>
</DrawableElement>
</Layer>
</Product>
</Products>

View file

@ -0,0 +1,931 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Products xmlns:ns2="http://www.example.org/productType" xmlns:ns3="group">
<Product name="PGEN Settings" type="Default" forecaster="Default" center="Default" onOff="true" saveLayers="false" useFile="false" outputFile="/usr1/bingfan/settings_tbl_Surface_Analysis.xml">
<Layer name="Default" onOff="true" monoColor="false" filled="false">
<Color red="255" green="255" blue="0" alpha="255"/>
<DrawableElement>
<DECollection pgenCategory="MET" pgenType="JET" collectionName="Jet">
<DrawableElement>
<DECollection collectionName="WindInfo">
<DrawableElement>
<Text pgenCategory="Text" pgenType="General Text" fontSize="18.0" fontName="Courier" style="REGULAR" justification="CENTER" rotation="289.0" rotationRelativity="SCREEN_RELATIVE" mask="false" displayType="NORMAL" yOffset="0" xOffset="0" hide="false" auto="false">
<Color red="255" green="0" blue="0" alpha="255"/>
<Point Lat="24.721949692730654" Lon="-122.84377971375929"/>
<textLine>FL300</textLine>
</Text>
<Vector pgenCategory="Vector" pgenType="Barb" direction="323.01585993274364" speed="120.0" arrowHeadSize="1.0" directionOnly="false" lineWidth="2.0" sizeScale="2.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Point Lat="23.48763893335557" Lon="-120.67426748783554"/>
</Vector>
</DrawableElement>
</DECollection>
<Line pgenType="FILLED_ARROW" pgenCategory="Lines" lineWidth="3.0" sizeScale="2.5" smoothFactor="2" closed="false" filled="false" fillPattern="SOLID" flipSide="false">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="22.385743592166126" Lon="-126.84696477158134"/>
<Point Lat="25.60626233946596" Lon="-123.12227870665762"/>
<Point Lat="21.951934533639328" Lon="-118.85344452470602"/>
<Point Lat="23.451422828483725" Lon="-113.78402123979879"/>
</Line>
<Vector pgenCategory="Vector" pgenType="Hash" direction="291.0" speed="10.0" arrowHeadSize="1.0" directionOnly="false" lineWidth="2.0" sizeScale="2.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Point Lat="25.496929136470555" Lon="-123.84130908818742"/>
</Vector>
<Vector pgenCategory="Vector" pgenType="Hash" direction="279.9856150498179" speed="10.0" arrowHeadSize="1.0" directionOnly="false" lineWidth="2.0" sizeScale="2.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Point Lat="21.934652835268857" Lon="-117.6045917472339"/>
</Vector>
</DrawableElement>
</DECollection>
<Line pgenType="COLD_FRONT_FORM" pgenCategory="Front" lineWidth="2.0" sizeScale="1.0" smoothFactor="2" closed="false" filled="false" fillPattern="SOLID" flipSide="false">
<Color red="0" green="0" blue="255" alpha="255"/>
<Point Lat="54.469461460200364" Lon="-131.23929126229424"/>
<Point Lat="55.479090120068705" Lon="-123.67509493467838"/>
</Line>
<Line pgenType="COLD_FRONT_DISS" pgenCategory="Front" lineWidth="2.0" sizeScale="1.0" smoothFactor="2" closed="false" filled="false" fillPattern="SOLID" flipSide="false">
<Color red="0" green="0" blue="255" alpha="255"/>
<Point Lat="53.644502667923746" Lon="-131.03926144529453"/>
<Point Lat="54.45390335952878" Lon="-123.92966847273993"/>
</Line>
<Line pgenType="WARM_FRONT" pgenCategory="Front" lineWidth="2.0" sizeScale="1.0" smoothFactor="2" closed="false" filled="false" fillPattern="SOLID" flipSide="false">
<Color red="255" green="0" blue="0" alpha="255"/>
<Point Lat="52.331560558143536" Lon="-130.45188837028533"/>
<Point Lat="53.358408429589204" Lon="-123.79879443419208"/>
</Line>
<Line pgenType="WARM_FRONT_FORM" pgenCategory="Front" lineWidth="2.0" sizeScale="1.0" smoothFactor="2" closed="false" filled="false" fillPattern="SOLID" flipSide="false">
<Color red="255" green="0" blue="0" alpha="255"/>
<Point Lat="51.42436056937775" Lon="-129.97350321809662"/>
<Point Lat="52.2559805540691" Lon="-124.02687501632668"/>
</Line>
<Line pgenType="WARM_FRONT_DISS" pgenCategory="Front" lineWidth="2.0" sizeScale="1.0" smoothFactor="2" closed="false" filled="false" fillPattern="SOLID" flipSide="false">
<Color red="255" green="0" blue="0" alpha="255"/>
<Point Lat="50.28607010358857" Lon="-129.5023427566131"/>
<Point Lat="51.25322043299898" Lon="-123.41618856329704"/>
</Line>
<Line pgenType="STATIONARY_FRONT" pgenCategory="Front" lineWidth="2.0" sizeScale="1.0" smoothFactor="2" closed="false" filled="false" fillPattern="SOLID" flipSide="false">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="0" blue="255" alpha="255"/>
<Point Lat="49.18679867026702" Lon="-129.06404350242326"/>
<Point Lat="49.968577859313264" Lon="-123.59098898930479"/>
</Line>
<Line pgenType="STATIONARY_FRONT_FORM" pgenCategory="Front" lineWidth="2.0" sizeScale="1.0" smoothFactor="2" closed="false" filled="false" fillPattern="SOLID" flipSide="false">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="0" blue="255" alpha="255"/>
<Point Lat="48.04932315420111" Lon="-128.45703802705694"/>
<Point Lat="48.81264523519168" Lon="-123.12972759447176"/>
</Line>
<Line pgenType="STATIONARY_FRONT_DISS" pgenCategory="Front" lineWidth="2.0" sizeScale="1.0" smoothFactor="2" closed="false" filled="false" fillPattern="SOLID" flipSide="false">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="0" blue="255" alpha="255"/>
<Point Lat="46.91224524906041" Lon="-127.78630221983752"/>
<Point Lat="47.7402653944268" Lon="-122.79359750234181"/>
</Line>
<Line pgenType="OCCLUDED_FRONT" pgenCategory="Front" lineWidth="2.0" sizeScale="1.0" smoothFactor="2" closed="false" filled="false" fillPattern="SOLID" flipSide="false">
<Color red="160" green="32" blue="240" alpha="255"/>
<Point Lat="45.69616188248049" Lon="-127.52141828654428"/>
<Point Lat="46.54998215160349" Lon="-122.02056066681982"/>
</Line>
<Line pgenType="OCCLUDED_FRONT_FORM" pgenCategory="Front" lineWidth="2.0" sizeScale="1.0" smoothFactor="2" closed="false" filled="false" fillPattern="SOLID" flipSide="false">
<Color red="160" green="32" blue="240" alpha="255"/>
<Point Lat="44.441786316587034" Lon="-127.41702058478937"/>
<Point Lat="45.38858618752492" Lon="-120.9534845555878"/>
</Line>
<Line pgenType="OCCLUDED_FRONT_DISS" pgenCategory="Front" lineWidth="2.0" sizeScale="1.0" smoothFactor="2" closed="false" filled="false" fillPattern="SOLID" flipSide="false">
<Color red="160" green="32" blue="240" alpha="255"/>
<Point Lat="43.28060584220657" Lon="-126.38529622379171"/>
<Point Lat="44.18483795662828" Lon="-120.9493775179665"/>
</Line>
<Line pgenType="DRY_LINE" pgenCategory="Front" lineWidth="2.0" sizeScale="1.0" smoothFactor="2" closed="false" filled="false" fillPattern="SOLID" flipSide="false">
<Color red="255" green="165" blue="0" alpha="255"/>
<Point Lat="39.530718541611584" Lon="-125.54230810486656"/>
<Point Lat="40.408239618320415" Lon="-120.05940295421559"/>
</Line>
<Line pgenType="LINE_SOLID" pgenCategory="Lines" lineWidth="2.0" sizeScale="1.0" smoothFactor="2" closed="false" filled="false" fillPattern="SOLID" flipSide="false">
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="57.704562232189716" Lon="-119.17524290838445"/>
<Point Lat="58.20726897317869" Lon="-112.46182935525103"/>
</Line>
<Line pgenType="POINTED_ARROW" pgenCategory="Lines" lineWidth="2.0" sizeScale="1.0" smoothFactor="0" closed="false" filled="false" fillPattern="SOLID" flipSide="false">
<Color red="255" green="0" blue="0" alpha="255"/>
<Point Lat="56.52980260725664" Lon="-118.78917656563178"/>
<Point Lat="57.08741025945119" Lon="-112.10090167810085"/>
</Line>
<Line pgenType="FILLED_ARROW" pgenCategory="Lines" lineWidth="2.0" sizeScale="1.0" smoothFactor="0" closed="false" filled="false" fillPattern="SOLID" flipSide="false">
<Color red="255" green="0" blue="0" alpha="255"/>
<Point Lat="55.70362802041158" Lon="-118.34555882895849"/>
<Point Lat="56.23099353997903" Lon="-112.08769103846618"/>
</Line>
<Line pgenType="LINE_DASHED_2" pgenCategory="Lines" lineWidth="2.0" sizeScale="1.0" smoothFactor="2" closed="false" filled="false" fillPattern="SOLID" flipSide="false">
<Color red="255" green="0" blue="0" alpha="255"/>
<Point Lat="54.80658941995571" Lon="-118.52589424114309"/>
<Point Lat="55.49749102257913" Lon="-111.65161464251916"/>
</Line>
<Line pgenType="LINE_DASHED_3" pgenCategory="Lines" lineWidth="2.0" sizeScale="1.0" smoothFactor="2" closed="false" filled="false" fillPattern="SOLID" flipSide="false">
<Color red="255" green="255" blue="0" alpha="255"/>
<Point Lat="53.937321349002225" Lon="-117.81957797465058"/>
<Point Lat="54.56614498076134" Lon="-111.72097286373898"/>
</Line>
<Line pgenType="LINE_DASHED_4" pgenCategory="Lines" lineWidth="2.0" sizeScale="1.0" smoothFactor="2" closed="false" filled="false" fillPattern="SOLID" flipSide="false">
<Color red="255" green="255" blue="0" alpha="255"/>
<Point Lat="52.85915673197243" Lon="-117.51511075331841"/>
<Point Lat="53.404953885387464" Lon="-111.91929527587178"/>
</Line>
<Line pgenType="LINE_DASHED_5" pgenCategory="Lines" lineWidth="2.0" sizeScale="1.0" smoothFactor="2" closed="false" filled="false" fillPattern="SOLID" flipSide="false">
<Color red="255" green="255" blue="0" alpha="255"/>
<Point Lat="51.645620451810196" Lon="-117.35975928365046"/>
<Point Lat="51.908897577572404" Lon="-114.0400949010151"/>
<Point Lat="52.208764399614815" Lon="-111.67346709290742"/>
</Line>
<Line pgenType="LINE_DASHED_6" pgenCategory="Lines" lineWidth="2.0" sizeScale="1.0" smoothFactor="2" closed="false" filled="false" fillPattern="SOLID" flipSide="false">
<Color red="255" green="255" blue="0" alpha="255"/>
<Point Lat="50.70749072049002" Lon="-117.02689975281213"/>
<Point Lat="51.19573270488142" Lon="-111.6448225897766"/>
</Line>
<Line pgenType="LINE_DASHED_7" pgenCategory="Lines" lineWidth="2.0" sizeScale="1.0" smoothFactor="2" closed="false" filled="false" fillPattern="SOLID" flipSide="false">
<Color red="255" green="255" blue="0" alpha="255"/>
<Point Lat="49.73401246530588" Lon="-116.94934248252305"/>
<Point Lat="50.272444050835496" Lon="-111.72103176011291"/>
</Line>
<Line pgenType="LINE_DASHED_8" pgenCategory="Lines" lineWidth="2.0" sizeScale="1.0" smoothFactor="2" closed="false" filled="false" fillPattern="SOLID" flipSide="false">
<Color red="255" green="255" blue="0" alpha="255"/>
<Point Lat="48.70649634267627" Lon="-116.7785176234861"/>
<Point Lat="49.23197482051737" Lon="-111.10364282577494"/>
</Line>
<Line pgenType="LINE_DASHED_9" pgenCategory="Lines" lineWidth="2.0" sizeScale="1.0" smoothFactor="2" closed="false" filled="false" fillPattern="SOLID" flipSide="false">
<Color red="255" green="255" blue="0" alpha="255"/>
<Point Lat="47.64987672428785" Lon="-116.27541315959596"/>
<Point Lat="48.0869861254374" Lon="-110.98150031116195"/>
</Line>
<Line pgenType="LINE_DASHED_10" pgenCategory="Lines" lineWidth="2.0" sizeScale="1.0" smoothFactor="2" closed="false" filled="false" fillPattern="SOLID" flipSide="false">
<Color red="255" green="255" blue="0" alpha="255"/>
<Point Lat="46.58261024346136" Lon="-115.78383966438197"/>
<Point Lat="46.994308113017304" Lon="-111.44627306791396"/>
</Line>
<Line pgenType="DASHED_ARROW" pgenCategory="Lines" lineWidth="2.0" sizeScale="1.0" smoothFactor="0" closed="false" filled="false" fillPattern="SOLID" flipSide="false">
<Color red="255" green="0" blue="0" alpha="255"/>
<Point Lat="45.241036145189355" Lon="-115.65038311948757"/>
<Point Lat="45.79254805053886" Lon="-111.07428783514753"/>
</Line>
<Line pgenType="DASHED_ARROW_FILLED" pgenCategory="Lines" lineWidth="2.0" sizeScale="1.0" smoothFactor="0" closed="false" filled="false" fillPattern="SOLID" flipSide="false">
<Color red="255" green="0" blue="0" alpha="255"/>
<Point Lat="44.02370723988077" Lon="-115.31067825262741"/>
<Point Lat="44.483245615475454" Lon="-111.17421618608887"/>
</Line>
<Line pgenType="BALL_CHAIN" pgenCategory="Lines" lineWidth="2.0" sizeScale="1.0" smoothFactor="2" closed="false" filled="false" fillPattern="SOLID" flipSide="false">
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="42.89649618841513" Lon="-115.62978401529615"/>
<Point Lat="43.35170052961868" Lon="-111.06644207382931"/>
</Line>
<Line pgenType="ZIGZAG" pgenCategory="Lines" lineWidth="2.0" sizeScale="1.0" smoothFactor="2" closed="false" filled="false" fillPattern="SOLID" flipSide="false">
<Color red="255" green="255" blue="0" alpha="255"/>
<Point Lat="41.787142477747054" Lon="-115.71341063592855"/>
<Point Lat="41.77215094542145" Lon="-111.356925583144"/>
</Line>
<Line pgenType="SCALLOPED" pgenCategory="Lines" lineWidth="2.0" sizeScale="1.0" smoothFactor="2" closed="false" filled="false" fillPattern="SOLID" flipSide="false">
<Color red="255" green="0" blue="0" alpha="255"/>
<Point Lat="39.58604606154498" Lon="-115.04420779065818"/>
<Point Lat="39.93875154393843" Lon="-111.06677329703894"/>
</Line>
<Line pgenType="ANGLED_TICKS_ALT" pgenCategory="Lines" lineWidth="2.0" sizeScale="1.0" smoothFactor="2" closed="false" filled="false" fillPattern="SOLID" flipSide="false">
<Color red="160" green="32" blue="240" alpha="255"/>
<Point Lat="38.747752381022075" Lon="-114.6576624606285"/>
<Point Lat="39.15131509357796" Lon="-110.71932750321177"/>
</Line>
<Line pgenType="FILLED_CIRCLES" pgenCategory="Lines" lineWidth="2.0" sizeScale="1.0" smoothFactor="2" closed="false" filled="false" fillPattern="SOLID" flipSide="false">
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="37.50673906457284" Lon="-114.65373557109756"/>
<Point Lat="37.88186359787375" Lon="-110.45757792364648"/>
</Line>
<Line pgenType="LINE_WITH_CARETS" pgenCategory="Lines" lineWidth="2.0" sizeScale="1.0" smoothFactor="2" closed="false" filled="false" fillPattern="SOLID" flipSide="false">
<Color red="255" green="192" blue="203" alpha="255"/>
<Point Lat="36.41817021218797" Lon="-114.30878288285577"/>
<Point Lat="36.86505588802406" Lon="-109.94255844601042"/>
</Line>
<Line pgenType="LINE_CARET_LINE" pgenCategory="Lines" lineWidth="2.0" sizeScale="1.0" smoothFactor="2" closed="false" filled="false" fillPattern="SOLID" flipSide="false">
<Color red="255" green="192" blue="203" alpha="255"/>
<Point Lat="35.18215196932056" Lon="-114.16556497464263"/>
<Point Lat="35.61495921990058" Lon="-109.9920855593144"/>
</Line>
<Line pgenType="SINE_CURVE" pgenCategory="Lines" lineWidth="2.0" sizeScale="1.0" smoothFactor="2" closed="false" filled="false" fillPattern="SOLID" flipSide="false">
<Color red="173" green="216" blue="230" alpha="255"/>
<Point Lat="34.05003052791817" Lon="-114.11641841150953"/>
<Point Lat="33.932879858534555" Lon="-110.12754813949826"/>
</Line>
<Line pgenType="BOX_CIRCLE" pgenCategory="Lines" lineWidth="2.0" sizeScale="1.0" smoothFactor="2" closed="false" filled="false" fillPattern="SOLID" flipSide="false">
<Color red="255" green="0" blue="0" alpha="255"/>
<Point Lat="32.22188504378253" Lon="-113.81046461135132"/>
<Point Lat="32.650878003798745" Lon="-109.74383810778578"/>
</Line>
<Line pgenType="FILL_OPEN_BOX" pgenCategory="Lines" lineWidth="2.0" sizeScale="1.0" smoothFactor="2" closed="false" filled="false" fillPattern="SOLID" flipSide="false">
<Color red="255" green="165" blue="0" alpha="255"/>
<Point Lat="30.86920035583086" Lon="-114.01346580343987"/>
<Point Lat="31.186374121726857" Lon="-109.97941321696214"/>
</Line>
<Line pgenType="LINE_X_LINE" pgenCategory="Lines" lineWidth="2.0" sizeScale="1.0" smoothFactor="2" closed="false" filled="false" fillPattern="SOLID" flipSide="false">
<Color red="255" green="165" blue="0" alpha="255"/>
<Point Lat="29.690335391409327" Lon="-113.75301004981685"/>
<Point Lat="30.015069748068925" Lon="-110.24770359002206"/>
</Line>
<Line pgenType="LINE_XX_LINE" pgenCategory="Lines" lineWidth="2.0" sizeScale="1.0" smoothFactor="2" closed="false" filled="false" fillPattern="SOLID" flipSide="false">
<Color red="255" green="0" blue="0" alpha="255"/>
<Point Lat="28.52691159312473" Lon="-113.84546585784113"/>
<Point Lat="28.974608328928163" Lon="-109.7689049039295"/>
</Line>
<Line pgenType="FILL_CIRCLE_X" pgenCategory="Lines" lineWidth="2.0" sizeScale="1.0" smoothFactor="2" closed="false" filled="false" fillPattern="SOLID" flipSide="false">
<Color red="255" green="165" blue="0" alpha="255"/>
<Point Lat="27.335568777372078" Lon="-113.65873647900627"/>
<Point Lat="27.766368009849128" Lon="-109.75687024399734"/>
</Line>
<Line pgenType="BOX_X" pgenCategory="Lines" lineWidth="2.0" sizeScale="1.0" smoothFactor="2" closed="false" filled="false" fillPattern="SOLID" flipSide="false">
<Color red="255" green="165" blue="0" alpha="255"/>
<Point Lat="26.134550156473527" Lon="-113.54202767552592"/>
<Point Lat="26.496817821970318" Lon="-109.73781062653394"/>
</Line>
<Line pgenType="LINE_CIRCLE_ARROW" pgenCategory="Lines" lineWidth="2.0" sizeScale="1.0" smoothFactor="2" closed="false" filled="false" fillPattern="SOLID" flipSide="false">
<Color red="255" green="0" blue="0" alpha="255"/>
<Point Lat="25.041121190893485" Lon="-113.04178096077794"/>
<Point Lat="25.30903863032713" Lon="-108.85906236863968"/>
</Line>
<Line pgenType="DOUBLE_LINE" pgenCategory="Lines" lineWidth="2.0" sizeScale="1.0" smoothFactor="2" closed="false" filled="false" fillPattern="SOLID" flipSide="false">
<Color red="255" green="0" blue="0" alpha="255"/>
<Point Lat="23.89848709334172" Lon="-112.94180947987614"/>
<Point Lat="24.133042262513104" Lon="-109.12524753064729"/>
</Line>
<Line pgenType="ZZZ_LINE" pgenCategory="Lines" lineWidth="2.0" sizeScale="1.0" smoothFactor="2" closed="false" filled="false" fillPattern="SOLID" flipSide="false">
<Color red="255" green="0" blue="0" alpha="255"/>
<Point Lat="22.49338547697529" Lon="-113.00314714932638"/>
<Point Lat="22.707540809802193" Lon="-108.83360141691881"/>
</Line>
<Line pgenType="TICK_MARKS" pgenCategory="Lines" lineWidth="2.0" sizeScale="1.0" smoothFactor="2" closed="false" filled="false" fillPattern="SOLID" flipSide="false">
<Color red="255" green="165" blue="0" alpha="255"/>
<Point Lat="20.831167317573637" Lon="-112.70241695119927"/>
<Point Lat="21.204569382850483" Lon="-108.7343450409119"/>
</Line>
<Line pgenType="STREAM_LINE" pgenCategory="Lines" lineWidth="2.0" sizeScale="1.0" smoothFactor="2" closed="false" filled="false" fillPattern="SOLID" flipSide="false">
<Color red="160" green="32" blue="240" alpha="255"/>
<Point Lat="19.282701554968984" Lon="-112.48852999239747"/>
<Point Lat="19.853243101176776" Lon="-108.33312442667157"/>
</Line>
<Line pgenType="COLD_FRONT" pgenCategory="Front" lineWidth="2.0" sizeScale="1.0" smoothFactor="2" closed="false" filled="false" fillPattern="SOLID" flipSide="false">
<Color red="0" green="0" blue="255" alpha="255"/>
<Point Lat="55.94050058070887" Lon="-131.2947265543222"/>
<Point Lat="56.92703317452704" Lon="-124.05114780456228"/>
</Line>
<Line pgenType="TROF" pgenCategory="Front" lineWidth="4.0" sizeScale="1.0" smoothFactor="2" closed="false" filled="false" fillPattern="SOLID" flipSide="false">
<Color red="255" green="165" blue="0" alpha="255"/>
<Point Lat="42.04447629723107" Lon="-126.07230844814251"/>
<Point Lat="42.857150193538786" Lon="-120.51901209329233"/>
</Line>
<Line pgenType="TROPICAL_TROF" pgenCategory="Front" lineWidth="4.0" sizeScale="1.0" smoothFactor="2" closed="false" filled="false" fillPattern="SOLID" flipSide="false">
<Color red="255" green="165" blue="0" alpha="255"/>
<Point Lat="40.673057462722916" Lon="-125.8070086034075"/>
<Point Lat="41.5982437425656" Lon="-120.35488795025793"/>
</Line>
<Line pgenType="INSTABILITY" pgenCategory="Front" lineWidth="4.0" sizeScale="1.0" smoothFactor="2" closed="false" filled="false" fillPattern="SOLID" flipSide="false">
<Color red="255" green="0" blue="0" alpha="255"/>
<Point Lat="37.779530031591975" Lon="-124.95888526230613"/>
<Point Lat="38.60506004629856" Lon="-119.85585806847165"/>
</Line>
<Symbol pgenCategory="Symbol" pgenType="PRESENT_WX_088" lineWidth="2.0" sizeScale="1.0" clear="true">
<Color red="0" green="255" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="58.00819955920095" Lon="-105.22011687306525"/>
</Symbol>
<Symbol pgenCategory="Symbol" pgenType="PRESENT_WX_005" lineWidth="2.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="58.390472160537264" Lon="-91.99944420077273"/>
</Symbol>
<Symbol pgenCategory="Symbol" pgenType="PRESENT_WX_010" lineWidth="2.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="58.098308278080225" Lon="-87.3560031389412"/>
</Symbol>
<Symbol pgenCategory="Symbol" pgenType="PRESENT_WX_045" lineWidth="2.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="55.15085257272747" Lon="-105.105325616694"/>
</Symbol>
<Symbol pgenCategory="Symbol" pgenType="PRESENT_WX_051" lineWidth="2.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="55.10383243953169" Lon="-100.26448870514633"/>
</Symbol>
<Symbol pgenCategory="Symbol" pgenType="PRESENT_WX_056" lineWidth="2.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="55.518353199439304" Lon="-95.34895228020736"/>
</Symbol>
<Symbol pgenCategory="Symbol" pgenType="PRESENT_WX_061" lineWidth="2.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="55.48864184044005" Lon="-88.78912639926419"/>
</Symbol>
<Symbol pgenCategory="Symbol" pgenType="PRESENT_WX_063" lineWidth="2.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="55.54422068413056" Lon="-84.55145514500855"/>
</Symbol>
<Symbol pgenCategory="Symbol" pgenType="PRESENT_WX_065" lineWidth="2.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="52.597496415823834" Lon="-105.30887108406327"/>
</Symbol>
<Symbol pgenCategory="Symbol" pgenType="PRESENT_WX_066" lineWidth="2.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="52.99051064014291" Lon="-99.95255482018953"/>
</Symbol>
<Symbol pgenCategory="Symbol" pgenType="PRESENT_WX_071" lineWidth="2.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="53.253908495262976" Lon="-94.90246576996036"/>
</Symbol>
<Symbol pgenCategory="Symbol" pgenType="PRESENT_WX_073" lineWidth="2.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="53.18673752176344" Lon="-89.49118257088506"/>
</Symbol>
<Symbol pgenCategory="Symbol" pgenType="PRESENT_WX_075" lineWidth="2.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="53.30641009932742" Lon="-84.14255432042914"/>
</Symbol>
<Symbol pgenCategory="Symbol" pgenType="PRESENT_WX_079" lineWidth="2.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="49.784498066520136" Lon="-104.88924391527192"/>
</Symbol>
<Symbol pgenCategory="Symbol" pgenType="PRESENT_WX_080" lineWidth="2.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="50.47348643222256" Lon="-100.90567266666028"/>
</Symbol>
<Symbol pgenCategory="Symbol" pgenType="PRESENT_WX_085" lineWidth="2.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="50.177679854711606" Lon="-95.83210180033325"/>
</Symbol>
<Symbol pgenCategory="Symbol" pgenType="PRESENT_WX_089" lineWidth="2.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="50.19264284618585" Lon="-90.86331649066942"/>
</Symbol>
<Symbol pgenCategory="Symbol" pgenType="PRESENT_WX_095" lineWidth="2.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="50.17960262345406" Lon="-85.46821231016186"/>
</Symbol>
<Symbol pgenCategory="Symbol" pgenType="PRESENT_WX_105" lineWidth="2.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="47.37519761866969" Lon="-104.87281735626959"/>
</Symbol>
<Symbol pgenCategory="Symbol" pgenType="PRESENT_WX_201" lineWidth="2.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="47.64762870840391" Lon="-100.72111674036745"/>
</Symbol>
<Symbol pgenCategory="Symbol" pgenType="STORM_CENTER" lineWidth="2.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="42.8891215326389" Lon="-100.28744133269387"/>
</Symbol>
<Symbol pgenCategory="Symbol" pgenType="TROPICAL_DEPRESSION" lineWidth="2.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="43.249623351344646" Lon="-94.99086568670687"/>
</Symbol>
<Symbol pgenCategory="Symbol" pgenType="TROPICAL_CYCLONE" lineWidth="2.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="42.450922229856054" Lon="-90.4157776640661"/>
</Symbol>
<Symbol pgenCategory="Symbol" pgenType="FLAME" lineWidth="2.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="43.0529040036441" Lon="-85.31078220164004"/>
</Symbol>
<Symbol pgenCategory="Symbol" pgenType="X_CROSS" lineWidth="2.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="38.76958581038543" Lon="-103.67575942115286"/>
</Symbol>
<Symbol pgenCategory="Symbol" pgenType="LOW_X_OUTLINE" lineWidth="2.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="38.7" Lon="-99.0"/>
</Symbol>
<Symbol pgenCategory="Symbol" pgenType="LOW_X_FILLED" lineWidth="2.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="38.764921798876955" Lon="-99.03170313210154"/>
</Symbol>
<Symbol pgenCategory="Symbol" pgenType="TROPICAL_STORM_NH_WPAC" lineWidth="1.0" sizeScale="2.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="38.92828730621715" Lon="-94.76646026829452"/>
</Symbol>
<Symbol pgenCategory="Symbol" pgenType="TROPICAL_STORM_SH_WPAC" lineWidth="1.0" sizeScale="2.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="38.73464321921994" Lon="-89.82944337328756"/>
</Symbol>
<Symbol pgenCategory="Symbol" pgenType="NUCLEAR_FALLOUT" lineWidth="2.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="38.6408657552488" Lon="-86.09261101200478"/>
</Symbol>
<Symbol pgenCategory="Symbol" pgenType="LETTER_A_FILLED" lineWidth="2.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Point Lat="36.20892967867947" Lon="-103.27254020730498"/>
</Symbol>
<Symbol pgenCategory="Symbol" pgenType="LETTER_C" lineWidth="2.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Point Lat="36.53379568117395" Lon="-98.81419647594392"/>
</Symbol>
<Symbol pgenCategory="Symbol" pgenType="LETTER_C_FILLED" lineWidth="2.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Point Lat="36.34373940693731" Lon="-94.52455018593129"/>
</Symbol>
<Symbol pgenCategory="Symbol" pgenType="LETTER_X" lineWidth="2.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Point Lat="36.587581951230405" Lon="-89.7723211310872"/>
</Symbol>
<Symbol pgenCategory="Symbol" pgenType="LETTER_X_FILLED" lineWidth="2.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Point Lat="36.335112672891455" Lon="-86.15371735319238"/>
</Symbol>
<Symbol pgenCategory="Symbol" pgenType="LETTER_N" lineWidth="2.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Point Lat="34.187552402290656" Lon="-102.95828860946654"/>
</Symbol>
<Symbol pgenCategory="Symbol" pgenType="LETTER_N_FILLED" lineWidth="2.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Point Lat="34.720274822147715" Lon="-99.35791025909238"/>
</Symbol>
<Symbol pgenCategory="Symbol" pgenType="LETTER_B" lineWidth="2.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Point Lat="34.73989789716146" Lon="-95.04520047663429"/>
</Symbol>
<Symbol pgenCategory="Symbol" pgenType="LETTER_B_FILLED" lineWidth="2.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Point Lat="34.49784841073462" Lon="-91.1416020373972"/>
</Symbol>
<Symbol pgenCategory="Symbol" pgenType="30_KT_BARB" lineWidth="2.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Point Lat="34.46462934752184" Lon="-88.01913737657048"/>
</Symbol>
<Symbol pgenCategory="Symbol" pgenType="ICING_09" lineWidth="2.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Point Lat="32.07994160653829" Lon="-102.96008140893132"/>
</Symbol>
<Symbol pgenCategory="Symbol" pgenType="ICING_10" lineWidth="2.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Point Lat="32.62400207697082" Lon="-99.88162731483665"/>
</Symbol>
<Symbol pgenCategory="Marker" pgenType="PLUS_SIGN" lineWidth="2.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="57.42373937689146" Lon="-76.31066942824172"/>
</Symbol>
<Symbol pgenCategory="Marker" pgenType="OCTAGON" lineWidth="2.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="57.122799087124434" Lon="-73.23143109676302"/>
</Symbol>
<Symbol pgenCategory="Marker" pgenType="TRIANGLE" lineWidth="2.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="56.89910597639131" Lon="-70.32563144269854"/>
</Symbol>
<Symbol pgenCategory="Marker" pgenType="BOX" lineWidth="2.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="56.435592109590885" Lon="-67.88640782518563"/>
</Symbol>
<Symbol pgenCategory="Marker" pgenType="SMALL_X" lineWidth="2.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="56.158193233674076" Lon="-65.11504225478663"/>
</Symbol>
<Symbol pgenCategory="Marker" pgenType="Z_WITH_BAR" lineWidth="2.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="55.277083891545395" Lon="-76.7490757297261"/>
</Symbol>
<Symbol pgenCategory="Marker" pgenType="X_WITH_TOP_BAR" lineWidth="2.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="55.14894482246995" Lon="-73.9775695733111"/>
</Symbol>
<Symbol pgenCategory="Marker" pgenType="DIAMOND" lineWidth="2.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="54.87853105349985" Lon="-71.15957630621844"/>
</Symbol>
<Symbol pgenCategory="Marker" pgenType="UP_ARROW" lineWidth="2.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="54.58363102821036" Lon="-68.44932539363255"/>
</Symbol>
<Symbol pgenCategory="Marker" pgenType="Y" lineWidth="2.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="54.50776445462743" Lon="-65.66587755528214"/>
</Symbol>
<Symbol pgenCategory="Marker" pgenType="BOX_WITH_DIAGONALS" lineWidth="2.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="53.27804906148571" Lon="-77.11784755376404"/>
</Symbol>
<Symbol pgenCategory="Marker" pgenType="ASTERISK" lineWidth="2.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="53.10006243551938" Lon="-74.42767652326468"/>
</Symbol>
<Symbol pgenCategory="Marker" pgenType="HOURGLASS_X" lineWidth="2.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="52.941254371548105" Lon="-71.73549227132538"/>
</Symbol>
<Symbol pgenCategory="Marker" pgenType="STAR" lineWidth="2.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="52.60534394800802" Lon="-69.18907930156391"/>
</Symbol>
<Symbol pgenCategory="Marker" pgenType="DOT" lineWidth="2.0" sizeScale="4.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="52.342334901995294" Lon="-66.62853877884156"/>
</Symbol>
<Symbol pgenCategory="Marker" pgenType="LARGE_X" lineWidth="2.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="51.41588736683589" Lon="-77.08602076751212"/>
</Symbol>
<Symbol pgenCategory="Marker" pgenType="FILLED_OCTAGON" lineWidth="2.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="51.303060619705924" Lon="-74.61129460718716"/>
</Symbol>
<Symbol pgenCategory="Marker" pgenType="FILLED_TRIANGLE" lineWidth="2.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="51.22156175791849" Lon="-71.69541140184907"/>
</Symbol>
<Symbol pgenCategory="Marker" pgenType="FILLED_BOX" lineWidth="2.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="50.8369955815884" Lon="-69.30014088544016"/>
</Symbol>
<Symbol pgenCategory="Marker" pgenType="FILLED_DIAMOND" lineWidth="2.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="50.69786387463387" Lon="-66.92319310104156"/>
</Symbol>
<Symbol pgenCategory="Marker" pgenType="FILLED_STAR" lineWidth="2.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="49.53408535218434" Lon="-77.89503174081656"/>
</Symbol>
<Symbol pgenCategory="Marker" pgenType="MINUS_SIGN" lineWidth="2.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="49.566161187293694" Lon="-75.18827384242621"/>
</Symbol>
<Symbol pgenCategory="Combo" pgenType="PRESENT_WX_061|PRESENT_WX_051" lineWidth="1.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="36.69122381078902" Lon="-77.66703008082177"/>
</Symbol>
<Symbol pgenCategory="Combo" pgenType="PRESENT_WX_061|PRESENT_WX_063" lineWidth="1.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="36.673050052715254" Lon="-73.7564370547985"/>
</Symbol>
<Symbol pgenCategory="Combo" pgenType="PRESENT_WX_061|PRESENT_WX_080" lineWidth="1.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="36.22789245582859" Lon="-69.79294508484215"/>
</Symbol>
<Symbol pgenCategory="Combo" pgenType="PRESENT_WX_061|PRESENT_WX_095" lineWidth="1.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="35.5951286736764" Lon="-65.95750957463977"/>
</Symbol>
<Symbol pgenCategory="Combo" pgenType="PRESENT_WX_063|PRESENT_WX_065" lineWidth="1.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="34.93847724299643" Lon="-62.21682989345769"/>
</Symbol>
<Symbol pgenCategory="Combo" pgenType="PRESENT_WX_063|PRESENT_WX_080" lineWidth="1.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="34.48341889757323" Lon="-78.34097466378641"/>
</Symbol>
<Symbol pgenCategory="Combo" pgenType="PRESENT_WX_063|PRESENT_WX_095" lineWidth="1.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="34.272183698705845" Lon="-74.14894908259635"/>
</Symbol>
<Symbol pgenCategory="Combo" pgenType="PRESENT_WX_065|PRESENT_WX_080" lineWidth="1.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="33.71318110715412" Lon="-70.55938208352298"/>
</Symbol>
<Symbol pgenCategory="Combo" pgenType="PRESENT_WX_065|PRESENT_WX_095" lineWidth="1.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="32.91998694416165" Lon="-66.45181633769079"/>
</Symbol>
<Symbol pgenCategory="Combo" pgenType="PRESENT_WX_051|PRESENT_WX_056" lineWidth="1.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="32.205785123324475" Lon="-62.483578897634544"/>
</Symbol>
<Symbol pgenCategory="Combo" pgenType="PRESENT_WX_061|PRESENT_WX_056" lineWidth="1.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="31.892155578484715" Lon="-79.1685139696483"/>
</Symbol>
<Symbol pgenCategory="Combo" pgenType="PRESENT_WX_061|PRESENT_WX_066" lineWidth="1.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="31.392539141408474" Lon="-74.7999687171152"/>
</Symbol>
<Symbol pgenCategory="Combo" pgenType="PRESENT_WX_061|PRESENT_WX_071" lineWidth="1.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="30.816355966545853" Lon="-70.39951521085841"/>
</Symbol>
<Symbol pgenCategory="Combo" pgenType="PRESENT_WX_071|PRESENT_WX_073" lineWidth="1.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="30.293355788383266" Lon="-66.39032139503895"/>
</Symbol>
<Symbol pgenCategory="Combo" pgenType="PRESENT_WX_073|PRESENT_WX_075" lineWidth="1.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="29.771500581637582" Lon="-62.90850194852598"/>
</Symbol>
<Symbol pgenCategory="Combo" pgenType="PRESENT_WX_071|PRESENT_WX_085" lineWidth="1.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="29.564727813305883" Lon="-80.04977799816696"/>
</Symbol>
<Symbol pgenCategory="Combo" pgenType="PRESENT_WX_073|PRESENT_WX_085" lineWidth="1.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="29.011079569716536" Lon="-76.02768768139003"/>
</Symbol>
<Symbol pgenCategory="Combo" pgenType="PRESENT_WX_075|PRESENT_WX_085" lineWidth="1.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="28.243141545875663" Lon="-71.68965631402504"/>
</Symbol>
<Symbol pgenCategory="Combo" pgenType="PRESENT_WX_071|PRESENT_WX_105" lineWidth="1.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="27.75082541663378" Lon="-67.4450987087552"/>
</Symbol>
<Symbol pgenCategory="Combo" pgenType="PRESENT_WX_073|PRESENT_WX_105" lineWidth="1.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="27.12000508188666" Lon="-63.93964183628469"/>
</Symbol>
<Symbol pgenCategory="Combo" pgenType="PRESENT_WX_075|PRESENT_WX_105" lineWidth="1.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="26.782280376359804" Lon="-80.88673209355365"/>
</Symbol>
<Symbol pgenCategory="Combo" pgenType="PRESENT_WX_080|PRESENT_WX_095" lineWidth="1.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="26.14864275533824" Lon="-77.02882100116429"/>
</Symbol>
<Symbol pgenCategory="Combo" pgenType="PRESENT_WX_080|PRESENT_WX_085" lineWidth="1.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="25.588820565486063" Lon="-72.50604148567717"/>
</Symbol>
<Symbol pgenCategory="Combo" pgenType="PRESENT_WX_061|PRESENT_WX_079" lineWidth="1.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="25.248142459380198" Lon="-68.75316845230822"/>
</Symbol>
<Symbol pgenCategory="Combo" pgenType="PRESENT_WX_079|PRESENT_WX_066" lineWidth="1.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="24.27276058908192" Lon="-65.40259289881985"/>
</Symbol>
<Symbol pgenCategory="Combo" pgenType="PRESENT_WX_071|PRESENT_WX_079" lineWidth="1.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="23.84257024289965" Lon="-81.2808164822886"/>
</Symbol>
<Symbol pgenCategory="Symbol" pgenType="PAST_WX_09" lineWidth="1.0" sizeScale="1.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Point Lat="32.76159880485587" Lon="-96.55504658626423"/>
</Symbol>
<Symbol pgenCategory="Symbol" pgenType="FILLED_HIGH_PRESSURE_H" lineWidth="1.0" sizeScale="1.5" clear="true">
<Color red="0" green="0" blue="255" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="60.528" Lon="-101.028"/>
</Symbol>
<Symbol pgenCategory="Symbol" pgenType="HIGH_PRESSURE_H" lineWidth="1.0" sizeScale="1.5" clear="true">
<Color red="0" green="0" blue="255" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="58.096" Lon="-100.852"/>
</Symbol>
<Symbol pgenCategory="Symbol" pgenType="FILLED_LOW_PRESSURE_L" lineWidth="1.0" sizeScale="1.5" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="60.496" Lon="-94.964"/>
</Symbol>
<Symbol pgenCategory="Symbol" pgenType="LOW_PRESSURE_L" lineWidth="1.0" sizeScale="1.5" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="58.114" Lon="-95.361"/>
</Symbol>
<Symbol pgenCategory="Symbol" pgenType="TROPICAL_STORM_NH" lineWidth="1.0" sizeScale="1.5" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="46.622" Lon="-95.8"/>
</Symbol>
<Symbol pgenCategory="Symbol" pgenType="HURRICANE_NH" lineWidth="1.0" sizeScale="1.5" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="46.475" Lon="-91.192"/>
</Symbol>
<Symbol pgenCategory="Symbol" pgenType="TROPICAL_STORM_SH" lineWidth="1.0" sizeScale="1.5" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="46.55" Lon="-86.493"/>
</Symbol>
<Symbol pgenCategory="Symbol" pgenType="HURRICANE_SH" lineWidth="2.0" sizeScale="1.5" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="42.28" Lon="-104.131"/>
</Symbol>
<Text pgenCategory="Text" pgenType="General Text" fontSize="14.0" fontName="Courier" style="BOLD_ITALIC" justification="CENTER" rotation="0.0" rotationRelativity="SCREEN_RELATIVE" mask="true" displayType="NORMAL" yOffset="0" xOffset="0" hide="false" auto="false">
<Color red="255" green="255" blue="0" alpha="255"/>
<Point Lat="46.11026640392028" Lon="-72.6692548493991"/>
<textLine>Sample</textLine>
<textLine>Text</textLine>
</Text>
<AvnText pgenCategory="Text" pgenType="AVIATION_TEXT" symbolPatternName="Not Applicable" fontSize="14.0" fontName="Courier" style="REGULAR" justification="CENTER" bottomValue="XXX" topValue="XXX" avnTextType="LOW_PRESSURE_BOX">
<Color red="255" green="255" blue="255" alpha="255"/>
<Point Lat="30.508823131419327" Lon="-98.25635229216034"/>
</AvnText>
<MidCloudText pgenCategory="Text" pgenType="MID_LEVEL_CLOUD" fontSize="14.0" fontName="Courier" style="REGULAR" justification="CENTER" tstormLevels="" tstormTypes="" icingLevels="" icingType="ICING_05" turbulenceLevels="" turbulenceType="TURBULENCE_4" cloudTypes="">
<Color red="255" green="255" blue="255" alpha="255"/>
<Point Lat="37.33487901359149" Lon="-101.59046925996388"/>
</MidCloudText>
<Arc pgenCategory="Arc" pgenType="Circle" endAngle="360.0" startAngle="0.0" axisRatio="1.0" lineWidth="2.0" sizeScale="1.0" smoothFactor="2" closed="false" filled="false" fillPattern="SOLID">
<Color red="255" green="255" blue="0" alpha="255"/>
<Point Lat="42.867103597000316" Lon="-73.86894811811908"/>
<Point Lat="41.97887089093084" Lon="-72.25745920172047"/>
</Arc>
<Vector pgenCategory="Vector" pgenType="Arrow" direction="360.0" speed="10.0" arrowHeadSize="1.0" directionOnly="false" lineWidth="1.0" sizeScale="1.0" clear="true">
<Color red="0" green="0" blue="255" alpha="255"/>
<Point Lat="40.295713472449606" Lon="-77.79680427737456"/>
</Vector>
<Vector pgenCategory="Vector" pgenType="Barb" direction="360.0" speed="100.0" arrowHeadSize="1.0" directionOnly="false" lineWidth="1.0" sizeScale="1.0" clear="true">
<Color red="0" green="0" blue="255" alpha="255"/>
<Point Lat="39.10760614739255" Lon="-76.6734081781352"/>
</Vector>
<Vector pgenCategory="Vector" pgenType="Directional" direction="0.0" speed="10.0" arrowHeadSize="1.5" directionOnly="false" lineWidth="2.0" sizeScale="1.5" clear="true">
<Color red="0" green="0" blue="255" alpha="255"/>
<Point Lat="40.0042761674099" Lon="-75.04306320917897"/>
</Vector>
<Vector pgenCategory="Vector" pgenType="Hash" direction="0.0" speed="10.0" arrowHeadSize="1.0" directionOnly="false" lineWidth="2.0" sizeScale="1.0" clear="true">
<Color red="255" green="255" blue="0" alpha="255"/>
<Point Lat="39.35390746604257" Lon="-73.2133975036754"/>
</Vector>
<Track skipFactorTextString="0" setTimeButtonSelected="true" pgenType="STORM_TRACK" pgenCategory="Track" lineWidth="1.0" intervalTimeTextString="01:00" intervalComboSelectedIndex="2" initialMarker="FILLED_DIAMOND" initialLinePattern="LINE_SOLID" fontStyleComboSelectedIndex="2" fontSizeComboSelectedIndex="2" fontSize="14.0" fontNameComboSelectedIndex="0" fontName="Courier" extrapMarker="FILLED_TRIANGLE" extrapLinePattern="LINE_SOLID" extraPointTimeDisplayOptionName="SKIP_FACTOR">
<initialColor>
<Color red="255" green="0" blue="0" alpha="255"/>
</initialColor>
<extrapColor>
<Color red="255" green="255" blue="0" alpha="255"/>
</extrapColor>
<initialPoints>
<time>2010-06-30T14:57:08.419-04:00</time>
<location longitude="-126.37951168276611" latitude="30.034228159851732"/>
</initialPoints>
<initialPoints>
<time>2010-06-30T15:57:08.419-04:00</time>
<location longitude="-123.600117459191" latitude="30.05307989167604"/>
</initialPoints>
<extrapPoints>
<time>2010-06-30T16:00:08.419-04:00</time>
<location longitude="-123.46115811309699" latitude="30.05541713520117"/>
</extrapPoints>
<extrapPoints>
<time>2010-06-30T17:00:08.419-04:00</time>
<location longitude="-120.68117208589054" latitude="30.0742437809133"/>
</extrapPoints>
<extraPointTimeTextDisplayIndicator>true</extraPointTimeTextDisplayIndicator>
<extraPointTimeTextDisplayIndicator>true</extraPointTimeTextDisplayIndicator>
</Track>
<Contours collectionName="Contours" pgenCategory="MET" pgenType="Contours" parm="HGMT" level="1000" forecastHour="f000" time1="2011-01-31T10:31:30.868Z" time2="2011-01-31T10:31:30.868Z" cint="10/0/100">
<DECollection collectionName="ContourLine">
<DrawableElement>
<Line pgenType="LINE_SOLID" pgenCategory="Lines" lineWidth="2.0" sizeScale="1.0" smoothFactor="2" closed="false" filled="false" fillPattern="SOLID" flipSide="false">
<Color red="255" green="255" blue="0" alpha="255"/>
<Point Lat="26.428785592797627" Lon="-96.45561948258505"/>
<Point Lat="25.310522417022966" Lon="-93.35768115376911"/>
<Point Lat="25.232952038817622" Lon="-88.85298910006651"/>
<Point Lat="25.823670559001588" Lon="-83.90007857750363"/>
</Line>
<Text pgenCategory="Text" pgenType="General Text" fontSize="14.0" fontName="Courier" style="REGULAR" justification="CENTER" rotation="0.0" rotationRelativity="SCREEN_RELATIVE" mask="true" displayType="NORMAL" yOffset="0" xOffset="0" hide="false" auto="true">
<Color red="255" green="255" blue="0" alpha="255"/>
<Point Lat="25.21368045326691" Lon="-90.56580627068793"/>
<textLine>0.0</textLine>
</Text>
</DrawableElement>
</DECollection>
<DECollection collectionName="ContourMinmax">
<DrawableElement>
<Symbol pgenCategory="Symbol" pgenType="FILLED_HIGH_PRESSURE_H" lineWidth="2.0" sizeScale="2.0" clear="true">
<Color red="0" green="0" blue="255" alpha="255"/>
<Point Lat="24.477612656422" Lon="-96.02791970899126"/>
</Symbol>
<Text pgenCategory="Text" pgenType="General Text" fontSize="14.0" fontName="Courier" style="REGULAR" justification="CENTER" rotation="0.0" rotationRelativity="SCREEN_RELATIVE" mask="true" displayType="NORMAL" yOffset="0" xOffset="0" hide="false" auto="true">
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="23.31628419112162" Lon="-96.18152394088003"/>
<textLine>0.0</textLine>
</Text>
</DrawableElement>
</DECollection>
<DECollection collectionName="ContourMinmax">
<DrawableElement>
<Symbol pgenCategory="Symbol" pgenType="FILLED_LOW_PRESSURE_L" lineWidth="2.0" sizeScale="2.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Point Lat="23.795978963992948" Lon="-93.16267008905666"/>
</Symbol>
<Text pgenCategory="Text" pgenType="General Text" fontSize="14.0" fontName="Courier" style="REGULAR" justification="CENTER" rotation="0.0" rotationRelativity="SCREEN_RELATIVE" mask="true" displayType="NORMAL" yOffset="0" xOffset="0" hide="false" auto="true">
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="22.65185293461299" Lon="-93.3761634477698"/>
<textLine>0.0</textLine>
</Text>
</DrawableElement>
</DECollection>
<DECollection collectionName="ContourMinmax">
<DrawableElement>
<Symbol pgenCategory="Symbol" pgenType="TROPICAL_STORM_NH" lineWidth="2.0" sizeScale="2.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Point Lat="23.160532223358484" Lon="-90.91533071519707"/>
</Symbol>
<Text pgenCategory="Text" pgenType="General Text" fontSize="14.0" fontName="Courier" style="REGULAR" justification="CENTER" rotation="0.0" rotationRelativity="SCREEN_RELATIVE" mask="true" displayType="NORMAL" yOffset="0" xOffset="0" hide="false" auto="true">
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="22.03309503228745" Lon="-91.17390337831029"/>
<textLine>0.0</textLine>
</Text>
</DrawableElement>
</DECollection>
<DECollection collectionName="ContourMinmax">
<DrawableElement>
<Symbol pgenCategory="Symbol" pgenType="HURRICANE_NH" lineWidth="2.0" sizeScale="2.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Point Lat="23.289201256859105" Lon="-89.01095592046661"/>
</Symbol>
<Text pgenCategory="Text" pgenType="General Text" fontSize="14.0" fontName="Courier" style="REGULAR" justification="CENTER" rotation="0.0" rotationRelativity="SCREEN_RELATIVE" mask="true" displayType="NORMAL" yOffset="0" xOffset="0" hide="false" auto="true">
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="22.168501580057374" Lon="-89.3102826482802"/>
<textLine>0.0</textLine>
</Text>
</DrawableElement>
</DECollection>
<DECollection collectionName="ContourMinmax">
<DrawableElement>
<Symbol pgenCategory="Symbol" pgenType="TROPICAL_DEPRESSION" lineWidth="2.0" sizeScale="2.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Point Lat="23.486876792864617" Lon="-87.12551374508226"/>
</Symbol>
<Text pgenCategory="Text" pgenType="General Text" fontSize="14.0" fontName="Courier" style="REGULAR" justification="CENTER" rotation="0.0" rotationRelativity="SCREEN_RELATIVE" mask="true" displayType="NORMAL" yOffset="0" xOffset="0" hide="false" auto="true">
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="22.37316151616273" Lon="-87.46551998839023"/>
<textLine>0.0</textLine>
</Text>
</DrawableElement>
</DECollection>
<DECollection collectionName="ContourMinmax">
<DrawableElement>
<Symbol pgenCategory="Symbol" pgenType="TROPICAL_CYCLONE" lineWidth="2.0" sizeScale="2.0" clear="true">
<Color red="255" green="0" blue="0" alpha="255"/>
<Point Lat="23.665113167611565" Lon="-85.14814732119048"/>
</Symbol>
<Text pgenCategory="Text" pgenType="General Text" fontSize="14.0" fontName="Courier" style="REGULAR" justification="CENTER" rotation="0.0" rotationRelativity="SCREEN_RELATIVE" mask="true" displayType="NORMAL" yOffset="0" xOffset="0" hide="false" auto="true">
<Color red="0" green="255" blue="0" alpha="255"/>
<Point Lat="22.560405748159866" Lon="-85.53055624464719"/>
<textLine>0.0</textLine>
</Text>
</DrawableElement>
</DECollection>
</Contours>
</DrawableElement>
</Layer>
</Product>
</Products>

View file

@ -0,0 +1,62 @@
!
! STR.TBL
!
! This table contains the "restore" information for the QPF STR NMAP
! graph-to-grid processing.
!
! See the table "grphgd.tbl" for the current list and explanation of all
! valid PARAMETERs and their VALUEs.
!
!
!!
! Log:
! J. Wu/Chugach 06/10 copied from qpf.tbl
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!
!PARAMETER VALUE
!
VGF_TEMPLATE qpf_PPPP_YYYYMMDDHHfFFF.vgf
!
GDOUTF PPPP_YYYYMMDDHHfFFF.grd
!
CNTRFL PPPP_YYYYMMDDHHfFFF.info
!
PATH .
!
GVCORD none
!
GLEVEL 0
!
GGLIMS -30;-30||-30
!
KEYCOL
!
KEYLINE
!
OLKDAY
!
MAXGRD 10
!
HISTGRD YES
!
GFUNC HGMT
! Specify either CPYFIL - OR -
CPYFIL
! the combination PROJ, GRDAREA, KXKY and ANLYSS
PROJ STR/90;-97;0
GRDAREA 19.00;-119.00;47.00;-56.00
KXKY 63;28
ANLYSS
!
!
! The following are used to contour/display the grid once it has been created
!
CINT -20;-10;0;10;20;30;40;50;60;70
!
LINE 31/1/4
!
FINT -20;-10;0;10;20;30;40;50;60;70
!
FLINE 0;21-30;14-20;5
!
CLRBAR 1

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,160 @@
<?xml version="1.0"?>
<vaa>
<path LPF_PATH="./" ></path>
<path TXT_PATH="./" ></path>
<header-information orig-stn="KNES" vaac="/WASHINGTON" wmoid="/XX" wmo-header-number="/20;21;22;23;24;25;26;27"></header-information>
<header-information orig-stn="PANC" vaac="/ANCHORAGE" wmoid="/AK" wmo-header-number="/20;21;22;23;24"></header-information>
<header-information orig-stn="CWAO" vaac="/MONTREAL" wmoid="/CN" wmo-header-number="/01;02;03;04"></header-information>
<header-information orig-stn="SABM" vaac="/BUENOS AIRES" wmoid="/XX" wmo-header-number="/01"></header-information>
<header-information orig-stn="ADRM" vaac="/DARWIN" wmoid="/AU" wmo-header-number="/01;02;03;04"></header-information>
<header-information orig-stn="EGRR" vaac="/LONDON" wmoid="/UK" wmo-header-number="/01"></header-information>
<header-information orig-stn="RJTD" vaac="/TOKYO" wmoid="/FE" wmo-header-number="/01"></header-information>
<header-information orig-stn="LFPW" vaac="/TOULOUSE" wmoid="/AF;AW;EU" wmo-header-number="/01"></header-information>
<header-information orig-stn="NZKL" vaac="/WELLINGTON" wmoid="/PS" wmo-header-number="/01"></header-information>
<information-source source="NOT AVBL" ></information-source>
<information-source source="AWC" ></information-source>
<information-source source="MEXICO CITY MWO" ></information-source>
<information-source source="TEGUCIGALPA MWO" ></information-source>
<information-source source="PIARCO MWO" ></information-source>
<information-source source="GUAYAQUIL MWO" ></information-source>
<information-source source="GUAM WFO" ></information-source>
<information-source source="HONOLULU MWO" ></information-source>
<information-source source="GUAM NWS" ></information-source>
<information-source source="GOES-13" ></information-source>
<information-source source="GOES-11" ></information-source>
<information-source source="GOES-12" ></information-source>
<information-source source="MTSAT" ></information-source>
<information-source source="FY-2D" ></information-source>
<information-source source="GFS WINDS" ></information-source>
<information-source source="NAM WINDS" ></information-source>
<information-source source="VAFTAD" ></information-source>
<information-source source="SEISMIC DETECTION" ></information-source>
<information-source source="INFRASOUND DETECTION" ></information-source>
<information-source source="RADIOSONDE" ></information-source>
<information-source source="METAR" ></information-source>
<information-source source="VOLCANO WEB CAMERA" ></information-source>
<information-source source="PILOT REPORT" ></information-source>
<information-source source="USGS" ></information-source>
<information-source source="CENAPRED" ></information-source>
<information-source source="COLIMA OBSERVATORY" ></information-source>
<information-source source="GEOPHYSICAL INST" ></information-source>
<information-source source="INSIVUMEH" ></information-source>
<information-source source="MONTSERRAT OBSERVATORY" ></information-source>
<information-source source="INETER" ></information-source>
<information-source source="HVO" ></information-source>
<information-source source="AVO" ></information-source>
<information-source source="CVO" ></information-source>
<information-source source="AFWA" ></information-source>
<aviation-color-code code="NOT GIVEN" ></aviation-color-code>
<aviation-color-code code="NIL" ></aviation-color-code>
<aviation-color-code code="UNKNOWN" ></aviation-color-code>
<aviation-color-code code="GREEN" ></aviation-color-code>
<aviation-color-code code="YELLOW" ></aviation-color-code>
<aviation-color-code code="ORANGE" ></aviation-color-code>
<aviation-color-code code="RED" ></aviation-color-code>
<next-advisory advisory="WILL BE ISSUED BY YYYYMMMDD/HHNNZ"></next-advisory>
<next-advisory advisory="NO FURTHER ADVISORIES"></next-advisory>
<next-advisory advisory="AS SOON AS POSSIBLE"></next-advisory>
<forecasters name="BALDWIN"></forecasters>
<forecasters name="BIRCH"></forecasters>
<forecasters name="EVANS"></forecasters>
<forecasters name="GALLINA"></forecasters>
<forecasters name="KIBLER"></forecasters>
<forecasters name="LIDDICK"></forecasters>
<forecasters name="RUMINSKI"></forecasters>
<forecasters name="SALEMI"></forecasters>
<forecasters name="SCHWARTZ"></forecasters>
<forecasters name="SPAMPATA"></forecasters>
<forecasters name="STREETT"></forecasters>
<forecasters name="SWANSON"></forecasters>
<forecasters name="TURK"></forecasters>
<format location="LOC_EDIT" product="NORMAL" vaa-form-entry-value="&lt;ALL&gt;"></format>
<format location="LOC_EDIT" product="END" vaa-form-entry-value="&lt;ALL&gt;" ></format>
<format location="LOC_EDIT" product="END" vaa-form-entry-value="&lt;OBS ASH CLOUD&gt;ASH NOT IDENTIFIABLE FROM SATELLITE DATA" ></format>
<format location="LOC_EDIT" product="END" vaa-form-entry-value="&lt;NEXT ADVISORY&gt; NO FURTHER ADVISORIES" ></format>
<format location="LOC_CREATE" product="TEST" vaa-form-entry-value="&lt;VOLCANO&gt;TEST" ></format>
<format location="LOC_CREATE" product="TEST" vaa-form-entry-value="&lt;NUMBER&gt;9999-99" ></format>
<format location="LOC_CREATE" product="TEST" vaa-form-entry-value="&lt;LOCATION&gt;N9999W9999" ></format>
<format location="LOC_CREATE" product="TEST" vaa-form-entry-value="&lt;AREA&gt;TEST" ></format>
<format location="LOC_CREATE" product="TEST" vaa-form-entry-value="&lt;SUMMIT ELEVATION&gt;9999 FT (9999M)" ></format>
<format location="LOC_CREATE" product="TEST" vaa-form-entry-value="&lt;ADVISORY NUMBER&gt;001" ></format>
<format location="LOC_CREATE" product="TEST" vaa-form-entry-value="&lt;REMARKS&gt;TEST...TEST...TEST. THIS IS ONLY A TEST." ></format>
<format location="LOC_EDIT" product="QUICK" vaa-form-entry-value="&lt;ALL&gt;"></format>
<format location="LOC_EDIT" product="QUICK" vaa-form-entry-value="&lt;LOCATION&gt;"></format>
<format location="LOC_EDIT" product="QUICK" vaa-form-entry-value="&lt;AREA&gt;"></format>
<format location="LOC_EDIT" product="QUICK" vaa-form-entry-value="&lt;SUMMIT ELEVATION&gt;"></format>
<format location="LOC_EDIT" product="QUICK" vaa-form-entry-value="&lt;ADVISORY NUMBER&gt;"></format>
<format location="LOC_EDIT" product="QUICK" vaa-form-entry-value="&lt;INFORMATION SOURCE&gt;NOT AVBL"></format>
<format location="LOC_EDIT" product="QUICK" vaa-form-entry-value="&lt;ERUPTION DETAILS&gt;NOT AVBL"></format>
<format location="LOC_EDIT" product="QUICK" vaa-form-entry-value="&lt;OBS ASH DATA/TIME&gt;NIL MAYBE"></format>
<format location="LOC_EDIT" product="QUICK" vaa-form-entry-value="&lt;OBS ASH CLOUD&gt;NOT AVBL"></format>
<format location="LOC_EDIT" product="QUICK" vaa-form-entry-value="&lt;FCST ASH CLOUD +6H&gt;NOT AVBL"></format>
<format location="LOC_EDIT" product="QUICK" vaa-form-entry-value="&lt;FCST ASH CLOUD +12H&gt;NOT AVBL"></format>
<format location="LOC_EDIT" product="QUICK" vaa-form-entry-value="&lt;FCST ASH CLOUD +18H&gt;NOT AVBL"></format>
<format location="LOC_EDIT" product="QUICK" vaa-form-entry-value="&lt;REMARKS&gt;WE HAVE RECEIVED INFORMATION SUGGESTING A POSSIBLE ASH EMISSION. WE WILL GATHER FURTHER INFORMATION AND ISSUE A FULL ADVISORY AS SOON AS POSSIBLE."></format>
<format location="LOC_EDIT" product="QUICK" vaa-form-entry-value="&lt;NEXT ADVISORY&gt;AS SOON AS POSSIBLE"></format>
<format location="LOC_EDIT" product="NEAR" vaa-form-entry-value="&lt;ALL&gt;"></format>
<format location="LOC_EDIT" product="NEAR" vaa-form-entry-value="&lt;LOCATION&gt;"></format>
<format location="LOC_EDIT" product="NEAR" vaa-form-entry-value="&lt;AREA&gt;"></format>
<format location="LOC_EDIT" product="NEAR" vaa-form-entry-value="&lt;SUMMIT ELEVATION&gt;"></format>
<format location="LOC_EDIT" product="NEAR" vaa-form-entry-value="&lt;ADVISORY NUMBER&gt;"></format>
<format location="LOC_EDIT" product="NEAR" vaa-form-entry-value="&lt;OBS ASH CLOUD&gt;NOT AVBL"></format>
<format location="LOC_EDIT" product="NEAR" vaa-form-entry-value="&lt;FCST ASH CLOUD +6H&gt;NOT AVBL"></format>
<format location="LOC_EDIT" product="NEAR" vaa-form-entry-value="&lt;FCST ASH CLOUD +12H&gt;NOT AVBL"></format>
<format location="LOC_EDIT" product="NEAR" vaa-form-entry-value="&lt;FCST ASH CLOUD +18H&gt;NOT AVBL"></format>
<format location="LOC_EDIT" product="NEAR" vaa-form-entry-value="&lt;REMARKS&gt;"></format>
<format location="LOC_EDIT" product="WATCH" vaa-form-entry-value="&lt;ALL&gt;"></format>
<format location="LOC_EDIT" product="WATCH" vaa-form-entry-value="&lt;LOCATION&gt;"></format>
<format location="LOC_EDIT" product="WATCH" vaa-form-entry-value="&lt;AREA&gt;"></format>
<format location="LOC_EDIT" product="WATCH" vaa-form-entry-value="&lt;SUMMIT ELEVATION&gt;"></format>
<format location="LOC_EDIT" product="WATCH" vaa-form-entry-value="&lt;ADVISORY NUMBER&gt;"></format>
<format location="LOC_EDIT" product="WATCH" vaa-form-entry-value="&lt;INFORMATION SOURCE&gt;"></format>
<format location="LOC_EDIT" product="WATCH" vaa-form-entry-value="&lt;ERUPTION DETAILS&gt;NO ERUPTION HAS OCCURRED"></format>
<format location="LOC_EDIT" product="WATCH" vaa-form-entry-value="&lt;REMARKS&gt;"></format>
<format location="LOC_EDIT" product="WATCH" vaa-form-entry-value="&lt;NEXT ADVISORY&gt;WILL BE ISSUED DAILY UNTIL THE IMMINENT THREAT HAS PASSED OR SOONER IF AN ERUPTION OCCURS"></format>
<format location="LOC_CREATE" product="RESUME" vaa-form-entry-value="&lt;VOLCANO&gt;USER MESSAGE"></format>
<format location="LOC_CREATE" product="RESUME" vaa-form-entry-value="&lt;LOCATION&gt;XX"></format>
<format location="LOC_CREATE" product="RESUME" vaa-form-entry-value="&lt;AREA&gt;XX"></format>
<format location="LOC_CREATE" product="RESUME" vaa-form-entry-value="&lt;REMARKS&gt;THE WASHINGTON VAAC HAS NOW RESUMED NORMAL OPERATIONS."></format>
<format location="LOC_CREATE" product="BACKUP" vaa-form-entry-value="&lt;VOLCANO&gt;USER MESSAGE" ></format>
<format location="LOC_CREATE" product="BACKUP" vaa-form-entry-value="&lt;LOCATION&gt;XX" ></format>
<format location="LOC_CREATE" product="BACKUP" vaa-form-entry-value="&lt;AREA&gt;XX" ></format>
<format location="LOC_CREATE" product="BACKUP" vaa-form-entry-value="&lt;REMARKS&gt;"></format>
<misc info="MISCMESG EFFECTIVE SEPTEMBER 1 2004...THE HEADER IDENTIFICATION FOR THIS PRODUCT WILL CHANGE FROM KWBC TO KNES."></misc>
<others-fcst dialog="NO ASH EXP (NO FL)" display="NO ASH EXP" text="NO ASH EXP"></others-fcst>
<others-fcst dialog="NO ASH EXP (WITH FL)" display="SFC/FL NO ASH EXP" text="SFC/FL NO ASH EXP"></others-fcst>
<wording tag="&lt;VAA&gt;" old-wording="VOLCANIC_ASH_ADVISORY" new-wording="VA_ADVISORY" ></wording>
<wording tag="&lt;DTG&gt;" old-wording="ISSUED" new-wording="DTG"></wording>
<wording tag="&lt;PSN&gt;" old-wording="LOCATION" new-wording="PSN"></wording>
<wording tag="&lt;SUM&gt;" old-wording="SUMMIT_ELEVATION" new-wording="SUMMIT_ELEV"></wording>
<wording tag="&lt;ADV&gt;" old-wording="ADVISORY_NUMBER" new-wording="ADVISORY_NR"></wording>
<wording tag="&lt;INF&gt;" old-wording="INFORMATION_SOURCE" new-wording="INFO_SOURCE"></wording>
<wording tag="&lt;OAD&gt;" old-wording="OBS_ASH_DATE/TIME" new-wording="OBS_VA_DTG"></wording>
<wording tag="&lt;OAC&gt;" old-wording="OBS_ASH_CLOUD" new-wording="OBS_VA_CLD"></wording>
<wording tag="&lt;F06&gt;" old-wording="FCST_ASH_CLOUD_+6H" new-wording="FCST_VA_CLD_+6H"></wording>
<wording tag="&lt;F12&gt;" old-wording="FCST_ASH_CLOUD_+12H" new-wording="FCST_VA_CLD_+12H"></wording>
<wording tag="&lt;F18&gt;" old-wording="FCST_ASH_CLOUD_+18H" new-wording="FCST_VA_CLD_+18H"></wording>
<wording tag="&lt;RMK&gt;" old-wording="REMARKS" new-wording="RMK"></wording>
<wording tag="&lt;TXT&gt;" old-wording="NEXT_ADVISORY" new-wording="NXT_ADVISORY"></wording>
<wording tag="&lt;TOF&gt;" old-wording="TO" new-wording="FROM"></wording>
</vaa>

View file

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method = "text"/>
<xsl:variable name="Separator" select="'|'"/>
<xsl:template match="/">
<xsl:for-each select="message/body/responses/values">
<xsl:value-of select="."/>
<xsl:value-of select="$Separator"/>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>

View file

@ -0,0 +1,46 @@
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml"/>
<!--
GetAmd
This template checks all the smear elements and outputs a string of
AMD (meaning amended) if the Status is CAN (canceled) or NEW
(new) or AMD (amended). If the Status is COR (corrected) then
COR is output. Note that because this checks every smear the output may well
be more than a single string. You will have to trap this output and
use the SetAmd template below to get a single AMD in a variable.
Change Log
====== ===
E. Safford/SAIC 10/05 initial coding
B. Yin/Chugach 12/11 changed 'Status' to 'issueType'
-->
<xsl:template name="GetAmd">
<xsl:param name="haz1"></xsl:param>
<xsl:param name="haz2"></xsl:param>
<xsl:param name="haz3"></xsl:param>
<xsl:for-each select="//smear">
<xsl:if test="contains( hazard, '$haz1' )">
<xsl:choose>
<xsl:when test="issueType = 'CAN'">
AMD
</xsl:when>
<xsl:when test="issueType = 'NEW'">
AMD
</xsl:when>
<xsl:when test="issueType = 'AMD'">
AMD
</xsl:when>
<xsl:when test="issueType = 'COR'">
COR
</xsl:when>
</xsl:choose>
</xsl:if>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>

View file

@ -0,0 +1,83 @@
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml"/>
<!--
GetAttentionLine
This template examines the status parameter and writes out one or two lines
if CAN, NEW, or COR is found in status. This is to be used for the individual
airmet paragraphs which need to include attention lines at the end if
they are canceled, corrected, or new issuances.
Change Log
====== ===
E. Safford/SAIC 10/05 initial coding
E. Safford/SAIC 06/06 add param to handle Outlooks
E. Safford/SAIC 08/06 rm CONDS HV ENDED from Outlook line.
E. Safford/SAIC 06/07 rm "...UPDT TO CANCEL..."
B. Yin/SAIC 02/08 add tag number after cancellation
B. Yin 12/11 added new line for 'New' or 'Cor'
-->
<xsl:template name="GetAttentionLine">
<xsl:param name="status"></xsl:param>
<xsl:param name="airmet_outlook">AIRMET</xsl:param>
<xsl:choose>
<xsl:when test="contains( $status, 'CAN')"> <!-- Cancel lines -->
<xsl:element name="line"><xsl:attribute name="indent">0</xsl:attribute>
<xsl:choose>
<xsl:when test="contains( $airmet_outlook, 'AIRMET')">
<xsl:text>CANCEL AIRMET. CONDS HV ENDED.</xsl:text>
</xsl:when>
<xsl:otherwise>
<xsl:text>CANCEL OUTLOOK.</xsl:text>
</xsl:otherwise>
</xsl:choose>
<!-- Tag number -->
<xsl:variable name="airTag"><xsl:value-of select="airmetTag"/></xsl:variable>
<xsl:if test="string-length($airTag) > 1"><xsl:text> </xsl:text><xsl:value-of select="normalize-space($airTag)"/>.</xsl:if>
</xsl:element>
</xsl:when>
<xsl:when test="contains( $status, 'NEW')"> <!-- New line -->
<xsl:element name="line"><xsl:attribute name="indent">0</xsl:attribute>
<xsl:choose>
<xsl:when test="contains( $airmet_outlook, 'AIRMET')">
<xsl:value-of select="$newline"/>
<xsl:text>...NEW AIRMET...</xsl:text>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$newline"/>
<xsl:text>...NEW OUTLOOK...</xsl:text>
</xsl:otherwise>
</xsl:choose>
</xsl:element>
</xsl:when>
<xsl:when test="contains( $status, 'COR')"> <!-- Corrected line -->
<xsl:element name="line"><xsl:attribute name="indent">0</xsl:attribute>
<xsl:choose>
<xsl:when test="contains( $airmet_outlook, 'AIRMET')">
<xsl:value-of select="$newline"/>
<xsl:text>...CORRECTED AIRMET...</xsl:text>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$newline"/>
<xsl:text>...CORRECTED OUTLOOK...</xsl:text>
</xsl:otherwise>
</xsl:choose>
</xsl:element>
</xsl:when>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>

View file

@ -0,0 +1,95 @@
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml"/>
<!--
GetStatus
This template checks all the smear elements and outputs a string of
AMD (meaning amended) if the Status is CAN (canceled) or NEW
(new) or AMD (amended). If the Status is COR (corrected) then
COR is output. Note that because this checks every smear the output may well
be more than a single string. You will have to trap this output and then
use the SetAmd template below to get a single AMD in a variable.
Change Log
====== ===
E. Safford/SAIC 10/05 initial coding
E. Safford/SAIC 04/06 add default non-values for haz params
E. Safford/SAIC 06/06 add consider outlooks for status determination
B. Yin/SAIC 08/06 distinguish smear and outlook
B. Yin/Chugach 12/11 changed 'Status' to 'issueType'
changed for-each condition for smears
-->
<xsl:template name="GetStatus">
<xsl:param name="haz1">NO HAZARD1</xsl:param>
<xsl:param name="haz2">NO HAZARD2</xsl:param>
<xsl:param name="haz3">NO HAZARD3</xsl:param>
<xsl:for-each select="//Gfa[(@hazard = $haz1 or @hazard = $haz2 or @hazard = $haz3) and contains(@fcstHr,'-') and @isOutlook='false']">
<xsl:if test="contains( @hazard, $haz1 ) or contains( @hazard, $haz2 ) or contains( @hazard, $haz3 )">
<xsl:choose>
<xsl:when test="@issueType = 'CAN'">
AMD_SMEAR
</xsl:when>
<xsl:when test="@issueType = 'NEW'">
AMD_SMEAR
</xsl:when>
<xsl:when test="@issueType = 'AMD'">
AMD_SMEAR
</xsl:when>
<xsl:when test="@issueType = 'COR'">
COR_SMEAR
</xsl:when>
</xsl:choose>
</xsl:if>
</xsl:for-each>
<xsl:for-each select="//outlook">
<xsl:if test="contains( hazard, $haz1 ) or contains( hazard, $haz2 ) or contains( hazard, $haz3 )">
<xsl:choose>
<xsl:when test="issueType = 'CAN'">
AMD_OTLK
</xsl:when>
<xsl:when test="issueType = 'NEW'">
AMD_OTLK
</xsl:when>
<xsl:when test="issueType = 'AMD'">
AMD_OTLK
</xsl:when>
<xsl:when test="issueType = 'COR'">
COR_OTLK
</xsl:when>
</xsl:choose>
</xsl:if>
</xsl:for-each>
</xsl:template>
<!--
SetStatus
This template takes the amdTest parameter and outputs either AMD
(meaning amended) or nothing. If the calling template traps this
output in a variable, then it will have the correct amendement string
for use in the Airmet header.
Change Log
====== ===
E. Safford/SAIC 03/05 initial coding
E. Safford/SAIC 08/05 add test for COR
B. Yin/SAIC 08/06 make smear take precedence over outlook
-->
<xsl:template name="SetStatus">
<xsl:param name="amdTest"/>
<xsl:choose>
<xsl:when test="contains( $amdTest, 'AMD_SMEAR')">AMD</xsl:when>
<xsl:when test="contains( $amdTest, 'COR_SMEAR')">COR</xsl:when>
<xsl:when test="contains( $amdTest, 'AMD_OTLK')">AMD</xsl:when>
<xsl:when test="contains( $amdTest, 'COR_OTLK')">COR</xsl:when>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>

View file

@ -0,0 +1,28 @@
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml"/>
<!--
GetUpdate
This template examines the status parameter and returns a string of "...UPDT"
if CAN, AMD, COR, or NEW is found in it. This is to be used for the individual
airmet paragraphs which need to have "...UPDT" included after the state list if
they are canceled, amended, corrected, or new issuances.
Change Log
====== ===
E. Safford/SAIC 10/05 initial coding
-->
<xsl:template name="GetUpdate">
<xsl:param name="status"/>
<xsl:if test="contains( $status, 'CAN') or contains( $status, 'AMD') or contains( $status, 'COR') or contains($status, 'NEW')" >
<xsl:text>...UPDT</xsl:text>
</xsl:if>
</xsl:template>
</xsl:stylesheet>

View file

@ -0,0 +1,60 @@
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:import href="sierra.xsl"/>
<xsl:import href="tango.xsl"/>
<xsl:import href="zulu.xsl"/>
<!--
Product per categoty, per area.
Example: category='SIERRA,ZULU' - might be multiple, using any or no delimiter
area='SFO' - single area here
or category='SIERRA' area='CHI'
If no parameters provided, the product is generated for all the categories and all the areas.
-->
<xsl:param name="categories">SIERRA TANGO ZULU</xsl:param>
<xsl:param name="areas">SFO SLC CHI DFW BOS MIA</xsl:param>
<xsl:output method="text"/>
<xsl:variable name="newline">
<xsl:text>
</xsl:text>
</xsl:variable>
<xsl:template match="/">
<xsl:if test="contains($areas, 'SLC')">
<xsl:call-template name="singleArea"><xsl:with-param name="area">SLC</xsl:with-param></xsl:call-template>
</xsl:if>
<xsl:if test="contains($areas, 'SFO')">
<xsl:call-template name="singleArea"><xsl:with-param name="area">SFO</xsl:with-param></xsl:call-template>
</xsl:if>
<xsl:if test="contains($areas, 'CHI')">
<xsl:call-template name="singleArea"><xsl:with-param name="area">CHI</xsl:with-param></xsl:call-template>
</xsl:if>
<xsl:if test="contains($areas, 'DFW')">
<xsl:call-template name="singleArea"><xsl:with-param name="area">DFW</xsl:with-param></xsl:call-template>
</xsl:if>
<xsl:if test="contains($areas, 'BOS')">
<xsl:call-template name="singleArea"><xsl:with-param name="area">BOS</xsl:with-param></xsl:call-template>
</xsl:if>
<xsl:if test="contains($areas, 'MIA')">
<xsl:call-template name="singleArea"><xsl:with-param name="area">MIA</xsl:with-param></xsl:call-template>
</xsl:if>
</xsl:template>
<xsl:template name="singleArea">
<xsl:param name="area"/>
<xsl:if test="contains($categories, 'SIERRA')">
<xsl:call-template name="sierra"><xsl:with-param name="area" select="$area"/></xsl:call-template>
</xsl:if>
<xsl:if test="contains($categories, 'TANGO')">
<xsl:call-template name="tango"><xsl:with-param name="area" select="$area"/></xsl:call-template>
</xsl:if>
<xsl:if test="contains($categories, 'ZULU')">
<xsl:call-template name="zulu"><xsl:with-param name="area" select="$area"/></xsl:call-template>
</xsl:if>
</xsl:template>
</xsl:stylesheet>

View file

@ -0,0 +1,22 @@
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml" version="1.0" encoding="iso-8859-1" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="bulletin">
<xsl:for-each select="productValidTime">
<xsl:copy-of select="."/>
</xsl:for-each>
<xsl:for-each select="gfaObject[@type='IFR']">
<xsl:copy-of select="."/>
</xsl:for-each>
<xsl:for-each select="gfaObject[@type='MT_OBSC']">
<xsl:copy-of select="."/>
</xsl:for-each>
</xsl:template>
<xsl:template match="/">
<gfaInfo>
<bulletin type="SIERRA">
<xsl:apply-templates/>
</bulletin>
</gfaInfo>
</xsl:template>
</xsl:stylesheet>

View file

@ -0,0 +1,29 @@
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml" version="1.0" encoding="iso-8859-1" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="bulletin">
<xsl:for-each select="productValidTime">
<xsl:copy-of select="."/>
</xsl:for-each>
<xsl:for-each select="gfaObject[@type='TURB-HI']">
<xsl:copy-of select="."/>
</xsl:for-each>
<xsl:for-each select="gfaObject[@type='TURB-LO']">
<xsl:copy-of select="."/>
</xsl:for-each>
<xsl:for-each select="gfaObject[@type='SFC_WND']">
<xsl:copy-of select="."/>
</xsl:for-each>
<xsl:for-each select="gfaObject[@type='LLWS']">
<xsl:copy-of select="."/>
</xsl:for-each>
</xsl:template>
<xsl:template match="/">
<gfaInfo>
<bulletin type="TANGO">
<xsl:apply-templates/>
</bulletin>
</gfaInfo>
</xsl:template>
</xsl:stylesheet>

View file

@ -0,0 +1,25 @@
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml" version="1.0" encoding="iso-8859-1" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="bulletin">
<xsl:for-each select="productValidTime">
<xsl:copy-of select="."/>
</xsl:for-each>
<xsl:for-each select="gfaObject[@type='ICE']">
<xsl:copy-of select="."/>
</xsl:for-each>
<xsl:for-each select="gfaObject[@type='FZLVL']">
<xsl:copy-of select="."/>
</xsl:for-each>
<xsl:for-each select="gfaObject[@type='M_FZLVL']">
<xsl:copy-of select="."/>
</xsl:for-each>
</xsl:template>
<xsl:template match="/">
<gfaInfo>
<bulletin type="ZULU">
<xsl:apply-templates/>
</bulletin>
</gfaInfo>
</xsl:template>
</xsl:stylesheet>

View file

@ -0,0 +1,128 @@
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="text"/>
<!--
indent.xsl
This is an xsl template document. It is used to output an xml document
that conforms to the indent.xsd schema, and outputs it as text. The
text is left justified or indented from the left according to each
line element's indent attribute. Indentation can be from 1 to 20 spaces.
If any line element has no indent attribute, or if the indent
attribute exceeds 20, then the line will output as fully left justified
(0 space indentation).
This is designed to be the second stage in a 2 stage output process.
Xslt is great at parsing a document and converting it to xml or xslt.
But text output, particularly if individual spacing is important, is
problematic. It's easier if stage 1 processing builds the line by line
content and the second stage worries about text formating.
Change Log
E. Safford/SAIC 03/05 initial coding
-->
<xsl:template match="/">
<xsl:for-each select="//line">
<xsl:variable name="myline" select="."/>
<xsl:variable name="space" select="@indent"/>
<xsl:choose>
<xsl:when test="$space = 0">
<xsl:value-of select="$myline"/><xsl:text>
</xsl:text>
</xsl:when>
<xsl:when test="$space = 1">
<xsl:text> </xsl:text><xsl:value-of select="$myline"/><xsl:text>
</xsl:text>
</xsl:when>
<xsl:when test="$space = 2">
<xsl:text> </xsl:text><xsl:value-of select="$myline"/><xsl:text>
</xsl:text>
</xsl:when>
<xsl:when test="$space = 3">
<xsl:text> </xsl:text><xsl:value-of select="$myline"/><xsl:text>
</xsl:text>
</xsl:when>
<xsl:when test="$space = 4">
<xsl:text> </xsl:text><xsl:value-of select="$myline"/><xsl:text>
</xsl:text>
</xsl:when>
<xsl:when test="$space = 5">
<xsl:text> </xsl:text><xsl:value-of select="$myline"/><xsl:text>
</xsl:text>
</xsl:when>
<xsl:when test="$space = 6">
<xsl:text> </xsl:text><xsl:value-of select="$myline"/><xsl:text>
</xsl:text>
</xsl:when>
<xsl:when test="$space = 7">
<xsl:text> </xsl:text><xsl:value-of select="$myline"/><xsl:text>
</xsl:text>
</xsl:when>
<xsl:when test="$space = 8">
<xsl:text> </xsl:text><xsl:value-of select="$myline"/><xsl:text>
</xsl:text>
</xsl:when>
<xsl:when test="$space = 9">
<xsl:text> </xsl:text><xsl:value-of select="$myline"/><xsl:text>
</xsl:text>
</xsl:when>
<xsl:when test="$space = 10">
<xsl:text> </xsl:text><xsl:value-of select="$myline"/><xsl:text>
</xsl:text>
</xsl:when>
<xsl:when test="$space = 11">
<xsl:text> </xsl:text><xsl:value-of select="$myline"/><xsl:text>
</xsl:text>
</xsl:when>
<xsl:when test="$space = 12">
<xsl:text> </xsl:text><xsl:value-of select="$myline"/><xsl:text>
</xsl:text>
</xsl:when>
<xsl:when test="$space = 13">
<xsl:text> </xsl:text><xsl:value-of select="$myline"/><xsl:text>
</xsl:text>
</xsl:when>
<xsl:when test="$space = 14">
<xsl:text> </xsl:text><xsl:value-of select="$myline"/><xsl:text>
</xsl:text>
</xsl:when>
<xsl:when test="$space = 15">
<xsl:text> </xsl:text><xsl:value-of select="$myline"/><xsl:text>
</xsl:text>
</xsl:when>
<xsl:when test="$space = 16">
<xsl:text> </xsl:text><xsl:value-of select="$myline"/><xsl:text>
</xsl:text>
</xsl:when>
<xsl:when test="$space = 17">
<xsl:text> </xsl:text><xsl:value-of select="$myline"/><xsl:text>
</xsl:text>
</xsl:when>
<xsl:when test="$space = 18">
<xsl:text> </xsl:text><xsl:value-of select="$myline"/><xsl:text>
</xsl:text>
</xsl:when>
<xsl:when test="$space = 19">
<xsl:text> </xsl:text><xsl:value-of select="$myline"/><xsl:text>
</xsl:text>
</xsl:when>
<xsl:when test="$space = 20">
<xsl:text> </xsl:text><xsl:value-of select="$myline"/><xsl:text>
</xsl:text>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$myline"/><xsl:text>
</xsl:text>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>

View file

@ -0,0 +1,58 @@
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<!--
MakeConditionsStatement
Output any of the possible conditions for a smear or outlook. Both smears and
outlooks can have a "conditions developing" statement and either a "conditions
continuing" or a "conditions ending" statement.
Change Log
====== ===
E. Safford/SAIC 04/06 initial coding
E. Safford/SAIC 06/06 terminate each conditions statement with a period
-->
<xsl:template name="MakeConditionsStatement">
<xsl:param name="isSmear">1</xsl:param>
<xsl:param name="fromCondsDvlpg"/>
<xsl:param name="fromCondsEndg"/>
<xsl:param name="condsContg"/>
<xsl:param name="otlkCondsDvlpg"/>
<xsl:param name="otlkCondsEndg"/>
<xsl:choose>
<xsl:when test="contains( $isSmear, '1') "> <!-- process smears -->
<xsl:if test="string-length( $fromCondsDvlpg) > 1 ">
<xsl:text> </xsl:text><xsl:value-of select="$fromCondsDvlpg"/><xsl:text>.</xsl:text>
</xsl:if>
<xsl:if test="string-length( $condsContg ) > 1">
<xsl:text> </xsl:text><xsl:value-of select="$condsContg"/><xsl:text>.</xsl:text>
</xsl:if>
<xsl:if test="string-length( $fromCondsEndg ) > 1 and not( string-length( $condsContg ) > 1 )">
<xsl:text> </xsl:text><xsl:value-of select="$fromCondsEndg"/><xsl:text>.</xsl:text>
</xsl:if>
</xsl:when>
<xsl:otherwise> <!-- process outlooks -->
<xsl:if test="string-length( $otlkCondsDvlpg ) > 1">
<xsl:text> </xsl:text><xsl:value-of select="$otlkCondsDvlpg"/><xsl:text>.</xsl:text>
</xsl:if>
<xsl:if test="string-length( $condsContg ) > 1">
<xsl:text> </xsl:text><xsl:value-of select="$condsContg"/><xsl:text>.</xsl:text>
</xsl:if>
<xsl:if test="string-length( $otlkCondsEndg ) > 1 and not( string-length( $condsContg ) > 1 )">
<xsl:text> </xsl:text><xsl:value-of select="$otlkCondsEndg"/><xsl:text>.</xsl:text>
</xsl:if>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>

View file

@ -0,0 +1,74 @@
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<!--
GetFlightLevel
This template returns a flight level properly prefixed with "FL" if the level is >= 180.
Change Log
====== ===
E. Safford/SAIC 01/06 initial coding
E. Safford/SAIC 02/06 make "000" -> "SFC"
-->
<xsl:template name="GetFlightLevel">
<xsl:param name="flightLevel"/>
<xsl:param name="useFL">1</xsl:param>
<xsl:if test="number($flightLevel) >= number('180') ">
<xsl:if test="number( $useFL ) = number( '1' )">
<xsl:text>FL</xsl:text>
</xsl:if>
</xsl:if>
<xsl:choose>
<xsl:when test="number($flightLevel) = number('0') ">
<xsl:text>SFC</xsl:text>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$flightLevel"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<!--
MakeFlightLevel
This template returns a flight level statement for Turb and Ice hazards.
Change Log
====== ===
E. Safford/SAIC 01/06 initial coding
E. Safford/SAIC 02/06 use FLbase on check for 'SFC' and 'FZL'
-->
<xsl:template name="MakeFlightLevel">
<xsl:param name="base">Missing Base</xsl:param>
<xsl:param name="top">Missing Top</xsl:param>
<xsl:variable name="FLbase">
<xsl:call-template name="GetFlightLevel">
<xsl:with-param name="flightLevel" select="$base"/>
</xsl:call-template>
</xsl:variable>
<xsl:variable name="FLtop">
<xsl:call-template name="GetFlightLevel">
<xsl:with-param name="flightLevel" select="$top"/>
</xsl:call-template>
</xsl:variable>
<xsl:choose>
<xsl:when test="contains($FLbase, 'FZL')">
<xsl:text>BTN FRZLVL AND </xsl:text><xsl:value-of select="$FLtop"/>
</xsl:when>
<xsl:when test="contains($FLbase, 'SFC')">
<xsl:text>BLW </xsl:text><xsl:value-of select="$FLtop"/>
</xsl:when>
<xsl:otherwise>
<xsl:text>BTN </xsl:text><xsl:value-of select="$FLbase"/><xsl:text> AND </xsl:text><xsl:value-of select="$FLtop"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>

View file

@ -0,0 +1,28 @@
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml"/>
<!--
NoHazardReport
This template produces an AIRMET report when there are no
hazards for the specified FA Area. The template can conditionally omit the footer
portion of the report (default is to include it).
Change Log
====== ===
E. Safford/SAIC 10/05 initial coding
E. Safford/SAIC 10/05 rm header & footer creation, rm unused params
-->
<xsl:template name="NoHazardReport">
<xsl:param name="expectedHazard">(missing expectedHazard)</xsl:param>
<xsl:element name="line">.</xsl:element>
<xsl:element name="line">
<xsl:value-of select="$newline"/>NO SGFNT <xsl:value-of select="$expectedHazard"/> EXP OUTSIDE OF CNVTV ACT.</xsl:element>
</xsl:template>
</xsl:stylesheet>

View file

@ -0,0 +1,23 @@
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml"/>
<!--
OkToUse
This template screens out a list of unwanted phrases from the airmet bulletins.
Change Log
====== ===
E. Safford/SAIC 10/05 initial coding
-->
<xsl:template name="OkToUse">
<xsl:param name="test"/>
<xsl:if test="string-length($test) > 1">
<xsl:if test="not(contains($test, 'No Qualifier'))"><xsl:value-of select="$test"/></xsl:if>
</xsl:if>
</xsl:template>
</xsl:stylesheet>

View file

@ -0,0 +1,22 @@
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml"/>
<!--
OutputFooter
This template produces the two footer lines for an an AIRMET bulletin.
Change Log
====== ===
E. Safford/SAIC 10/05 initial coding
-->
<xsl:template name="OutputFooter">
<xsl:element name="line"><xsl:value-of select="$newline" />....</xsl:element>
<xsl:element name="line"><xsl:value-of select="$newline" />NNNN</xsl:element>
<xsl:value-of select="$newline"/>
<xsl:value-of select="$newline"/>
</xsl:template>
</xsl:stylesheet>

View file

@ -0,0 +1,31 @@
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml"/>
<!--
OutputHeader
This template produces the three header lines for an an AIRMET bulletin.
Change Log
====== ===
E. Safford/SAIC 10/05 initial coding
-->
<xsl:template name="OutputHeader">
<xsl:param name="report">(missing report)</xsl:param>
<xsl:param name="hazard">(missing hazard)</xsl:param>
<xsl:param name="untilTime">(missing untilTime)</xsl:param>
<xsl:param name="faArea">(missing faArea)</xsl:param>
<xsl:param name="issueTime">(missing issueTime)</xsl:param>
<xsl:param name="amend"/>
<xsl:element name="line">
<xsl:value-of select="$faArea"/><xsl:value-of select="substring($report, 1, 1)"/> WA <xsl:value-of select="$issueTime"/>
<xsl:if test="string-length($amend) > 1"><xsl:text> </xsl:text><xsl:value-of select="$amend"/></xsl:if>
</xsl:element>
<xsl:value-of select="$newline"/>
<xsl:element name="line">AIRMET <xsl:value-of select="$report"/> FOR <xsl:value-of select="$hazard"/> VALID UNTIL <xsl:value-of select="$untilTime"/></xsl:element>
</xsl:template>
</xsl:stylesheet>

View file

@ -0,0 +1,161 @@
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:import href="get_attention_line.xsl"/>
<xsl:import href="get_update.xsl"/>
<!--
OutputOutlookHdr
This template outputs the header line (1st line) of the outlook portion of an airmet bulletin.
Change Log
====== ===
E. Safford/SAIC 11/05 initial coding
E. Safford/SAIC 02/06 fix hazard to reference param
E. Safford/SAIC 03/06 correct state list reference
E. Safford/SAIC 06/06 add updateFlag (AMD or COR) to first line of outlook
B. Yin/SAIC 03/08 add updateFlag only if there is one outlook
if there are more than one, don't add in the header
-->
<xsl:template name="OutputOutlookHdr">
<xsl:param name="outlookStart"/>
<xsl:param name="outlookEnd"/>
<xsl:param name="totalOutlooks">1</xsl:param>
<xsl:param name="hazard"/>
<xsl:param name="stateList"/>
<xsl:variable name="updateFlag">
<xsl:call-template name="GetUpdate">
<xsl:with-param name="status"><xsl:value-of select="@issueType"/></xsl:with-param>
</xsl:call-template>
</xsl:variable>
<xsl:element name="line">
<xsl:value-of select="$newline"/><xsl:text>.</xsl:text></xsl:element>
<xsl:element name="line">
<xsl:value-of select="$newline"/>
<xsl:text>OTLK VALID </xsl:text>
<xsl:if test="string-length($outlookStart) > 1"><xsl:value-of select="substring($outlookStart, 3, 4)"/></xsl:if>
<xsl:text>-</xsl:text>
<xsl:if test="string-length($outlookEnd) > 1"><xsl:value-of select="substring($outlookEnd, 3, 4)"/></xsl:if>
<xsl:text>Z</xsl:text>
<xsl:if test="number($totalOutlooks) = number( 1 )">
<xsl:text>...</xsl:text><xsl:value-of select="normalize-space($hazard)"/><xsl:text> </xsl:text> <xsl:value-of select="normalize-space($stateList)"/>
<xsl:if test="number( string-length($updateFlag) ) > number( '1' )">
<xsl:value-of select="normalize-space($updateFlag)"/>
</xsl:if>
</xsl:if>
</xsl:element>
</xsl:template>
<!--
OutputOutlook
This template outputs an individual outlook paragraph.
Change Log
====== ===
E. Safford/SAIC 11/05 initial coding
E. Safford/SAIC 01/06 add stateList param, reposition Bounded By line
E. Safford/SAIC 02/06 reposition elipse before hazard, param change for OutputOutlookHdr
E. Safford/SAIC 02/06 generalize DUE_TO into freqSevStatement param
B. Yin/SAIC 07/07 add tag number
B. Yin/SAIC 03/08 add updateFlag in each outlook if there are more
than one outlooks
-->
<xsl:template name="OutputOutlook">
<xsl:param name="outlookStart">missing outlook start</xsl:param>
<xsl:param name="outlookEnd">missing outlook end</xsl:param>
<xsl:param name="hazard">missing hazard</xsl:param>
<xsl:param name="stateList">missing state list</xsl:param>
<xsl:param name="outlookNumber">1</xsl:param>
<xsl:param name="totalOutlooks">1</xsl:param>
<xsl:param name="boundedBy">missing bounded by</xsl:param>
<xsl:param name="expectedHazard"></xsl:param>
<xsl:param name="freqSevStatement"></xsl:param>
<!-- Put the header on the outlooks if this is the first/only outlook. -->
<xsl:if test="number($outlookNumber) = number( 1 )">
<xsl:call-template name="OutputOutlookHdr">
<xsl:with-param name="outlookStart" select="$outlookStart"/>
<xsl:with-param name="outlookEnd" select="$outlookEnd"/>
<xsl:with-param name="totalOutlooks" select="$totalOutlooks"/>
<xsl:with-param name="hazard" select="$hazard"/>
<xsl:with-param name="stateList" select="$stateList"/>
</xsl:call-template>
</xsl:if>
<xsl:variable name="updateFlag">
<xsl:call-template name="GetUpdate">
<xsl:with-param name="status"><xsl:value-of select="@issueType"/></xsl:with-param>
</xsl:call-template>
</xsl:variable>
<xsl:variable name="status"><xsl:value-of select="@issueType"/></xsl:variable>
<!--
For a multi-outlook report indicate the area number then hazard and state list.
For single outlook reports this information is combined with the header line.
See OutputOutlookHdr above.
-->
<xsl:if test="$totalOutlooks > 1">
<xsl:element name="line">
<xsl:value-of select="$newline"/>
<xsl:text>AREA </xsl:text><xsl:value-of select="$outlookNumber"/><xsl:text>...</xsl:text>
<xsl:value-of select="$hazard"/><xsl:text> </xsl:text><xsl:value-of select="normalize-space($stateList)"/>
<xsl:if test="number( string-length($updateFlag) ) > number( '1' )">
<xsl:value-of select="normalize-space($updateFlag)"/>
</xsl:if>
</xsl:element>
</xsl:if>
<xsl:element name="line"> <xsl:value-of select="$newline"/>
<xsl:text>BOUNDED BY </xsl:text><xsl:value-of select="normalize-space($boundedBy)"/>
</xsl:element>
<xsl:if test="string-length( $expectedHazard ) > 1">
<xsl:element name="line">
<xsl:value-of select="$newline"/>
<xsl:value-of select="normalize-space($expectedHazard)"/><xsl:text>.</xsl:text>
</xsl:element>
</xsl:if>
<xsl:variable name="airTag"><xsl:value-of select="concat(@tag,@desk)"/></xsl:variable>
<xsl:if test="not( contains( @issueType, 'CAN' )) and string-length( $freqSevStatement ) > 1">
<xsl:element name="line">
<xsl:value-of select="$newline"/>
<xsl:value-of select="normalize-space($freqSevStatement)"/><xsl:if test="string-length($airTag) > 1"><xsl:text> </xsl:text><xsl:value-of select="normalize-space($airTag)"/>.</xsl:if>
</xsl:element>
</xsl:if>
<xsl:if test="contains( @issueType, 'CAN' ) or not(string-length($freqSevStatement) > 1)">
<xsl:if test="string-length($airTag) > 1">
<xsl:element name="line">
<xsl:value-of select="$newline"/><xsl:value-of select="normalize-space($airTag)"/>.</xsl:element>
</xsl:if>
</xsl:if>
<!-- Add the attention line(s) -->
<xsl:call-template name="GetAttentionLine">
<xsl:with-param name="status"><xsl:value-of select="@issueType"/></xsl:with-param>
<xsl:with-param name="airmet_outlook">OUTLOOK</xsl:with-param>
</xsl:call-template>
<xsl:if test="not($totalOutlooks = $outlookNumber)">
<xsl:value-of select="$newline"/>
<xsl:element name="line"><xsl:attribute name="indent">0</xsl:attribute><xsl:text>.</xsl:text></xsl:element>
</xsl:if>
</xsl:template>
</xsl:stylesheet>

View file

@ -0,0 +1,7 @@
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml" version="1.0" encoding="iso-8859-1" indent="yes"/>
<xsl:template match="/">
<xsl:copy-of select="."/>
</xsl:template>
</xsl:stylesheet>

View file

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method = "text"/>
<xsl:template match="/">
<xsl:for-each select="message/body/responses">
<xsl:value-of select="contents"/>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>

View file

@ -0,0 +1,30 @@
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<!--
SetHazardName
This template outputs the correct hazard name for the Airmet bulletin.
It takes as input the hazard from one smear and outputs the correct
hazard name.
Change Log
====== ===
E. Safford/SAIC 11/05 initial coding
-->
<xsl:template name="SetHazardName">
<xsl:param name="hazard"/>
<xsl:choose>
<xsl:when test="contains($hazard, 'TURB')">TURB</xsl:when>
<xsl:when test="contains($hazard, 'SFC_WND')">STG SFC WNDS</xsl:when>
<xsl:when test="contains($hazard, 'LLWS')">LLWS</xsl:when>
<xsl:when test="contains($hazard, 'IFR')">IFR</xsl:when>
<xsl:when test="contains($hazard, 'MT_OBSC')">MTN OBSCN</xsl:when>
<xsl:when test="contains($hazard, 'ICE')">ICE</xsl:when>
<xsl:when test="contains($hazard, 'FZLVL')">FRZLVL</xsl:when>
<xsl:when test="contains($hazard, 'M_FZLVL')">MULT FRZLVL</xsl:when>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>

View file

@ -0,0 +1,404 @@
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:import href="no_hazard_report.xsl"/>
<xsl:import href="get_status.xsl"/>
<xsl:import href="get_update.xsl"/>
<xsl:import href="get_attention_line.xsl"/>
<xsl:import href="output_header.xsl"/>
<xsl:import href="output_footer.xsl"/>
<xsl:import href="ok_to_use.xsl"/>
<xsl:import href="output_outlook.xsl"/>
<xsl:import href="set_hazard_name.xsl"/>
<xsl:import href="make_conditions.xsl"/>
<xsl:output method="text"/>
<xsl:variable name="newline">
<xsl:text>
</xsl:text>
</xsl:variable>
<xsl:template name="sierra">
<!-- Single area here -->
<xsl:param name="area"/>
<xsl:variable name="numSmearIFR" select="count(//Gfa[@hazard='IFR' and contains(@fcstHr,'-') and contains(@area, $area)])"/>
<xsl:variable name="numSmearMT_OBSC" select="count(//Gfa[@hazard='MT_OBSC' and contains(@fcstHr,'-') and contains(@area, $area)])"/>
<xsl:variable name="numSmears" select="$numSmearIFR + $numSmearMT_OBSC"/>
<xsl:variable name="numOutlookIFR" select="count(//Gfa[@hazard='IFR' and @isOutlook='true'])" />
<xsl:variable name="numOutlookMT_OBSC" select="count(//Gfa[@hazard='MT_OBSC' and @isOutlook='true'])" />
<xsl:variable name="numOutlooks" select="$numOutlookIFR + $numOutlookMT_OBSC" />
<xsl:variable name="hazardTest">
<xsl:call-template name="GetHazards"/>
</xsl:variable>
<xsl:variable name="untilTime">
<xsl:call-template name="GetUntilTimeS"/>
</xsl:variable>
<xsl:variable name="issueTime">
<xsl:call-template name="GetIssueTimeS"/>
</xsl:variable>
<xsl:variable name="hazards">
<xsl:call-template name="SetHazardsS">
<xsl:with-param name="hazardList" select="$hazardTest"/>
</xsl:call-template>
</xsl:variable>
<xsl:variable name="amdTest">
<xsl:call-template name="GetStatus">
<xsl:with-param name="haz1">IFR</xsl:with-param>
<xsl:with-param name="haz2">MT_OBSC</xsl:with-param>
</xsl:call-template>
</xsl:variable>
<xsl:variable name="AMD">
<xsl:call-template name="SetStatus">
<xsl:with-param name="amdTest" select="$amdTest"/>
</xsl:call-template>
</xsl:variable>
<xsl:call-template name="OutputHeader">
<xsl:with-param name="report">SIERRA</xsl:with-param>
<xsl:with-param name="hazard" select="$hazards"/>
<xsl:with-param name="untilTime" select="$untilTime"/>
<xsl:with-param name="faArea" select="$area" />
<xsl:with-param name="issueTime" select="$issueTime" />
<xsl:with-param name="amend" select="$AMD"/>
</xsl:call-template>
<!-- If no IFR hazards, output no IFR report -->
<xsl:if test="not($numSmearIFR > 0)">
<xsl:value-of select="$newline"/>
<xsl:call-template name="NoHazardReport">
<xsl:with-param name="expectedHazard">IFR</xsl:with-param>
</xsl:call-template>
</xsl:if>
<!-- If any hazards, output all -->
<xsl:if test="($numSmearIFR > 0) or ($numSmearMT_OBSC > 0)">
<xsl:call-template name="SierraAirmet">
<xsl:with-param name="faArea" select="@area"/>
<xsl:with-param name="issueTime" select="$issueTime"/>
<xsl:with-param name="untilTime" select="$untilTime"/>
</xsl:call-template>
</xsl:if>
<!-- output any outlooks -->
<xsl:if test="$numOutlooks > 0">
<xsl:call-template name="SierraOutlook">
<xsl:with-param name="outlookStart" select="$untilTime" />
<xsl:with-param name="outlookEnd" select="$untilTime" />
<xsl:with-param name="numIFR" select="$numOutlookIFR" />
<xsl:with-param name="numMT_OBSC" select="$numOutlookMT_OBSC" />
</xsl:call-template>
</xsl:if>
<!-- add bulletin footer -->
<xsl:call-template name="OutputFooter"/>
</xsl:template>
<xsl:template name="SierraAirmet">
<xsl:param name="faArea">{faArea}</xsl:param>
<xsl:param name="issueTime">{issueTime}</xsl:param>
<xsl:param name="untilTime">{untilTime}</xsl:param>
<xsl:variable name="amdTest">
<xsl:call-template name="GetStatus">
<xsl:with-param name="haz1">IFR</xsl:with-param>
<xsl:with-param name="haz2">MT_OBSC</xsl:with-param>
</xsl:call-template>
</xsl:variable>
<xsl:variable name="AMD">
<xsl:call-template name="SetStatus">
<xsl:with-param name="amdTest" select="$amdTest" />
</xsl:call-template>
</xsl:variable>
<xsl:variable name="hazardTest">
<xsl:call-template name="GetHazards" />
</xsl:variable>
<xsl:variable name="hazards">
<xsl:call-template name="SetHazardsS">
<xsl:with-param name="hazardList" select="$hazardTest"/>
</xsl:call-template>
</xsl:variable>
<!-- output Sierra Airmet paragraphs -->
<xsl:call-template name="OutputSierra">
<xsl:with-param name="hazType">IFR</xsl:with-param>
<xsl:with-param name="faArea" select="$faArea"/>
</xsl:call-template>
<xsl:call-template name="OutputSierra">
<xsl:with-param name="hazType">MT_OBSC</xsl:with-param>
<xsl:with-param name="faArea" select="$faArea"/>
</xsl:call-template>
</xsl:template>
<xsl:template name="GetHazards">
<xsl:for-each select="//Gfa">
<xsl:value-of select="@hazard"/>
</xsl:for-each>
</xsl:template>
<xsl:template name="GetUntilTimeS">
<xsl:variable name="temp">
<xsl:for-each select="//Gfa[(@hazard='IFR' or @hazard='MT_OBSC') and contains(@fcstHr,'-')][last()]">
<xsl:value-of select="@untilTime"/>
</xsl:for-each>
</xsl:variable>
<xsl:value-of select="$temp"/>
</xsl:template>
<xsl:template name="GetIssueTimeS">
<xsl:variable name="temp">
<xsl:for-each select="//Gfa[(@hazard='IFR' or @hazard='MT_OBSC') and contains(@fcstHr,'-')][last()]">
<xsl:value-of select="@issueTime"/>
</xsl:for-each>
</xsl:variable>
<xsl:value-of select="$temp"/>
</xsl:template>
<xsl:template name="SetHazardsS">
<xsl:param name="hazardList"/>
<xsl:choose>
<xsl:when test="contains($hazardList, 'MT_OBSC')">IFR AND MTN OBSCN</xsl:when>
<xsl:otherwise>IFR</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template name="OutputSierra">
<xsl:param name="hazType"/>
<xsl:param name="faArea"/>
<xsl:for-each select="//Gfa[@hazard = $hazType and contains(@fcstHr,'-') and @isOutlook='false' and contains(@area, $faArea)]">
<xsl:variable name="hazardName">
<xsl:call-template name="SetHazardName">
<xsl:with-param name="hazard" select="$hazType"/>
</xsl:call-template>
</xsl:variable>
<xsl:variable name="condStatement">
<xsl:call-template name="MakeConditionsStatement">
<xsl:with-param name="isSmear">1</xsl:with-param>
<xsl:with-param name="fromCondsDvlpg"><xsl:value-of select="@fromCondsDvlpg"/></xsl:with-param>
<xsl:with-param name="fromCondsEndg"><xsl:value-of select="@fromCondsEndg"/></xsl:with-param>
<xsl:with-param name="condsContg"><xsl:value-of select="@condsContg"/></xsl:with-param>
<xsl:with-param name="otlkCondsDvlpg"><xsl:value-of select="@otlkCondsDvlpg"/></xsl:with-param>
<xsl:with-param name="otlkCondsEndg"><xsl:value-of select="@otlkCondsEndg"/></xsl:with-param>
</xsl:call-template>
</xsl:variable>
<xsl:variable name="freqSevStatement">
<xsl:call-template name="GetFreqStatement">
<xsl:with-param name="frequency"><xsl:value-of select="@frequency"/></xsl:with-param>
<xsl:with-param name="hazard" select="@hazard"/>
<xsl:with-param name="topBottom"><xsl:value-of select="@topBottom"/></xsl:with-param>
<xsl:with-param name="dueTo"><xsl:value-of select="@type"/></xsl:with-param>
<xsl:with-param name="conditions"><xsl:value-of select="$condStatement"/></xsl:with-param>
</xsl:call-template>
</xsl:variable>
<xsl:variable name="updateFlag">
<xsl:call-template name="GetUpdate">
<xsl:with-param name="status"><xsl:value-of select="@issueType"/></xsl:with-param>
</xsl:call-template>
</xsl:variable>
<xsl:value-of select="$newline"/>
<xsl:text>.</xsl:text>
<!-- Hazard statement, state list, and update flag -->
<xsl:element name="line">
<xsl:value-of select="$newline"/>AIRMET <xsl:value-of select="$hazardName"/>...<xsl:value-of select="@states"/>
<xsl:if test="number( string-length($updateFlag) ) > number( '1' )">
<xsl:value-of select="normalize-space($updateFlag)"/>
</xsl:if>
</xsl:element>
<!-- From line -->
<xsl:element name="line">
<xsl:value-of select="$newline"/>FROM <xsl:value-of select="normalize-space(@textVor)"/></xsl:element>
<xsl:variable name="airTag"><xsl:value-of select="concat(@tag,@desk)"/></xsl:variable>
<!-- Frequency & Severity line -->
<xsl:if test="not( contains(@issueType, 'CAN' )) and string-length($freqSevStatement) > 1">
<xsl:element name="line">
<xsl:value-of select="$newline"/><xsl:value-of select="normalize-space($freqSevStatement)"/><xsl:if test="string-length($airTag) > 1"><xsl:text> </xsl:text><xsl:value-of select="normalize-space($airTag)"/>.</xsl:if></xsl:element>
</xsl:if>
<!-- Add the attention line(s) -->
<xsl:call-template name="GetAttentionLine">
<xsl:with-param name="status"><xsl:value-of select="@issueType"/></xsl:with-param>
</xsl:call-template>
</xsl:for-each>
</xsl:template>
<xsl:template name="GetFreqStatement">
<xsl:param name="frequency"/>
<xsl:param name="severity"/>
<xsl:param name="hazard"/>
<xsl:param name="topBottom"/>
<xsl:param name="dueTo"/>
<xsl:param name="conditions"/>
<xsl:if test="string-length($frequency) >1 or
string-length($topBottom) > 1 or
string-length($dueTo) > 1" >
<xsl:if test="string-length($frequency) >1">
<xsl:variable name="validFrequency">
<xsl:call-template name="OkToUse">
<xsl:with-param name="test" select="$frequency"/>
</xsl:call-template>
</xsl:variable>
<xsl:if test="string-length($validFrequency) > 1">
<xsl:value-of select="normalize-space($validFrequency)"/>
</xsl:if>
</xsl:if>
<xsl:if test="string-length($topBottom) > 1">
<xsl:text> </xsl:text>
<xsl:value-of select="normalize-space($topBottom)"/>
</xsl:if>
<xsl:if test="string-length($dueTo) > 1">
<xsl:text> </xsl:text>
<xsl:value-of select="normalize-space($dueTo)"/>
</xsl:if>
<xsl:text>.</xsl:text>
</xsl:if>
<xsl:if test="string-length( $conditions ) > 1">
<xsl:text> </xsl:text><xsl:value-of select="normalize-space($conditions)"/>
</xsl:if>
</xsl:template>
<!--
SierraOutlook
This template outputs the Sierra Outlooks in the proper order of IFR then MT_OBSC.
Change Log
====== ===
E. Safford/SAIC 11/05 initial coding
E. Safford/SAIC 01/06 add stateList param to OutputOutlook
E. Safford/SAIC 02/06 add outlookStart/End to OutputOutlook
E. Safford/SAIC 02/06 fix state list in MT_OBSC outlook
E. Safford/SAIC 02/06 fix MT_OBSC hazard name
E. Safford/SAIC 04/06 use MakeConditionsStatement
-->
<xsl:template name="SierraOutlook">
<xsl:param name="outlookStart"></xsl:param>
<xsl:param name="outlookEnd"></xsl:param>
<xsl:param name="numIFR">0</xsl:param>
<xsl:param name="numMT_OBSC">0</xsl:param>
<xsl:variable name="numOutlooks"><xsl:value-of select="number($numIFR + $numMT_OBSC)"/></xsl:variable>
<xsl:for-each select="//Gfa[@hazard='IFR' and @isOutlook='true']">
<xsl:variable name="hazardName">
<xsl:call-template name="SetHazardName">
<xsl:with-param name="hazard"><xsl:value-of select="@hazard"/></xsl:with-param>
</xsl:call-template>
</xsl:variable>
<xsl:variable name="condStatement">
<xsl:call-template name="MakeConditionsStatement">
<xsl:with-param name="isSmear">0</xsl:with-param>
<xsl:with-param name="fromCondsDvlpg"><xsl:value-of select="@fromCondsDvlpg"/></xsl:with-param>
<xsl:with-param name="fromCondsEndg"><xsl:value-of select="@fromCondsEndg"/></xsl:with-param>
<xsl:with-param name="condsContg"><xsl:value-of select="@condsContg"/></xsl:with-param>
<xsl:with-param name="otlkCondsDvlpg"><xsl:value-of select="@otlkCondsDvlpg"/></xsl:with-param>
<xsl:with-param name="otlkCondsEndg"><xsl:value-of select="@otlkCondsEndg"/></xsl:with-param>
</xsl:call-template>
</xsl:variable>
<xsl:variable name="freqSevStatement">
<xsl:call-template name="GetFreqStatement">
<xsl:with-param name="frequency"><xsl:value-of select="@frequency"/></xsl:with-param>
<xsl:with-param name="hazard" select="@hazard"/>
<xsl:with-param name="topBottom"><xsl:value-of select="@topBottom"/></xsl:with-param>
<xsl:with-param name="dueTo"><xsl:value-of select="@type"/></xsl:with-param>
<xsl:with-param name="conditions"><xsl:value-of select="$condStatement"/></xsl:with-param>
</xsl:call-template>
</xsl:variable>
<xsl:call-template name="OutputOutlook">
<xsl:with-param name="outlookStart"><xsl:value-of select="$outlookStart"/></xsl:with-param>
<xsl:with-param name="outlookEnd"><xsl:value-of select="$outlookEnd"/></xsl:with-param>
<xsl:with-param name="hazard" select="$hazardName"/>
<xsl:with-param name="stateList" select="@states"/>
<xsl:with-param name="outlookNumber" select="position()"/>
<xsl:with-param name="totalOutlooks" select="$numOutlooks"/>
<xsl:with-param name="boundedBy" select="@textVor"/>
<xsl:with-param name="freqSevStatement" select="$freqSevStatement"/>
</xsl:call-template>
</xsl:for-each>
<xsl:for-each select="//Gfa[@hazard='MT_OBSC' and @isOutlook='true']">
<xsl:variable name="hazardName">
<xsl:call-template name="SetHazardName">
<xsl:with-param name="hazard"><xsl:value-of select="@hazard"/></xsl:with-param>
</xsl:call-template>
</xsl:variable>
<xsl:variable name="condStatement">
<xsl:call-template name="MakeConditionsStatement">
<xsl:with-param name="isSmear">0</xsl:with-param>
<xsl:with-param name="fromCondsDvlpg"><xsl:value-of select="@fromCondsDvlpg"/></xsl:with-param>
<xsl:with-param name="fromCondsEndg"><xsl:value-of select="@fromCondsEndg"/></xsl:with-param>
<xsl:with-param name="condsContg"><xsl:value-of select="@condsContg"/></xsl:with-param>
<xsl:with-param name="otlkCondsDvlpg"><xsl:value-of select="@otlkCondsDvlpg"/></xsl:with-param>
<xsl:with-param name="otlkCondsEndg"><xsl:value-of select="@otlkCondsEndg"/></xsl:with-param>
</xsl:call-template>
</xsl:variable>
<xsl:variable name="freqSevStatement">
<xsl:call-template name="GetFreqStatement">
<xsl:with-param name="frequency"><xsl:value-of select="@frequency"/></xsl:with-param>
<xsl:with-param name="hazard"><xsl:value-of select="$hazardName"/></xsl:with-param>
<xsl:with-param name="topBottom"><xsl:value-of select="@topBottom"/></xsl:with-param>
<xsl:with-param name="dueTo"><xsl:value-of select="@type"/></xsl:with-param>
<xsl:with-param name="conditions"><xsl:value-of select="$condStatement"/></xsl:with-param>
</xsl:call-template>
</xsl:variable>
<xsl:call-template name="OutputOutlook">
<xsl:with-param name="outlookStart"><xsl:value-of select="$outlookStart"/></xsl:with-param>
<xsl:with-param name="outlookEnd"><xsl:value-of select="$outlookEnd"/></xsl:with-param>
<xsl:with-param name="hazard"><xsl:value-of select="$hazardName"/></xsl:with-param>
<xsl:with-param name="stateList" select="@states"/>
<xsl:with-param name="outlookNumber" select="position()+$numIFR"/>
<xsl:with-param name="totalOutlooks" select="$numOutlooks"/>
<xsl:with-param name="boundedBy" select="@textVor"/>
<xsl:with-param name="freqSevStatement" select="$freqSevStatement"/>
</xsl:call-template>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>

View file

@ -0,0 +1,498 @@
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:import href="no_hazard_report.xsl"/>
<xsl:import href="get_status.xsl"/>
<xsl:import href="get_update.xsl"/>
<xsl:import href="get_attention_line.xsl"/>
<xsl:import href="output_header.xsl"/>
<xsl:import href="output_footer.xsl"/>
<xsl:import href="ok_to_use.xsl"/>
<xsl:import href="output_outlook.xsl"/>
<xsl:import href="set_hazard_name.xsl"/>
<xsl:import href="make_flight_level.xsl"/>
<xsl:import href="make_conditions.xsl"/>
<xsl:output method="text"/>
<xsl:variable name="newline">
<xsl:text>
</xsl:text>
</xsl:variable>
<xsl:template name="tango">
<xsl:param name="area"/>
<xsl:variable name="numSmearTango" select="count(//Gfa[@hazard='TURB' and contains(@fcstHr,'-') and contains(@area, $area)])"/>
<xsl:variable name="numSmearSFC_WND" select="count(//Gfa[@hazard='SFC_WND' and contains(@fcstHr,'-') and contains(@area, $area)])"/>
<xsl:variable name="numSmearLLWS" select="count(//Gfa[@hazard='LLWS' and contains(@fcstHr,'-') and contains(@area, $area)])"/>
<xsl:variable name="numSmears" select="$numSmearTango +$numSmearSFC_WND + $numSmearLLWS"/>
<xsl:variable name="numOutlookTURB" select="count(//Gfa[@hazard='TURB' and @isOutlook='true'])"/>
<xsl:variable name="numOutlookSFC_WND" select="count(//Gfa[@hazard='SFC_WND' and @isOutlook='true'])"/>
<xsl:variable name="numOutlookLLWS" select="count(//Gfa[@hazard='LLWS' and @isOutlook='true'])"/>
<xsl:variable name="numOutlooks" select="$numOutlookTURB + $numOutlookSFC_WND + $numOutlookLLWS"/>
<xsl:variable name="hazardTest">
<xsl:call-template name="GetHazardsT"/>
</xsl:variable>
<xsl:variable name="untilTime">
<xsl:call-template name="GetUntilTimeT"/>
</xsl:variable>
<xsl:variable name="issueTime">
<xsl:call-template name="GetIssueTimeT"/>
</xsl:variable>
<xsl:variable name="hazards">
<xsl:call-template name="SetHazards">
<xsl:with-param name="hazardList" select="$hazardTest"/>
</xsl:call-template>
</xsl:variable>
<xsl:variable name="amdTest">
<xsl:call-template name="GetStatus">
<xsl:with-param name="haz1">TURB</xsl:with-param>
<xsl:with-param name="haz2">SFC_WND</xsl:with-param>
<xsl:with-param name="haz3">LLWS</xsl:with-param>
</xsl:call-template>
</xsl:variable>
<xsl:variable name="AMD">
<xsl:call-template name="SetStatus">
<xsl:with-param name="amdTest" select="$amdTest"/>
</xsl:call-template>
</xsl:variable>
<xsl:call-template name="OutputHeader">
<xsl:with-param name="report">TANGO</xsl:with-param>
<xsl:with-param name="hazard" select="$hazards"/>
<xsl:with-param name="untilTime" select="$untilTime"/>
<xsl:with-param name="faArea" select="$area" />
<xsl:with-param name="issueTime" select="$issueTime" />
<xsl:with-param name="amend" select="$AMD"/>
</xsl:call-template>
<!-- If no TURB hazards, output no TURB report -->
<xsl:if test="not($numSmearTango > 0)">
<xsl:value-of select="$newline"/>
<xsl:call-template name="NoHazardReport">
<xsl:with-param name="expectedHazard">TURB</xsl:with-param>
</xsl:call-template>
</xsl:if>
<!-- If any hazards, output all -->
<xsl:if test="$numSmears > 0">
<xsl:call-template name="TangoAirmet">
<xsl:with-param name="faArea" select="$area"/>
<xsl:with-param name="issueTime" select="$issueTime"/>
<xsl:with-param name="untilTime" select="$untilTime"/>
</xsl:call-template>
</xsl:if>
<!-- output any outlooks -->
<xsl:if test="$numOutlooks > 0">
<xsl:call-template name="TangoOutlook">
<xsl:with-param name="outlookStart" select="$untilTime"/>
<xsl:with-param name="outlookEnd" select="$untilTime"/>
<xsl:with-param name="numTURB" select="$numOutlookTURB"/>
<xsl:with-param name="numSFC_WND" select="$numOutlookSFC_WND"/>
<xsl:with-param name="numLLWS" select="$numOutlookLLWS"/>
<xsl:with-param name="numOutlooks" select="$numOutlooks"/>
</xsl:call-template>
</xsl:if>
<!-- add bulletin footer -->
<xsl:call-template name="OutputFooter"/>
</xsl:template>
<xsl:template name="GetHazardsT">
<xsl:for-each select="//Gfa">
<xsl:value-of select="@hazard"/>
</xsl:for-each>
</xsl:template>
<xsl:template name="SetHazards">
<xsl:param name="hazardList"/>
<xsl:choose>
<xsl:when test="contains($hazardList, 'TURB') and contains($hazardList, 'SFC_WND') and contains( $hazardList, 'LLWS')">TURB STG WNDS AND LLWS</xsl:when>
<xsl:when test="contains($hazardList, 'TURB') and contains($hazardList, 'SFC_WND')">TURB AND STG SFC WNDS</xsl:when>
<xsl:when test="contains($hazardList, 'TURB') and contains($hazardList, 'LLWS')">TURB AND LLWS</xsl:when>
<xsl:when test="contains($hazardList, 'SFC_WND') and contains($hazardList, 'LLWS')">TURB STG WNDS AND LLWS</xsl:when>
<xsl:when test="contains($hazardList, 'SFC_WND')">TURB AND STG SFC WNDS</xsl:when>
<xsl:when test="contains($hazardList, 'LLWS')">TURB AND LLWS</xsl:when>
<xsl:otherwise>TURB</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template name="GetUntilTimeT">
<xsl:variable name="temp">
<xsl:for-each select="//Gfa[(@hazard='TURB' or @hazard='SFC_WND' or @hazard='LLWS') and contains(@fcstHr,'-')][last()]">
<xsl:value-of select="@untilTime"/>
</xsl:for-each>
</xsl:variable>
<xsl:value-of select="$temp"/>
</xsl:template>
<xsl:template name="GetIssueTimeT">
<xsl:variable name="temp">
<xsl:for-each select="//Gfa[(@hazard='TURB' or @hazard='SFC_WND' or @hazard='LLWS') and contains(@fcstHr,'-')][last()]">
<xsl:value-of select="@issueTime"/>
</xsl:for-each>
</xsl:variable>
<xsl:value-of select="$temp"/>
</xsl:template>
<xsl:template name="TangoAirmet">
<xsl:param name="faArea">{faArea}</xsl:param>
<xsl:param name="issueTime">{issueTime}</xsl:param>
<xsl:param name="untilTime">{untilTime}</xsl:param>
<xsl:variable name="amdTest">
<xsl:call-template name="GetStatus">
<xsl:with-param name="haz1">TURB</xsl:with-param>
<xsl:with-param name="haz2">LLWS</xsl:with-param>
<xsl:with-param name="haz3">SFC_WND</xsl:with-param>
</xsl:call-template>
</xsl:variable>
<xsl:variable name="AMD">
<xsl:call-template name="SetStatus">
<xsl:with-param name="amdTest" select="$amdTest"/>
</xsl:call-template>
</xsl:variable>
<xsl:variable name="hazardTest">
<xsl:call-template name="GetHazardsT"/>
</xsl:variable>
<xsl:variable name="hazards">
<xsl:call-template name="SetHazards">
<xsl:with-param name="hazardList" select="$hazardTest"/>
</xsl:call-template>
</xsl:variable>
<!-- output Tango Airmets -->
<xsl:call-template name="OutputTango">
<xsl:with-param name="hazType">TURB</xsl:with-param>
</xsl:call-template>
<xsl:call-template name="OutputTango">
<xsl:with-param name="hazType">SFC_WND</xsl:with-param>
</xsl:call-template>
<xsl:call-template name="OutputTango">
<xsl:with-param name="hazType">LLWS</xsl:with-param>
</xsl:call-template>
</xsl:template>
<xsl:template name="TangoOutlook">
<xsl:param name="outlookStart"></xsl:param>
<xsl:param name="outlookEnd"></xsl:param>
<xsl:param name="numTURB">0</xsl:param>
<xsl:param name="numSFC_WND">0</xsl:param>
<xsl:param name="numLLWS">0</xsl:param>
<xsl:param name="numOutlooks">0</xsl:param>
<!-- output all TURB outlooks -->
<xsl:for-each select="//Gfa[@hazard='TURB' and @isOutlook='true']">
<xsl:variable name="hazardName">
<xsl:call-template name="SetHazardName">
<xsl:with-param name="hazard">TURB</xsl:with-param>
</xsl:call-template>
</xsl:variable>
<xsl:variable name="condStatement">
<xsl:call-template name="MakeConditionsStatement">
<xsl:with-param name="isSmear">0</xsl:with-param>
<xsl:with-param name="fromCondsDvlpg"><xsl:value-of select="@fromCondsDvlpg"/></xsl:with-param>
<xsl:with-param name="fromCondsEndg"><xsl:value-of select="@fromCondsEndg"/></xsl:with-param>
<xsl:with-param name="condsContg"><xsl:value-of select="@condsContg"/></xsl:with-param>
<xsl:with-param name="otlkCondsDvlpg"><xsl:value-of select="@otlkCondsDvlpg"/></xsl:with-param>
<xsl:with-param name="otlkCondsEndg"><xsl:value-of select="@otlkCondsEndg"/></xsl:with-param>
</xsl:call-template>
</xsl:variable>
<xsl:variable name="freqSevStatement">
<xsl:call-template name="GetTangoFreqSevStatement">
<xsl:with-param name="frequency"><xsl:value-of select="@frequency"/></xsl:with-param>
<xsl:with-param name="severity"><xsl:value-of select="@type"/></xsl:with-param>
<xsl:with-param name="hazard" select="$hazardName"/>
<xsl:with-param name="top" select="@top"/>
<xsl:with-param name="base" select="@bottom"/>
<xsl:with-param name="dueTo"><xsl:value-of select="@dueTo"/></xsl:with-param>
<xsl:with-param name="conditions"><xsl:value-of select="$condStatement"/></xsl:with-param>
</xsl:call-template>
</xsl:variable>
<xsl:call-template name="OutputOutlook">
<xsl:with-param name="outlookStart" select="$outlookStart"/>
<xsl:with-param name="outlookEnd" select="$outlookEnd"/>
<xsl:with-param name="hazard" select="$hazardName"/>
<xsl:with-param name="stateList" select="@states"/>
<xsl:with-param name="outlookNumber" select="position()"/>
<xsl:with-param name="totalOutlooks" select="$numOutlooks"/>
<xsl:with-param name="boundedBy" select="@textVor"/>
<xsl:with-param name="freqSevStatement" select="$freqSevStatement"/>
</xsl:call-template>
</xsl:for-each>
<!-- output all SFC WND outlooks -->
<xsl:for-each select="//Gfa[@hazard='SFC_WND' and @isOutlook='true']">
<xsl:variable name="hazardName">
<xsl:call-template name="SetHazardName">
<xsl:with-param name="hazard">SFC_WND</xsl:with-param>
</xsl:call-template>
</xsl:variable>
<xsl:variable name="expHazard">
<xsl:call-template name="GetExpHazard">
<xsl:with-param name="haz" select="@hazard"/>
</xsl:call-template>
</xsl:variable>
<xsl:variable name="condStatement">
<xsl:call-template name="MakeConditionsStatement">
<xsl:with-param name="isSmear">0</xsl:with-param>
<xsl:with-param name="fromCondsDvlpg"><xsl:value-of select="@fromCondsDvlpg"/></xsl:with-param>
<xsl:with-param name="fromCondsEndg"><xsl:value-of select="@fromCondsEndg"/></xsl:with-param>
<xsl:with-param name="condsContg"><xsl:value-of select="@condsContg"/></xsl:with-param>
<xsl:with-param name="otlkCondsDvlpg"><xsl:value-of select="@otlkCondsDvlpg"/></xsl:with-param>
<xsl:with-param name="otlkCondsEndg"><xsl:value-of select="@otlkCondsEndg"/></xsl:with-param>
</xsl:call-template>
</xsl:variable>
<xsl:variable name="freqSevStatement">
<xsl:call-template name="GetTangoFreqSevStatement">
<xsl:with-param name="expectedHaz" select="$expHazard"></xsl:with-param>
<xsl:with-param name="conditions"><xsl:value-of select="$condStatement"/></xsl:with-param>
</xsl:call-template>
</xsl:variable>
<xsl:call-template name="OutputOutlook">
<xsl:with-param name="outlookStart" select="$outlookStart"/>
<xsl:with-param name="outlookEnd" select="$outlookEnd"/>
<xsl:with-param name="hazard" select="$hazardName"/>
<xsl:with-param name="stateList" select="@states"/>
<xsl:with-param name="outlookNumber" select="position() + $numTURB"/>
<xsl:with-param name="totalOutlooks" select="$numOutlooks"/>
<xsl:with-param name="boundedBy" select="@textVor"/>
<xsl:with-param name="freqSevStatement" select="$freqSevStatement"/>
</xsl:call-template>
</xsl:for-each>
</xsl:template>
<xsl:template name="OutputTango">
<xsl:param name="hazType"/>
<xsl:for-each select="//Gfa[(@hazard='TURB' or @hazard='SFC_WND' or @hazard='LLWS') and contains(@fcstHr,'-') and @isOutlook='false']">
<xsl:if test="@hazard = $hazType">
<xsl:variable name="hazardName">
<xsl:call-template name="SetHazardName">
<xsl:with-param name="hazard"><xsl:value-of select="$hazType"/></xsl:with-param>
</xsl:call-template>
</xsl:variable>
<xsl:variable name="condStatement">
<xsl:call-template name="MakeConditionsStatement">
<xsl:with-param name="isSmear">1</xsl:with-param>
<xsl:with-param name="fromCondsDvlpg"><xsl:value-of select="@fromCondsDvlpg"/></xsl:with-param>
<xsl:with-param name="fromCondsEndg"><xsl:value-of select="@fromCondsEndg"/></xsl:with-param>
<xsl:with-param name="condsContg"><xsl:value-of select="@condsContg"/></xsl:with-param>
<xsl:with-param name="otlkCondsDvlpg"><xsl:value-of select="@otlkCondsDvlpg"/></xsl:with-param>
<xsl:with-param name="otlkCondsEndg"><xsl:value-of select="@otlkCondsEndg"/></xsl:with-param>
</xsl:call-template>
</xsl:variable>
<xsl:variable name="expHazard">
<xsl:call-template name="GetExpHazard">
<xsl:with-param name="haz" select="@hazard"/>
</xsl:call-template>
</xsl:variable>
<xsl:variable name="freqSevStatement">
<xsl:call-template name="GetTangoFreqSevStatement">
<xsl:with-param name="frequency"><xsl:value-of select="@frequency"/></xsl:with-param>
<xsl:with-param name="severity"><xsl:value-of select="@type"/></xsl:with-param>
<xsl:with-param name="hazard" select="$hazardName"/>
<xsl:with-param name="top" select="@top"/>
<xsl:with-param name="base" select="@bottom"/>
<xsl:with-param name="dueTo"><xsl:value-of select="@dueTo"/></xsl:with-param>
<xsl:with-param name="expectedHaz" select="$expHazard"></xsl:with-param>
<xsl:with-param name="conditions"><xsl:value-of select="$condStatement"/></xsl:with-param>
</xsl:call-template>
</xsl:variable>
<xsl:variable name="status"><xsl:value-of select="@issueType"/></xsl:variable>
<xsl:variable name="airmetStatement">
<xsl:call-template name="GetAirmetStatement">
<xsl:with-param name="haz"><xsl:value-of select="$hazardName"/></xsl:with-param>
</xsl:call-template>
</xsl:variable>
<xsl:variable name="fromLineStatement">
<xsl:call-template name="GetFromLineStatement">
<xsl:with-param name="haz" select="@hazard"/>
</xsl:call-template>
</xsl:variable>
<xsl:variable name="updateFlag">
<xsl:call-template name="GetUpdate">
<xsl:with-param name="status"><xsl:value-of select="@issueType"/></xsl:with-param>
</xsl:call-template>
</xsl:variable>
<!--
Output begins here
-->
<xsl:element name="line">
<xsl:value-of select="$newline"/>.</xsl:element>
<!-- Hazard statement, state list, and update flag -->
<xsl:element name="line">
<xsl:value-of select="$newline"/><xsl:value-of select="$airmetStatement"/>...<xsl:value-of select="normalize-space(@states)"/>
<xsl:if test="string-length($updateFlag) > 1">
<xsl:value-of select="normalize-space($updateFlag)"/>
</xsl:if>
</xsl:element>
<!-- From line -->
<xsl:element name="line">
<xsl:value-of select="$newline"/><xsl:value-of select="$fromLineStatement"/><xsl:text> </xsl:text><xsl:value-of select="normalize-space(@textVor)"/></xsl:element>
<!-- Frequency & Severity line -->
<xsl:variable name="airTag"><xsl:value-of select="concat(@tag,@desk)"/></xsl:variable>
<xsl:if test="not( contains(@issueType, 'CAN' )) and string-length($freqSevStatement) > 1">
<xsl:element name="line">
<xsl:value-of select="$newline"/><xsl:value-of select="normalize-space($freqSevStatement)"/><xsl:if test="string-length($airTag) > 1"><xsl:text> </xsl:text><xsl:value-of select="normalize-space($airTag)"/>.</xsl:if></xsl:element>
</xsl:if>
<!-- Add the attention line(s) -->
<xsl:call-template name="GetAttentionLine">
<xsl:with-param name="status"><xsl:value-of select="@issueType"/></xsl:with-param>
</xsl:call-template>
</xsl:if>
</xsl:for-each>
</xsl:template>
<xsl:template name="GetExpHazard">
<xsl:param name="haz">{hazard}</xsl:param>
<xsl:choose>
<xsl:when test="contains($haz, 'SFC_WND')">SUSTAINED SURFACE WINDS GTR THAN 30KT EXP</xsl:when>
</xsl:choose>
<xsl:choose>
<xsl:when test="contains($haz, 'LLWS')">LLWS EXP</xsl:when>
</xsl:choose>
</xsl:template>
<xsl:template name="GetAirmetStatement">
<xsl:param name="haz">{hazard}</xsl:param>
<xsl:choose>
<xsl:when test="contains($haz, 'LLWS')">LLWS POTENTIAL</xsl:when>
<xsl:otherwise>AIRMET <xsl:value-of select="$haz"/></xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template name="GetFromLineStatement">
<xsl:param name="haz">{hazard}</xsl:param>
<xsl:choose>
<xsl:when test="contains($haz, 'LLWS')">BOUNDED BY</xsl:when>
<xsl:otherwise>FROM</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template name="GetTangoFreqSevStatement">
<xsl:param name="frequency"/>
<xsl:param name="severity"/>
<xsl:param name="hazard"/>
<xsl:param name="base"/>
<xsl:param name="top"/>
<xsl:param name="dueTo"/>
<xsl:param name="expectedHaz"/>
<xsl:param name="conditions"/>
<xsl:if test="string-length($frequency) >1 or
string-length($severity) > 1 or
string-length($top) > 1 or
string-length($dueTo) > 1 or
string-length($expectedHaz) > 1 or
string-length($conditions) > 1" >
<xsl:if test="string-length($frequency) >1">
<xsl:variable name="validFrequency">
<xsl:call-template name="OkToUse">
<xsl:with-param name="test" select="$frequency"/>
</xsl:call-template>
</xsl:variable>
<xsl:if test="string-length($validFrequency) > 1">
<xsl:value-of select="normalize-space($validFrequency)"/>
</xsl:if>
</xsl:if>
<xsl:variable name="flightLevelStatement">
<xsl:if test="contains( $hazard, 'TURB')">
<xsl:call-template name="MakeFlightLevel">
<xsl:with-param name="base" select="$base"/>
<xsl:with-param name="top" select="$top"/>
</xsl:call-template>
</xsl:if>
</xsl:variable>
<xsl:if test="string-length($severity)>1 and contains($hazard, 'TURB')">
<xsl:text> </xsl:text>
<xsl:value-of select="$severity"/>
</xsl:if>
<xsl:if test="string-length($hazard) > 1 and contains($hazard, 'TURB')">
<xsl:text> </xsl:text>
<xsl:choose>
<xsl:when test="$hazard = 'TURB'">MOD TURBL</xsl:when>
<xsl:otherwise><xsl:value-of select="$hazard"/></xsl:otherwise>
</xsl:choose>
</xsl:if>
<xsl:if test="string-length($flightLevelStatement)>1" >
<xsl:text> </xsl:text>
<xsl:value-of select="$flightLevelStatement"/>
</xsl:if>
<xsl:if test="string-length($dueTo)>1" >
<xsl:text> </xsl:text>
<text>DUE TO </text><xsl:value-of select="$dueTo"/>
</xsl:if>
<xsl:if test="string-length($frequency) >1 or
string-length($severity) > 1 or
string-length($top) > 1 or
string-length($dueTo) > 1" >
<xsl:text>. </xsl:text>
</xsl:if>
<xsl:if test="string-length($expectedHaz) > 1">
<xsl:text> </xsl:text>
<xsl:value-of select="$expectedHaz"/>
<xsl:text>. </xsl:text>
</xsl:if>
<xsl:if test="string-length($conditions)>1" >
<xsl:value-of select="$conditions"/>
</xsl:if>
</xsl:if>
</xsl:template>
</xsl:stylesheet>

View file

@ -0,0 +1,617 @@
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:import href="no_hazard_report.xsl"/>
<xsl:import href="get_status.xsl"/>
<xsl:import href="get_update.xsl"/>
<xsl:import href="get_attention_line.xsl"/>
<xsl:import href="output_header.xsl"/>
<xsl:import href="output_footer.xsl"/>
<xsl:import href="ok_to_use.xsl"/>
<xsl:import href="output_outlook.xsl"/>
<xsl:import href="set_hazard_name.xsl"/>
<xsl:import href="make_flight_level.xsl"/>
<xsl:import href="make_conditions.xsl"/>
<xsl:output method="text"/>
<xsl:variable name="newline">
<xsl:text>
</xsl:text>
</xsl:variable>
<xsl:variable name="numSmearICE" select="count(//Gfa[@hazard='ICE' and contains(@fcstHr,'-')])"/>
<xsl:variable name="numSmears" select="$numSmearICE"/>
<xsl:variable name="numOutlookICE" select="count(//Gfa[@hazard='ICE' and @isOutlook='true'])"/>
<xsl:variable name="numOutlooks" select="$numOutlookICE"/>
<xsl:variable name="numFreezingRange" select="count(//Gfa[@hazard='FZLVL'])"/>
<xsl:template name="zulu">
<xsl:param name="area"/>
<xsl:variable name="untilTime">
<xsl:call-template name="GetUntilTimeZ"/>
</xsl:variable>
<xsl:variable name="issueTime">
<xsl:call-template name="GetIssueTimeZ"/>
</xsl:variable>
<xsl:variable name="amdTest">
<xsl:call-template name="GetStatus">
<xsl:with-param name="haz1">ICE</xsl:with-param>
<xsl:with-param name="haz2">FZLVL</xsl:with-param>
<xsl:with-param name="haz3">M_FZLVL</xsl:with-param>
</xsl:call-template>
</xsl:variable>
<xsl:variable name="AMD">
<xsl:call-template name="SetStatus">
<xsl:with-param name="amdTest" select="$amdTest"/>
</xsl:call-template>
</xsl:variable>
<xsl:call-template name="OutputHeader">
<xsl:with-param name="report">ZULU</xsl:with-param>
<xsl:with-param name="hazard">ICE AND FRZLVL</xsl:with-param>
<xsl:with-param name="untilTime" select="$untilTime"/>
<xsl:with-param name="faArea" select="$area" />
<xsl:with-param name="issueTime" select="$issueTime" />
<xsl:with-param name="amend" select="$AMD"/>
</xsl:call-template>
<!-- If no ICE hazards, output no hazards report -->
<xsl:if test="not($numSmearICE > 0)">
<xsl:value-of select="$newline"/>
<xsl:call-template name="NoHazardReport">
<xsl:with-param name="expectedHazard">ICE</xsl:with-param>
</xsl:call-template>
</xsl:if>
<!-- If hazards are found output them -->
<xsl:if test="$numSmears > 0">
<xsl:call-template name="ZuluAirmet">
<xsl:with-param name="faArea" select="$area"/>
<xsl:with-param name="issueTime" select="$issueTime"/>
<xsl:with-param name="untilTime" select="$untilTime"/>
</xsl:call-template>
</xsl:if>
<!-- output any outlooks -->
<xsl:if test="$numOutlooks > 0">
<xsl:call-template name="ZuluOutlook">
<xsl:with-param name="outlookStart" select="$untilTime"/>
<xsl:with-param name="outlookEnd" select="$untilTime"/>
<xsl:with-param name="numICE" select="$numOutlookICE"/>
<xsl:with-param name="numOutlooks" select="$numOutlooks"/>
</xsl:call-template>
</xsl:if>
<!-- add freezing paragraph -->
<xsl:choose>
<xsl:when test="$numFreezingRange > 0">
<xsl:variable name="FRbase">
<xsl:call-template name="readFzlvlBase">
<xsl:with-param name="FAarea" select="$area"/>
</xsl:call-template>
</xsl:variable>
<xsl:variable name="FRtop">
<xsl:call-template name="readFzlvlTop">
<xsl:with-param name="FAarea" select="$area"/>
</xsl:call-template>
</xsl:variable>
<xsl:call-template name="ZuluFreezing">
<xsl:with-param name="FRbase" select="$FRbase"/>
<xsl:with-param name="FRtop" select="$FRtop"/>
<xsl:with-param name="ZuluArea" select="$area"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise> <!-- if no freezingRange element exists then just add a placeholder line -->
<xsl:element name="line">
<xsl:value-of select="$newline"/>.</xsl:element>
<xsl:element name="line">
<xsl:value-of select="$newline"/>FRZLVL...</xsl:element>
</xsl:otherwise>
</xsl:choose>
<!-- add bulletin footer -->
<xsl:call-template name="OutputFooter"/>
</xsl:template>
<xsl:template name="GetUntilTimeZ">
<xsl:variable name="temp">
<xsl:for-each select="//Gfa[(@hazard='ICE' or contains(@hazard,'FZLVL')) and contains(@fcstHr,'-')][last()]">
<xsl:value-of select="@untilTime"/>
</xsl:for-each>
</xsl:variable>
<xsl:value-of select="$temp"/>
<xsl:if test="string-length($temp)=0">
<xsl:variable name="temp2">
<xsl:for-each select="//Gfa[contains(@fcstHr,'-') and string-length(@untilTime)>0][last()]">
<xsl:value-of select="@untilTime"/>
</xsl:for-each>
</xsl:variable>
<xsl:value-of select="$temp2"/>
</xsl:if>
</xsl:template>
<xsl:template name="GetIssueTimeZ">
<xsl:variable name="temp">
<xsl:for-each select="//Gfa[(@hazard='ICE' or contains(@hazard,'FZLVL')) and contains(@fcstHr,'-')][last()]">
<xsl:value-of select="@issueTime"/>
</xsl:for-each>
</xsl:variable>
<xsl:value-of select="$temp"/>
<xsl:if test="string-length($temp)=0">
<xsl:variable name="temp2">
<xsl:for-each select="//Gfa[contains(@fcstHr,'-') and string-length(@issueTime)>0][last()]">
<xsl:value-of select="@issueTime"/>
</xsl:for-each>
</xsl:variable>
<xsl:value-of select="$temp2"/>
</xsl:if>
</xsl:template>
<!--
ZuluAirmet
This template formats the Zulu Airmet. Note that the formatting lines
begin at the left margin.
Change Log
====== ===
E. Safford/SAIC 03/05 initial coding
E. Safford/SAIC 08/05 Add "...UPDT" to the state list following amended and corrected hazards
E. Safford/SAIC 10/05 rm header and footer creation
E. Safford/SAIC 01/06 use Base and Top, not Top_Bottom
E. Safford/SAIC 02/06 no freq/sev/conds line (line 3) for CAN airmet
E. Safford/SAIC 04/06 use MakeConditionsStatement
E. Safford/SAIC 05/06 add params to GetZuluFreqSevStatement
B. Yin/SAIC 07/07 add tag number
B. Yin/SAIC 02/08 removed tag number for cancellation (added into attention line)
-->
<xsl:template name="ZuluAirmet">
<xsl:param name="faArea">{faArea}</xsl:param>
<xsl:param name="issueTime">{issueTime}</xsl:param>
<xsl:param name="untilTime">{untilTime}</xsl:param>
<xsl:variable name="amdTest">
<xsl:call-template name="GetStatus">
<xsl:with-param name="haz1">ICE</xsl:with-param>
</xsl:call-template>
</xsl:variable>
<xsl:variable name="AMD">
<xsl:call-template name="SetStatus">
<xsl:with-param name="amdTest" select="$amdTest"/>
</xsl:call-template>
</xsl:variable>
<!--
output Zulu Airmets
-->
<xsl:for-each select="//Gfa[@hazard='ICE' and contains(@fcstHr,'-') and @isOutlook='false']">
<xsl:if test="@hazard = 'ICE'">
<xsl:variable name="status"><xsl:value-of select="@issueType"/></xsl:variable>
<xsl:variable name="hazardName">
<xsl:call-template name="SetHazardName">
<xsl:with-param name="hazard" select="@hazard"/>
</xsl:call-template>
</xsl:variable>
<xsl:variable name="condStatement">
<xsl:call-template name="MakeConditionsStatement">
<xsl:with-param name="isSmear">1</xsl:with-param>
<xsl:with-param name="fromCondsDvlpg"><xsl:value-of select="@fromCondsDvlpg"/></xsl:with-param>
<xsl:with-param name="fromCondsEndg"><xsl:value-of select="@fromCondsEndg"/></xsl:with-param>
<xsl:with-param name="condsContg"><xsl:value-of select="@condsContg"/></xsl:with-param>
<xsl:with-param name="otlkCondsDvlpg"><xsl:value-of select="@otlkCondsDvlpg"/></xsl:with-param>
<xsl:with-param name="otlkCondsEndg"><xsl:value-of select="@otlkCondsEndg"/></xsl:with-param>
</xsl:call-template>
</xsl:variable>
<xsl:variable name="freqSevStatement">
<xsl:call-template name="GetZuluFreqSevStatement">
<xsl:with-param name="frequency"><xsl:value-of select="@frequency"/></xsl:with-param>
<xsl:with-param name="severity"><xsl:value-of select="@type"/></xsl:with-param>
<xsl:with-param name="hazard" select="@hazard"/>
<xsl:with-param name="base" select="@bottom"/>
<xsl:with-param name="top" select="@top"/>
<xsl:with-param name="fzlBase" select="@fzlBase"/>
<xsl:with-param name="fzlTop" select="@fzlTop"/>
<xsl:with-param name="dueTo"><xsl:value-of select="@dueTo"/></xsl:with-param>
<xsl:with-param name="conditions"><xsl:value-of select="$condStatement"/></xsl:with-param>
</xsl:call-template>
</xsl:variable>
<xsl:variable name="updateFlag">
<xsl:call-template name="GetUpdate">
<xsl:with-param name="status"><xsl:value-of select="@issueType"/></xsl:with-param>
</xsl:call-template>
</xsl:variable>
<!--
Output begins here
-->
<xsl:element name="line">
<xsl:value-of select="$newline"/>.</xsl:element>
<xsl:text>
</xsl:text>
<!-- Hazard statement, state list, and update flag -->
<xsl:element name="line">
<xsl:value-of select="$newline"/>AIRMET <xsl:value-of select="$hazardName"/>...<xsl:value-of select="normalize-space(@states)"/>
<xsl:if test="string-length($updateFlag) > 1">
<xsl:value-of select="normalize-space($updateFlag)"/>
</xsl:if>
</xsl:element>
<!-- From line -->
<xsl:element name="line">
<xsl:value-of select="$newline"/>FROM <xsl:value-of select="normalize-space(@textVor)"/></xsl:element>
<!-- Frequency & Severity line -->
<xsl:variable name="airTag"><xsl:value-of select="concat(@tag,@desk)"/></xsl:variable>
<xsl:if test="not( contains( $status, 'CAN' ))">
<xsl:if test="string-length($freqSevStatement) > 1">
<xsl:element name="line">
<xsl:value-of select="$newline"/><xsl:value-of select="normalize-space($freqSevStatement)"/><xsl:if test="string-length($airTag) > 1"><xsl:text> </xsl:text><xsl:value-of select="normalize-space($airTag)"/>.</xsl:if></xsl:element>
</xsl:if>
</xsl:if>
<!-- Add the attention line(s) -->
<xsl:call-template name="GetAttentionLine">
<xsl:with-param name="status"><xsl:value-of select="$status"/></xsl:with-param>
</xsl:call-template>
</xsl:if>
</xsl:for-each>
</xsl:template>
<xsl:template name="ZuluOutlook">
<xsl:param name="outlookStart"></xsl:param>
<xsl:param name="outlookEnd"></xsl:param>
<xsl:param name="numICE">0</xsl:param>
<xsl:param name="numOutlooks">0</xsl:param>
<xsl:for-each select="//Gfa[@hazard='ICE' and @isOutlook='true']">
<xsl:variable name="hazardName">
<xsl:call-template name="SetHazardName">
<xsl:with-param name="hazard"><xsl:value-of select="@hazard"/></xsl:with-param>
</xsl:call-template>
</xsl:variable>
<xsl:variable name="condStatement">
<xsl:call-template name="MakeConditionsStatement">
<xsl:with-param name="isSmear">0</xsl:with-param>
<xsl:with-param name="fromCondsDvlpg"><xsl:value-of select="@fromCondsDvlpg"/></xsl:with-param>
<xsl:with-param name="fromCondsEndg"><xsl:value-of select="@fromCondsEndg"/></xsl:with-param>
<xsl:with-param name="condsContg"><xsl:value-of select="@condsContg"/></xsl:with-param>
<xsl:with-param name="otlkCondsDvlpg"><xsl:value-of select="@otlkCondsDvlpg"/></xsl:with-param>
<xsl:with-param name="otlkCondsEndg"><xsl:value-of select="@otlkCondsEndg"/></xsl:with-param>
</xsl:call-template>
</xsl:variable>
<xsl:variable name="freqSevStatement">
<xsl:call-template name="GetZuluFreqSevStatement">
<xsl:with-param name="frequency"><xsl:value-of select="@frequency"/></xsl:with-param>
<xsl:with-param name="severity"><xsl:value-of select="@type"/></xsl:with-param>
<xsl:with-param name="hazard" select="@hazard"/>
<xsl:with-param name="base" select="@bottom"/>
<xsl:with-param name="top" select="@top"/>
<xsl:with-param name="fzlBase" select="@fzlBase"/>
<xsl:with-param name="fzlTop" select="@fzlTop"/>
<xsl:with-param name="dueTo"><xsl:value-of select="@dueTo"/></xsl:with-param>
<xsl:with-param name="conditions"><xsl:value-of select="$condStatement"/></xsl:with-param>
</xsl:call-template>
</xsl:variable>
<xsl:call-template name="OutputOutlook">
<xsl:with-param name="outlookStart" select="$outlookStart"/>
<xsl:with-param name="outlookEnd" select="$outlookEnd"/>
<xsl:with-param name="hazard" select="$hazardName"/>
<xsl:with-param name="stateList" select="@states"/>
<xsl:with-param name="outlookNumber" select="position()"/>
<xsl:with-param name="totalOutlooks" select="$numOutlooks"/>
<xsl:with-param name="boundedBy" select="@textVor"/>
<xsl:with-param name="freqSevStatement" select="$freqSevStatement"/>
</xsl:call-template>
</xsl:for-each>
</xsl:template>
<xsl:template name="ZuluFreezing">
<xsl:param name="FRbase">MissingBase</xsl:param>
<xsl:param name="FRtop">MissingTop</xsl:param>
<xsl:param name="ZuluArea">Missingarea</xsl:param>
<xsl:element name="line">
<xsl:value-of select="$newline"/><xsl:text>.</xsl:text>
</xsl:element>
<xsl:element name="line">
<xsl:value-of select="$newline"/>
<xsl:text>FRZLVL...</xsl:text>
<xsl:if test="not( contains( $FRtop, 'SFC' ))">
<xsl:text>RANGING FROM </xsl:text>
</xsl:if>
<xsl:value-of select="$FRbase"/>
<xsl:if test="not( contains( $FRtop, 'SFC' ))">
<xsl:text>-</xsl:text>
<xsl:value-of select="$FRtop"/>
</xsl:if>
<xsl:text> ACRS AREA</xsl:text>
</xsl:element>
<!-- output all multiple level freezing hazard lines -->
<xsl:for-each select="//Gfa[@hazard='M_FZLVL' and contains(@fcstHr,'-')] ">
<xsl:variable name="flightLevelStatement">
<xsl:call-template name="GetM_FZLVL_FlightLevels">
<xsl:with-param name="base" select="@bottom"/>
<xsl:with-param name="top" select="@top"/>
</xsl:call-template>
</xsl:variable>
<xsl:element name="line">
<xsl:attribute name="indent">3</xsl:attribute>
<xsl:text>MULT FRZLVL </xsl:text><xsl:value-of select="$flightLevelStatement"/>
<xsl:text> BOUNDED BY </xsl:text><xsl:value-of select="@textVor"/>
</xsl:element>
</xsl:for-each>
<!-- output all freezing level contour lines -->
<xsl:for-each select="//Gfa[@hazard='FZLVL' and contains(@fcstHr,'-') and (@level='SFC' or @level='000') and $ZuluArea=@area]">
<xsl:call-template name="OutputFzlvlContour">
<xsl:with-param name="level" select="@level"/>
<xsl:with-param name="fromLn" select="@textVor"/>
<xsl:with-param name="closed" select="@closed"/>
</xsl:call-template>
</xsl:for-each>
<xsl:for-each select="//Gfa[@hazard='FZLVL' and contains(@fcstHr,'-') and (@level='040')] ">
<xsl:call-template name="OutputFzlvlContour">
<xsl:with-param name="level" select="@level"/>
<xsl:with-param name="fromLn" select="@textVor"/>
<xsl:with-param name="closed" select="@closed"/>
</xsl:call-template>
</xsl:for-each>
<xsl:for-each select="//Gfa[@hazard='FZLVL' and contains(@fcstHr,'-') and (@level='080')] ">
<xsl:call-template name="OutputFzlvlContour">
<xsl:with-param name="level" select="@level"/>
<xsl:with-param name="fromLn" select="@textVor"/>
<xsl:with-param name="closed" select="@closed"/>
</xsl:call-template>
</xsl:for-each>
<xsl:for-each select="//Gfa[@hazard='FZLVL' and contains(@fcstHr,'-') and (@level='120')] ">
<xsl:call-template name="OutputFzlvlContour">
<xsl:with-param name="level" select="@level"/>
<xsl:with-param name="fromLn" select="@textVor"/>
<xsl:with-param name="closed" select="@closed"/>
</xsl:call-template>
</xsl:for-each>
<xsl:for-each select="//Gfa[@hazard='FZLVL' and contains(@fcstHr,'-') and (@level='160')] ">
<xsl:call-template name="OutputFzlvlContour">
<xsl:with-param name="level" select="@level"/>
<xsl:with-param name="fromLn" select="@textVor"/>
<xsl:with-param name="closed" select="@closed"/>
</xsl:call-template>
</xsl:for-each>
<!-- Add AMD/COR line -->
<xsl:variable name="amdTest">
<xsl:call-template name="GetStatus">
<xsl:with-param name="haz1">FZLVL</xsl:with-param>
<xsl:with-param name="haz2">M_FZLVL</xsl:with-param>
</xsl:call-template>
</xsl:variable>
<xsl:if test="string-length($amdTest) > 1">
<xsl:variable name="AMD">
<xsl:call-template name="SetStatus">
<xsl:with-param name="amdTest" select="$amdTest"/>
</xsl:call-template>
</xsl:variable>
<xsl:choose>
<xsl:when test="contains( $amdTest, 'AMD')">
<xsl:element name="line">
<xsl:value-of select="$newline"/>
<xsl:text>...UPDT...</xsl:text>
</xsl:element>
</xsl:when>
<xsl:when test="contains( $amdTest, 'COR')">
<xsl:element name="line">
<xsl:value-of select="$newline"/>
<xsl:text>...CORRECTED FRZLVL...</xsl:text>
</xsl:element>
</xsl:when>
</xsl:choose>
</xsl:if>
<!-- End AMD/COR line -->
</xsl:template>
<xsl:template name="GetZuluFreqSevStatement">
<xsl:param name="frequency"/>
<xsl:param name="severity"/>
<xsl:param name="hazard"/>
<xsl:param name="base"/>
<xsl:param name="top"/>
<xsl:param name="fzlBase"/>
<xsl:param name="fzlTop"/>
<xsl:param name="dueTo"/>
<xsl:param name="conditions"/>
<xsl:variable name="flightLevelStatement">
<xsl:call-template name="MakeFlightLevel">
<xsl:with-param name="base" select="$base"/>
<xsl:with-param name="top" select="$top"/>
</xsl:call-template>
</xsl:variable>
<xsl:if test="string-length($frequency) >1 or
string-length($severity) > 1 or
string-length($flightLevelStatement) > 1 or
string-length($dueTo) > 1 or
string-length($conditions) > 1" >
<xsl:if test="string-length($frequency) >1">
<xsl:variable name="validFrequency">
<xsl:call-template name="OkToUse">
<xsl:with-param name="test" select="$frequency"/>
</xsl:call-template>
</xsl:variable>
<xsl:if test="string-length($validFrequency) > 1">
<xsl:value-of select="normalize-space($validFrequency)"/>
</xsl:if>
</xsl:if>
<xsl:if test="string-length($severity)>1 and contains($hazard, 'ICE')">
<xsl:text> MOD </xsl:text>
<xsl:value-of select="$severity"/>
</xsl:if>
<xsl:if test="string-length($dueTo)>1" >
<xsl:text> </xsl:text>
<xsl:value-of select="$dueTo"/>
</xsl:if>
<xsl:if test="string-length($flightLevelStatement)>1" >
<xsl:text> </xsl:text>
<xsl:value-of select="$flightLevelStatement"/>
</xsl:if>
<xsl:if test="string-length($fzlBase) > 1" >
<xsl:text>. FRZLVL </xsl:text>
<xsl:value-of select="$fzlBase"/>
<xsl:text>-</xsl:text>
<xsl:value-of select="$fzlTop"/>
</xsl:if>
<xsl:if test="string-length($frequency) >1 or
string-length($severity) > 1 or
string-length($flightLevelStatement) > 1 or
string-length($dueTo) > 1" >
<xsl:text>. </xsl:text>
</xsl:if>
<xsl:if test="string-length($conditions)>1" >
<xsl:value-of select="$conditions"/>
</xsl:if>
</xsl:if>
</xsl:template>
<xsl:template name="GetM_FZLVL_FlightLevels">
<xsl:param name="base">Missing Base</xsl:param>
<xsl:param name="top">Missing Top</xsl:param>
<xsl:variable name="FLbase">
<xsl:call-template name="GetFlightLevel">
<xsl:with-param name="flightLevel" select="$base"/>
<xsl:with-param name="useFL">0</xsl:with-param>
</xsl:call-template>
</xsl:variable>
<xsl:choose>
<xsl:when test="contains( $FLbase, 'SFC')">
<xsl:text>BLW </xsl:text><xsl:value-of select="$top"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$base"/><xsl:text>-</xsl:text>
<xsl:value-of select="$top"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template name="OutputFzlvlContour">
<xsl:param name="level">missing level</xsl:param>
<xsl:param name="fromLn">missing From line</xsl:param>
<xsl:param name="closed">missing close value</xsl:param>
<xsl:value-of select="$newline"/>
<xsl:element name="line">
<xsl:choose>
<xsl:when test="contains($level, '000')">
<xsl:text> SFC</xsl:text>
</xsl:when>
<xsl:otherwise>
<xsl:text> </xsl:text>
<xsl:value-of select="normalize-space($level)"/>
</xsl:otherwise>
</xsl:choose>
<xsl:choose>
<xsl:when test="contains($closed,'true')">
<xsl:text> BOUNDED BY </xsl:text>
</xsl:when>
<xsl:otherwise> ALG </xsl:otherwise>
</xsl:choose>
<xsl:value-of select="normalize-space($fromLn)"/>
</xsl:element>
</xsl:template>
<xsl:template name="readFzlvlBase">
<xsl:param name="FAarea">area</xsl:param>
<xsl:variable name="areaRange">
<xsl:for-each select="//Gfa[@fzlRange]">
<xsl:if test="contains(@fzlRange, $FAarea)">
<xsl:value-of select="substring-after(@fzlRange, ';')"/>
<xsl:text>;</xsl:text>
</xsl:if>
</xsl:for-each>
</xsl:variable>
<xsl:value-of select="substring-before(substring-after($areaRange, ';'),';')"/>
</xsl:template>
<xsl:template name="readFzlvlTop">
<xsl:param name="FAarea">area</xsl:param>
<xsl:variable name="areaRange">
<xsl:for-each select="//Gfa[@fzlRange]">
<xsl:if test="contains(@fzlRange, $FAarea)">
<xsl:value-of select="substring-after(@fzlRange, ';')"/>
</xsl:if>
</xsl:for-each>
</xsl:variable>
<xsl:value-of select="substring-before($areaRange, ';')"/>
</xsl:template>
</xsl:stylesheet>

View file

@ -0,0 +1,22 @@
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" encoding="UTF-8"/>
<xsl:template match="DrawableElement/Sigmet/Point">
<xsl:choose>
<xsl:when test="@Lat &gt; 0"><xsl:value-of select="round(10*@Lat)"/></xsl:when>
<xsl:otherwise><xsl:value-of select="round(-10*@Lat)"/></xsl:otherwise>
</xsl:choose>
<xsl:text>&#xA0;</xsl:text>
<xsl:choose>
<xsl:when test="@Lon &gt; 0"><xsl:value-of select="round(10*@Lon)"/></xsl:when>
<xsl:otherwise><xsl:value-of select="round(-10*@Lon)"/></xsl:otherwise>
</xsl:choose>
<xsl:text>&#xA0;</xsl:text>
</xsl:template>
</xsl:stylesheet>

View file

@ -0,0 +1,105 @@
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" encoding="UTF-8"/>
<xsl:include href="ccfpLatLon.xslt"/>
<xsl:template match="DrawableElement/Sigmet">
<xsl:choose>
<xsl:when test="@type='Area'">
<!-- 1st: coverage -->
<xsl:choose>
<xsl:when test="@editableAttrPhenom='75-100%'"><xsl:text>1 </xsl:text></xsl:when>
<xsl:when test="@editableAttrPhenom='40-74%'"><xsl:text>2 </xsl:text></xsl:when>
<xsl:otherwise><xsl:text>3 </xsl:text></xsl:otherwise>
</xsl:choose>
<!-- 2nd: confidence -->
<xsl:choose>
<xsl:when test="@editableAttrPhenomLat='50-100%'"><xsl:text>1 </xsl:text></xsl:when>
<xsl:otherwise><xsl:text>3 </xsl:text></xsl:otherwise>
</xsl:choose>
<!-- 3rd: growth -->
<xsl:choose>
<xsl:when test="@editableAttrPhenomLon='+'"><xsl:text>2 </xsl:text></xsl:when>
<xsl:when test="@editableAttrPhenomLon='NC'"><xsl:text>3 </xsl:text></xsl:when>
<xsl:otherwise><xsl:text>4 </xsl:text></xsl:otherwise>
</xsl:choose>
<!-- 4th: tops -->
<xsl:choose>
<xsl:when test="@editableAttrPhenom2='400+'"><xsl:text>1 </xsl:text></xsl:when>
<xsl:when test="@editableAttrPhenom2='350-390'"><xsl:text>2 </xsl:text></xsl:when>
<xsl:when test="@editableAttrPhenom2='300-340'"><xsl:text>3 </xsl:text></xsl:when>
<xsl:otherwise><xsl:text>4 </xsl:text></xsl:otherwise>
</xsl:choose>
<!-- 5th: speed -->
<xsl:text><xsl:value-of select="@editableAttrPhenomSpeed"/></xsl:text>
<!-- 6th: direction -->
<xsl:choose>
<xsl:when test="@editableAttrPhenomDirection='N'"><xsl:text> 0 </xsl:text></xsl:when>
<xsl:when test="@editableAttrPhenomDirection='NNE'"><xsl:text> 23 </xsl:text></xsl:when>
<xsl:when test="@editableAttrPhenomDirection='NE'"><xsl:text> 45 </xsl:text></xsl:when>
<xsl:when test="@editableAttrPhenomDirection='ENE'"><xsl:text> 68 </xsl:text></xsl:when>
<xsl:when test="@editableAttrPhenomDirection='E'"><xsl:text> 90 </xsl:text></xsl:when>
<xsl:when test="@editableAttrPhenomDirection='ESE'"><xsl:text> 113 </xsl:text></xsl:when>
<xsl:when test="@editableAttrPhenomDirection='SE'"><xsl:text> 135 </xsl:text></xsl:when>
<xsl:when test="@editableAttrPhenomDirection='SSE'"><xsl:text> 158 </xsl:text></xsl:when>
<xsl:when test="@editableAttrPhenomDirection='S'"><xsl:text> 180 </xsl:text></xsl:when>
<xsl:when test="@editableAttrPhenomDirection='SSW'"><xsl:text> 203 </xsl:text></xsl:when>
<xsl:when test="@editableAttrPhenomDirection='SW'"><xsl:text> 225 </xsl:text></xsl:when>
<xsl:when test="@editableAttrPhenomDirection='WSW'"><xsl:text> 248 </xsl:text></xsl:when>
<xsl:when test="@editableAttrPhenomDirection='W'"><xsl:text> 270 </xsl:text></xsl:when>
<xsl:when test="@editableAttrPhenomDirection='WNW'"><xsl:text> 293 </xsl:text></xsl:when>
<xsl:when test="@editableAttrPhenomDirection='NW'"><xsl:text> 315 </xsl:text></xsl:when>
<xsl:when test="@editableAttrPhenomDirection='NNW'"><xsl:text> 338 </xsl:text></xsl:when>
<xsl:otherwise><xsl:text> 0 </xsl:text></xsl:otherwise>
</xsl:choose>
<!-- 7th: number of points -->
<xsl:value-of select="count(Point)+1"/><xsl:text>&#xA0;</xsl:text>
</xsl:when>
<!-- for Line/LineMed -->
<xsl:otherwise>
<!-- 1st: Line type -->
<xsl:choose>
<xsl:when test="@type='Line'"><xsl:text>1</xsl:text><xsl:text>&#xA0;</xsl:text></xsl:when>
<xsl:otherwise><xsl:text>2</xsl:text><xsl:text>&#xA0;</xsl:text></xsl:otherwise>
</xsl:choose>
<!-- 2nd: number of points -->
<xsl:value-of select="count(Point)"/><xsl:text>&#xA0;</xsl:text>
</xsl:otherwise>
</xsl:choose>
<!-- rest: latlons -->
<xsl:for-each select="Point">
<xsl:apply-templates select="."/>
</xsl:for-each>
<!-- repeat the first at the end for type Area. WATCH OUT for minus signs and &lt; &gt; they may cause problems-->
<xsl:if test="@type='Area'">
<xsl:choose>
<xsl:when test="Point/@Lat &lt; 0"><xsl:value-of select="round(-10*Point/@Lat)"/></xsl:when>
<xsl:otherwise><xsl:value-of select="round(10*Point/@Lat)"/></xsl:otherwise>
</xsl:choose>
<xsl:text>&#xA0;</xsl:text>
<xsl:choose>
<xsl:when test="Point/@Lon &lt; 0"><xsl:value-of select="round(-10*Point/@Lon)"/></xsl:when>
<xsl:otherwise><xsl:value-of select="round(10*Point/@Lon)"/></xsl:otherwise>
</xsl:choose>
<xsl:text>&#xA0;</xsl:text>
</xsl:if>
</xsl:template>
</xsl:stylesheet>

View file

@ -0,0 +1,31 @@
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" encoding="UTF-8"/>
<xsl:include href="ccfpPart.xslt"/>
<xsl:template match="DrawableElement">
<xsl:text>CCFP </xsl:text>
<xsl:value-of select="Sigmet/@editableAttrStartTime"/>
<xsl:text>&#xA0;</xsl:text>
<xsl:value-of select="Sigmet/@editableAttrEndTime"/>
<!-- Area is treated in one group and Line mixed with LineMed -->
<xsl:for-each select="Sigmet[@type='Area']">
<xsl:text>&#13;&#10;</xsl:text>
<xsl:text>AREA </xsl:text>
<xsl:apply-templates select="."/>
</xsl:for-each>
<xsl:for-each select="Sigmet[@type!='Area']">
<xsl:text>&#13;&#10;</xsl:text>
<xsl:text>LINE </xsl:text>
<xsl:apply-templates select="."/>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>

View file

@ -0,0 +1,52 @@
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method = "text"/>
<!--
Outlook.xlt
- generate outlook product
Change Log:
B. Yin/Chugach 04/10 Initial Coding
-->
<xsl:variable name="newline"><xsl:text>
</xsl:text></xsl:variable>
<xsl:template match="Outlook">
<xsl:value-of select="$newline"/>
<xsl:value-of select="@days"/>
<xsl:value-of select="$newline"/>
<xsl:value-of select="@forecaster"/>
<xsl:value-of select="$newline"/>
<xsl:value-of select="substring(@issueTime,9,2)"/>
<xsl:value-of select="substring(@issueTime,12,2)"/>
<xsl:value-of select="substring(@issueTime,15,2)"/>
<xsl:text>Z - </xsl:text>
<xsl:value-of select="substring(@expTime,9,2)"/>
<xsl:value-of select="substring(@expTime,12,2)"/>
<xsl:value-of select="substring(@expTime,15,2)"/>
<xsl:text>Z</xsl:text>
<xsl:value-of select="$newline"/>
<xsl:call-template name="fmtLines">
<xsl:with-param name="lines" select="@lineInfo"/>
</xsl:call-template>
</xsl:template>
<xsl:template name="fmtLines">
<xsl:param name="lines"/>
<xsl:if test="contains($lines, 'new_line') ">
<xsl:value-of select="substring-before($lines,'new_line')"/>
<xsl:value-of select="$newline"/>
<xsl:call-template name="fmtLines">
<xsl:with-param name="lines" select="substring-after($lines,'new_line')"/>
</xsl:call-template>
</xsl:if>
</xsl:template>
</xsl:stylesheet>

View file

@ -0,0 +1,75 @@
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method = "text"/>
<!--
sfc_prog.xlt
- generate formatted SFC_PROG text
Change Log:
B. Yin/Chugach 08/11 Initial Coding
-->
<xsl:variable name="newline"><xsl:text>
</xsl:text></xsl:variable>
<xsl:template match="/">
<xsl:text>12HR PROG VALID xxxxxxZ</xsl:text>
<xsl:value-of select="$newline"/>
<xsl:text>HIGHS </xsl:text>
<xsl:for-each select="/Products/Product/Layer/DrawableElement/DECollection">
<xsl:if test="@pgenCategory= 'Symbol' and (@pgenType= 'HIGH_PRESSURE_H' or @pgenType ='FILLED_HIGH_PRESSURE_H')">
<xsl:value-of select="DrawableElement/Text/textLine"/>
<xsl:text> </xsl:text>
<xsl:value-of select="format-number(DrawableElement/Symbol/Point/@Lat,'##')"/>
<xsl:value-of select="-1*format-number(DrawableElement/Symbol/Point/@Lon,'##')"/>
<xsl:text> </xsl:text>
</xsl:if>
</xsl:for-each>
<xsl:value-of select="$newline"/>
<xsl:text>LOWS </xsl:text>
<xsl:for-each select="/Products/Product/Layer/DrawableElement/DECollection">
<xsl:if test="@pgenCategory= 'Symbol' and (@pgenType= 'LOW_PRESSURE_L' or @pgenType ='FILLED_LOW_PRESSURE_L')">
<xsl:value-of select="DrawableElement/Text/textLine"/>
<xsl:text> </xsl:text>
<xsl:value-of select="format-number(DrawableElement/Symbol/Point/@Lat,'##')"/>
<xsl:value-of select="-1*format-number(DrawableElement/Symbol/Point/@Lon,'##')"/>
<xsl:text> </xsl:text>
</xsl:if>
</xsl:for-each>
<xsl:for-each select="/Products/Product/Layer/DrawableElement/Line">
<xsl:if test="@pgenCategory= 'Front'">
<xsl:value-of select="$newline"/>
<xsl:choose>
<xsl:when test="@pgenType = 'COLD_FRONT'">
<xsl:text>COLD WK </xsl:text>
</xsl:when>
<xsl:when test="@pgenType = 'WARM_FRONT'">
<xsl:text>WARM WK </xsl:text>
</xsl:when>
<xsl:when test="@pgenType = 'STATIONARY_FRONT'">
<xsl:text>STNRY WK </xsl:text>
</xsl:when>
<xsl:when test="@pgenType = 'OCCLUDED_FRONT'">
<xsl:text>OCFNT WK </xsl:text>
</xsl:when>
<xsl:when test="@pgenType = 'TROF'">
<xsl:text>TROF </xsl:text>
</xsl:when>
</xsl:choose>
<xsl:for-each select="Point">
<xsl:value-of select="format-number(@Lat,'##')"/>
<xsl:value-of select="-1*format-number(@Lon,'##')"/>
<xsl:text> </xsl:text>
</xsl:for-each>
</xsl:if>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>

View file

@ -0,0 +1,61 @@
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method = "text"/>
<!--
qpf_prog.xlt
- generate formatted SFC_PROG text
Change Log:
B. Yin/Chugach 08/11 Initial Coding
-->
<xsl:variable name="newline"><xsl:text>
</xsl:text></xsl:variable>
<xsl:template match="/">
<xsl:for-each select="/Products/Product/Layer/DrawableElement/Contours">
<xsl:if test="@pgenCategory= 'MET' and @pgenType= 'Contours'">
<xsl:for-each select="DECollection/DrawableElement">
<xsl:variable name="label">
<xsl:value-of select="format-number(Text/textLine,'#0.00')"/>
</xsl:variable>
<xsl:if test="not(string-length($label) > 4)">
<xsl:text> </xsl:text>
</xsl:if>
<xsl:value-of select="$label"/>
<xsl:text> </xsl:text>
<xsl:for-each select="Line/Point">
<xsl:value-of select="format-number(@Lat*10+0.5,'##')"/>
<xsl:variable name="lon">
<xsl:value-of select="-1*format-number(@Lon*10+0.5,'##')"/>
</xsl:variable>
<xsl:choose>
<xsl:when test="string-length($lon) > 3">
<xsl:value-of select="substring($lon,2,3)"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$lon"/>
</xsl:otherwise>
</xsl:choose>
<xsl:text> </xsl:text>
<xsl:if test="(position() mod 8 = 0 and not(position() = last()))">
<xsl:value-of select="$newline"/>
<xsl:text> </xsl:text>
</xsl:if>
</xsl:for-each>
<xsl:value-of select="$newline"/>
</xsl:for-each>
<xsl:value-of select="$newline"/>
</xsl:if>
<xsl:value-of select="$newline"/>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>

View file

@ -0,0 +1,75 @@
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method = "text"/>
<!--
sfc_prog.xlt
- generate formatted SFC_PROG text
Change Log:
B. Yin/Chugach 08/11 Initial Coding
-->
<xsl:variable name="newline"><xsl:text>
</xsl:text></xsl:variable>
<xsl:template match="/">
<xsl:text>12HR PROG VALID xxxxxxZ</xsl:text>
<xsl:value-of select="$newline"/>
<xsl:text>HIGHS </xsl:text>
<xsl:for-each select="/Products/Product/Layer/DrawableElement/DECollection">
<xsl:if test="@pgenCategory= 'Symbol' and @pgenType= 'HIGH_PRESSURE_H'">
<xsl:value-of select="DrawableElement/Text/textLine"/>
<xsl:text> </xsl:text>
<xsl:value-of select="format-number(DrawableElement/Symbol/Point/@Lat,'##')"/>
<xsl:value-of select="-1*format-number(DrawableElement/Symbol/Point/@Lon,'##')"/>
<xsl:text> </xsl:text>
</xsl:if>
</xsl:for-each>
<xsl:value-of select="$newline"/>
<xsl:text>LOWS </xsl:text>
<xsl:for-each select="/Products/Product/Layer/DrawableElement/DECollection">
<xsl:if test="@pgenCategory= 'Symbol' and @pgenType= 'LOW_PRESSURE_L'">
<xsl:value-of select="DrawableElement/Text/textLine"/>
<xsl:text> </xsl:text>
<xsl:value-of select="format-number(DrawableElement/Symbol/Point/@Lat,'##')"/>
<xsl:value-of select="-1*format-number(DrawableElement/Symbol/Point/@Lon,'##')"/>
<xsl:text> </xsl:text>
</xsl:if>
</xsl:for-each>
<xsl:for-each select="/Products/Product/Layer/DrawableElement/Line">
<xsl:if test="@pgenCategory= 'Front'">
<xsl:value-of select="$newline"/>
<xsl:choose>
<xsl:when test="@pgenType = 'COLD_FRONT'">
<xsl:text>COLD WK </xsl:text>
</xsl:when>
<xsl:when test="@pgenType = 'WARM_FRONT'">
<xsl:text>WARM WK </xsl:text>
</xsl:when>
<xsl:when test="@pgenType = 'STATIONARY_FRONT'">
<xsl:text>STNRY WK </xsl:text>
</xsl:when>
<xsl:when test="@pgenType = 'OCCLUDED_FRONT'">
<xsl:text>OCFNT WK </xsl:text>
</xsl:when>
<xsl:when test="@pgenType = 'TROF'">
<xsl:text>TROF </xsl:text>
</xsl:when>
</xsl:choose>
<xsl:for-each select="Point">
<xsl:value-of select="format-number(@Lat,'##')"/>
<xsl:value-of select="-1*format-number(@Lon,'##')"/>
<xsl:text> </xsl:text>
</xsl:for-each>
</xsl:if>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>

View file

@ -0,0 +1,51 @@
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method = "text"/>
<!--
sfc_prog.xlt
- generate formatted SFC_PROG text
Change Log:
B. Yin/Chugach 08/11 Initial Coding
-->
<xsl:variable name="newline"><xsl:text>
</xsl:text></xsl:variable>
<xsl:template match="/">
<xsl:text>12HR PROG VALID xxxxxxZ</xsl:text>
<xsl:value-of select="$newline"/>
<xsl:for-each select="/Products/Product/Layer/DrawableElement/Line">
<xsl:if test="@pgenCategory= 'Front'">
<xsl:value-of select="$newline"/>
<xsl:choose>
<xsl:when test="@pgenType = 'COLD_FRONT'">
<xsl:text>COLD WK </xsl:text>
</xsl:when>
<xsl:when test="@pgenType = 'WARM_FRONT'">
<xsl:text>WARM WK </xsl:text>
</xsl:when>
<xsl:when test="@pgenType = 'STATIONARY_FRONT'">
<xsl:text>STNRY WK </xsl:text>
</xsl:when>
<xsl:when test="@pgenType = 'OCCLUDED_FRONT'">
<xsl:text>OCFNT WK </xsl:text>
</xsl:when>
<xsl:when test="@pgenType = 'TROF'">
<xsl:text>TROF </xsl:text>
</xsl:when>
</xsl:choose>
<xsl:for-each select="Point">
<xsl:value-of select="format-number(@Lat,'##')"/>
<xsl:value-of select="-1*format-number(@Lon,'##')"/>
<xsl:text> </xsl:text>
</xsl:for-each>
</xsl:if>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>

View file

@ -0,0 +1,78 @@
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method = "text"/>
<!--
wxd.xlt
- generate formatted SFC_PROG text
Change Log:
B. Yin/Chugach 08/11 Initial Coding
-->
<xsl:variable name="newline"><xsl:text>
</xsl:text></xsl:variable>
<xsl:template match="/">
<xsl:text>yyyymmddhh</xsl:text>
<xsl:for-each select="/Products/Product/Layer/DrawableElement/Symbol">
<xsl:choose>
<xsl:when test="@pgenType = 'TROPICAL_STORM_NH'">
<xsl:value-of select="$newline"/>
<xsl:text>TROP</xsl:text>
<xsl:value-of select="$newline"/>
<xsl:text> </xsl:text>
<xsl:value-of select="format-number(Point/@Lat*100,'##')"/>
<xsl:text> </xsl:text>
<xsl:value-of select="format-number(Point/@Lon*-100,'##')"/>
</xsl:when>
<xsl:when test="@pgenType = 'HURRICANE_NH'">
<xsl:value-of select="$newline"/>
<xsl:text>HRCN</xsl:text>
<xsl:value-of select="$newline"/>
<xsl:text> </xsl:text>
<xsl:value-of select="format-number(Point/@Lat*100,'##')"/>
<xsl:text> </xsl:text>
<xsl:value-of select="format-number(Point/@Lon*-100,'##')"/>
</xsl:when>
</xsl:choose>
</xsl:for-each>
<xsl:for-each select="/Products/Product/Layer/DrawableElement/Line">
<xsl:if test="@pgenCategory= 'Front'">
<xsl:value-of select="$newline"/>
<xsl:choose>
<xsl:when test="@pgenType = 'COLD_FRONT'">
<xsl:text>COLD WK </xsl:text>
</xsl:when>
<xsl:when test="@pgenType = 'WARM_FRONT'">
<xsl:text>WARM WK </xsl:text>
</xsl:when>
<xsl:when test="@pgenType = 'STATIONARY_FRONT'">
<xsl:text>STNRY WK </xsl:text>
</xsl:when>
<xsl:when test="@pgenType = 'OCCLUDED_FRONT'">
<xsl:text>OCFNT WK </xsl:text>
</xsl:when>
<xsl:when test="@pgenType = 'TROF'">
<xsl:text>TROF </xsl:text>
</xsl:when>
</xsl:choose>
<xsl:for-each select="Point">
<xsl:value-of select="$newline"/>
<xsl:text> </xsl:text>
<xsl:value-of select="format-number(@Lat*100,'##')"/>
<xsl:text> </xsl:text>
<xsl:value-of select="format-number(@Lon*-100,'##')"/>
</xsl:for-each>
</xsl:if>
</xsl:for-each>
<xsl:value-of select="$newline"/>
<xsl:text>END</xsl:text>
</xsl:template>
</xsl:stylesheet>

View file

@ -0,0 +1,12 @@
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:datetime="http://exslt.org/dates-and-times"
exclude-result-prefixes="datetime">
<xsl:template match="Volcano" mode="styleFOOTER">
<xsl:text>
NNNN
</xsl:text>
</xsl:template>
</xsl:stylesheet>

View file

@ -0,0 +1,36 @@
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:datetime="http://exslt.org/dates-and-times"
xmlns:my="xalan://gov.noaa.nws.ncep.ui.pgen.sigmet.VaaInfo"
exclude-result-prefixes="datetime my">
<xsl:variable name="smallcase" select="'abcdefghijklmnopqrstuvwxyz'" />
<xsl:variable name="uppercase" select="'ABCDEFGHIJKLMNOPQRSTUVWXYZ'" />
<xsl:variable name="now" select="datetime:date-time()"/>
<xsl:template match="Volcano" mode="styleHEADER">
<xsl:text>
FV</xsl:text><xsl:value-of select="@wmoId"/><xsl:value-of select="@hdrNum"/>
<xsl:text>&#xA0;</xsl:text>
<xsl:value-of select="substring(@origStnVAAC,1,4)"/>
<xsl:text>&#xA0;</xsl:text><!--xsl:value-of select="datetime:dateTime()" /--><xsl:value-of select="my:getDateTime('ddHHmm')" />
<xsl:text>&#xA0;</xsl:text>
<xsl:choose>
<xsl:when test="string-length(@corr) > 0">CC<xsl:value-of select="@corr" /></xsl:when>
</xsl:choose>
VA ADVISORY<xsl:text>&#xA0;</xsl:text>
<xsl:choose>
<xsl:when test="string-length(@corr) > 0">-CORRECTION</xsl:when>
</xsl:choose>
DTG: <!--xsl:value-of select="datetime:dateTime()"/--><xsl:value-of select="my:getDateTime('yyyyMMdd/HHmm')" />Z<xsl:text>&#13;&#10;</xsl:text>
VAAC: <xsl:value-of select="substring(@origStnVAAC,6)"/><xsl:text>&#13;&#10;</xsl:text>
VOLCANO: <xsl:value-of select="translate(@name, $smallcase, $uppercase)"/><xsl:text>&#xA0;</xsl:text><xsl:value-of select="@number"/>
PSN: <xsl:choose><xsl:when test="@product='TEST'"><xsl:value-of select="@txtLoc"/></xsl:when><xsl:otherwise><xsl:value-of select="substring(@txtLoc,1,5)"/><xsl:text>&#xA0;</xsl:text><xsl:value-of select="substring(@txtLoc,6,6)"/></xsl:otherwise></xsl:choose> <xsl:text>&#13;&#10;</xsl:text>
AREA: <xsl:value-of select="translate(@area, $smallcase, $uppercase)"/> <xsl:text>&#13;&#10;</xsl:text>
</xsl:template>
</xsl:stylesheet>

View file

@ -0,0 +1,12 @@
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="Volcano" mode="styleBACKUP">
<xsl:if test="@product='BACKUP'">
<xsl:text>
RMK: </xsl:text><xsl:value-of select="translate(@remarks, $smallcase, $uppercase)"/><xsl:text>&#13;&#10;</xsl:text>
</xsl:if>
</xsl:template>
</xsl:stylesheet>

View file

@ -0,0 +1,12 @@
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="Volcano" mode="styleRESUME">
<xsl:if test="@product='RESUME'">
<xsl:text>
RMK: </xsl:text><xsl:value-of select="substring-after(@remarks,':::')"/><xsl:text>&#13;&#10;</xsl:text>
</xsl:if>
</xsl:template>
</xsl:stylesheet>

View file

@ -0,0 +1,19 @@
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="Volcano" mode="styleTEST">
<xsl:if test="@product='TEST'">
<xsl:text>
SUMMIT ELEV: </xsl:text>
<xsl:value-of select="translate(@elev, $smallcase, $uppercase)"/><xsl:text>&#13;&#10;</xsl:text>
<xsl:text>
ADVISORY NR: </xsl:text>
<xsl:value-of select="@year"/><xsl:if test="string-length(@year) > 0">/</xsl:if><xsl:value-of select="@advNum"/><xsl:text>&#13;&#10;</xsl:text>
<xsl:text>
RMK: </xsl:text><xsl:value-of select="substring-after(@remarks,':::')"/><xsl:text>&#13;&#10;</xsl:text>
</xsl:if>
</xsl:template>
</xsl:stylesheet>

View file

@ -0,0 +1,27 @@
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="Volcano" mode="styleEND">
<xsl:if test="@product='END'">
<xsl:text>
SUMMIT ELEV: </xsl:text>
<xsl:value-of select="translate(@elev, $smallcase, $uppercase)"/><xsl:text>&#13;&#10;</xsl:text>
<xsl:text>
ADVISORY NR: </xsl:text>
<xsl:value-of select="@year"/><xsl:if test="string-length(@year) > 0">/</xsl:if><xsl:value-of select="@advNum"/><xsl:text>&#13;&#10;</xsl:text>
INFO SOURCE: <xsl:value-of select="@infoSource"/><xsl:text>&#xA0;</xsl:text><xsl:value-of select="translate(@addInfoSource, $smallcase, $uppercase)"/><xsl:text>&#13;&#10;</xsl:text>
ERUPTION DETAILS: <xsl:value-of select="translate(@erupDetails, $smallcase, $uppercase)"/><xsl:text>&#13;&#10;</xsl:text>
OBS VA DTG: <xsl:choose><xsl:when test="@obsAshDate='NIL'">NIL</xsl:when><xsl:otherwise><xsl:value-of select="@obsAshDate"/>/<xsl:value-of select="@obsAshTime"/>Z</xsl:otherwise></xsl:choose><xsl:text>&#13;&#10;</xsl:text>
OBS VA CLD: <xsl:value-of select="@obsFcstAshCloudInfo"/> <xsl:text>&#13;&#10;</xsl:text>
FCST VA CLD +6H: <xsl:value-of select="@obsFcstAshCloudInfo6"/> <xsl:text>&#13;&#10;</xsl:text>
FCST VA CLD +12H: <xsl:value-of select="@obsFcstAshCloudInfo12"/><xsl:text>&#13;&#10;</xsl:text>
FCST VA CLD +18H: <xsl:value-of select="@obsFcstAshCloudInfo18"/> <xsl:text>&#13;&#10;</xsl:text>
RMK: <xsl:value-of select="translate(@remarks, $smallcase, $uppercase)"/> ...<xsl:value-of select="@forecasters"/><xsl:text>&#13;&#10;</xsl:text>
NXT ADVISORY: <xsl:value-of select="substring-after(@nextAdv,':::')"/><xsl:text>&#13;&#10;</xsl:text>
</xsl:if>
</xsl:template>
</xsl:stylesheet>

View file

@ -0,0 +1,19 @@
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="Volcano" mode="styleNEAR">
<xsl:if test="@product='NEAR'">
<xsl:text>
SUMMIT ELEV: </xsl:text>
<xsl:value-of select="translate(@elev, $smallcase, $uppercase)"/><xsl:text>&#13;&#10;</xsl:text>
<xsl:text>
ADVISORY NR: </xsl:text>
<xsl:value-of select="@year"/><xsl:if test="string-length(@year) > 0">/</xsl:if><xsl:value-of select="@advNum"/><xsl:text>&#13;&#10;</xsl:text>
RMK: <xsl:value-of select="translate(@remarks, $smallcase, $uppercase)"/> ...<xsl:value-of select="@forecasters"/><xsl:text>&#13;&#10;</xsl:text>
</xsl:if>
</xsl:template>
</xsl:stylesheet>

View file

@ -0,0 +1,27 @@
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="Volcano" mode="styleNORMAL">
<xsl:if test="@product='NORMAL'">
<xsl:text>
SUMMIT ELEV: </xsl:text>
<xsl:value-of select="translate(@elev, $smallcase, $uppercase)"/><xsl:text>&#13;&#10;</xsl:text>
<xsl:text>
ADVISORY NR: </xsl:text>
<xsl:value-of select="@year"/><xsl:if test="string-length(@year) > 0">/</xsl:if><xsl:value-of select="@advNum"/><xsl:text>&#13;&#10;</xsl:text>
INFO SOURCE: <xsl:value-of select="@infoSource"/><xsl:text>&#xA0;</xsl:text><xsl:value-of select="translate(@addInfoSource, $smallcase, $uppercase)"/> <xsl:text>&#13;&#10;</xsl:text>
ERUPTION DETAILS: <xsl:value-of select="translate(@erupDetails, $smallcase, $uppercase)"/><xsl:text>&#13;&#10;</xsl:text>
OBS VA DTG: <xsl:choose><xsl:when test="@obsAshDate='NIL'">NIL</xsl:when><xsl:otherwise><xsl:value-of select="@obsAshDate"/>/<xsl:value-of select="@obsAshTime"/>Z</xsl:otherwise></xsl:choose><xsl:text>&#13;&#10;</xsl:text>
OBS VA CLD: <xsl:value-of select="@obsFcstAshCloudInfo"/> <xsl:text>&#13;&#10;</xsl:text>
FCST VA CLD +6H: <xsl:value-of select="@obsFcstAshCloudInfo6"/> <xsl:text>&#13;&#10;</xsl:text>
FCST VA CLD +12H: <xsl:value-of select="@obsFcstAshCloudInfo12"/><xsl:text>&#13;&#10;</xsl:text>
FCST VA CLD +18H: <xsl:value-of select="@obsFcstAshCloudInfo18"/> <xsl:text>&#13;&#10;</xsl:text>
RMK: <xsl:value-of select="translate(@remarks, $smallcase, $uppercase)"/> ...<xsl:value-of select="@forecasters"/><xsl:text>&#13;&#10;</xsl:text>
NXT ADVISORY: <xsl:value-of select="@nextAdv"/> <xsl:text>&#13;&#10;</xsl:text>
</xsl:if>
</xsl:template>
</xsl:stylesheet>

View file

@ -0,0 +1,24 @@
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="Volcano" mode="styleQUICK">
<xsl:if test="@product='QUICK'">
<xsl:text>
SUMMIT ELEV: </xsl:text>
<xsl:value-of select="translate(@elev, $smallcase, $uppercase)"/><xsl:text>&#13;&#10;</xsl:text>
<xsl:text>
ADVISORY NR: </xsl:text>
<xsl:value-of select="@year"/><xsl:if test="string-length(@year) > 0">/</xsl:if><xsl:value-of select="@advNum"/><xsl:text>&#13;&#10;</xsl:text>
INFO SOURCE: <xsl:if test="not(contains( @infoSource, 'NOT AVBL'))" ><xsl:value-of select="substring-after(@infoSource,':::')"/><xsl:text>&#xA0;</xsl:text></xsl:if><xsl:text>&#13;&#10;</xsl:text>
ERUPTION DETAILS: <xsl:if test="not(contains( @erupDetails, 'NOT AVBL'))" ><xsl:value-of select="translate(substring-after(@erupDetails,':::'), $smallcase, $uppercase)"/><xsl:text>&#13;&#10;</xsl:text></xsl:if>
RMK: <xsl:value-of select="substring-after(@remarks,':::')"/><xsl:text>&#13;&#10;</xsl:text>
NXT ADVISORY: <xsl:value-of select="substring-after(@nextAdv,':::')"/><xsl:text>&#13;&#10;</xsl:text>
</xsl:if>
</xsl:template>
</xsl:stylesheet>

View file

@ -0,0 +1,23 @@
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="Volcano" mode="styleWATCH">
<xsl:if test="@product='WATCH'">
<xsl:text>
SUMMIT ELEV: </xsl:text>
<xsl:value-of select="translate(@elev, $smallcase, $uppercase)"/><xsl:text>&#13;&#10;</xsl:text>
<xsl:text>
ADVISORY NR: </xsl:text>
<xsl:value-of select="@year"/><xsl:if test="string-length(@year) > 0">/</xsl:if><xsl:value-of select="@advNum"/><xsl:text>&#13;&#10;</xsl:text>
INFO SOURCE: <xsl:value-of select="@infoSource"/><xsl:text>&#xA0;</xsl:text><xsl:value-of select="translate(@addInfoSource, $smallcase, $uppercase)"/> <xsl:text>&#13;&#10;</xsl:text>
ERUPTION DETAILS: <xsl:value-of select="translate(substring-after(@erupDetails,':::'), $smallcase, $uppercase)"/><xsl:text>&#13;&#10;</xsl:text>
RMK: <xsl:value-of select="translate(@remarks, $smallcase, $uppercase)"/> ...<xsl:value-of select="@forecasters"/><xsl:text>&#13;&#10;</xsl:text>
NXT ADVISORY: <xsl:value-of select="substring-after(@nextAdv,':::')"/> <xsl:text>&#13;&#10;</xsl:text>
</xsl:if>
</xsl:template>
</xsl:stylesheet>

View file

@ -0,0 +1,37 @@
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" encoding="UTF-8"/>
<xsl:include href="vaaAllHeader.xslt"/>
<xsl:include href="vaaCreateTEST.xslt"/>
<xsl:include href="vaaCreateRESUME.xslt"/>
<xsl:include href="vaaCreateBACKUP.xslt"/>
<xsl:include href="vaaEditNORMAL.xslt"/>
<xsl:include href="vaaEditEND.xslt"/>
<xsl:include href="vaaEditQUICK.xslt"/>
<xsl:include href="vaaEditNEAR.xslt"/>
<xsl:include href="vaaEditWATCH.xslt"/>
<xsl:include href="vaaAllFooter.xslt"/>
<xsl:template match="Volcano">
<xsl:apply-templates select="." mode="styleHEADER" />
<xsl:apply-templates select="." mode="styleTEST" />
<xsl:apply-templates select="." mode="styleRESUME" />
<xsl:apply-templates select="." mode="styleBACKUP" />
<xsl:apply-templates select="." mode="styleNORMAL" />
<xsl:apply-templates select="." mode="styleEND" />
<xsl:apply-templates select="." mode="styleQUICK" />
<xsl:apply-templates select="." mode="styleNEAR" />
<xsl:apply-templates select="." mode="styleWATCH" />
<xsl:apply-templates select="." mode="styleFOOTER" />
</xsl:template>
</xsl:stylesheet>

View file

@ -0,0 +1,176 @@
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:import href="getIssueTime.xlt"/>
<xsl:import href="fmtAnchor.xlt"/>
<xsl:output method = "text"/>
<!--
SAW.xlt
- generate WatchBOx SAW product
Change Log:
B. Yin/Chugach 03/10 Initial Coding
-->
<xsl:variable name="newline"><xsl:text>
</xsl:text></xsl:variable>
<xsl:template match="WatchBox">
<xsl:value-of select="$newline"/>
<xsl:text>WWUS30 KWNS </xsl:text>
<xsl:call-template name="getIssueTime"/>
<xsl:value-of select="$newline"/>
<xsl:text>SAW</xsl:text>
<xsl:value-of select="@watchNumber"/>
<xsl:value-of select="$newline"/>
<xsl:text> SPC AWW </xsl:text>
<xsl:call-template name="getIssueTime"/>
<xsl:value-of select="$newline"/>
<xsl:text>WW </xsl:text>
<xsl:value-of select="@watchNumber"/>
<xsl:text> </xsl:text>
<xsl:if test="@issueStatus = 'Test'">
<xsl:text> TEST </xsl:text>
</xsl:if>
<xsl:value-of select="@watchType"/>
<xsl:text> </xsl:text>
<xsl:for-each select="States">
<xsl:value-of select="."/>
<xsl:text> </xsl:text>
</xsl:for-each>
<xsl:call-template name="getIssueTime"/>
<xsl:text>Z</xsl:text>
<xsl:text> - </xsl:text>
<xsl:value-of select="substring(@expTime,9,2)"/>
<xsl:value-of select="substring(@expTime,12,2)"/>
<xsl:value-of select="substring(@expTime,15,2)"/>
<xsl:text>Z</xsl:text>
<xsl:value-of select="$newline"/>
<xsl:text>AXIS..</xsl:text>
<xsl:value-of select="@halfWidthSm"/>
<xsl:text> STATUE MILES</xsl:text>
<!-- Box shape -->
<xsl:variable name="box" select="@boxShape"/>
<xsl:choose>
<xsl:when test="contains($box, 'ESOL')"> EITH SIDE OF LINE..</xsl:when>
<xsl:when test="contains($box, 'NS')"> NORTH AND SOUTH OF LINE..</xsl:when>
<xsl:when test="contains($box, 'EW')"> EAST AND WEST OF LINE..</xsl:when>
</xsl:choose>
<xsl:value-of select="$newline"/>
<!-- Anchor point 1-->
<xsl:call-template name="fmtAnchor">
<xsl:with-param name="anchor" select="substring-before(@endPointAnc,' -')"/>
</xsl:call-template>
<xsl:text>/</xsl:text>
<xsl:for-each select="AnchorPoints">
<xsl:if test="position() = 1">
<xsl:variable name="anc" select="."/>
<xsl:value-of select='substring($anc,8)'/>
<xsl:text> </xsl:text>
<xsl:value-of select='substring($anc,5,2)'/>
</xsl:if>
</xsl:for-each>
<xsl:text>/</xsl:text>
<xsl:text> - </xsl:text>
<!-- Anchor point 2-->
<xsl:call-template name="fmtAnchor">
<xsl:with-param name="anchor" select="substring-after(@endPointAnc,'-')"/>
</xsl:call-template>
<xsl:text>/</xsl:text>
<xsl:for-each select="AnchorPoints">
<xsl:if test="position() = 2">
<xsl:variable name="anc" select="."/>
<xsl:value-of select='substring($anc,8)'/>
<xsl:text> </xsl:text>
<xsl:value-of select='substring($anc,5,2)'/>
</xsl:if>
</xsl:for-each>
<xsl:text>/</xsl:text>
<!-- VOR points -->
<xsl:value-of select="$newline"/>
<xsl:text>..AVIATION COORDS..</xsl:text>
<xsl:text> </xsl:text>
<xsl:value-of select="@halfWidthNm"/>
<xsl:text>NM </xsl:text>
<xsl:choose>
<xsl:when test="contains($box, 'ESOL')">EITH SIDE</xsl:when>
<xsl:when test="contains($box, 'NS')">N/S</xsl:when>
<xsl:when test="contains($box, 'EW')">E/W</xsl:when>
</xsl:choose>
<xsl:text> /</xsl:text>
<xsl:call-template name="fmtAnchor">
<xsl:with-param name="anchor" select="substring-before(@endPointVor,'-')"/>
</xsl:call-template>
<xsl:text>- </xsl:text>
<xsl:call-template name="fmtAnchor">
<xsl:with-param name="anchor" select="substring-after(@endPointVor,'-')"/>
</xsl:call-template>
<xsl:text>/ </xsl:text>
<xsl:value-of select="$newline"/>
<xsl:text>HAIL SURFACE AND ALOFT..</xsl:text>
<xsl:value-of select="@hailSize"/>
<xsl:text> INCHES. WIND GUSTS..</xsl:text>
<xsl:value-of select="@gust"/>
<xsl:text> KNOTS.</xsl:text>
<xsl:value-of select="$newline"/>
<xsl:text>MAX TOPS TO </xsl:text>
<xsl:value-of select="@top"/>
<xsl:text>. MEAN STORM MOTION VECTOR </xsl:text>
<xsl:value-of select="@moveDir"/>
<xsl:value-of select="@moveSpeed"/>
<xsl:text>.</xsl:text>
<!-- format corner points lat/lon -->
<xsl:value-of select="$newline"/>
<xsl:value-of select="$newline"/>
<xsl:text>LAT...LON</xsl:text>
<xsl:for-each select="Point">
<xsl:variable name="pos" select="position()"/>
<xsl:if test="$pos = 2 or $pos = 4 or $pos = 6 or $pos = 8">
<xsl:text> </xsl:text>
<xsl:variable name="lat" select="format-number(@Lat,'##.00')"/>
<xsl:value-of select="substring-before($lat,'.')"/>
<xsl:value-of select="substring-after($lat,'.')"/>
<xsl:text></xsl:text>
<xsl:variable name="lon" select="format-number(@Lon,'##.00')"/>
<xsl:value-of select="substring-before(substring-after($lon,'-'),'.')"/>
<xsl:value-of select="substring-after($lon,'.')"/>
</xsl:if>
</xsl:for-each>
<xsl:value-of select="$newline"/>
<xsl:value-of select="$newline"/>
<xsl:text>THIS IS AN APPROXIMATION TO THE WATCH AREA. FOR A</xsl:text>
<xsl:value-of select="$newline"/>
<xsl:text>COMPLETE DEPICTION OF THE WATCH SEE WOUS64 KWNS</xsl:text>
<xsl:value-of select="$newline"/>
<xsl:text>FOR WOU</xsl:text>
<xsl:value-of select="@watchNumber"/>
<xsl:text>.</xsl:text>
</xsl:template>
</xsl:stylesheet>

View file

@ -0,0 +1,294 @@
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:import href="getIssueTime.xlt"/>
<xsl:import href="getStateFullName.xlt"/>
<xsl:import href="fmtAnchor.xlt"/>
<xsl:import href="rmLeadingSpace.xlt"/>
<xsl:import href="wrapText.xlt"/>
<xsl:output method = "text"/>
<xsl:variable name="newline"><xsl:text>
</xsl:text></xsl:variable>
<xsl:variable name="tab"><xsl:text>&#x09;</xsl:text></xsl:variable>
<xsl:template match="WatchBox">
<xsl:value-of select="$newline"/>
<xsl:text>WWUS20 KWNS </xsl:text>
<xsl:call-template name="getIssueTime"/>
<xsl:value-of select="$newline"/>
<xsl:text>SEL</xsl:text>
<xsl:value-of select="@watchNumber"/>
<xsl:value-of select="$newline"/>
<xsl:text> SPC WW </xsl:text>
<xsl:call-template name="getIssueTime"/>
<xsl:value-of select="$newline"/>
<xsl:for-each select="States">
<xsl:value-of select="."/>
<xsl:text>Z000-</xsl:text>
</xsl:for-each>
<xsl:value-of select="substring(@expTime,9,2)"/>
<xsl:value-of select="substring(@expTime,12,2)"/>
<xsl:value-of select="substring(@expTime,15,2)"/>
<xsl:text>-</xsl:text>
<xsl:value-of select="$newline"/>
<xsl:value-of select="$newline"/>
<xsl:text>URGENT - IMMEDIATE BROADCAST REQUESTED</xsl:text>
<xsl:value-of select="@statesIncl"/>
<xsl:value-of select="$newline"/>
<xsl:if test="@issueStatus = 'Test'">
<xsl:text>TEST...</xsl:text>
</xsl:if>
<xsl:value-of select="@watchType"/>
<xsl:text> WATCH NUMBER </xsl:text>
<xsl:value-of select="@watchNumber"/>
<xsl:if test="@issueStatus = 'Test'">
<xsl:text>...TEST</xsl:text>
</xsl:if>
<xsl:value-of select="$newline"/>
<xsl:text>NWS STORM PREDICTION CENTER NORMAN OK</xsl:text>
<xsl:value-of select="$newline"/>
<xsl:value-of select="@issueTime"/>
<xsl:value-of select="$newline"/>
<xsl:value-of select="$newline"/>
<xsl:text>THE NWS STORM PREDICTION CENTER HAS ISSUED A</xsl:text>
<xsl:if test="@issueStatus = 'Test'">
<xsl:text>...TEST...</xsl:text>
</xsl:if>
<xsl:value-of select="$newline"/>
<xsl:value-of select="@watchType"/>
<xsl:text> WATCH FOR PORTIONS OF </xsl:text>
<xsl:value-of select="$newline"/>
<xsl:value-of select="$newline"/>
<xsl:for-each select="States">
<xsl:text> </xsl:text>
<xsl:call-template name="getStateFullName">
<xsl:with-param name="st" select="."/>
</xsl:call-template>
<xsl:value-of select="$newline"/>
</xsl:for-each>
<xsl:value-of select="$newline"/>
<xsl:value-of select="$newline"/>
<xsl:text>EFFECTIVE </xsl:text>
<xsl:value-of select="@issueTime"/>
<xsl:text> UNTIL </xsl:text>
<xsl:value-of select="@expTime"/>
<xsl:value-of select="$newline"/>
<xsl:value-of select="$newline"/>
<xsl:text>TORNADOES...HAIL TO </xsl:text>
<xsl:value-of select="@hailSize"/>
<xsl:text> INCHES IN DIAMETER...THUNDERSTORM WIND</xsl:text>
<xsl:value-of select="$newline"/>
<xsl:text>GUSTS TO </xsl:text>
<xsl:value-of select="@gust * 1.15"/>
<xsl:text> MPH...AND DANGEROUS LIGHTNING ARE POSSIBLE IN THESE </xsl:text>
<xsl:value-of select="$newline"/>
<xsl:text>AREAS.</xsl:text>
<xsl:value-of select="$newline"/>
<xsl:value-of select="$newline"/>
<xsl:text>THE </xsl:text>
<xsl:if test="@issueStatus = 'Test'">
<xsl:text>TEST </xsl:text>
</xsl:if>
<xsl:text>TORNADO WATCH AREA IS APPROXIMATELY ALONG AND </xsl:text>
<xsl:value-of select="@halfWidthSm"/>
<xsl:text> STATUTE</xsl:text>
<xsl:value-of select="$newline"/>
<xsl:variable name="longLine">
<xsl:text>MILES</xsl:text>
<xsl:variable name="box" select="@boxShape"/>
<xsl:choose>
<xsl:when test="contains($box, 'ESOL')"> EITH SIDE OF LINE </xsl:when>
<xsl:when test="contains($box, 'NS')"> NORTH AND SOUTH OF LINE </xsl:when>
<xsl:when test="contains($box, 'EW')"> EAST AND WEST OF LINE </xsl:when>
</xsl:choose>
<xsl:text>FROM </xsl:text>
<xsl:variable name="anc1">
<xsl:call-template name="rmLeadingSpace">
<xsl:with-param name="str" select="substring-before(@endPointAnc,'-')"/>
</xsl:call-template>
</xsl:variable>
<xsl:variable name="anc1a">
<xsl:call-template name="fmtAnchor">
<xsl:with-param name="anchor" select="substring-before(@endPointAnc,'-')"/>
</xsl:call-template>
</xsl:variable>
<xsl:value-of select="substring-before($anc1,' ')"/>
<xsl:text> MILES </xsl:text>
<xsl:call-template name="getFullDir">
<xsl:with-param name="str" select="substring-before($anc1a,' ')"/>
</xsl:call-template>
<xsl:text> OF </xsl:text>
<xsl:for-each select="AnchorPoints">
<xsl:variable name="anchor1" select="."/>
<xsl:if test="position() = 1">
<xsl:value-of select="substring($anchor1,8)"/>
<xsl:text> </xsl:text>
<xsl:call-template name="getStateFullName">
<xsl:with-param name="st" select="substring($anchor1,5,2)"/>
</xsl:call-template>
</xsl:if>
</xsl:for-each>
<xsl:text> TO </xsl:text>
<xsl:variable name="anc2">
<xsl:call-template name="rmLeadingSpace">
<xsl:with-param name="str" select="substring-after(@endPointAnc,'-')"/>
</xsl:call-template>
</xsl:variable>
<xsl:variable name="anc2a">
<xsl:call-template name="fmtAnchor">
<xsl:with-param name="anchor" select="substring-before(@endPointAnc,'-')"/>
</xsl:call-template>
</xsl:variable>
<xsl:value-of select="substring-before($anc2,' ')"/>
<xsl:text> MILES </xsl:text>
<xsl:call-template name="getFullDir">
<xsl:with-param name="str" select="substring-before($anc2a,' ')"/>
</xsl:call-template>
<xsl:text> OF </xsl:text>
<xsl:for-each select="AnchorPoints">
<xsl:variable name="anchor2" select="."/>
<xsl:if test="position() = 2">
<xsl:value-of select="substring($anchor2,8)"/>
<xsl:text> </xsl:text>
<xsl:call-template name="getStateFullName">
<xsl:with-param name="st" select="substring($anchor2,5,2)"/>
</xsl:call-template>
</xsl:if>
</xsl:for-each>
<xsl:text>. FOR A COMPLETE </xsl:text>
<xsl:text>DEPICTION OF THE WATCH SEE THE ASSOCIATED WATCH OUTLINE UPDATE</xsl:text>
<xsl:text>(WOUS64 KWNS WOU</xsl:text>
<xsl:value-of select="@watchNumber"/>
<xsl:text>).</xsl:text>
</xsl:variable>
<xsl:call-template name="wrapText">
<xsl:with-param name="str" select="$longLine"/>
<xsl:with-param name="charPerLine" select="65"/>
<xsl:with-param name="sep" select="' '"/>
</xsl:call-template>
<xsl:value-of select="$newline"/>
<xsl:value-of select="$newline"/>
<xsl:text>REMEMBER...A TORNADO WATCH MEANS CONDITIONS ARE FAVORABLE FOR</xsl:text>
<xsl:value-of select="$newline"/>
<xsl:text>TORNADOES AND SEVERE THUNDERSTORMS IN AND CLOSE TO THE WATCH</xsl:text>
<xsl:value-of select="$newline"/>
<xsl:text>AREA. PERSONS IN THESE AREAS SHOULD BE ON THE LOOKOUT FOR</xsl:text>
<xsl:value-of select="$newline"/>
<xsl:text>THREATENING WEATHER CONDITIONS AND LISTEN FOR LATER STATEMENTS</xsl:text>
<xsl:value-of select="$newline"/>
<xsl:text>AND POSSIBLE WARNINGS.</xsl:text>
<xsl:value-of select="$newline"/>
<xsl:value-of select="$newline"/>
<xsl:text>DISCUSSION...</xsl:text>
<xsl:if test="@issueStatus = 'Test'">
<xsl:text>...THIS IS A TEST...THIS IS A TEST... </xsl:text>
</xsl:if>
<xsl:value-of select="$newline"/>
<xsl:value-of select="$newline"/>
<xsl:text>AVIATION...TORNADOES AND A FEW SEVERE THUNDERSTORMS WITH HAIL</xsl:text>
<xsl:value-of select="$newline"/>
<xsl:text>SURFACE AND ALOFT TO </xsl:text>
<xsl:value-of select="@hailSize"/>
<xsl:text> INCHES. EXTREME TURBULENCE AND SURFACE</xsl:text>
<xsl:value-of select="$newline"/>
<xsl:text>WIND GUSTS TO </xsl:text>
<xsl:value-of select="@gust"/>
<xsl:text> KNOTS. A FEW CUMULONIMBI WITH MAXIMUM TOPS TO</xsl:text>
<xsl:value-of select="$newline"/>
<xsl:value-of select="@top"/>
<xsl:text>. MEAN STORM MOTION VECTOR </xsl:text>
<xsl:value-of select="@moveDir"/>
<xsl:value-of select="@moveSpeed"/>
<xsl:value-of select="$newline"/>
<xsl:value-of select="$newline"/>
<xsl:text>...</xsl:text>
<xsl:value-of select="@forecaster"/>
</xsl:template>
<xsl:template name="getFullDir">
<xsl:param name="str"/>
<xsl:choose>
<xsl:when test="contains($str, 'NNE')">
<xsl:text>NORTH NORTHEAST</xsl:text>
</xsl:when>
<xsl:when test="contains($str, 'ENE')">
<xsl:text>EAST NORTHEAST</xsl:text>
</xsl:when>
<xsl:when test="contains($str, 'ESE')">
<xsl:text>EAST SOUTHEAST</xsl:text>
</xsl:when>
<xsl:when test="contains($str, 'SSE')">
<xsl:text>SOUTH SOUTHEAST</xsl:text>
</xsl:when>
<xsl:when test="contains($str, 'SSW')">
<xsl:text>SOUTH SOUTHWEST</xsl:text>
</xsl:when>
<xsl:when test="contains($str, 'WSW')">
<xsl:text>WEST SOUTHWEST</xsl:text>
</xsl:when>
<xsl:when test="contains($str, 'WNW')">
<xsl:text>WEST NORTHWEST</xsl:text>
</xsl:when>
<xsl:when test="contains($str, 'NNW')">
<xsl:text>NORTH NORTHWEST</xsl:text>
</xsl:when>
<xsl:when test="contains($str, 'NE')">
<xsl:text>NORTHEAST</xsl:text>
</xsl:when>
<xsl:when test="contains($str, 'SE')">
<xsl:text>SOUTHEAST</xsl:text>
</xsl:when>
<xsl:when test="contains($str, 'SW')">
<xsl:text>SOUTHWEST</xsl:text>
</xsl:when>
<xsl:when test="contains($str, 'NW')">
<xsl:text>NORTHWEST</xsl:text>
</xsl:when>
<xsl:when test="contains($str, 'W')">
<xsl:text>WEST</xsl:text>
</xsl:when>
<xsl:when test="contains($str, 'N')">
<xsl:text>NORTH</xsl:text>
</xsl:when>
<xsl:when test="contains($str, 'S')">
<xsl:text>SOUTH</xsl:text>
</xsl:when>
<xsl:when test="contains($str, 'E')">
<xsl:text>EAST</xsl:text>
</xsl:when>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>

View file

@ -0,0 +1,79 @@
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:import href="getIssueTime.xlt"/>
<xsl:import href="getCountiesInState.xlt"/>
<xsl:import href="getStateFullName.xlt"/>
<xsl:output method = "text"/>
<!--
SEV.xlt
- generate Watch Box SEV product
Change Log:
B. Yin/Chugach 03/10 Initial Coding
-->
<xsl:variable name="newline"><xsl:text>
</xsl:text></xsl:variable>
<xsl:template match="WatchBox">
<xsl:value-of select="$newline"/>
<xsl:text>WWUS50 KWNS </xsl:text>
<xsl:call-template name="getIssueTime"/>
<xsl:value-of select="$newline"/>
<xsl:text>SEV</xsl:text>
<xsl:value-of select="@watchNumber"/>
<xsl:value-of select="$newline"/>
<xsl:value-of select="$newline"/>
<xsl:text>.</xsl:text>
<xsl:if test="@issueStatus = 'Test'">
<xsl:text> TEST </xsl:text>
</xsl:if>
<xsl:text>TORNADO WATCH #</xsl:text>
<xsl:value-of select="@watchNumber"/>
<xsl:text> HAS BEEN ISSUED BY THE NWS STORM PREDICTION CENTER</xsl:text>
<xsl:value-of select="$newline"/>
<xsl:value-of select="$newline"/>
<xsl:text>EFFECTIVE </xsl:text>
<xsl:value-of select="@issueTime"/>
<xsl:text> UNTIL </xsl:text>
<xsl:value-of select="@expTime"/>
<xsl:value-of select="$newline"/>
<xsl:text>$$</xsl:text>
<!-- get watch counties in each state-->
<xsl:for-each select="States">
<xsl:variable name="stName">
<xsl:call-template name="getStateFullName">
<xsl:with-param name="st" select="."/>
</xsl:call-template>
</xsl:variable>
<xsl:if test="not($stName='COASTAL WATERS')">
<xsl:value-of select="$newline"/>
<xsl:value-of select="$newline"/>
<xsl:value-of select="."/>
<xsl:value-of select="$newline"/>
<xsl:text>. </xsl:text>
<xsl:value-of select="$stName"/>
<xsl:text> COUNTIES INCLUDED ARE </xsl:text>
<xsl:value-of select="$newline"/>
<xsl:value-of select="$newline"/>
<xsl:call-template name="getCountiesInState">
<xsl:with-param name="state" select="."/>
</xsl:call-template>
<xsl:value-of select="$newline"/>
<xsl:text>$$</xsl:text>
</xsl:if>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>

View file

@ -0,0 +1,189 @@
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:import href="getIssueTime.xlt"/>
<xsl:import href="getCountiesInState.xlt"/>
<xsl:import href="getCoastalWaters.xlt"/>
<xsl:import href="getStateLine.xlt"/>
<xsl:import href="getStateFullName.xlt"/>
<xsl:import href="wrapText.xlt"/>
<xsl:output method = "text"/>
<!--
WOU.xlt
- generate watch box WOU product
Change Log:
B. Yin/Chugach 03/10 Initial Coding
-->
<xsl:variable name="newline"><xsl:text>
</xsl:text></xsl:variable>
<xsl:variable name="tab"><xsl:text>&#x09;</xsl:text></xsl:variable>
<xsl:template match="WatchBox">
<xsl:value-of select="$newline"/>
<xsl:text>WOUS64 KWNS </xsl:text>
<xsl:call-template name="getIssueTime"/>
<xsl:value-of select="$newline"/>
<xsl:text>WOU</xsl:text>
<xsl:value-of select="@watchNumber"/>
<xsl:value-of select="$newline"/>
<xsl:value-of select="$newline"/>
<xsl:text>BULLETIN - IMMEDIATE BROADCAST REQUESTED</xsl:text>
<xsl:value-of select="$newline"/>
<xsl:if test="@issueStatus = 'Test'">
<xsl:text>TEST...</xsl:text>
</xsl:if>
<xsl:text>TORNADO WATCH OUTLINE UPDATE FOR WT </xsl:text>
<xsl:value-of select="@watchNumber"/>
<xsl:if test="@issueStatus = 'Test'">
<xsl:text>...TEST</xsl:text>
</xsl:if>
<xsl:value-of select="$newline"/>
<xsl:text>NWS STORM PREDICTION CENTER NORMAN OK</xsl:text>
<xsl:value-of select="$newline"/>
<xsl:value-of select="@issueTime"/>
<xsl:value-of select="$newline"/>
<xsl:value-of select="$newline"/>
<xsl:text>TORNADO WATCH </xsl:text>
<xsl:value-of select="@watchNumber"/>
<xsl:text> IS IN EFFECT UNTIL </xsl:text>
<xsl:value-of select="@expTime"/>
<xsl:text> FOR THE </xsl:text>
<xsl:value-of select="$newline"/>
<xsl:text> FOLLOWING LOCATIONS </xsl:text>
<xsl:variable name="itime" select="@issueTime"/>
<xsl:variable name="etime" select="@expTime"/>
<xsl:variable name="wnumber" select="@watchNumber"/>
<!--generate contents for every state -->
<xsl:for-each select="States">
<xsl:value-of select="$newline"/>
<xsl:value-of select="$newline"/>
<xsl:variable name="longLine">
<xsl:call-template name="getStateLine">
<xsl:with-param name="state" select="."/>
</xsl:call-template>
</xsl:variable>
<xsl:call-template name="wrapText">
<xsl:with-param name="str" select="$longLine"/>
<xsl:with-param name="charPerLine" select="65"/>
<xsl:with-param name="sep" select="'-'"/>
</xsl:call-template>
<xsl:value-of select="substring($etime,9,2)"/>
<xsl:value-of select="substring($etime,12,2)"/>
<xsl:value-of select="substring($etime,15,2)"/>
<xsl:value-of select="$newline"/>
<xsl:text>/O.NEW.KWNS.TO.A.</xsl:text>
<xsl:call-template name="padZero">
<xsl:with-param name="cnt" select="4 - string-length($wnumber)"/>
</xsl:call-template>
<xsl:value-of select="$wnumber"/>
<xsl:text>.</xsl:text>
<xsl:value-of select="substring($itime,3,2)"/>
<xsl:value-of select="substring($itime,6,2)"/>
<xsl:value-of select="substring($itime,9,2)"/>
<xsl:text>T</xsl:text>
<xsl:value-of select="substring($itime,12,2)"/>
<xsl:value-of select="substring($itime,15,2)"/>
<xsl:text>Z</xsl:text>
<xsl:text>-</xsl:text>
<xsl:value-of select="substring($etime,3,2)"/>
<xsl:value-of select="substring($etime,6,2)"/>
<xsl:value-of select="substring($etime,9,2)"/>
<xsl:text>T</xsl:text>
<xsl:value-of select="substring($etime,12,2)"/>
<xsl:value-of select="substring($etime,15,2)"/>
<xsl:text>Z</xsl:text>
<xsl:text>/</xsl:text>
<xsl:value-of select="$newline"/>
<xsl:value-of select="$newline"/>
<xsl:variable name="stName">
<xsl:call-template name="getStateFullName">
<xsl:with-param name="st" select="."/>
</xsl:call-template>
</xsl:variable>
<xsl:choose>
<xsl:when test="$stName='COASTAL WATERS'">
<xsl:text>CW</xsl:text>
<xsl:value-of select="$newline"/>
<xsl:text>. </xsl:text>
<xsl:text>ADJACENT COASTAL WATERS INCLUDED ARE </xsl:text>
<xsl:value-of select="$newline"/>
<xsl:call-template name="getCoastalWaters">
<xsl:with-param name="state" select="."/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="."/>
<xsl:value-of select="$newline"/>
<xsl:text>. </xsl:text>
<xsl:value-of select="$stName"/>
<xsl:choose>
<xsl:when test="$stName='LOUISIANA'">
<xsl:text> PARISHES INCLUDED ARE </xsl:text>
</xsl:when>
<xsl:otherwise>
<xsl:text> COUNTIES INCLUDED ARE </xsl:text>
</xsl:otherwise>
</xsl:choose>
<xsl:value-of select="$newline"/>
<xsl:value-of select="$newline"/>
<xsl:call-template name="getCountiesInState">
<xsl:with-param name="state" select="."/>
</xsl:call-template>
<xsl:value-of select="$newline"/>
</xsl:otherwise>
</xsl:choose>
<xsl:text>$$</xsl:text>
</xsl:for-each>
<xsl:value-of select="$newline"/>
<xsl:value-of select="$newline"/>
<xsl:value-of select="$newline"/>
<xsl:text>ATTN...WFO...</xsl:text>
<xsl:value-of select="@wfos"/>
</xsl:template>
<!--
print zeros
parameter:
cnt - number of zeros to print
-->
<xsl:template name="padZero">
<xsl:param name="cnt"/>
<xsl:if test="$cnt > 0 ">
<xsl:text>0</xsl:text>
<xsl:call-template name="padZero">
<xsl:with-param name="cnt" select="$cnt - 1"/>
</xsl:call-template>
</xsl:if>
</xsl:template>
</xsl:stylesheet>

View file

@ -0,0 +1,126 @@
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method = "text"/>
<!--
WatchText.xlt
- generate formatted Watch text
Change Log:
B. Yin/Chugach 03/10 Initial Coding
-->
<xsl:variable name="newline"><xsl:text>
</xsl:text></xsl:variable>
<xsl:template match="WatchBox">
<xsl:value-of select="$newline"/>
<xsl:text>WATCH NUMBER: </xsl:text>
<xsl:value-of select="@watchNumber"/>
<xsl:value-of select="$newline"/>
<xsl:text>TYPE: </xsl:text>
<xsl:value-of select="@watchType"/>
<xsl:value-of select="$newline"/>
<xsl:text>PDS/NORMAL: </xsl:text>
<xsl:value-of select="@severity"/>
<xsl:value-of select="$newline"/>
<xsl:text>ISSUE TIME: </xsl:text>
<xsl:value-of select="@issueTime"/>
<xsl:value-of select="$newline"/>
<xsl:text>VALID TIME: </xsl:text>
<xsl:value-of select="@issueTime"/>
<xsl:value-of select="$newline"/>
<xsl:text>EXPIRATION TIME: </xsl:text>
<xsl:value-of select="@expTime"/>
<xsl:value-of select="$newline"/>
<xsl:text>ENDPOINT (ANC,sm): </xsl:text>
<xsl:value-of select="@endPointAnc"/>
<xsl:value-of select="$newline"/>
<xsl:text>ENDPOINT (VOR,nm): </xsl:text>
<xsl:value-of select="@endPointVor"/>
<xsl:value-of select="$newline"/>
<xsl:text>ATTRIB (ANC,sm): </xsl:text>
<xsl:value-of select="@halfWidthSm"/>
<xsl:value-of select="$newline"/>
<xsl:text>ATTRIB (VOR,nm): </xsl:text>
<xsl:value-of select="@halfWidthNm"/>
<xsl:for-each select="Point">
<xsl:variable name="pos" select="position()"/>
<xsl:if test="$pos = 2 or $pos = 4 or $pos = 6 or $pos = 8">
<xsl:value-of select="$newline"/>
<xsl:text>WATCH CORNER POINT: </xsl:text>
<xsl:value-of select="format-number(@Lat,'##.00')"/>
<xsl:text> </xsl:text>
<xsl:value-of select="format-number(@Lon,'##.00')"/>
</xsl:if>
</xsl:for-each>
<xsl:value-of select="$newline"/>
<xsl:text>HAIL SIZE (in): </xsl:text>
<xsl:value-of select="@hailSize"/>
<xsl:value-of select="$newline"/>
<xsl:text>MAX GUSTS (kts): </xsl:text>
<xsl:value-of select="@gust"/>
<xsl:value-of select="$newline"/>
<xsl:text>MAX TOPS (100s ft): </xsl:text>
<xsl:value-of select="@top"/>
<xsl:value-of select="$newline"/>
<xsl:text>MOTION (deg,kts): </xsl:text>
<xsl:value-of select="@moveDir"/>
<xsl:text> </xsl:text>
<xsl:value-of select="@moveSpeed"/>
<xsl:value-of select="$newline"/>
<xsl:text>TIME ZONE: </xsl:text>
<xsl:value-of select="@timeZone"/>
<xsl:value-of select="$newline"/>
<xsl:text>REPL WATCH NUMBER: </xsl:text>
<xsl:value-of select="@replWatch"/>
<xsl:value-of select="$newline"/>
<xsl:text>STATES INCLUDED: </xsl:text>
<xsl:for-each select="States">
<xsl:value-of select="."/>
<xsl:text> </xsl:text>
</xsl:for-each>
<xsl:value-of select="$newline"/>
<xsl:text>STATUS: </xsl:text>
<xsl:value-of select="@issueStatus"/>
<xsl:value-of select="$newline"/>
<xsl:text>FORECASTER: </xsl:text>
<xsl:value-of select="@forecaster"/>
<xsl:value-of select="$newline"/>
<xsl:text>WATCH AREA (sq nm): </xsl:text>
<xsl:value-of select="@watchAreaNm"/>
<xsl:value-of select="$newline"/>
<xsl:text> UGC State County Name Lat/Lon FIPS WFO</xsl:text>
<xsl:value-of select="$newline"/>
<xsl:for-each select="Counties">
<xsl:value-of select="."/>
<xsl:value-of select="$newline"/>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>

View file

@ -0,0 +1,44 @@
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:import href="rmLeadingSpace.xlt"/>
<xsl:output method = "text"/>
<!--
fmtAnchor.xlt
- format the anchor point text(distance direction name).
for instance, "25 NW DCA"
Change Log:
B. Yin/Chugach 03/10 Initial Coding
-->
<xsl:template name="fmtAnchor">
<xsl:param name="anchor"/>
<!-- get the distance string-->
<xsl:variable name="acr1">
<xsl:call-template name="rmLeadingSpace">
<xsl:with-param name="str" select="$anchor"/>
</xsl:call-template>
</xsl:variable>
<xsl:value-of select="substring-before($acr1,' ')"/>
<!-- get the direction string-->
<xsl:variable name="acr1a">
<xsl:call-template name="rmLeadingSpace">
<xsl:with-param name="str" select="substring-after($acr1,' ')"/>
</xsl:call-template>
</xsl:variable>
<xsl:value-of select="substring-before($acr1a,' ')"/>
<xsl:text> </xsl:text>
<!-- get the name string-->
<xsl:call-template name="rmLeadingSpace">
<xsl:with-param name="str" select="substring-after($acr1a,' ')"/>
</xsl:call-template>
</xsl:template>
</xsl:stylesheet>

View file

@ -0,0 +1,33 @@
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:import href="wrapText.xlt"/>
<xsl:output method = "text"/>
<xsl:variable name="newline"><xsl:text>
</xsl:text></xsl:variable>
<!--
getCoastalWaters.xlt
- generate the coastal waters in the watch are in the input state.
Change Log:
B. Yin/Chugach 05/10 Initial Coding
-->
<xsl:template name="getCoastalWaters">
<xsl:param name="state"/>
<xsl:for-each select="/Products/Product/Layer/DrawableElement/DECollection/DrawableElement/WatchBox/Counties[substring(.,8,2) = $state]">
<xsl:value-of select="$newline"/>
<!-- get the county string -->
<xsl:variable name="zonestr" select="substring(.,52)"/>
<xsl:call-template name="wrapText">
<xsl:with-param name="str" select="$zonestr"/>
<xsl:with-param name="charPerLine" select="65"/>
<xsl:with-param name="sep" select="' '"/>
</xsl:call-template>
<xsl:value-of select="$newline"/>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>

View file

@ -0,0 +1,107 @@
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method = "text"/>
<xsl:variable name="newline"><xsl:text>
</xsl:text></xsl:variable>
<!--
getCountiesInState.xlt
- generate the county list in the watch are in the input state.
Change Log:
B. Yin/Chugach 03/10 Initial Coding
-->
<xsl:template name="getCountiesInState">
<xsl:param name="state"/>
<xsl:for-each select="/Products/Product/Layer/DrawableElement/DECollection/DrawableElement/WatchBox/Counties[substring(.,8,2) = $state]">
<!-- get the county string -->
<xsl:variable name="cntystr" select="substring(.,13)"/>
<!-- get the county name -->
<xsl:variable name="county">
<xsl:call-template name="getCntyName">
<xsl:with-param name="cnty" select="$cntystr"/>
<xsl:with-param name="idx" select="1"/>
</xsl:call-template>
</xsl:variable>
<xsl:value-of select="$county"/>
<!-- add space to line up the counties-->
<xsl:call-template name="addSpace">
<xsl:with-param name="cnt" select="20 - string-length($county)"/>
</xsl:call-template>
<!-- add a line break every three counties-->
<xsl:if test="position() mod 3 = 0 and not(position() = last())">
<xsl:value-of select="$newline"/>
</xsl:if>
</xsl:for-each>
</xsl:template>
<!--
getSpace
- add spaces at the current position.
- cnt: number of spaces to add.
Change Log:
B. Yin/Chugach 03/10 Initial Coding
-->
<xsl:template name="addSpace">
<xsl:param name="cnt"/>
<xsl:if test="$cnt > 0 ">
<xsl:text> </xsl:text>
<xsl:call-template name="addSpace">
<xsl:with-param name="cnt" select="$cnt - 1"/>
</xsl:call-template>
</xsl:if>
</xsl:template>
<!--
getCntyName
- get the county from the county string in watch element xml.
- cnty: county string
- idx: the county string is looped thrugh from position idx.
- in the watch element county name is followed by lat/lon
the county string is looped until a digital is found,
Change Log:
B. Yin/Chugach 03/10 Initial Coding
-->
<xsl:template name="getCntyName">
<xsl:param name="cnty"/>
<xsl:param name="idx"/>
<xsl:if test="string-length($cnty) > $idx">
<!-- get one character at position idx -->
<xsl:variable name="oneChar" select="substring($cnty,$idx,1)"/>
<!-- if the character is a number, stop, return string before the position.
otherwise, continue searching.
-->
<xsl:choose>
<xsl:when test="$oneChar=1 or $oneChar=2 or $oneChar=3 or $oneChar=4
or $oneChar=5 or $oneChar=6 or $oneChar=7 or $oneChar=8
or $oneChar=9">
<xsl:value-of select="substring($cnty,1,$idx - 1)"/>
</xsl:when>
<xsl:otherwise>
<xsl:call-template name="getCntyName">
<xsl:with-param name="cnty" select="$cnty"/>
<xsl:with-param name="idx" select="$idx + 1"/>
</xsl:call-template>
</xsl:otherwise>
</xsl:choose>
</xsl:if>
</xsl:template>
</xsl:stylesheet>

View file

@ -0,0 +1,21 @@
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method = "text"/>
<!--
getIssueTime.xlt
- get the issue time of the watch in format:
DDHHMM
Change Log:
B. Yin/Chugach 03/10 Initial Coding
-->
<xsl:template name="getIssueTime">
<xsl:value-of select="substring(@issueTime,9,2)"/>
<xsl:value-of select="substring(@issueTime,12,2)"/>
<xsl:value-of select="substring(@issueTime,15,2)"/>
</xsl:template>
</xsl:stylesheet>

View file

@ -0,0 +1,198 @@
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method = "text"/>
<!--
getStateFullName.xlt
- get state full name from abbreviation
Change Log:
B. Yin/Chugach 03/10 Initial Coding
-->
<xsl:template name="getStateFullName">
<xsl:param name="st"/>
<xsl:choose>
<xsl:when test="$st = 'AL'">
<xsl:text>ALABAMA</xsl:text>
</xsl:when>
<xsl:when test="$st = 'AK'">
<xsl:text>ALASKA</xsl:text>
</xsl:when>
<xsl:when test="$st = 'AS'">
<xsl:text>AMERICAN SAMOA</xsl:text>
</xsl:when>
<xsl:when test="$st = 'AZ'">
<xsl:text>ARIZONA</xsl:text>
</xsl:when>
<xsl:when test="$st = 'AR'">
<xsl:text>ARKANSAS</xsl:text>
</xsl:when>
<xsl:when test="$st = 'CA'">
<xsl:text>CALIFORNIA</xsl:text>
</xsl:when>
<xsl:when test="$st = 'CO'">
<xsl:text>COLORADO</xsl:text>
</xsl:when>
<xsl:when test="$st = 'CT'">
<xsl:text>CONNECTICUT</xsl:text>
</xsl:when>
<xsl:when test="$st = 'DE'">
<xsl:text>DELAWARE</xsl:text>
</xsl:when>
<xsl:when test="$st = 'DC'">
<xsl:text>DISTRICT OF COLUMBIA</xsl:text>
</xsl:when>
<xsl:when test="$st = 'FL'">
<xsl:text>FLORIDA</xsl:text>
</xsl:when>
<xsl:when test="$st = 'GA'">
<xsl:text>GEORGIA</xsl:text>
</xsl:when>
<xsl:when test="$st = 'GU'">
<xsl:text>GUAM</xsl:text>
</xsl:when>
<xsl:when test="$st = 'HI'">
<xsl:text>HAWAII</xsl:text>
</xsl:when>
<xsl:when test="$st = 'ID'">
<xsl:text>IDAHO</xsl:text>
</xsl:when>
<xsl:when test="$st = 'IL'">
<xsl:text>ILLINOIS</xsl:text>
</xsl:when>
<xsl:when test="$st = 'IN'">
<xsl:text>INDIANA</xsl:text>
</xsl:when>
<xsl:when test="$st = 'IA'">
<xsl:text>IOWA</xsl:text>
</xsl:when>
<xsl:when test="$st = 'KS'">
<xsl:text>KANSAS</xsl:text>
</xsl:when>
<xsl:when test="$st = 'KY'">
<xsl:text>KENTUCKY</xsl:text>
</xsl:when>
<xsl:when test="$st = 'LA'">
<xsl:text>LOUISIANA</xsl:text>
</xsl:when>
<xsl:when test="$st = 'ME'">
<xsl:text>MAINE</xsl:text>
</xsl:when>
<xsl:when test="$st = 'MH'">
<xsl:text>MARSHALL ISLANDS</xsl:text>
</xsl:when>
<xsl:when test="$st = 'MD'">
<xsl:text>MARYLAND</xsl:text>
</xsl:when>
<xsl:when test="$st = 'MA'">
<xsl:text>MASSACHUSETTS</xsl:text>
</xsl:when>
<xsl:when test="$st = 'MI'">
<xsl:text>MICHIGAN</xsl:text>
</xsl:when>
<xsl:when test="$st = 'MN'">
<xsl:text>MINNESOTA</xsl:text>
</xsl:when>
<xsl:when test="$st = 'MS'">
<xsl:text>MISSISSIPPI</xsl:text>
</xsl:when>
<xsl:when test="$st = 'MO'">
<xsl:text>MISSOURI</xsl:text>
</xsl:when>
<xsl:when test="$st = 'MT'">
<xsl:text>MONTANA</xsl:text>
</xsl:when>
<xsl:when test="$st = 'NE'">
<xsl:text>NEBRASKA</xsl:text>
</xsl:when>
<xsl:when test="$st = 'NV'">
<xsl:text>NEVADA</xsl:text>
</xsl:when>
<xsl:when test="$st = 'NH'">
<xsl:text>NEW HAMPSHIRE</xsl:text>
</xsl:when>
<xsl:when test="$st = 'NJ'">
<xsl:text>NEW JERSEY</xsl:text>
</xsl:when>
<xsl:when test="$st = 'NM'">
<xsl:text>NEW MEXICO</xsl:text>
</xsl:when>
<xsl:when test="$st = 'NY'">
<xsl:text>NEW YORK</xsl:text>
</xsl:when>
<xsl:when test="$st = 'NC'">
<xsl:text>NORTH CAROLINA</xsl:text>
</xsl:when>
<xsl:when test="$st = 'ND'">
<xsl:text>NORTH DAKOTA</xsl:text>
</xsl:when>
<xsl:when test="$st = 'MP'">
<xsl:text>NORTHERN MARIANA ISLANDS</xsl:text>
</xsl:when>
<xsl:when test="$st = 'OH'">
<xsl:text>OHIO</xsl:text>
</xsl:when>
<xsl:when test="$st = 'OK'">
<xsl:text>OKLAHOMA</xsl:text>
</xsl:when>
<xsl:when test="$st = 'OR'">
<xsl:text>OREGON</xsl:text>
</xsl:when>
<xsl:when test="$st = 'PW'">
<xsl:text>PALAU</xsl:text>
</xsl:when>
<xsl:when test="$st = 'PA'">
<xsl:text>PENNSYLVANIA</xsl:text>
</xsl:when>
<xsl:when test="$st = 'PR'">
<xsl:text>PUERTO RICO</xsl:text>
</xsl:when>
<xsl:when test="$st = 'RI'">
<xsl:text>RHODE ISLAND</xsl:text>
</xsl:when>
<xsl:when test="$st = 'SC'">
<xsl:text>SOUTH CAROLINA</xsl:text>
</xsl:when>
<xsl:when test="$st = 'SD'">
<xsl:text>SOUTH DAKOTA</xsl:text>
</xsl:when>
<xsl:when test="$st = 'TN'">
<xsl:text>TENNESSEE</xsl:text>
</xsl:when>
<xsl:when test="$st = 'TX'">
<xsl:text>TEXAS</xsl:text>
</xsl:when>
<xsl:when test="$st = 'UT'">
<xsl:text>UTAH</xsl:text>
</xsl:when>
<xsl:when test="$st = 'VT'">
<xsl:text>VERMONT</xsl:text>
</xsl:when>
<xsl:when test="$st = 'VI'">
<xsl:text>VIRGIN ISLANDS</xsl:text>
</xsl:when>
<xsl:when test="$st = 'VA'">
<xsl:text>VIRGINIA</xsl:text>
</xsl:when>
<xsl:when test="$st = 'WA'">
<xsl:text>WASHINGTON</xsl:text>
</xsl:when>
<xsl:when test="$st = 'WV'">
<xsl:text>WEST VIRGINIA</xsl:text>
</xsl:when>
<xsl:when test="$st = 'WI'">
<xsl:text>WISCONSIN</xsl:text>
</xsl:when>
<xsl:when test="$st = 'WY'">
<xsl:text>WYOMING</xsl:text>
</xsl:when>
<xsl:otherwise>
<xsl:text>COASTAL WATERS</xsl:text>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>

View file

@ -0,0 +1,32 @@
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method = "text"/>
<xsl:variable name="newline"><xsl:text>
</xsl:text></xsl:variable>
<!--
getStateLine.xlt
- generate the line with state name followed by county numbers.
for instance: VAC105-203-097-901-
Change Log:
B. Yin/Chugach 03/10 Initial Coding
-->
<xsl:template name="getStateLine">
<xsl:param name="state"/>
<xsl:value-of select="$state"/>
<xsl:text>C</xsl:text>
<xsl:for-each select="/Products/Product/Layer/DrawableElement/WatchBox/Counties[substring(.,8,2) = $state]">
<xsl:value-of select="substring(.,4,3)"/>
<xsl:text>-</xsl:text>
<xsl:if test="position() mod 14 = 0 and not(position() = last())">
<xsl:value-of select="$newline"/>
</xsl:if>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>

View file

@ -0,0 +1,29 @@
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method = "text"/>
<!--
rmLeadingSpace.xlt
- remove leading ' '.
Change Log:
B. Yin/Chugach 03/10 Initial Coding
-->
<xsl:template name="rmLeadingSpace">
<xsl:param name="str"/>
<xsl:if test="substring($str,1,1) = ' ' ">
<xsl:call-template name="rmLeadingSpace">
<xsl:with-param name="str" select="substring($str,2,string-length($str) - 1)"/>
</xsl:call-template>
</xsl:if>
<xsl:if test="not(substring($str,1,1) = ' ')">
<xsl:value-of select="$str"/>
</xsl:if>
</xsl:template>
</xsl:stylesheet>

View file

@ -0,0 +1,91 @@
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method = "text"/>
<xsl:variable name="newline"><xsl:text>
</xsl:text></xsl:variable>
<!--
wrapText.xlt
- Wrap the input string with line length charPerLine.
The line break will be put at the input character 'sep'.
Change Log:
B. Yin/Chugach 03/10 Initial Coding
-->
<xsl:template name="wrapText">
<xsl:param name="str"/>
<xsl:param name="sep"/>
<xsl:param name="charPerLine"/>
<xsl:choose>
<xsl:when test="string-length($str) > $charPerLine">
<xsl:choose>
<!-- if the last char is sep, put a line break-->
<xsl:when test="substring($str,$charPerLine + 1, 1) = $sep">
<xsl:value-of select="substring($str,1,$charPerLine)"/>
<xsl:call-template name="wrapText">
<xsl:with-param name="str" select="substring($str,$charPerLine + 1)"/>
<xsl:with-param name="charPerLine" select="$charPerLine"/>
<xsl:with-param name="sep" select="$sep"/>
</xsl:call-template>
</xsl:when>
<!-- if the last char is not sep, search the last sep
then put a line break-->
<xsl:otherwise>
<xsl:variable name="line1">
<xsl:call-template name="getLastSep">
<xsl:with-param name="str" select="substring($str,1, $charPerLine)"/>
<xsl:with-param name="sep" select="$sep"/>
</xsl:call-template>
</xsl:variable>
<xsl:value-of select="$line1"/>
<xsl:value-of select="$newline"/>
<xsl:call-template name="wrapText">
<xsl:with-param name="str" select="substring-after($str,$line1)"/>
<xsl:with-param name="charPerLine" select="$charPerLine"/>
<xsl:with-param name="sep" select="$sep"/>
</xsl:call-template>
</xsl:otherwise>
</xsl:choose>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$str"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<!--
getLastSep
- get the string with last sep in the input string
Change Log:
B. Yin/Chugach 03/10 Initial Coding
-->
<xsl:template name="getLastSep">
<xsl:param name="str"/>
<xsl:param name="sep"/>
<xsl:choose>
<xsl:when test="contains($str,$sep)">
<xsl:value-of select="substring-before($str,$sep)"/>
<xsl:value-of select="$sep"/>
<xsl:variable name="newStr" select="substring-after($str,$sep)"/>
<xsl:call-template name="getLastSep">
<xsl:with-param name="str" select="$newStr"/>
<xsl:with-param name="sep" select="$sep"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<!--xsl:value-of select="$str"/-->
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>

View file

@ -0,0 +1,218 @@
/*
* gov.noaa.nws.ncep.ui.pgen.tools.IncDecDlg
*
* August 2011
*
* This code has been developed by the NCEP/SIB for use in the AWIPS2 system.
*/
package gov.noaa.nws.ncep.ui.pgen.attrDialog;
import gov.noaa.nws.ncep.ui.pgen.PgenUtil;
import gov.noaa.nws.ncep.ui.pgen.display.IAttribute;
import gov.noaa.nws.ncep.ui.pgen.tools.PgenIncDecTool;
import gov.noaa.nws.ncep.ui.pgen.tools.PgenIncDecTool.PgenIncDecHandler;
import gov.noaa.nws.ncep.ui.pgen.tools.PgenInterpolationTool;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.VerifyEvent;
import org.eclipse.swt.events.VerifyListener;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Spinner;
import com.raytheon.uf.viz.core.exception.VizException;
/**
* Create a dialog for PGEN Inc/Dec action.
*
* <pre>
* SOFTWARE HISTORY
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* 08/11 #? B. Yin Initial creation.
*
* </pre>
*
* @author
* @version 1
*/
public class IncDecDlg extends AttrDlg {
static IncDecDlg INSTANCE = null;
private Composite top = null;
private Spinner interval = null;
private int intervalValue = 1;
private PgenIncDecTool tool;
/**
* Private constructor
* @param parShell
* @throws VizException
*/
private IncDecDlg( Shell parShell ) throws VizException {
super( parShell );
}
/**
* Creates an Inc/Dec dialog if the dialog does not exist
* and returns the instance. If the dialog exists, return the instance.
*
* @param parShell
* @return
*/
public static IncDecDlg getInstance( Shell parShell ) {
if ( INSTANCE == null ){
try {
INSTANCE = new IncDecDlg( parShell );
} catch (VizException e) {
e.printStackTrace();
}
}
return INSTANCE;
}
/*
* (non-Javadoc)
* Create all of the widgets on the Dialog
*
* @see org.eclipse.jface.dialogs.Dialog#createDialogArea(org.eclipse.swt.widgets.Composite)
*/
@Override
public Control createDialogArea( Composite parent ) {
top = (Composite) super.createDialogArea( parent );
// Create the main layout for the shell.
GridLayout mainLayout = new GridLayout();
mainLayout.marginTop = 5;
mainLayout.marginWidth = 1;
top.setLayout( mainLayout );
// Initialize all of the menus, controls, and layouts
initializeComponents();
return top;
}
/**
* Put the 'Deselect' and the 'Exit' buttons on the button bar.
*/
@Override
public void createButtonsForButtonBar( Composite parent ) {
super.createButtonsForButtonBar(parent);
this.getButton(IDialogConstants.CANCEL_ID).setEnabled(true);
this.getButton(IDialogConstants.OK_ID).setEnabled(true);
this.getButton(IDialogConstants.CANCEL_ID).setText("Deselect");
this.getButton(IDialogConstants.OK_ID).setText("Exit");
}
/**
* Creates buttons, menus, and other controls in the dialog area
* @param listener
*/
private void initializeComponents() {
this.getShell().setText( "Inc/Dec Editor" );
/*
* Create spinner for Inc/Dec interval
*/
interval = new Spinner(top, SWT.BORDER|SWT.CENTER);
interval.setMinimum(-10000);
interval.setMaximum(10000);
interval.setSelection(intervalValue);
interval.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, true, true, 1, 1));
}
/*
*
* (non-Javadoc)
* @see org.eclipse.jface.dialogs.Dialog#buttonPressed(int)
*/
@Override
protected void buttonPressed(int buttonId) {
((PgenIncDecHandler)tool.getMouseHandler()).cleanup();
if ( buttonId == IDialogConstants.OK_ID ){
PgenUtil.setSelectingMode();
this.close();
}
}
/**
* Sets values of all attributes of the dialog.
*/
@Override
public void setAttrForDlg( IAttribute attr ){
}
/**
* Returns the interval value from the Spinner
* @return
*/
public int getInterval() {
return interval.getSelection();
}
@Override
public boolean close(){
if ( this.getShell() != null )intervalValue = interval.getSelection();
return super.close();
}
public void setTool(PgenIncDecTool tool) {
this.tool = tool;
}
public PgenIncDecTool getTool() {
return tool;
}
/**
* An SWT VerifyListener that checks to make sure the only text input allowed
* is a numeric digit, backspace, or delete character.
* @author sgilbert
*
*/
class DigitVerifyListener implements VerifyListener {
@Override
public void verifyText(VerifyEvent e) {
final char BACKSPACE = 0x08;
final char DELETE = 0x7F;
if ( Character.isDigit(e.character) ||
e.character == BACKSPACE || e.character == DELETE ) e.doit = true;
else {
e.doit = false;
Display.getCurrent().beep();
}
}
}
}

View file

@ -0,0 +1,5 @@
package gov.noaa.nws.ncep.ui.pgen.display;
public interface ITCMWindCircle {
public double[] getQuatro();
}

View file

@ -0,0 +1,341 @@
//
// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.3 in JDK 1.6
// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a>
// Any modifications to this file will be lost upon recompilation of the source schema.
// Generated on: 2009.10.05 at 02:15:43 PM EDT
//
package gov.noaa.nws.ncep.ui.pgen.file;
import gov.noaa.nws.ncep.ui.pgen.elements.tcm.TcmWindQuarters;
import gov.noaa.nws.ncep.ui.pgen.elements.tcm.TcmFcst;
import java.util.ArrayList;
import java.util.List;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
import javax.xml.datatype.XMLGregorianCalendar;
import com.raytheon.uf.common.serialization.adapters.CoordAdapter;
import com.vividsolutions.jts.geom.Coordinate;
/**
* <p>Java class for anonymous complex type.
*
* <p>The following schema fragment specifies the expected content contained within this class.
*
* <pre>
* &lt;complexType>
* &lt;complexContent>
* &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
* &lt;sequence>
* &lt;/sequence>
* &lt;attribute name="stormNumber" type="{http://www.w3.org/2001/XMLSchema}int" />
* &lt;attribute name="stormName" type="{http://www.w3.org/2001/XMLSchema}string" />
* &lt;attribute name="basin" type="{http://www.w3.org/2001/XMLSchema}string" />
* &lt;attribute name="stormType" type="{http://www.w3.org/2001/XMLSchema}string" />
* &lt;attribute name="advisoryNumber" type="{http://www.w3.org/2001/XMLSchema}int" />
* &lt;attribute name="advisoryTime" type="{http://www.w3.org/2001/XMLSchema}dateTime" />
* &lt;attribute name="pgenType" type="{http://www.w3.org/2001/XMLSchema}string" />
* &lt;attribute name="pgenCategory" type="{http://www.w3.org/2001/XMLSchema}string" />
* &lt;/restriction>
* &lt;/complexContent>
* &lt;/complexType>
* </pre>
*
*
*/
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "")
@XmlRootElement(name = "TCM")
public class TCM {
@XmlAttribute
protected Integer stormNumber;
@XmlAttribute
protected String stormName;
@XmlAttribute
protected String basin;
@XmlAttribute
protected String stormType;
@XmlAttribute
protected Integer advisoryNumber;
@XmlAttribute
protected XMLGregorianCalendar advisoryTime;
@XmlAttribute
protected Integer eyeSize;
@XmlAttribute
protected Integer positionAccuracy;
@XmlAttribute
protected Boolean correction;
@XmlAttribute
protected Integer centralPressure;
@XmlAttribute
protected String pgenType;
@XmlAttribute
protected String pgenCategory;
@XmlElement(name="waves")
protected TcmWindQuarters tcmWaves;
@XmlElement(name="fcst")
protected ArrayList<TcmFcst> tcmFcst;
/**
* Gets the value of the stormNumber property.
*
* @return
* possible object is
* {@link Integer }
*
*/
public Integer getStormNumber() {
return stormNumber;
}
/**
* Sets the value of the stormNumber property.
*
* @param value
* allowed object is
* {@link Integer }
*
*/
public void setStormNumber(Integer value) {
this.stormNumber = value;
}
/**
* Gets the value of the stormName property.
*
* @return
* possible object is
* {@link String }
*
*/
public String getStormName() {
return stormName;
}
/**
* Sets the value of the stormName property.
*
* @param value
* allowed object is
* {@link String }
*
*/
public void setStormName(String value) {
this.stormName = value;
}
/**
* Gets the value of the basin property.
*
* @return
* possible object is
* {@link String }
*
*/
public String getBasin() {
return basin;
}
/**
* Sets the value of the basin property.
*
* @param value
* allowed object is
* {@link String }
*
*/
public void setBasin(String value) {
this.basin = value;
}
/**
* Gets the value of the stormType property.
*
* @return
* possible object is
* {@link String }
*
*/
public String getStormType() {
return stormType;
}
/**
* Sets the value of the stormType property.
*
* @param value
* allowed object is
* {@link String }
*
*/
public void setStormType(String value) {
this.stormType = value;
}
/**
* Gets the value of the advisoryNumber property.
*
* @return
* possible object is
* {@link String }
*
*/
public Integer getAdvisoryNumber() {
return advisoryNumber;
}
/**
* Sets the value of the advisoryNumber property.
*
* @param value
* allowed object is
* {@link String }
*
*/
public void setAdvisoryNumber(Integer value) {
this.advisoryNumber = value;
}
/**
* Gets the value of the advisoryTime property.
*
* @return
* possible object is
* {@link XMLGregorianCalendar }
*
*/
public XMLGregorianCalendar getAdvisoryTime() {
return advisoryTime;
}
/**
* Sets the value of the advisoryTime property.
*
* @param value
* allowed object is
* {@link XMLGregorianCalendar }
*
*/
public void setAdvisoryTime(XMLGregorianCalendar value) {
this.advisoryTime = value;
}
/**
* Gets the value of the pgenType property.
*
* @return
* possible object is
* {@link String }
*
*/
public String getPgenType() {
return pgenType;
}
/**
* Sets the value of the pgenType property.
*
* @param value
* allowed object is
* {@link String }
*
*/
public void setPgenType(String value) {
this.pgenType = value;
}
/**
* Gets the value of the pgenCategory property.
*
* @return
* possible object is
* {@link String }
*
*/
public String getPgenCategory() {
return pgenCategory;
}
/**
* Sets the value of the pgenCategory property.
*
* @param value
* allowed object is
* {@link String }
*
*/
public void setPgenCategory(String value) {
this.pgenCategory = value;
}
/**
* @return the advisories
*/
public ArrayList<TcmFcst> getTcmFcst() {
return tcmFcst;
}
/**
* @param advisories the advisories to set
*/
public void setTcmFcst( List<TcmFcst> tcmFcst) {
this.tcmFcst = (ArrayList<TcmFcst>) tcmFcst;
}
public Integer getEyeSize() {
return eyeSize;
}
public void setEyeSize(Integer eyeSize) {
this.eyeSize = eyeSize;
}
public Integer getPositionAccuracy() {
return positionAccuracy;
}
public void setPositionAccuracy(Integer positionAccuracy) {
this.positionAccuracy = positionAccuracy;
}
public Boolean getCorrection() {
return correction;
}
public void setCorrection(Boolean correction) {
this.correction = correction;
}
public Integer getCentralPressure() {
return centralPressure;
}
public void setCentralPressure(Integer centralPressure) {
this.centralPressure = centralPressure;
}
public TcmWindQuarters getTcmWaves() {
return tcmWaves;
}
public void setTcmWaves(TcmWindQuarters tcmWaves) {
this.tcmWaves = tcmWaves;
}
}

View file

@ -0,0 +1,406 @@
/*
* gov.noaa.nws.ncep.ui.pgen.tools.PgenIncDecTool
*
* 17 August 2011
*
* This code has been developed by the NCEP/SIB for use in the AWIPS2 system.
*/
package gov.noaa.nws.ncep.ui.pgen.tools;
import gov.noaa.nws.ncep.ui.pgen.PgenSession;
import gov.noaa.nws.ncep.ui.pgen.PgenUtil;
import gov.noaa.nws.ncep.ui.pgen.attrDialog.IncDecDlg;
import gov.noaa.nws.ncep.ui.pgen.elements.AbstractDrawableComponent;
import gov.noaa.nws.ncep.ui.pgen.elements.DrawableElement;
import gov.noaa.nws.ncep.ui.pgen.elements.DrawableElementFactory;
import gov.noaa.nws.ncep.ui.pgen.elements.DrawableType;
import gov.noaa.nws.ncep.ui.pgen.elements.Line;
import gov.noaa.nws.ncep.ui.pgen.elements.Text;
import gov.noaa.nws.ncep.ui.pgen.filter.AcceptFilter;
import gov.noaa.nws.ncep.ui.pgen.rsc.PgenResource;
import java.awt.Color;
import java.awt.Polygon;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.eclipse.swt.SWT;
import com.raytheon.uf.viz.core.rsc.IInputHandler;
import com.vividsolutions.jts.geom.Coordinate;
/**
* Implements PGEN palette Inc/Dec functions.
*
* <pre>
* SOFTWARE HISTORY
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* 08/11 ? B. Yin Initial Creation.
* </pre>
*
* @author B. Yin
*/
public class PgenIncDecTool extends AbstractPgenDrawingTool {
/*
* (non-Javadoc)
*
* @see com.raytheon.viz.ui.tools.AbstractTool#runTool()
*/
@Override
protected void activateTool( ) {
super.activateTool();
if ( attrDlg != null && attrDlg instanceof IncDecDlg ){
((IncDecDlg)attrDlg).setTool(this);
}
}
/*
* (non-Javadoc)
*
* @see com.raytheon.viz.ui.tools.AbstractModalTool#deactivateTool()
*/
@Override
public void deactivateTool() {
super.deactivateTool();
PgenIncDecHandler pidh = (PgenIncDecHandler) mouseHandler;
if (pidh != null) pidh.cleanup();
}
@Override
/**
* Get the MultiSelect mouse handler.
*/
public IInputHandler getMouseHandler() {
if ( this.mouseHandler == null ) {
this.mouseHandler = new PgenIncDecHandler();
}
return this.mouseHandler;
}
/**
* Implements input handler for mouse events.
* @author bingfan
*
*/
public class PgenIncDecHandler extends InputHandlerDefaultImpl {
//x of the first mouse click
private int theFirstMouseX;
//y of the first mouse click
private int theFirstMouseY;
//flag to indicate if an area is selecting
private boolean selectRect;
private boolean shiftDown;
List<Coordinate> polyPoints;
/*
* (non-Javadoc)
*
* @see com.raytheon.viz.ui.input.IInputHandler#handleMouseDown(int,
* int, int)
*/
@Override
public boolean handleMouseDown(int anX, int aY, int button) {
theFirstMouseX = anX;
theFirstMouseY = aY;
if ( button == 1 ) {
return true;
}
else if ( button == 3 ) {
List<AbstractDrawableComponent> txtList = drawingLayer.getAllSelected();
if ( (polyPoints == null || polyPoints.isEmpty()) &&( txtList == null || txtList.isEmpty() )){
// Close the attribute dialog and do the cleanup.
if ( attrDlg != null ) {
attrDlg.close();
}
attrDlg = null;
pgenCategory = null;
pgenType = null;
drawingLayer.removeGhostLine();
drawingLayer.removeSelected();
mapEditor.refresh();
PgenUtil.setSelectingMode();
}
else {
if ( polyPoints != null && !polyPoints.isEmpty() ){
// System.out.println("poly poins");
}
else {
try {
List<AbstractDrawableComponent> newTxtList = new ArrayList<AbstractDrawableComponent>();
for (AbstractDrawableComponent adc : drawingLayer.getAllSelected() ){
if ( adc instanceof Text ){
Text newTxt = (Text)adc.copy();
newTxt.setText( new String[]{String.valueOf(Integer.parseInt(((Text)adc).getText()[0]) + ((IncDecDlg)attrDlg).getInterval())});
newTxtList.add(newTxt);
}
}
List<AbstractDrawableComponent>oldList = new ArrayList<AbstractDrawableComponent>();
oldList.addAll(drawingLayer.getAllSelected());
drawingLayer.replaceElements(oldList, newTxtList);
}
catch ( NumberFormatException nfe ){
}
drawingLayer.removeSelected();
mapEditor.refresh();
}
}
return false;
}
else{
return false;
}
}
/*
* (non-Javadoc)
*
* @see com.raytheon.viz.ui.input.IInputHandler#handleMouseDownMove(int,
* int, int)
*/
public boolean handleMouseDownMove(int anX, int aY, int button) {
if (button != 1 ) {
return false;
}
selectRect = true;
//draw the selected area
ArrayList<Coordinate> points = new ArrayList<Coordinate>();
points.add(mapEditor.translateClick(theFirstMouseX, theFirstMouseY));
points.add(mapEditor.translateClick(theFirstMouseX, aY));
points.add(mapEditor.translateClick(anX, aY));
points.add(mapEditor.translateClick(anX, theFirstMouseY));
DrawableElementFactory def = new DrawableElementFactory();
Line ghost = (Line)def.create(DrawableType.LINE, null,
"Lines", "LINE_SOLID", points, drawingLayer.getActiveLayer());
ghost.setLineWidth(1.0f);
ghost.setColors(new Color[]{new java.awt.Color( 255,255,255), new java.awt.Color( 255,255,255)});
ghost.setClosed(true);
ghost.setSmoothFactor(0);
drawingLayer.setGhostLine(ghost);
mapEditor.refresh();
return true;
}
/*
* (non-Javadoc)
*
* @see com.raytheon.viz.ui.input.IInputHandler#handleMouseUp(int, int,
* int)
*/
@Override
public boolean handleMouseUp(int anX, int aY, int button) {
if ( button == 1 ){
if ( shiftDown && !selectRect) {
if ( polyPoints == null ){
polyPoints = new ArrayList<Coordinate>();
}
polyPoints.add(new Coordinate(anX, aY));
}
else if ( selectRect ){
//select elements in the rectangle
int[] xpoints = { theFirstMouseX, theFirstMouseX, anX, anX };
int[] ypoints = { theFirstMouseY, aY, aY, theFirstMouseY };
Polygon rectangle = new Polygon(xpoints, ypoints, 4);
drawingLayer.addSelected(inPoly(rectangle));
drawingLayer.removeGhostLine();
selectRect = false;
}
else{
//Check if mouse is in geographic extent
Coordinate loc = mapEditor.translateClick(anX, aY);
if ( loc == null ) return false;
// Get the nearest element
DrawableElement el = drawingLayer.getNearestElement( loc, new AcceptFilter());
if ( drawingLayer.getAllSelected().contains(el)){
drawingLayer.removeSelected(el);
}
else if ( el != null && el instanceof Text){
try{
Integer.parseInt(((Text)el).getString()[0]);
drawingLayer.addSelected(el);
}
catch ( NumberFormatException nfe ){
}
}
}
}
else if ( button == 3 ){
if ( polyPoints != null ){
if ( polyPoints.size() > 2 ){
int[] xpoints = new int[polyPoints.size()];
int[] ypoints = new int[polyPoints.size()];
for ( int ii = 0; ii < polyPoints.size(); ii++){
xpoints[ii] = (int) polyPoints.get(ii).x;
ypoints[ii] = (int) polyPoints.get(ii).y;
}
Polygon poly = new Polygon(xpoints, ypoints, polyPoints.size());
drawingLayer.addSelected(inPoly(poly));
drawingLayer.removeGhostLine();
}
polyPoints.clear();
shiftDown = false;
}
}
mapEditor.setFocus();
mapEditor.refresh();
return true;
}
/**
* Return Text elements that contain only numbers in the input area.
* @param poly
* @return
*/
private List<Text> inPoly( Polygon poly){
Iterator<AbstractDrawableComponent> it = drawingLayer.getActiveLayer().getComponentIterator();
List<Text> txtList = new ArrayList<Text>();
while (it.hasNext()){
AbstractDrawableComponent adc = it.next();
if ( adc instanceof Text ){
Coordinate pt = ((Text)adc).getLocation();
double pix[] = mapEditor.translateInverseClick(pt);
if( poly.contains(pix[0], pix[1])){
try{
Integer.parseInt(((Text)adc).getString()[0]);
txtList.add((Text)adc);
}
catch ( NumberFormatException nfe ){
}
}
}
}
return txtList;
}
@Override
public boolean handleMouseMove(int anX, int aY) {
// draw a ghost ploygon
if ( polyPoints != null && !polyPoints.isEmpty() ){
polyPoints.add(new Coordinate(anX, aY));
if (polyPoints.size() > 1 ){
ArrayList<Coordinate> points = new ArrayList<Coordinate>();
for ( Coordinate loc : polyPoints ){
points.add(mapEditor.translateClick(loc.x, loc.y));
}
DrawableElementFactory def = new DrawableElementFactory();
Line ghost = (Line)def.create(DrawableType.LINE, null,
"Lines", "LINE_SOLID", points, drawingLayer.getActiveLayer());
ghost.setLineWidth(1.0f);
ghost.setColors(new Color[]{new java.awt.Color( 255,255,255), new java.awt.Color( 255,255,255)});
ghost.setClosed(true);
ghost.setSmoothFactor(0);
drawingLayer.setGhostLine(ghost);
}
mapEditor.refresh();
polyPoints.remove(polyPoints.size()-1);
}
return true;
}
@Override
public boolean handleKeyDown(int keyCode) {
if ( keyCode == SWT.SHIFT) {
shiftDown = true;
}
else if(keyCode == SWT.DEL){
PgenResource pResource = PgenSession.getInstance().getPgenResource();
pResource.deleteSelectedElements();
}
return true;
}
@Override
public boolean handleKeyUp(int keyCode) {
if ( keyCode == SWT.SHIFT) {
shiftDown = false;
}
return true;
}
public void cleanup(){
drawingLayer.removeSelected();
mapEditor.refresh();
selectRect = false;
shiftDown = false;
if ( polyPoints != null ) polyPoints.clear();
}
}
}

View file

@ -0,0 +1,183 @@
/*
* gov.noaa.nws.ncep.ui.pgen.rsc.PgenTCMDrawingTool
*
* 6 September 2011
*
* This code has been developed by the NCEP/SIB for use in the AWIPS2 system.
*/
package gov.noaa.nws.ncep.ui.pgen.tools;
import gov.noaa.nws.ncep.ui.pgen.PgenUtil;
import gov.noaa.nws.ncep.ui.pgen.attrDialog.TcmAttrDlg;
import gov.noaa.nws.ncep.ui.pgen.elements.AbstractDrawableComponent;
import gov.noaa.nws.ncep.ui.pgen.elements.DrawableElement;
import gov.noaa.nws.ncep.ui.pgen.elements.DrawableElementFactory;
import gov.noaa.nws.ncep.ui.pgen.elements.tcm.Tcm;
import java.util.ArrayList;
import com.raytheon.uf.viz.core.rsc.IInputHandler;
import com.vividsolutions.jts.geom.Coordinate;
/**
* Implements a modal map tool for PGEN TCM drawing.
*
* <pre>
* SOFTWARE HISTORY
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* 09/11 ? B. Yin Initial Creation for TCM
* 12/11 565 B. Yin change return values for mouse handlers
* inorder for panning to work correctly
*
* </pre>
*
* @author B. Yin
*/
public class PgenTcmDrawingTool extends AbstractPgenDrawingTool {
public PgenTcmDrawingTool(){
super();
}
/*
* Invoked by the CommandService when starting this tool
*
* @see com.raytheon.viz.ui.tools.AbstractTool#runTool()
*/
@Override
protected void activateTool( ) {
super.activateTool();
DrawableElement elem = null;
if ( event.getTrigger() instanceof Tcm ) elem = (Tcm)event.getTrigger();
if ( attrDlg instanceof TcmAttrDlg ) {
if ( elem != null ) attrDlg.setAttrForDlg( elem );
((TcmAttrDlg)attrDlg).setTcm((Tcm)elem);
}
return;
}
/**
* Returns the current mouse handler.
* @return
*/
public IInputHandler getMouseHandler() {
if ( this.mouseHandler == null ) {
this.mouseHandler = new PgenTCMDrawingHandler();
}
return this.mouseHandler;
}
/**
* Implements input handler for mouse events.
* @author jun
*
*/
public class PgenTCMDrawingHandler extends InputHandlerDefaultImpl {
/**
* Points of the new element.
*/
private ArrayList<Coordinate> points = new ArrayList<Coordinate>();
/**
* Current element.
*/
private AbstractDrawableComponent elem;
/**
* An instance of DrawableElementFactory, which is used to
* create new elements.
*/
private DrawableElementFactory def = new DrawableElementFactory();
/*
* (non-Javadoc)
*
* @see com.raytheon.viz.ui.input.IInputHandler#handleMouseDown(int,
* int, int)
*/
@Override
public boolean handleMouseDown(int anX, int aY, int button) {
// Check if mouse is in geographic extent
//Coordinate loc = mapEditor.translateClick(anX, aY);
if ( button == 1 ) {
// create an element.
// elem = (DrawableElement)def.create(DrawableType.TCM_QUATRO, (IAttribute)attrDlg,
// pgenCategory, pgenType, loc,
// drawingLayer.getActiveLayer());
// drawingLayer.addElement(elem);
return false;
}
else if ( button == 3 ) {
drawingLayer.removeGhostLine();
mapEditor.refresh();
if ( points.size() == 0 ) {
PgenUtil.setSelectingMode();
}
else {
points.clear();
}
return true;
}
else if ( button == 2 ){
return false;
}
else{
return false;
}
}
/*
* (non-Javadoc)
*
* @see com.raytheon.viz.ui.input.IInputHandler#handleMouseMove(int,
* int)
*/
@Override
public boolean handleMouseMove(int x, int y) {
return false;
}
@Override
public boolean handleMouseDownMove(int x, int y, int mouseButton) {
return false;
}
}
}

View file

@ -0,0 +1,551 @@
<?xml version="1.0" encoding="UTF-8"?>
<SoundingModels xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="SoundingModels.xsd">
<SoundingModel>
<Name>Standard</Name>
<swLat>-90.0</swLat>
<swLon>0.0</swLon>
<neLat>90.0</neLat>
<neLon>360.0</neLon>
<validStartDate/>
<validEndDate/>
<SoundingLevels>
<levelValues>
<pressure>1013.25</pressure>
<temperature>15.00</temperature>
<height>0.00</height>
</levelValues>
<levelValues>
<pressure>1000.00</pressure>
<temperature>14.20</temperature>
<height>111.00</height>
</levelValues>
<levelValues>
<pressure>975.00</pressure>
<temperature>13.00</temperature>
<height>323.00</height>
</levelValues>
<levelValues>
<pressure>950.00</pressure>
<temperature>11.40</temperature>
<height>540.00</height>
</levelValues>
<levelValues>
<pressure>925.00</pressure>
<temperature>10.00</temperature>
<height>762.00</height>
</levelValues>
<levelValues>
<pressure>900.00</pressure>
<temperature>8.60</temperature>
<height>989.00</height>
</levelValues>
<levelValues>
<pressure>875.00</pressure>
<temperature>7.00</temperature>
<height>1220.00 </height>
</levelValues>
<levelValues>
<pressure>850.00</pressure>
<temperature>5.60</temperature>
<height>1457.00</height>
</levelValues>
<levelValues>
<pressure>825.00</pressure>
<temperature>4.00</temperature>
<height>1700.00</height>
</levelValues>
<levelValues>
<pressure>800.00</pressure>
<temperature>2.40</temperature>
<height>1949.00</height>
</levelValues>
<levelValues>
<pressure>775.00</pressure>
<temperature>0.60</temperature>
<height>2204.00</height>
</levelValues>
<levelValues>
<pressure>750.00</pressure>
<temperature>-1.00</temperature>
<height>2466.00</height>
</levelValues>
<levelValues>
<pressure>725.00</pressure>
<temperature>-2.70</temperature>
<height>2735.00</height>
</levelValues>
<levelValues>
<pressure>700.00</pressure>
<temperature>-4.50</temperature>
<height>3012.00</height>
</levelValues>
<levelValues>
<pressure>675.00</pressure>
<temperature>-6.50</temperature>
<height>3297.00</height>
</levelValues>
<levelValues>
<pressure>650.00</pressure>
<temperature>-8.30</temperature>
<height>3591.00</height>
</levelValues>
<levelValues>
<pressure>625.00</pressure>
<temperature>-10.30</temperature>
<height>3894.00</height>
</levelValues>
<levelValues>
<pressure>600.00</pressure>
<temperature>-12.30</temperature>
<height>4206.00</height>
</levelValues>
<levelValues>
<pressure>575.00</pressure>
<temperature>-14.50</temperature>
<height>4530.00</height>
</levelValues>
<levelValues>
<pressure>550.00</pressure>
<temperature>-16.70</temperature>
<height>4865.00</height>
</levelValues>
<levelValues>
<pressure>525.00</pressure>
<temperature>-18.90</temperature>
<height>5213.00</height>
</levelValues>
<levelValues>
<pressure>500.00</pressure>
<temperature>-21.30</temperature>
<height>5574.00</height>
</levelValues>
<levelValues>
<pressure>475.00</pressure>
<temperature>-23.70</temperature>
<height>5951.00</height>
</levelValues>
<levelValues>
<pressure>450.00</pressure>
<temperature>-26.30</temperature>
<height>6344.00</height>
</levelValues>
<levelValues>
<pressure>425.00</pressure>
<temperature>-28.90</temperature>
<height>6755.00</height>
</levelValues>
<levelValues>
<pressure>400.00</pressure>
<temperature>-31.70</temperature>
<height>7185.00</height>
</levelValues>
<levelValues>
<pressure>375.00</pressure>
<temperature>-34.70</temperature>
<height>7639.00</height>
</levelValues>
<levelValues>
<pressure>350.00</pressure>
<temperature>-37.70</temperature>
<height>8117.00</height>
</levelValues>
<levelValues>
<pressure>325.00</pressure>
<temperature>-41.10</temperature>
<height>8624.00</height>
</levelValues>
<levelValues>
<pressure>300.00</pressure>
<temperature>-44.50</temperature>
<height>9164.00</height>
</levelValues>
<levelValues>
<pressure>275.00</pressure>
<temperature>-48.30</temperature>
<height>9741.00</height>
</levelValues>
<levelValues>
<pressure>250.00</pressure>
<temperature>-52.30</temperature>
<height>10363.00</height>
</levelValues>
<levelValues>
<pressure>226.00</pressure>
<temperature>-56.50</temperature>
<height>11000.00</height>
</levelValues>
<levelValues>
<pressure>225.00</pressure>
<temperature>-56.50</temperature>
<height>11037.00</height>
</levelValues>
<levelValues>
<pressure>200.00</pressure>
<temperature>-56.50</temperature>
<height>11784.00</height>
</levelValues>
<levelValues>
<pressure>175.00</pressure>
<temperature>-56.50</temperature>
<height>12631.00</height>
</levelValues>
<levelValues>
<pressure>150.00</pressure>
<temperature>-56.50</temperature>
<height>13608.00</height>
</levelValues>
<levelValues>
<pressure>125.00</pressure>
<temperature>-56.50</temperature>
<height>14765.00</height>
</levelValues>
<levelValues>
<pressure>100.00</pressure>
<temperature>-56.50</temperature>
<height>16180.00</height>
</levelValues>
<levelValues>
<pressure>75.00</pressure>
<temperature>-56.50</temperature>
<height>18004.00</height>
</levelValues>
<levelValues>
<pressure>55.00</pressure>
<temperature>-56.50</temperature>
<height>20000.00</height>
</levelValues>
<levelValues>
<pressure>50.00</pressure>
<temperature>-55.90</temperature>
<height>20576.00</height>
</levelValues>
<levelValues>
<pressure>25.00</pressure>
<temperature>-51.50</temperature>
<height>25029.00</height>
</levelValues>
</SoundingLevels>
</SoundingModel> <!-- Standard -->
<SoundingModel>
<Name>Winter-15deg</Name>
<swLat>15.0</swLat>
<swLon>0.0</swLon>
<neLat>90.0</neLat>
<neLon>360.0</neLon>
<validStartDate>winter</validStartDate>
<validEndDate>winter</validEndDate>
<SoundingLevels>
<levelValues>
<pressure>1013.00</pressure>
<temperature>26.60</temperature>
<height>0.00</height>
</levelValues>
<levelValues>
<pressure>780.00</pressure>
<temperature>14.00</temperature>
<height>2300.00</height>
</levelValues>
<levelValues>
<pressure>757.00</pressure>
<temperature>13.80</temperature>
<height>2500.00</height>
</levelValues>
<levelValues>
<pressure>103.00</pressure>
<temperature>-79.90</temperature>
<height>16500.00</height>
</levelValues>
</SoundingLevels>
</SoundingModel>
<SoundingModel>
<Name>Winter-30deg</Name>
<swLat>30.0</swLat>
<swLon>0.0</swLon>
<neLat>90.0</neLat>
<neLon>360.0</neLon>
<validStartDate>winter</validStartDate>
<validEndDate>winter</validEndDate>
<SoundingLevels>
<levelValues>
<pressure>1013.00</pressure>
<temperature>14.00</temperature>
<height>0.00</height>
</levelValues>
<levelValues>
<pressure>804.00</pressure>
<temperature>8.00</temperature>
<height>2000.00</height>
</levelValues>
<levelValues>
<pressure>203.00</pressure>
<temperature>-56.90</temperature>
<height>12000.00</height>
</levelValues>
<levelValues>
<pressure>145.00</pressure>
<temperature>-69.90</temperature>
<height>14000.00</height>
</levelValues>
</SoundingLevels>
</SoundingModel>
<SoundingModel>
<Name>Winter-45deg</Name>
<swLat>45.0</swLat>
<swLon>0.0</swLon>
<neLat>90.0</neLat>
<neLon>360.0</neLon>
<validStartDate>winter</validStartDate>
<validEndDate>winter</validEndDate>
<SoundingLevels>
<levelValues>
<pressure>1018.00</pressure>
<temperature>-.90</temperature>
<height>0.00</height>
</levelValues>
<levelValues>
<pressure>694.00</pressure>
<temperature>-11.50</temperature>
<height>3000.00</height>
</levelValues>
<levelValues>
<pressure>257.00</pressure>
<temperature>-53.50</temperature>
<height>10000.00</height>
</levelValues>
<levelValues>
<pressure>171.00</pressure>
<temperature>-64.90</temperature>
<height>12600.00</height>
</levelValues>
</SoundingLevels>
</SoundingModel>
<SoundingModel>
<Name>Winter-60deg</Name>
<swLat>60.0</swLat>
<swLon>0.0</swLon>
<neLat>90.0</neLat>
<neLon>360.0</neLon>
<validStartDate>winter</validStartDate>
<validEndDate>winter</validEndDate>
<SoundingLevels>
<levelValues>
<pressure>1013.00</pressure>
<temperature>-13.70</temperature>
<height>0.00</height>
</levelValues>
<levelValues>
<pressure>888.00</pressure>
<temperature>-13.9</temperature>
<height>1000.00</height>
</levelValues>
<levelValues>
<pressure>636.00</pressure>
<temperature>-21.90</temperature>
<height>3500.00</height>
</levelValues>
<levelValues>
<pressure>307.00</pressure>
<temperature>-55.90</temperature>
<height>8500.00</height>
</levelValues>
</SoundingLevels>
</SoundingModel>
<SoundingModel>
<Name>Winter-75deg</Name>
<swLat>75.0</swLat>
<swLon>0.0</swLon>
<neLat>90.0</neLat>
<neLon>360.0</neLon>
<validStartDate>winter</validStartDate>
<validEndDate>winter</validEndDate>
<SoundingLevels>
<levelValues>
<pressure>1013.00</pressure>
<temperature>-19.3</temperature>
<height>0.00</height>
</levelValues>
<levelValues>
<pressure>828.00</pressure>
<temperature>-19.5</temperature>
<height>1500.00</height>
</levelValues>
<levelValues>
<pressure>299.00</pressure>
<temperature>-57.9</temperature>
<height>8500.00</height>
</levelValues>
<levelValues>
<pressure>185.00</pressure>
<temperature>-159.5</temperature>
<height>11500.00</height>
</levelValues>
</SoundingLevels>
</SoundingModel>
<SoundingModel>
<Name>Summer-15deg</Name>
<swLat>15.0</swLat>
<swLon>0.0</swLon>
<neLat>90.0</neLat>
<neLon>360.0</neLon>
<validStartDate>summer</validStartDate>
<validEndDate>summer</validEndDate>
<SoundingLevels>
<levelValues>
<pressure>1013.00</pressure>
<temperature>26.6</temperature>
<height>0.00</height>
</levelValues>
<levelValues>
<pressure>780.00</pressure>
<temperature>14.00</temperature>
<height>2300.00</height>
</levelValues>
<levelValues>
<pressure>757.00</pressure>
<temperature>13.80</temperature>
<height>2500.00</height>
</levelValues>
<levelValues>
<pressure>103.00</pressure>
<temperature>-79.90</temperature>
<height>16500.00</height>
</levelValues>
</SoundingLevels>
</SoundingModel>
<SoundingModel>
<Name>Summer-30deg</Name>
<swLat>30.0</swLat>
<swLon>0.0</swLon>
<neLat>90.0</neLat>
<neLon>360.0</neLon>
<validStartDate>summer</validStartDate>
<validEndDate>summer</validEndDate>
<SoundingLevels>
<levelValues>
<pressure>1013.00</pressure>
<temperature>28.00</temperature>
<height>0.00</height>
</levelValues>
<levelValues>
<pressure>905.00</pressure>
<temperature>20.60</temperature>
<height>1000.00</height>
</levelValues>
<levelValues>
<pressure>493.00</pressure>
<temperature>-6.9</temperature>
<height>6000.00</height>
</levelValues>
<levelValues>
<pressure>133.00</pressure>
<temperature>-69.90</temperature>
<height>15000.00</height>
</levelValues>
</SoundingLevels>
</SoundingModel>
<SoundingModel>
<Name>Summer-45deg</Name>
<swLat>45.0</swLat>
<swLon>0.0</swLon>
<neLat>90.0</neLat>
<neLon>360.0</neLon>
<validStartDate>summer</validStartDate>
<validEndDate>summer</validEndDate>
<SoundingLevels>
<levelValues>
<pressure>1013.00</pressure>
<temperature>21.00</temperature>
<height>0.00</height>
</levelValues>
<levelValues>
<pressure>802.00</pressure>
<temperature>12.00</temperature>
<height>2000.00</height>
</levelValues>
<levelValues>
<pressure>487.00</pressure>
<temperature>-11.90</temperature>
<height>6000.00</height>
</levelValues>
<levelValues>
<pressure>179.00</pressure>
<temperature>-57.50</temperature>
<height>13000.00</height>
</levelValues>
</SoundingLevels>
</SoundingModel>
<SoundingModel>
<Name>Summer-60deg</Name>
<swLat>60.0</swLat>
<swLon>0.0</swLon>
<neLat>90.0</neLat>
<neLon>360.0</neLon>
<validStartDate>summer</validStartDate>
<validEndDate>summer</validEndDate>
<SoundingLevels>
<levelValues>
<pressure>1010.00</pressure>
<temperature>14.00</temperature>
<height>0.00</height>
</levelValues>
<levelValues>
<pressure>541.00</pressure>
<temperature>-12.90</temperature>
<height>5000.00</height>
</levelValues>
<levelValues>
<pressure>269.00</pressure>
<temperature>-47.90</temperature>
<height>10000.00</height>
</levelValues>
<levelValues>
<pressure>268.00</pressure>
<temperature>-48.10</temperature>
<height>10100.00</height>
</levelValues>
</SoundingLevels>
</SoundingModel>
<SoundingModel>
<Name>Summer-75deg</Name>
<swLat>75.0</swLat>
<swLon>0.0</swLon>
<neLat>90.0</neLat>
<neLon>360.0</neLon>
<validStartDate>summer</validStartDate>
<validEndDate>summer</validEndDate>
<SoundingLevels>
<levelValues>
<pressure>1012.00</pressure>
<temperature>5.00</temperature>
<height>0.00</height>
</levelValues>
<levelValues>
<pressure>742.00</pressure>
<temperature>-1.50</temperature>
<height>2500.00</height>
</levelValues>
<levelValues>
<pressure>284.00</pressure>
<temperature>-46.90</temperature>
<height>9500.00</height>
</levelValues>
<levelValues>
<pressure>280.00</pressure>
<temperature>-47.1</temperature>
<height>9600.00</height>
</levelValues>
</SoundingLevels>
</SoundingModel>
</SoundingModels>

View file

@ -0,0 +1,59 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
<xsd:element name="SoundingModels">
<xsd:complexType>
<xsd:sequence maxOccurs="1" minOccurs="1">
<xsd:element ref="SoundingModel"
maxOccurs="unbounded"
minOccurs="1">
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="SoundingModel">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="Name" type="xsd:string"/>
<xsd:element name="swLat" minOccurs="0"
type="xsd:double"/>
<xsd:element name="swLon" minOccurs="0"
type="xsd:double"/>
<xsd:element name="neLat" minOccurs="0"
type="xsd:double"/>
<xsd:element name="neLon" minOccurs="0"
type="xsd:double"/>
<xsd:element name="validStartDate" minOccurs="0"
type="xsd:string"/>
<xsd:element name="validEndDate" minOccurs="0"
type="xsd:string"/>
<xsd:element ref="SoundingLevels"
maxOccurs="1" minOccurs="1"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="SoundingLevels">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="levelValues" minOccurs="1"
maxOccurs="unbounded">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="pressure" type="xsd:double"
minOccurs="1" maxOccurs="1"/>
<xsd:element name="temperature" type="xsd:double"
minOccurs="1" maxOccurs="1"/>
<xsd:element name="height" type="xsd:double"
minOccurs="1" maxOccurs="1"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>

View file

@ -0,0 +1,115 @@
package gov.noaa.nws.ncep.viz.common;
import java.text.DecimalFormat;
import java.text.NumberFormat;
import javax.measure.unit.NonSI;
import javax.measure.unit.SI;
import com.vividsolutions.jts.geom.Coordinate;
public class LocatorUtil {
/**
* Format locator displays.
* <pre>
*
* SOFTWARE HISTORY
*
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* 12/2008 22 M. Li Initial Creation
* 01/2009 48 M. Li Add ConvertTO16PointDir
* 02/2009 64 M. Li Add distanceDisplay & directionDisplay
*
* </pre>
*
* @author M. Li
* @version 1
*/
public static final double METERS_PER_NM = 1852.0;
public static final double METERS_PER_SM = 1609.344;
public static final double METERS_PER_KM = 1000.0;
/**
* Convert a direction (degrees from N) to 16-point compass
* direction (N, NNE, NE, ENE, etc.)
*
* @param angle
* @return
*/
public static String ConvertTO16PointDir(double angle) {
String[] dirs = {"N","NNE","NE","ENE","E","ESE","SE","SSE",
"S","SSW","SW","WSW","W","WNW","NW","NNW","N"};
if ( angle < 0.0 || angle > 360.0 ) {
return null;
}
int idir = (int)Math.rint(angle/22.5);
return dirs[idir];
}
/**
* Convert distance in meter to request unit
*
* @param meters -- distance in meter
* @param rounding -- see ROUNDING_OPTIONS
* @param unit -- see DISTANCEUNIT_OPTIONS
* @return
*/
public static String distanceDisplay(double meters, int rounding, String unit) {
if (unit == null ) {// || unit.equals(DISTANCEUNIT_OPTIONS[0]))
return "";
}
else if( rounding <= 0 ) {
rounding = 1; //Integer.valueOf(ROUNDING_OPTIONS[0]);
}
double factor = 1.0;
if (unit.equalsIgnoreCase( "NM" ) ) { // NonSI.NAUTICAL_MILE.toString().toUpperCase() )) {
factor = METERS_PER_NM;
}
else if (unit.equalsIgnoreCase( "SM" ) ) {
factor = METERS_PER_SM;
}
else if (unit.equalsIgnoreCase( SI.KILOMETER.toString() ) ) {
factor = METERS_PER_KM;
}
else {
unit = "m";
}
double dist = meters/factor;
double round = (double)rounding;
dist = (dist+round/2)/round*round;
return String.valueOf((int)dist) +" "+ unit;
}
/**
* Convert direction in degree to request unit
*
* @param degrees -- input direction in degree
* @param unit -- see DIRECTIONUNIT_OPTIONS
* @return
*/
public static String directionDisplay(double degrees, String unit) {
if (unit == null ) { //|| unit.equalsIgnoreCase(DIRECTIONUNIT_OPTIONS[0])) {
return "";
}
else if( unit.equalsIgnoreCase( "16 point") ||
unit.equalsIgnoreCase("compass") ) {
return ConvertTO16PointDir(degrees);
}
else {
return String.valueOf((int)degrees) + NonSI.DEGREE_ANGLE.toString();
}
}
}

View file

@ -0,0 +1,82 @@
package gov.noaa.nws.ncep.viz.common;
import org.apache.log4j.AppenderSkeleton;
import org.apache.log4j.Level;
import org.apache.log4j.Logger;
import org.apache.log4j.spi.LoggingEvent;
import org.eclipse.core.runtime.ILog;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
public class Log4jToILog {
/**
* This method adds an appender to the log4j root logger, which writes
* log4j logging statements to Eclipse logging framework. All the messages
* will be redirected and finally appear in the alertviz bar.
*
* @param log
* @param PLUGIN_ID
*/
public static void setup(final ILog log, final String PLUGIN_ID) {
Logger.getRootLogger().addAppender(new AppenderSkeleton() {
@Override
protected void append(LoggingEvent arg0) {
Level level = arg0.getLevel();
Throwable t = arg0.getThrowableInformation() == null ? null : arg0
.getThrowableInformation().getThrowable();
if (t == null) {
log.log(new Status(toIStatusLevel(level), PLUGIN_ID, arg0.getRenderedMessage()));
} else {
log.log(new Status(toIStatusLevel(level), PLUGIN_ID, arg0.getRenderedMessage(), t));
}
}
@Override
public void close() {
// do nothing
}
@Override
public boolean requiresLayout() {
return false;
}
});
}
/**
* Transform log4j logging level to iStatus logging level.
*
* @param level
* @return
*/
private static int toIStatusLevel(Level level) {
int istatus;
switch (level.toInt()) {
case Level.TRACE_INT:
istatus = IStatus.OK;
break;
case Level.DEBUG_INT:
istatus = IStatus.OK;
break;
case Level.INFO_INT:
istatus = IStatus.INFO;
break;
case Level.WARN_INT:
istatus = IStatus.WARNING;
break;
case Level.ERROR_INT:
istatus = IStatus.ERROR;
break;
case Level.FATAL_INT:
istatus = IStatus.ERROR;
break;
default:
istatus = IStatus.OK;
}
return istatus;
}
}

View file

@ -0,0 +1,159 @@
package gov.noaa.nws.ncep.viz.common;
import java.util.ArrayList;
import java.util.Date;
import com.raytheon.uf.common.time.DataTime;
import com.raytheon.uf.viz.core.exception.VizException;
/**
*
* Model grid attribute sets must allow for a GDATTIM parameter that allows users to control
* the default timeline tic mark pre-selection in terms of forecast hours.
* Typical use cases would be for precipitation (omit the first forecast hour F00), or when
* the desk only performs analyses at F06, F12, F18 and F24 but the model data is of a much
* higher frequency. These are just two examples.
*
* Valid formats are numerous but currently only the following are implemented:
*
* LIST: GDATTIM=F1;F2;F3; ... ;Fn (forecast hours separated by semicolons,
* RANGE: GDATTIM=F1-F2[-INCR] (forecast hour range with an increment)
* ALL: GDATTIM=FALL (all forecast hours)
*
* Examples:
* GDATTIM=F06;F12;F18;F24
* GDATTIM=F06-F24-6 (same as above)
* GDATTIM=F12-F48-12
*
* <pre>
* SOFTWARE HISTORY
* Date Ticket# Engineer Description
* ------------ ---------- --------------- --------------------------
* 11/28/11 #518 Greg Hull created
*
* </pre>
*
* @author ghull
* @version 1
*/
public class SelectableFrameTimeMatcher {
private boolean matchAll = false;
private final Integer MAX_FCST_HR = 384;
private ArrayList<DataTime> selectableTimes = new ArrayList<DataTime>();
public SelectableFrameTimeMatcher( String timeMatchStr ) throws VizException {
// parse the string and create a list of times
//
if( timeMatchStr == null || timeMatchStr.isEmpty() ) {
throw new VizException("SelectableFrameTimeMatcher: null/empty string");
}
timeMatchStr = timeMatchStr.toLowerCase().trim();
if( timeMatchStr.equals( "fall") ) {
matchAll = true;
return;
}
String[] subStrs = timeMatchStr.split(";");
// each semi-colon delimited subString may be either
// a range or single time.
//
for( String subStr : subStrs ) {
// if matching a range of times
//
if( subStr.indexOf('-') > 0 ) {
String startEndIncrStrs[] = subStr.split("-");
if( startEndIncrStrs.length < 2 ||
startEndIncrStrs.length > 3 ) {
// System.out.println("Error Parsing GDATTIME string "+timeMatchStr );
throw new VizException("SelectableFrameTimeMatcher: Error Parsing GDATTIME string: "
+ timeMatchStr);
}
DataTime startTime = parseTime( startEndIncrStrs[0].trim() );
DataTime endTime = parseTime( startEndIncrStrs[1].trim() );
if( startTime == null || endTime == null ) {
continue;
}
Integer incr = 60*60;
if( startEndIncrStrs.length > 2 ) {
incr = Integer.parseInt( startEndIncrStrs[2].trim() ) * 60 * 60;
}
// Note : this logic will need to change when we add parsing of
// full GDATTIM syntax.
for( Integer f = startTime.getFcstTime() ; f < endTime.getFcstTime() ; f += incr ) {
selectableTimes.add(
new DataTime( startTime.getRefTime(), f ));
}
}
else { // else if matching a single time
DataTime dt = parseTime( subStr.trim() );
if( dt != null ) {
selectableTimes.add( dt );
}
}
}
}
// Currently only parsing forecast times.
//
private DataTime parseTime( String timeStr ) throws VizException {
//DataTime parsedTime = new DataTime();
if( timeStr.startsWith("f") ) {
Integer fcstHr = Integer.parseInt( timeStr.substring(1) );
// 'null' refTime and fcst time in seconds
return new DataTime( new Date(0), fcstHr*60*60 ); //
}
else if( timeStr.equals("last") ) {
// 'null' refTime and fcst time in seconds
return new DataTime( new Date(0), MAX_FCST_HR*60*60 ); //
}
else {
// System.out.println("SelectableFrameTimeMatcher can't parse GDATTIM token"+timeStr);
throw new VizException("SelectableFrameTimeMatcher: Error Parsing GDATTIME token: "
+ timeStr);
}
}
public boolean matchTime( DataTime dataTime ) {
if( matchAll ) {
return true;
}
for( DataTime dt : selectableTimes ) {
// TODO : add check for ref time later. For now just test the forecast times.
//
// if( dt.getRefTime() != null ) {
//
// }
if( dt.getFcstTime() == dataTime.getFcstTime() ) {
return true;
}
}
return false;
}
}

View file

@ -0,0 +1,589 @@
//<<<<<<< .working
package gov.noaa.nws.ncep.viz.common.soundingQuery;
import gov.noaa.nws.ncep.edex.common.metparameters.parameterconversion.NcUnits;
import gov.noaa.nws.ncep.edex.common.sounding.NcSoundingCube;
import gov.noaa.nws.ncep.edex.common.sounding.NcSoundingLayer;
import gov.noaa.nws.ncep.edex.common.sounding.NcSoundingLayer.DataType;
import javax.measure.unit.Unit;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.TimeZone;
import com.raytheon.uf.common.time.DataTime;
import com.raytheon.uf.common.time.TimeRange;
import com.raytheon.uf.viz.core.comm.Connector;
import com.raytheon.uf.viz.core.exception.VizException;
import com.vividsolutions.jts.geom.Coordinate;
/**
* A general-purpose, user-friendly interface to the NcSoundingDataRequest
* uengine script. This is intended to replace the NcSoundingQuery class
* when nsharp is migrated to use it. No changes were made to the uengine
* script.
*
*
* <pre>
*
* SOFTWARE HISTORY
*
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* 09/20/2011 #459 Greg Hull Initial creation
*
* </pre>
*
* @author ghull
* @version 1.0
*/
public class NcSoundingQuery2 {
// TODO : change this to an enum or preferably a pluginName
private String pluginName = null;
private Boolean merge = false;
private String level = "-1";
// TODO : add support requested parameters
// Cyclical dependencies when AbstractMetParameter was in viz.common.
//private List<AbstractMetParameter> requestedMetParameters = null;
private Date refTime = null;
private int forecastHour = 0;
private TimeRange timeRange = null;
// if true then the timeRange is used for the valid time of the data.
private Boolean applyTimeRangeToValidTime = false; // not implemented
private List<Coordinate> latLonCoords= null;
private List<String> stationIds = null;
private List<String> stationNums = null;
// only applies to UAIR data (true?)
// TODO : change this to be a list of levelTypes.
private NcSoundingLayer.DataType uairLevelType = DataType.ALLDATA;
// only for "ncgrib", "grib" and "modelsounding" plugins
// (for modelsounding this is the reportType in the database)
private String modelName = null;
private List<String> supportedPlugins =
Arrays.asList( new String[] {
"ncuair", "uair",
// "drop", // what is the drop sounding plugin name?
// "tamdar", // plugin name?
"bufrua",
"modelsounding", // for NAMSND and GFSSND
"ncgrib", "grib"
} );
private List<String> soundingTypesForPlugins =
Arrays.asList( new String[] {
"NCUAIR", "UAIR",
//"DROP", // are DROP and TAMDAR really supported now?
//"TAMDAR",
"BUFRUA",
"modelsounding", // reportTypes of "NAMSND", "GFSSND", "RUC2SND", "RUCPTYPSND",
"ncgrib", "grib" // no soundingType, uengine uses the pluginName itself
} );
// A few convienence constructors for common constraints.
public NcSoundingQuery2( String plugin ) throws Exception {
this( plugin, false, null );
}
public NcSoundingQuery2( String plugin, Boolean m ) throws Exception {
this( plugin, m, null );
}
public NcSoundingQuery2( String plgn, Boolean m, String lvl ) throws Exception {
if( !supportedPlugins.contains( plgn ) ) {
System.out.println("NcSoundingQuery2 doesn't support plugin: "+plgn );
throw new Exception("NcSoundingQuery2 doesn't support plugin: "+plgn);
}
pluginName = plgn;
merge = m;
level = lvl;
}
// public void setRequestedParameters( List<AbstractMetParameter> reqParams ) {
// requestedMetParameters = reqParams; // copy list?
// }
public void setLatLonConstraints( List<Coordinate> coords ) {
if( stationNums != null ) {
System.out.println("LatLon constraint is replacing stationNums constraint");
stationNums = null;
}
else if( stationIds != null ) {
System.out.println("Station Numbers constraint is replacing stationIds constraint");
stationIds = null;
}
latLonCoords = new ArrayList<Coordinate>( coords );
}
// TODO : could allow for both stationId and stationNum constraint if needed.
public void setStationIdConstraints( List<String> stnIds ) {
if( stationNums != null ) {
System.out.println("Station Ids constraint is replacing stationNums constraint");
stationNums = null;
}
else if( latLonCoords != null ) {
System.out.println("Station Numbers constraint is replacing LatLon constraint");
latLonCoords = null;
}
stationIds = new ArrayList<String>( stnIds );
}
public void setStationNumConstraints( List<String> stnNums ) {
if( stationIds != null ) {
System.out.println("Station Numbers constraint is replacing stationIds constraint");
stationIds = null;
}
else if( latLonCoords != null ) {
System.out.println("Station Numbers constraint is replacing LatLon constraint");
latLonCoords = null;
}
stationNums = new ArrayList<String>( stnNums );
}
// public setSoundingTypeConstraint( ); // have to set in constructor
//
public void setRefTimeConstraint( Date rTime ) {
if( timeRange != null ) {
System.out.println("Ref Time constraint is overriding timeRange constraint.");
timeRange = null;
}
refTime = rTime;
}
//
public void setForecastHourConstraint( int fcstHr ) {
// The refTime must be set in order for fcstHr to be used. Both are used to
// create a valid time passed to the script.
// (this need not be a real restriction but the current implementation won't allow it.)
//
if( refTime != null ) {
System.out.println("Ref Time should be set before the forecast hour.");
}
forecastHour = fcstHr;
}
// Add additional constraints for the validTime and/or the forecast hour (used with the ref time),
// also
// It wasn't obvious from the original NcSoundingQuery
// TODO : add flag whether the timeRange applies to the valid time or the refTime.
//
public void setTimeRangeConstraint( TimeRange tRange, Boolean valTime ) {
setTimeRangeConstraint( tRange );
applyTimeRangeToValidTime = valTime;
}
public void setTimeRangeConstraint( TimeRange tRange ) {
if( refTime != null ) {
System.out.println("TimeRange constraint is overriding refTime constraint.");
refTime = null;
}
timeRange = tRange;
}
// this is used by
public void setModelName( String mdlName ) {
modelName = mdlName;
if( !pluginName.equals("ncgrib") &&
!pluginName.equals("grib" ) &&
!pluginName.equals("modelsounding") ) {
System.out.println("modelName is not applicable for plugin:"+pluginName );
}
}
//
public void setLevelType( NcSoundingLayer.DataType uaLvl ) {
uairLevelType = uaLvl;
}
public void setMerge( Boolean m ) {
merge = m;
}
public void setLevelConstraint( String lvl ) {
// TODO : check if this is a non-standard level and print warning if
// merge is not true
level = lvl;
}
public NcSoundingCube query() {// throws Exception {
// change this to allow returning all available profiles.
if( latLonCoords == null && stationIds == null && stationNums == null ) {
System.out.println("The query must have either a lat/lon, or stations constraints.");
return null;
}
//
else if( refTime == null && timeRange == null ) {
System.out.println("The query must have either a timeRange, or refTime constraint.");
return null;
}
NcSoundingCube cube = null;
StringBuilder query = new StringBuilder();
query.append("import NcSoundingDataRequest\n");
query.append("sndRq = NcSoundingDataRequest.NcSoundingDataRequest()\n");
// TODO : modify the uengine script to accept the pluginName instead of
// a soundingType
//
if( pluginName.equals( "ncuair" ) ) {
query.append("sndRq.setSndType('NCUAIR')\n");
}
else if( pluginName.equals( "uair" ) ) {
query.append("sndRq.setSndType('UAIR')\n");
}
else if( pluginName.equals( "bufrua" ) ) {
query.append("sndRq.setSndType('BUFRUA')\n");
}
else if( pluginName.equals( "tamdar" ) ) {
query.append("sndRq.setSndType('TAMDAR')\n");
}
else if( pluginName.equals("modelsounding") ) {
// the uengine script uses a soundingType which is the based
// on the pluginName and the modelName/reportType
if( modelName == null ) {
System.out.println("ModelName is not set for modelsounding plugin?");
}
else if( modelName.startsWith("NAM") ||
modelName.startsWith("ETA") ) {
query.append("sndRq.setSndType('NAMSND')\n");
}
else if( modelName.startsWith("GFS") ) {
query.append("sndRq.setSndType('GFSSND')\n");
}
// RUC currently not supported but pass it thru anyway
else if( modelName.startsWith("RUC2") ) {
query.append("sndRq.setSndType('RUC2SND')\n");
}
// ?? is this right
else if( modelName.startsWith("RUCPTY") ) {
query.append("sndRq.setSndType('RUCPTYSND')\n");
}
else {
System.out.println("Unrecognized ModelName for modelsounding plugin: "+modelName);
}
}
// for
else if( pluginName.equals( "ncgrib" ) ||
pluginName.equals( "grib" ) ) {
query.append("sndRq.setPluginName('" +pluginName + "')\n");
// sanity check that modelName is set?
if( modelName != null ) {
query.append("sndRq.setModelName('" +modelName+ "')\n");
}
else {
System.out.println("ModelName is not set for grib or ncgrib plugin???");
}
}
else {
System.out.println("NcSoundingQuery2 doesn't support plugin: "+pluginName );
}
query.append("sndRq.setDataType('" + uairLevelType.toString() + "')\n");
if( refTime != null ) {
query.append("sndRq.setRefTime(" +refTime.getTime() + "L)\n");
// use the forecast hour to create the valid time.
// TODO : change the uengine script to have a separate
// method to set the validTime (or better, the forecast hour)
// instead of overloading the setValidTimeStart.
//
DataTime validTime = new DataTime( refTime, forecastHour );
query.append("sndRq.setValidTimeStart(" +
validTime.getValidTime().getTimeInMillis()+ "L)\n");
query.append("sndRq.setValidTimeEnd(0L)\n");
}
else if( timeRange != null ) {
// TODO : should set the refTime to 0 but since NcSoundingQuery
// is setting this to the startTime I am having this do the same.
//
// query.append("sndRq.setRefTime(0L)\n");
query.append("sndRq.setRefTime(" + timeRange.getStart().getTime()+ "L)\n");
query.append("sndRq.setValidTimeStart(" + timeRange.getStart().getTime()+ "L)\n");
query.append("sndRq.setValidTimeEnd(" + timeRange.getEnd().getTime() + "L)\n");
}
query.append("sndRq.setMerge("+ (merge ? "1" : "0")+ ")\n");
query.append("sndRq.setLevel('" + level + "')\n");
// set either lat/lon, stationId or stationNum
if( latLonCoords != null ) {
String latLonStr = "[";
//double maxLat= 0;double minLat=0; double maxLon=0; double minLon=0;
for( int i=0 ; i<latLonCoords.size() ; i++ ) {
Coordinate latlon = latLonCoords.get(i);
//if(i==0){
// maxLat=minLat=latlon.y;
// maxLon=minLon=latlon.x;
//}
//maxLat = Math.max(latlon.y, maxLat);
//minLat = Math.min(latlon.y, minLat);
//maxLon = Math.max(latlon.x, maxLon);
//minLon = Math.min(latlon.x, minLon);
if( i == latLonCoords.size()-1 ) {
latLonStr = latLonStr + latlon.y + ","+ latlon.x + "]";
}
else {
latLonStr = latLonStr + latlon.y + ","+ latlon.x + ",";
}
}
//System.out.println("1query stn siz="+latLonCoords.size());/*\+ " maxLon ="+maxLon+" minLon="+minLon+ " maxLat ="+maxLat+" minLat="+minLat);*/
query.append("return sndRq.getSoundingLayer2DataByLatLonArray("+latLonStr+")");
}
else if( stationIds != null ) {
String stnStr = "[";
for( int i=0; i < stationIds.size(); i ++){
if( i == stationIds.size()-1 ) {
stnStr = stnStr + "'" + stationIds.get(i) + "'" + "]";
}
else {
stnStr = stnStr + "'" + stationIds.get(i) + "'" + ",";
}
}
//System.out.println("2query stn siz="+stationIds.size());
query.append("return sndRq.getSoundingDataByStnIdArray("+stnStr+")");
}
else if( stationNums != null ) {
String stnStr = "[";
for( int i=0; i < stationNums.size(); i ++){
if( i == stationNums.size()-1 ) {
stnStr = stnStr + "'" + stationNums.get(i) + "'" + "]";
}
else {
stnStr = stnStr + "'" + stationNums.get(i) + "'" + ",";
}
}
//System.out.println("3query stn siz="+stationNums.size());
query.append("return sndRq.getSoundingDataByStnNumArray("+stnStr+")");
}
//System.out.println(query.toString());
Object[] pdoList;
try {
//query DB from EDEX
NcUnits.register();
long t01 = System.currentTimeMillis();
pdoList = Connector.getInstance().connect(query.toString(), null, 60000);
if (pdoList[0] instanceof NcSoundingCube)
cube = (NcSoundingCube) pdoList[0];
long t02 = System.currentTimeMillis();
//System.out.println("return from edex...takes "+(t02-t01)+" msec with # of profile = "+ cube.getSoundingProfileList().size());
/*for(int i =0; i < cube.getSoundingProfileList().size(); i++){
System.out.println("lat/lon="+ cube.getSoundingProfileList().get(i).getStationLatitude()+"/"+cube.getSoundingProfileList().get(i).getStationLongitude()+
" temp="+cube.getSoundingProfileList().get(i).getSoundingLyLst2().get(0).getTemperature()+" dewp="+cube.getSoundingProfileList().get(i).getSoundingLyLst2().get(0).getDewpoint()+" press="+
cube.getSoundingProfileList().get(i).getSoundingLyLst2().get(0).getPressure() + " height="+cube.getSoundingProfileList().get(i).getSoundingLyLst2().get(0).getGeoHeight()+
" windSp="+cube.getSoundingProfileList().get(i).getSoundingLyLst2().get(0).getWindSpeed()+" windDir="+cube.getSoundingProfileList().get(i).getSoundingLyLst2().get(0).getWindDirection()+
" omega="+cube.getSoundingProfileList().get(i).getSoundingLyLst2().get(0).getOmega());
}*/
} catch (VizException e) {
System.out.println("query() failed: "+e.getMessage() );
// e.printStackTrace();
return cube;
}
return cube;
}
// public static NcSoundingTimeLines soundingTimeLineQuery (String sndType){
// NcSoundingTimeLines timeLines = null;
// StringBuilder query = new StringBuilder();
// query.append("import NcSoundingDataRequest\n");
// query.append("sndRq = NcSoundingDataRequest.NcSoundingDataRequest()\n");
// query.append("sndRq.setSndType('"+sndType+"')\n");
// query.append("return sndRq.getSoundingTimeLine()");
// //System.out.println(query.toString());
// Object[] pdoList;
// try {
// pdoList = Connector.getInstance().connect(query.toString(), null, 60000);
// if (pdoList[0] instanceof NcSoundingTimeLines)
// timeLines = (NcSoundingTimeLines) pdoList[0];
// //else
// // System.out.println((String)pdoList[0]);
//
// //System.out.println("return from edex...");
// return timeLines;
// }catch (VizException e) {
// System.out.println("soundingTimeLineQuery failed");
// return timeLines;
// }
// }
//
// public static NcSoundingTimeLines mdlSoundingTimeLineQuery (String sndType, String tableName){
// NcSoundingTimeLines timeLines = null;
// StringBuilder query = new StringBuilder();
// query.append("import NcSoundingDataRequest\n");
// query.append("sndRq = NcSoundingDataRequest.NcSoundingDataRequest()\n");
// query.append("sndRq.setSndType('"+sndType+"')\n");
// query.append("sndRq.setTableName('"+tableName+"')\n");
// query.append("return sndRq.getMdlSoundingTimeLine()");
// //System.out.println(query.toString());
// Object[] pdoList;
// try {
// pdoList = Connector.getInstance().connect(query.toString(), null, 60000);
// if (pdoList[0] instanceof NcSoundingTimeLines)
// timeLines = (NcSoundingTimeLines) pdoList[0];
// //else
// // System.out.println((String)pdoList[0]);
//
// //System.out.println("return from edex...");
// return timeLines;
// }catch (VizException e) {
// System.out.println("soundingTimeLineQuery failed");
// return timeLines;
// }
// }
// public static NcSoundingTimeLines soundingRangeTimeLineQuery (String sndType, String refTime){
// NcSoundingTimeLines timeLines = null;
// StringBuilder query = new StringBuilder();
// query.append("import NcSoundingDataRequest\n");
// query.append("sndRq = NcSoundingDataRequest.NcSoundingDataRequest()\n");
// query.append("sndRq.setSndType('"+sndType+"')\n");
// query.append("sndRq.setRefTimeStr('"+refTime+"')\n");
// query.append("return sndRq.getSoundingRangeTimeLine()");
// //System.out.println(query.toString());
// Object[] pdoList;
// try {
// pdoList = Connector.getInstance().connect(query.toString(), null, 60000);
// if (pdoList[0] instanceof NcSoundingTimeLines)
// timeLines = (NcSoundingTimeLines) pdoList[0];
//
// //System.out.println("return from edex...");
// return timeLines;
// }catch (VizException e) {
// System.out.println("soundingRangeTimeLineQuery failed");
// return timeLines;
// }
// }
//
// public static NcSoundingTimeLines mdlSoundingRangeTimeLineQuery (String sndType, String refTime, String tableName){
// NcSoundingTimeLines timeLines = null;
// StringBuilder query = new StringBuilder();
// query.append("import NcSoundingDataRequest\n");
// query.append("sndRq = NcSoundingDataRequest.NcSoundingDataRequest()\n");
// query.append("sndRq.setSndType('"+sndType+"')\n");
// query.append("sndRq.setTableName('"+tableName+"')\n");
// query.append("sndRq.setRefTimeStr('"+refTime+"')\n");
// query.append("return sndRq.getMdlSoundingRangeTimeLine()");
// //System.out.println(query.toString());
// Object[] pdoList;
// try {
// pdoList = Connector.getInstance().connect(query.toString(), null, 60000);
// if (pdoList[0] instanceof NcSoundingTimeLines)
// timeLines = (NcSoundingTimeLines) pdoList[0];
//
// //System.out.println("return from edex...");
// return timeLines;
// }catch (VizException e) {
// System.out.println("soundingRangeTimeLineQuery failed");
// return timeLines;
// }
// }
// public static NcSoundingStnInfoCollection soundingStnInfoQuery (String sndType,String selectedSndTime){
// NcSoundingStnInfoCollection stnInfos = null;
// StringBuilder query = new StringBuilder();
// query.append("import NcSoundingDataRequest\n");
// query.append("sndRq = NcSoundingDataRequest.NcSoundingDataRequest()\n");
// query.append("sndRq.setSndType('"+sndType+"')\n");
// query.append("sndRq.setTimeLine('"+selectedSndTime+"')\n");
// query.append("return sndRq.getSoundingStnInfoCol()");
// //System.out.println(query.toString());
// Object[] pdoList;
// try {
// pdoList = Connector.getInstance().connect(query.toString(), null, 60000);
// if(pdoList[0] instanceof NcSoundingStnInfoCollection)
// stnInfos = (NcSoundingStnInfoCollection) pdoList[0];
//
// //System.out.println("return from edex...stnInfos ");
// return stnInfos;
// } catch (VizException e) {
// System.out.println("soundingStnInfoQuery failed");
// e.printStackTrace();
// return stnInfos;
// }
// }
// public static Object[] soundingModelNameQuery(String pluginName){
// StringBuilder query = new StringBuilder();
// query.append("import NcSoundingDataRequest\n");
// query.append("sndRq = NcSoundingDataRequest.NcSoundingDataRequest()\n");
// query.append("return sndRq.getSoundingModelNames('"+pluginName+"')");
// Object[] pdoList;
// try {
// pdoList = Connector.getInstance().connect(query.toString(), null, 60000);
// //System.out.println("return from edex...soundingModelNameQuery ");
// //for(Object str: pdoList){
// // System.out.println("model name:"+str);
// //}
// return pdoList;
// } catch (VizException e) {
// System.out.println("soundingModelNameQuery failed");
// e.printStackTrace();
// return null;
// }
// }
// public static Calendar convertTimeStrToCalendar(String intimeStr){
// int year, mon, date, hr;
// String timeStr = new String(intimeStr);
// int index = timeStr.indexOf('-');
//
// if (index >= 4 ){
// year = Integer.parseInt(timeStr.substring(index-4, index));
// timeStr = timeStr.substring(index+1);
// index = timeStr.indexOf('-');
// if(index >= 2 ){
// mon = Integer.parseInt(timeStr.substring(index-2, index));
// timeStr = timeStr.substring(index+1);
// index = timeStr.indexOf(' ');
// if(index >= 2 ){
// date = Integer.parseInt(timeStr.substring(index-2, index));
// timeStr = timeStr.substring(index+1);
// //index = refTimeStr.indexOf(':');
// if(timeStr.length() >= 2 ){
// hr = Integer.parseInt(timeStr.substring(0, 2));
// Calendar cal;
// cal = Calendar.getInstance(TimeZone.getTimeZone("GMT"));
// // reset time
// cal.setTimeInMillis(0);
// // set new time
// cal.set(year, mon-1, date, hr, 0,0);
// return cal;
// }
// }
// }
// }
// return null;
// }
}

View file

@ -0,0 +1,159 @@
!************************************************************************
!* DATATYPEBD.TBL *
!* *
!* Analog of DATATYPE.TBL for data stored in AWIPS II database. *
!* *
!* This table contains characteristics of the N-AWIPS data sets. These *
!* characteristics are the directory path to the data, the template *
!* used to generate the output filenames, the category and subcategory *
!* of the data, and the default number of frames, time line range, *
!* time interval and time matching scheme for NMAP. *
!* *
!* This table along with others are used to control NMAP2 data access *
!* and display options. See the NMAP help file *
!* $NAWIPS/help/nmap/DataAccess_Conf.hlp for more information about how *
!* tables are configured for NMAP2. *
!* *
!* The wild card "*" in templates cannot be followed immediately by *
!* any of the symbolic reserved character combinations shown below in *
!* templates that must be parsed for date-time information. *
!* *
!* Within templates, the following character combinations are reserved: *
!* comb - meaning 'metacharacters' example(s) *
!* YYYY - 4-digit year '[0-9][0-9][0-9][0-9]' 1999,2000,...*
!* YY - 2-digit year '[0-9][0-9]' 98,99,00,... *
!* MMM - 3-char month '[A-Za-z][A-Za-z][A-Za-z]' jan,...,dec *
!* MM - 2-digit month '[0-9][0-9]' 01,02,...,12 *
!* DD - 2-digit day '[0-9][0-9]' 01,02,... *
!* HH - 2-digit hour '[0-9][0-9]' 00,01,... *
!* NN - 2-digit minute '[0-9][0-9]' 00,01,...,59 *
!* DWK - 3-char day of week '[A-Za-z][A-Za-z][A-Za-z]' sun,...,sat *
!* FFF - 3-digit forecast hour '[0-9][0-9][0-9]' 000,... *
!* FF - 2-digit forecast hour '[0-9][0-9]' 00,... *
!* *
!* The categories are used by NMAP to construct the user interface *
!* for data selection. They are defined as follows: *
!* CAT_NIL None *
!* CAT_IMG Imagery *
!* CAT_SFC Surface observations *
!* CAT_SFF Surface forecast *
!* CAT_SND Upper air observations *
!* CAT_SNF Upper air forecast *
!* CAT_GRD Gridded data *
!* CAT_VGF Vector graphics file *
!* CAT_MSC Miscellaneous *
!* *
!* The subcategories are used to identify how the data is stored in *
!* the files. They are defined as follows: *
!* SCAT_NIL None *
!* SCAT_SFC Surface obs in daily files *
!* SCAT_SHP Surface obs in hourly files *
!* SCAT_SFF Surface forecast *
!* SCAT_FFG Flash flood guidance (data at one time per day) *
!* SCAT_SND Upper air obs in daily files *
!* SCAT_SNF Upper air forecast *
!* SCAT_FCT Grid forecast *
!* SCAT_ANL Grid analysis *
!* *
!* The time information is used by NMAP for constructing the default *
!* time line for a particular type of data. *
!* *
!* The time matching scheme flag defines the way the time-matching is *
!* done between the dominant data source and any other data source. If *
!* the value is missing or invalid, then the time-matching flag from *
!* prefs.tbl is used. *
!* FLAG TIME MATCHING *
!* *
!* 1 exact only *
!* 2 closest before or equal *
!* 3 closest after or equal *
!* 4 closest before or after *
!* *
!* The BIN HRS field is used for time binning and has the format: *
!* BINFLG/BH:BM/AH:AM/MSTRCT *
!* BINFLG Flag for time binning: "ON" or "OFF"; default is "OFF". *
!* BH:BM Time in hours:minutes before frame time to include in *
!* the time binning. BH is the hours and BM is the minutes.*
!* (:BM is optional) *
!* AH:AM Time in hours:minutes after frame time to include in the*
!* time binning. AH is the hours and AM is the minutes. *
!* (:AM is optional) *
!* MSTRCT Flag for plotting only the most recent: "ON" or "OFF"; *
!* default is "OFF". *
!* *
!** *
!* Log: *
!* m.gamazaychikov/CWS 01/10 Created after datatype.tbl for SAT, RAD *
!* m.gamazaychikov/CWS 06/11 Changed "PATH" for A2DB grid aliases *
!************************************************************************
!
! | | | | |DEF |DEF |DEF | |TIME
!FILE TYPE |PATH |FILE TEMPLATE |CATEGORY|SUBCAT |#FRM|RANGE |INTRVL|BIN HRS |MATCH
!(12) |(25) |(48) |(8) |(8) |(4) |(6) |(6) |(21) |(6)
! | | | | | | | |
! Surface data
!METAR A2DB_CONF metar_db CAT_SFC SCAT_SFC 10 2880 -1 OFF/0/0 4
!
! Upper air data
!
! MOS
!
! Model Sounding and Surface data
!
!
!
! Misc data types
!
! Hurricane graphics
!
! Climatology
!
! Images
!SAT A2DB/SAT YYYYMMDD_HHNN CAT_IMG SCAT_NIL 10 2880 -1 OFF/0/0 4
!RAD A2DB/RAD YYYYMMDD_HHNN CAT_IMG SCAT_NIL 10 180 -1 OFF/0/0 4
!
! VG files
!
! BUFR files
!
! Operational model and grid data
NAM104 A2DB_GRID NAM104_db CAT_GRD SCAT_FCT -1 -1 -1 OFF/0/0 4
NAM218 A2DB_GRID NAM218_db CAT_GRD SCAT_FCT -1 -1 -1 OFF/0/0 4
NAM A2DB_GRID NAM_db CAT_GRD SCAT_FCT -1 -1 -1 OFF/0/0 4
ECMWF25 A2DB_GRID ECMWF25_db CAT_GRD SCAT_FCT -1 -1 -1 OFF/0/0 4
UKMET45 A2DB_GRID UKMET45_db CAT_GRD SCAT_FCT -1 -1 -1 OFF/0/0 4
GFS A2DB_GRID GFS_db CAT_GRD SCAT_FCT -1 -1 -1 OFF/0/0 4
GFS0.5 A2DB_GRID GFS0.5_db CAT_GRD SCAT_FCT -1 -1 -1 OFF/0/0 4
RUC A2DB_GRID RUC_db CAT_GRD SCAT_FCT -1 -1 -1 OFF/0/0 4
RUC13 A2DB_GRID RUC13_db CAT_GRD SCAT_FCT -1 -1 -1 OFF/0/0 4
RUC80 A2DB_GRID RUC80_db CAT_GRD SCAT_FCT -1 -1 -1 OFF/0/0 4
RUC40 A2DB_GRID RUC40_db CAT_GRD SCAT_FCT -1 -1 -1 OFF/0/0 4
GEFS A2DB_GRID GEFS_db_*_YYYYMMDDHHfFFF CAT_GRD SCAT_FCT -1 -1 -1 OFF/0/0 4
GHM A2DB_GRID GHM_db CAT_GRD SCAT_FCT -1 -1 -1 OFF/0/0 4
GHM_6TH A2DB_GRID GHM_6TH_db CAT_GRD SCAT_FCT -1 -1 -1 OFF/0/0 4
GHM_NEST A2DB_GRID GHM_NEST_db CAT_GRD SCAT_FCT -1 -1 -1 OFF/0/0 4
HWRF A2DB_GRID HWRF_db CAT_GRD SCAT_FCT -1 -1 -1 OFF/0/0 4
HWRF_NEST A2DB_GRID HWRF_NEST_db CAT_GRD SCAT_FCT -1 -1 -1 OFF/0/0 4
EASTNMM A2DB_GRID EASTNMM_db CAT_GRD SCAT_FCT -1 -1 -1 OFF/0/0 4
WESTNMM A2DB_GRID WESTNMM_db CAT_GRD SCAT_FCT -1 -1 -1 OFF/0/0 4
AVIATION A2DB_GRID AVIATION_db CAT_GRD SCAT_FCT -1 -1 -1 OFF/0/0 4
!
!GFS $MODEL/gfs gfs_YYYYMMDDHHfFFF CAT_GRD SCAT_FCT -1 -1 -1 OFF/0/0 4
!NAM104G $MODEL/nam nam_YYYYMMDDHHfFFF CAT_GRD SCAT_FCT -1 -1 -1 OFF/0/0 4
!NAM218G $HOME/DATA/nam218 nam218_YYYYMMDDHHfFFF CAT_GRD SCAT_FCT -1 -1 -1 OFF/0/0 4
!RUC80 $MODEL/ruc2 ruc2_YYYYMMDDHHfFFF CAT_GRD SCAT_FCT -1 -1 -1 OFF/0/0 4
!
! Experimental model and grid data
!
! Global Ensembles
!
! Global Ensembles derived products
!
! MDL grid data
!
! Misc Models
!
!
!
!
! RFC grid data

View file

@ -0,0 +1,261 @@
package gov.noaa.nws.ncep.viz.gempak.grid.inv;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import com.raytheon.uf.common.dataquery.requests.RequestConstraint;
import com.raytheon.uf.common.status.IUFStatusHandler;
import com.raytheon.uf.common.status.UFStatus;
import com.raytheon.uf.common.status.UFStatus.Priority;
import com.raytheon.uf.viz.core.comm.Connector;
import com.raytheon.uf.viz.core.exception.VizCommunicationException;
import com.raytheon.uf.viz.core.exception.VizException;
import gov.noaa.nws.ncep.common.dataplugin.ncgrib.ncdatatree.NcDataTree;
import gov.noaa.nws.ncep.common.dataplugin.ncgrib.ncdatatree.NcEventNode;
import gov.noaa.nws.ncep.common.dataplugin.ncgrib.ncdatatree.NcLevelNode;
import gov.noaa.nws.ncep.common.dataplugin.ncgrib.ncdatatree.NcParameterNode;
import gov.noaa.nws.ncep.common.dataplugin.ncgrib.ncdatatree.NcSourceNode;
/**
* TODO Add Description
*
* <pre>
*
* SOFTWARE HISTORY
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* Oct 03, 2011 gamazaychikov Initial creation
* Nov 17, 2011 Xguo Fixed getRequestContrainsMap problem
* </pre>
*
* @author gamazaychikov
* @version 1.0
*/
public class NcInventory {
protected class StackEntry {
public StackEntry(String source, String event, String parameter, long level) {
super();
this.source = source;
this.parameter = parameter;
this.level = level;
this.event = event;
}
final public String source;
final public String event;
final public String parameter;
final public long level;
public boolean recursive = false;
public boolean autoAverage = false;
/*
* (non-Javadoc)
*
* @see java.lang.Object#hashCode()
*/
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + getOuterType().hashCode();
result = prime * result + (int) (level ^ (level >>> 32));
result = prime * result
+ ((source == null) ? 0 : source.hashCode());
result = prime * result
+ ((event == null) ? 0 : event.hashCode());
result = prime * result
+ ((parameter == null) ? 0 : parameter.hashCode());
return result;
}
/*
* (non-Javadoc)
*
* @see java.lang.Object#equals(java.lang.Object)
*/
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
StackEntry other = (StackEntry) obj;
if (!getOuterType().equals(other.getOuterType()))
return false;
if (level != other.level)
return false;
if (source == null) {
if (other.source != null)
return false;
} else if (!source.equals(other.source))
return false;
if (event == null) {
if (other.event != null)
return false;
} else if (!event.equals(other.event))
return false;
if (parameter == null) {
if (other.parameter != null)
return false;
} else if (!parameter.equals(other.parameter))
return false;
return true;
}
private NcInventory getOuterType() {
return NcInventory.this;
}
};
private boolean isInventoryInited = false;
protected NcDataTree ncDataTree;
public NcDataTree getNcDataTree() {
return ncDataTree;
}
public void setNcDataTree(NcDataTree ncDataTree) {
this.ncDataTree = ncDataTree;
}
private static final transient IUFStatusHandler statusHandler = UFStatus
.getHandler(NcInventory.class);
private static NcInventory instance = null;
public static NcInventory getInstance() {
if (instance == null) {
instance = new NcInventory();
}
return instance;
}
public void initInventory() {
if ( !isInventoryInited) {
initTree();
isInventoryInited = true;
}
}
public void initTree() {
ncDataTree = createBaseTree();
}
protected NcDataTree createBaseTree() {
NcDataTree newTree = getTreeFromEdex();
if (newTree == null) {
return newTree;
}
return newTree;
}
private NcDataTree getTreeFromEdex() {
String request = "from gov.noaa.nws.ncep.edex.uengine.tasks.ncgrib import NcgridCatalog\n"
+ "from com.raytheon.uf.common.message.response import ResponseMessageGeneric\n"
+ "test = NcgridCatalog()\n"
+ "return ResponseMessageGeneric(test.execute())";
Object[] tree = null;
try {
tree = Connector.getInstance().connect(request, null, 60000);
} catch (VizCommunicationException e) {
statusHandler.handle(Priority.PROBLEM,
"Error communicating with server.", e);
} catch (VizException e) {
statusHandler.handle(Priority.PROBLEM,
"Error occurred while retrieving grid tree.", e);
}
if (tree != null) {
return (NcDataTree) tree[0];
}
return null;
}
public void reinitTree() {
initTree();
}
public Map<String, RequestConstraint> getRequestConstraintMap (String source, String event, String parameter, String levelName, String levelValue) {
boolean continueSearch = true;
Set<String> sources = ncDataTree.getNcSources();
Iterator<String> sit = sources.iterator();
while ( sit.hasNext() && continueSearch ) {
NcSourceNode snode = ncDataTree.getNcSourceNode(source);
if ( snode == null ) {
continueSearch = false;
return null;
}
if ( !snode.containsChildNode(event) ) {
continueSearch = false;
return null;
}
NcEventNode enode = snode.getChildNode(event);
if ( enode == null ) {
continueSearch = false;
return null;
}
if ( !enode.containsChildNode(parameter) ) {
continueSearch = false;
return null;
}
NcParameterNode pnode = enode.getChildNode(parameter);
if ( pnode == null ) {
continueSearch = false;
return null;
}
String levelId = levelName + ":" + levelValue;
NcLevelNode lnode = pnode.getChildNode(levelId);
//if ( lnode.getLevelName().equalsIgnoreCase(levelName) ) {
if ( lnode != null ) {
return lnode.getRcmap();
}
else {
continueSearch = false;
}
return null;
}
return null;
}
public Map<String, RequestConstraint> getRequestConstraintMap(
String source, String parameter, String levelName, String levelValue) {
if ( ncDataTree == null ) {
return null;
}
NcSourceNode snode = ncDataTree.getNcSourceNode(source);
if ( snode == null ) {
return null;
}
for (NcEventNode enode : snode.getChildNodes().values()) {
if ( enode.containsChildNode(parameter) ) {
NcParameterNode pnode = enode.getChildNode(parameter);
if ( pnode != null ) {
String levelId = levelName + ":" + levelValue;
NcLevelNode lnode = pnode.getChildNode(levelId);
if ( lnode != null) {
return lnode.getRcmap();
}
}
}
}
return null;
}
}

Some files were not shown because too many files have changed in this diff Show more