APRS Multiline Protocol


The present spec in aprs for area objects cannot handle polygons properly to be used for National Weather Service watches and warnings.   The following protocol has been used in Xastir successfully for over a year.

SPCSVR>APRS:;SPCS1528z*262100z3500.00NS07730.00WWSvr TStormWatch #174 }e0]FgcBS6:W{QFSAA
This represents a watch box on the Carolina Coast

Watch Box

SPCSVR>APRS:;SPCS1528z*262100z3500.00NS07730.00WWSvr TStormWatch #174 }e0]FgcBS6:W{QFSAA
This packet is a standard aprs position up till the "}" which starts the multiline portion.

Thereafter-
1. Single character denoting type of line- in this case a dashed yellow line.

Character
Color
Type of Line
Use in NWS Messages
a
red
solid
Tornado Warning
b
red
dashed
Tornado Watch
c
red
double dashed

d
yellow
solid
Severe Thunderstorm Warning
e
yellow
dashed
Severe Thunderstorm Watch  (Example Packet)
f
yellow
double dashed
g
blue
solid
Test Warning
h
blue
dashed
Test Watch
i
blue
double dashed
j
green
solid

k
green
dashed
Mesoscale Discussion Areas
l
green
double dashed


  

2. Single character denoting type of object
    0 = Closed Polygon
    1 = Line Segment
    ? others to be defined

3. Single Scale Character
    This is somewhat hard to explain, but easy to program.  I wanted the ability to go from global scale to small enough for a walkathon etc.

    Scale character (ascii value) = (integer(log to base 10 of the scale factor relative to .0001 degree) X 20 ) + 33

    Example:
    tenths of a degree = scale factor 1000 ( .0001 X 1000 = .1)
    log to the base 10 of 1000 = 3
    3 X 20 = 60
    60 + 33 = 93
    ascii 93 = "]"

    other decimal degree scale factors are:
    .0001 = "!"
    .001   = "5"
    .01    = "I"   (Used by NWS for Areas Of Maximum concern for tornados and Thunderstorms)
    .1      = "]"   (Used by NWS for Watch Boxes)
    1       = "q"

4. 2 character offset (can be up to 23 sets of these before the sting gets too long for aprs)
    First Character represents latitude offset relative to the position of the object in the standard portion of the packet
    Second Character represents longitude offset.

    Offset Character = (integer( offset in degrees / scale factor)) + 78

    Range is limited to 44 scale factors plus and 45 minus from the reference.
    Upper case "N" = ascii 78 is zero offset
    Lower case "z'   = ascii 122 or +44 scale factors ( 122-78 = 44)
    Exclamation "!" = ascii 33 or -45 scale factors (33 - 78 = -45)

   
"FgcBS6:W"  is the string from the example which gives the 4 corners of the polygon

Test Patterns:
Below are two sets of logs with the maximum offsets for a given scale factor, and the factor in the comment area expressed in decimal degrees.

xastir/winaprs type Logfile

ui-view type Logfile

Programming Notes:

Wxsvr always places a space before the multiline sequence - and shares the "{" character with the sequence number at the end
of the packet which is always  5  alphanumeric  characters  in length.  This can be used to  filter  false  polygons generated by
random garbage.  The multiline starts with a "<space>}" then printable characters with no spaces up to 46 characters then "{" and 5 alphanumerics at the end.

It has been pointed out to me that this spec is western hemisphereic centric in that North and West are assumed to be positive.  This is the way the NWS deals with it.  For other coordinate systems, the offsets may need to be reversed- i.e. where West longitute is defined as negative.

This protocol is versatile enough to allow a small "map" to be transmitted on the fly.