Imported Upstream version 1.1.1 upstream/1.1.1
authorBdale Garbee <bdale@gag.com>
Thu, 5 Jun 2008 23:33:47 +0000 (17:33 -0600)
committerBdale Garbee <bdale@gag.com>
Thu, 5 Jun 2008 23:33:47 +0000 (17:33 -0600)
21 files changed:
CHANGES
README
build
clean
configure
docs/man/splat.1
docs/man/splat.man
docs/pdf/splat.pdf
docs/postscript/splat.ps
docs/text/splat.txt
install
splat-1.1.0.lsm [deleted file]
splat-1.1.1.lsm [new file with mode: 0644]
splat.cpp
splat.lrp [new file with mode: 0644]
utils/README
utils/build
utils/install
utils/postdownload
utils/srtm2sdf.c [new file with mode: 0644]
utils/usgs2sdf.c

diff --git a/CHANGES b/CHANGES
index b8060bbf8bdfc63cd6a4b945a815831e6f4a3ab7..59e41c67163ed5a8e39e13aac94cbfd16b5131d7 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,5 +1,49 @@
+Release 1.1.1:
+By John A. Magliacane, <kd2bd@amsat.org> (01-Apr-2006):
+
+* An srtm2sdf utility was added to permit SPLAT Data Files to be
+  derived from the latest 3-arc second SRTM (STS-99 Space Shuttle
+  Radar Topography Mission) digital elevation model data.  The
+  quality of this data is *significantly* higher than that of older
+  USGS Digital Elevation Models previously used by SPLAT!.  Despite
+  the higher quality, some voids in SRTM data sets still exist.
+  When voids are detected, the srtm2sdf utility replaces them with
+  equivalent elevation data found in existing SDF files (presumably
+  generated from older USGS elevation models).  If older SDF files
+  are not available, voids are handled through pixel averaging or
+  direct replacement.
+
+* Coding changes were made that in concert with the new srtm2sdf utility
+  should allow SPLAT! to function over all regions of the planet for
+  which SRTM-3 elevation data is available.
+
+* SPLAT's SDF search path priority has been changed.  SPLAT! now
+  searches for needed SDF files in the current working directory first.
+  If the needed file isn't found, SPLAT! then searches in the path
+  specified by the -d command-line option, or in the $HOME/.splat_path
+  file.
+
+* The color scheme used by SPLAT! in the generation of Longley-Rice
+  path loss maps was noticeably improved.
+
+* A new command-line option (-db) was added to allow constraints
+  to be placed on the maximum attenuation contours plotted on
+  path loss maps.
+
+* A possible array overflow condition in the ReadPath() function was
+  identified and fixed.
+
+* Some very slight coding modifications were made to permit warning-free
+  compilation under GCC 4.x.x.
+
+* The usgs2sdf utility was modified John Gabrysch (jgabby@gmail.com) to
+  properly handle the latest USGS DEM file format, and to properly scale
+  Alaska tiles.
+
+----------------------------------------------------------------------------
+
 Release 1.1.0:
-By John A. Magliacane <kd2bd@amsat.org> (29-Jan-2004):
+By John A. Magliacane, <kd2bd@amsat.org> (29-Jan-2004):
 
 * Extensively modified by J. D. McDonald in January 2004 to include
   the Longley-Rice propagation model using C++ code from NTIA/ITS.
diff --git a/README b/README
index 2f0db5d63895c80dd903b87cfa300c7b86381c87..09f6e00db4a64175e0f62256a993587f3607338d 100644 (file)
--- a/README
+++ b/README
@@ -1,6 +1,7 @@
-     ===============================================================
-     * Welcome to SPLAT! -- A Terrain Analysis Tool for Unix/Linux *
-     ===============================================================
+    ======================================================================
+    SPLAT!: A Terrestrial RF Path and Terrain Analysis Tool for Unix/Linux
+    ======================================================================
+
 
 Requirements
 ============
@@ -13,38 +14,38 @@ Any recent version included with your Linux distribution should work
 fine.  Note, however, that zlib version 1.1.3 contains a security
 vulnerability that has been fixed in version 1.1.4.  The latest
 version of zlib may be found at: http://www.gzip.org/zlib/
-If you decide to build zlib, don't forget to invoke:
+If you should decide to build zlib, don't forget to invoke:
 
        ./configure -s
 
 to build zlib as a shared library.
 
-If you wish to generate terrain and elevation profiles through SPLAT!,
-you will also need gnuplot.  The latest version of gnuplot is available
-at: http://www.gnuplot.info/
+If you wish to plot terrain and elevation profiles through SPLAT!,
+you will need gnuplot.  The latest version of gnuplot is available
+at: http://www.gnuplot.info/ if you don't already have it.
 
 You will also need an application for viewing large PPM graphics
 files generated by SPLAT!.  XV, ImageMagick, XPaint, and The GIMP
 all perform this task well, especially The GIMP.
 
 It goes without saying that a C++ compiler (gcc/g++) and math libraries
-are also needed to build SPLAT!
+are also needed to build SPLAT!  SPLAT! is fully compatible with the
+latest (4.1.x) versions of the GCC compiler.
 
 
 Installation Instructions
 =========================
 Unpack the tar.gz file in a source code directory (such as /usr/src
-under Slackware):
+under Slackware) as 'root':
 
        cd /usr/src
-       tar xvfz splat-1.1.0.tar.gz
+       tar xvfz splat-1.1.1.tar.gz
 
-This action will generate a subdirectory named splat, and probably
-requires 'root' privileges to do so.
+This action will generate a subdirectory named splat-1.1.1. 
 
-Next, cd to the splat directory:
+Next, cd into the directory:
 
-       cd splat
+       cd splat-1.1.1
 
 Invoke the configure script to build SPLAT! and related utilities:
 
@@ -59,32 +60,47 @@ will be prompted to su to 'root' and invoke the install script manually:
        ./install all
        exit
 
-It's THAT simple!  :-)
 Before running SPLAT!, carefully read the documentation located under
-the splat-1.1.0/docs directory for information on the use of the program.
+the splat-1.1.1/docs directory for information on the use of the program.
+
+REMEMBER: Topography data must be downloaded and SPLAT Data Files must
+be generated using the included srtm2sdf, postdownload, or usgs2sdf
+utilities before using SPLAT!  Instructions for doing so are included
+in the documentation.
+
+It is a good practice to create a working directory for SPLAT! use
+under your home directory:
+
+       mkdir $HOME/splat-work
 
-Remember, topography data must be downloaded and SPLAT Data Files must
-be generated (using the postdownload or usgs2sdf utility) prior to using
-SPLAT!  Instructions for doing so are included in the documentation.
+Then:
+       cd $HOME/splat-work
 
-It is important to realize that when analyzing coverage areas of
-transmitters, repeaters, or cell sites, SPLAT Data Files need to be
-available for the entire region surrounding the site(s) being analyzed
-so an accurate and complete topography map can be generated.  It is
-advised that you place all your SPLAT Data Files in a single directory,
-and then create a file in your home directory called .splat_path that
-contains the full path to that directory so SPLAT! can easily find them.
+before invoking SPLAT!
+
+In this manner, all associated SPLAT! working files can be kept in a
+common directory.
+
+It is important to realize that when analyzing regional coverage
+areas of transmitters, repeaters, or cell sites, SPLAT Data Files
+need to be available for the entire region surrounding the site(s)
+being analyzed.  SPLAT Data Files can be placed under your SPLAT!
+working directory, or under a separate directory specified in your
+$HOME/.splat_path file so SPLAT! can easily find them.
 
 Please read the README file under the utils directory for information
 on the utilities included with SPLAT!.
 
-The latest announcements and information regarding SPLAT! software is
-available at the SPLAT! Home Page:
+Please read the documentation under the splat-1.1.1/docs directory,
+or consult the program's man page for more information and examples
+of SPLAT! use.
+
+The latest announcements and information regarding SPLAT! software
+can be found on the SPLAT! Web Site:
 
        http://www.qsl.net/kd2bd/splat.html
 
 --
 John A. Magliacane, KD2BD
-January 24, 2004
+March 15, 2006
 
diff --git a/build b/build
index 7866f7ffa33a024f258600d3e503cde5beff2656..8559558df66b3d0eff3a25df680f7b54b2582354 100755 (executable)
--- a/build
+++ b/build
@@ -1,13 +1,15 @@
 #!/bin/bash
 #
 # Simple shell script for building SPLAT! and associated utilities.
-# Written by John A. Magliacane, KD2BD May 2002 -- Last update: Jan 2004
+# Written by John A. Magliacane, KD2BD May 2002 -- Last update: March 2006
 #
 
+cpu=`uname -m`
+
 build_splat()
 {
        echo -n "Compiling SPLAT!... "
-       g++ -Wall -O3 -s -lm -lbz2 -fomit-frame-pointer itm.cpp splat.cpp -o splat
+       g++ -Wall -O3 -s -lm -lbz2 -fomit-frame-pointer -march=$cpu itm.cpp splat.cpp -o splat
        echo "Done!"
 }
 
diff --git a/clean b/clean
index 17660d2a45c61a499abd9bef72a59c72300ce057..e600f20deed8aea90b3e9ee363ab3d73f7b4234c 100755 (executable)
--- a/clean
+++ b/clean
@@ -1,6 +1,6 @@
 #!/bin/bash
 # Simple script to create a clean distribution
 #
-rm splat utils/fontdata utils/citydecoder utils/usgs2sdf
+rm -f splat utils/fontdata utils/citydecoder utils/usgs2sdf utils/srtm2sdf
 echo "Done!"
 
index 369430e8852d20036c03fa8d9c67f54f32c28577..85bc6819314f7ac73446d364dbde7c7b1f6c328d 100755 (executable)
--- a/configure
+++ b/configure
@@ -25,3 +25,4 @@ echo
 echo "Don't forget to read the documentation under the docs directory"
 echo "as well as the various README files in the splat and splat/utils"
 echo "directories.  Enjoy the program!  73, de John, KD2BD"
+
index c45ecebb6d8d2b5455a5630998037158b5cf8be5..0c1c962b6cc2461cf6d95795347fa098bf863832 100644 (file)
@@ -3,114 +3,139 @@ SPLAT!(1)                 KD2BD Software                SPLAT!(1)
 
 
 N\bNA\bAM\bME\bE
-       splat  -  A S\bSignal P\bPropagation, L\bLoss, A\bAnd T\bTerrain analysis
-       tool
+       splat - An RF S\bSignal P\bPropagation, L\bLoss, A\bAnd T\bTerrain analy-
+       sis tool
 
 S\bSY\bYN\bNO\bOP\bPS\bSI\bIS\bS
-       splat [-t _\bt_\br_\ba_\bn_\bs_\bm_\bi_\bt_\bt_\be_\br_\b__\bs_\bi_\bt_\be_\b._\bq_\bt_\bh] [-r _\br_\be_\bc_\be_\bi_\bv_\be_\br_\b__\bs_\bi_\bt_\be_\b._\bq_\bt_\bh] [-c
-       _\br_\bx_\b__\ba_\bn_\bt_\be_\bn_\bn_\ba_\b__\bh_\be_\bi_\bg_\bh_\bt_\b__\bf_\bo_\br_\b__\bl_\bo_\bs_\b__\bc_\bo_\bv_\be_\br_\ba_\bg_\be_\b__\ba_\bn_\ba_\bl_\by_\bs_\bi_\bs         _\b(_\bf_\be_\be_\bt_\b)
-       _\b(_\bf_\bl_\bo_\ba_\bt_\b)]   [-L   _\br_\bx_\b__\ba_\bn_\bt_\be_\bn_\bn_\ba_\b__\bh_\be_\bi_\bg_\bh_\bt_\b__\bf_\bo_\br_\b__\bL_\bo_\bn_\bg_\bl_\be_\by_\b-_\bR_\bi_\bc_\be_\b__\bc_\bo_\bv_\be_\br_\b-
-       _\ba_\bg_\be_\b__\ba_\bn_\ba_\bl_\by_\bs_\bi_\b _\b(_\bf_\be_\be_\bt_\b) _\b(_\bf_\bl_\bo_\ba_\bt_\b)] [-p _\bt_\be_\br_\br_\ba_\bi_\bn_\b__\bp_\br_\bo_\bf_\bi_\bl_\be_\b._\be_\bx_\bt] [-e
-       _\be_\bl_\be_\bv_\ba_\bt_\bi_\bo_\bn_\b__\bp_\br_\bo_\bf_\bi_\bl_\be_\b._\be_\bx_\bt] [-h _\bh_\be_\bi_\bg_\bh_\bt_\b__\bp_\br_\bo_\bf_\bi_\bl_\be_\b._\be_\bx_\bt]  [-l  _\bL_\bo_\bn_\bg_\b-
-       _\bl_\be_\by_\b-_\bR_\bi_\bc_\be_\b__\bp_\br_\bo_\bf_\bi_\bl_\be_\b._\be_\bx_\bt]   [-o  _\bt_\bo_\bp_\bo_\bg_\br_\ba_\bp_\bh_\bi_\bc_\b__\bm_\ba_\bp_\b__\bf_\bi_\bl_\be_\bn_\ba_\bm_\be_\b._\bp_\bp_\bm]
-       [-b        _\bc_\ba_\br_\bt_\bo_\bg_\br_\ba_\bp_\bh_\bi_\bc_\b__\bb_\bo_\bu_\bn_\bd_\ba_\br_\by_\b__\bf_\bi_\bl_\be_\bn_\ba_\bm_\be_\b._\bd_\ba_\bt]         [-s
-       _\bs_\bi_\bt_\be_\b/_\bc_\bi_\bt_\by_\b__\bd_\ba_\bt_\ba_\bb_\ba_\bs_\be_\b._\bd_\ba_\bt]    [-d   _\bs_\bd_\bf_\b__\bd_\bi_\br_\be_\bc_\bt_\bo_\br_\by_\b__\bp_\ba_\bt_\bh]   [-m
+       splat [-t  _\bt_\br_\ba_\bn_\bs_\bm_\bi_\bt_\bt_\be_\br_\b__\bs_\bi_\bt_\be_\b._\bq_\bt_\bh]  [-r   _\br_\be_\bc_\be_\bi_\bv_\be_\br_\b__\bs_\bi_\bt_\be_\b._\bq_\bt_\bh]
+       [-c    _\br_\bx_\b__\ba_\bn_\bt_\be_\bn_\bn_\ba_\b__\bh_\be_\bi_\bg_\bh_\bt_\b__\bf_\bo_\br_\b__\bl_\bo_\bs_\b__\bc_\bo_\bv_\be_\br_\ba_\bg_\be_\b__\ba_\bn_\ba_\bl_\by_\bs_\bi_\bs  _\b(_\bf_\be_\be_\bt_\b)
+       _\b(_\bf_\bl_\bo_\ba_\bt_\b)]  [-L    _\br_\bx_\b__\ba_\bn_\bt_\be_\bn_\bn_\ba_\b__\bh_\be_\bi_\bg_\bh_\bt_\b__\bf_\bo_\br_\b__\bL_\bo_\bn_\bg_\bl_\be_\by_\b-_\bR_\bi_\bc_\be_\b__\bc_\bo_\bv_\be_\br_\b-
+       _\ba_\bg_\be_\b__\ba_\bn_\ba_\bl_\by_\bs_\bi_\b_\b(_\bf_\be_\be_\bt_\b) _\b(_\bf_\bl_\bo_\ba_\bt_\b)] [-p  _\bt_\be_\br_\br_\ba_\bi_\bn_\b__\bp_\br_\bo_\bf_\bi_\bl_\be_\b._\be_\bx_\bt] [-e
+       _\be_\bl_\be_\bv_\ba_\bt_\bi_\bo_\bn_\b__\bp_\br_\bo_\bf_\bi_\bl_\be_\b._\be_\bx_\bt] [-h  _\bh_\be_\bi_\bg_\bh_\bt_\b__\bp_\br_\bo_\bf_\bi_\bl_\be_\b._\be_\bx_\bt] [-l  _\bL_\bo_\bn_\bg_\b-
+       _\bl_\be_\by_\b-_\bR_\bi_\bc_\be_\b__\bp_\br_\bo_\bf_\bi_\bl_\be_\b._\be_\bx_\bt]  [-o   _\bt_\bo_\bp_\bo_\bg_\br_\ba_\bp_\bh_\bi_\bc_\b__\bm_\ba_\bp_\b__\bf_\bi_\bl_\be_\bn_\ba_\bm_\be_\b._\bp_\bp_\bm]
+       [-b         _\bc_\ba_\br_\bt_\bo_\bg_\br_\ba_\bp_\bh_\bi_\bc_\b__\bb_\bo_\bu_\bn_\bd_\ba_\br_\by_\b__\bf_\bi_\bl_\be_\bn_\ba_\bm_\be_\b._\bd_\ba_\bt]        [-s
+       _\bs_\bi_\bt_\be_\b/_\bc_\bi_\bt_\by_\b__\bd_\ba_\bt_\ba_\bb_\ba_\bs_\be_\b._\bd_\ba_\bt]   [-d    _\bs_\bd_\bf_\b__\bd_\bi_\br_\be_\bc_\bt_\bo_\br_\by_\b__\bp_\ba_\bt_\bh]   [-m
        _\be_\ba_\br_\bt_\bh_\b__\br_\ba_\bd_\bi_\bu_\bs_\b__\bm_\bu_\bl_\bt_\bi_\bp_\bl_\bi_\be_\br   _\b(_\bf_\bl_\bo_\ba_\bt_\b)]   [-R    _\bm_\ba_\bx_\bi_\bm_\bu_\bm_\b__\bc_\bo_\bv_\be_\br_\b-
-       _\ba_\bg_\be_\b__\br_\ba_\bn_\bg_\be _\b(_\bf_\bo_\br _\b-_\bc _\bo_\br _\b-_\bL_\b) _\b(_\bm_\bi_\bl_\be_\bs_\b) _\b(_\bf_\bl_\bo_\ba_\bt_\b)] [-n] [-N]
+       _\ba_\bg_\be_\b__\br_\ba_\bn_\bg_\be  _\b(_\bf_\bo_\br  _\b-_\bc  _\bo_\br  _\b-_\bL_\b) _\b(_\bm_\bi_\bl_\be_\bs_\b) _\b(_\bf_\bl_\bo_\ba_\bt_\b)] [-dB _\bm_\ba_\bx_\bi_\bm_\bu_\bm
+       _\ba_\bt_\bt_\be_\bn_\bu_\ba_\bt_\bi_\bo_\bn _\bc_\bo_\bn_\bt_\bo_\bu_\br _\bt_\bo _\bd_\bi_\bs_\bp_\bl_\ba_\by _\bo_\bn _\bp_\ba_\bt_\bh _\bl_\bo_\bs_\bs  _\bm_\ba_\bp_\bs  _\b(_\b8_\b0_\b-_\b2_\b3_\b0
+       _\bd_\bB_\b)] [-n] [-N]
 
 D\bDE\bES\bSC\bCR\bRI\bIP\bPT\bTI\bIO\bON\bN
-       S\bSP\bPL\bLA\bAT\bT!\b!  is  a  simple,  yet powerful terrain analysis tool
-       written for Unix and Linux-based workstations.  S\bSP\bPL\bLA\bAT\bT!\b!  is
-       free software.  Redistribution and/or modification is per-
-       mitted under the terms of the GNU General  Public  License
-       as  published by the Free Software Foundation, either ver-
-       sion 2 of the License or any later version.   Adoption  of
-       S\bSP\bPL\bLA\bAT\bT!\b!  source code in proprietary or closed-source appli-
-       cations is a violation of this license,  and  is  s\bst\btr\bri\bic\bct\btl\bly\by
-       forbidden.
-
-       S\bSP\bPL\bLA\bAT\bT!\b!  is distributed in the hope that it will be useful,
-       but WITHOUT ANY WARRANTY, without even  the  implied  war-
-       ranty  of MERCHANTABILITY or FITNESS FOR A PARTICULAR PUR-
+       S\bSP\bPL\bLA\bAT\bT!\b!  is  a powerful terrestrial RF propagation and ter-
+       rain analysis tool covering the spectrum  between  20  MHz
+       and  20  GHz.   It  is  designed for operation on Unix and
+       Linux-based  workstations.   S\bSP\bPL\bLA\bAT\bT!\b!  is   free   software.
+       Redistribution  and/or modification is permitted under the
+       terms of the GNU General Public License  as  published  by
+       the  Free  Software  Foundation,  either  version 2 of the
+       License or any later version.  Adoption of  S\bSP\bPL\bLA\bAT\bT!\b!  source
+       code  in  proprietary  or  closed-source applications is a
+       violation of this license, and is s\bst\btr\bri\bic\bct\btl\bly\by forbidden.
+
+       S\bSP\bPL\bLA\bAT\bT!\b! is distributed in the hope that it will be  useful,
+       but  WITHOUT  ANY  WARRANTY, without even the implied war-
+       ranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR  PUR-
        POSE. See the GNU General Public License for more details.
 
 I\bIN\bNT\bTR\bRO\bOD\bDU\bUC\bCT\bTI\bIO\bON\bN
-       S\bSP\bPL\bLA\bAT\bT!\b!  is  a terrestrial RF propagation analysis tool for
-       the spectrum between 20  MHz  and  20  GHz,  and  provides
-       information  of interest to communication system designers
-       and site engineers.  S\bSP\bPL\bLA\bAT\bT!\b! determines great  circle  dis-
-       tances  and  bearings  between  sites,  antenna  elevation
-       angles (uptilt),  depression  angles  (downtilt),  antenna
-       height  above mean sea level, antenna height above average
-       terrain, bearings and  distances  to  known  obstructions,
-       Longley-Rice   path   loss,  and  minimum  antenna  height
-       requirements needed to establish line-of-sight  communica-
-       tion  paths absent of obstructions due to terrain.  S\bSP\bPL\bLA\bAT\bT!\b!
-       produces reports, graphs, and highly  detailed  and  care-
-       fully  annotated  topographic maps depicting line-of-sight
-       paths, path loss, and expected coverage areas of transmit-
-       ters  and repeater systems.  When performing line-of-sight
-       analysis  in  situations  where  multiple  transmitter  or
-       repeater  sites are employed, S\bSP\bPL\bLA\bAT\bT!\b! determines individual
-       and mutual areas of coverage within the network specified.
-
-       S\bSP\bPL\bLA\bAT\bT!\b!  operates  in  two  modes: _\bp_\bo_\bi_\bn_\bt_\b-_\bt_\bo_\b-_\bp_\bo_\bi_\bn_\bt _\bm_\bo_\bd_\be, and
-       _\ba_\br_\be_\ba _\bp_\br_\be_\bd_\bi_\bc_\bt_\bi_\bo_\bn _\bm_\bo_\bd_\be.  These modes may  be  invoked  using
-       either  line-of-sight  (LOS)  or  Irregular  Terrain (ITM)
+       Applications of S\bSP\bPL\bLA\bAT\bT!\b! include the visualization,  design,
+       and  link  budget  analysis of wireless Wide Area Networks
+       (WANs), commercial and amateur radio communication systems
+       above 20 MHz, microwave links, frequency coordination, and
+       the determination of analog and digital terrestrial  radio
+       and television contour regions.
+
+       S\bSP\bPL\bLA\bAT\bT!\b!  provides  RF  site  engineering data such as great
+       circle distances and bearings between sites, antenna  ele-
+       vation  angles  (uptilt),  depression  angles  (downtilt),
+       antenna height above mean sea level, antenna height  above
+       average  terrain, bearings and distances to known obstruc-
+       tions, Longley-Rice path attenuation, and minimum  antenna
+       height requirements needed to establish line-of-sight com-
+       munication paths absent of obstructions  due  to  terrain.
+       S\bSP\bPL\bLA\bAT\bT!\b!  produces  reports, graphs, and highly detailed and
+       carefully annotated topographic  maps  depicting  line-of-
+       sight  paths,  path  loss,  and expected coverage areas of
+       transmitters and repeater systems.  When performing  line-
+       of-sight analysis in situations where multiple transmitter
+       or repeater sites are employed, S\bSP\bPL\bLA\bAT\bT!\b! determines individ-
+       ual and mutual areas of coverage within the network speci-
+       fied.
+
+       S\bSP\bPL\bLA\bAT\bT!\b! operates  in  two  distinct  modes:  _\bp_\bo_\bi_\bn_\bt_\b-_\bt_\bo_\b-_\bp_\bo_\bi_\bn_\bt
+       _\bm_\bo_\bd_\be,  and  _\ba_\br_\be_\ba _\bp_\br_\be_\bd_\bi_\bc_\bt_\bi_\bo_\bn _\bm_\bo_\bd_\be, and may be invoked using
+       either line-of-sight  (LOS)  or  Irregular  Terrain  (ITM)
        propagation models.  True Earth, four-thirds Earth, or any
-       other  Earth radius may be specified by the user when per-
+       other Earth radius may be specified by the user when  per-
        forming line-of-sight analysis.
 
 I\bIN\bNP\bPU\bUT\bT F\bFI\bIL\bLE\bES\bS
-       S\bSP\bPL\bLA\bAT\bT!\bis a command-line  driven  application,  and  reads
-       input  data  through a number of data files.  Each has its
-       own format.  Some files are mandatory for successful  exe-
-       cution  of the program, while others are optional.  Manda-
-       tory files include SPLAT  Data  Files  (SDF  files),  site
-       location files (QTH files), and Longley-Rice model parame-
-       ter files (LRP files).  Optional files  include  city/site
-       location files, and cartographic boundary files.
+       S\bSP\bPL\bLA\bAT\bT!\b is  a  command-line  driven application, and reads
+       input data through a number of data files.  Some files are
+       mandatory  for  successful execution of the program, while
+       others are optional.  Mandatory files include  SPLAT  Data
+       Files  (SDF  files),  site location files (QTH files), and
+       Longley-Rice model parameter files (LRP files).   Optional
+       files  include  city/site location files, and cartographic
+       boundary files.
 
 S\bSP\bPL\bLA\bAT\bT D\bDA\bAT\bTA\bA F\bFI\bIL\bLE\bES\bS
-       S\bSP\bPL\bLA\bAT\bT!\b!  imports topographic data in the form of SPLAT Data
-       Files (SDFs) that may be generated from a number of infor-
-       mation  sources.   In  the United States, SPLAT Data Files
-       are most often derived from U.S.  Geological Survey  Digi-
-       tal  Elevation  Models  (DEMs)  using the u\bus\bsg\bgs\bs2\b2s\bsd\bdf\bf utility
-       included with S\bSP\bPL\bLA\bAT\bT!\b!.  USGS Digital Elevation Models  com-
-       patible with this utility are available at no cost via the
-       Internet                  at:                  _\bh_\bt_\bt_\bp_\b:_\b/_\b/_\be_\bd_\bc_\b-
-       _\bs_\bg_\bs_\b9_\b._\bc_\br_\b._\bu_\bs_\bg_\bs_\b._\bg_\bo_\bv_\b/_\bg_\bl_\bi_\bs_\b/_\bh_\by_\bp_\be_\br_\b/_\bg_\bu_\bi_\bd_\be_\b/_\b1_\b__\bd_\bg_\br_\b__\bd_\be_\bm_\b-
-       _\bf_\bi_\bg_\b/_\bi_\bn_\bd_\be_\bx_\b1_\bm_\b._\bh_\bt_\bm_\bl.
-
-       SPLAT Data Files contain  topographic  elevations  to  the
-       nearest  meter  above  mean  sea  level  for  1-degree  by
-       1-degree regions of the earth with a resolution  of  3-arc
-       seconds.   SDF files can be read in either standard format
-       (_\b._\bs_\bd_\bf) as generated by the u\bus\bsg\bgs\bs2\b2s\bsd\bdf\bf utility, or  in  bzip2
-       compressed  format  (_\b._\bs_\bd_\bf_\b._\bb_\bz_\b2).   Since uncompressed files
-       can be slightly faster  to  load  than  compressed  files,
+       S\bSP\bPL\bLA\bAT\bT!\b! imports topographic data in the form of SPLAT  Data
+       Files  (SDFs).  These files may be generated from a number
+       of information sources.  In the United States, SPLAT  Data
+       Files  can  be  generated  through U.S.  Geological Survey
+       Digital Elevation Models (DEMs) using the u\bus\bsg\bgs\bs2\b2s\bsd\bdf\bf utility
+       included  with S\bSP\bPL\bLA\bAT\bT!\b!.  USGS Digital Elevation Models com-
+       patible  with  this  utility  may  be   downloaded   from:
+       _\bh_\bt_\bt_\bp_\b:_\b/_\b/_\be_\bd_\bc_\bf_\bt_\bp_\b._\bc_\br_\b._\bu_\bs_\bg_\bs_\b._\bg_\bo_\bv_\b/_\bp_\bu_\bb_\b/_\bd_\ba_\bt_\ba_\b/_\bD_\bE_\bM_\b/_\b2_\b5_\b0_\b/.
+
+       Significantly  better  resolution  can be obtained through
+       the use of SRTM-3  Version  2  digital  elevation  models.
+       These  models  are  the result of the STS-99 Space Shuttle
+       Radar Topography Mission, and are available for most popu-
+       lated  regions of the Earth.  SPLAT Data Files may be gen-
+       erated from SRTM data using the included s\bsr\brt\btm\bm2\b2s\bsd\bdf\bf utility.
+       SRTM-3  Version  2  data may be obtained through anonymous
+       FTP from: _\bf_\bt_\bp_\b:_\b/_\b/_\be_\b0_\bs_\br_\bp_\b0_\b1_\bu_\b._\be_\bc_\bs_\b._\bn_\ba_\bs_\ba_\b._\bg_\bo_\bv_\b:_\b2_\b1_\b/_\bs_\br_\bt_\bm_\b/_\bv_\be_\br_\bs_\bi_\bo_\bn_\b2_\b/
+
+       Despite the higher accuracy that SRTM data has  to  offer,
+       some  voids  in  the  data  sets  exist.   When  voids are
+       detected, the s\bsr\brt\btm\bm2\b2s\bsd\bdf\bf utility replaces them  with  corre-
+       sponding  data found in existing SDF files (that were pre-
+       sumably  created  from  earlier  USGS  data  through   the
+       u\bus\bsg\bgs\bs2\b2s\bsd\bdf\bf utility).  If USGS-derived SDF data is not avail-
+       able, voids are handled through adjacent pixel  averaging,
+       or direct replacement.
+
+       SPLAT  Data Files contain integer value topographic eleva-
+       tions  (in  meters)  referenced  to  mean  sea  level  for
+       1-degree  by  1-degree regions of the earth with a resolu-
+       tion of 3-arc seconds.  SDF files can be  read  in  either
+       standard  format  (_\b._\bs_\bd_\bf)  as generated by the u\bus\bsg\bgs\bs2\b2s\bsd\bdf\bf and
+       s\bsr\brt\btm\bm2\b2s\bsd\bdf\bf  utilities,  or  in   bzip2   compressed   format
+       (_\b._\bs_\bd_\bf_\b._\bb_\bz_\b2).   Since  uncompressed  files  can be processed
+       slightly faster than  files  that  have  been  compressed,
        S\bSP\bPL\bLA\bAT\bT!\b!  searches  for  the needed SDF data in uncompressed
-       format first.  If such data cannot  located,  then  S\bSP\bPL\bLA\bAT\bT!\b!
-       tries  to read the data in bzip2 compressed format.  If no
+       format first.  If uncompressed data cannot located, S\bSP\bPL\bLA\bAT\bT!\b!
+       then  searches for data in bzip2 compressed format.  If no
        compressed  SDF  files  can  be  found  for   the   region
-       requested, S\bSP\bPL\bLA\bAT\bT!\b! assumes the region is over water or out-
-       side the United States, and will assign  an  elevation  of
-       sea-level to these areas.  This feature of S\bSP\bPL\bLA\bAT\bT!\b! makes it
-       possible to perform path analysis not only over land,  but
-       also between coastal areas not represented by USGS Digital
-       Elevation Model Data since they are  devoid  of  any  land
-       masses.   However, this behavior of S\bSP\bPL\bLA\bAT\bT!\b! underscores the
-       importance of having all the SDF files  required  for  the
-       region  being  analyzed  if  meaningful  results are to be
-       expected.
+       requested,  S\bSP\bPL\bLA\bAT\bT!\b!  assumes  the region is over water, and
+       will assign an elevation of sea-level to these areas.
+
+       This feature of S\bSP\bPL\bLA\bAT\bT!\b! makes it possible to  perform  path
+       analysis  not  only  over  land,  but also between coastal
+       areas not represented by  Digital  Elevation  Model  data.
+       This behavior of S\bSP\bPL\bLA\bAT\bT!\b! underscores the importance of hav-
+       ing all the SDF files required for the region  being  ana-
+       lyzed if meaningful results are to be expected.
 
 S\bSI\bIT\bTE\bE L\bLO\bOC\bCA\bAT\bTI\bIO\bON\bN (\b(Q\bQT\bTH\bH)\b) F\bFI\bIL\bLE\bES\bS
-       S\bSP\bPL\bLA\bAT\bT!\b! imports site location  information  of  transmitter
-       and  receiver  sites  analyzed  by  the program from ASCII
-       files having a _\b._\bq_\bt_\bh  extension.   QTH  files  contain  the
-       site's  name,  the site's latitude (in degrees North), the
-       site's longitude (in degrees West), and the site's antenna
+       S\bSP\bPL\bLA\bAT\bT!\b!  imports  site  location information of transmitter
+       and receiver sites analyzed  by  the  program  from  ASCII
+       files  having  a  _\b._\bq_\bt_\bh  extension.   QTH files contain the
+       site's name, the site's latitude (positive if North of the
+       equator,  negative  if  South),  the  site's longitude (in
+       degrees West, 0 to 360 degrees), and  the  site's  antenna
        height above ground level (AGL).  A single line-feed char-
        acter separates each field.  The antenna height is assumed
        to be specified in feet unless followed by the letter _\bm or
@@ -134,10 +159,10 @@ S\bSI\bIT\bTE\bE L\bLO\bOC\bCA\bAT\bTI\bIO\bON\bN (\b(Q\bQT\bTH\bH)\b) F\bFI\bIL\bLE\bES\bS
 L\bLO\bON\bNG\bGL\bLE\bEY\bY-\b-R\bRI\bIC\bCE\bE P\bPA\bAR\bRA\bAM\bME\bET\bTE\bER\bR (\b(L\bLR\bRP\bP)\b) F\bFI\bIL\bLE\bES\bS
        S\bSP\bPL\bLA\bAT\bT!\b! imports  Longley-Rice  model  parameter  data  from
        files  having  the  same base name as the transmitter site
-       QTH file, but carrying a _\b._\bl_\br_\bp  extension,  thus  providing
-       simple  and  accurate correlation between these associated
-       data sets.  The format for the Longley-Rice model  parame-
-       ter files is as follows (_\bw_\bn_\bj_\bt_\b._\bl_\br_\bp):
+       QTH file, but with a _\b._\bl_\br_\bp extension, thus providing simple
+       and  accurate  correlation  between  these associated data
+       sets.  The format for  the  Longley-Rice  model  parameter
+       files is as follows (_\bw_\bn_\bj_\bt_\b._\bl_\br_\bp):
 
                15.000  ; Earth Dielectric Constant (Relative per-
        mittivity)
@@ -158,7 +183,8 @@ L\bLO\bON\bNG\bGL\bLE\bEY\bY-\b-R\bRI\bIC\bCE\bE P\bPA\bAR\bRA\bAM\bME\bET\bTE\bER\bR (\b(L\bLR\bRP\bP)\b)
        then the default parameters listed above will be  assigned
        by  S\bSP\bPL\bLA\bAT\bT!\b! and a corresponding "splat.lrp" file containing
        this data will be written to the  current  working  direc-
-       tory.
+       tory.   "splat.lrp"  can  then  be  edited  by the user as
+       needed.
 
        Typical Earth dielectric constants and conductivity values
        are as follows:
@@ -182,39 +208,39 @@ L\bLO\bON\bNG\bGL\bLE\bEY\bY-\b-R\bRI\bIC\bCE\bE P\bPA\bAR\bRA\bAM\bME\bET\bTE\bER\bR (\b(L\bLR\bRP\bP)\b)
                3: Maritime Subtropical (West coast of Africa)
                4: Desert (Sahara)
                5: Continental Temperate
-               6:  Maritime  Temperate,  over  land  (UK and west
+               6: Maritime Temperate,  over  land  (UK  and  west
        coasts of US & EU)
                7: Maritime Temperate, over sea
 
-       The Continental Temperate climate is common to large  land
-       masses  in  the temperate zone, such as the United States.
-       For paths shorter than 100 km, there is little  difference
+       The  Continental Temperate climate is common to large land
+       masses in the temperate zone, such as the  United  States.
+       For  paths shorter than 100 km, there is little difference
        between Continental and Maritime Temperate climates.
 
-       The  final  two  parameters in the _\b._\bl_\br_\bp file correspond to
-       the statistical  analysis  provided  by  the  Longley-Rice
-       model.   In  this example, S\bSP\bPL\bLA\bAT\bT!\b!  will return the maximum
-       path loss occurring 50% of the time (fraction of time)  in
-       50%   of  situations  (fraction  of  situations).   Use  a
-       fraction of time parameter of 0.97 for digital television,
-       0.50  for analog in the United States.  Isotropic antennas
+       The final two parameters in the _\b._\bl_\br_\bp  file  correspond  to
+       the  statistical  analysis  provided  by  the Longley-Rice
+       model.  In this example, S\bSP\bPL\bLA\bAT\bT!\b!  will return  the  maximum
+       path  loss occurring 50% of the time (fraction of time) in
+       50% of situations (fraction of situations).  Use  a  frac-
+       tion  of  time  parameter  of 0.97 for digital television,
+       0.50 for analog in the United States.  Isotropic  antennas
        are assumed.
 
-       For  further  information  on   these   parameters,   see:
-       _\bh_\bt_\bt_\bp_\b:_\b/_\b/_\be_\bl_\bb_\be_\br_\bt_\b._\bi_\bt_\bs_\b._\bb_\bl_\bd_\br_\bd_\bo_\bc_\b._\bg_\bo_\bv_\b/_\bi_\bt_\bm_\b._\bh_\bt_\bm_\b                and
+       For   further   information   on  these  parameters,  see:
+       _\bh_\bt_\bt_\bp_\b:_\b/_\b/_\bf_\bl_\ba_\bt_\bt_\bo_\bp_\b._\bi_\bt_\bs_\b._\bb_\bl_\bd_\br_\bd_\bo_\bc_\b._\bg_\bo_\bv_\b/_\bi_\bt_\bm_\b._\bh_\bt_\bm_\bl                and
        _\bh_\bt_\bt_\bp_\b:_\b/_\b/_\bw_\bw_\bw_\b._\bs_\bo_\bf_\bt_\bw_\br_\bi_\bg_\bh_\bt_\b._\bc_\bo_\bm_\b/_\bf_\ba_\bq_\b/_\be_\bn_\bg_\bi_\bn_\be_\be_\br_\bi_\bn_\bg_\b/_\bp_\br_\bo_\bp_\b__\bl_\bo_\bn_\bg_\b-
        _\bl_\be_\by_\b__\br_\bi_\bc_\be_\b._\bh_\bt_\bm_\bl
 
 C\bCI\bIT\bTY\bY L\bLO\bOC\bCA\bAT\bTI\bIO\bON\bN F\bFI\bIL\bLE\bES\bS
-       The  names  and locations of cities, tower sites, or other
-       points of interest may imported and be  plotted  on  topo-
-       graphic  maps  generated  by  S\bSP\bPL\bLA\bAT\bT!\b!.   S\bSP\bPL\bLA\bAT\bT!\b! imports the
-       names of cities and locations from ASCII files  containing
-       the  location's  name,  the  location's  latitude, and the
+       The names and locations of cities, tower sites,  or  other
+       points  of  interest  may be imported and plotted on topo-
+       graphic maps generated  by  S\bSP\bPL\bLA\bAT\bT!\b!.   S\bSP\bPL\bLA\bAT\bT!\b!  imports  the
+       names  of cities and locations from ASCII files containing
+       the location's name,  the  location's  latitude,  and  the
        location's longitude.  Each field is separated by a comma.
-       Each  record is separated by a single line feed character.
-       As was the case with the _\b._\bq_\bt_\bh files, latitude  and  longi-
-       tude  information  may  be  entered  in  either decimal or
+       Each record is separated by a single line feed  character.
+       As  was  the case with the _\b._\bq_\bt_\bh files, latitude and longi-
+       tude information may  be  entered  in  either  decimal  or
        degree, minute, second (DMS) format.
 
        For example (_\bc_\bi_\bt_\bi_\be_\bs_\b._\bd_\ba_\bt):
@@ -227,47 +253,51 @@ C\bCI\bIT\bTY\bY L\bLO\bOC\bCA\bAT\bTI\bIO\bON\bN F\bFI\bIL\bLE\bES\bS
                Totowa, 40.906160, 74.223310
                Trenton, 40.219922, 74.754665
 
-       A total of five separate city data files may  be  imported
-       at  a time.  There is no limit to the size of these files.
-       S\bSP\bPL\bLA\bAT\bT!\b! reads city data sequentially, and plots only  those
-       locations  whose positions do not conflict with previously
-       plotted locations when generating topographic maps.
-
-       City data files may be generated manually using  any  text
-       editor,  imported from other sources, or derived from data
-       available from the U.S. Census Bureau  using  the  c\bci\bit\bty\byd\bde\be-\b-
-       c\bco\bod\bde\ber\br  utility  included with S\bSP\bPL\bLA\bAT\bT!\b!.  Such data is avail-
-       able free of charge via the Internet  at:  _\bh_\bt_\bt_\bp_\b:_\b/_\b/_\bw_\bw_\bw_\b._\bc_\be_\bn_\b-
-       _\bs_\bu_\bs_\b._\bg_\bo_\bv_\b/_\bg_\be_\bo_\b/_\bw_\bw_\bw_\b/_\bc_\bo_\bb_\b/_\bb_\bd_\by_\b__\bf_\bi_\bl_\be_\bs_\b._\bh_\bt_\bm_\bl,  and  must be in ASCII
+       A  total  of five separate city data files may be imported
+       at a time, and there is no limit  to  the  size  of  these
+       files.   S\bSP\bPL\bLA\bAT\bT!\b!  reads  city  data  on a "first come/first
+       served" basis, and plots only those locations whose  anno-
+       tations  do  not  conflict  with  annotations of locations
+       plotted earlier during S\bSP\bPL\bLA\bAT\bT's execution.   This  behavior
+       minimizes  clutter  in  S\bSP\bPL\bLA\bAT\bT!\b! generated topographic maps,
+       but also  mandates  that  important  locations  be  placed
+       toward  the  beginning  of  the  first city data file, and
+       disposable locations be positioned further down  the  list
+       or in subsequent data files.
+
+       City  data  files may be generated manually using any text
+       editor, imported from other sources, or derived from  data
+       available  from  the  U.S. Census Bureau using the c\bci\bit\bty\byd\bde\be-\b-
+       c\bco\bod\bde\ber\br utility included with S\bSP\bPL\bLA\bAT\bT!\b!.  Such data  is  avail-
+       able  free  of charge via the Internet at: _\bh_\bt_\bt_\bp_\b:_\b/_\b/_\bw_\bw_\bw_\b._\bc_\be_\bn_\b-
+       _\bs_\bu_\bs_\b._\bg_\bo_\bv_\b/_\bg_\be_\bo_\b/_\bw_\bw_\bw_\b/_\bc_\bo_\bb_\b/_\bb_\bd_\by_\b__\bf_\bi_\bl_\be_\bs_\b._\bh_\bt_\bm_\bl, and must be  in  ASCII
        format.
 
 C\bCA\bAR\bRT\bTO\bOG\bGR\bRA\bAP\bPH\bHI\bIC\bC B\bBO\bOU\bUN\bND\bDA\bAR\bRY\bY D\bDA\bAT\bTA\bA F\bFI\bIL\bLE\bES\bS
-       Cartographic boundary data may also be  imported  to  plot
-       the  boundaries  of  cities,  counties, or states on topo-
-       graphic maps generated by S\bSP\bPL\bLA\bAT\bT!\b!.  Such data  must  be  of
-       the  form  of  ARC/INFO Ungenerate (ASCII Format) Metadata
-       Cartographic Boundary Files, and are  available  from  the
-       U.S.   Census  Bureau via the Internet at: _\bh_\bt_\bt_\bp_\b:_\b/_\b/_\bw_\bw_\bw_\b._\bc_\be_\bn_\b-
-       _\bs_\bu_\bs_\b._\bg_\bo_\bv_\b/_\bg_\be_\bo_\b/_\bw_\bw_\bw_\b/_\bc_\bo_\bb_\b/_\bc_\bo_\b2_\b0_\b0_\b0_\b._\bh_\bt_\bm_\bl_\b#_\ba_\bs_\bc_\bi_\band  _\bh_\bt_\bt_\bp_\b:_\b/_\b/_\bw_\bw_\bw_\b._\bc_\be_\bn_\b-
-       _\bs_\bu_\bs_\b._\bg_\bo_\bv_\b/_\bg_\be_\bo_\b/_\bw_\bw_\bw_\b/_\bc_\bo_\bb_\b/_\bp_\bl_\b2_\b0_\b0_\b0_\b._\bh_\bt_\bm_\bl_\b#_\ba_\bs_\bc_\bi_\bi.   A  total  of five
-       separate cartographic boundary files may be imported at  a
-       time.   It  is not necessary to import state boundaries if
+       Cartographic  boundary  data  may also be imported to plot
+       the boundaries of cities, counties,  or  states  on  topo-
+       graphic  maps  generated  by S\bSP\bPL\bLA\bAT\bT!\b!.  Such data must be of
+       the form of ARC/INFO Ungenerate  (ASCII  Format)  Metadata
+       Cartographic  Boundary  Files,  and are available from the
+       U.S.  Census Bureau via the Internet  at:  _\bh_\bt_\bt_\bp_\b:_\b/_\b/_\bw_\bw_\bw_\b._\bc_\be_\bn_\b-
+       _\bs_\bu_\bs_\b._\bg_\bo_\bv_\b/_\bg_\be_\bo_\b/_\bw_\bw_\bw_\b/_\bc_\bo_\bb_\b/_\bc_\bo_\b2_\b0_\b0_\b0_\b._\bh_\bt_\bm_\bl_\b#_\ba_\bs_\bc_\bi_\b and _\bh_\bt_\bt_\bp_\b:_\b/_\b/_\bw_\bw_\bw_\b._\bc_\be_\bn_\b-
+       _\bs_\bu_\bs_\b._\bg_\bo_\bv_\b/_\bg_\be_\bo_\b/_\bw_\bw_\bw_\b/_\bc_\bo_\bb_\b/_\bp_\bl_\b2_\b0_\b0_\b0_\b._\bh_\bt_\bm_\bl_\b#_\ba_\bs_\bc_\bi_\bi.  A  total  of  five
+       separate  cartographic boundary files may be imported at a
+       time.  It is not necessary to import state  boundaries  if
        county boundaries have already been imported.
 
 P\bPR\bRO\bOG\bGR\bRA\bAM\bM O\bOP\bPE\bER\bRA\bAT\bTI\bIO\bON\bN
-       S\bSP\bPL\bLA\bAT\bT!\bis invoked via the command-line using a  series  of
-       switches  and arguments.  Since S\bSP\bPL\bLA\bAT\bT!\b! is a CPU and memory
-       intensive application, this type  of  interface  minimizes
-       overhead,  and  also  lends itself well to scripted opera-
+       S\bSP\bPL\bLA\bAT\bT!\b is  invoked via the command-line using a series of
+       switches and arguments.  Since S\bSP\bPL\bLA\bAT\bT!\b! is a CPU and  memory
+       intensive  application,  this  type of interface minimizes
+       overhead and lends itself well to scripted (batch)  opera-
        tions.  S\bSP\bPL\bLA\bAT\bT!\b!'s CPU and memory scheduling priority may be
-       adjusted through the use of the Unix n\bni\bic\bce\be command.
+       modified through the use of the Unix n\bni\bic\bce\be command.
 
        The number and type of switches passed to S\bSP\bPL\bLA\bAT\bT!\b! determine
-       its mode of operation and method of  output  data  genera-
-       tion.   Nearly all of S\bSP\bPL\bLA\bAT\bT!\b!'s switches may be cascaded in
-       any order on the command line when invoking the program to
-       include  all the features described by those switches when
-       performing an analysis.
+       its  mode  of  operation and method of output data genera-
+       tion.  Nearly all of S\bSP\bPL\bLA\bAT\bT!\b!'s switches may be cascaded  in
+       any order on the command line when invoking the program.
 
 P\bPO\bOI\bIN\bNT\bT-\b-T\bTO\bO-\b-P\bPO\bOI\bIN\bNT\bT A\bAN\bNA\bAL\bLY\bYS\bSI\bIS\bS
        S\bSP\bPL\bLA\bAT\bT!\b! may be used to perform line-of-sight terrain analy-
@@ -275,38 +305,43 @@ P\bPO\bOI\bIN\bNT\bT-\b-T\bTO\bO-\b-P\bPO\bOI\bIN\bNT\bT A\bAN\bNA\bAL\bLY\bYS\bSI\bIS\bS
 
        splat -t tx_site.qth -r rx_site.qth
 
-       invokes  a terrain analysis between the transmitter speci-
+       invokes a terrain analysis between the transmitter  speci-
        fied in _\bt_\bx_\b__\bs_\bi_\bt_\be_\b._\bq_\bt_\bh and receiver specified in _\br_\bx_\b__\bs_\bi_\bt_\be_\b._\bq_\bt_\bh,
-       and  writes  a  S\bSP\bPL\bLA\bAT\bT!\b!  Obstruction  Report to the current
-       working directory.  The report  contains  details  of  the
-       transmitter  and  receiver sites, and identifies the loca-
+       and writes a S\bSP\bPL\bLA\bAT\bT!\b!  Obstruction  Report  to  the  current
+       working  directory.   The  report  contains details of the
+       transmitter and receiver sites, and identifies  the  loca-
        tion of any obstructions detected during the analysis.  If
-       an  obstruction  can  be  cleared  by  raising the receive
-       antenna to a greater altitude, S\bSP\bPL\bLA\bAT\bT!\b!  will  indicate  the
-       minimum  antenna  height required for a line-of-sight path
-       to exist between the transmitter  and  receiver  locations
-       specified.   If  the  antenna must be raised a significant
-       amount, this determination may take some time.
-
-       are optional when invoking the program.  S\bSP\bPL\bLA\bAT\bT!\b!  automati-
-       cally  reads all SPLAT Data Files necessary to conduct the
-       terrain analysis between the sites specified.  By default,
-       the  location of SDF files is assumed to be in the current
-       working directory unless a ".splat_path" file  is  present
-       under the user's home directory.  If this file is present,
-       it must contain the full directory path to the location of
-       all the SDF files required by S\bSP\bPL\bLA\bAT\bT!\b! to perform its analy-
-       sis for the region containing the transmitter and receiver
-       sites  specified.   The  path  in this file must be of the
-       form of a single line of ASCII text:
+       an obstruction can  be  cleared  by  raising  the  receive
+       antenna  to  a greater altitude, S\bSP\bPL\bLA\bAT\bT!\b!  will indicate the
+       minimum antenna height required for a  line-of-sight  path
+       to  exist  between  the transmitter and receiver locations
+       specified.  If the antenna must be  raised  a  significant
+       amount,  this determination may take some time.  Note that
+       the results provided are the _\bm_\bi_\bn_\bi_\bm_\bu_\bm necessary for a line-
+       of-sight  path  to  exist,  and  do  not take Fresnel zone
+       clearance requirements into consideration.
+
+       _\bq_\bt_\bh extensions are assumed by S\bSP\bPL\bLA\bAT\bT!\b! for  QTH  files,  and
+       are  optional when invoking the program.  S\bSP\bPL\bLA\bAT\bT!\b! automati-
+       cally reads all SPLAT Data Files necessary to conduct  the
+       terrain  analysis  between  the  sites  specified.  S\bSP\bPL\bLA\bAT\bT!\b!
+       searches for the needed SDF files in the  current  working
+       directory  first.   If  the  needed  files  are not found,
+       S\bSP\bPL\bLA\bAT\bT!\b! then searches in  the  path  specified  by  the  _\b-_\bd
+       command-line switch:
 
-       /opt/splat/sdf/
+       splat -t tx_site -r rx_site -d /cdrom/sdf/
 
-       and may be generated with any text  editor.   The  default
-       path  specified in the _\b$_\bH_\bO_\bM_\bE_\b/_\b._\bs_\bp_\bl_\ba_\bt_\b__\bp_\ba_\bt_\bh file may be over-
-       ridden at any time using the _\b-_\bd switch:
+       An  external  directory path may be specified by placing a
+       ".splat_path" file under the user's home directory.   This
+       file  must  contain  the  full  directory path to the last
+       resort location of all the SDF files.   The  path  in  the
+       _\b$_\bH_\bO_\bM_\bE_\b/_\b._\bs_\bp_\bl_\ba_\bt_\b__\bp_\ba_\bt_\bh  file  must  be  of the form of a single
+       line of ASCII text:
 
-       splat -t tx_site -r rx_site -d /cdrom/sdf/
+       /opt/splat/sdf/
+
+       and can be generated using any text editor.
 
        A graph of the terrain profile between  the  receiver  and
        transmitter  locations  as a function of distance from the
@@ -407,10 +442,10 @@ P\bPO\bOI\bIN\bNT\bT-\b-T\bTO\bO-\b-P\bPO\bOI\bIN\bNT\bT A\bAN\bNA\bAL\bLY\bYS\bSI\bIS\bS
        of gray.  The dynamic range of the image is scaled between
        the highest and lowest elevations present in the map.  The
        only exception to this is sea-level, which is  represented
-       in blue.
+       using the color blue.
 
        S\bSP\bPL\bLA\bAT\bT!\b!  generated  topographic  maps  are 24-bit TrueColor
-       Portable PixMap (PPM) images, and may be  viewed,  edited,
+       Portable PixMap (PPM) images.  They may be viewed, edited,
        or  converted  to  other  graphic formats by popular image
        viewing applications such as x\bxv\bv,  T\bTh\bhe\be  G\bGI\bIM\bMP\bP,  I\bIm\bma\bag\bge\beM\bMa\bag\bgi\bic\bck\bk,
        and X\bXP\bPa\bai\bin\bnt\bt.  PNG format is highly recommended for lossless
@@ -476,7 +511,7 @@ D\bDE\bET\bTE\bER\bRM\bMI\bIN\bNI\bIN\bNG\bG R\bRE\bEG\bGI\bIO\bON\bNA\bAL\bL C\bCO\bOV\bVE\bER\bRA\bAG\bG
        work of sites, and predict the regional coverage for  each
        site specified.  In this mode, S\bSP\bPL\bLA\bAT\bT!\b! can generate a topo-
        graphic map displaying the geometric line-of-sight  cover-
-       age  area of the sites based on the location of each site,
+       age  area  of the sites based on the location of each site
        and the height of receive antenna wishing  to  communicate
        with the site in question.  S\bSP\bPL\bLA\bAT\bT!\b! switches from point-to-
        point analysis mode to area prediction mode  when  the  _\b-_\bc
@@ -502,7 +537,7 @@ D\bDE\bET\bTE\bER\bRM\bMI\bIN\bNI\bIN\bNG\bG R\bRE\bEG\bGI\bIO\bON\bNA\bAL\bL C\bCO\bOV\bVE\bER\bRA\bAG\bG
        splat -t wnjt -c 30.0 -m  1.333  -s  cities.dat  -b  coun-
        ties.dat -o map.ppm
 
-       An  earth  radius multiplier  of 1.333 instructs S\bSP\bPL\bLA\bAT\bT!\b! to
+       An  earth  radius  multiplier of 1.333 instructs S\bSP\bPL\bLA\bAT\bT!\b! to
        use the "four-thirds earth" model for line-of-sight propa-
        gation  analysis.  Any appropriate earth radius multiplier
        may be selected by the user.
@@ -520,7 +555,7 @@ D\bDE\bET\bTE\bER\bRM\bMI\bIN\bNI\bIN\bNG\bG R\bRE\bEG\bGI\bIO\bON\bNA\bAL\bL C\bCO\bOV\bVE\bER\bRA\bAG\bG
        Rice path loss map for a transmitter site  may  be  gener-
        ated:
 
-       splat  -t tx_site -L 30.0 -s cities.dat -b co34_d00.dat -o
+       splat  -t  wnjt  -L  30.0 -s cities.dat -b co34_d00.dat -o
        path_loss_map
 
        In this mode, S\bSP\bPL\bLA\bAT\bT!\b! generates a  multi-color  map  illus-
@@ -528,26 +563,38 @@ D\bDE\bET\bTE\bER\bRM\bMI\bIN\bNI\bIN\bNG\bG R\bRE\bEG\bGI\bIO\bON\bNA\bAL\bL C\bCO\bOV\bVE\bER\bRA\bAG\bG
        rounding the transmitter site.  A legend at the bottom  of
        the  map  correlates  each color with a specific path loss
        level in decibels.  Since Longley-Rice area prediction map
-       generation  is quite CPU intensive, provision for limiting
+       generation  is  very CPU intensive, provision for limiting
        the analysis range is provided  by  the  _\b-_\bR  switch.   The
        argument  must  be  given in miles.  If a range wider than
        the generated topographic map is  specified,  S\bSP\bPL\bLA\bAT\bT!\b!  will
        perform  Longley-Rice  path  loss calculations between all
        four corners of the area prediction map.
 
+       The _\b-_\bd_\bb switch allows a constraint to  be  placed  on  the
+       maximum  path loss region plotted on the map.  A path loss
+       between 80 and 230 dB may be specified using this  switch.
+       For  example,  if a path loss beyond -140 dB is irrelevant
+       to the survey being conducted, S\bSP\bPL\bLA\bAT\bT!\b!'s path loss plot can
+       be constrained to the region bounded by the 140 dB attenu-
+       ation contour as follows:
+
+       splat -t wnjt -L 30.0 -s cities.dat  -b  co34_d00.dat  -db
+       140 -o plot.ppm
+
+
 D\bDE\bET\bTE\bER\bRM\bMI\bIN\bNI\bIN\bNG\bG M\bMU\bUL\bLT\bTI\bIP\bPL\bLE\bE R\bRE\bEG\bGI\bIO\bON\bNS\bS O\bOF\bF C\bCO\bOV\bVE\bER\bRA\bAG\bGE\bE
-       S\bSP\bPL\bLA\bAT\bT!\bcan also display line-of-sight coverage  areas  for
-       as  many  as  four  separate transmitter sites on a common
+       S\bSP\bPL\bLA\bAT\bT!\b can  also display line-of-sight coverage areas for
+       as many as four separate transmitter  sites  on  a  common
        topographic map.  For example:
 
        splat -t site1 site2 site3 site4 -c 30.0 -o network.ppm
 
        plots the regional line-of-sight coverage of site1, site2,
-       site3,  and  site4 based on a receive antenna located 30.0
-       feet above ground level.  A topographic map is then  writ-
-       ten  to  the file _\bn_\be_\bt_\bw_\bo_\br_\bk_\b._\bp_\bp_\bm.  The line-of-sight coverage
-       area of the transmitters are plotted  as  follows  in  the
-       colors  indicated (along with their corresponding RGB val-
+       site3, and site4 based on a receive antenna  located  30.0
+       feet  above  ground  level.   A  topographic  map  is then
+       written to the file _\bn_\be_\bt_\bw_\bo_\br_\bk_\b._\bp_\bp_\bm.  The line-of-sight cover-
+       age area of the transmitters are plotted as follows in the
+       colors indicated (along with their corresponding RGB  val-
        ues in decimal):
 
            site1: Green (0,255,0)
@@ -569,20 +616,20 @@ D\bDE\bET\bTE\bER\bRM\bMI\bIN\bNI\bIN\bNG\bG M\bMU\bUL\bLT\bTI\bIP\bPL\bLE\bE R\bRE\bEG\bGI\bIO\bON\bNS\bS
 
            site1 + site2 + site3 + site4: Gold2 (238,201,0)
 
-       If  separate _\b._\bq_\bt_\bh files are generated, each representing a
-       common site location but a  different  antenna  height,  a
-       single  topographic map illustrating the regional coverage
-       from as many as four separate locations on a single  tower
+       If separate _\b._\bq_\bt_\bh files are generated, each representing  a
+       common  site  location  but  a different antenna height, a
+       single topographic map illustrating the regional  coverage
+       from  as many as four separate locations on a single tower
        may be generated by S\bSP\bPL\bLA\bAT\bT!\b!.
 
 T\bTO\bOP\bPO\bOG\bGR\bRA\bAP\bPH\bHI\bIC\bC M\bMA\bAP\bP G\bGE\bEN\bNE\bER\bRA\bAT\bTI\bIO\bON\bN
-       In  certain  situations, it may be desirable to generate a
-       topographic map of  a  region  without  plotting  coverage
+       In certain situations, it may be desirable to  generate  a
+       topographic  map  of  a  region  without plotting coverage
        areas,  line-of-sight  paths,  or  generating  obstruction
-       reports.  There are several ways of doing  this.   If  one
-       wishes  to  generate  a  topographic  map illustrating the
-       location of a transmitter and receiver site along  with  a
-       brief  text  report describing the locations and distances
+       reports.   There  are  several ways of doing this.  If one
+       wishes to generate  a  topographic  map  illustrating  the
+       location  of  a transmitter and receiver site along with a
+       brief text report describing the locations  and  distances
        between the sites, the _\b-_\bn switch should be invoked as fol-
        lows:
 
@@ -592,27 +639,34 @@ T\bTO\bOP\bPO\bOG\bGR\bRA\bAP\bPH\bHI\bIC\bC M\bMA\bAP\bP G\bGE\bEN\bNE\bER\bRA\bAT\bTI\bIO\bON\bN
 
        splat -t tx_site -r rx_site -N -o topo_map.ppm
 
-       If  the  _\b-_\bo  switch  and  output filename are omitted when
+       If the _\b-_\bo switch and  output  filename  are  omitted  when
        using either the _\b-_\bn or _\b-_\bN switches, output is written to a
-       file  named  _\bm_\ba_\bp_\b._\bp_\bp_\bm  in  the current working directory by
+       file named _\bm_\ba_\bp_\b._\bp_\bp_\bm in the  current  working  directory  by
        default.
 
 D\bDE\bET\bTE\bER\bRM\bMI\bIN\bNA\bAT\bTI\bIO\bON\bN O\bOF\bF A\bAN\bNT\bTE\bEN\bNN\bNA\bA H\bHE\bEI\bIG\bGH\bHT\bT A\bAB\bBO\bOV\bVE\bE A\bAV\bVE\bER\bRA\bAG\bGE\bE T\bTE\bER\bRR\bRA\bAI\bIN\bN
-       S\bSP\bPL\bLA\bAT\bT!\bdetermines antenna  height  above  average  terrain
-       (HAAT)  according to the procedure defined by Federal Com-
-       munications Commission Part 73.313(d).  According to  this
+       S\bSP\bPL\bLA\bAT\bT!\b determines  antenna  height  above average terrain
+       (HAAT) according to the procedure defined by Federal  Com-
+       munications  Commission Part 73.313(d).  According to this
        definition, terrain elevations along eight radials between
-       2 and 10 miles (3 and 16 kilometers) from the  site  being
-       analyzed  are  sampled and averaged for each 45 degrees of
-       azimuth starting with True North.  If one or more  radials
-       lie  entirely  over water, or over land outside the United
-       States (areas for which no USGS topography data is  avail-
+       2  and  10 miles (3 and 16 kilometers) from the site being
+       analyzed are sampled and averaged for each 45  degrees  of
+       azimuth  starting with True North.  If one or more radials
+       lie entirely over water or over land  outside  the  United
+       States  (areas for which no USGS topography data is avail-
        able), then those radials are omitted from the calculation
-       of average terrain.  If part of a radial  extends  over  a
+       of  average  terrain.   If part of a radial extends over a
        body of water or over land outside the United States, then
        only that part of the radial lying over United States land
        is used in the determination of average terrain.
 
+       Note that SRTM elevation data, unlike older  3-arc  second
+       USGS  data,  extends  beyond  the  borders  of  the United
+       States.  Therefore, HAAT results may not be in  full  com-
+       pliance with FCC Part 73.313(d) in areas along the borders
+       of the United States if the SDF files used by  S\bSP\bPL\bLA\bAT\bT!\b!  are
+       SRTM-derived.
+
        When  performing  point-to-point  terrain analysis, S\bSP\bPL\bLA\bAT\bT!\b!
        determines the antenna height above average  terrain  only
        if  enough topographic data has already been loaded by the
@@ -628,49 +682,42 @@ D\bDE\bET\bTE\bER\bRM\bMI\bIN\bNA\bAT\bTI\bIO\bON\bN O\bOF\bF A\bAN\bNT\bTE\bEN\bNN\bNA\bA H\bHE\bEI\bIG\b
        as  the  average terrain above mean sea level for azimuths
        of 0, 45, 90, 135, 180, 225, 270,  and  315  degrees,  and
        include such information in the site report generated.  If
-       one or more of the eight radials surveyed fall over  water
-       or  land outside the United States, S\bSP\bPL\bLA\bAT\bT!\b! reports _\bN_\bo _\bT_\be_\br_\b-
-       _\br_\ba_\bi_\bn for those radial paths.
-
-S\bSE\bET\bTT\bTI\bIN\bNG\bG T\bTH\bHE\bE M\bMA\bAX\bXI\bIM\bMU\bUM\bM S\bSI\bIZ\bZE\bE O\bOF\bF A\bAN\bN A\bAN\bNA\bAL\bLY\bYS\bSI\bIS\bS R\bRE\bEG\bGI\bIO\bON\bN
-       S\bSP\bPL\bLA\bAT\bT!\b! reads SDF files into a series of memory "slots"  as
-       required within the structure of the program.  Each "slot"
-       holds one SDF file.  Each SDF file represents a one degree
-       by  one  degree  region  of  terrain.   A _\b#_\bd_\be_\bf_\bi_\bn_\be _\bM_\bA_\bX_\bS_\bL_\bO_\bT_\bS
-       statement in the first several lines of _\bs_\bp_\bl_\ba_\bt_\b._\bc_\bp_\bp sets the
-       maximum  number  of "slots" available for topography data.
-       It also sets the maximum size of the topographic maps gen-
-       erated  by  S\bSP\bPL\bLA\bAT\bT!\b!.   MAXSLOTS is set to 9 by default.  If
-       S\bSP\bPL\bLA\bAT\bT!\b! produces a segmentation fault on start-up with this
-       default,  it  is  an indication that not enough RAM and/or
-       virtual memory (swap space) are available  to  run  S\bSP\bPL\bLA\bAT\bT!\b!
-       with  this number of MAXSLOTS.  In this case, MAXSLOTS may
-       be reduced to 4, although this will greatly limit the max-
-       imum  region  S\bSP\bPL\bLA\bAT\bT!\b!  will  be  able  to  analyze.  If 118
-       megabytes or more of total memory (swap space plus RAM) is
-       available,  then  MAXSLOTS  may  be increased to 16.  This
-       will permit operation over a 4-degree by 4-degree  region,
-       which  is  sufficient for single antenna heights in excess
-       of 10,000 feet above mean  sea  level,  or  point-to-point
-       distances of over 1000 miles.
+       one or more of the eight radials surveyed fall over water,
+       or over regions for which no SDF data is available, S\bSP\bPL\bLA\bAT\bT!\b!
+       reports _\bN_\bo _\bT_\be_\br_\br_\ba_\bi_\bn for the radial paths affected.
+
+R\bRE\bES\bST\bTR\bRI\bIC\bCT\bTI\bIN\bNG\bG T\bTH\bHE\bE M\bMA\bAX\bXI\bIM\bMU\bUM\bM S\bSI\bIZ\bZE\bE O\bOF\bF A\bAN\bN A\bAN\bNA\bAL\bLY\bYS\bSI\bIS\bS R\bRE\bEG\bGI\bIO\bON\bN
+       S\bSP\bPL\bLA\bAT\bT!\b! reads SDF files as needed into a series  of  memory
+       "slots"  within the structure of the program.  Each "slot"
+       holds one SDF file representing a one degree by one degree
+       region  of  terrain.   A _\b#_\bd_\be_\bf_\bi_\bn_\be _\bM_\bA_\bX_\bS_\bL_\bO_\bT_\bS statement in the
+       first several lines of _\bs_\bp_\bl_\ba_\bt_\b._\bc_\bp_\bp sets the  maximum  number
+       of  "slots"  available  for topography data.  It also sets
+       the maximum size of  the  topographic  maps  generated  by
+       S\bSP\bPL\bLA\bAT\bT!\b!.   MAXSLOTS is set to 9 by default.  If S\bSP\bPL\bLA\bAT\bT!\b! pro-
+       duces a segmentation fault on start-up with this  default,
+       it  is  an  indication  that not enough RAM and/or virtual
+       memory (swap space) is available to run S\bSP\bPL\bLA\bAT\bT!\b!  with  this
+       number  of MAXSLOTS.  In situations where available memory
+       is low, MAXSLOTS may be reduced to 4 with the  understand-
+       ing that this will greatly limit the maximum region S\bSP\bPL\bLA\bAT\bT!\b!
+       will be able to analyze.  If  118  megabytes  or  more  of
+       total  memory  (swap  space  plus  RAM) is available, then
+       MAXSLOTS may be increased to 16.  This will permit  opera-
+       tion  over  a 4-degree by 4-degree region, which is suffi-
+       cient for single antenna heights in excess of 10,000  feet
+       above  mean sea level, or point-to-point distances of over
+       1000 miles.
 
 A\bAD\bDD\bDI\bIT\bTI\bIO\bON\bNA\bAL\bL I\bIN\bNF\bFO\bOR\bRM\bMA\bAT\bTI\bIO\bON\bN
        Invoking S\bSP\bPL\bLA\bAT\bT!\b! without any arguments will display all the
        command-line options available with the program along with
        a brief summary of each.
 
-       The  latest news and information regarding S\bSP\bPL\bLA\bAT\bT!\b! software
+       The latest news and information regarding S\bSP\bPL\bLA\bAT\bT!\b software
        is available through the official S\bSP\bPL\bLA\bAT\bT!\b! software web page
        located at: _\bh_\bt_\bt_\bp_\b:_\b/_\b/_\bw_\bw_\bw_\b._\bq_\bs_\bl_\b._\bn_\be_\bt_\b/_\bk_\bd_\b2_\bb_\bd_\b/_\bs_\bp_\bl_\ba_\bt_\b._\bh_\bt_\bm_\bl.
 
-F\bFI\bIL\bLE\bES\bS
-       $HOME/.splat_path
-              User-generated  file containing the default path to
-              the directory containing the SDF data files.
-
-       splat.lrp
-              Default Longley-Rice model parameters.
-
 A\bAU\bUT\bTH\bHO\bOR\bRS\bS
        John A. Magliacane, KD2BD <_\bk_\bd_\b2_\bb_\bd_\b@_\ba_\bm_\bs_\ba_\bt_\b._\bo_\br_\bg>
               Creator, Lead Developer
@@ -680,4 +727,3 @@ A\bAU\bUT\bTH\bHO\bOR\bRS\bS
 
 
 
-KD2BD Software           20 January 2004                SPLAT!(1)
index b4af60b173f144749c83f192ed05becfb9134871..7cd520cdd90c18fbb730c1286279fbe12b4c0102 100644 (file)
@@ -1,47 +1,53 @@
-.TH SPLAT! 1 "20 January 2004" "KD2BD Software" "KD2BD Software"
+.TH SPLAT! 1 "02 March 2006" "KD2BD Software" "KD2BD Software"
 .SH NAME
-splat \- A \fBS\fPignal \fBP\fPropagation, \fBL\fPoss, \fBA\fPnd \fBT\fPerrain analysis tool
+splat \- An RF \fBS\fPignal \fBP\fPropagation, \fBL\fPoss, \fBA\fPnd \fBT\fPerrain analysis tool
 .SH SYNOPSIS
-splat [-t \fItransmitter_site.qth\fP]
-[-r \fIreceiver_site.qth\fP]
-[-c \fIrx_antenna_height_for_los_coverage_analysis (feet) (float)\fP]
-[-L \fIrx_antenna_height_for_Longley-Rice_coverage_analysis (feet) (float)\fP]
-[-p \fIterrain_profile.ext\fP]
-[-e \fIelevation_profile.ext\fP]
-[-h \fIheight_profile.ext\fP]
-[-l \fILongley-Rice_profile.ext\fP]
-[-o \fItopographic_map_filename.ppm\fP]
-[-b \fIcartographic_boundary_filename.dat\fP]
-[-s \fIsite/city_database.dat\fP]
-[-d \fIsdf_directory_path\fP]
-[-m \fIearth_radius_multiplier (float)\fP]
-[-R \fImaximum_coverage_range (for -c or -L) (miles) (float)\fP] 
+splat [-t  \fItransmitter_site.qth\fP]
+[-r  \fIreceiver_site.qth\fP]
+[-c  \fIrx_antenna_height_for_los_coverage_analysis (feet) (float)\fP]
+[-L  \fIrx_antenna_height_for_Longley-Rice_coverage_analysis (feet) (float)\fP]
+[-p  \fIterrain_profile.ext\fP]
+[-e  \fIelevation_profile.ext\fP]
+[-h  \fIheight_profile.ext\fP]
+[-l  \fILongley-Rice_profile.ext\fP]
+[-o  \fItopographic_map_filename.ppm\fP]
+[-b  \fIcartographic_boundary_filename.dat\fP]
+[-s  \fIsite/city_database.dat\fP]
+[-d  \fIsdf_directory_path\fP]
+[-m  \fIearth_radius_multiplier (float)\fP]
+[-R  \fImaximum_coverage_range (for -c or -L) (miles) (float)\fP]
+[-dB \fImaximum attenuation contour to display on path loss maps (80-230 dB)\fP]
 [-n]
 [-N]
 .SH DESCRIPTION
-\fBSPLAT!\fP is a simple, yet powerful terrain analysis tool written
-for Unix and Linux-based workstations. \fBSPLAT!\fP is free software.
-Redistribution and/or modification is permitted under the terms of the
-GNU General Public License as published by the Free Software Foundation,
-either version 2 of the License or any later version.  Adoption of
-\fBSPLAT!\fP source code in proprietary or closed-source applications
-is a violation of this license, and is \fBstrictly\fP forbidden. 
+\fBSPLAT!\fP is a powerful terrestrial RF propagation and terrain
+analysis tool covering the spectrum between 20 MHz and 20 GHz.  It
+is designed for operation on Unix and Linux-based workstations.
+\fBSPLAT!\fP is free software.  Redistribution and/or modification
+is permitted under the terms of the GNU General Public License as
+published by the Free Software Foundation, either version 2 of the
+License or any later version.  Adoption of \fBSPLAT!\fP source code
+in proprietary or closed-source applications is a violation of this
+license, and is \fBstrictly\fP forbidden. 
 
 \fBSPLAT!\fP is distributed in the hope that it will be useful, but
 WITHOUT ANY WARRANTY, without even the implied warranty of MERCHANTABILITY
 or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
 for more details.
 .SH INTRODUCTION
-\fBSPLAT!\fP is a terrestrial RF propagation analysis tool for the
-spectrum between 20 MHz and 20 GHz, and provides information of
-interest to communication system designers and site engineers.
-\fBSPLAT!\fP determines great circle distances and bearings between
-sites, antenna elevation angles (uptilt), depression angles
-(downtilt), antenna height above mean sea level, antenna height
-above average terrain, bearings and distances to known obstructions,
-Longley-Rice path loss, and minimum antenna height requirements
-needed to establish line-of-sight communication paths absent of
-obstructions due to terrain.  \fBSPLAT!\fP produces reports, graphs,
+Applications of \fBSPLAT!\fP include the visualization, design, and
+link budget analysis of wireless Wide Area Networks (WANs), commercial
+and amateur radio communication systems above 20 MHz, microwave links,
+frequency coordination, and the determination of analog and digital
+terrestrial radio and television contour regions.
+
+\fBSPLAT!\fP provides RF site engineering data such as great circle
+distances and bearings between sites, antenna elevation angles (uptilt),
+depression angles (downtilt), antenna height above mean sea level,
+antenna height above average terrain, bearings and distances to known
+obstructions, Longley-Rice path attenuation, and minimum antenna height
+requirements needed to establish line-of-sight communication paths absent
+of obstructions due to terrain.  \fBSPLAT!\fP produces reports, graphs,
 and highly detailed and carefully annotated topographic maps depicting
 line-of-sight paths, path loss, and expected coverage areas of
 transmitters and repeater systems.  When performing line-of-sight
@@ -49,56 +55,72 @@ analysis in situations where multiple transmitter or repeater sites
 are employed, \fBSPLAT!\fP determines individual and mutual areas
 of coverage within the network specified.
 
-\fBSPLAT!\fP operates in two modes: \fIpoint-to-point mode\fP, and
-\fIarea prediction mode\fP.  These modes may be invoked using either
+\fBSPLAT!\fP operates in two distinct modes: \fIpoint-to-point mode\fP,
+and \fIarea prediction mode\fP, and may be invoked using either
 line-of-sight (LOS) or Irregular Terrain (ITM) propagation models.
 True Earth, four-thirds Earth, or any other Earth radius may be
 specified by the user when performing line-of-sight analysis.
 .SH INPUT FILES
 \fBSPLAT!\fP is a command-line driven application, and reads input
-data through a number of data files.  Each has its own format.  Some
-files are mandatory for successful execution of the program, while
-others are optional.  Mandatory files include SPLAT Data Files (SDF
-files), site location files (QTH files), and Longley-Rice model
-parameter files (LRP files).  Optional files include city/site
-location files, and cartographic boundary files.
+data through a number of data files.  Some files are mandatory for
+successful execution of the program, while others are optional.
+Mandatory files include SPLAT Data Files (SDF files), site location
+files (QTH files), and Longley-Rice model parameter files (LRP files).
+Optional files include city/site location files, and cartographic
+boundary files.
 .SH SPLAT DATA FILES
 \fBSPLAT!\fP imports topographic data in the form of SPLAT Data Files
-(SDFs) that may be generated from a number of information sources.  In
-the United States, SPLAT Data Files are most often derived from U.S.
+(SDFs).  These files may be generated from a number of information sources.
+In the United States, SPLAT Data Files can be generated through U.S.
 Geological Survey Digital Elevation Models (DEMs) using the \fBusgs2sdf\fP
 utility included with \fBSPLAT!\fP.  USGS Digital Elevation Models
-compatible with this utility are available at no cost via the Internet at:
-\fIhttp://edcsgs9.cr.usgs.gov/glis/hyper/guide/1_dgr_demfig/index1m.html\fP.
-
-SPLAT Data Files contain topographic elevations to the nearest meter
-above mean sea level for 1-degree by 1-degree regions of the earth with
-a resolution of 3-arc seconds.  SDF files can be read in either standard
-format (\fI.sdf\fP) as generated by the \fBusgs2sdf\fP utility, or in
-bzip2 compressed format (\fI.sdf.bz2\fP).  Since uncompressed files can
-be slightly faster to load than compressed files, \fBSPLAT!\fP searches
-for the needed SDF data in uncompressed format first.  If such data cannot
-located, then \fBSPLAT!\fP tries to read the data in bzip2 compressed
+compatible with this utility may be downloaded from:
+\fIhttp://edcftp.cr.usgs.gov/pub/data/DEM/250/\fP.
+
+Significantly better resolution can be obtained through the use
+of SRTM-3 Version 2 digital elevation models.  These models are the
+result of the STS-99 Space Shuttle Radar Topography Mission, and are
+available for most populated regions of the Earth.  SPLAT Data Files
+may be generated from SRTM data using the included \fBsrtm2sdf\fP utility.
+SRTM-3 Version 2 data may be obtained through anonymous FTP from:
+\fIftp://e0srp01u.ecs.nasa.gov:21/srtm/version2/\fP
+
+Despite the higher accuracy that SRTM data has to offer, some voids
+in the data sets exist.  When voids are detected, the \fBsrtm2sdf\fP
+utility replaces them with corresponding data found in existing SDF
+files (that were presumably created from earlier USGS data through the
+\fBusgs2sdf\fP utility).  If USGS-derived SDF data is not available, voids
+are handled through adjacent pixel averaging, or direct replacement.
+
+SPLAT Data Files contain integer value topographic elevations (in meters)
+referenced to mean sea level for 1-degree by 1-degree regions of the
+earth with a resolution of 3-arc seconds.  SDF files can be read in
+either standard format (\fI.sdf\fP) as generated by the \fBusgs2sdf\fP
+and \fBsrtm2sdf\fP utilities, or in bzip2 compressed format
+(\fI.sdf.bz2\fP).  Since uncompressed files can be processed slightly
+faster than files that have been compressed, \fBSPLAT!\fP searches for
+the needed SDF data in uncompressed format first.  If uncompressed data
+cannot located, \fBSPLAT!\fP then searches for data in bzip2 compressed
 format.  If no compressed SDF files can be found for the region requested,
-\fBSPLAT!\fP assumes the region is over water or outside the United States,
-and will assign an elevation of sea-level to these areas.  This feature
-of \fBSPLAT!\fP makes it possible to perform path analysis not only over
-land, but also between coastal areas not represented by USGS Digital
-Elevation Model Data since they are devoid of any land masses.  However,
-this behavior of \fBSPLAT!\fP underscores the importance of having all
-the SDF files required for the region being analyzed if meaningful
-results are to be expected.
+\fBSPLAT!\fP assumes the region is over water, and will assign an
+elevation of sea-level to these areas.
+
+This feature of \fBSPLAT!\fP makes it possible to perform path analysis
+not only over land, but also between coastal areas not represented by
+Digital Elevation Model data.  This behavior of \fBSPLAT!\fP underscores
+the importance of having all the SDF files required for the region being
+analyzed if meaningful results are to be expected.
 .SH SITE LOCATION (QTH) FILES
 \fBSPLAT!\fP imports site location information of transmitter and receiver
 sites analyzed by the program from ASCII files having a \fI.qth\fP extension.
-QTH files contain the site's name, the site's latitude (in degrees North),
-the site's longitude (in degrees West), and the site's antenna height
-above ground level (AGL).  A single line-feed character separates each
-field.  The antenna height is assumed to be specified in feet unless
-followed by the letter \fIm\fP or the word \fImeters\fP in either upper
-or lower case.  Latitude and longitude information may be expressed in
-either decimal format (74.6889) or degree, minute, second (DMS)
-format (74 41 20.0).
+QTH files contain the site's name, the site's latitude (positive if North
+of the equator, negative if South), the site's longitude (in degrees West,
+0 to 360 degrees), and the site's antenna height above ground level (AGL).
+A single line-feed character separates each field.  The antenna height is
+assumed to be specified in feet unless followed by the letter \fIm\fP or
+the word \fImeters\fP in either upper or lower case.  Latitude and
+longitude information may be expressed in either decimal format (74.6889)
+or degree, minute, second (DMS) format (74 41 20.0).
 
 For example, a site location file describing television station WNJT,
 Trenton, NJ (\fIwnjt.qth\fP) might read as follows:
@@ -112,7 +134,7 @@ Each transmitter and receiver site analyzed by \fBSPLAT!\fP must be
 represented by its own site location (QTH) file.
 .SH LONGLEY-RICE PARAMETER (LRP) FILES
 \fBSPLAT!\fP imports Longley-Rice model parameter data from files having
-the same base name as the transmitter site QTH file, but carrying a \fI.lrp\fP
+the same base name as the transmitter site QTH file, but with a \fI.lrp\fP
 extension, thus providing simple and accurate correlation between these
 associated data sets.  The format for the Longley-Rice model parameter
 files is as follows (\fIwnjt.lrp\fP):
@@ -131,7 +153,8 @@ be found, \fBSPLAT!\fP scans the current working directory for
 the file "splat.lrp".  If this file cannot be found, then the default
 parameters listed above will be assigned by \fBSPLAT!\fP and a
 corresponding "splat.lrp" file containing this data will be written
-to the current working directory.
+to the current working directory.  "splat.lrp" can then be edited
+by the user as needed.
 
 Typical Earth dielectric constants and conductivity values are as
 follows:
@@ -170,11 +193,11 @@ of time parameter of 0.97 for digital television, 0.50 for analog in the
 United States.  Isotropic antennas are assumed.
 
 For further information on these parameters, see:
-\fIhttp://elbert.its.bldrdoc.gov/itm.html\fP and
+\fIhttp://flattop.its.bldrdoc.gov/itm.html\fP and
 \fIhttp://www.softwright.com/faq/engineering/prop_longley_rice.html\fP
 .SH CITY LOCATION FILES
 The names and locations of cities, tower sites, or other points of interest
-may imported and be plotted on topographic maps generated by \fBSPLAT!\fP.
+may be imported and plotted on topographic maps generated by \fBSPLAT!\fP.
 \fBSPLAT!\fP imports the names of cities and locations from ASCII files
 containing the location's name, the location's latitude, and the location's
 longitude.  Each field is separated by a comma.  Each record is separated
@@ -192,11 +215,15 @@ For example (\fIcities.dat\fP):
         Totowa, 40.906160, 74.223310
         Trenton, 40.219922, 74.754665
 \fR
-A total of five separate city data files may be imported at a time.
-There is no limit to the size of these files.  \fBSPLAT!\fP reads city
-data sequentially, and plots only those locations whose positions do
-not conflict with previously plotted locations when generating
-topographic maps.
+A total of five separate city data files may be imported at a time,
+and there is no limit to the size of these files.  \fBSPLAT!\fP reads
+city data on a "first come/first served" basis, and plots only those
+locations whose annotations do not conflict with annotations of
+locations plotted earlier during \fBSPLAT\fP's execution.  This behavior
+minimizes clutter in \fBSPLAT!\fP generated topographic maps, but also
+mandates that important locations be placed toward the beginning of
+the first city data file, and disposable locations be positioned
+further down the list or in subsequent data files.
 
 City data files may be generated manually using any text editor,
 imported from other sources, or derived from data available from the
@@ -218,15 +245,14 @@ have already been imported.
 .SH PROGRAM OPERATION
 \fBSPLAT!\fP is invoked via the command-line using a series of switches
 and arguments.  Since \fBSPLAT!\fP is a CPU and memory intensive application,
-this type of interface minimizes overhead, and also lends itself well to
-scripted operations.  \fBSPLAT!\fP's CPU and memory scheduling priority
-may be adjusted through the use of the Unix \fBnice\fP command.
+this type of interface minimizes overhead and lends itself well to
+scripted (batch) operations.  \fBSPLAT!\fP's CPU and memory scheduling
+priority may be modified through the use of the Unix \fBnice\fP command.
 
 The number and type of switches passed to \fBSPLAT!\fP determine its
 mode of operation and method of output data generation.  Nearly all
 of \fBSPLAT!\fP's switches may be cascaded in any order on the command
-line when invoking the program to include all the features described
-by those switches when performing an analysis.
+line when invoking the program.
 .SH POINT-TO-POINT ANALYSIS
 \fBSPLAT!\fP may be used to perform line-of-sight terrain analysis
 between two specified site locations.  For example:
@@ -243,27 +269,29 @@ by raising the receive antenna to a greater altitude, \fBSPLAT!\fP
 will indicate the minimum antenna height required for a line-of-sight
 path to exist between the transmitter and receiver locations specified.
 If the antenna must be raised a significant amount, this determination
-may take some time.
+may take some time.  Note that the results provided are the \fIminimum\fP
+necessary for a line-of-sight path to exist, and do not take Fresnel
+zone clearance requirements into consideration.
 
-\fI.qth\fP extensions are assumed by \fBSPLAT!\fP for QTH files, and
+\fIqth\fP extensions are assumed by \fBSPLAT!\fP for QTH files, and
 are optional when invoking the program.  \fBSPLAT!\fP automatically
 reads all SPLAT Data Files necessary to conduct the terrain analysis
-between the sites specified.  By default, the location of SDF files
-is assumed to be in the current working directory unless a
-".splat_path" file is present under the user's home directory.
-If this file is present, it must contain the full directory path to
-the location of all the SDF files required by \fBSPLAT!\fP to perform
-its analysis for the region containing the transmitter and receiver
-sites specified.  The path in this file must be of the form of a
+between the sites specified.  \fBSPLAT!\fP searches for the needed
+SDF files in the current working directory first.  If the needed
+files are not found, \fBSPLAT!\fP then searches in the path specified
+by the \fI-d\fP command-line switch:
+
+\fCsplat -t tx_site -r rx_site -d /cdrom/sdf/\fR
+
+An external directory path may be specified by placing a ".splat_path"
+file under the user's home directory.  This file must contain the full
+directory path to the last resort location of all the SDF files.  The
+path in the \fI$HOME/.splat_path\fP file must be of the form of a
 single line of ASCII text:
 
 \fC/opt/splat/sdf/\fR
 
-and may be generated with any text editor.  The default path specified
-in the \fI$HOME/.splat_path\fP file may be overridden at any time using
-the \fI-d\fP switch:
-
-\fCsplat -t tx_site -r rx_site -d /cdrom/sdf/\fR
+and can be generated using any text editor.
 
 A graph of the terrain profile between the receiver and transmitter
 locations as a function of distance from the receiver can be generated
@@ -362,10 +390,10 @@ elevations using a logarithmic grayscale, with higher elevations
 represented through brighter shades of gray.  The dynamic range of
 the image is scaled between the highest and lowest elevations present
 in the map.  The only exception to this is sea-level, which is
-represented in blue.
+represented using the color blue.
 
 \fBSPLAT!\fP generated topographic maps are 24-bit TrueColor Portable
-PixMap (PPM) images, and may be viewed, edited, or converted to other
+PixMap (PPM) images.  They may be viewed, edited, or converted to other
 graphic formats by popular image viewing applications such as \fBxv\fP,
 \fBThe GIMP\fP, \fBImageMagick\fP, and \fBXPaint\fP.  PNG format is
 highly recommended for lossless compressed storage of \fBSPLAT!\fP
@@ -422,7 +450,7 @@ path between the fourth transmitter and the receiver will be in sienna.
 of sites, and predict the regional coverage for each site specified.
 In this mode, \fBSPLAT!\fP can generate a topographic map displaying
 the geometric line-of-sight coverage area of the sites based on the
-location of each site, and the height of receive antenna wishing to
+location of each site and the height of receive antenna wishing to
 communicate with the site in question.  \fBSPLAT!\fP switches from
 point-to-point analysis mode to area prediction mode when the \fI-c\fP
 switch is invoked as follows:
@@ -443,7 +471,7 @@ by using the Earth radius multiplier (\fI-m\fP) switch:
 
 \fCsplat -t wnjt -c 30.0 -m 1.333 -s cities.dat -b counties.dat -o map.ppm\fR
 
-An earth radius multiplier  of 1.333 instructs \fBSPLAT!\fP to use
+An earth radius multiplier of 1.333 instructs \fBSPLAT!\fP to use
 the "four-thirds earth" model for line-of-sight propagation analysis.
 Any appropriate earth radius multiplier may be selected by the user.
  
@@ -458,18 +486,28 @@ average terrain calculated in the directions of 0, 45, 90, 135,
 If the \fI-c\fP switch is replaced by a \fI-L\fP switch, a
 Longley-Rice path loss map for a transmitter site may be generated:
 
-\fCsplat -t tx_site -L 30.0 -s cities.dat -b co34_d00.dat -o path_loss_map\fR
+\fCsplat -t wnjt -L 30.0 -s cities.dat -b co34_d00.dat -o path_loss_map\fR
 
 In this mode, \fBSPLAT!\fP generates a multi-color map illustrating
 expected signal levels (path loss) in areas surrounding the transmitter
 site.  A legend at the bottom of the map correlates each color with a
 specific path loss level in decibels.  Since Longley-Rice area
-prediction map generation is quite CPU intensive, provision for
+prediction map generation is very CPU intensive, provision for
 limiting the analysis range is provided by the \fI-R\fP switch.
 The argument must be given in miles.  If a range wider than the
 generated topographic map is specified, \fBSPLAT!\fP will perform
 Longley-Rice path loss calculations between all four corners of
 the area prediction map.
+
+The \fI-db\fP switch allows a constraint to be placed on the maximum
+path loss region plotted on the map.  A path loss between 80 and
+230 dB may be specified using this switch.  For example, if a path
+loss beyond -140 dB is irrelevant to the survey being conducted,
+\fBSPLAT!\fP's path loss plot can be constrained to the region
+bounded by the 140 dB attenuation contour as follows:
+
+\fCsplat -t wnjt -L 30.0 -s cities.dat -b co34_d00.dat -db 140 -o plot.ppm\fR
+
 .SH DETERMINING MULTIPLE REGIONS OF COVERAGE
 \fBSPLAT!\fP can also display line-of-sight coverage areas for as
 many as four separate transmitter sites on a common topographic map.
@@ -531,7 +569,7 @@ according to the procedure defined by Federal Communications Commission
 Part 73.313(d).  According to this definition, terrain elevations along
 eight radials between 2 and 10 miles (3 and 16 kilometers) from the site
 being analyzed are sampled and averaged for each 45 degrees of azimuth
-starting with True North.  If one or more radials lie entirely over water,
+starting with True North.  If one or more radials lie entirely over water
 or over land outside the United States (areas for which no USGS topography
 data is available), then those radials are omitted from the calculation
 of average terrain.  If part of a radial extends over a body of water or
@@ -539,6 +577,12 @@ over land outside the United States, then only that part of the radial
 lying over United States land is used in the determination of average
 terrain.
 
+Note that SRTM elevation data, unlike older 3-arc second USGS data,
+extends beyond the borders of the United States.  Therefore, HAAT
+results may not be in full compliance with FCC Part 73.313(d)
+in areas along the borders of the United States if the SDF files
+used by \fBSPLAT!\fP are SRTM-derived. 
+
 When performing point-to-point terrain analysis, \fBSPLAT!\fP determines
 the antenna height above average terrain only if enough topographic
 data has already been loaded by the program to perform the point-to-point
@@ -546,32 +590,33 @@ analysis.  In most cases, this will be true, unless the site in question
 does not lie within 10 miles of the boundary of the topography data in
 memory.
 
-When performing area prediction analysis, enough topography data is normally
-loaded by \fBSPLAT!\fP to perform average terrain calculations.  Under
-such conditions, \fBSPLAT!\fP will provide the antenna height above
-average terrain as well as the average terrain above mean sea level
-for azimuths of 0, 45, 90, 135, 180, 225, 270, and 315 degrees, and
-include such information in the site report generated.  If one or
-more of the eight radials surveyed fall over water or land outside
-the United States, \fBSPLAT!\fP reports \fINo Terrain\fP for those
-radial paths.
-.SH SETTING THE MAXIMUM SIZE OF AN ANALYSIS REGION
-\fBSPLAT!\fP reads SDF files into a series of memory "slots" as required
-within the structure of the program.  Each "slot" holds one SDF file.
-Each SDF file represents a one degree by one degree region of terrain.
+When performing area prediction analysis, enough topography data is
+normally loaded by \fBSPLAT!\fP to perform average terrain calculations.
+Under such conditions, \fBSPLAT!\fP will provide the antenna height
+above average terrain as well as the average terrain above mean sea
+level for azimuths of 0, 45, 90, 135, 180, 225, 270, and 315 degrees,
+and include such information in the site report generated.  If one or
+more of the eight radials surveyed fall over water, or over regions
+for which no SDF data is available, \fBSPLAT!\fP reports \fINo Terrain\fP
+for the radial paths affected.
+.SH RESTRICTING THE MAXIMUM SIZE OF AN ANALYSIS REGION
+\fBSPLAT!\fP reads SDF files as needed into a series of memory "slots"
+within the structure of the program.  Each "slot" holds one SDF file
+representing a one degree by one degree region of terrain.
 A \fI#define MAXSLOTS\fP statement in the first several lines of
 \fIsplat.cpp\fP sets the maximum number of "slots" available for topography
 data.  It also sets the maximum size of the topographic maps generated by
 \fBSPLAT!\fP.  MAXSLOTS is set to 9 by default.  If \fBSPLAT!\fP produces
 a segmentation fault on start-up with this default, it is an indication
-that not enough RAM and/or virtual memory (swap space) are available to
-run \fBSPLAT!\fP with this number of MAXSLOTS.  In this case, MAXSLOTS
-may be reduced to 4, although this will greatly limit the maximum region
-\fBSPLAT!\fP will be able to analyze.  If 118 megabytes or more of total
-memory (swap space plus RAM) is available, then MAXSLOTS may be increased
-to 16.  This will permit operation over a 4-degree by 4-degree region,
-which is sufficient for single antenna heights in excess of 10,000 feet
-above mean sea level, or point-to-point distances of over 1000 miles.
+that not enough RAM and/or virtual memory (swap space) is available to
+run \fBSPLAT!\fP with this number of MAXSLOTS.  In situations where
+available memory is low, MAXSLOTS may be reduced to 4 with the understanding
+that this will greatly limit the maximum region \fBSPLAT!\fP will be able
+to analyze.  If 118 megabytes or more of total memory (swap space plus
+RAM) is available, then MAXSLOTS may be increased to 16.  This will
+permit operation over a 4-degree by 4-degree region, which is sufficient
+for single antenna heights in excess of 10,000 feet above mean sea
+level, or point-to-point distances of over 1000 miles.
 .SH ADDITIONAL INFORMATION
 Invoking \fBSPLAT!\fP without any arguments will display all the
 command-line options available with the program along with a brief
@@ -580,14 +625,6 @@ summary of each.
 The latest news and information regarding \fBSPLAT!\fP software is
 available through the official \fBSPLAT!\fP software web page located
 at: \fIhttp://www.qsl.net/kd2bd/splat.html\fP.
-.SH FILES
-.TP
-\fC$HOME/.splat_path\fR
-User-generated file containing the default path to the directory
-containing the SDF data files.
-.TP
-\fCsplat.lrp\fR
-Default Longley-Rice model parameters.
 .SH AUTHORS
 .TP
 John A. Magliacane, KD2BD <\fIkd2bd@amsat.org\fP>
index 1ab6b8483f56ab2db7b85b22d8eab7d81a39be9e..0ad143cd9ab20f6ba9d5b8494b5a565749b97e58 100644 (file)
Binary files a/docs/pdf/splat.pdf and b/docs/pdf/splat.pdf differ
index 2dbe5def479258319df498c9612bdc4437ee8a1f..291e7ffd92e8ba218e4287a05dfdce31f0cba671 100644 (file)
@@ -1,6 +1,6 @@
 %!PS-Adobe-3.0
 %%Creator: groff version 1.17.2
-%%CreationDate: Sat Jan 24 16:01:55 2004
+%%CreationDate: Thu Mar 16 14:29:40 2006
 %%DocumentNeededResources: font Times-Roman
 %%+ font Times-Bold
 %%+ font Times-Italic
@@ -210,854 +210,913 @@ BP
 %%EndPageSetup
 /F0 10/Times-Roman@0 SF(SPLA)72 48 Q 151.145(T!\(1\) KD2BD)-1.11 F
 (Softw)2.5 E 151.145(are SPLA)-.1 F(T!\(1\))-1.11 E/F1 10.95
-/Times-Bold@0 SF -.219(NA)72 84 S(ME).219 E F0(splat \255 A)108 96 Q/F2
-10/Times-Bold@0 SF(S)2.5 E F0(ignal)A F2(P)2.5 E F0(ropag)A(ation,)-.05
-E F2(L)2.5 E F0(oss,)A F2(A)2.5 E F0(nd)A F2(T)2.5 E F0
-(errain analysis tool)A F1(SYNOPSIS)72 112.8 Q F0 .675(splat [-t)108
-124.8 R/F3 10/Times-Italic@0 SF(tr)3.175 E(ansmitter_site)-.15 E(.qth)
--.15 E F0 3.174(][)C(-r)-3.174 E F3 -.37(re)3.174 G(ceiver_site).37 E
-(.qth)-.15 E F0 3.174(][)C(-c)-3.174 E F3(rx_antenna_height_for_los_co)
-3.174 E(ver)-.1 E -.1(age)-.15 G .674(_analysis \(feet\)).1 F
-(\(\215oat\))108 136.8 Q F0 4.38(][)C(-L)-4.38 E F3
-(rx_antenna_height_for_Longle)4.38 E(y-Rice_co)-.3 E(ver)-.1 E -.1(age)
--.15 G 1.88(_analysis \(feet\) \(\215oat\)).1 F F0 4.38(][)C(-p)-4.38 E
-F3(terr)4.38 E(ain_pr)-.15 E(o\214le)-.45 E(.e)-.15 E(xt)-.2 E F0(])A
-([-e)108 148.8 Q F3(ele)5.543 E(vation_pr)-.15 E(o\214le)-.45 E(.e)-.15
-E(xt)-.2 E F0 5.543(][)C(-h)-5.543 E F3(height_pr)5.543 E(o\214le)-.45 E
-(.e)-.15 E(xt)-.2 E F0 5.543(][)C(-l)-5.543 E F3(Longle)5.543 E
-(y-Rice_pr)-.3 E(o\214le)-.45 E(.e)-.15 E(xt)-.2 E F0 5.543(][)C(-o)
--5.543 E F3(topo)5.542 E(gr)-.1 E(aphic_map_\214le-)-.15 E(name)108
-160.8 Q(.ppm)-.15 E F0 5.196(][)C(-b)-5.196 E F3(carto)5.196 E(gr)-.1 E
-(aphic_boundary_\214lename)-.15 E(.dat)-.15 E F0 5.197(][)C(-s)-5.197 E
-F3(site/city_database)5.197 E(.dat)-.15 E F0 5.197(][)C(-d)-5.197 E F3
-(sdf_dir)5.197 E(ectory_path)-.37 E F0(])A([-m)108 172.8 Q F3(earth_r)
-2.5 E(adius_multiplier \(\215oat\))-.15 E F0 2.5(][)C(-R)-2.5 E F3
-(maximum_co)2.5 E(ver)-.1 E -.1(age)-.15 G(_r).1 E(ang)-.15 E 2.5(e\()
--.1 G(for -c or -L\) \(miles\) \(\215oat\))-2.5 E F0 2.5(][)C(-n] [-N])
--2.5 E F1(DESCRIPTION)72 189.6 Q F2(SPLA)108 201.6 Q(T!)-.95 E F0 1.588
-(is a simple, yet po)4.088 F 1.588
-(werful terrain analysis tool written for Unix and Linux-based w)-.25 F
-(orkstations.)-.1 E F2(SPLA)108 213.6 Q(T!)-.95 E F0 .053(is free softw)
-2.553 F 2.553(are. Redistrib)-.1 F .053(ution and/or modi\214cation is \
-permitted under the terms of the GNU Gen-)-.2 F .906
-(eral Public License as published by the Free Softw)108 225.6 R .906
-(are F)-.1 F .906(oundation, either v)-.15 F .906
-(ersion 2 of the License or an)-.15 F(y)-.15 E .622(later v)108 237.6 R
-3.122(ersion. Adoption)-.15 F(of)3.123 E F2(SPLA)3.123 E(T!)-.95 E F0
-.623(source code in proprietary or closed-source applications is a viol\
-ation)3.123 F(of this license, and is)108 249.6 Q F2(strictly)2.5 E F0
-(forbidden.)2.5 E F2(SPLA)108 273.6 Q(T!)-.95 E F0 .531(is distrib)3.031
-F .531(uted in the hope that it will be useful, b)-.2 F .53
-(ut WITHOUT ANY W)-.2 F(ARRANTY)-1.2 E 3.03(,w)-1.29 G .53(ithout e)
--3.03 F -.15(ve)-.25 G(n).15 E .959(the implied w)108 285.6 R .959
-(arranty of MERCHANT)-.1 F .959(ABILITY or FITNESS FOR A P)-.93 F(AR)
--.92 E .96(TICULAR PURPOSE. See the)-.6 F
-(GNU General Public License for more details.)108 297.6 Q F1(INTR)72
-314.4 Q(ODUCTION)-.329 E F2(SPLA)108 326.4 Q(T!)-.95 E F0 .769
-(is a terrestrial RF propag)3.269 F .768
-(ation analysis tool for the spectrum between 20 MHz and 20 GHz, and)
--.05 F(pro)108 338.4 Q 1.482(vides information of interest to communica\
-tion system designers and site engineers.)-.15 F F2(SPLA)6.483 E(T!)-.95
-E F0(deter)3.983 E(-)-.2 E .263
-(mines great circle distances and bearings between sites, antenna ele)
-108 350.4 R -.25(va)-.25 G .263
-(tion angles \(uptilt\), depression angles).25 F(\(do)108 362.4 Q 1.197
-(wntilt\), antenna height abo)-.25 F 1.497 -.15(ve m)-.15 H 1.197
-(ean sea le).15 F -.15(ve)-.25 G 1.197(l, antenna height abo).15 F 1.497
--.15(ve a)-.15 H -.15(ve)-.05 G 1.197(rage terrain, bearings and dis-)
-.15 F .039(tances to kno)108 374.4 R .039(wn obstructions, Longle)-.25 F
-.038
-(y-Rice path loss, and minimum antenna height requirements needed to)
--.15 F 2.721(establish line-of-sight communication paths absent of obst\
-ructions due to terrain.)108 386.4 R F2(SPLA)7.721 E(T!)-.95 E F0
-(produces)5.221 E .242(reports, graphs, and highly detailed and careful\
-ly annotated topographic maps depicting line-of-sight paths,)108 398.4 R
-.068(path loss, and e)108 410.4 R .068(xpected co)-.15 F -.15(ve)-.15 G
-.068(rage areas of transmitters and repeater systems.).15 F .069
-(When performing line-of-sight)5.069 F .794(analysis in situations wher\
-e multiple transmitter or repeater sites are emplo)108 422.4 R(yed,)-.1
-E F2(SPLA)3.294 E(T!)-.95 E F0 .793(determines indi-)3.293 F
-(vidual and mutual areas of co)108 434.4 Q -.15(ve)-.15 G
-(rage within the netw).15 E(ork speci\214ed.)-.1 E F2(SPLA)108 458.4 Q
-(T!)-.95 E F0 1.523(operates in tw)4.023 F 4.023(om)-.1 G(odes:)-4.023 E
-F3 1.523(point-to-point mode)4.023 F F0 4.024(,a)C(nd)-4.024 E F3(ar)
-4.024 E 1.524(ea pr)-.37 F 1.524(ediction mode)-.37 F F0 6.524(.T)C
-1.524(hese modes may be)-6.524 F(in)108 470.4 Q -.2(vo)-.4 G -.1(ke).2 G
-3.084(du).1 G .583(sing either line-of-sight \(LOS\) or Irre)-3.084 F
-.583(gular T)-.15 F .583(errain \(ITM\) propag)-.7 F .583(ation models.)
--.05 F -.35(Tr)5.583 G .583(ue Earth, four).35 F(-)-.2 E .243
-(thirds Earth, or an)108 482.4 R 2.743(yo)-.15 G .243(ther Earth radius\
- may be speci\214ed by the user when performing line-of-sight analysis.)
--2.743 F F1(INPUT FILES)72 499.2 Q F2(SPLA)108 511.2 Q(T!)-.95 E F0 .682
-(is a command-line dri)3.182 F -.15(ve)-.25 G 3.182(na).15 G .682
+/Times-Bold@0 SF -.219(NA)72 84 S(ME).219 E F0(splat \255 An RF)108 96 Q
+/F2 10/Times-Bold@0 SF(S)2.5 E F0(ignal)A F2(P)2.5 E F0(ropag)A(ation,)
+-.05 E F2(L)2.5 E F0(oss,)A F2(A)2.5 E F0(nd)A F2(T)2.5 E F0
+(errain analysis tool)A F1(SYNOPSIS)72 112.8 Q F0 3.47(splat [-t)108
+124.8 R/F3 10/Times-Italic@0 SF(tr)8.47 E(ansmitter_site)-.15 E(.qth)
+-.15 E F0 5.97(][)C(-r)-5.97 E F3 -.37(re)8.47 G(ceiver_site).37 E(.qth)
+-.15 E F0 5.97(][)C(-c)-5.97 E F3(rx_antenna_height_for_los_co)8.47 E
+(ver)-.1 E -.1(age)-.15 G(_analysis).1 E 1.244(\(feet\) \(\215oat\))108
+136.8 R F0 3.744(][)C(-L)-3.744 E F3(rx_antenna_height_for_Longle)6.244
+E(y-Rice_co)-.3 E(ver)-.1 E -.1(age)-.15 G 1.244
+(_analysis \(feet\) \(\215oat\)).1 F F0 3.745(][)C(-p)-3.745 E F3(terr)
+6.245 E(ain_pr)-.15 E(o-)-.45 E(\214le)108 148.8 Q(.e)-.15 E(xt)-.2 E F0
+8.718(][)C(-e)-8.718 E F3(ele)11.218 E(vation_pr)-.15 E(o\214le)-.45 E
+(.e)-.15 E(xt)-.2 E F0 8.718(][)C(-h)-8.718 E F3(height_pr)11.218 E
+(o\214le)-.45 E(.e)-.15 E(xt)-.2 E F0 8.717(][)C(-l)-8.717 E F3(Longle)
+11.217 E(y-Rice_pr)-.3 E(o\214le)-.45 E(.e)-.15 E(xt)-.2 E F0 8.717(][)C
+(-o)-8.717 E F3(topo-)11.217 E(gr)108 160.8 Q(aphic_map_\214lename)-.15
+E(.ppm)-.15 E F0 6.97(][)C(-b)-6.97 E F3(carto)9.47 E(gr)-.1 E
+(aphic_boundary_\214lename)-.15 E(.dat)-.15 E F0 6.97(][)C(-s)-6.97 E F3
+(site/city_database)9.47 E(.dat)-.15 E F0 6.97(][)C(-d)-6.97 E F3
+(sdf_dir)108 172.8 Q(ectory_path)-.37 E F0 4.932(][)C(-m)-4.932 E F3
+(earth_r)7.431 E 2.431(adius_multiplier \(\215oat\))-.15 F F0 4.931(][)C
+(-R)-4.931 E F3(maximum_co)7.431 E(ver)-.1 E -.1(age)-.15 G(_r).1 E(ang)
+-.15 E 4.931(e\()-.1 G 2.431(for -c or -L\))-4.931 F
+(\(miles\) \(\215oat\))108 184.8 Q F0 2.5(][)C(-dB)-2.5 E F3
+(maximum attenuation contour to display on path loss maps \(80-230 dB\))
+2.5 E F0 2.5(][)C(-n] [-N])-2.5 E F1(DESCRIPTION)72 201.6 Q F2(SPLA)108
+213.6 Q(T!)-.95 E F0 .853(is a po)3.353 F .853
+(werful terrestrial RF propag)-.25 F .854
+(ation and terrain analysis tool co)-.05 F -.15(ve)-.15 G .854
+(ring the spectrum between).15 F .33(20 MHz and 20 GHz.)108 225.6 R .33
+(It is designed for operation on Unix and Linux-based w)5.33 F
+(orkstations.)-.1 E F2(SPLA)5.33 E(T!)-.95 E F0 .33(is free)2.83 F
+(softw)108 237.6 Q 4.453(are. Redistrib)-.1 F 1.954(ution and/or modi\
+\214cation is permitted under the terms of the GNU General Public)-.2 F
+.376(License as published by the Free Softw)108 249.6 R .376(are F)-.1 F
+.376(oundation, either v)-.15 F .376(ersion 2 of the License or an)-.15
+F 2.875(yl)-.15 G .375(ater v)-2.875 F(ersion.)-.15 E .348(Adoption of)
+108 261.6 R F2(SPLA)2.848 E(T!)-.95 E F0 .349(source code in proprietar\
+y or closed-source applications is a violation of this license,)2.848 F
+(and is)108 273.6 Q F2(strictly)2.5 E F0(forbidden.)2.5 E F2(SPLA)108
+297.6 Q(T!)-.95 E F0 .531(is distrib)3.031 F .531
+(uted in the hope that it will be useful, b)-.2 F .53(ut WITHOUT ANY W)
+-.2 F(ARRANTY)-1.2 E 3.03(,w)-1.29 G .53(ithout e)-3.03 F -.15(ve)-.25 G
+(n).15 E .959(the implied w)108 309.6 R .959(arranty of MERCHANT)-.1 F
+.959(ABILITY or FITNESS FOR A P)-.93 F(AR)-.92 E .96
+(TICULAR PURPOSE. See the)-.6 F
+(GNU General Public License for more details.)108 321.6 Q F1(INTR)72
+338.4 Q(ODUCTION)-.329 E F0 .575(Applications of)108 350.4 R F2(SPLA)
+3.075 E(T!)-.95 E F0 .574(include the visualization, design, and link b)
+3.075 F .574(udget analysis of wireless W)-.2 F .574(ide Area)-.4 F
+(Netw)108 362.4 Q 1.939(orks \(W)-.1 F 1.939
+(ANs\), commercial and amateur radio communication systems abo)-1.2 F
+2.239 -.15(ve 2)-.15 H 4.439(0M).15 G 1.94(Hz, micro)-4.439 F -.1(wa)
+-.25 G -.15(ve)-.1 G 1.194(links, frequenc)108 374.4 R 3.694(yc)-.15 G
+1.194(oordination, and the determination of analog and digital terrestr\
+ial radio and tele)-3.694 F(vision)-.25 E(contour re)108 386.4 Q(gions.)
+-.15 E F2(SPLA)108 410.4 Q(T!)-.95 E F0(pro)4.69 E 2.191(vides RF site \
+engineering data such as great circle distances and bearings between si\
+tes,)-.15 F 2.725(antenna ele)108 422.4 R -.25(va)-.25 G 2.724
+(tion angles \(uptilt\), depression angles \(do).25 F 2.724
+(wntilt\), antenna height abo)-.25 F 3.024 -.15(ve m)-.15 H 2.724
+(ean sea le).15 F -.15(ve)-.25 G(l,).15 E 1.65(antenna height abo)108
+434.4 R 1.95 -.15(ve a)-.15 H -.15(ve)-.05 G 1.65
+(rage terrain, bearings and distances to kno).15 F 1.65
+(wn obstructions, Longle)-.25 F 1.65(y-Rice path)-.15 F 1.565(attenuati\
+on, and minimum antenna height requirements needed to establish line-of\
+-sight communication)108 446.4 R .072
+(paths absent of obstructions due to terrain.)108 458.4 R F2(SPLA)5.072
+E(T!)-.95 E F0 .072
+(produces reports, graphs, and highly detailed and care-)2.572 F .986(f\
+ully annotated topographic maps depicting line-of-sight paths, path los\
+s, and e)108 470.4 R .985(xpected co)-.15 F -.15(ve)-.15 G .985
+(rage areas of).15 F 1.777(transmitters and repeater systems.)108 482.4
+R 1.777
+(When performing line-of-sight analysis in situations where multiple)
+6.777 F 1.395(transmitter or repeater sites are emplo)108 494.4 R(yed,)
+-.1 E F2(SPLA)3.895 E(T!)-.95 E F0 1.395(determines indi)3.895 F 1.394
+(vidual and mutual areas of co)-.25 F -.15(ve)-.15 G(rage).15 E
+(within the netw)108 506.4 Q(ork speci\214ed.)-.1 E F2(SPLA)108 530.4 Q
+(T!)-.95 E F0 2.137(operates in tw)4.637 F 4.638(od)-.1 G 2.138
+(istinct modes:)-4.638 F F3 2.138(point-to-point mode)4.638 F F0 4.638
+(,a)C(nd)-4.638 E F3(ar)4.638 E 2.138(ea pr)-.37 F 2.138(ediction mode)
+-.37 F F0 4.638(,a)C 2.138(nd may be)-4.638 F(in)108 542.4 Q -.2(vo)-.4
+G -.1(ke).2 G 3.084(du).1 G .583
+(sing either line-of-sight \(LOS\) or Irre)-3.084 F .583(gular T)-.15 F
+.583(errain \(ITM\) propag)-.7 F .583(ation models.)-.05 F -.35(Tr)5.583
+G .583(ue Earth, four).35 F(-)-.2 E .243(thirds Earth, or an)108 554.4 R
+2.743(yo)-.15 G .243(ther Earth radius may be speci\214ed by the user w\
+hen performing line-of-sight analysis.)-2.743 F F1(INPUT FILES)72 571.2
+Q F2(SPLA)108 583.2 Q(T!)-.95 E F0 .508(is a command-line dri)3.008 F
+-.15(ve)-.25 G 3.008(na).15 G .507
 (pplication, and reads input data through a number of data \214les.)
--3.182 F(Each)5.681 E 1.188(has its o)108 523.2 R 1.188(wn format.)-.25
-F 1.189(Some \214les are mandatory for successful e)6.188 F -.15(xe)-.15
-G 1.189(cution of the program, while others are).15 F 2.95
-(optional. Mandatory)108 535.2 R .45(\214les include SPLA)2.95 F 2.95
-(TD)-1.11 G .449(ata Files \(SDF \214les\), site location \214les \(QTH\
- \214les\), and Long-)-2.95 F(le)108 547.2 Q .681
-(y-Rice model parameter \214les \(LRP \214les\).)-.15 F .682
-(Optional \214les include city/site location \214les, and cartographic)
-5.681 F(boundary \214les.)108 559.2 Q F1(SPLA)72 576 Q 2.738(TD)-1.04 G
--1.644 -1.04(AT A)-3.121 H(FILES)3.778 E F2(SPLA)108 588 Q(T!)-.95 E F0
-.65(imports topographic data in the form of SPLA)3.15 F 3.15(TD)-1.11 G
-.65(ata Files \(SDFs\) that may be generated from a)-3.15 F .621
-(number of information sources.)108 600 R .622
-(In the United States, SPLA)5.622 F 3.122(TD)-1.11 G .622
-(ata Files are most often deri)-3.122 F -.15(ve)-.25 G 3.122(df).15 G
-.622(rom U.S.)-3.122 F 1.54(Geological Surv)108 612 R 1.84 -.15(ey D)
--.15 H 1.539(igital Ele).15 F -.25(va)-.25 G 1.539
-(tion Models \(DEMs\) using the).25 F F2(usgs2sdf)4.039 E F0 1.539
-(utility included with)4.039 F F2(SPLA)4.039 E(T!)-.95 E F0(.)A 1.47
-(USGS Digital Ele)108 624 R -.25(va)-.25 G 1.47
-(tion Models compatible with this utility are a).25 F -.25(va)-.2 G
-1.471(ilable at no cost via the Internet at:).25 F F3(http://edcsgs9.cr)
-108 636 Q(.usgs.go)-1.11 E(v/glis/hyper/guide/1_dgr_dem\214g/inde)-.1 E
-(x1m.html)-.2 E F0(.)A(SPLA)108 660 Q 2.646(TD)-1.11 G .146
-(ata Files contain topographic ele)-2.646 F -.25(va)-.25 G .146
-(tions to the nearest meter abo).25 F .445 -.15(ve m)-.15 H .145
-(ean sea le).15 F -.15(ve)-.25 G 2.645(lf).15 G .145(or 1-de)-2.645 F
-.145(gree by)-.15 F(1-de)108 672 Q .812(gree re)-.15 F .812
-(gions of the earth with a resolution of 3-arc seconds.)-.15 F .813
-(SDF \214les can be read in either standard)5.812 F .579(format \()108
-684 R F3(.sdf)A F0 3.079(\)a)C 3.079(sg)-3.079 G .579(enerated by the)
--3.079 F F2(usgs2sdf)3.079 E F0(utility)3.079 E 3.079(,o)-.65 G 3.079
-(ri)-3.079 G 3.079(nb)-3.079 G .578(zip2 compressed format \()-3.079 F
-F3(.sdf)A(.bz2)-.15 E F0 3.078(\). Since)B(uncom-)3.078 E .183
-(pressed \214les can be slightly f)108 696 R .183
-(aster to load than compressed \214les,)-.1 F F2(SPLA)2.684 E(T!)-.95 E
-F0 .184(searches for the needed SDF data)2.684 F .091
-(in uncompressed format \214rst.)108 708 R .091
-(If such data cannot located, then)5.091 F F2(SPLA)2.591 E(T!)-.95 E F0
-.09(tries to read the data in bzip2 com-)2.59 F .91(pressed format.)108
-720 R .91(If no compressed SDF \214les can be found for the re)5.91 F
-.91(gion requested,)-.15 F F2(SPLA)3.41 E(T!)-.95 E F0 .91(assumes the)
-3.41 F(KD2BD Softw)72 768 Q 126.62(are 20)-.1 F(January 2004)2.5 E(1)
-195.95 E EP
+-3.008 F(Some)5.507 E 1.42(\214les are mandatory for successful e)108
+595.2 R -.15(xe)-.15 G 1.42
+(cution of the program, while others are optional.).15 F 1.42
+(Mandatory \214les)6.42 F .871(include SPLA)108 607.2 R 3.371(TD)-1.11 G
+.871(ata Files \(SDF \214les\), site location \214les \(QTH \214les\), \
+and Longle)-3.371 F .87(y-Rice model parameter)-.15 F
+(\214les \(LRP \214les\).)108 619.2 Q(Optional \214les include city/sit\
+e location \214les, and cartographic boundary \214les.)5 E F1(SPLA)72
+636 Q 2.738(TD)-1.04 G -1.644 -1.04(AT A)-3.121 H(FILES)3.778 E F2(SPLA)
+108 648 Q(T!)-.95 E F0 .43(imports topographic data in the form of SPLA)
+2.93 F 2.93(TD)-1.11 G .43(ata Files \(SDFs\).)-2.93 F .43
+(These \214les may be generated)5.43 F .737
+(from a number of information sources.)108 660 R .737
+(In the United States, SPLA)5.737 F 3.237(TD)-1.11 G .737
+(ata Files can be generated through)-3.237 F 5.441(U.S. Geological)108
+672 R(Surv)5.441 E 3.241 -.15(ey D)-.15 H 2.941(igital Ele).15 F -.25
+(va)-.25 G 2.942(tion Models \(DEMs\) using the).25 F F2(usgs2sdf)5.442
+E F0 2.942(utility included with)5.442 F F2(SPLA)108 684 Q(T!)-.95 E F0
+8.595(.U)C 3.595(SGS Digital Ele)-8.595 F -.25(va)-.25 G 3.595
+(tion Models compatible with this utility may be do).25 F 3.595
+(wnloaded from:)-.25 F F3(http://edcftp.cr)108 696 Q(.usgs.go)-1.11 E
+(v/pub/data/DEM/250/)-.1 E F0(.)A 2.009(Signi\214cantly better resoluti\
+on can be obtained through the use of SR)108 720 R 2.01(TM-3 V)-.6 F
+2.01(ersion 2 digital ele)-1.11 F -.25(va)-.25 G(tion).25 E(KD2BD Softw)
+72 768 Q 129.12(are 02)-.1 F(March 2006)2.5 E(1)198.45 E EP
 %%Page: 2 2
 %%BeginPageSetup
 BP
 %%EndPageSetup
 /F0 10/Times-Roman@0 SF(SPLA)72 48 Q 151.145(T!\(1\) KD2BD)-1.11 F
-(Softw)2.5 E 151.145(are SPLA)-.1 F(T!\(1\))-1.11 E(re)108 84 Q .937
-(gion is o)-.15 F -.15(ve)-.15 G 3.437(rw).15 G .937
-(ater or outside the United States, and will assign an ele)-3.537 F -.25
-(va)-.25 G .936(tion of sea-le).25 F -.15(ve)-.25 G 3.436(lt).15 G 3.436
-(ot)-3.436 G .936(hese areas.)-3.436 F 1.061(This feature of)108 96 R/F1
-10/Times-Bold@0 SF(SPLA)3.561 E(T!)-.95 E F0(mak)3.561 E 1.061
+(Softw)2.5 E 151.145(are SPLA)-.1 F(T!\(1\))-1.11 E 4.138(models. These)
+108 84 R 1.638
+(models are the result of the STS-99 Space Shuttle Radar T)4.138 F
+(opograph)-.8 E 4.138(yM)-.05 G 1.638(ission, and are)-4.138 F -.2(av)
+108 96 S .828(ailable for most populated re)-.05 F .829
+(gions of the Earth.)-.15 F(SPLA)5.829 E 3.329(TD)-1.11 G .829
+(ata Files may be generated from SR)-3.329 F .829(TM data)-.6 F 1.435
+(using the included)108 108 R/F1 10/Times-Bold@0 SF(srtm2sdf)3.935 E F0
+(utility)3.935 E 6.434(.S)-.65 G -.6(RT)-6.434 G 1.434(M-3 V).6 F 1.434
+(ersion 2 data may be obtained through anon)-1.11 F 1.434(ymous FTP)-.15
+F(from:)108 120 Q/F2 10/Times-Italic@0 SF(ftp://e0srp01u.ecs.nasa.go)2.5
+E(v:21/srtm/ver)-.1 E(sion2/)-.1 E F0 .241(Despite the higher accurac)
+108 144 R 2.741(yt)-.15 G .241(hat SR)-2.741 F .241(TM data has to of)
+-.6 F(fer)-.25 E 2.741(,s)-.4 G .241(ome v)-2.741 F .241
+(oids in the data sets e)-.2 F 2.741(xist. When)-.15 F -.2(vo)2.741 G
+.242(ids are).2 F .332(detected, the)108 156 R F1(srtm2sdf)2.832 E F0
+.332(utility replaces them with corresponding data found in e)2.832 F
+.332(xisting SDF \214les \(that were)-.15 F .033
+(presumably created from earlier USGS data through the)108 168 R F1
+(usgs2sdf)2.533 E F0 2.533(utility\). If)2.533 F(USGS-deri)2.534 E -.15
+(ve)-.25 G 2.534(dS).15 G .034(DF data is not)-2.534 F -.2(av)108 180 S
+(ailable, v)-.05 E(oids are handled through adjacent pix)-.2 E(el a)-.15
+E -.15(ve)-.2 G(raging, or direct replacement.).15 E(SPLA)108 204 Q
+2.782(TD)-1.11 G .282(ata Files contain inte)-2.782 F .282(ger v)-.15 F
+.282(alue topographic ele)-.25 F -.25(va)-.25 G .282
+(tions \(in meters\) referenced to mean sea le).25 F -.15(ve)-.25 G
+2.782(lf).15 G(or)-2.782 E(1-de)108 216 Q .061(gree by 1-de)-.15 F .061
+(gree re)-.15 F .061
+(gions of the earth with a resolution of 3-arc seconds.)-.15 F .062
+(SDF \214les can be read in either)5.062 F .712(standard format \()108
+228 R F2(.sdf)A F0 3.212(\)a)C 3.212(sg)-3.212 G .712(enerated by the)
+-3.212 F F1(usgs2sdf)3.211 E F0(and)3.211 E F1(srtm2sdf)3.211 E F0 .711
+(utilities, or in bzip2 compressed format)3.211 F(\()108 240 Q F2(.sdf)A
+(.bz2)-.15 E F0 3.067(\). Since)B .568
+(uncompressed \214les can be processed slightly f)3.067 F .568
+(aster than \214les that ha)-.1 F .868 -.15(ve b)-.2 H .568
+(een compressed,).15 F F1(SPLA)108 252 Q(T!)-.95 E F0 1.566
+(searches for the needed SDF data in uncompressed format \214rst.)4.066
+F 1.565(If uncompressed data cannot)6.565 F(located,)108 264 Q F1(SPLA)
+3.47 E(T!)-.95 E F0 .97
+(then searches for data in bzip2 compressed format.)3.47 F .971
+(If no compressed SDF \214les can be)5.971 F .779(found for the re)108
+276 R .779(gion requested,)-.15 F F1(SPLA)3.278 E(T!)-.95 E F0 .778
+(assumes the re)3.278 F .778(gion is o)-.15 F -.15(ve)-.15 G 3.278(rw)
+.15 G(ater)-3.378 E 3.278(,a)-.4 G .778(nd will assign an ele)-3.278 F
+-.25(va)-.25 G .778(tion of).25 F(sea-le)108 288 Q -.15(ve)-.25 G 2.5
+(lt).15 G 2.5(ot)-2.5 G(hese areas.)-2.5 E 1.061(This feature of)108 312
+R F1(SPLA)3.561 E(T!)-.95 E F0(mak)3.561 E 1.061
 (es it possible to perform path analysis not only o)-.1 F -.15(ve)-.15 G
-3.561(rl).15 G 1.062(and, b)-3.561 F 1.062(ut also between)-.2 F 1.389
-(coastal areas not represented by USGS Digital Ele)108 108 R -.25(va)
--.25 G 1.389(tion Model Data since the).25 F 3.889(ya)-.15 G 1.388
-(re de)-3.889 F -.2(vo)-.25 G 1.388(id of an).2 F 3.888(yl)-.15 G(and)
--3.888 E 2.501(masses. Ho)108 120 R(we)-.25 E -.15(ve)-.25 G .801 -.4
-(r, t).15 H .001(his beha).4 F .001(vior of)-.2 F F1(SPLA)2.501 E(T!)
--.95 E F0 .001(underscores the importance of ha)2.501 F .002
-(ving all the SDF \214les required)-.2 F(for the re)108 132 Q
-(gion being analyzed if meaningful results are to be e)-.15 E(xpected.)
--.15 E/F2 10.95/Times-Bold@0 SF(SITE LOCA)72 148.8 Q(TION \(QTH\) FILES)
--1.04 E F1(SPLA)108 160.8 Q(T!)-.95 E F0 .839
+3.561(rl).15 G 1.062(and, b)-3.561 F 1.062(ut also between)-.2 F .782
+(coastal areas not represented by Digital Ele)108 324 R -.25(va)-.25 G
+.782(tion Model data.).25 F .782(This beha)5.782 F .782(vior of)-.2 F F1
+(SPLA)3.282 E(T!)-.95 E F0 .782(underscores the)3.282 F .103
+(importance of ha)108 336 R .104
+(ving all the SDF \214les required for the re)-.2 F .104
+(gion being analyzed if meaningful results are to be)-.15 F -.15(ex)108
+348 S(pected.).15 E/F3 10.95/Times-Bold@0 SF(SITE LOCA)72 364.8 Q
+(TION \(QTH\) FILES)-1.04 E F1(SPLA)108 376.8 Q(T!)-.95 E F0 .839
 (imports site location information of transmitter and recei)3.339 F -.15
 (ve)-.25 G 3.338(rs).15 G .838(ites analyzed by the program from)-3.338
-F 1.963(ASCII \214les ha)108 172.8 R 1.963(ving a)-.2 F/F3 10
-/Times-Italic@0 SF(.qth)4.463 E F0 -.15(ex)4.464 G 4.464(tension. QTH)
-.15 F 1.964(\214les contain the site')4.464 F 4.464(sn)-.55 G 1.964
-(ame, the site')-4.464 F 4.464(sl)-.55 G 1.964(atitude \(in de)-4.464 F
-(grees)-.15 E .744(North\), the site')108 184.8 R 3.244(sl)-.55 G .744
-(ongitude \(in de)-3.244 F .744(grees W)-.15 F .744
-(est\), and the site')-.8 F 3.244(sa)-.55 G .744(ntenna height abo)
--3.244 F 1.043 -.15(ve g)-.15 H .743(round le).15 F -.15(ve)-.25 G 3.243
-(l\().15 G -.4(AG)-3.243 G 3.243(L\). A).4 F .305
-(single line-feed character separates each \214eld.)108 196.8 R .305
-(The antenna height is assumed to be speci\214ed in feet unless)5.305 F
-(follo)108 208.8 Q .402(wed by the letter)-.25 F F3(m)2.902 E F0 .402
-(or the w)2.902 F(ord)-.1 E F3(meter)2.902 E(s)-.1 E F0 .402
-(in either upper or lo)2.902 F .401(wer case.)-.25 F .401
-(Latitude and longitude informa-)5.401 F .548(tion may be e)108 220.8 R
-.548(xpressed in either decimal format \(74.6889\) or de)-.15 F .548
-(gree, minute, second \(DMS\) format \(74 41)-.15 F(20.0\).)108 232.8 Q
--.15(Fo)108 256.8 S 3.356(re).15 G .856
+F .375(ASCII \214les ha)108 388.8 R .375(ving a)-.2 F F2(.qth)2.875 E F0
+-.15(ex)2.875 G 2.875(tension. QTH).15 F .375(\214les contain the site')
+2.875 F 2.875(sn)-.55 G .375(ame, the site')-2.875 F 2.876(sl)-.55 G
+.376(atitude \(positi)-2.876 F .676 -.15(ve i)-.25 H 2.876(fN).15 G
+(orth)-2.876 E 1.127(of the equator)108 400.8 R 3.626(,n)-.4 G -2.25
+-.15(eg a)-3.626 H(ti).15 E 1.426 -.15(ve i)-.25 H 3.626(fS).15 G 1.126
+(outh\), the site')-3.626 F 3.626(sl)-.55 G 1.126(ongitude \(in de)
+-3.626 F 1.126(grees W)-.15 F 1.126(est, 0 to 360 de)-.8 F 1.126
+(grees\), and the site')-.15 F(s)-.55 E .746(antenna height abo)108
+412.8 R 1.046 -.15(ve g)-.15 H .746(round le).15 F -.15(ve)-.25 G 3.246
+(l\().15 G -.4(AG)-3.246 G 3.246(L\). A).4 F .747
+(single line-feed character separates each \214eld.)3.246 F .747
+(The antenna)5.747 F .459
+(height is assumed to be speci\214ed in feet unless follo)108 424.8 R
+.459(wed by the letter)-.25 F F2(m)2.959 E F0 .459(or the w)2.959 F(ord)
+-.1 E F2(meter)2.959 E(s)-.1 E F0 .459(in either upper)2.959 F .424
+(or lo)108 436.8 R .424(wer case.)-.25 F .425
+(Latitude and longitude information may be e)5.424 F .425
+(xpressed in either decimal format \(74.6889\) or)-.15 F(de)108 448.8 Q
+(gree, minute, second \(DMS\) format \(74 41 20.0\).)-.15 E -.15(Fo)108
+472.8 S 3.356(re).15 G .856
 (xample, a site location \214le describing tele)-3.506 F .856
 (vision station WNJT)-.25 F 3.356(,T)-.74 G .856(renton, NJ \()-3.706 F
-F3(wnjt.qth)A F0 3.356(\)m)C .856(ight read as)-3.356 F(follo)108 268.8
-Q(ws:)-.25 E/F4 10/Courier@0 SF(WNJT)156 292.8 Q(40.2833)156 304.8 Q
-(74.6889)156 316.8 Q(990.00)156 328.8 Q F0 .23
-(Each transmitter and recei)108 352.8 R -.15(ve)-.25 G 2.73(rs).15 G .23
+F2(wnjt.qth)A F0 3.356(\)m)C .856(ight read as)-3.356 F(follo)108 484.8
+Q(ws:)-.25 E/F4 10/Courier@0 SF(WNJT)156 508.8 Q(40.2833)156 520.8 Q
+(74.6889)156 532.8 Q(990.00)156 544.8 Q F0 .23
+(Each transmitter and recei)108 568.8 R -.15(ve)-.25 G 2.73(rs).15 G .23
 (ite analyzed by)-2.73 F F1(SPLA)2.73 E(T!)-.95 E F0 .23
 (must be represented by its o)2.73 F .23(wn site location \(QTH\))-.25 F
-(\214le.)108 364.8 Q F2(LONGLEY)72 381.6 Q(-RICE P)-1.007 E
-(ARAMETER \(LRP\) FILES)-.81 E F1(SPLA)108 393.6 Q(T!)-.95 E F0 .058
+(\214le.)108 580.8 Q F3(LONGLEY)72 597.6 Q(-RICE P)-1.007 E
+(ARAMETER \(LRP\) FILES)-.81 E F1(SPLA)108 609.6 Q(T!)-.95 E F0 .058
 (imports Longle)2.558 F .058
 (y-Rice model parameter data from \214les ha)-.15 F .057
-(ving the same base name as the transmit-)-.2 F 1.504
-(ter site QTH \214le, b)108 405.6 R 1.504(ut carrying a)-.2 F F3(.lrp)
-4.005 E F0 -.15(ex)4.005 G 1.505(tension, thus pro).15 F 1.505
-(viding simple and accurate correlation between)-.15 F
-(these associated data sets.)108 417.6 Q(The format for the Longle)5 E
-(y-Rice model parameter \214les is as follo)-.15 E(ws \()-.25 E F3
-(wnjt.lrp)A F0(\):)A F4 6(15.000 ;)156 441.6 R
+(ving the same base name as the transmit-)-.2 F .941
+(ter site QTH \214le, b)108 621.6 R .941(ut with a)-.2 F F2(.lrp)3.441 E
+F0 -.15(ex)3.441 G .941(tension, thus pro).15 F .942
+(viding simple and accurate correlation between these)-.15 F
+(associated data sets.)108 633.6 Q(The format for the Longle)5 E
+(y-Rice model parameter \214les is as follo)-.15 E(ws \()-.25 E F2
+(wnjt.lrp)A F0(\):)A F4 6(15.000 ;)156 657.6 R
 (Earth Dielectric Constant \(Relative permittivity\))6 E 12(0.005 ;)156
-453.6 R(Earth Conductivity \(Siemens per meter\))6 E
-(301.000 ; Atmospheric Bending Constant \(N-units\))156 465.6 Q
-(700.000 ; Frequency in MHz \(20 MHz to 20 GHz\))156 477.6 Q 42(5;)156
-489.6 S(Radio Climate \(5 = Continental Temperate\))-36 E 42(0;)156
-501.6 S(Polarization \(0 = Horizontal, 1 = Vertical\))-36 E 24(0.5 ;)156
-513.6 R(Fraction of situations \(50% of locations\))6 E 24(0.5 ;)156
-525.6 R(Fraction of time \(50% of the time\))6 E F0 .771(If an LRP \214\
-le corresponding to the tx_site QTH \214le cannot be found,)108 549.6 R
-F1(SPLA)3.27 E(T!)-.95 E F0 .77(scans the current w)3.27 F(orking)-.1 E
-.085(directory for the \214le "splat.lrp".)108 561.6 R .085
-(If this \214le cannot be found, then the def)5.085 F .085
-(ault parameters listed abo)-.1 F .385 -.15(ve w)-.15 H .085(ill be).15
-F .528(assigned by)108 573.6 R F1(SPLA)3.028 E(T!)-.95 E F0 .527(and a \
-corresponding "splat.lrp" \214le containing this data will be written t\
-o the current)3.028 F -.1(wo)108 585.6 S(rking directory).1 E(.)-.65 E
--.8(Ty)108 609.6 S(pical Earth dielectric constants and conducti).8 E
-(vity v)-.25 E(alues are as follo)-.25 E(ws:)-.25 E F4
-(Dielectric Constant)270 633.6 Q(Conductivity)12 E(Salt water)156 645.6
-Q 48(:8)42 G 96(05)-48 G(.000)-96 E(Good ground)156 657.6 Q 48(:2)36 G
-96(50)-48 G(.020)-96 E(Fresh water)156 669.6 Q 48(:8)36 G 96(00)-48 G
-(.010)-96 E(Marshy land)156 681.6 Q 48(:1)36 G 96(20)-48 G(.007)-96 E
-(Farmland, forest :)156 693.6 Q 90(15 0.005)48 F(Average ground)156
-705.6 Q 48(:1)18 G 96(50)-48 G(.005)-96 E(Mountain, sand)156 717.6 Q 48
-(:1)18 G 96(30)-48 G(.002)-96 E 72(City :)156 729.6 R 96(50)54 G(.001)
--96 E F0(KD2BD Softw)72 768 Q 126.62(are 20)-.1 F(January 2004)2.5 E(2)
-195.95 E EP
+669.6 R(Earth Conductivity \(Siemens per meter\))6 E
+(301.000 ; Atmospheric Bending Constant \(N-units\))156 681.6 Q
+(700.000 ; Frequency in MHz \(20 MHz to 20 GHz\))156 693.6 Q 42(5;)156
+705.6 S(Radio Climate \(5 = Continental Temperate\))-36 E 42(0;)156
+717.6 S(Polarization \(0 = Horizontal, 1 = Vertical\))-36 E 24(0.5 ;)156
+729.6 R(Fraction of situations \(50% of locations\))6 E F0(KD2BD Softw)
+72 768 Q 129.12(are 02)-.1 F(March 2006)2.5 E(2)198.45 E EP
 %%Page: 3 3
 %%BeginPageSetup
 BP
 %%EndPageSetup
 /F0 10/Times-Roman@0 SF(SPLA)72 48 Q 151.145(T!\(1\) KD2BD)-1.11 F
 (Softw)2.5 E 151.145(are SPLA)-.1 F(T!\(1\))-1.11 E/F1 10/Courier@0 SF
-(Poor ground)156 84 Q -18 54(:4 0)36 H(.001)-54 E F0
-(Radio climate codes used by)108 108 Q/F2 10/Times-Bold@0 SF(SPLA)2.5 E
-(T!)-.95 E F0(are as follo)2.5 E(ws:)-.25 E F1(1: Equatorial \(Congo\))
-156 132 Q(2: Continental Subtropical \(Sudan\))156 144 Q
-(3: Maritime Subtropical \(West coast of Africa\))156 156 Q
-(4: Desert \(Sahara\))156 168 Q(5: Continental Temperate)156 180 Q
+24(0.5 ;)156 84 R(Fraction of time \(50% of the time\))6 E F0 .771(If a\
+n LRP \214le corresponding to the tx_site QTH \214le cannot be found,)
+108 108 R/F2 10/Times-Bold@0 SF(SPLA)3.27 E(T!)-.95 E F0 .77
+(scans the current w)3.27 F(orking)-.1 E .085
+(directory for the \214le "splat.lrp".)108 120 R .085
+(If this \214le cannot be found, then the def)5.085 F .085
+(ault parameters listed abo)-.1 F .385 -.15(ve w)-.15 H .085(ill be).15
+F .528(assigned by)108 132 R F2(SPLA)3.028 E(T!)-.95 E F0 .527(and a co\
+rresponding "splat.lrp" \214le containing this data will be written to \
+the current)3.028 F -.1(wo)108 144 S(rking directory).1 E 5(.")-.65 G
+(splat.lrp" can then be edited by the user as needed.)-5 E -.8(Ty)108
+168 S(pical Earth dielectric constants and conducti).8 E(vity v)-.25 E
+(alues are as follo)-.25 E(ws:)-.25 E F1(Dielectric Constant)270 192 Q
+(Conductivity)12 E(Salt water)156 204 Q 48(:8)42 G 96(05)-48 G(.000)-96
+E(Good ground)156 216 Q 48(:2)36 G 96(50)-48 G(.020)-96 E(Fresh water)
+156 228 Q 48(:8)36 G 96(00)-48 G(.010)-96 E(Marshy land)156 240 Q 48(:1)
+36 G 96(20)-48 G(.007)-96 E(Farmland, forest :)156 252 Q 90(15 0.005)48
+F(Average ground)156 264 Q 48(:1)18 G 96(50)-48 G(.005)-96 E
+(Mountain, sand)156 276 Q 48(:1)18 G 96(30)-48 G(.002)-96 E 72(City :)
+156 288 R 96(50)54 G(.001)-96 E(Poor ground)156 300 Q -18 54(:4 0)36 H
+(.001)-54 E F0(Radio climate codes used by)108 324 Q F2(SPLA)2.5 E(T!)
+-.95 E F0(are as follo)2.5 E(ws:)-.25 E F1(1: Equatorial \(Congo\))156
+348 Q(2: Continental Subtropical \(Sudan\))156 360 Q
+(3: Maritime Subtropical \(West coast of Africa\))156 372 Q
+(4: Desert \(Sahara\))156 384 Q(5: Continental Temperate)156 396 Q
 (6: Maritime Temperate, over land \(UK and west coasts of US & EU\))156
-192 Q(7: Maritime Temperate, over sea)156 204 Q F0 1.487
-(The Continental T)108 228 R 1.486(emperate climate is common to lar)-.7
+408 Q(7: Maritime Temperate, over sea)156 420 Q F0 1.487
+(The Continental T)108 444 R 1.486(emperate climate is common to lar)-.7
 F 1.486(ge land masses in the temperate zone, such as the)-.18 F .756
-(United States.)108 240 R -.15(Fo)5.756 G 3.256(rp).15 G .756
+(United States.)108 456 R -.15(Fo)5.756 G 3.256(rp).15 G .756
 (aths shorter than 100 km, there is little dif)-3.256 F .756
-(ference between Continental and Maritime)-.25 F -.7(Te)108 252 S
-(mperate climates.).7 E .379(The \214nal tw)108 276 R 2.879(op)-.1 G
+(ference between Continental and Maritime)-.25 F -.7(Te)108 468 S
+(mperate climates.).7 E .379(The \214nal tw)108 492 R 2.879(op)-.1 G
 .379(arameters in the)-2.879 F/F3 10/Times-Italic@0 SF(.lrp)2.879 E F0
 .379(\214le correspond to the statistical analysis pro)2.879 F .378
-(vided by the Longle)-.15 F(y-Rice)-.15 E 2.537(model. In)108 288 R .037
+(vided by the Longle)-.15 F(y-Rice)-.15 E 2.537(model. In)108 504 R .037
 (this e)2.537 F(xample,)-.15 E F2(SPLA)2.537 E(T!)-.95 E F0 .038(will r\
 eturn the maximum path loss occurring 50% of the time \(fraction of)
 5.037 F .316(time\) in 50% of situations \(fraction of situations\).)108
-300 R .315(Use a fraction of time parameter of 0.97 for digital tele-)
-5.316 F(vision, 0.50 for analog in the United States.)108 312 Q
-(Isotropic antennas are assumed.)5 E -.15(Fo)108 336 S 3.03(rf).15 G .53
-(urther information on these parameters, see:)-3.03 F F3
-(http://elbert.its.bldr)3.03 E(doc.go)-.37 E(v/itm.html)-.1 E F0(and)
-3.03 E F3(http://www)3.03 E(.soft-)-.74 E(wright.com/faq/engineering/pr)
-108 348 Q(op_longle)-.45 E(y_rice)-.3 E(.html)-.15 E/F4 10.95
-/Times-Bold@0 SF(CITY LOCA)72 364.8 Q(TION FILES)-1.04 E F0 .807
-(The names and locations of cities, to)108 376.8 R .807
-(wer sites, or other points of interest may imported and be plotted on)
--.25 F .797(topographic maps generated by)108 388.8 R F2(SPLA)3.297 E
+516 R .315(Use a fraction of time parameter of 0.97 for digital tele-)
+5.316 F(vision, 0.50 for analog in the United States.)108 528 Q
+(Isotropic antennas are assumed.)5 E -.15(Fo)108 552 S 2.782(rf).15 G
+.282(urther information on these parameters, see:)-2.782 F F3
+(http://\215attop.its.bldr)2.782 E(doc.go)-.37 E(v/itm.html)-.1 E F0
+(and)2.783 E F3(http://www)2.783 E(.soft-)-.74 E
+(wright.com/faq/engineering/pr)108 564 Q(op_longle)-.45 E(y_rice)-.3 E
+(.html)-.15 E/F4 10.95/Times-Bold@0 SF(CITY LOCA)72 580.8 Q(TION FILES)
+-1.04 E F0 .807(The names and locations of cities, to)108 592.8 R .807
+(wer sites, or other points of interest may be imported and plotted on)
+-.25 F .797(topographic maps generated by)108 604.8 R F2(SPLA)3.297 E
 (T!)-.95 E F0(.)A F2(SPLA)5.797 E(T!)-.95 E F0 .797
 (imports the names of cities and locations from ASCII)3.297 F .191
-(\214les containing the location')108 400.8 R 2.691(sn)-.55 G .191
+(\214les containing the location')108 616.8 R 2.691(sn)-.55 G .191
 (ame, the location')-2.691 F 2.691(sl)-.55 G .191
 (atitude, and the location')-2.691 F 2.69(sl)-.55 G 2.69(ongitude. Each)
--2.69 F .19(\214eld is sepa-)2.69 F .513(rated by a comma.)108 412.8 R
+-2.69 F .19(\214eld is sepa-)2.69 F .513(rated by a comma.)108 628.8 R
 .513(Each record is separated by a single line feed character)5.513 F
 5.514(.A)-.55 G 3.014(sw)-5.514 G .514(as the case with the)-3.114 F F3
 (.qth)3.014 E F0 .259(\214les, latitude and longitude information may b\
-e entered in either decimal or de)108 424.8 R .258
-(gree, minute, second \(DMS\))-.15 F(format.)108 436.8 Q -.15(Fo)108
-460.8 S 2.5(re).15 G(xample \()-2.65 E F3(cities.dat)A F0(\):)A F1
-(Teaneck, 40.891973, 74.014506)156 484.8 Q
-(Tenafly, 40.919212, 73.955892)156 496.8 Q
-(Teterboro, 40.859511, 74.058908)156 508.8 Q
-(Tinton Falls, 40.279966, 74.093924)156 520.8 Q
-(Toms River, 39.977777, 74.183580)156 532.8 Q
-(Totowa, 40.906160, 74.223310)156 544.8 Q(Trenton, 40.219922, 74.754665)
-156 556.8 Q F0 2.74(At)108 580.8 S .24(otal of \214v)-2.74 F 2.74(es)
--.15 G .24(eparate city data \214les may be imported at a time.)-2.74 F
-.241(There is no limit to the size of these \214les.)5.241 F F2(SPLA)108
-592.8 Q(T!)-.95 E F0 1.056(reads city data sequentially)3.556 F 3.556
-(,a)-.65 G 1.055
-(nd plots only those locations whose positions do not con\215ict with)
--3.556 F(pre)108 604.8 Q
-(viously plotted locations when generating topographic maps.)-.25 E .996
-(City data \214les may be generated manually using an)108 628.8 R 3.496
-(yt)-.15 G -.15(ex)-3.496 G 3.496(te).15 G(ditor)-3.496 E 3.496(,i)-.4 G
-.997(mported from other sources, or deri)-3.496 F -.15(ve)-.25 G(d).15 E
-1.535(from data a)108 640.8 R -.25(va)-.2 G 1.535
-(ilable from the U.S. Census Bureau using the).25 F F2(citydecoder)4.035
-E F0 1.535(utility included with)4.035 F F2(SPLA)4.035 E(T!)-.95 E F0(.)
-A .152(Such data is a)108 652.8 R -.25(va)-.2 G .153
-(ilable free of char).25 F .153(ge via the Internet at:)-.18 F F3
-(http://www)2.653 E(.census.go)-.74 E(v/g)-.1 E
-(eo/www/cob/bdy_\214les.html)-.1 E F0(,)A(and must be in ASCII format.)
-108 664.8 Q F4(CAR)72 681.6 Q -.197(TO)-.438 G(GRAPHIC BOUND).197 E(AR)
--.383 E 2.738(YD)-.383 G -1.644 -1.04(AT A)-3.121 H(FILES)3.778 E F0
-1.17(Cartographic boundary data may also be imported to plot the bounda\
-ries of cities, counties, or states on)108 693.6 R .071
-(topographic maps generated by)108 705.6 R F2(SPLA)2.571 E(T!)-.95 E F0
-5.071(.S)C .071
-(uch data must be of the form of ARC/INFO Ungenerate \(ASCII)-5.071 F
--.15(Fo)108 717.6 S 1.262
-(rmat\) Metadata Cartographic Boundary Files, and are a).15 F -.25(va)
--.2 G 1.262(ilable from the U.S.).25 F 1.262(Census Bureau via the)6.262
-F 48.573(Internet at:)108 729.6 R F3(http://www)51.073 E(.census.go)-.74
-E(v/g)-.1 E(eo/www/cob/co2000.html#ascii)-.1 E F0(and)51.074 E
-(KD2BD Softw)72 768 Q 126.62(are 20)-.1 F(January 2004)2.5 E(3)195.95 E
-EP
+e entered in either decimal or de)108 640.8 R .258
+(gree, minute, second \(DMS\))-.15 F(format.)108 652.8 Q -.15(Fo)108
+676.8 S 2.5(re).15 G(xample \()-2.65 E F3(cities.dat)A F0(\):)A F1
+(Teaneck, 40.891973, 74.014506)156 700.8 Q
+(Tenafly, 40.919212, 73.955892)156 712.8 Q
+(Teterboro, 40.859511, 74.058908)156 724.8 Q F0(KD2BD Softw)72 768 Q
+129.12(are 02)-.1 F(March 2006)2.5 E(3)198.45 E EP
 %%Page: 4 4
 %%BeginPageSetup
 BP
 %%EndPageSetup
 /F0 10/Times-Roman@0 SF(SPLA)72 48 Q 151.145(T!\(1\) KD2BD)-1.11 F
-(Softw)2.5 E 151.145(are SPLA)-.1 F(T!\(1\))-1.11 E/F1 10/Times-Italic@0
-SF(http://www)108 84 Q(.census.go)-.74 E(v/g)-.1 E
-(eo/www/cob/pl2000.html#ascii)-.1 E F0 5.008(.A)C .008(total of \214v)
--2.5 F 2.507(es)-.15 G .007(eparate cartographic boundary \214les)-2.507
-F .196(may be imported at a time.)108 96 R .196
+(Softw)2.5 E 151.145(are SPLA)-.1 F(T!\(1\))-1.11 E/F1 10/Courier@0 SF
+(Tinton Falls, 40.279966, 74.093924)156 84 Q
+(Toms River, 39.977777, 74.183580)156 96 Q(Totowa, 40.906160, 74.223310)
+156 108 Q(Trenton, 40.219922, 74.754665)156 120 Q F0 3.199(At)108 144 S
+.699(otal of \214v)-3.199 F 3.199(es)-.15 G .7(eparate city data \214le\
+s may be imported at a time, and there is no limit to the size of these)
+-3.199 F(\214les.)108 156 Q/F2 10/Times-Bold@0 SF(SPLA)6.37 E(T!)-.95 E
+F0 1.37(reads city data on a "\214rst come/\214rst serv)3.87 F 1.369
+(ed" basis, and plots only those locations whose)-.15 F 1.041(annotatio\
+ns do not con\215ict with annotations of locations plotted earlier duri\
+ng)108 168 R F2(SPLA)3.542 E(T)-.95 E F0 2.142 -.55('s e)D -.15(xe).4 G
+3.542(cution. This).15 F(beha)108 180 Q .347(vior minimizes clutter in)
+-.2 F F2(SPLA)2.847 E(T!)-.95 E F0 .347(generated topographic maps, b)
+2.847 F .347(ut also mandates that important loca-)-.2 F .051
+(tions be placed to)108 192 R -.1(wa)-.25 G .051(rd the be).1 F .052(gi\
+nning of the \214rst city data \214le, and disposable locations be posi\
+tioned further)-.15 F(do)108 204 Q
+(wn the list or in subsequent data \214les.)-.25 E .997
+(City data \214les may be generated manually using an)108 228 R 3.496
+(yt)-.15 G -.15(ex)-3.496 G 3.496(te).15 G(ditor)-3.496 E 3.496(,i)-.4 G
+.996(mported from other sources, or deri)-3.496 F -.15(ve)-.25 G(d).15 E
+1.535(from data a)108 240 R -.25(va)-.2 G 1.535
+(ilable from the U.S. Census Bureau using the).25 F F2(citydecoder)4.035
+E F0 1.535(utility included with)4.035 F F2(SPLA)4.035 E(T!)-.95 E F0(.)
+A .153(Such data is a)108 252 R -.25(va)-.2 G .153(ilable free of char)
+.25 F .153(ge via the Internet at:)-.18 F/F3 10/Times-Italic@0 SF
+(http://www)2.652 E(.census.go)-.74 E(v/g)-.1 E
+(eo/www/cob/bdy_\214les.html)-.1 E F0(,)A(and must be in ASCII format.)
+108 264 Q/F4 10.95/Times-Bold@0 SF(CAR)72 280.8 Q -.197(TO)-.438 G
+(GRAPHIC BOUND).197 E(AR)-.383 E 2.738(YD)-.383 G -1.644 -1.04(AT A)
+-3.121 H(FILES)3.778 E F0 1.17(Cartographic boundary data may also be i\
+mported to plot the boundaries of cities, counties, or states on)108
+292.8 R .072(topographic maps generated by)108 304.8 R F2(SPLA)2.572 E
+(T!)-.95 E F0 5.072(.S)C .071
+(uch data must be of the form of ARC/INFO Ungenerate \(ASCII)-5.072 F
+-.15(Fo)108 316.8 S 1.262
+(rmat\) Metadata Cartographic Boundary Files, and are a).15 F -.25(va)
+-.2 G 1.262(ilable from the U.S.).25 F 1.263(Census Bureau via the)6.262
+F 19.948(Internet at:)108 328.8 R F3(http://www)22.448 E(.census.go)-.74
+E(v/g)-.1 E(eo/www/cob/co2000.html#ascii)-.1 E F0(and)22.447 E F3
+(http://www)22.447 E(.cen-)-.74 E(sus.go)108 340.8 Q(v/g)-.1 E
+(eo/www/cob/pl2000.html#ascii)-.1 E F0 7.85(.A)C 2.85(total of \214v)
+-2.5 F 5.35(es)-.15 G 2.85(eparate cartographic boundary \214les may be)
+-5.35 F .813(imported at a time.)108 352.8 R .812
 (It is not necessary to import state boundaries if county boundaries ha)
-5.196 F .497 -.15(ve a)-.2 H(lready).15 E(been imported.)108 108 Q/F2
-10.95/Times-Bold@0 SF(PR)72 124.8 Q(OGRAM OPERA)-.329 E(TION)-1.04 E/F3
-10/Times-Bold@0 SF(SPLA)108 136.8 Q(T!)-.95 E F0 1.03(is in)3.53 F -.2
-(vo)-.4 G -.1(ke).2 G 3.53(dv).1 G 1.03
-(ia the command-line using a series of switches and ar)-3.53 F 3.53
-(guments. Since)-.18 F F3(SPLA)3.53 E(T!)-.95 E F0 1.03(is a)3.53 F .023
-(CPU and memory intensi)108 148.8 R .323 -.15(ve a)-.25 H .023
-(pplication, this type of interf).15 F .023(ace minimizes o)-.1 F -.15
-(ve)-.15 G .024(rhead, and also lends itself well).15 F .106
-(to scripted operations.)108 160.8 R F3(SPLA)5.106 E(T!)-.95 E F0 1.206
--.55('s C)D .106
-(PU and memory scheduling priority may be adjusted through the use of)
-.55 F(the Unix)108 172.8 Q F3(nice)2.5 E F0(command.)2.5 E .225
-(The number and type of switches passed to)108 196.8 R F3(SPLA)2.725 E
-(T!)-.95 E F0 .226(determine its mode of operation and method of output)
-2.725 F .008(data generation.)108 208.8 R .008(Nearly all of)5.008 F F3
-(SPLA)2.508 E(T!)-.95 E F0 1.108 -.55('s s)D .008
-(witches may be cascaded in an).55 F 2.507(yo)-.15 G .007
-(rder on the command line when)-2.507 F(in)108 220.8 Q -.2(vo)-.4 G(kin\
-g the program to include all the features described by those switches w\
-hen performing an analysis.).2 E F2(POINT)72 237.6 Q(-T)-1.007 E
-(O-POINT AN)-.197 E(AL)-.219 E(YSIS)-1.007 E F3(SPLA)108 249.6 Q(T!)-.95
-E F0 1.224
-(may be used to perform line-of-sight terrain analysis between tw)3.724
-F 3.725(os)-.1 G 1.225(peci\214ed site locations.)-3.725 F -.15(Fo)6.225
-G(r).15 E -.15(ex)108 261.6 S(ample:).15 E/F4 10/Courier@0 SF
-(splat -t tx_site.qth -r rx_site.qth)108 285.6 Q F0(in)108 309.6 Q -.2
-(vo)-.4 G -.1(ke).2 G 5.833(sat).1 G 3.332
-(errain analysis between the transmitter speci\214ed in)-5.833 F F1
-(tx_site)5.832 E(.qth)-.15 E F0 3.332(and recei)5.832 F -.15(ve)-.25 G
-5.832(rs).15 G 3.332(peci\214ed in)-5.832 F F1(rx_site)108 321.6 Q(.qth)
--.15 E F0 2.858(,a)C .358(nd writes a)-2.858 F F3(SPLA)2.858 E(T!)-.95 E
-F0 .359(Obstruction Report to the current w)2.858 F .359
-(orking directory)-.1 F 5.359(.T)-.65 G .359(he report contains)-5.359 F
-.767(details of the transmitter and recei)108 333.6 R -.15(ve)-.25 G
+5.813 F 1.112 -.15(ve a)-.2 H .812(lready been).15 F(imported.)108 364.8
+Q F4(PR)72 381.6 Q(OGRAM OPERA)-.329 E(TION)-1.04 E F2(SPLA)108 393.6 Q
+(T!)-.95 E F0 1.03(is in)3.53 F -.2(vo)-.4 G -.1(ke).2 G 3.53(dv).1 G
+1.03(ia the command-line using a series of switches and ar)-3.53 F 3.53
+(guments. Since)-.18 F F2(SPLA)3.53 E(T!)-.95 E F0 1.03(is a)3.53 F .746
+(CPU and memory intensi)108 405.6 R 1.046 -.15(ve a)-.25 H .745
+(pplication, this type of interf).15 F .745(ace minimizes o)-.1 F -.15
+(ve)-.15 G .745(rhead and lends itself well to).15 F .421
+(scripted \(batch\) operations.)108 417.6 R F2(SPLA)5.421 E(T!)-.95 E F0
+1.521 -.55('s C)D .422
+(PU and memory scheduling priority may be modi\214ed through the).55 F
+(use of the Unix)108 429.6 Q F2(nice)2.5 E F0(command.)2.5 E .226
+(The number and type of switches passed to)108 453.6 R F2(SPLA)2.725 E
+(T!)-.95 E F0 .225(determine its mode of operation and method of output)
+2.725 F .007(data generation.)108 465.6 R .007(Nearly all of)5.007 F F2
+(SPLA)2.507 E(T!)-.95 E F0 1.107 -.55('s s)D .008
+(witches may be cascaded in an).55 F 2.508(yo)-.15 G .008
+(rder on the command line when)-2.508 F(in)108 477.6 Q -.2(vo)-.4 G
+(king the program.).2 E F4(POINT)72 494.4 Q(-T)-1.007 E(O-POINT AN)-.197
+E(AL)-.219 E(YSIS)-1.007 E F2(SPLA)108 506.4 Q(T!)-.95 E F0 1.224
+(may be used to perform line-of-sight terrain analysis between tw)3.725
+F 3.724(os)-.1 G 1.224(peci\214ed site locations.)-3.724 F -.15(Fo)6.224
+G(r).15 E -.15(ex)108 518.4 S(ample:).15 E F1
+(splat -t tx_site.qth -r rx_site.qth)108 542.4 Q F0(in)108 566.4 Q -.2
+(vo)-.4 G -.1(ke).2 G 5.832(sat).1 G 3.332
+(errain analysis between the transmitter speci\214ed in)-5.832 F F3
+(tx_site)5.832 E(.qth)-.15 E F0 3.333(and recei)5.833 F -.15(ve)-.25 G
+5.833(rs).15 G 3.333(peci\214ed in)-5.833 F F3(rx_site)108 578.4 Q(.qth)
+-.15 E F0 2.859(,a)C .359(nd writes a)-2.859 F F2(SPLA)2.859 E(T!)-.95 E
+F0 .359(Obstruction Report to the current w)2.859 F .358
+(orking directory)-.1 F 5.358(.T)-.65 G .358(he report contains)-5.358 F
+.766(details of the transmitter and recei)108 590.4 R -.15(ve)-.25 G
 3.267(rs).15 G .767(ites, and identi\214es the location of an)-3.267 F
-3.266(yo)-.15 G .766(bstructions detected during)-3.266 F .627
-(the analysis.)108 345.6 R .628
-(If an obstruction can be cleared by raising the recei)5.627 F .928 -.15
-(ve a)-.25 H .628(ntenna to a greater altitude,).15 F F3(SPLA)3.128 E
+3.267(yo)-.15 G .767(bstructions detected during)-3.267 F .628
+(the analysis.)108 602.4 R .628
+(If an obstruction can be cleared by raising the recei)5.628 F .927 -.15
+(ve a)-.25 H .627(ntenna to a greater altitude,).15 F F2(SPLA)3.127 E
 (T!)-.95 E F0 .573(will indicate the minimum antenna height required fo\
-r a line-of-sight path to e)108 357.6 R .572
-(xist between the transmitter)-.15 F .201(and recei)108 369.6 R -.15(ve)
--.25 G 2.701(rl).15 G .201(ocations speci\214ed.)-2.701 F .201(If the a\
+r a line-of-sight path to e)108 614.4 R .573
+(xist between the transmitter)-.15 F .202(and recei)108 626.4 R -.15(ve)
+-.25 G 2.702(rl).15 G .202(ocations speci\214ed.)-2.702 F .201(If the a\
 ntenna must be raised a signi\214cant amount, this determination may)
-5.201 F(tak)108 381.6 Q 2.5(es)-.1 G(ome time.)-2.5 E .694
-(are optional when in)108 405.6 R -.2(vo)-.4 G .694(king the program.).2
-F F3(SPLA)5.694 E(T!)-.95 E F0 .693(automatically reads all SPLA)3.194 F
-3.193(TD)-1.11 G .693(ata Files necessary to)-3.193 F .289
-(conduct the terrain analysis between the sites speci\214ed.)108 417.6 R
-.289(By def)5.289 F .29(ault, the location of SDF \214les is assumed to)
--.1 F .307(be in the current w)108 429.6 R .307(orking directory unless\
- a ".splat_path" \214le is present under the user')-.1 F 2.807(sh)-.55 G
-.307(ome directory)-2.807 F 5.307(.I)-.65 G(f)-5.307 E 1.087(this \214l\
-e is present, it must contain the full directory path to the location o\
-f all the SDF \214les required by)108 441.6 R F3(SPLA)108 453.6 Q(T!)
--.95 E F0 .738(to perform its analysis for the re)3.238 F .737
-(gion containing the transmitter and recei)-.15 F -.15(ve)-.25 G 3.237
-(rs).15 G .737(ites speci\214ed.)-3.237 F(The)5.737 E
-(path in this \214le must be of the form of a single line of ASCII te)
-108 465.6 Q(xt:)-.15 E F4(/opt/splat/sdf/)108 489.6 Q F0 .622
-(and may be generated with an)108 513.6 R 3.122(yt)-.15 G -.15(ex)-3.122
-G 3.122(te).15 G(ditor)-3.122 E 5.622(.T)-.55 G .622(he def)-5.622 F
-.622(ault path speci\214ed in the)-.1 F F1($HOME/.splat_path)3.122 E F0
-.622(\214le may)3.122 F(be o)108 525.6 Q -.15(ve)-.15 G(rridden at an)
-.15 E 2.5(yt)-.15 G(ime using the)-2.5 E F1(-d)2.5 E F0(switch:)2.5 E F4
-(splat -t tx_site -r rx_site -d /cdrom/sdf/)108 549.6 Q F0 3.023(Ag)108
-573.6 S .523(raph of the terrain pro\214le between the recei)-3.023 F
--.15(ve)-.25 G 3.023(ra).15 G .523
-(nd transmitter locations as a function of distance from)-3.023 F
-(the recei)108 585.6 Q -.15(ve)-.25 G 2.5(rc).15 G
-(an be generated by adding the)-2.5 E F1(-p)2.5 E F0(switch:)2.5 E F4
-(splat -t tx_site -r rx_site -p terrain_profile.gif)108 609.6 Q F3(SPLA)
-108 633.6 Q(T!)-.95 E F0(in)4.119 E -.2(vo)-.4 G -.1(ke).2 G(s).1 E F3
-(gnuplot)4.119 E F0 1.619(when generating graphs.)4.119 F 1.619
-(The \214lename e)6.619 F 1.619(xtension speci\214ed to)-.15 F F3(SPLA)
-4.12 E(T!)-.95 E F0(deter)4.12 E(-)-.2 E .809
-(mines the format of the graph produced.)108 645.6 R F1(.gif)5.809 E F0
-.809(will produce a 640x480 color GIF graphic \214le, while)3.309 F F1
-(.ps)3.308 E F0(or)3.308 E F1(.postscript)108 657.6 Q F0 1.211
-(will produce postscript output.)3.711 F 1.212
-(Output in formats such as PNG, Adobe Illustrator)6.211 F 3.712(,A)-.4 G
-(utoCAD)-3.712 E 1.924(dxf, LaT)108 669.6 R 1.924(eX, and man)-.7 F
-4.424(yo)-.15 G 1.924(thers are a)-4.424 F -.25(va)-.2 G 4.424
-(ilable. Please).25 F(consult)4.424 E F3(gnuplot)4.424 E F0 4.424(,a)C
-(nd)-4.424 E F3(gnuplot)4.424 E F0 3.023 -.55('s d)D 1.923
-(ocumentation for).55 F(details on all the supported output formats.)108
-681.6 Q 3.542(Ag)108 705.6 S 1.042(raph of ele)-3.542 F -.25(va)-.25 G
-1.042(tions subtended by the terrain between the recei).25 F -.15(ve)
--.25 G 3.542(ra).15 G 1.043(nd transmitter as a function of dis-)-3.542
-F(tance from the recei)108 717.6 Q -.15(ve)-.25 G 2.5(rc).15 G
-(an be generated by using the)-2.5 E F1(-e)2.5 E F0(switch:)2.5 E
-(KD2BD Softw)72 768 Q 126.62(are 20)-.1 F(January 2004)2.5 E(4)195.95 E
-EP
+5.202 F(tak)108 638.4 Q 3.004(es)-.1 G .504(ome time.)-3.004 F .504
+(Note that the results pro)5.504 F .505(vided are the)-.15 F F3(minimum)
+3.005 E F0 .505(necessary for a line-of-sight path to e)3.005 F(xist,)
+-.15 E(and do not tak)108 650.4 Q 2.5(eF)-.1 G
+(resnel zone clearance requirements into consideration.)-2.5 E F3(qth)
+108 674.4 Q F0 -.15(ex)4.658 G 2.158(tensions are assumed by).15 F F2
+(SPLA)4.658 E(T!)-.95 E F0 2.157
+(for QTH \214les, and are optional when in)4.657 F -.2(vo)-.4 G 2.157
+(king the program.).2 F F2(SPLA)108 686.4 Q(T!)-.95 E F0 1.048
+(automatically reads all SPLA)3.548 F 3.548(TD)-1.11 G 1.049
+(ata Files necessary to conduct the terrain analysis between the)-3.548
+F 1.306(sites speci\214ed.)108 698.4 R F2(SPLA)6.306 E(T!)-.95 E F0
+1.306(searches for the needed SDF \214les in the current w)3.806 F 1.305
+(orking directory \214rst.)-.1 F 1.305(If the)6.305 F
+(needed \214les are not found,)108 710.4 Q F2(SPLA)2.5 E(T!)-.95 E F0
+(then searches in the path speci\214ed by the)2.5 E F3(-d)2.5 E F0
+(command-line switch:)2.5 E(KD2BD Softw)72 768 Q 129.12(are 02)-.1 F
+(March 2006)2.5 E(4)198.45 E EP
 %%Page: 5 5
 %%BeginPageSetup
 BP
 %%EndPageSetup
 /F0 10/Times-Roman@0 SF(SPLA)72 48 Q 151.145(T!\(1\) KD2BD)-1.11 F
 (Softw)2.5 E 151.145(are SPLA)-.1 F(T!\(1\))-1.11 E/F1 10/Courier@0 SF
-(splat -t tx_site -r rx_site -e elevation_profile.gif)108 84 Q F0 .425
-(The graph produced using this switch illustrates the ele)108 108 R -.25
-(va)-.25 G .424(tion and depression angles resulting from the ter).25 F
-(-)-.2 E .553(rain between the recei)108 120 R -.15(ve)-.25 G(r').15 E
-3.053(sl)-.55 G .553
-(ocation and the transmitter site from the perspecti)-3.053 F .854 -.15
-(ve o)-.25 H 3.054(ft).15 G .554(he recei)-3.054 F -.15(ve)-.25 G(r').15
-E 3.054(sl)-.55 G(ocation.)-3.054 E 3.781(As)108 132 S 1.281
-(econd trace is plotted between the left side of the graph \(recei)
--3.781 F -.15(ve)-.25 G(r').15 E 3.78(sl)-.55 G 1.28
-(ocation\) and the location of the)-3.78 F .448
-(transmitting antenna on the right.)108 144 R .449
-(This trace illustrates the ele)5.448 F -.25(va)-.25 G .449
-(tion angle required for a line-of-sight path).25 F 1.074(to e)108 156 R
-1.074(xist between the recei)-.15 F -.15(ve)-.25 G 3.574(ra).15 G 1.074
+(splat -t tx_site -r rx_site -d /cdrom/sdf/)108 84 Q F0 .329(An e)108
+108 R .329(xternal directory path may be speci\214ed by placing a ".spl\
+at_path" \214le under the user')-.15 F 2.83(sh)-.55 G .33(ome directory)
+-2.83 F(.)-.65 E .401(This \214le must contain the full directory path \
+to the last resort location of all the SDF \214les.)108 120 R .4
+(The path in the)5.4 F/F2 10/Times-Italic@0 SF($HOME/.splat_path)108 132
+Q F0(\214le must be of the form of a single line of ASCII te)2.5 E(xt:)
+-.15 E F1(/opt/splat/sdf/)108 156 Q F0(and can be generated using an)108
+180 Q 2.5(yt)-.15 G -.15(ex)-2.5 G 2.5(te).15 G(ditor)-2.5 E(.)-.55 E
+3.022(Ag)108 204 S .523(raph of the terrain pro\214le between the recei)
+-3.022 F -.15(ve)-.25 G 3.023(ra).15 G .523
+(nd transmitter locations as a function of distance from)-3.023 F
+(the recei)108 216 Q -.15(ve)-.25 G 2.5(rc).15 G
+(an be generated by adding the)-2.5 E F2(-p)2.5 E F0(switch:)2.5 E F1
+(splat -t tx_site -r rx_site -p terrain_profile.gif)108 240 Q/F3 10
+/Times-Bold@0 SF(SPLA)108 264 Q(T!)-.95 E F0(in)4.12 E -.2(vo)-.4 G -.1
+(ke).2 G(s).1 E F3(gnuplot)4.12 E F0 1.619(when generating graphs.)4.119
+F 1.619(The \214lename e)6.619 F 1.619(xtension speci\214ed to)-.15 F F3
+(SPLA)4.119 E(T!)-.95 E F0(deter)4.119 E(-)-.2 E .809
+(mines the format of the graph produced.)108 276 R F2(.gif)5.809 E F0
+.809(will produce a 640x480 color GIF graphic \214le, while)3.309 F F2
+(.ps)3.309 E F0(or)3.309 E F2(.postscript)108 288 Q F0 1.212
+(will produce postscript output.)3.712 F 1.211
+(Output in formats such as PNG, Adobe Illustrator)6.212 F 3.711(,A)-.4 G
+(utoCAD)-3.711 E 1.923(dxf, LaT)108 300 R 1.923(eX, and man)-.7 F 4.424
+(yo)-.15 G 1.924(thers are a)-4.424 F -.25(va)-.2 G 4.424
+(ilable. Please).25 F(consult)4.424 E F3(gnuplot)4.424 E F0 4.424(,a)C
+(nd)-4.424 E F3(gnuplot)4.424 E F0 3.024 -.55('s d)D 1.924
+(ocumentation for).55 F(details on all the supported output formats.)108
+312 Q 3.543(Ag)108 336 S 1.043(raph of ele)-3.543 F -.25(va)-.25 G 1.042
+(tions subtended by the terrain between the recei).25 F -.15(ve)-.25 G
+3.542(ra).15 G 1.042(nd transmitter as a function of dis-)-3.542 F
+(tance from the recei)108 348 Q -.15(ve)-.25 G 2.5(rc).15 G
+(an be generated by using the)-2.5 E F2(-e)2.5 E F0(switch:)2.5 E F1
+(splat -t tx_site -r rx_site -e elevation_profile.gif)108 372 Q F0 .424
+(The graph produced using this switch illustrates the ele)108 396 R -.25
+(va)-.25 G .425(tion and depression angles resulting from the ter).25 F
+(-)-.2 E .554(rain between the recei)108 408 R -.15(ve)-.25 G(r').15 E
+3.054(sl)-.55 G .553
+(ocation and the transmitter site from the perspecti)-3.054 F .853 -.15
+(ve o)-.25 H 3.053(ft).15 G .553(he recei)-3.053 F -.15(ve)-.25 G(r').15
+E 3.053(sl)-.55 G(ocation.)-3.053 E 3.78(As)108 420 S 1.28
+(econd trace is plotted between the left side of the graph \(recei)-3.78
+F -.15(ve)-.25 G(r').15 E 3.781(sl)-.55 G 1.281
+(ocation\) and the location of the)-3.781 F .449
+(transmitting antenna on the right.)108 432 R .449
+(This trace illustrates the ele)5.449 F -.25(va)-.25 G .448
+(tion angle required for a line-of-sight path).25 F 1.073(to e)108 444 R
+1.073(xist between the recei)-.15 F -.15(ve)-.25 G 3.574(ra).15 G 1.074
 (nd transmitter locations.)-3.574 F 1.074
-(If the trace intersects the ele)6.074 F -.25(va)-.25 G 1.073
+(If the trace intersects the ele)6.074 F -.25(va)-.25 G 1.074
 (tion pro\214le at an).25 F(y)-.15 E 1.031(point on the graph, then thi\
-s is an indication that a line-of-sight path does not e)108 168 R 1.032
-(xist under the conditions)-.15 F(gi)108 180 Q -.15(ve)-.25 G(n, and th\
+s is an indication that a line-of-sight path does not e)108 456 R 1.031
+(xist under the conditions)-.15 F(gi)108 468 Q -.15(ve)-.25 G(n, and th\
 e obstructions can be clearly identi\214ed on the graph at the point\(s\
-\) of intersection.).15 E 3.671(Ag)108 204 S 1.171(raph illustrating te\
-rrain height referenced to a line-of-sight path between the transmitter\
- and recei)-3.671 F -.15(ve)-.25 G(r).15 E(may be generated using the)
-108 216 Q/F2 10/Times-Italic@0 SF(-h)2.5 E F0(switch:)2.5 E F1
-(splat -t tx_site -r rx_site -h height_profile.gif)108 240 Q F0
-(The Earth')108 264 Q 2.5(sc)-.55 G(urv)-2.5 E(ature is clearly e)-.25 E
-(vident when plotting height pro\214les.)-.25 E 2.5(Ag)108 288 S
+\) of intersection.).15 E 3.67(Ag)108 492 S 1.171(raph illustrating ter\
+rain height referenced to a line-of-sight path between the transmitter \
+and recei)-3.67 F -.15(ve)-.25 G(r).15 E(may be generated using the)108
+504 Q F2(-h)2.5 E F0(switch:)2.5 E F1
+(splat -t tx_site -r rx_site -h height_profile.gif)108 528 Q F0
+(The Earth')108 552 Q 2.5(sc)-.55 G(urv)-2.5 E(ature is clearly e)-.25 E
+(vident when plotting height pro\214les.)-.25 E 2.5(Ag)108 576 S
 (raph sho)-2.5 E(wing Longle)-.25 E
 (y-Rice path loss may be plotted using the)-.15 E F2(-l)2.5 E F0
 (switch:)2.5 E F1(splat -t tx_site -r rx_site -l path_loss_profile.gif)
-108 312 Q F0 .886(When performing path loss pro\214les, a Longle)108 336
+108 600 Q F0 .886(When performing path loss pro\214les, a Longle)108 624
 R .886(y-Rice Model P)-.15 F .886(ath Loss Report is generated by)-.15 F
-/F3 10/Times-Bold@0 SF(SPLA)3.386 E(T!)-.95 E F0(in)3.386 E .755
-(the form of a te)108 348 R .754(xt \214le with a)-.15 F F2(.lr)3.254 E
-(o)-.45 E F0 .754(\214lename e)3.254 F 3.254(xtension. The)-.15 F .754
-(report contains bearings and distances between)3.254 F .535
-(the transmitter and recei)108 360 R -.15(ve)-.25 G 1.335 -.4(r, a).15 H
-3.035(sw).4 G .536(ell as the Longle)-3.035 F .536
-(y-Rice path loss for v)-.15 F .536(arious distances between the trans-)
--.25 F .096(mitter and recei)108 372 R -.15(ve)-.25 G 2.596(rl).15 G
-2.596(ocations. The)-2.596 F .096(mode of propag)2.596 F .095
-(ation for points along the path are gi)-.05 F -.15(ve)-.25 G 2.595(na)
-.15 G(s)-2.595 E F2(Line-of-Sight)2.595 E F0(,)A F2(Single Horizon)108
-384 Q F0(,)A F2(Double Horizon)2.5 E F0(,)A F2(Dif)2.5 E(fr)-.18 E
+F3(SPLA)3.386 E(T!)-.95 E F0(in)3.386 E .754(the form of a te)108 636 R
+.754(xt \214le with a)-.15 F F2(.lr)3.254 E(o)-.45 E F0 .754
+(\214lename e)3.254 F 3.254(xtension. The)-.15 F .754
+(report contains bearings and distances between)3.254 F .536
+(the transmitter and recei)108 648 R -.15(ve)-.25 G 1.336 -.4(r, a).15 H
+3.036(sw).4 G .536(ell as the Longle)-3.036 F .536
+(y-Rice path loss for v)-.15 F .535(arious distances between the trans-)
+-.25 F .095(mitter and recei)108 660 R -.15(ve)-.25 G 2.595(rl).15 G
+2.595(ocations. The)-2.595 F .095(mode of propag)2.595 F .096
+(ation for points along the path are gi)-.05 F -.15(ve)-.25 G 2.596(na)
+.15 G(s)-2.596 E F2(Line-of-Sight)2.596 E F0(,)A F2(Single Horizon)108
+672 Q F0(,)A F2(Double Horizon)2.5 E F0(,)A F2(Dif)2.5 E(fr)-.18 E
 (action Dominant)-.15 E F0 2.5(,a)C(nd)-2.5 E F2 -1.85 -.55(Tr o)2.5 H
-(poscatter Dominant).55 E F0(.)A 2.36 -.8(To d)108 408 T .76(etermine t\
+(poscatter Dominant).55 E F0(.)A 2.36 -.8(To d)108 696 T .76(etermine t\
 he signal-to-noise \(SNR\) ratio at remote location where random Johnso\
-n \(thermal\) noise is).8 F(the primary limiting f)108 420 Q
-(actor in reception:)-.1 E F2(SNR)108.33 444 Q/F4 10/Symbol SF(=)3.07 E
-F2(T)2.71 E F4(-)3.47 E F2(NJ)2.9 E F4(-)3.17 E F2(L)2.78 E F4(+)2.73 E
-F2(G)2.18 E F4(-)2.7 E F2(NF)2.9 E F0(where)108 468 Q F3(T)3.077 E F0
-.577(is the ERP of the transmitter in dBW)3.077 F(,)-.92 E F3(NJ)3.076 E
-F0 .576(is Johnson Noise in dBW \(-136 dBW for a 6 MHz TV)3.076 F
-(channel\),)108 480 Q F3(L)2.513 E F0 .013(is the path loss pro)2.513 F
-.013(vided by)-.15 F F3(SPLA)2.513 E(T!)-.95 E F0 .014(in dB \(as a)
-2.513 F F2(positive)2.514 E F0(number\),)2.514 E F3(G)2.514 E F0 .014
-(is the recei)2.514 F .314 -.15(ve a)-.25 H .014(ntenna g).15 F(ain)-.05
-E(in dB o)108 492 Q -.15(ve)-.15 G 2.5(ri).15 G(sotropic, and)-2.5 E F3
+n \(thermal\) noise is).8 F(the primary limiting f)108 708 Q
+(actor in reception:)-.1 E(KD2BD Softw)72 768 Q 129.12(are 02)-.1 F
+(March 2006)2.5 E(5)198.45 E EP
+%%Page: 6 6
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF(SPLA)72 48 Q 151.145(T!\(1\) KD2BD)-1.11 F
+(Softw)2.5 E 151.145(are SPLA)-.1 F(T!\(1\))-1.11 E/F1 10/Times-Italic@0
+SF(SNR)108.33 84 Q/F2 10/Symbol SF(=)3.07 E F1(T)2.71 E F2(-)3.47 E F1
+(NJ)2.9 E F2(-)3.17 E F1(L)2.78 E F2(+)2.73 E F1(G)2.18 E F2(-)2.7 E F1
+(NF)2.9 E F0(where)108 108 Q/F3 10/Times-Bold@0 SF(T)3.076 E F0 .576
+(is the ERP of the transmitter in dBW)3.076 F(,)-.92 E F3(NJ)3.076 E F0
+.577(is Johnson Noise in dBW \(-136 dBW for a 6 MHz TV)3.076 F
+(channel\),)108 120 Q F3(L)2.514 E F0 .014(is the path loss pro)2.514 F
+.014(vided by)-.15 F F3(SPLA)2.514 E(T!)-.95 E F0 .013(in dB \(as a)
+2.514 F F1(positive)2.513 E F0(number\),)2.513 E F3(G)2.513 E F0 .013
+(is the recei)2.513 F .313 -.15(ve a)-.25 H .013(ntenna g).15 F(ain)-.05
+E(in dB o)108 132 Q -.15(ve)-.15 G 2.5(ri).15 G(sotropic, and)-2.5 E F3
 (NF)2.5 E F0(is the recei)2.5 E -.15(ve)-.25 G 2.5(rn).15 G
-(oise \214gure in dB.)-2.5 E F3(T)108 516 Q F0(may be computed as follo)
-2.5 E(ws:)-.25 E F2(T)107.91 540 Q F4(=)4.07 E F2(TI)2.71 E F4(+)3.21 E
-F2(GT)2.18 E F0(where)108 564 Q F3(TI)3.055 E F0 .555
+(oise \214gure in dB.)-2.5 E F3(T)108 156 Q F0(may be computed as follo)
+2.5 E(ws:)-.25 E F1(T)107.91 180 Q F2(=)4.07 E F1(TI)2.71 E F2(+)3.21 E
+F1(GT)2.18 E F0(where)108 204 Q F3(TI)3.055 E F0 .555
 (is actual amount of RF po)3.055 F .555(wer deli)-.25 F -.15(ve)-.25 G
 .555(red to the transmitting antenna in dBW).15 F(,)-.92 E F3(GT)3.055 E
-F0 .555(is the transmit-)3.055 F .669(ting antenna g)108 576 R .669
-(ain \(o)-.05 F -.15(ve)-.15 G 3.169(ri).15 G .669
-(sotropic\) in the direction of the recei)-3.169 F -.15(ve)-.25 G 3.17
-(r\().15 G .67(or the horizon if the recei)-3.17 F -.15(ve)-.25 G 3.17
-(ri).15 G 3.17(so)-3.17 G -.15(ve)-3.32 G 3.17(rt).15 G(he)-3.17 E
-(horizon\).)108 588 Q 1.802 -.8(To c)108 612 T .202(ompute ho).8 F 2.702
-(wm)-.25 G .202(uch more signal is a)-2.702 F -.25(va)-.2 G .202
+F0 .555(is the transmit-)3.055 F .67(ting antenna g)108 216 R .67
+(ain \(o)-.05 F -.15(ve)-.15 G 3.17(ri).15 G .67
+(sotropic\) in the direction of the recei)-3.17 F -.15(ve)-.25 G 3.169
+(r\().15 G .669(or the horizon if the recei)-3.169 F -.15(ve)-.25 G
+3.169(ri).15 G 3.169(so)-3.169 G -.15(ve)-3.319 G 3.169(rt).15 G(he)
+-3.169 E(horizon\).)108 228 Q 1.801 -.8(To c)108 252 T .201(ompute ho).8
+F 2.701(wm)-.25 G .202(uch more signal is a)-2.701 F -.25(va)-.2 G .202
 (ilable o).25 F -.15(ve)-.15 G 2.702(rt).15 G .202
-(he minimum to necessary to achie)-2.702 F .501 -.15(ve a s)-.25 H .201
-(peci\214c signal-).15 F(to-noise ratio:)108 624 Q F2(Signal)108.33 648
-Q F0(_).51 E F2(Margin).68 E F4(=)3.04 E F2(SNR)3.13 E F4(-)2.47 E F2(S)
-2.53 E F0(where)108 672 Q F3(S)2.5 E F0
+(he minimum to necessary to achie)-2.702 F .502 -.15(ve a s)-.25 H .202
+(peci\214c signal-).15 F(to-noise ratio:)108 264 Q F1(Signal)108.33 288
+Q F0(_).51 E F1(Margin).68 E F2(=)3.04 E F1(SNR)3.13 E F2(-)2.47 E F1(S)
+2.53 E F0(where)108 312 Q F3(S)2.5 E F0
 (is the minimum desired SNR ratio \(15.5 dB for A)2.5 E(TSC DTV)-1.11 E
 2.5(,4)-1.29 G 2.5(2d)-2.5 G 2.5(Bf)-2.5 G(or analog NTSC tele)-2.5 E
-(vision\).)-.25 E 2.61(At)108 696 S .11
-(opographic map may be generated by)-2.61 F F3(SPLA)2.611 E(T!)-.95 E F0
-.111(to visualize the path between the transmitter and recei)2.611 F
--.15(ve)-.25 G(r).15 E .099(sites from yet another perspecti)108 708 R
--.15(ve)-.25 G 5.099(.T).15 G .099(opographic maps generated by)-5.899 F
-F3(SPLA)2.598 E(T!)-.95 E F0 .098(display ele)2.598 F -.25(va)-.25 G
-.098(tions using a log-).25 F .335(arithmic grayscale, with higher ele)
-108 720 R -.25(va)-.25 G .335
-(tions represented through brighter shades of gray).25 F 5.336(.T)-.65 G
-.336(he dynamic range)-5.336 F(KD2BD Softw)72 768 Q 126.62(are 20)-.1 F
-(January 2004)2.5 E(5)195.95 E EP
-%%Page: 6 6
-%%BeginPageSetup
-BP
-%%EndPageSetup
-/F0 10/Times-Roman@0 SF(SPLA)72 48 Q 151.145(T!\(1\) KD2BD)-1.11 F
-(Softw)2.5 E 151.145(are SPLA)-.1 F(T!\(1\))-1.11 E .257
-(of the image is scaled between the highest and lo)108 84 R .257
+(vision\).)-.25 E 2.611(At)108 336 S .111
+(opographic map may be generated by)-2.611 F F3(SPLA)2.611 E(T!)-.95 E
+F0 .11(to visualize the path between the transmitter and recei)2.611 F
+-.15(ve)-.25 G(r).15 E .098(sites from yet another perspecti)108 348 R
+-.15(ve)-.25 G 5.098(.T).15 G .099(opographic maps generated by)-5.898 F
+F3(SPLA)2.599 E(T!)-.95 E F0 .099(display ele)2.599 F -.25(va)-.25 G
+.099(tions using a log-).25 F .336(arithmic grayscale, with higher ele)
+108 360 R -.25(va)-.25 G .335
+(tions represented through brighter shades of gray).25 F 5.335(.T)-.65 G
+.335(he dynamic range)-5.335 F .257
+(of the image is scaled between the highest and lo)108 372 R .257
 (west ele)-.25 F -.25(va)-.25 G .257(tions present in the map.).25 F
-.257(The only e)5.257 F .257(xception to)-.15 F(this is sea-le)108 96 Q
--.15(ve)-.25 G(l, which is represented in blue.).15 E/F1 10/Times-Bold@0
-SF(SPLA)108 120 Q(T!)-.95 E F0 1.241
-(generated topographic maps are 24-bit T)3.74 F 1.241
-(rueColor Portable PixMap \(PPM\) images, and may be)-.35 F(vie)108 132
-Q 1.06(wed, edited, or con)-.25 F -.15(ve)-.4 G 1.06
-(rted to other graphic formats by popular image vie).15 F 1.06
-(wing applications such as)-.25 F F1(xv)3.56 E F0(,)A F1 1.66(The GIMP)
-108 144 R F0(,)A F1(ImageMagick)4.16 E F0 4.16(,a)C(nd)-4.16 E F1(XP)
-4.16 E(aint)-.1 E F0 6.66(.P)C 1.66
-(NG format is highly recommended for lossless compressed)-6.66 F .372
-(storage of)108 156 R F1(SPLA)2.872 E(T!)-.95 E F0 .372
-(generated topographic output \214les.)5.372 F .371(An e)5.372 F .371
-(xcellent command-line utility capable of con-)-.15 F -.15(ve)108 168 S
-(rting).15 E F1(SPLA)12.216 E(T!)-.95 E F0 9.717
-(PPM graphic \214les to PNG \214les is)12.217 F F1(wpng)12.217 E F0
-12.217(,a)C 9.717(nd is a)-12.217 F -.25(va)-.2 G 9.717(ilable at:).25 F
-/F2 10/Times-Italic@0 SF(http://www)108 180 Q(.libpng)-.74 E(.or)-.15 E
-(g/pub/png/book/sour)-.37 E(ces.html)-.37 E F0 5.153(.A)C 2.653(sal)
--5.153 G .153(ast resort, PPM \214les may be compressed using the)-2.653
-F .661(bzip2 utility)108 192 R 3.161(,a)-.65 G .661(nd read directly by)
--3.161 F F1 .662(The GIMP)3.162 F F0 .662(in this format.)3.162 F -.8
-(To)5.662 G .662(pographic output is speci\214ed using the).8 F F2(-o)
-3.162 E F0(switch:)108 204 Q/F3 10/Courier@0 SF
-(splat -t tx_site -r rx_site -o topo_map.ppm)108 228 Q F0(The)108 252 Q
-F2(.ppm)2.5 E F0 -.15(ex)2.5 G
-(tension on the output \214lename is assumed by).15 E F1(SPLA)2.5 E(T!)
--.95 E F0 2.5(,a)C(nd is optional.)-2.5 E .007(In this e)108 276 R
-(xample,)-.15 E F2(topo_map.ppm)2.507 E F0 .007
-(will illustrate the locations of the transmitter and recei)2.507 F -.15
-(ve)-.25 G 2.506(rs).15 G .006(ites speci\214ed.)-2.506 F(In)5.006 E .22
-(addition, the great circle path between the tw)108 288 R 2.72(os)-.1 G
+.258(The only e)5.258 F .258(xception to)-.15 F(this is sea-le)108 384 Q
+-.15(ve)-.25 G(l, which is represented using the color blue.).15 E F3
+(SPLA)108 408 Q(T!)-.95 E F0 .59
+(generated topographic maps are 24-bit T)3.09 F .59
+(rueColor Portable PixMap \(PPM\) images.)-.35 F(The)5.59 E 3.09(ym)-.15
+G .59(ay be)-3.09 F(vie)108 420 Q 1.06(wed, edited, or con)-.25 F -.15
+(ve)-.4 G 1.06(rted to other graphic formats by popular image vie).15 F
+1.06(wing applications such as)-.25 F F3(xv)3.56 E F0(,)A F3 1.66
+(The GIMP)108 432 R F0(,)A F3(ImageMagick)4.16 E F0 4.16(,a)C(nd)-4.16 E
+F3(XP)4.16 E(aint)-.1 E F0 6.66(.P)C 1.66
+(NG format is highly recommended for lossless compressed)-6.66 F .371
+(storage of)108 444 R F3(SPLA)2.871 E(T!)-.95 E F0 .371
+(generated topographic output \214les.)5.371 F .372(An e)5.372 F .372
+(xcellent command-line utility capable of con-)-.15 F -.15(ve)108 456 S
+(rting).15 E F3(SPLA)12.217 E(T!)-.95 E F0 9.717
+(PPM graphic \214les to PNG \214les is)12.217 F F3(wpng)12.217 E F0
+12.217(,a)C 9.717(nd is a)-12.217 F -.25(va)-.2 G 9.716(ilable at:).25 F
+F1(http://www)108 468 Q(.libpng)-.74 E(.or)-.15 E(g/pub/png/book/sour)
+-.37 E(ces.html)-.37 E F0 5.152(.A)C 2.652(sal)-5.152 G .153
+(ast resort, PPM \214les may be compressed using the)-2.652 F .662
+(bzip2 utility)108 480 R 3.162(,a)-.65 G .662(nd read directly by)-3.162
+F F3 .662(The GIMP)3.162 F F0 .662(in this format.)3.162 F -.8(To)5.662
+G .661(pographic output is speci\214ed using the).8 F F1(-o)3.161 E F0
+(switch:)108 492 Q/F4 10/Courier@0 SF
+(splat -t tx_site -r rx_site -o topo_map.ppm)108 516 Q F0(The)108 540 Q
+F1(.ppm)2.5 E F0 -.15(ex)2.5 G
+(tension on the output \214lename is assumed by).15 E F3(SPLA)2.5 E(T!)
+-.95 E F0 2.5(,a)C(nd is optional.)-2.5 E .006(In this e)108 564 R
+(xample,)-.15 E F1(topo_map.ppm)2.506 E F0 .007
+(will illustrate the locations of the transmitter and recei)2.506 F -.15
+(ve)-.25 G 2.507(rs).15 G .007(ites speci\214ed.)-2.507 F(In)5.007 E .22
+(addition, the great circle path between the tw)108 576 R 2.72(os)-.1 G
 .22(ites will be dra)-2.72 F .22(wn o)-.15 F -.15(ve)-.15 G 2.72(rl).15
-G .22(ocations for which an unobstructed)-2.72 F 1.209(path e)108 300 R
+G .22(ocations for which an unobstructed)-2.72 F 1.208(path e)108 588 R
 1.209(xists to the transmitter at a recei)-.15 F 1.209
 (ving antenna height equal to that of the recei)-.25 F -.15(ve)-.25 G
-3.709(rs).15 G 1.208(ite \(speci\214ed in)-3.709 F F2(rx_site)108 312 Q
+3.709(rs).15 G 1.209(ite \(speci\214ed in)-3.709 F F1(rx_site)108 600 Q
 (.qth)-.15 E F0(\).)A .773(It may desirable to populate the topographic\
- map with names and locations of cities, to)108 336 R .773
-(wer sites, or other)-.25 F(important locations.)108 348 Q 2.5(Ac)5 G
-(ity \214le may be passed to)-2.5 E F1(SPLA)2.5 E(T!)-.95 E F0
-(using the)2.5 E F2(-s)2.5 E F0(switch:)2.5 E F3
-(splat -t tx_site -r rx_site -s cities.dat -o topo_map)108 372 Q F0
-(Up to \214v)108 396 Q 2.5(es)-.15 G
-(eparate city \214les may be passed to)-2.5 E F1(SPLA)2.5 E(T!)-.95 E F0
-(at a time follo)2.5 E(wing the)-.25 E F2(-s)2.5 E F0(switch.)2.5 E .555
+ map with names and locations of cities, to)108 624 R .773
+(wer sites, or other)-.25 F(important locations.)108 636 Q 2.5(Ac)5 G
+(ity \214le may be passed to)-2.5 E F3(SPLA)2.5 E(T!)-.95 E F0
+(using the)2.5 E F1(-s)2.5 E F0(switch:)2.5 E F4
+(splat -t tx_site -r rx_site -s cities.dat -o topo_map)108 660 Q F0
+(Up to \214v)108 684 Q 2.5(es)-.15 G
+(eparate city \214les may be passed to)-2.5 E F3(SPLA)2.5 E(T!)-.95 E F0
+(at a time follo)2.5 E(wing the)-.25 E F1(-s)2.5 E F0(switch.)2.5 E .554
 (County and state boundaries may be added to the map by specifying up t\
-o \214v)108 420 R 3.054(eU)-.15 G .554(.S. Census Bureau carto-)-3.054 F
-(graphic boundary \214les using the)108 432 Q F2(-b)2.5 E F0(switch:)2.5
-E F3(splat -t tx_site -r rx_site -b co34_d00.dat -o topo_map)108 456 Q
-F0 1.063
-(In situations where multiple transmitter sites are in use, as man)108
-480 R 3.563(ya)-.15 G 3.563(sf)-3.563 G 1.064
-(our site locations may be passed to)-3.563 F F1(SPLA)108 492 Q(T!)-.95
-E F0(at a time for analysis:)2.5 E F3
+o \214v)108 708 R 3.055(eU)-.15 G .555(.S. Census Bureau carto-)-3.055 F
+(graphic boundary \214les using the)108 720 Q F1(-b)2.5 E F0(switch:)2.5
+E(KD2BD Softw)72 768 Q 129.12(are 02)-.1 F(March 2006)2.5 E(6)198.45 E
+EP
+%%Page: 7 7
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF(SPLA)72 48 Q 151.145(T!\(1\) KD2BD)-1.11 F
+(Softw)2.5 E 151.145(are SPLA)-.1 F(T!\(1\))-1.11 E/F1 10/Courier@0 SF
+(splat -t tx_site -r rx_site -b co34_d00.dat -o topo_map)108 84 Q F0
+1.064(In situations where multiple transmitter sites are in use, as man)
+108 108 R 3.563(ya)-.15 G 3.563(sf)-3.563 G 1.063
+(our site locations may be passed to)-3.563 F/F2 10/Times-Bold@0 SF
+(SPLA)108 120 Q(T!)-.95 E F0(at a time for analysis:)2.5 E F1
 (splat -t tx_site1 tx_site2 tx_site3 tx_site4 -r rx_site -p profile.gif)
-108 516 Q F0 .285(In this e)108 540 R .285(xample, four separate terrai\
-n pro\214les and obstruction reports will be generated by)-.15 F F1
-(SPLA)2.785 E(T!)-.95 E F0 5.285(.A)C(sin-)-2.5 E .508
-(gle topographic map can be speci\214ed using the)108 552 R F2(-o)3.009
-E F0 .509(switch, and line-of-sight paths between each transmitter)3.009
-F .817(and the recei)108 564 R -.15(ve)-.25 G 3.317(rs).15 G .816
-(ite indicated will be produced on the map, each in its o)-3.317 F .816
-(wn color)-.25 F 5.816(.T)-.55 G .816(he path between the)-5.816 F .766
-(\214rst transmitter speci\214ed to the recei)108 576 R -.15(ve)-.25 G
-3.266(rw).15 G .767
-(ill be in green, the path between the second transmitter and the)-3.266
-F(recei)108 588 Q -.15(ve)-.25 G 3.464(rw).15 G .964(ill be in c)-3.464
+108 144 Q F0 .285(In this e)108 168 R .285(xample, four separate terrai\
+n pro\214les and obstruction reports will be generated by)-.15 F F2
+(SPLA)2.785 E(T!)-.95 E F0 5.285(.A)C(sin-)-2.5 E .509
+(gle topographic map can be speci\214ed using the)108 180 R/F3 10
+/Times-Italic@0 SF(-o)3.009 E F0 .508
+(switch, and line-of-sight paths between each transmitter)3.009 F .816
+(and the recei)108 192 R -.15(ve)-.25 G 3.316(rs).15 G .816
+(ite indicated will be produced on the map, each in its o)-3.316 F .817
+(wn color)-.25 F 5.817(.T)-.55 G .817(he path between the)-5.817 F .767
+(\214rst transmitter speci\214ed to the recei)108 204 R -.15(ve)-.25 G
+3.267(rw).15 G .766
+(ill be in green, the path between the second transmitter and the)-3.267
+F(recei)108 216 Q -.15(ve)-.25 G 3.463(rw).15 G .963(ill be in c)-3.463
 F .964(yan, the path between the third transmitter and the recei)-.15 F
--.15(ve)-.25 G 3.463(rw).15 G .963(ill be in violet, and the)-3.463 F
-(path between the fourth transmitter and the recei)108 600 Q -.15(ve)
+-.15(ve)-.25 G 3.464(rw).15 G .964(ill be in violet, and the)-3.464 F
+(path between the fourth transmitter and the recei)108 228 Q -.15(ve)
 -.25 G 2.5(rw).15 G(ill be in sienna.)-2.5 E/F4 10.95/Times-Bold@0 SF
-(DETERMINING REGION)72 616.8 Q(AL CO)-.219 E(VERA)-.548 E(GE)-.602 E F1
-(SPLA)108 628.8 Q(T!)-.95 E F0 .098
-(can analyze a transmitter or repeater site, or netw)2.598 F .098
-(ork of sites, and predict the re)-.1 F .099(gional co)-.15 F -.15(ve)
--.15 G .099(rage for).15 F .683(each site speci\214ed.)108 640.8 R .683
-(In this mode,)5.683 F F1(SPLA)3.183 E(T!)-.95 E F0 .682
+(DETERMINING REGION)72 244.8 Q(AL CO)-.219 E(VERA)-.548 E(GE)-.602 E F2
+(SPLA)108 256.8 Q(T!)-.95 E F0 .098
+(can analyze a transmitter or repeater site, or netw)2.599 F .098
+(ork of sites, and predict the re)-.1 F .098(gional co)-.15 F -.15(ve)
+-.15 G .098(rage for).15 F .682(each site speci\214ed.)108 268.8 R .682
+(In this mode,)5.682 F F2(SPLA)3.183 E(T!)-.95 E F0 .683
 (can generate a topographic map displaying the geometric line-)3.183 F
-.031(of-sight co)108 652.8 R -.15(ve)-.15 G .031(rage area of the sites\
- based on the location of each site, and the height of recei).15 F .331
--.15(ve a)-.25 H .032(ntenna wish-).15 F .439
-(ing to communicate with the site in question.)108 664.8 R F1(SPLA)5.439
-E(T!)-.95 E F0 .438(switches from point-to-point analysis mode to area)
-2.939 F(prediction mode when the)108 676.8 Q F2(-c)2.5 E F0
+.163(of-sight co)108 280.8 R -.15(ve)-.15 G .163(rage area of the sites\
+ based on the location of each site and the height of recei).15 F .462
+-.15(ve a)-.25 H .162(ntenna wish-).15 F .438
+(ing to communicate with the site in question.)108 292.8 R F2(SPLA)5.439
+E(T!)-.95 E F0 .439(switches from point-to-point analysis mode to area)
+2.939 F(prediction mode when the)108 304.8 Q F3(-c)2.5 E F0
 (switch is in)2.5 E -.2(vo)-.4 G -.1(ke).2 G 2.5(da).1 G 2.5(sf)-2.5 G
-(ollo)-2.5 E(ws:)-.25 E F3
+(ollo)-2.5 E(ws:)-.25 E F1
 (splat -t tx_site -c 30.0 -s cities.dat -b co34_d00.dat -o tx_coverage)
-108 700.8 Q F0 .269(In this e)108 724.8 R(xample,)-.15 E F1(SPLA)2.769 E
-(T!)-.95 E F0 .269(generates a topographic map called)2.769 F F2(tx_co)
-2.769 E(ver)-.1 E -.1(age)-.15 G(.ppm)-.05 E F0 .27
-(that illustrates the predicted)2.769 F(KD2BD Softw)72 768 Q 126.62
-(are 20)-.1 F(January 2004)2.5 E(6)195.95 E EP
-%%Page: 7 7
-%%BeginPageSetup
-BP
-%%EndPageSetup
-/F0 10/Times-Roman@0 SF(SPLA)72 48 Q 151.145(T!\(1\) KD2BD)-1.11 F
-(Softw)2.5 E 151.145(are SPLA)-.1 F(T!\(1\))-1.11 E 1.535
-(line-of-sight re)108 84 R 1.535(gional co)-.15 F -.15(ve)-.15 G 1.535
-(rage of).15 F/F1 10/Times-Italic@0 SF(tx_site)4.035 E F0 1.535
-(to recei)4.035 F 1.535(ving locations ha)-.25 F 1.534
-(ving antennas 30.0 feet abo)-.2 F 1.834 -.15(ve g)-.15 H(round).15 E
-(le)108 96 Q -.15(ve)-.25 G 2.507(l\().15 G -.4(AG)-2.507 G 2.507
-(L\). The).4 F .007(contents of)2.507 F F1(cities.dat)2.507 E F0 .008
+108 328.8 Q F0 .27(In this e)108 352.8 R(xample,)-.15 E F2(SPLA)2.77 E
+(T!)-.95 E F0 .269(generates a topographic map called)2.769 F F3(tx_co)
+2.769 E(ver)-.1 E -.1(age)-.15 G(.ppm)-.05 E F0 .269
+(that illustrates the predicted)2.769 F 1.534(line-of-sight re)108 364.8
+R 1.534(gional co)-.15 F -.15(ve)-.15 G 1.534(rage of).15 F F3(tx_site)
+4.034 E F0 1.535(to recei)4.034 F 1.535(ving locations ha)-.25 F 1.535
+(ving antennas 30.0 feet abo)-.2 F 1.835 -.15(ve g)-.15 H(round).15 E
+(le)108 376.8 Q -.15(ve)-.25 G 2.508(l\().15 G -.4(AG)-2.508 G 2.508
+(L\). The).4 F .008(contents of)2.508 F F3(cities.dat)2.508 E F0 .007
 (are plotted on the map, as are the cartographic boundaries contained)
-2.507 F(in the \214le)108 108 Q F1(co34_d00.dat)2.5 E F0(.)A .572
-(When plotting line-of-sight paths and areas of re)108 132 R .572
-(gional co)-.15 F -.15(ve)-.15 G(rage,).15 E/F2 10/Times-Bold@0 SF(SPLA)
-3.072 E(T!)-.95 E F0 .572(by def)3.072 F .572(ault does not account for)
--.1 F .031(the ef)108 144 R .032(fects of atmospheric bending.)-.25 F
-(Ho)5.032 E(we)-.25 E -.15(ve)-.25 G .832 -.4(r, t).15 H .032(his beha)
-.4 F .032(vior may be modi\214ed by using the Earth radius mul-)-.2 F
-(tiplier \()108 156 Q F1(-m)A F0 2.5(\)s)C(witch:)-2.5 E/F3 10/Courier@0
-SF(splat -t wnjt -c 30.0 -m 1.333 -s cities.dat -b counties.dat -o map.\
-ppm)108 180 Q F0 .428(An earth radius multiplier)108 204 R .428
-(of 1.333 instructs)5.428 F F2(SPLA)2.928 E(T!)-.95 E F0 .428
-(to use the "four)2.928 F .428(-thirds earth" model for line-of-sight)
--.2 F(propag)108 216 Q(ation analysis.)-.05 E(An)5 E 2.5(ya)-.15 G
+2.508 F(in the \214le)108 388.8 Q F3(co34_d00.dat)2.5 E F0(.)A .572
+(When plotting line-of-sight paths and areas of re)108 412.8 R .572
+(gional co)-.15 F -.15(ve)-.15 G(rage,).15 E F2(SPLA)3.072 E(T!)-.95 E
+F0 .572(by def)3.072 F .572(ault does not account for)-.1 F .032(the ef)
+108 424.8 R .032(fects of atmospheric bending.)-.25 F(Ho)5.032 E(we)-.25
+E -.15(ve)-.25 G .832 -.4(r, t).15 H .032(his beha).4 F .032
+(vior may be modi\214ed by using the Earth radius mul-)-.2 F(tiplier \()
+108 436.8 Q F3(-m)A F0 2.5(\)s)C(witch:)-2.5 E F1(splat -t wnjt -c 30.0\
+ -m 1.333 -s cities.dat -b counties.dat -o map.ppm)108 460.8 Q F0 .594
+(An earth radius multiplier of 1.333 instructs)108 484.8 R F2(SPLA)3.095
+E(T!)-.95 E F0 .595(to use the "four)3.095 F .595
+(-thirds earth" model for line-of-sight)-.2 F(propag)108 496.8 Q
+(ation analysis.)-.05 E(An)5 E 2.5(ya)-.15 G
 (ppropriate earth radius multiplier may be selected by the user)-2.5 E
-(.)-.55 E .201(When in)108 240 R -.2(vo)-.4 G -.1(ke).2 G 2.701(di).1 G
-2.701(na)-2.701 G .201(rea prediction mode,)-2.701 F F2(SPLA)2.701 E(T!)
--.95 E F0 .202(generates a site report for each station analyzed.)2.701
-F F2(SPLA)5.202 E(T!)-.95 E F0 .659
-(site reports contain details of the site')108 252 R 3.159(sg)-.55 G
+(.)-.55 E .202(When in)108 520.8 R -.2(vo)-.4 G -.1(ke).2 G 2.702(di).1
+G 2.702(na)-2.702 G .202(rea prediction mode,)-2.702 F F2(SPLA)2.701 E
+(T!)-.95 E F0 .201(generates a site report for each station analyzed.)
+2.701 F F2(SPLA)5.201 E(T!)-.95 E F0 .658
+(site reports contain details of the site')108 532.8 R 3.159(sg)-.55 G
 .659(eographic location, its height abo)-3.159 F .959 -.15(ve m)-.15 H
-.658(ean sea le).15 F -.15(ve)-.25 G .658(l, the antenna').15 F(s)-.55 E
-.612(height abo)108 264 R .912 -.15(ve m)-.15 H .612(ean sea le).15 F
--.15(ve)-.25 G .612(l, the antenna').15 F 3.112(sh)-.55 G .612
-(eight abo)-3.112 F .912 -.15(ve a)-.15 H -.15(ve)-.05 G .613
-(rage terrain, and the height of the a).15 F -.15(ve)-.2 G .613
+.659(ean sea le).15 F -.15(ve)-.25 G .659(l, the antenna').15 F(s)-.55 E
+.613(height abo)108 544.8 R .913 -.15(ve m)-.15 H .613(ean sea le).15 F
+-.15(ve)-.25 G .613(l, the antenna').15 F 3.112(sh)-.55 G .612
+(eight abo)-3.112 F .912 -.15(ve a)-.15 H -.15(ve)-.05 G .612
+(rage terrain, and the height of the a).15 F -.15(ve)-.2 G .612
 (rage ter).15 F(-)-.2 E(rain calculated in the directions of 0, 45, 90,\
- 135, 180, 225, 270, and 315 de)108 276 Q(grees azimuth.)-.15 E .345
-(If the)108 300 R F1(-c)2.845 E F0 .345(switch is replaced by a)2.845 F
-F1(-L)2.844 E F0 .344(switch, a Longle)2.844 F .344
+ 135, 180, 225, 270, and 315 de)108 556.8 Q(grees azimuth.)-.15 E .344
+(If the)108 580.8 R F3(-c)2.844 E F0 .344(switch is replaced by a)2.844
+F F3(-L)2.844 E F0 .344(switch, a Longle)2.844 F .345
 (y-Rice path loss map for a transmitter site may be gen-)-.15 F(erated:)
-108 312 Q F3(splat -t tx_site -L 30.0 -s cities.dat -b co34_d00.dat -o \
-path_loss_map)108 336 Q F0 .977(In this mode,)108 360 R F2(SPLA)3.477 E
-(T!)-.95 E F0 .977(generates a multi-color map illustrating e)3.477 F
-.977(xpected signal le)-.15 F -.15(ve)-.25 G .978
-(ls \(path loss\) in areas).15 F .997(surrounding the transmitter site.)
-108 372 R 3.497(Al)5.997 G -.15(eg)-3.497 G .996
+108 592.8 Q F1
+(splat -t wnjt -L 30.0 -s cities.dat -b co34_d00.dat -o path_loss_map)
+108 616.8 Q F0 .978(In this mode,)108 640.8 R F2(SPLA)3.478 E(T!)-.95 E
+F0 .977(generates a multi-color map illustrating e)3.478 F .977
+(xpected signal le)-.15 F -.15(ve)-.25 G .977(ls \(path loss\) in areas)
+.15 F .996(surrounding the transmitter site.)108 652.8 R 3.496(Al)5.996
+G -.15(eg)-3.496 G .997
 (end at the bottom of the map correlates each color with a speci\214c)
-.15 F .163(path loss le)108 384 R -.15(ve)-.25 G 2.663(li).15 G 2.663
-(nd)-2.663 G 2.663(ecibels. Since)-2.663 F(Longle)2.663 E .163
-(y-Rice area prediction map generation is quite CPU intensi)-.15 F -.15
-(ve)-.25 G 2.664(,p).15 G(ro-)-2.664 E .014
-(vision for limiting the analysis range is pro)108 396 R .014
-(vided by the)-.15 F F1(-R)2.514 E F0 2.514(switch. The)2.514 F(ar)2.514
-E .013(gument must be gi)-.18 F -.15(ve)-.25 G 2.513(ni).15 G 2.513(nm)
--2.513 G 2.513(iles. If)-2.513 F 3.58(ar)108 408 S 1.08
+.15 F .322(path loss le)108 664.8 R -.15(ve)-.25 G 2.822(li).15 G 2.822
+(nd)-2.822 G 2.822(ecibels. Since)-2.822 F(Longle)2.822 E .322
+(y-Rice area prediction map generation is v)-.15 F .322(ery CPU intensi)
+-.15 F -.15(ve)-.25 G 2.822(,p).15 G(ro-)-2.822 E .013
+(vision for limiting the analysis range is pro)108 676.8 R .014
+(vided by the)-.15 F F3(-R)2.514 E F0 2.514(switch. The)2.514 F(ar)2.514
+E .014(gument must be gi)-.18 F -.15(ve)-.25 G 2.514(ni).15 G 2.514(nm)
+-2.514 G 2.514(iles. If)-2.514 F 3.58(ar)108 688.8 S 1.08
 (ange wider than the generated topographic map is speci\214ed,)-3.58 F
 F2(SPLA)3.58 E(T!)-.95 E F0 1.08(will perform Longle)3.58 F 1.08
 (y-Rice path)-.15 F
 (loss calculations between all four corners of the area prediction map.)
-108 420 Q/F4 10.95/Times-Bold@0 SF(DETERMINING MUL)72 436.8 Q
-(TIPLE REGIONS OF CO)-1.007 E(VERA)-.548 E(GE)-.602 E F2(SPLA)108 448.8
-Q(T!)-.95 E F0 1.087(can also display line-of-sight co)3.587 F -.15(ve)
--.15 G 1.086(rage areas for as man).15 F 3.586(ya)-.15 G 3.586(sf)-3.586
-G 1.086(our separate transmitter sites on a)-3.586 F
-(common topographic map.)108 460.8 Q -.15(Fo)5 G 2.5(re).15 G(xample:)
--2.65 E F3(splat -t site1 site2 site3 site4 -c 30.0 -o network.ppm)108
-484.8 Q F0 .686(plots the re)108 508.8 R .687(gional line-of-sight co)
--.15 F -.15(ve)-.15 G .687
-(rage of site1, site2, site3, and site4 based on a recei).15 F .987 -.15
-(ve a)-.25 H .687(ntenna located).15 F .277(30.0 feet abo)108 520.8 R
-.577 -.15(ve g)-.15 H .277(round le).15 F -.15(ve)-.25 G 2.776(l. A).15
-F .276(topographic map is then written to the \214le)2.776 F F1
-(network.ppm)2.776 E F0 5.276(.T)C .276(he line-of-sight)-5.276 F(co)108
-532.8 Q -.15(ve)-.15 G .2
-(rage area of the transmitters are plotted as follo).15 F .2
-(ws in the colors indicated \(along with their correspond-)-.25 F
-(ing RGB v)108 544.8 Q(alues in decimal\):)-.25 E F3
-(site1: Green \(0,255,0\))132 568.8 Q(site2: Cyan \(0,255,255\))132
-580.8 Q(site3: Medium Violet \(147,112,219\))132 592.8 Q
-(site4: Sienna 1 \(255,130,71\))132 604.8 Q
-(site1 + site2: Yellow \(255,255,0\))132 628.8 Q
-(site1 + site3: Pink \(255,192,203\))132 640.8 Q
-(site1 + site4: Green Yellow \(173,255,47\))132 652.8 Q
-(site2 + site3: Orange \(255,165,0\))132 664.8 Q
-(site2 + site4: Dark Sea Green 1 \(193,255,193\))132 676.8 Q
-(site3 + site4: Dark Turquoise \(0,206,209\))132 688.8 Q
-(site1 + site2 + site3: Dark Green \(0,100,0\))132 712.8 Q
-(site1 + site2 + site4: Blanched Almond \(255,235,205\))132 724.8 Q F0
-(KD2BD Softw)72 768 Q 126.62(are 20)-.1 F(January 2004)2.5 E(7)195.95 E
-EP
+108 700.8 Q(The)108 724.8 Q F3(-db)3.344 E F0 .844(switch allo)3.344 F
+.845(ws a constraint to be placed on the maximum path loss re)-.25 F
+.845(gion plotted on the map.)-.15 F(A)5.845 E(KD2BD Softw)72 768 Q
+129.12(are 02)-.1 F(March 2006)2.5 E(7)198.45 E EP
 %%Page: 8 8
 %%BeginPageSetup
 BP
 %%EndPageSetup
 /F0 10/Times-Roman@0 SF(SPLA)72 48 Q 151.145(T!\(1\) KD2BD)-1.11 F
-(Softw)2.5 E 151.145(are SPLA)-.1 F(T!\(1\))-1.11 E/F1 10/Courier@0 SF
-(site1 + site3 + site4: Medium Spring Green \(0,250,154\))132 84 Q
-(site2 + site3 + site4: Tan \(210,180,140\))132 96 Q
-(site1 + site2 + site3 + site4: Gold2 \(238,201,0\))132 120 Q F0 .247
-(If separate)108 144 R/F2 10/Times-Italic@0 SF(.qth)2.747 E F0 .247
+(Softw)2.5 E 151.145(are SPLA)-.1 F(T!\(1\))-1.11 E .803
+(path loss between 80 and 230 dB may be speci\214ed using this switch.)
+108 84 R -.15(Fo)5.803 G 3.303(re).15 G .803(xample, if a path loss be)
+-3.453 F(yond)-.15 E 1.399(-140 dB is irrele)108 96 R -.25(va)-.25 G
+1.399(nt to the surv).25 F 1.699 -.15(ey b)-.15 H 1.399(eing conducted,)
+.15 F/F1 10/Times-Bold@0 SF(SPLA)3.899 E(T!)-.95 E F0 2.499 -.55('s p)D
+1.4(ath loss plot can be constrained to the).55 F(re)108 108 Q
+(gion bounded by the 140 dB attenuation contour as follo)-.15 E(ws:)-.25
+E/F2 10/Courier@0 SF(splat -t wnjt -L 30.0 -s cities.dat -b co34_d00.da\
+t -db 140 -o plot.ppm)108 132 Q/F3 10.95/Times-Bold@0 SF
+(DETERMINING MUL)72 160.8 Q(TIPLE REGIONS OF CO)-1.007 E(VERA)-.548 E
+(GE)-.602 E F1(SPLA)108 172.8 Q(T!)-.95 E F0 1.087
+(can also display line-of-sight co)3.587 F -.15(ve)-.15 G 1.086
+(rage areas for as man).15 F 3.586(ya)-.15 G 3.586(sf)-3.586 G 1.086
+(our separate transmitter sites on a)-3.586 F(common topographic map.)
+108 184.8 Q -.15(Fo)5 G 2.5(re).15 G(xample:)-2.65 E F2
+(splat -t site1 site2 site3 site4 -c 30.0 -o network.ppm)108 208.8 Q F0
+.686(plots the re)108 232.8 R .687(gional line-of-sight co)-.15 F -.15
+(ve)-.15 G .687(rage of site1, site2, site3, and site4 based on a recei)
+.15 F .987 -.15(ve a)-.25 H .687(ntenna located).15 F .277
+(30.0 feet abo)108 244.8 R .577 -.15(ve g)-.15 H .277(round le).15 F
+-.15(ve)-.25 G 2.776(l. A).15 F .276
+(topographic map is then written to the \214le)2.776 F/F4 10
+/Times-Italic@0 SF(network.ppm)2.776 E F0 5.276(.T)C .276
+(he line-of-sight)-5.276 F(co)108 256.8 Q -.15(ve)-.15 G .2
+(rage area of the transmitters are plotted as follo).15 F .2
+(ws in the colors indicated \(along with their correspond-)-.25 F
+(ing RGB v)108 268.8 Q(alues in decimal\):)-.25 E F2
+(site1: Green \(0,255,0\))132 292.8 Q(site2: Cyan \(0,255,255\))132
+304.8 Q(site3: Medium Violet \(147,112,219\))132 316.8 Q
+(site4: Sienna 1 \(255,130,71\))132 328.8 Q
+(site1 + site2: Yellow \(255,255,0\))132 352.8 Q
+(site1 + site3: Pink \(255,192,203\))132 364.8 Q
+(site1 + site4: Green Yellow \(173,255,47\))132 376.8 Q
+(site2 + site3: Orange \(255,165,0\))132 388.8 Q
+(site2 + site4: Dark Sea Green 1 \(193,255,193\))132 400.8 Q
+(site3 + site4: Dark Turquoise \(0,206,209\))132 412.8 Q
+(site1 + site2 + site3: Dark Green \(0,100,0\))132 436.8 Q
+(site1 + site2 + site4: Blanched Almond \(255,235,205\))132 448.8 Q
+(site1 + site3 + site4: Medium Spring Green \(0,250,154\))132 460.8 Q
+(site2 + site3 + site4: Tan \(210,180,140\))132 472.8 Q
+(site1 + site2 + site3 + site4: Gold2 \(238,201,0\))132 496.8 Q F0 .247
+(If separate)108 520.8 R F4(.qth)2.747 E F0 .247
 (\214les are generated, each representing a common site location b)2.747
 F .247(ut a dif)-.2 F .246(ferent antenna height,)-.25 F 3.535(as)108
-156 S 1.035(ingle topographic map illustrating the re)-3.535 F 1.036
+532.8 S 1.035(ingle topographic map illustrating the re)-3.535 F 1.036
 (gional co)-.15 F -.15(ve)-.15 G 1.036(rage from as man).15 F 3.536(ya)
 -.15 G 3.536(sf)-3.536 G 1.036(our separate locations on a)-3.536 F
-(single to)108 168 Q(wer may be generated by)-.25 E/F3 10/Times-Bold@0
-SF(SPLA)2.5 E(T!)-.95 E F0(.)A/F4 10.95/Times-Bold@0 SF -.197(TO)72
-184.8 S(POGRAPHIC MAP GENERA).197 E(TION)-1.04 E F0 .52(In certain situ\
-ations, it may be desirable to generate a topographic map of a re)108
-196.8 R .519(gion without plotting co)-.15 F -.15(ve)-.15 G -.2(r-).15 G
-1.006
+(single to)108 544.8 Q(wer may be generated by)-.25 E F1(SPLA)2.5 E(T!)
+-.95 E F0(.)A F3 -.197(TO)72 561.6 S(POGRAPHIC MAP GENERA).197 E(TION)
+-1.04 E F0 .52(In certain situations, it may be desirable to generate a\
+ topographic map of a re)108 573.6 R .519(gion without plotting co)-.15
+F -.15(ve)-.15 G -.2(r-).15 G 1.006
 (age areas, line-of-sight paths, or generating obstruction reports.)108
-208.8 R 1.007(There are se)6.007 F -.15(ve)-.25 G 1.007(ral w).15 F
+585.6 R 1.007(There are se)6.007 F -.15(ve)-.25 G 1.007(ral w).15 F
 1.007(ays of doing this.)-.1 F(If)6.007 E .814(one wishes to generate a\
  topographic map illustrating the location of a transmitter and recei)
-108 220.8 R -.15(ve)-.25 G 3.314(rs).15 G .814(ite along)-3.314 F 1.175
-(with a brief te)108 232.8 R 1.176(xt report describing the locations a\
-nd distances between the sites, the)-.15 F F2(-n)3.676 E F0 1.176
-(switch should be)3.676 F(in)108 244.8 Q -.2(vo)-.4 G -.1(ke).2 G 2.5
-(da).1 G 2.5(sf)-2.5 G(ollo)-2.5 E(ws:)-.25 E F1
-(splat -t tx_site -r rx_site -n -o topo_map.ppm)108 268.8 Q F0(If no te)
-108 292.8 Q(xt report is desired, then the)-.15 E F2(-N)2.5 E F0
-(switch is used:)2.5 E F1
-(splat -t tx_site -r rx_site -N -o topo_map.ppm)108 316.8 Q F0 .061
-(If the)108 340.8 R F2(-o)2.561 E F0 .061
+108 597.6 R -.15(ve)-.25 G 3.314(rs).15 G .814(ite along)-3.314 F 1.175
+(with a brief te)108 609.6 R 1.176(xt report describing the locations a\
+nd distances between the sites, the)-.15 F F4(-n)3.676 E F0 1.176
+(switch should be)3.676 F(in)108 621.6 Q -.2(vo)-.4 G -.1(ke).2 G 2.5
+(da).1 G 2.5(sf)-2.5 G(ollo)-2.5 E(ws:)-.25 E F2
+(splat -t tx_site -r rx_site -n -o topo_map.ppm)108 645.6 Q F0(If no te)
+108 669.6 Q(xt report is desired, then the)-.15 E F4(-N)2.5 E F0
+(switch is used:)2.5 E F2
+(splat -t tx_site -r rx_site -N -o topo_map.ppm)108 693.6 Q F0 .061
+(If the)108 717.6 R F4(-o)2.561 E F0 .061
 (switch and output \214lename are omitted when using either the)2.561 F
-F2(-n)2.56 E F0(or)2.56 E F2(-N)2.56 E F0 .06
-(switches, output is written to)2.56 F 2.5<618c>108 352.8 S(le named)
--2.5 E F2(map.ppm)2.5 E F0(in the current w)2.5 E
-(orking directory by def)-.1 E(ault.)-.1 E F4(DETERMIN)72 369.6 Q -1.04
-(AT)-.219 G(ION OF ANTENN)1.04 E 2.738(AH)-.219 G(EIGHT ABO)-2.738 E
-(VE A)-.548 E(VERA)-1.588 E(GE TERRAIN)-.602 E F3(SPLA)108 381.6 Q(T!)
--.95 E F0 .947(determines antenna height abo)3.447 F 1.248 -.15(ve a)
--.15 H -.15(ve)-.05 G .948(rage terrain \(HAA).15 F .948
+F4(-n)2.56 E F0(or)2.56 E F4(-N)2.56 E F0 .06
+(switches, output is written to)2.56 F 2.5<618c>108 729.6 S(le named)
+-2.5 E F4(map.ppm)2.5 E F0(in the current w)2.5 E
+(orking directory by def)-.1 E(ault.)-.1 E(KD2BD Softw)72 768 Q 129.12
+(are 02)-.1 F(March 2006)2.5 E(8)198.45 E EP
+%%Page: 9 9
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF(SPLA)72 48 Q 151.145(T!\(1\) KD2BD)-1.11 F
+(Softw)2.5 E 151.145(are SPLA)-.1 F(T!\(1\))-1.11 E/F1 10.95
+/Times-Bold@0 SF(DETERMIN)72 84 Q -1.04(AT)-.219 G(ION OF ANTENN)1.04 E
+2.738(AH)-.219 G(EIGHT ABO)-2.738 E(VE A)-.548 E(VERA)-1.588 E
+(GE TERRAIN)-.602 E/F2 10/Times-Bold@0 SF(SPLA)108 96 Q(T!)-.95 E F0
+.947(determines antenna height abo)3.447 F 1.248 -.15(ve a)-.15 H -.15
+(ve)-.05 G .948(rage terrain \(HAA).15 F .948
 (T\) according to the procedure de\214ned by)-1.11 F .167
-(Federal Communications Commission P)108 393.6 R .167(art 73.313\(d\).)
+(Federal Communications Commission P)108 108 R .167(art 73.313\(d\).)
 -.15 F .166(According to this de\214nition, terrain ele)5.166 F -.25(va)
 -.25 G .166(tions along).25 F .794(eight radials between 2 and 10 miles\
  \(3 and 16 kilometers\) from the site being analyzed are sampled and)
-108 405.6 R -2.25 -.2(av e)108 417.6 T .614(raged for each 45 de).2 F
-.613(grees of azimuth starting with T)-.15 F .613(rue North.)-.35 F .613
+108 120 R -2.25 -.2(av e)108 132 T .614(raged for each 45 de).2 F .613
+(grees of azimuth starting with T)-.15 F .613(rue North.)-.35 F .613
 (If one or more radials lie entirely o)5.613 F -.15(ve)-.15 G(r).15 E
--.1(wa)108 429.6 S(ter).1 E 2.911(,o)-.4 G 2.911(ro)-2.911 G -.15(ve)
--3.061 G 2.911(rl).15 G .411
+-.1(wa)108 144 S .534(ter or o).1 F -.15(ve)-.15 G 3.034(rl).15 G .535
 (and outside the United States \(areas for which no USGS topograph)
--2.911 F 2.911(yd)-.05 G .412(ata is a)-2.911 F -.25(va)-.2 G .412
+-3.034 F 3.035(yd)-.05 G .535(ata is a)-3.035 F -.25(va)-.2 G .535
 (ilable\), then).25 F .519
-(those radials are omitted from the calculation of a)108 441.6 R -.15
-(ve)-.2 G .519(rage terrain.).15 F .519(If part of a radial e)5.519 F
-.519(xtends o)-.15 F -.15(ve)-.15 G 3.019(rab).15 G .518(ody of)-3.019 F
--.1(wa)108 453.6 S .012(ter or o).1 F -.15(ve)-.15 G 2.512(rl).15 G .012
-(and outside the United States, then only that part of the radial lying\
- o)-2.512 F -.15(ve)-.15 G 2.513(rU).15 G .013(nited States land is)
--2.513 F(used in the determination of a)108 465.6 Q -.15(ve)-.2 G
-(rage terrain.).15 E .162
-(When performing point-to-point terrain analysis,)108 489.6 R F3(SPLA)
-2.662 E(T!)-.95 E F0 .162(determines the antenna height abo)2.662 F .461
--.15(ve a)-.15 H -.15(ve)-.05 G .161(rage ter).15 F(-)-.2 E .407(rain o\
-nly if enough topographic data has already been loaded by the program t\
-o perform the point-to-point)108 501.6 R 3.712(analysis. In)108 513.6 R
-1.211(most cases, this will be true, unless the site in question does n\
-ot lie within 10 miles of the)3.712 F(boundary of the topograph)108
-525.6 Q 2.5(yd)-.05 G(ata in memory)-2.5 E(.)-.65 E .491
-(When performing area prediction analysis, enough topograph)108 549.6 R
-2.991(yd)-.05 G .492(ata is normally loaded by)-2.991 F F3(SPLA)2.992 E
-(T!)-.95 E F0 .492(to per)2.992 F(-)-.2 E .807(form a)108 561.6 R -.15
-(ve)-.2 G .807(rage terrain calculations.).15 F .807
-(Under such conditions,)5.807 F F3(SPLA)3.307 E(T!)-.95 E F0 .807
-(will pro)3.307 F .807(vide the antenna height abo)-.15 F -.15(ve)-.15 G
--2.25 -.2(av e)108 573.6 T .203(rage terrain as well as the a).2 F -.15
-(ve)-.2 G .203(rage terrain abo).15 F .503 -.15(ve m)-.15 H .203
-(ean sea le).15 F -.15(ve)-.25 G 2.704(lf).15 G .204
-(or azimuths of 0, 45, 90, 135, 180, 225,)-2.704 F .162(270, and 315 de)
-108 585.6 R .162
+(those radials are omitted from the calculation of a)108 156 R -.15(ve)
+-.2 G .519(rage terrain.).15 F .519(If part of a radial e)5.519 F .519
+(xtends o)-.15 F -.15(ve)-.15 G 3.019(rab).15 G .518(ody of)-3.019 F -.1
+(wa)108 168 S .012(ter or o).1 F -.15(ve)-.15 G 2.512(rl).15 G .012(and\
+ outside the United States, then only that part of the radial lying o)
+-2.512 F -.15(ve)-.15 G 2.513(rU).15 G .013(nited States land is)-2.513
+F(used in the determination of a)108 180 Q -.15(ve)-.2 G(rage terrain.)
+.15 E .918(Note that SR)108 204 R .918(TM ele)-.6 F -.25(va)-.25 G .918
+(tion data, unlik).25 F 3.418(eo)-.1 G .917
+(lder 3-arc second USGS data, e)-3.418 F .917(xtends be)-.15 F .917
+(yond the borders of the)-.15 F .866(United States.)108 216 R .867
+(Therefore, HAA)5.866 F 3.367(Tr)-1.11 G .867
+(esults may not be in full compliance with FCC P)-3.367 F .867
+(art 73.313\(d\) in areas)-.15 F
+(along the borders of the United States if the SDF \214les used by)108
+228 Q F2(SPLA)2.5 E(T!)-.95 E F0(are SR)2.5 E(TM-deri)-.6 E -.15(ve)-.25
+G(d.).15 E .162(When performing point-to-point terrain analysis,)108 252
+R F2(SPLA)2.662 E(T!)-.95 E F0 .162(determines the antenna height abo)
+2.662 F .461 -.15(ve a)-.15 H -.15(ve)-.05 G .161(rage ter).15 F(-)-.2 E
+.407(rain only if enough topographic data has already been loaded by th\
+e program to perform the point-to-point)108 264 R 3.712(analysis. In)108
+276 R 1.211(most cases, this will be true, unless the site in question \
+does not lie within 10 miles of the)3.712 F(boundary of the topograph)
+108 288 Q 2.5(yd)-.05 G(ata in memory)-2.5 E(.)-.65 E .491
+(When performing area prediction analysis, enough topograph)108 312 R
+2.991(yd)-.05 G .492(ata is normally loaded by)-2.991 F F2(SPLA)2.992 E
+(T!)-.95 E F0 .492(to per)2.992 F(-)-.2 E .807(form a)108 324 R -.15(ve)
+-.2 G .807(rage terrain calculations.).15 F .807(Under such conditions,)
+5.807 F F2(SPLA)3.307 E(T!)-.95 E F0 .807(will pro)3.307 F .807
+(vide the antenna height abo)-.15 F -.15(ve)-.15 G -2.25 -.2(av e)108
+336 T .203(rage terrain as well as the a).2 F -.15(ve)-.2 G .203
+(rage terrain abo).15 F .503 -.15(ve m)-.15 H .203(ean sea le).15 F -.15
+(ve)-.25 G 2.704(lf).15 G .204(or azimuths of 0, 45, 90, 135, 180, 225,)
+-2.704 F .162(270, and 315 de)108 348 R .162
 (grees, and include such information in the site report generated.)-.15
-F .161(If one or more of the eight)5.161 F 1.259(radials surv)108 597.6
-R -.15(ey)-.15 G 1.259(ed f).15 F 1.259(all o)-.1 F -.15(ve)-.15 G 3.759
-(rw).15 G 1.259(ater or land outside the United States,)-3.859 F F3
-(SPLA)3.76 E(T!)-.95 E F0(reports)3.76 E F2 1.26(No T)3.76 F(err)-.92 E
-(ain)-.15 E F0 1.26(for those)3.76 F(radial paths.)108 609.6 Q F4
-(SETTING THE MAXIMUM SIZE OF AN AN)72 626.4 Q(AL)-.219 E(YSIS REGION)
--1.007 E F3(SPLA)108 638.4 Q(T!)-.95 E F0 .971(reads SDF \214les into a\
- series of memory "slots" as required within the structure of the progr\
-am.)3.471 F .508(Each "slot" holds one SDF \214le.)108 650.4 R .508
-(Each SDF \214le represents a one de)5.508 F .508(gree by one de)-.15 F
-.508(gree re)-.15 F .508(gion of terrain.)-.15 F(A)5.508 E F2 1.237
-(#de\214ne MAXSLO)108 662.4 R(TS)-.4 E F0 1.237
-(statement in the \214rst se)3.737 F -.15(ve)-.25 G 1.237(ral lines of)
-.15 F F2(splat.cpp)3.737 E F0 1.236(sets the maximum number of "slots")
-3.737 F -.2(av)108 674.4 S 2.412(ailable for topograph)-.05 F 4.912(yd)
--.05 G 4.912(ata. It)-4.912 F 2.412
-(also sets the maximum size of the topographic maps generated by)4.912 F
-F3(SPLA)108 686.4 Q(T!)-.95 E F0 5.883(.M)C(AXSLO)-5.883 E .883
-(TS is set to 9 by def)-.4 F 3.383(ault. If)-.1 F F3(SPLA)3.382 E(T!)
--.95 E F0 .882(produces a se)3.382 F .882(gmentation f)-.15 F .882
-(ault on start-up with)-.1 F .78(this def)108 698.4 R .78(ault, it is a\
-n indication that not enough RAM and/or virtual memory \(sw)-.1 F .78
-(ap space\) are a)-.1 F -.25(va)-.2 G .78(ilable to).25 F(run)108 710.4
-Q F3(SPLA)3.119 E(T!)-.95 E F0 .618(with this number of MAXSLO)3.119 F
-3.118(TS. In)-.4 F .618(this case, MAXSLO)3.118 F .618
-(TS may be reduced to 4, although)-.4 F .617
-(this will greatly limit the maximum re)108 722.4 R(gion)-.15 E F3(SPLA)
-3.117 E(T!)-.95 E F0 .617(will be able to analyze.)3.117 F .617
-(If 118 me)5.617 F -.05(ga)-.15 G .618(bytes or more of).05 F
-(KD2BD Softw)72 768 Q 126.62(are 20)-.1 F(January 2004)2.5 E(8)195.95 E
-EP
-%%Page: 9 9
-%%BeginPageSetup
-BP
-%%EndPageSetup
-/F0 10/Times-Roman@0 SF(SPLA)72 48 Q 151.145(T!\(1\) KD2BD)-1.11 F
-(Softw)2.5 E 151.145(are SPLA)-.1 F(T!\(1\))-1.11 E 1.004
-(total memory \(sw)108 84 R 1.003(ap space plus RAM\) is a)-.1 F -.25
-(va)-.2 G 1.003(ilable, then MAXSLO).25 F 1.003
-(TS may be increased to 16.)-.4 F 1.003(This will)6.003 F .081
-(permit operation o)108 96 R -.15(ve)-.15 G 2.581(ra4).15 G(-de)-2.581 E
-.081(gree by 4-de)-.15 F .081(gree re)-.15 F .081(gion, which is suf)
--.15 F .082(\214cient for single antenna heights in e)-.25 F(xcess)-.15
-E(of 10,000 feet abo)108 108 Q .3 -.15(ve m)-.15 H(ean sea le).15 E -.15
-(ve)-.25 G(l, or point-to-point distances of o).15 E -.15(ve)-.15 G 2.5
-(r1).15 G(000 miles.)-2.5 E/F1 10.95/Times-Bold@0 SF(ADDITION)72 124.8 Q
-(AL INFORMA)-.219 E(TION)-1.04 E F0(In)108 136.8 Q -.2(vo)-.4 G(king).2
-E/F2 10/Times-Bold@0 SF(SPLA)2.811 E(T!)-.95 E F0 .311(without an)2.811
-F 2.811(ya)-.15 G -.18(rg)-2.811 G .311
+F .161(If one or more of the eight)5.161 F 1.004(radials surv)108 360 R
+-.15(ey)-.15 G 1.004(ed f).15 F 1.004(all o)-.1 F -.15(ve)-.15 G 3.504
+(rw).15 G(ater)-3.604 E 3.504(,o)-.4 G 3.504(ro)-3.504 G -.15(ve)-3.654
+G 3.504(rr).15 G -.15(eg)-3.504 G 1.004(ions for which no SDF data is a)
+.15 F -.25(va)-.2 G(ilable,).25 E F2(SPLA)3.504 E(T!)-.95 E F0(reports)
+3.505 E/F3 10/Times-Italic@0 SF(No)3.505 E -.92(Te)108 372 S(rr).92 E
+(ain)-.15 E F0(for the radial paths af)2.5 E(fected.)-.25 E F1
+(RESTRICTING THE MAXIMUM SIZE OF AN AN)72 388.8 Q(AL)-.219 E
+(YSIS REGION)-1.007 E F2(SPLA)108 400.8 Q(T!)-.95 E F0 1.265(reads SDF \
+\214les as needed into a series of memory "slots" within the structure \
+of the program.)3.765 F .089
+(Each "slot" holds one SDF \214le representing a one de)108 412.8 R .09
+(gree by one de)-.15 F .09(gree re)-.15 F .09(gion of terrain.)-.15 F(A)
+5.09 E F3 .09(#de\214ne MAXS-)2.59 F(LO)108 424.8 Q(TS)-.4 E F0 1.448
+(statement in the \214rst se)3.949 F -.15(ve)-.25 G 1.448(ral lines of)
+.15 F F3(splat.cpp)3.948 E F0 1.448
+(sets the maximum number of "slots" a)3.948 F -.25(va)-.2 G 1.448
+(ilable for).25 F(topograph)108 436.8 Q 3.277(yd)-.05 G 3.277(ata. It)
+-3.277 F .777
+(also sets the maximum size of the topographic maps generated by)3.277 F
+F2(SPLA)3.278 E(T!)-.95 E F0 5.778(.M)C(AXS-)-5.778 E(LO)108 448.8 Q
+.317(TS is set to 9 by def)-.4 F 2.817(ault. If)-.1 F F2(SPLA)2.817 E
+(T!)-.95 E F0 .317(produces a se)2.817 F .316(gmentation f)-.15 F .316
+(ault on start-up with this def)-.1 F .316(ault, it is an)-.1 F .463
+(indication that not enough RAM and/or virtual memory \(sw)108 460.8 R
+.464(ap space\) is a)-.1 F -.25(va)-.2 G .464(ilable to run).25 F F2
+(SPLA)2.964 E(T!)-.95 E F0 .464(with this)2.964 F .614(number of MAXSLO)
+108 472.8 R 3.114(TS. In)-.4 F .614(situations where a)3.114 F -.25(va)
+-.2 G .613(ilable memory is lo).25 F 1.913 -.65(w, M)-.25 H(AXSLO).65 E
+.613(TS may be reduced to 4)-.4 F .396
+(with the understanding that this will greatly limit the maximum re)108
+484.8 R(gion)-.15 E F2(SPLA)2.896 E(T!)-.95 E F0 .396
+(will be able to analyze.)2.896 F(If)5.396 E .947(118 me)108 496.8 R
+-.05(ga)-.15 G .947(bytes or more of total memory \(sw).05 F .947
+(ap space plus RAM\) is a)-.1 F -.25(va)-.2 G .947(ilable, then MAXSLO)
+.25 F .946(TS may be)-.4 F .442(increased to 16.)108 508.8 R .443
+(This will permit operation o)5.443 F -.15(ve)-.15 G 2.943(ra4).15 G
+(-de)-2.943 E .443(gree by 4-de)-.15 F .443(gree re)-.15 F .443
+(gion, which is suf)-.15 F .443(\214cient for sin-)-.25 F .403
+(gle antenna heights in e)108 520.8 R .403(xcess of 10,000 feet abo)-.15
+F .702 -.15(ve m)-.15 H .402(ean sea le).15 F -.15(ve)-.25 G .402
+(l, or point-to-point distances of o).15 F -.15(ve)-.15 G 2.902(r1).15 G
+(000)-2.902 E(miles.)108 532.8 Q F1(ADDITION)72 549.6 Q(AL INFORMA)-.219
+E(TION)-1.04 E F0(In)108 561.6 Q -.2(vo)-.4 G(king).2 E F2(SPLA)2.81 E
+(T!)-.95 E F0 .31(without an)2.81 F 2.81(ya)-.15 G -.18(rg)-2.81 G .311
 (uments will display all the command-line options a).18 F -.25(va)-.2 G
-.31(ilable with the pro-).25 F(gram along with a brief summary of each.)
-108 148.8 Q .332(The latest ne)108 172.8 R .332(ws and information re)
--.25 F -.05(ga)-.15 G(rding).05 E F2(SPLA)2.832 E(T!)-.95 E F0(softw)
-2.832 E .332(are is a)-.1 F -.25(va)-.2 G .332(ilable through the of).25
-F(\214cial)-.25 E F2(SPLA)2.833 E(T!)-.95 E F0(soft-)2.833 E -.1(wa)108
-184.8 S(re web page located at:).1 E/F3 10/Times-Italic@0 SF(http://www)
-2.5 E(.qsl.net/kd2bd/splat.html)-.74 E F0(.)A F1(FILES)72 201.6 Q/F4 10
-/Courier@0 SF($HOME/.splat_path)108 213.6 Q F0(User)144 225.6 Q
-(-generated \214le containing the def)-.2 E
-(ault path to the directory containing the SDF data \214les.)-.1 E F4
-(splat.lrp)108 242.4 Q F0(Def)144 254.4 Q(ault Longle)-.1 E
-(y-Rice model parameters.)-.15 E F1 -.548(AU)72 271.2 S(THORS).548 E F0
-(John A. Magliacane, KD2BD <)108 283.2 Q F3(kd2bd@amsat.or)A(g)-.37 E F0
-(>)A(Creator)144 295.2 Q 2.5(,L)-.4 G(ead De)-2.5 E -.15(ve)-.25 G
-(loper).15 E(Doug McDonald <)108 312 Q F3(mcdonald@scs.uiuc.edu)A F0(>)A
-(Longle)144 324 Q(y-Rice Model inte)-.15 E(gration)-.15 E(KD2BD Softw)72
-768 Q 126.62(are 20)-.1 F(January 2004)2.5 E(9)195.95 E EP
+.311(ilable with the pro-).25 F
+(gram along with a brief summary of each.)108 573.6 Q .333
+(The latest ne)108 597.6 R .332(ws and information re)-.25 F -.05(ga)
+-.15 G(rding).05 E F2(SPLA)2.832 E(T!)-.95 E F0(softw)2.832 E .332
+(are is a)-.1 F -.25(va)-.2 G .332(ilable through the of).25 F(\214cial)
+-.25 E F2(SPLA)2.832 E(T!)-.95 E F0(soft-)2.832 E -.1(wa)108 609.6 S
+(re web page located at:).1 E F3(http://www)2.5 E
+(.qsl.net/kd2bd/splat.html)-.74 E F0(.)A F1 -.548(AU)72 626.4 S(THORS)
+.548 E F0(John A. Magliacane, KD2BD <)108 638.4 Q F3(kd2bd@amsat.or)A(g)
+-.37 E F0(>)A(Creator)144 650.4 Q 2.5(,L)-.4 G(ead De)-2.5 E -.15(ve)
+-.25 G(loper).15 E(Doug McDonald <)108 667.2 Q F3(mcdonald@scs.uiuc.edu)
+A F0(>)A(Longle)144 679.2 Q(y-Rice Model inte)-.15 E(gration)-.15 E
+(KD2BD Softw)72 768 Q 129.12(are 02)-.1 F(March 2006)2.5 E(9)198.45 E EP
 %%Trailer
 end
 %%EOF
index 40fc60aaee055558bdc91797b61208655f32c20c..4a0a3b7a6f000f2fdbf75836d45c86778abe465f 100644 (file)
@@ -3,114 +3,139 @@ SPLAT!(1)                 KD2BD Software                SPLAT!(1)
 
 
 NAME
-       splat  -  A Signal Propagation, Loss, And Terrain analysis
-       tool
+       splat - An RF Signal Propagation, Loss, And Terrain analy-
+       sis tool
 
 SYNOPSIS
-       splat [-t transmitter_site.qth] [-r receiver_site.qth] [-c
-       rx_antenna_height_for_los_coverage_analysis         (feet)
-       (float)]   [-L   rx_antenna_height_for_Longley-Rice_cover-
-       age_analysis  (feet) (float)] [-p terrain_profile.ext] [-e
-       elevation_profile.ext] [-h height_profile.ext]  [-l  Long-
-       ley-Rice_profile.ext]   [-o  topographic_map_filename.ppm]
-       [-b        cartographic_boundary_filename.dat]         [-s
-       site/city_database.dat]    [-d   sdf_directory_path]   [-m
+       splat [-t  transmitter_site.qth]  [-r   receiver_site.qth]
+       [-c    rx_antenna_height_for_los_coverage_analysis  (feet)
+       (float)]  [-L    rx_antenna_height_for_Longley-Rice_cover-
+       age_analysis (feet) (float)] [-p  terrain_profile.ext] [-e
+       elevation_profile.ext] [-h  height_profile.ext] [-l  Long-
+       ley-Rice_profile.ext]  [-o   topographic_map_filename.ppm]
+       [-b         cartographic_boundary_filename.dat]        [-s
+       site/city_database.dat]   [-d    sdf_directory_path]   [-m
        earth_radius_multiplier   (float)]   [-R    maximum_cover-
-       age_range (for -c or -L) (miles) (float)] [-n] [-N]
+       age_range  (for  -c  or  -L) (miles) (float)] [-dB maximum
+       attenuation contour to display on path loss  maps  (80-230
+       dB)] [-n] [-N]
 
 DESCRIPTION
-       SPLAT!  is  a  simple,  yet powerful terrain analysis tool
-       written for Unix and Linux-based workstations.  SPLAT!  is
-       free software.  Redistribution and/or modification is per-
-       mitted under the terms of the GNU General  Public  License
-       as  published by the Free Software Foundation, either ver-
-       sion 2 of the License or any later version.   Adoption  of
-       SPLAT!  source code in proprietary or closed-source appli-
-       cations is a violation of this license,  and  is  strictly
-       forbidden.
-
-       SPLAT!  is distributed in the hope that it will be useful,
-       but WITHOUT ANY WARRANTY, without even  the  implied  war-
-       ranty  of MERCHANTABILITY or FITNESS FOR A PARTICULAR PUR-
+       SPLAT!  is  a powerful terrestrial RF propagation and ter-
+       rain analysis tool covering the spectrum  between  20  MHz
+       and  20  GHz.   It  is  designed for operation on Unix and
+       Linux-based  workstations.   SPLAT!  is   free   software.
+       Redistribution  and/or modification is permitted under the
+       terms of the GNU General Public License  as  published  by
+       the  Free  Software  Foundation,  either  version 2 of the
+       License or any later version.  Adoption of  SPLAT!  source
+       code  in  proprietary  or  closed-source applications is a
+       violation of this license, and is strictly forbidden.
+
+       SPLAT! is distributed in the hope that it will be  useful,
+       but  WITHOUT  ANY  WARRANTY, without even the implied war-
+       ranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR  PUR-
        POSE. See the GNU General Public License for more details.
 
 INTRODUCTION
-       SPLAT!  is  a terrestrial RF propagation analysis tool for
-       the spectrum between 20  MHz  and  20  GHz,  and  provides
-       information  of interest to communication system designers
-       and site engineers.  SPLAT! determines great  circle  dis-
-       tances  and  bearings  between  sites,  antenna  elevation
-       angles (uptilt),  depression  angles  (downtilt),  antenna
-       height  above mean sea level, antenna height above average
-       terrain, bearings and  distances  to  known  obstructions,
-       Longley-Rice   path   loss,  and  minimum  antenna  height
-       requirements needed to establish line-of-sight  communica-
-       tion  paths absent of obstructions due to terrain.  SPLAT!
-       produces reports, graphs, and highly  detailed  and  care-
-       fully  annotated  topographic maps depicting line-of-sight
-       paths, path loss, and expected coverage areas of transmit-
-       ters  and repeater systems.  When performing line-of-sight
-       analysis  in  situations  where  multiple  transmitter  or
-       repeater  sites are employed, SPLAT! determines individual
-       and mutual areas of coverage within the network specified.
-
-       SPLAT!  operates  in  two  modes: point-to-point mode, and
-       area prediction mode.  These modes may  be  invoked  using
-       either  line-of-sight  (LOS)  or  Irregular  Terrain (ITM)
+       Applications of SPLAT! include the visualization,  design,
+       and  link  budget  analysis of wireless Wide Area Networks
+       (WANs), commercial and amateur radio communication systems
+       above 20 MHz, microwave links, frequency coordination, and
+       the determination of analog and digital terrestrial  radio
+       and television contour regions.
+
+       SPLAT!  provides  RF  site  engineering data such as great
+       circle distances and bearings between sites, antenna  ele-
+       vation  angles  (uptilt),  depression  angles  (downtilt),
+       antenna height above mean sea level, antenna height  above
+       average  terrain, bearings and distances to known obstruc-
+       tions, Longley-Rice path attenuation, and minimum  antenna
+       height requirements needed to establish line-of-sight com-
+       munication paths absent of obstructions  due  to  terrain.
+       SPLAT!  produces  reports, graphs, and highly detailed and
+       carefully annotated topographic  maps  depicting  line-of-
+       sight  paths,  path  loss,  and expected coverage areas of
+       transmitters and repeater systems.  When performing  line-
+       of-sight analysis in situations where multiple transmitter
+       or repeater sites are employed, SPLAT! determines individ-
+       ual and mutual areas of coverage within the network speci-
+       fied.
+
+       SPLAT! operates  in  two  distinct  modes:  point-to-point
+       mode,  and  area prediction mode, and may be invoked using
+       either line-of-sight  (LOS)  or  Irregular  Terrain  (ITM)
        propagation models.  True Earth, four-thirds Earth, or any
-       other  Earth radius may be specified by the user when per-
+       other Earth radius may be specified by the user when  per-
        forming line-of-sight analysis.
 
 INPUT FILES
-       SPLAT! is a command-line  driven  application,  and  reads
-       input  data  through a number of data files.  Each has its
-       own format.  Some files are mandatory for successful  exe-
-       cution  of the program, while others are optional.  Manda-
-       tory files include SPLAT  Data  Files  (SDF  files),  site
-       location files (QTH files), and Longley-Rice model parame-
-       ter files (LRP files).  Optional files  include  city/site
-       location files, and cartographic boundary files.
+       SPLAT!  is  a  command-line  driven application, and reads
+       input data through a number of data files.  Some files are
+       mandatory  for  successful execution of the program, while
+       others are optional.  Mandatory files include  SPLAT  Data
+       Files  (SDF  files),  site location files (QTH files), and
+       Longley-Rice model parameter files (LRP files).   Optional
+       files  include  city/site location files, and cartographic
+       boundary files.
 
 SPLAT DATA FILES
-       SPLAT!  imports topographic data in the form of SPLAT Data
-       Files (SDFs) that may be generated from a number of infor-
-       mation  sources.   In  the United States, SPLAT Data Files
-       are most often derived from U.S.  Geological Survey  Digi-
-       tal  Elevation  Models  (DEMs)  using the usgs2sdf utility
-       included with SPLAT!.  USGS Digital Elevation Models  com-
-       patible with this utility are available at no cost via the
-       Internet                  at:                  http://edc-
-       sgs9.cr.usgs.gov/glis/hyper/guide/1_dgr_dem-
-       fig/index1m.html.
-
-       SPLAT Data Files contain  topographic  elevations  to  the
-       nearest  meter  above  mean  sea  level  for  1-degree  by
-       1-degree regions of the earth with a resolution  of  3-arc
-       seconds.   SDF files can be read in either standard format
-       (.sdf) as generated by the usgs2sdf utility, or  in  bzip2
-       compressed  format  (.sdf.bz2).   Since uncompressed files
-       can be slightly faster  to  load  than  compressed  files,
+       SPLAT! imports topographic data in the form of SPLAT  Data
+       Files  (SDFs).  These files may be generated from a number
+       of information sources.  In the United States, SPLAT  Data
+       Files  can  be  generated  through U.S.  Geological Survey
+       Digital Elevation Models (DEMs) using the usgs2sdf utility
+       included  with SPLAT!.  USGS Digital Elevation Models com-
+       patible  with  this  utility  may  be   downloaded   from:
+       http://edcftp.cr.usgs.gov/pub/data/DEM/250/.
+
+       Significantly  better  resolution  can be obtained through
+       the use of SRTM-3  Version  2  digital  elevation  models.
+       These  models  are  the result of the STS-99 Space Shuttle
+       Radar Topography Mission, and are available for most popu-
+       lated  regions of the Earth.  SPLAT Data Files may be gen-
+       erated from SRTM data using the included srtm2sdf utility.
+       SRTM-3  Version  2  data may be obtained through anonymous
+       FTP from: ftp://e0srp01u.ecs.nasa.gov:21/srtm/version2/
+
+       Despite the higher accuracy that SRTM data has  to  offer,
+       some  voids  in  the  data  sets  exist.   When  voids are
+       detected, the srtm2sdf utility replaces them  with  corre-
+       sponding  data found in existing SDF files (that were pre-
+       sumably  created  from  earlier  USGS  data  through   the
+       usgs2sdf utility).  If USGS-derived SDF data is not avail-
+       able, voids are handled through adjacent pixel  averaging,
+       or direct replacement.
+
+       SPLAT  Data Files contain integer value topographic eleva-
+       tions  (in  meters)  referenced  to  mean  sea  level  for
+       1-degree  by  1-degree regions of the earth with a resolu-
+       tion of 3-arc seconds.  SDF files can be  read  in  either
+       standard  format  (.sdf)  as generated by the usgs2sdf and
+       srtm2sdf  utilities,  or  in   bzip2   compressed   format
+       (.sdf.bz2).   Since  uncompressed  files  can be processed
+       slightly faster than  files  that  have  been  compressed,
        SPLAT!  searches  for  the needed SDF data in uncompressed
-       format first.  If such data cannot  located,  then  SPLAT!
-       tries  to read the data in bzip2 compressed format.  If no
+       format first.  If uncompressed data cannot located, SPLAT!
+       then  searches for data in bzip2 compressed format.  If no
        compressed  SDF  files  can  be  found  for   the   region
-       requested, SPLAT! assumes the region is over water or out-
-       side the United States, and will assign  an  elevation  of
-       sea-level to these areas.  This feature of SPLAT! makes it
-       possible to perform path analysis not only over land,  but
-       also between coastal areas not represented by USGS Digital
-       Elevation Model Data since they are  devoid  of  any  land
-       masses.   However, this behavior of SPLAT! underscores the
-       importance of having all the SDF files  required  for  the
-       region  being  analyzed  if  meaningful  results are to be
-       expected.
+       requested,  SPLAT!  assumes  the region is over water, and
+       will assign an elevation of sea-level to these areas.
+
+       This feature of SPLAT! makes it possible to  perform  path
+       analysis  not  only  over  land,  but also between coastal
+       areas not represented by  Digital  Elevation  Model  data.
+       This behavior of SPLAT! underscores the importance of hav-
+       ing all the SDF files required for the region  being  ana-
+       lyzed if meaningful results are to be expected.
 
 SITE LOCATION (QTH) FILES
-       SPLAT! imports site location  information  of  transmitter
-       and  receiver  sites  analyzed  by  the program from ASCII
-       files having a .qth  extension.   QTH  files  contain  the
-       site's  name,  the site's latitude (in degrees North), the
-       site's longitude (in degrees West), and the site's antenna
+       SPLAT!  imports  site  location information of transmitter
+       and receiver sites analyzed  by  the  program  from  ASCII
+       files  having  a  .qth  extension.   QTH files contain the
+       site's name, the site's latitude (positive if North of the
+       equator,  negative  if  South),  the  site's longitude (in
+       degrees West, 0 to 360 degrees), and  the  site's  antenna
        height above ground level (AGL).  A single line-feed char-
        acter separates each field.  The antenna height is assumed
        to be specified in feet unless followed by the letter m or
@@ -134,10 +159,10 @@ SITE LOCATION (QTH) FILES
 LONGLEY-RICE PARAMETER (LRP) FILES
        SPLAT! imports  Longley-Rice  model  parameter  data  from
        files  having  the  same base name as the transmitter site
-       QTH file, but carrying a .lrp  extension,  thus  providing
-       simple  and  accurate correlation between these associated
-       data sets.  The format for the Longley-Rice model  parame-
-       ter files is as follows (wnjt.lrp):
+       QTH file, but with a .lrp extension, thus providing simple
+       and  accurate  correlation  between  these associated data
+       sets.  The format for  the  Longley-Rice  model  parameter
+       files is as follows (wnjt.lrp):
 
                15.000  ; Earth Dielectric Constant (Relative per-
        mittivity)
@@ -158,7 +183,8 @@ LONGLEY-RICE PARAMETER (LRP) FILES
        then the default parameters listed above will be  assigned
        by  SPLAT! and a corresponding "splat.lrp" file containing
        this data will be written to the  current  working  direc-
-       tory.
+       tory.   "splat.lrp"  can  then  be  edited  by the user as
+       needed.
 
        Typical Earth dielectric constants and conductivity values
        are as follows:
@@ -182,39 +208,39 @@ LONGLEY-RICE PARAMETER (LRP) FILES
                3: Maritime Subtropical (West coast of Africa)
                4: Desert (Sahara)
                5: Continental Temperate
-               6:  Maritime  Temperate,  over  land  (UK and west
+               6: Maritime Temperate,  over  land  (UK  and  west
        coasts of US & EU)
                7: Maritime Temperate, over sea
 
-       The Continental Temperate climate is common to large  land
-       masses  in  the temperate zone, such as the United States.
-       For paths shorter than 100 km, there is little  difference
+       The  Continental Temperate climate is common to large land
+       masses in the temperate zone, such as the  United  States.
+       For  paths shorter than 100 km, there is little difference
        between Continental and Maritime Temperate climates.
 
-       The  final  two  parameters in the .lrp file correspond to
-       the statistical  analysis  provided  by  the  Longley-Rice
-       model.   In  this example, SPLAT!  will return the maximum
-       path loss occurring 50% of the time (fraction of time)  in
-       50%   of  situations  (fraction  of  situations).   Use  a
-       fraction of time parameter of 0.97 for digital television,
-       0.50  for analog in the United States.  Isotropic antennas
+       The final two parameters in the .lrp  file  correspond  to
+       the  statistical  analysis  provided  by  the Longley-Rice
+       model.  In this example, SPLAT!  will return  the  maximum
+       path  loss occurring 50% of the time (fraction of time) in
+       50% of situations (fraction of situations).  Use  a  frac-
+       tion  of  time  parameter  of 0.97 for digital television,
+       0.50 for analog in the United States.  Isotropic  antennas
        are assumed.
 
-       For  further  information  on   these   parameters,   see:
-       http://elbert.its.bldrdoc.gov/itm.html                 and
+       For   further   information   on  these  parameters,  see:
+       http://flattop.its.bldrdoc.gov/itm.html                and
        http://www.softwright.com/faq/engineering/prop_long-
        ley_rice.html
 
 CITY LOCATION FILES
-       The  names  and locations of cities, tower sites, or other
-       points of interest may imported and be  plotted  on  topo-
-       graphic  maps  generated  by  SPLAT!.   SPLAT! imports the
-       names of cities and locations from ASCII files  containing
-       the  location's  name,  the  location's  latitude, and the
+       The names and locations of cities, tower sites,  or  other
+       points  of  interest  may be imported and plotted on topo-
+       graphic maps generated  by  SPLAT!.   SPLAT!  imports  the
+       names  of cities and locations from ASCII files containing
+       the location's name,  the  location's  latitude,  and  the
        location's longitude.  Each field is separated by a comma.
-       Each  record is separated by a single line feed character.
-       As was the case with the .qth files, latitude  and  longi-
-       tude  information  may  be  entered  in  either decimal or
+       Each record is separated by a single line feed  character.
+       As  was  the case with the .qth files, latitude and longi-
+       tude information may  be  entered  in  either  decimal  or
        degree, minute, second (DMS) format.
 
        For example (cities.dat):
@@ -227,47 +253,51 @@ CITY LOCATION FILES
                Totowa, 40.906160, 74.223310
                Trenton, 40.219922, 74.754665
 
-       A total of five separate city data files may  be  imported
-       at  a time.  There is no limit to the size of these files.
-       SPLAT! reads city data sequentially, and plots only  those
-       locations  whose positions do not conflict with previously
-       plotted locations when generating topographic maps.
-
-       City data files may be generated manually using  any  text
-       editor,  imported from other sources, or derived from data
-       available from the U.S. Census Bureau  using  the  cityde-
-       coder  utility  included with SPLAT!.  Such data is avail-
-       able free of charge via the Internet  at:  http://www.cen-
-       sus.gov/geo/www/cob/bdy_files.html,  and  must be in ASCII
+       A  total  of five separate city data files may be imported
+       at a time, and there is no limit  to  the  size  of  these
+       files.   SPLAT!  reads  city  data  on a "first come/first
+       served" basis, and plots only those locations whose  anno-
+       tations  do  not  conflict  with  annotations of locations
+       plotted earlier during SPLAT's execution.   This  behavior
+       minimizes  clutter  in  SPLAT! generated topographic maps,
+       but also  mandates  that  important  locations  be  placed
+       toward  the  beginning  of  the  first city data file, and
+       disposable locations be positioned further down  the  list
+       or in subsequent data files.
+
+       City  data  files may be generated manually using any text
+       editor, imported from other sources, or derived from  data
+       available  from  the  U.S. Census Bureau using the cityde-
+       coder utility included with SPLAT!.  Such data  is  avail-
+       able  free  of charge via the Internet at: http://www.cen-
+       sus.gov/geo/www/cob/bdy_files.html, and must be  in  ASCII
        format.
 
 CARTOGRAPHIC BOUNDARY DATA FILES
-       Cartographic boundary data may also be  imported  to  plot
-       the  boundaries  of  cities,  counties, or states on topo-
-       graphic maps generated by SPLAT!.  Such data  must  be  of
-       the  form  of  ARC/INFO Ungenerate (ASCII Format) Metadata
-       Cartographic Boundary Files, and are  available  from  the
-       U.S.   Census  Bureau via the Internet at: http://www.cen-
-       sus.gov/geo/www/cob/co2000.html#ascii and  http://www.cen-
-       sus.gov/geo/www/cob/pl2000.html#ascii.   A  total  of five
-       separate cartographic boundary files may be imported at  a
-       time.   It  is not necessary to import state boundaries if
+       Cartographic  boundary  data  may also be imported to plot
+       the boundaries of cities, counties,  or  states  on  topo-
+       graphic  maps  generated  by SPLAT!.  Such data must be of
+       the form of ARC/INFO Ungenerate  (ASCII  Format)  Metadata
+       Cartographic  Boundary  Files,  and are available from the
+       U.S.  Census Bureau via the Internet  at:  http://www.cen-
+       sus.gov/geo/www/cob/co2000.html#ascii  and http://www.cen-
+       sus.gov/geo/www/cob/pl2000.html#ascii.  A  total  of  five
+       separate  cartographic boundary files may be imported at a
+       time.  It is not necessary to import state  boundaries  if
        county boundaries have already been imported.
 
 PROGRAM OPERATION
-       SPLAT! is invoked via the command-line using a  series  of
-       switches  and arguments.  Since SPLAT! is a CPU and memory
-       intensive application, this type  of  interface  minimizes
-       overhead,  and  also  lends itself well to scripted opera-
+       SPLAT!  is  invoked via the command-line using a series of
+       switches and arguments.  Since SPLAT! is a CPU and  memory
+       intensive  application,  this  type of interface minimizes
+       overhead and lends itself well to scripted (batch)  opera-
        tions.  SPLAT!'s CPU and memory scheduling priority may be
-       adjusted through the use of the Unix nice command.
+       modified through the use of the Unix nice command.
 
        The number and type of switches passed to SPLAT! determine
-       its mode of operation and method of  output  data  genera-
-       tion.   Nearly all of SPLAT!'s switches may be cascaded in
-       any order on the command line when invoking the program to
-       include  all the features described by those switches when
-       performing an analysis.
+       its  mode  of  operation and method of output data genera-
+       tion.  Nearly all of SPLAT!'s switches may be cascaded  in
+       any order on the command line when invoking the program.
 
 POINT-TO-POINT ANALYSIS
        SPLAT! may be used to perform line-of-sight terrain analy-
@@ -275,38 +305,43 @@ POINT-TO-POINT ANALYSIS
 
        splat -t tx_site.qth -r rx_site.qth
 
-       invokes  a terrain analysis between the transmitter speci-
+       invokes a terrain analysis between the transmitter  speci-
        fied in tx_site.qth and receiver specified in rx_site.qth,
-       and  writes  a  SPLAT!  Obstruction  Report to the current
-       working directory.  The report  contains  details  of  the
-       transmitter  and  receiver sites, and identifies the loca-
+       and writes a SPLAT!  Obstruction  Report  to  the  current
+       working  directory.   The  report  contains details of the
+       transmitter and receiver sites, and identifies  the  loca-
        tion of any obstructions detected during the analysis.  If
-       an  obstruction  can  be  cleared  by  raising the receive
-       antenna to a greater altitude, SPLAT!  will  indicate  the
-       minimum  antenna  height required for a line-of-sight path
-       to exist between the transmitter  and  receiver  locations
-       specified.   If  the  antenna must be raised a significant
-       amount, this determination may take some time.
-
-       are optional when invoking the program.  SPLAT!  automati-
-       cally  reads all SPLAT Data Files necessary to conduct the
-       terrain analysis between the sites specified.  By default,
-       the  location of SDF files is assumed to be in the current
-       working directory unless a ".splat_path" file  is  present
-       under the user's home directory.  If this file is present,
-       it must contain the full directory path to the location of
-       all the SDF files required by SPLAT! to perform its analy-
-       sis for the region containing the transmitter and receiver
-       sites  specified.   The  path  in this file must be of the
-       form of a single line of ASCII text:
+       an obstruction can  be  cleared  by  raising  the  receive
+       antenna  to  a greater altitude, SPLAT!  will indicate the
+       minimum antenna height required for a  line-of-sight  path
+       to  exist  between  the transmitter and receiver locations
+       specified.  If the antenna must be  raised  a  significant
+       amount,  this determination may take some time.  Note that
+       the results provided are the minimum necessary for a line-
+       of-sight  path  to  exist,  and  do  not take Fresnel zone
+       clearance requirements into consideration.
+
+       qth extensions are assumed by SPLAT! for  QTH  files,  and
+       are  optional when invoking the program.  SPLAT! automati-
+       cally reads all SPLAT Data Files necessary to conduct  the
+       terrain  analysis  between  the  sites  specified.  SPLAT!
+       searches for the needed SDF files in the  current  working
+       directory  first.   If  the  needed  files  are not found,
+       SPLAT! then searches in  the  path  specified  by  the  -d
+       command-line switch:
 
-       /opt/splat/sdf/
+       splat -t tx_site -r rx_site -d /cdrom/sdf/
 
-       and may be generated with any text  editor.   The  default
-       path  specified in the $HOME/.splat_path file may be over-
-       ridden at any time using the -d switch:
+       An  external  directory path may be specified by placing a
+       ".splat_path" file under the user's home directory.   This
+       file  must  contain  the  full  directory path to the last
+       resort location of all the SDF files.   The  path  in  the
+       $HOME/.splat_path  file  must  be  of the form of a single
+       line of ASCII text:
 
-       splat -t tx_site -r rx_site -d /cdrom/sdf/
+       /opt/splat/sdf/
+
+       and can be generated using any text editor.
 
        A graph of the terrain profile between  the  receiver  and
        transmitter  locations  as a function of distance from the
@@ -407,10 +442,10 @@ POINT-TO-POINT ANALYSIS
        of gray.  The dynamic range of the image is scaled between
        the highest and lowest elevations present in the map.  The
        only exception to this is sea-level, which is  represented
-       in blue.
+       using the color blue.
 
        SPLAT!  generated  topographic  maps  are 24-bit TrueColor
-       Portable PixMap (PPM) images, and may be  viewed,  edited,
+       Portable PixMap (PPM) images.  They may be viewed, edited,
        or  converted  to  other  graphic formats by popular image
        viewing applications such as xv,  The  GIMP,  ImageMagick,
        and XPaint.  PNG format is highly recommended for lossless
@@ -476,7 +511,7 @@ DETERMINING REGIONAL COVERAGE
        work of sites, and predict the regional coverage for  each
        site specified.  In this mode, SPLAT! can generate a topo-
        graphic map displaying the geometric line-of-sight  cover-
-       age  area of the sites based on the location of each site,
+       age  area  of the sites based on the location of each site
        and the height of receive antenna wishing  to  communicate
        with the site in question.  SPLAT! switches from point-to-
        point analysis mode to area prediction mode  when  the  -c
@@ -502,7 +537,7 @@ DETERMINING REGIONAL COVERAGE
        splat -t wnjt -c 30.0 -m  1.333  -s  cities.dat  -b  coun-
        ties.dat -o map.ppm
 
-       An  earth  radius multiplier  of 1.333 instructs SPLAT! to
+       An  earth  radius  multiplier of 1.333 instructs SPLAT! to
        use the "four-thirds earth" model for line-of-sight propa-
        gation  analysis.  Any appropriate earth radius multiplier
        may be selected by the user.
@@ -520,7 +555,7 @@ DETERMINING REGIONAL COVERAGE
        Rice path loss map for a transmitter site  may  be  gener-
        ated:
 
-       splat  -t tx_site -L 30.0 -s cities.dat -b co34_d00.dat -o
+       splat  -t  wnjt  -L  30.0 -s cities.dat -b co34_d00.dat -o
        path_loss_map
 
        In this mode, SPLAT! generates a  multi-color  map  illus-
@@ -528,26 +563,38 @@ DETERMINING REGIONAL COVERAGE
        rounding the transmitter site.  A legend at the bottom  of
        the  map  correlates  each color with a specific path loss
        level in decibels.  Since Longley-Rice area prediction map
-       generation  is quite CPU intensive, provision for limiting
+       generation  is  very CPU intensive, provision for limiting
        the analysis range is provided  by  the  -R  switch.   The
        argument  must  be  given in miles.  If a range wider than
        the generated topographic map is  specified,  SPLAT!  will
        perform  Longley-Rice  path  loss calculations between all
        four corners of the area prediction map.
 
+       The -db switch allows a constraint to  be  placed  on  the
+       maximum  path loss region plotted on the map.  A path loss
+       between 80 and 230 dB may be specified using this  switch.
+       For  example,  if a path loss beyond -140 dB is irrelevant
+       to the survey being conducted, SPLAT!'s path loss plot can
+       be constrained to the region bounded by the 140 dB attenu-
+       ation contour as follows:
+
+       splat -t wnjt -L 30.0 -s cities.dat  -b  co34_d00.dat  -db
+       140 -o plot.ppm
+
+
 DETERMINING MULTIPLE REGIONS OF COVERAGE
-       SPLAT! can also display line-of-sight coverage  areas  for
-       as  many  as  four  separate transmitter sites on a common
+       SPLAT!  can  also display line-of-sight coverage areas for
+       as many as four separate transmitter  sites  on  a  common
        topographic map.  For example:
 
        splat -t site1 site2 site3 site4 -c 30.0 -o network.ppm
 
        plots the regional line-of-sight coverage of site1, site2,
-       site3,  and  site4 based on a receive antenna located 30.0
-       feet above ground level.  A topographic map is then  writ-
-       ten  to  the file network.ppm.  The line-of-sight coverage
-       area of the transmitters are plotted  as  follows  in  the
-       colors  indicated (along with their corresponding RGB val-
+       site3, and site4 based on a receive antenna  located  30.0
+       feet  above  ground  level.   A  topographic  map  is then
+       written to the file network.ppm.  The line-of-sight cover-
+       age area of the transmitters are plotted as follows in the
+       colors indicated (along with their corresponding RGB  val-
        ues in decimal):
 
            site1: Green (0,255,0)
@@ -569,20 +616,20 @@ DETERMINING MULTIPLE REGIONS OF COVERAGE
 
            site1 + site2 + site3 + site4: Gold2 (238,201,0)
 
-       If  separate .qth files are generated, each representing a
-       common site location but a  different  antenna  height,  a
-       single  topographic map illustrating the regional coverage
-       from as many as four separate locations on a single  tower
+       If separate .qth files are generated, each representing  a
+       common  site  location  but  a different antenna height, a
+       single topographic map illustrating the regional  coverage
+       from  as many as four separate locations on a single tower
        may be generated by SPLAT!.
 
 TOPOGRAPHIC MAP GENERATION
-       In  certain  situations, it may be desirable to generate a
-       topographic map of  a  region  without  plotting  coverage
+       In certain situations, it may be desirable to  generate  a
+       topographic  map  of  a  region  without plotting coverage
        areas,  line-of-sight  paths,  or  generating  obstruction
-       reports.  There are several ways of doing  this.   If  one
-       wishes  to  generate  a  topographic  map illustrating the
-       location of a transmitter and receiver site along  with  a
-       brief  text  report describing the locations and distances
+       reports.   There  are  several ways of doing this.  If one
+       wishes to generate  a  topographic  map  illustrating  the
+       location  of  a transmitter and receiver site along with a
+       brief text report describing the locations  and  distances
        between the sites, the -n switch should be invoked as fol-
        lows:
 
@@ -592,27 +639,34 @@ TOPOGRAPHIC MAP GENERATION
 
        splat -t tx_site -r rx_site -N -o topo_map.ppm
 
-       If  the  -o  switch  and  output filename are omitted when
+       If the -o switch and  output  filename  are  omitted  when
        using either the -n or -N switches, output is written to a
-       file  named  map.ppm  in  the current working directory by
+       file named map.ppm in the  current  working  directory  by
        default.
 
 DETERMINATION OF ANTENNA HEIGHT ABOVE AVERAGE TERRAIN
-       SPLAT! determines antenna  height  above  average  terrain
-       (HAAT)  according to the procedure defined by Federal Com-
-       munications Commission Part 73.313(d).  According to  this
+       SPLAT!  determines  antenna  height  above average terrain
+       (HAAT) according to the procedure defined by Federal  Com-
+       munications  Commission Part 73.313(d).  According to this
        definition, terrain elevations along eight radials between
-       2 and 10 miles (3 and 16 kilometers) from the  site  being
-       analyzed  are  sampled and averaged for each 45 degrees of
-       azimuth starting with True North.  If one or more  radials
-       lie  entirely  over water, or over land outside the United
-       States (areas for which no USGS topography data is  avail-
+       2  and  10 miles (3 and 16 kilometers) from the site being
+       analyzed are sampled and averaged for each 45  degrees  of
+       azimuth  starting with True North.  If one or more radials
+       lie entirely over water or over land  outside  the  United
+       States  (areas for which no USGS topography data is avail-
        able), then those radials are omitted from the calculation
-       of average terrain.  If part of a radial  extends  over  a
+       of  average  terrain.   If part of a radial extends over a
        body of water or over land outside the United States, then
        only that part of the radial lying over United States land
        is used in the determination of average terrain.
 
+       Note that SRTM elevation data, unlike older  3-arc  second
+       USGS  data,  extends  beyond  the  borders  of  the United
+       States.  Therefore, HAAT results may not be in  full  com-
+       pliance with FCC Part 73.313(d) in areas along the borders
+       of the United States if the SDF files used by  SPLAT!  are
+       SRTM-derived.
+
        When  performing  point-to-point  terrain analysis, SPLAT!
        determines the antenna height above average  terrain  only
        if  enough topographic data has already been loaded by the
@@ -628,49 +682,42 @@ DETERMINATION OF ANTENNA HEIGHT ABOVE AVERAGE TERRAIN
        as  the  average terrain above mean sea level for azimuths
        of 0, 45, 90, 135, 180, 225, 270,  and  315  degrees,  and
        include such information in the site report generated.  If
-       one or more of the eight radials surveyed fall over  water
-       or  land outside the United States, SPLAT! reports No Ter-
-       rain for those radial paths.
-
-SETTING THE MAXIMUM SIZE OF AN ANALYSIS REGION
-       SPLAT! reads SDF files into a series of memory "slots"  as
-       required within the structure of the program.  Each "slot"
-       holds one SDF file.  Each SDF file represents a one degree
-       by  one  degree  region  of  terrain.   A #define MAXSLOTS
-       statement in the first several lines of splat.cpp sets the
-       maximum  number  of "slots" available for topography data.
-       It also sets the maximum size of the topographic maps gen-
-       erated  by  SPLAT!.   MAXSLOTS is set to 9 by default.  If
-       SPLAT! produces a segmentation fault on start-up with this
-       default,  it  is  an indication that not enough RAM and/or
-       virtual memory (swap space) are available  to  run  SPLAT!
-       with  this number of MAXSLOTS.  In this case, MAXSLOTS may
-       be reduced to 4, although this will greatly limit the max-
-       imum  region  SPLAT!  will  be  able  to  analyze.  If 118
-       megabytes or more of total memory (swap space plus RAM) is
-       available,  then  MAXSLOTS  may  be increased to 16.  This
-       will permit operation over a 4-degree by 4-degree  region,
-       which  is  sufficient for single antenna heights in excess
-       of 10,000 feet above mean  sea  level,  or  point-to-point
-       distances of over 1000 miles.
+       one or more of the eight radials surveyed fall over water,
+       or over regions for which no SDF data is available, SPLAT!
+       reports No Terrain for the radial paths affected.
+
+RESTRICTING THE MAXIMUM SIZE OF AN ANALYSIS REGION
+       SPLAT! reads SDF files as needed into a series  of  memory
+       "slots"  within the structure of the program.  Each "slot"
+       holds one SDF file representing a one degree by one degree
+       region  of  terrain.   A #define MAXSLOTS statement in the
+       first several lines of splat.cpp sets the  maximum  number
+       of  "slots"  available  for topography data.  It also sets
+       the maximum size of  the  topographic  maps  generated  by
+       SPLAT!.   MAXSLOTS is set to 9 by default.  If SPLAT! pro-
+       duces a segmentation fault on start-up with this  default,
+       it  is  an  indication  that not enough RAM and/or virtual
+       memory (swap space) is available to run SPLAT!  with  this
+       number  of MAXSLOTS.  In situations where available memory
+       is low, MAXSLOTS may be reduced to 4 with the  understand-
+       ing that this will greatly limit the maximum region SPLAT!
+       will be able to analyze.  If  118  megabytes  or  more  of
+       total  memory  (swap  space  plus  RAM) is available, then
+       MAXSLOTS may be increased to 16.  This will permit  opera-
+       tion  over  a 4-degree by 4-degree region, which is suffi-
+       cient for single antenna heights in excess of 10,000  feet
+       above  mean sea level, or point-to-point distances of over
+       1000 miles.
 
 ADDITIONAL INFORMATION
        Invoking SPLAT! without any arguments will display all the
        command-line options available with the program along with
        a brief summary of each.
 
-       The  latest news and information regarding SPLAT! software
+       The latest news and information regarding SPLAT!  software
        is available through the official SPLAT! software web page
        located at: http://www.qsl.net/kd2bd/splat.html.
 
-FILES
-       $HOME/.splat_path
-              User-generated  file containing the default path to
-              the directory containing the SDF data files.
-
-       splat.lrp
-              Default Longley-Rice model parameters.
-
 AUTHORS
        John A. Magliacane, KD2BD <kd2bd@amsat.org>
               Creator, Lead Developer
@@ -680,4 +727,3 @@ AUTHORS
 
 
 
-KD2BD Software           20 January 2004                SPLAT!(1)
diff --git a/install b/install
index 936ba84cc51b2af62e4af4126f57a14a0df7e458..f279186d8b674f1b43a39df353bd00dc909a586a 100755 (executable)
--- a/install
+++ b/install
@@ -56,3 +56,4 @@ else
                echo "Usage: ./install { splat, utils, man, all }"
        fi
 fi
+
diff --git a/splat-1.1.0.lsm b/splat-1.1.0.lsm
deleted file mode 100644 (file)
index 3785f71..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-Begin3
-Title:         SPLAT!
-Version:       1.1.0
-Entered-date:  29JAN04
-Description:   SPLAT! is a terrestrial RF propagation analysis tool for
-               the spectrum between 20 MHz and 20 GHz.  SPLAT! provides
-               site engineering data such as the great circle distances
-               and bearings between sites, antenna elevation angles
-               (uptilt), depression angles (downtilt), antenna height
-               above mean sea level, antenna height above average
-               terrain, bearings and distances to known obstructions,
-               path loss based on the Longley-Rice Irregular Terrain
-               Model, and minimum antenna height requirements needed
-               to establish line-of-sight communication paths absent
-               of obstructions due to terrain.  SPLAT! produces
-               reports, graphs, and highly detailed and carefully
-               annotated topographic maps depicting line-of-sight paths,
-               path loss, and expected coverage areas of transmitters
-               and repeater systems.  Applications of SPLAT! include
-               site engineering, wireless network design, amateur
-               radio communications, frequency coordination,
-               communication system design, and terrestrial
-               television and radio broadcasting.  SPLAT! requires
-               gnuplot version 3.7, libbzip-1.0.1 or later, and
-               zlib, as well as an application capable of displaying
-               PPM graphic files (xv, ImageMagick, xpaint, The GIMP, etc.).
-Keywords:      Terrain analysis, site engineering, Longley-Rice path
-               loss, TV/FM radio broadcasting, TV/FM radio reception,
-               amateur radio, wireless WAN design
-Author:                kd2bd@amsat.org (John A. Magliacane) (Creator, Lead Developer)
-               mcdonald@scs.uiuc.edu (Doug McDonald) (L-R Model Integration)
-Maintained-by: kd2bd@amsat.org (John A. Magliacane)
-Primary-site:  ftp.ibiblio.org /pub/Linux/apps/ham/splat-1.1.0.tar.gz
-Original-site: http://www.qsl.net/kd2bd/splat.html
-Platforms:     Linux/Unix
-Copying-policy:        GPL
-End
diff --git a/splat-1.1.1.lsm b/splat-1.1.1.lsm
new file mode 100644 (file)
index 0000000..1f83772
--- /dev/null
@@ -0,0 +1,37 @@
+Begin4
+Title:         SPLAT!
+Version:       1.1.1
+Entered-date:  2006-04-01
+Description:   SPLAT! is a terrestrial RF propagation analysis tool for
+               the spectrum between 20 MHz and 20 GHz.  SPLAT! provides
+               site engineering data such as the great circle distances
+               and bearings between sites, antenna elevation angles
+               (uptilt), depression angles (downtilt), antenna height
+               above mean sea level, antenna height above average
+               terrain, bearings and distances to known obstructions,
+               path loss based on the Longley-Rice Irregular Terrain
+               Model, and minimum antenna height requirements needed
+               to establish line-of-sight communication paths absent
+               of obstructions due to terrain.  SPLAT! produces
+               reports, graphs, and highly detailed and carefully
+               annotated topographic maps depicting line-of-sight paths,
+               path loss, and expected coverage areas of transmitters
+               and repeater systems.  Applications of SPLAT! include
+               site engineering, wireless network design, amateur
+               radio communications, frequency coordination,
+               communication system design, and terrestrial
+               television and radio broadcasting.  SPLAT! requires
+               gnuplot version 3.7, libbzip-1.0.1 or later, and
+               zlib, as well as an application capable of displaying
+               PPM graphic files (xv, ImageMagick, xpaint, The GIMP, etc.).
+Keywords:      Terrain analysis, site engineering, Longley-Rice path
+               loss, TV/FM radio broadcasting, TV/FM radio reception,
+               amateur radio, wireless WAN analysis and design
+Author:                kd2bd@amsat.org (John A. Magliacane) (Creator, Lead Developer)
+               mcdonald@scs.uiuc.edu (Doug McDonald) (L-R Model Integration)
+Maintained-by: kd2bd@amsat.org (John A. Magliacane)
+Primary-site:  ftp.ibiblio.org /pub/Linux/apps/ham/splat-1.1.1.tar.gz
+Original-site: http://www.qsl.net/kd2bd/splat.html
+Platforms:     Linux/Unix
+Copying-policy:        GPL
+End
index 2fe6fd42a616996b8233deeb5be5e240693427ba..3e17692aafa79b69d410cb869cc403462873f38d 100644 (file)
--- a/splat.cpp
+++ b/splat.cpp
@@ -1,9 +1,17 @@
 /****************************************************************************
-*                    SPLAT: A Terrain Analysis Program                     *
-*             Copyright John A. Magliacane, KD2BD 1997-2004                *
-*                       Last update: 24-Jan-2004                           *
+*      SPLAT: An RF Signal Propagation Loss and Terrain Analysis Tool       *
+*                        Last update: 31-Mar-2006                          *
 *****************************************************************************
+*           Project started in 1997 by John A. Magliacane, KD2BD           *
+*****************************************************************************
+*                                                                          *
+*     Extensively modified by J. D. McDonald in Jan. 2004 to include        *
+*    the Longley-Rice propagation model using C++ code from NTIA/ITS.      *
 *                                                                          *
+*              See: http://flattop.its.bldrdoc.gov/itm.html                 *
+*                                                                          *
+*****************************************************************************
+*                                                                           *
 * This program is free software; you can redistribute it and/or modify it   *
 * under the terms of the GNU General Public License as published by the     *
 * Free Software Foundation; either version 2 of the License or any later    *
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License     *
 * for more details.                                                        *
 *                                                                          *
-*****************************************************************************
-*                                                                          *
-*     Extensively modified by J. D. McDonald in Jan. 2004 to include        *
-*    the Longley-Rice propagation model using C++ code from NTIA/ITS.      *
-*                                                                          *
-*              See: http://elbert.its.bldrdoc.gov/itm.html                  *
-*                                                                          *
 *****************************************************************************
  g++ -Wall -O3 -s -lm -lbz2 -fomit-frame-pointer itm.cpp splat.cpp -o splat 
 *****************************************************************************/
 #define ARRAYSIZE 30025
 #endif
 
-char string[255], sdf_path[255], opened=0, *splat_version={"1.1.0"};
+char   string[255], sdf_path[255], opened=0, *splat_version={"1.1.1"};
 
 double TWOPI=6.283185307179586, HALFPI=1.570796326794896,
        PI=3.141592653589793, deg2rad=1.74532925199e-02,
        EARTHRADIUS=20902230.97, METERS_PER_MILE=1609.344,
        METERS_PER_FOOT=0.3048, earthradius, max_range=0.0;
 
-int    min_north=0, max_north=0, min_west=0, max_west=0,
-       max_elevation=0, min_elevation=0, bzerror;
+int    min_north=90, max_north=-90, min_west=360, max_west=-1,
+       max_elevation=-32768, min_elevation=32768, bzerror, maxdB=230;
 
 struct site { double lat;
              double lon;
              double alt;
              char name[50];
-           };
-
-struct { float lat[ARRAYSIZE];
-         float lon[ARRAYSIZE];
-         float elevation[ARRAYSIZE];
-         float distance[ARRAYSIZE];
-         int length;
-       } path;
-
-struct { int min_north;
-        int max_north;
-        int min_west;
-        int max_west;
-        int max_el;
-        int min_el;
-        short data[1200][1200];
-        unsigned char mask[1200][1200];
-       } dem[MAXSLOTS];
-
-struct {
-       double eps_dielect; 
-       double sgm_conductivity; 
-       double eno_ns_surfref;
-       double frq_mhz; 
-       double conf; 
-       double rel;
-       int radio_climate;  
-       int pol;
-       } LR;
+           } site;
+
+struct path { float lat[ARRAYSIZE];
+              float lon[ARRAYSIZE];
+              float elevation[ARRAYSIZE];
+              float distance[ARRAYSIZE];
+              int length;
+            } path;
+
+struct dem { int min_north;
+            int max_north;
+            int min_west;
+            int max_west;
+            int max_el;
+            int min_el;
+            short data[1200][1200];
+            unsigned char mask[1200][1200];
+           } dem[MAXSLOTS];
+
+struct LR { double eps_dielect; 
+           double sgm_conductivity; 
+           double eno_ns_surfref;
+           double frq_mhz; 
+           double conf; 
+           double rel;
+           int radio_climate;  
+           int pol;
+          } LR;
 
 double elev_l[ARRAYSIZE+10];
 
@@ -122,6 +122,18 @@ double arccos(double x, double y)
        return result;
 }
 
+int ReduceAngle(double angle)
+{
+       /* This function normalizes the argument to
+          an integer angle between 0 and 180 degrees */
+
+       double temp;
+
+       temp=acos(cos(angle*deg2rad));
+
+       return (int)rint(temp/deg2rad);
+}
+
 char *dec2dms(double decimal)
 {
        /* Converts decimal degrees to degrees, minutes, seconds,
@@ -130,6 +142,9 @@ char *dec2dms(double decimal)
        int degrees, minutes, seconds;
        double a, b, c, d;
 
+       if (decimal<0.0)
+               decimal=-decimal;
+
        a=floor(decimal);
        b=60.0*(decimal-a);
        c=floor(b);
@@ -176,8 +191,10 @@ int OrMask(double lat, double lon, int value)
                y=(int)(1199.0*(lon-floor(lon)));
 
                dem[indx].mask[x][y]|=value;
+
                return (dem[indx].mask[x][y]);
        }
+
        else
                return -1;
 }
@@ -212,6 +229,7 @@ double GetElevation(struct site location)
        {
                if (minlat==dem[indx].min_north && minlon==dem[indx].min_west)
                {
+
                        elevation=3.28084*dem[indx].data[x][y];
                        found=1;
                }
@@ -318,19 +336,17 @@ void ReadPath(struct site source, struct site destination)
           elevation and distance information for points along
           that path in the "path" structure for later use. */
 
+       int c;
        double azimuth, distance, lat1, lon1, beta,
               den, num, lat2, lon2, total_distance;
-       int x1, y1, c;
        struct site tempsite;
 
-       c=0;
-
        lat1=source.lat*deg2rad;
        lon1=source.lon*deg2rad;
        azimuth=Azimuth(source,destination)*deg2rad;
        total_distance=Distance(source,destination);
 
-       for (distance=0; distance<=total_distance; distance+=0.04)
+       for (distance=0, c=0; distance<=total_distance; distance+=0.04)
        {
                beta=distance/3959.0;
                lat2=asin(sin(lat1)*cos(beta)+cos(azimuth)*sin(beta)*cos(lat1));
@@ -363,30 +379,33 @@ void ReadPath(struct site source, struct site destination)
                lat2=lat2/deg2rad;
                lon2=lon2/deg2rad;
 
-               x1=(int)(1199.0*(lat2-floor(lat2)));
-               y1=(int)(1199.0*(lon2-floor(lon2)));
-
-               path.lat[c]=lat2;
-               path.lon[c]=lon2;
-               tempsite.lat=lat2;
-               tempsite.lon=lon2;
-               path.elevation[c]=GetElevation(tempsite);
-               path.distance[c]=distance;
-               c++;
+               if (c<ARRAYSIZE)
+               {
+                       path.lat[c]=lat2;
+                       path.lon[c]=lon2;
+                       tempsite.lat=lat2;
+                       tempsite.lon=lon2;
+                       path.elevation[c]=GetElevation(tempsite);
+                       path.distance[c]=distance;
+                       c++;
+               }
        }
 
        /* Make sure exact destination point is recorded at path.length-1 */
 
-       x1=(int)(1199.0*(destination.lat-floor(destination.lat)));
-       y1=(int)(1199.0*(destination.lon-floor(destination.lon)));
-
-       path.lat[c]=destination.lat;
-       path.lon[c]=destination.lon;
-       path.elevation[c]=GetElevation(destination);
-       path.distance[c]=total_distance;
-       c++;
+       if (c<ARRAYSIZE)
+       {
+               path.lat[c]=destination.lat;
+               path.lon[c]=destination.lon;
+               path.elevation[c]=GetElevation(destination);
+               path.distance[c]=total_distance;
+               c++;
+       }
 
-       path.length=c;
+       if (c<ARRAYSIZE)
+               path.length=c;
+       else
+               path.length=ARRAYSIZE-1;
 }
 
 double AverageTerrain(struct site source, double azimuthx, double start_distance, double end_distance)
@@ -522,6 +541,27 @@ double haat(struct site antenna)
        }
 }
 
+float LonDiff(float lon1, float lon2)
+{
+       /* This function returns the short path longitudinal
+          difference between longitude1 and longitude2 
+          as an angle between -180.0 and +180.0 degrees.
+          If lon1 is west of lon2, the result is positive.
+          If lon1 is east of lon2, the result is negative. */
+
+       float diff;
+
+       diff=lon1-lon2;
+
+       if (diff<=-180.0)
+               diff+=360.0;
+
+       if (diff>=180.0)
+               diff-=360.0;
+
+       return diff;
+}
+
 void PlaceMarker(struct site location)
 {
        /* This function places text and marker data in the mask array
@@ -546,7 +586,8 @@ void PlaceMarker(struct site location)
        lat=location.lat;
        lon=location.lon;
 
-       if (lat<xmax && lat>xmin && lon<ymax && lon>ymin)
+
+       if (lat<xmax && lat>xmin && (LonDiff(lon,ymax)<0.0) && (LonDiff(lon,ymin)>0.0))
        {
                p1=1.0/1200.0;
                p3=3.0/1200.0;
@@ -561,7 +602,7 @@ void PlaceMarker(struct site location)
                /* Is Marker Position Clear Of Text Or Other Markers? */
 
                for (x=lat-p3; (x<=xmax && x>=xmin && x<=lat+p3); x+=p1)
-                       for (y=lon-p3; (y<=ymax && y>=ymin && y<=lon+p3); y+=p1)
+                       for (y=lon-p3; (LonDiff(y,ymax)<=0.0) && (LonDiff(y,ymin)>=0.0) && (LonDiff(y,lon+p3)<=0.0); y+=p1)
                                occupied|=(GetMask(x,y)&2);
 
                if (occupied==0)
@@ -573,7 +614,7 @@ void PlaceMarker(struct site location)
 
                        label_length=p1*(double)(strlen(location.name)<<3);
 
-                       if (((lon+label_length)<=ymax) && (lon-label_length)>=ymin)
+                       if ((LonDiff(lon+label_length,ymax)<=0.0) && (LonDiff(lon-label_length,ymin)>=0.0))
                        {
                                /* Default: Centered Text */
 
@@ -638,7 +679,7 @@ void PlaceMarker(struct site location)
 
                        if (ok2print==0)
                        {
-                               if ((lon-label_length)>=ymin)
+                               if (LonDiff(lon-label_length,ymin)>=0.0)
                                {
                                        /* Position Text To The
                                           Right Of The Marker */
@@ -703,7 +744,7 @@ void PlaceMarker(struct site location)
                           coordinates that describe the placement of the text
                           on the map. */
        
-                       if (ok2print && textx!=0.0 && texty!=0.0)
+                       if (ok2print)
                        {
                                /* Draw Text */
 
@@ -720,6 +761,7 @@ void PlaceMarker(struct site location)
                                                        if (byte&c)
                                                                OrMask(x,y,2);
                                        }
+
                                        x-=p1;
                                        y=texty;
                                }
@@ -728,7 +770,7 @@ void PlaceMarker(struct site location)
                                   On Location Specified */
        
                                for (x=lat-p3; (x<=xmax && x>=xmin && x<=lat+p3); x+=p1)
-                                       for (y=lon-p3; (y<=ymax && y>=ymin && y<=lon+p3); y+=p1)
+                                       for (y=lon-p3; (LonDiff(y,ymax)<=0.0) && (LonDiff(y,ymin)>=0.0) && (LonDiff(y,lon+p3)<=0.0); y+=p1)
                                                OrMask(x,y,2);
                        }
                }
@@ -746,10 +788,9 @@ double ReadBearing(char *input)
           embedded within the numbers expressed in the
           input string.  Decimal seconds are permitted. */
  
-       double bearing=0.0;
+       double seconds, bearing=0.0;
        char string[20];
        int a, b, length, degrees, minutes;
-       double seconds;
 
        /* Copy "input" to "string", and ignore any extra
           spaces that might be present in the process. */
@@ -787,7 +828,7 @@ double ReadBearing(char *input)
 
        /* Anything else returns a 0.0 */
 
-       if (bearing>360.0 || bearing<0.0)
+       if (bearing>360.0 || bearing<-90.0)
                bearing=0.0;
 
        return bearing;
@@ -817,8 +858,8 @@ struct site LoadQTH(char *filename)
        qthfile[x+3]='h';
        qthfile[x+4]=0;
 
-       tempsite.lat=0.0;
-       tempsite.lon=0.0;
+       tempsite.lat=91.0;
+       tempsite.lon=361.0;
        tempsite.alt=0.0;
        tempsite.name[0]=0;
 
@@ -907,11 +948,8 @@ int LoadSDF_SDF(char *name)
 
        for (indx=0, found=0; indx<MAXSLOTS && found==0; indx++)
        {
-               if (minlat!=0 && minlon!=0)
-               {
-                       if (minlat==dem[indx].min_north && minlon==dem[indx].min_west && maxlat==dem[indx].max_north && maxlon==dem[indx].max_west)
-                               found=1;
-               }
+               if (minlat==dem[indx].min_north && minlon==dem[indx].min_west && maxlat==dem[indx].max_north && maxlon==dem[indx].max_west)
+                       found=1;
        }
 
        /* Is room available to load it? */
@@ -919,19 +957,31 @@ int LoadSDF_SDF(char *name)
        if (found==0)
        {       
                for (indx=0, free_slot=0; indx<MAXSLOTS && free_slot==0; indx++)
-                       if (dem[indx].max_north==0 && dem[indx].max_west==0)
+                       if (dem[indx].max_north==-90)
                                free_slot=1;
        }
 
        indx--;
 
-       if (free_slot && found==0 && indx>=0 && indx<MAXSLOTS && minlat!=0 && minlon!=0)
+       if (free_slot && found==0 && indx>=0 && indx<MAXSLOTS)
        {
-               strncpy(path_plus_name,sdf_path,255);
-               strncat(path_plus_name,sdf_file,255);
+               /* Search for SDF file in current working directory first */
+
+               strncpy(path_plus_name,sdf_file,255);
 
                fd=fopen(path_plus_name,"rb");
 
+               if (fd==NULL)
+               {
+                       /* Next, try loading SDF file from path specified
+                          in $HOME/.splat_path file or by -d argument */
+
+                       strncpy(path_plus_name,sdf_path,255);
+                       strncat(path_plus_name,sdf_file,255);
+
+                       fd=fopen(path_plus_name,"rb");
+               }
+
                if (fd!=NULL)
                {
                        fprintf(stdout,"Loading \"%s\" into slot %d...",path_plus_name,indx+1);
@@ -954,54 +1004,70 @@ int LoadSDF_SDF(char *name)
                                {
                                        fgets(line,19,fd);
                                        sscanf(line,"%d",&data);
+
                                        dem[indx].data[x][y]=data;
 
                                        if (data>dem[indx].max_el)
                                                dem[indx].max_el=data;
 
-                                       if (dem[indx].min_el==0)
+                                       if (data<dem[indx].min_el)
                                                dem[indx].min_el=data;
-                                       else
-                                       {
-                                                if (data<dem[indx].min_el)
-                                                       dem[indx].min_el=data;
-                                       }
                                }
 
                        fclose(fd);
 
-                       if (min_elevation==0)
+                       if (dem[indx].min_el<min_elevation)
                                min_elevation=dem[indx].min_el;
 
-                       else
-                       {
-                               if (dem[indx].min_el<min_elevation)
-                                       min_elevation=dem[indx].min_el;
-                       }
-
                        if (dem[indx].max_el>max_elevation)
                                max_elevation=dem[indx].max_el;
 
-                       if (dem[indx].max_north>max_north)
+                       if (max_north==-90)
                                max_north=dem[indx].max_north;
 
-                       if (dem[indx].max_west>max_west)
-                               max_west=dem[indx].max_west;
+                       else if (dem[indx].max_north>max_north)
+                               max_north=dem[indx].max_north;
 
-                       if (min_north==0)
+                       if (min_north==90)
                                min_north=dem[indx].min_north;
+
+                       else if (dem[indx].min_north<min_north)
+                               min_north=dem[indx].min_north;
+
+                       if (max_west==-1)
+                               max_west=dem[indx].max_west;
+
                        else
                        {
-                               if (dem[indx].min_north<min_north)
-                                       min_north=dem[indx].min_north;
+                               if (abs(dem[indx].max_west-max_west)<180)
+                               {
+                                       if (dem[indx].max_west>max_west)
+                                               max_west=dem[indx].max_west;
+                               }
+
+                               else
+                               {
+                                       if (dem[indx].max_west<max_west)
+                                               max_west=dem[indx].max_west;
+                               }
                        }
 
-                       if (min_west==0)
+                       if (min_west==360)
                                min_west=dem[indx].min_west;
+
                        else
                        {
-                               if (dem[indx].min_west<min_west)
-                                       min_west=dem[indx].min_west;
+                               if (abs(dem[indx].min_west-min_west)<180)
+                               {
+                                       if (dem[indx].min_west<min_west)
+                                               min_west=dem[indx].min_west;
+                               }
+
+                               else
+                               {
+                                       if (dem[indx].min_west>min_west)
+                                               min_west=dem[indx].min_west;
+                               }
                        }
 
                        fprintf(stdout," Done!\n");
@@ -1111,11 +1177,8 @@ int LoadSDF_BZ(char *name)
 
        for (indx=0, found=0; indx<MAXSLOTS && found==0; indx++)
        {
-               if (minlat!=0 && minlon!=0)
-               {
-                       if (minlat==dem[indx].min_north && minlon==dem[indx].min_west && maxlat==dem[indx].max_north && maxlon==dem[indx].max_west)
-                               found=1;
-               }
+               if (minlat==dem[indx].min_north && minlon==dem[indx].min_west && maxlat==dem[indx].max_north && maxlon==dem[indx].max_west)
+                       found=1;
        }
 
        /* Is room available to load it? */
@@ -1123,20 +1186,33 @@ int LoadSDF_BZ(char *name)
        if (found==0)
        {       
                for (indx=0, free_slot=0; indx<MAXSLOTS && free_slot==0; indx++)
-                       if (dem[indx].max_north==0 && dem[indx].max_west==0)
+                       if (dem[indx].max_north==-90)
                                free_slot=1;
        }
 
        indx--;
 
-       if (free_slot && found==0 && indx>=0 && indx<MAXSLOTS && minlat!=0 && minlon!=0)
+       if (free_slot && found==0 && indx>=0 && indx<MAXSLOTS)
        {
-               strncpy(path_plus_name,sdf_path,255);
-               strncat(path_plus_name,sdf_file,255);
+               /* Search for SDF file in current working directory first */
+
+               strncpy(path_plus_name,sdf_file,255);
 
                fd=fopen(path_plus_name,"rb");
                bzfd=BZ2_bzReadOpen(&bzerror,fd,0,0,NULL,0);
 
+               if (fd==NULL || bzerror!=BZ_OK)
+               {
+                       /* Next, try loading SDF file from path specified
+                          in $HOME/.splat_path file or by -d argument */
+
+                       strncpy(path_plus_name,sdf_path,255);
+                       strncat(path_plus_name,sdf_file,255);
+
+                       fd=fopen(path_plus_name,"rb");
+                       bzfd=BZ2_bzReadOpen(&bzerror,fd,0,0,NULL,0);
+               }
+
                if (fd!=NULL && bzerror==BZ_OK)
                {
                        fprintf(stdout,"Loading \"%s\" into slot %d...",path_plus_name,indx+1);
@@ -1151,56 +1227,72 @@ int LoadSDF_BZ(char *name)
                                for (y=0; y<1200; y++)
                                {
                                        sscanf(BZfgets(bzfd,20),"%d",&data);
+
                                        dem[indx].data[x][y]=data;
 
                                        if (data>dem[indx].max_el)
                                                dem[indx].max_el=data;
 
-                                       if (dem[indx].min_el==0)
+                                       if (data<dem[indx].min_el)
                                                dem[indx].min_el=data;
-                                       else
-                                       {
-                                                if (data<dem[indx].min_el)
-                                                       dem[indx].min_el=data;
-                                       }
                                }
 
                        fclose(fd);
 
                        BZ2_bzReadClose(&bzerror,bzfd);
 
-                       if (min_elevation==0)
+                       if (dem[indx].min_el<min_elevation)
                                min_elevation=dem[indx].min_el;
-
-                       else
-                       {
-                               if (dem[indx].min_el<min_elevation)
-                                       min_elevation=dem[indx].min_el;
-                       }
        
                        if (dem[indx].max_el>max_elevation)
                                max_elevation=dem[indx].max_el;
 
-                       if (dem[indx].max_north>max_north)
+                       if (max_north==-90)
                                max_north=dem[indx].max_north;
 
-                       if (dem[indx].max_west>max_west)
-                               max_west=dem[indx].max_west;
+                       else if (dem[indx].max_north>max_north)
+                               max_north=dem[indx].max_north;
+
+                       if (min_north==90)
+                               min_north=dem[indx].min_north;
 
-                       if (min_north==0)
+                       else if (dem[indx].min_north<min_north)
                                min_north=dem[indx].min_north;
+
+                       if (max_west==-1)
+                               max_west=dem[indx].max_west;
+
                        else
                        {
-                               if (dem[indx].min_north<min_north)
-                                       min_north=dem[indx].min_north;
+                               if (abs(dem[indx].max_west-max_west)<180)
+                               {
+                                       if (dem[indx].max_west>max_west)
+                                               max_west=dem[indx].max_west;
+                               }
+
+                               else
+                               {
+                                       if (dem[indx].max_west<max_west)
+                                               max_west=dem[indx].max_west;
+                               }
                        }
 
-                       if (min_west==0)
+                       if (min_west==360)
                                min_west=dem[indx].min_west;
+
                        else
                        {
-                               if (dem[indx].min_west<min_west)
-                                       min_west=dem[indx].min_west;
+                               if (abs(dem[indx].min_west-min_west)<180)
+                               {
+                                       if (dem[indx].min_west<min_west)
+                                               min_west=dem[indx].min_west;
+                               }
+
+                               else
+                               {
+                                       if (dem[indx].min_west>min_west)
+                                               min_west=dem[indx].min_west;
+                               }
                        }
 
                        fprintf(stdout," Done!\n");
@@ -1250,11 +1342,8 @@ char LoadSDF(char *name)
 
                for (indx=0, found=0; indx<MAXSLOTS && found==0; indx++)
                {
-                       if (minlat!=0 && minlon!=0)
-                       {
-                               if (minlat==dem[indx].min_north && minlon==dem[indx].min_west && maxlat==dem[indx].max_north && maxlon==dem[indx].max_west)
-                                       found=1;
-                       }
+                       if (minlat==dem[indx].min_north && minlon==dem[indx].min_west && maxlat==dem[indx].max_north && maxlon==dem[indx].max_west)
+                               found=1;
                }
 
                /* Is room available to load it? */
@@ -1262,13 +1351,13 @@ char LoadSDF(char *name)
                if (found==0)
                {       
                        for (indx=0, free_slot=0; indx<MAXSLOTS && free_slot==0; indx++)
-                               if (dem[indx].max_north==0 && dem[indx].max_west==0)
+                               if (dem[indx].max_north==-90)
                                        free_slot=1;
                }
 
                indx--;
 
-               if (free_slot && found==0 && indx>=0 && indx<MAXSLOTS && minlat!=0 && minlon!=0)
+               if (free_slot && found==0 && indx>=0 && indx<MAXSLOTS)
                {
                        fprintf(stdout,"Region  \"%s\" assumed as sea-level into slot %d...",name,indx+1);
                        fflush(stdout);
@@ -1278,6 +1367,8 @@ char LoadSDF(char *name)
                        dem[indx].min_west=minlon;
                        dem[indx].max_north=maxlat;
 
+                       /* Fill DEM with sea-level topography */
+
                        for (x=0; x<1200; x++)
                                for (y=0; y<1200; y++)
                                {
@@ -1293,26 +1384,52 @@ char LoadSDF(char *name)
                        if (dem[indx].max_el>max_elevation)
                                max_elevation=dem[indx].max_el;
 
-                       if (dem[indx].max_north>max_north)
+                       if (max_north==-90)
                                max_north=dem[indx].max_north;
 
-                       if (dem[indx].max_west>max_west)
-                               max_west=dem[indx].max_west;
+                       else if (dem[indx].max_north>max_north)
+                               max_north=dem[indx].max_north;
 
-                       if (min_north==0)
+                       if (min_north==90)
                                min_north=dem[indx].min_north;
+
+                       else if (dem[indx].min_north<min_north)
+                               min_north=dem[indx].min_north;
+
+                       if (max_west==-1)
+                               max_west=dem[indx].max_west;
+
                        else
                        {
-                               if (dem[indx].min_north<min_north)
-                                       min_north=dem[indx].min_north;
+                               if (abs(dem[indx].max_west-max_west)<180)
+                               {
+                                       if (dem[indx].max_west>max_west)
+                                               max_west=dem[indx].max_west;
+                               }
+
+                               else
+                               {
+                                       if (dem[indx].max_west<max_west)
+                                               max_west=dem[indx].max_west;
+                               }
                        }
 
-                       if (min_west==0)
+                       if (min_west==360)
                                min_west=dem[indx].min_west;
+
                        else
                        {
-                               if (dem[indx].min_west<min_west)
-                                       min_west=dem[indx].min_west;
+                               if (abs(dem[indx].min_west-min_west)<180)
+                               {
+                                       if (dem[indx].min_west<min_west)
+                                               min_west=dem[indx].min_west;
+                               }
+
+                               else
+                               {
+                                       if (dem[indx].min_west>min_west)
+                                               min_west=dem[indx].min_west;
+                               }
                        }
 
                        fprintf(stdout," Done!\n");
@@ -1415,7 +1532,7 @@ void LoadBoundaries(char *filename)
                        do
                        {
                                sscanf(string,"%lf %lf", &lon1, &lat1);
-                       
+
                                lon0=fabs(lon0);
                                lon1=fabs(lon1);
 
@@ -1445,6 +1562,7 @@ void LoadBoundaries(char *filename)
                fprintf(stdout,"Done!\n");
                fflush(stdout);
        }
+
        else
                fprintf(stderr,"*** ERROR: \"%s\": not found!\n",filename);
 }
@@ -1794,7 +1912,7 @@ void PlotPath(struct site source, struct site destination, char mask_value)
                                cos_test_angle=((rx_alt*rx_alt)+(distance*distance)-(test_alt*test_alt))/(2.0*rx_alt*distance);
 
                                /* Compare these two angles to determine if
-                                  a blockage exists.  Since we're comparing
+                                  an obstruction exists.  Since we're comparing
                                   the cosines of these angles rather than
                                   the angles themselves, the following "if"
                                   statement is reversed from what it would
@@ -1828,8 +1946,7 @@ void PlotLRPath(struct site source, struct site destination)
         
        for (y=0; y<path.length; y++)
        {
-               /* Test this point only if it
-                  has not already been tested. */
+               /* Test this point only if it has not already been tested. */
 
                if (GetMask(path.lat[y],path.lon[y])==0 && 0.04*y<=max_range)
                {
@@ -1841,8 +1958,9 @@ void PlotLRPath(struct site source, struct site destination)
                        LR.frq_mhz, LR.radio_climate, LR.pol, LR.conf, LR.rel,
                        loss, strmode, errnum);
 
-                       /* Note: PASS BY REFERENCE ... loss and errnum are pass
-                       by reference, only used in this file by this function */
+                       /* Note: PASS BY REFERENCE ... loss and errnum are
+                          passed by reference, and are only used in this
+                          file by this function */
 
                        if (loss>225.0)
                                loss=225.0;
@@ -1873,7 +1991,7 @@ void PlotCoverage(struct site source, double altitude)
           of a topographic map when the WritePPM() function
           is later invoked. */
 
-       double lat, lon, one_pixel;
+       float lat, lon, one_pixel;
        static unsigned char mask_value;
        int z, count;
        struct site edge;
@@ -1899,10 +2017,13 @@ void PlotCoverage(struct site source, double altitude)
        /* 18.75=1200 pixels/degree divided by 64 loops
           per progress indicator symbol (.oOo) printed. */
 
-       z=(int)(18.75*(max_west-min_west));
+       z=(int)(18.75*ReduceAngle(max_west-min_west));
 
-       for (lon=min_west, x=0; lon<=max_west; lon+=one_pixel)
+       for (lon=min_west, x=0; (LonDiff(lon,max_west)<=0.0); lon+=one_pixel)
        {
+               if (lon>=360.0)
+                       lon-=360.0;
+
                edge.lat=max_north;
                edge.lon=lon;
                edge.alt=altitude;
@@ -1955,10 +2076,13 @@ void PlotCoverage(struct site source, double altitude)
        fprintf(stdout,"\n50%c to  75%c ",37,37);
        fflush(stdout);
 
-       z=(int)(18.75*(max_west-min_west));
+       z=(int)(18.75*ReduceAngle(max_west-min_west));
 
-       for (lon=min_west, x=0; lon<=max_west; lon+=one_pixel)
+       for (lon=min_west, x=0; (LonDiff(lon,max_west)<=0.0); lon+=one_pixel)
        {
+               if (lon>=360.0)
+                       lon-=360.0;
+
                edge.lat=min_north;
                edge.lon=lon;
                edge.alt=altitude;
@@ -2040,7 +2164,7 @@ void PlotLRMap(struct site source, double altitude)
 
        int z, count;
        struct site edge;
-       double lat, lon, one_pixel;
+       float lat, lon, one_pixel;
        unsigned char symbol[4], x;
 
        one_pixel=1.0/1200.0;
@@ -2059,10 +2183,13 @@ void PlotLRMap(struct site source, double altitude)
        /* 18.75=1200 pixels/degree divided by 64 loops
           per progress indicator symbol (.oOo) printed. */
 
-       z=(int)(18.75*(max_west-min_west));
+       z=(int)(18.75*ReduceAngle(max_west-min_west));
 
-       for (lon=min_west, x=0; lon<=max_west; lon+=one_pixel)
+       for (lon=min_west, x=0; (LonDiff(lon,max_west)<=0.0); lon+=one_pixel)
        {
+               if (lon>=360.0)
+                       lon-=360.0;
+
                edge.lat=max_north;
                edge.lon=lon;
                edge.alt=altitude;
@@ -2115,10 +2242,13 @@ void PlotLRMap(struct site source, double altitude)
        fprintf(stdout,"\n50%c to  75%c ",37,37);
        fflush(stdout);
 
-       z=(int)(18.75*(max_west-min_west));
+       z=(int)(18.75*ReduceAngle(max_west-min_west));
 
-       for (lon=min_west, x=0; lon<=max_west; lon+=one_pixel)
+       for (lon=min_west, x=0; (LonDiff(lon,max_west)<=0.0); lon+=one_pixel)
        {
+               if (lon>=360.0)
+                       lon-=360.0;
+
                edge.lat=min_north;
                edge.lon=lon;
                edge.alt=altitude;
@@ -2180,19 +2310,19 @@ void WritePPM(char *filename)
           from its representation in dem[][] so that north points
           up and east points right in the image generated. */
 
-       int indx, x, x0, y0, minlat, minlon;
-       unsigned width, height, output;
-       unsigned char found, mask;
        char mapfile[255];
-       double conversion, lat, lon, one_over_gamma, one_pixel;
+       unsigned char found, mask;
+       unsigned width, height, output;
+       int indx, x, y, x0=0, y0=0, minlat, minlon;
+       float lat, lon, one_pixel, conversion, one_over_gamma;
        FILE *fd;
 
        one_pixel=1.0/1200.0;
        one_over_gamma=1.0/GAMMA;
        conversion=255.0/pow((double)(max_elevation-min_elevation),one_over_gamma);
 
-       width=1200*(max_west-min_west);
-       height=1200*(max_north-min_north);
+       width=(unsigned)(1200*ReduceAngle(max_west-min_west));
+       height=(unsigned)(1200*ReduceAngle(max_north-min_north));
 
        if (filename[0]==0)
                strncpy(mapfile, "map.ppm\0",8);
@@ -2215,11 +2345,15 @@ void WritePPM(char *filename)
        fprintf(stdout,"\nWriting \"%s\" (%ux%u pixmap image)... ",mapfile,width,height);
        fflush(stdout);
 
-       for (lat=(double)max_north; lat>=(double)min_north; lat-=one_pixel)
+       for (y=0, lat=((double)max_north)-one_pixel; y<(int)height; y++, lat-=one_pixel)
        {
-               for (lon=(double)max_west; lon>=(double)min_west; lon-=one_pixel)
+               minlat=(int)floor(lat);
+
+               for (x=0, lon=((double)max_west)-one_pixel; x<(int)width; x++, lon-=one_pixel)
                {
-                       minlat=(int)floor(lat);
+                       if (lon<0.0)
+                               lon+=360.0;
+
                        minlon=(int)floor(lon);
 
                        for (indx=0, found=0; indx<MAXSLOTS && found==0;)
@@ -2227,10 +2361,11 @@ void WritePPM(char *filename)
                                        found=1;
                                else
                                        indx++;
+
                        if (found)
                        {
-                               x0=(int)((1199.0*(lat-floor(lat)))+0.5);
-                               y0=(int)((1199.0*(lon-floor(lon)))+0.5);
+                               x0=(int)(1199.0*(lat-floor(lat)));
+                               y0=(int)(1199.0*(lon-floor(lon)));
 
                                mask=dem[indx].mask[x0][y0];
 
@@ -2331,6 +2466,14 @@ void WritePPM(char *filename)
                                        }
                                }
                        }
+
+                       else
+                       {
+                               /* We should never get here, but if */
+                               /* we do, display the region as black */
+
+                               fprintf(fd,"%c%c%c",0,0,0);
+                       }
                }
        }
 
@@ -2347,19 +2490,19 @@ void WritePPMLR(char *filename)
           90 degrees from its representation in dem[][] so that north
           points up and east points right in the image generated. */
 
-       int indx, x, t, t2, x0, y0, minlat, minlon;
-       unsigned width, height, output;
-       unsigned char found, mask;
        char mapfile[255];
-       double conversion, lat, lon, one_over_gamma, one_pixel;
+       unsigned width, height, output;
+       unsigned char found, mask, cityorcounty;
+       int indx, x, y, t, t2, x0, y0, minlat, minlon, loss;
+       float lat, lon, one_pixel, conversion, one_over_gamma;
        FILE *fd;
 
        one_pixel=1.0/1200.0;
        one_over_gamma=1.0/GAMMA;
        conversion=255.0/pow((double)(max_elevation-min_elevation),one_over_gamma);
 
-       width=1200*(max_west-min_west);
-       height=1200*(max_north-min_north);
+       width=(unsigned)(1200*ReduceAngle(max_west-min_west));
+       height=(unsigned)(1200*ReduceAngle(max_north-min_north));
 
        if (filename[0]==0)
                strncpy(mapfile, "map.ppm\0",8);
@@ -2382,11 +2525,15 @@ void WritePPMLR(char *filename)
        fprintf(stdout,"\nWriting \"%s\" (%ux%u pixmap image)... ",mapfile,width,height+30);
        fflush(stdout);
 
-       for (lat=(double)max_north; lat>=(double)min_north; lat-=one_pixel)
+       for (y=0, lat=((double)max_north)-one_pixel; y<(int)height; y++, lat-=one_pixel)
        {
-               for (lon=(double)max_west; lon>=(double)min_west; lon-=one_pixel)
+               minlat=(int)floor(lat);
+
+               for (x=0, lon=((double)max_west)-one_pixel; x<(int)width; x++, lon-=one_pixel)
                {
-                       minlat=(int)floor(lat);
+                       if (lon<0.0)
+                               lon+=360.0;
+
                        minlon=(int)floor(lon);
 
                        for (indx=0, found=0; indx<MAXSLOTS && found==0;)
@@ -2396,150 +2543,145 @@ void WritePPMLR(char *filename)
                                        indx++;
                        if (found)
                        {
-                               x0=(int)((1199.0*(lat-floor(lat)))+0.5);
-                               y0=(int)((1199.0*(lon-floor(lon)))+0.5);
+                               x0=(int)(1199.0*(lat-floor(lat)));
+                               y0=(int)(1199.0*(lon-floor(lon)));
 
                                mask=dem[indx].mask[x0][y0];
+                               loss=70+(10*(int)((mask&248)>>3));
+                               cityorcounty=0;
 
                                if (mask&2)
                                {
                                        /* Text Labels - Black or Red */
-                                       if (mask&120)
+
+                                       /* if ((mask&120) && (loss<=maxdB)) */
+                                       if ((mask&120) && (loss<=90))
                                                fprintf(fd,"%c%c%c",0,0,0);
                                        else
                                                fprintf(fd,"%c%c%c",255,0,0);
+
+                                       cityorcounty=1;
                                }
 
                                else if (mask&4)
+                               {
                                        /* County Boundaries: Black */
-                                       fprintf(fd,"%c%c%c",0,0,0);
 
-                               else if (mask&1 && !((mask&248)==192))
-                               {
-                                       /* Outside Analysis Range */
-                                       /* Display Greyscale / Sea Level */
+                                       fprintf(fd,"%c%c%c",0,0,0);
 
-                                       if (dem[indx].data[x0][y0]==0)
-                                               fprintf(fd,"%c%c%c",0,0,170);
-                                       else
-                                       {
-                                               output=(unsigned)(0.5+pow((double)(dem[indx].data[x0][y0]-min_elevation),one_over_gamma)*conversion);
-                                               fprintf(fd,"%c%c%c",output,output,output);
-                                       }
+                                       cityorcounty=1;
                                }
 
-                               else switch ((mask&248)>>3)
+                               if (cityorcounty==0)
                                {
-                                       case 0:
-                                       /* Inside range, but no coverage.
-                                          Display Sea Level / Terrain */
+                                       if (loss>maxdB)
+
+                                       { /* Display land or sea elevation */
+
+                                               if (dem[indx].data[x0][y0]==0)
+                                                       fprintf(fd,"%c%c%c",0,0,170);
+                                               else
+                                               {
+                                                       /* Elevation: Greyscale */
+                                                       output=(unsigned)(0.5+pow((double)(dem[indx].data[x0][y0]-min_elevation),one_over_gamma)*conversion);
+                                                       fprintf(fd,"%c%c%c",output,output,output);
+                                               }
+                                       }
 
-                                       if (dem[indx].data[x0][y0]==0)
-                                               fprintf(fd,"%c%c%c",0,0,170);
-                                       else
+                                       else switch (loss)
                                        {
-                                               /* Elevation: Greyscale */
-                                               output=(unsigned)(0.5+pow((double)(dem[indx].data[x0][y0]-min_elevation),one_over_gamma)*conversion);
-                                               fprintf(fd,"%c%c%c",output,output,output);
-                                       }
+                                               /* Plot signal loss in color */
 
-                                       break;
+                                               case 80:
+                                               fprintf(fd,"%c%c%c",255,0,0);
+                                               break;
 
-                                       case 1:
-                                       /* Green */
-                                       fprintf(fd,"%c%c%c",0,255,0);
-                                       break;
+                                               case 90:
+                                               fprintf(fd,"%c%c%c",255,128,0);
+                                               break;
 
-                                       case 2:
-                                       /* Pink */
-                                       fprintf(fd,"%c%c%c",255,192,203);
-                                       break;
+                                               case 100:
+                                               fprintf(fd,"%c%c%c",255,165,0);
+                                               break;
 
-                                       case 3:
-                                       /* Cyan */
-                                       fprintf(fd,"%c%c%c",0,255,255);
-                                       break;
+                                               case 110:
+                                               fprintf(fd,"%c%c%c",255,206,0);
+                                               break;
 
-                                       case 4:
-                                       /* Yellow */
-                                       fprintf(fd,"%c%c%c",255,255,0);
-                                       break;
+                                               case 120:
+                                               fprintf(fd,"%c%c%c",255,255,0);
+                                               break;
 
-                                       case 5:
-                                       /* Medium Violet */
-                                       fprintf(fd,"%c%c%c",161,131,224);
-                                       break;
+                                               case 130:
+                                               fprintf(fd,"%c%c%c",184,255,0);
+                                               break;
 
-                                       case 6:
-                                       /* Orange */
-                                       fprintf(fd,"%c%c%c",255,165,0);
-                                       break;
+                                               case 140:
+                                               fprintf(fd,"%c%c%c",0,255,0);
+                                               break;
 
-                                       case 7:
-                                       /* Light Green */
-                                       fprintf(fd,"%c%c%c",193,255,193);
-                                       break;
+                                               case 150:
+                                               fprintf(fd,"%c%c%c",0,208,0);
+                                               break;
 
-                                       case 8:
-                                       /* Red Pink */
-                                       fprintf(fd,"%c%c%c",255,108,108);
-                                       break;
+                                               case 160:
+                                               fprintf(fd,"%c%c%c",0,196,196);
+                                               break;
 
-                                       case 9:
-                                       /* TX1 + TX4: Green Yellow */
-                                       fprintf(fd,"%c%c%c",173,255,47);
-                                       break;
+                                               case 170:
+                                               fprintf(fd,"%c%c%c",0,148,255);
+                                               break;
 
-                                       case 10:
-                                       /* Blanched Almond */
-                                       fprintf(fd,"%c%c%c",255,235,184);
-                                       break;
+                                               case 180:
+                                               fprintf(fd,"%c%c%c",80,80,255);
+                                               break;
 
-                                       case 11:
-                                       /* Dark Turquoise */
-                                       fprintf(fd,"%c%c%c",0,206,209);
-                                       break;
+                                               case 190:
+                                               fprintf(fd,"%c%c%c",0,38,255);
+                                               break;
 
-                                       case 12:
-                                       /* Tan */
-                                       fprintf(fd,"%c%c%c",210,180,140);
-                                       break;
+                                               case 200:
+                                               fprintf(fd,"%c%c%c",142,63,255);
+                                               break;
 
-                                       case 13:
-                                       /* Magenta 1 */
-                                       fprintf(fd,"%c%c%c",243,110,205);
-                                       break;
+                                               case 210:
+                                               fprintf(fd,"%c%c%c",196,54,255);
+                                               break;
 
-                                       case 14:
-                                       /* Gold2 */
-                                       fprintf(fd,"%c%c%c",238,201,0);
-                                       break;
+                                               case 220:
+                                               fprintf(fd,"%c%c%c",255,0,255);
+                                               break;
 
-                                       case 15:
-                                       /* Medium Spring Green */
-                                       fprintf(fd,"%c%c%c",0,250,154);
-                                       break;
+                                               case 230:
+                                               fprintf(fd,"%c%c%c",255,194,204);
+                                               break;
 
-                                       case 16:
-                                       /* Very light Blue */
-                                       fprintf(fd,"%c%c%c",244,244,255);
-                                       break;
+                                               default:
 
-                                       default:
-                                       /* Land / Sea */
-                                       if (dem[indx].data[x0][y0]==0)
-                                               fprintf(fd,"%c%c%c",0,0,170);
-                                       else
-                                       {
-                                               /* Elevation: Greyscale */
-                                               output=(unsigned)(0.5+pow((double)(dem[indx].data[x0][y0]-min_elevation),one_over_gamma)*conversion);
-                                               fprintf(fd,"%c%c%c",output,output,output);
+                                               if (dem[indx].data[x0][y0]==0)
+                                                       fprintf(fd,"%c%c%c",0,0,170);
+                                               else
+                                               {
+                                                       /* Elevation: Greyscale */
+                                                       output=(unsigned)(0.5+pow((double)(dem[indx].data[x0][y0]-min_elevation),one_over_gamma)*conversion);
+                                                       fprintf(fd,"%c%c%c",output,output,output);
+                                               }
                                        }
                                }
                        }
+
+                       else
+                       {
+                               /* We should never get here, but if */
+                               /* we do, display the region as black */
+
+                               fprintf(fd,"%c%c%c",0,0,0);
+                       }
                }
        }
 
+       /* Display legend along bottom of image */
+
        x0=width/16;
 
        for (y0=0; y0<30; y0++)
@@ -2572,78 +2714,63 @@ void WritePPMLR(char *filename)
                                switch (t)
                                {
                                        case 0:
-                                       /* Green */
-                                       fprintf(fd,"%c%c%c",0,255,0);
+                                       fprintf(fd,"%c%c%c",255,0,0);
                                        break;
 
                                        case 1:
-                                       /* Pink */
-                                       fprintf(fd,"%c%c%c",255,192,203);
+                                       fprintf(fd,"%c%c%c",255,128,0);
                                        break;
 
                                        case 2:
-                                       /* Cyan */
-                                       fprintf(fd,"%c%c%c",0,255,255);
+                                       fprintf(fd,"%c%c%c",255,165,0);
                                        break;
 
                                        case 3:
-                                       /* Yellow */
-                                       fprintf(fd,"%c%c%c",255,255,0);
+                                       fprintf(fd,"%c%c%c",255,206,0);
                                        break;
 
                                        case 4:
-                                       /* Medium Violet */
-                                       fprintf(fd,"%c%c%c",161,131,224);
+                                       fprintf(fd,"%c%c%c",255,255,0);
                                        break;
 
                                        case 5:
-                                       /* Orange */
-                                       fprintf(fd,"%c%c%c",255,165,0);
+                                       fprintf(fd,"%c%c%c",184,255,0);
                                        break;
 
-                                       case 6:
-                                       /* Light Green */
-                                       fprintf(fd,"%c%c%c",193,255,193);
+                                       case 6:
+                                       fprintf(fd,"%c%c%c",0,255,0);
                                        break;
 
-                                       case 7:
-                                       /* Red Pink */
-                                       fprintf(fd,"%c%c%c",255,108,108);
+                                       case 7:
+                                       fprintf(fd,"%c%c%c",0,208,0);
                                        break;
 
                                        case 8:
-                                       /* Green Yellow */
-                                       fprintf(fd,"%c%c%c",173,255,47);
+                                       fprintf(fd,"%c%c%c",0,196,196);
                                        break;
 
                                        case 9:
-                                       /* Blanched Almond */
-                                       fprintf(fd,"%c%c%c",255,235,184);
+                                       fprintf(fd,"%c%c%c",0,148,255);
                                        break;
 
                                        case 10:
-                                       /* Dark Turquoise */
-                                       fprintf(fd,"%c%c%c",0,206,209);
+                                       fprintf(fd,"%c%c%c",80,80,255);
                                        break;
 
                                        case 11:
-                                       /* Tan */
-                                       fprintf(fd,"%c%c%c",210,180,140);
+                                       fprintf(fd,"%c%c%c",0,38,255);
                                        break;
 
                                        case 12:
-                                       /* Magenta 1 */
-                                       fprintf(fd,"%c%c%c",243,110,205);
+                                       fprintf(fd,"%c%c%c",142,63,255);
                                        break;
 
                                        case 13:
-                                       /* Gold2 */
-                                       fprintf(fd,"%c%c%c",238,201,0);
+                                       fprintf(fd,"%c%c%c",196,54,255);
                                        break;
 
                                        case 14:
-                                       /* Medium Spring Green */
-                                       fprintf(fd,"%c%c%c",0,250,154);
+                                       fprintf(fd,"%c%c%c",255,0,255);
                                        break;
 
                                        case 255:
@@ -2652,8 +2779,7 @@ void WritePPMLR(char *filename)
                                        break;
 
                                        default:
-                                       /* Very Light Blue */
-                                       fprintf(fd,"%c%c%c",244,244,255);
+                                       fprintf(fd,"%c%c%c",255,194,204);
                                }
                        } 
                }
@@ -2884,11 +3010,11 @@ void GraphHeight(struct site source, struct site destination, char *name)
 {
        /* This function invokes gnuplot to generate an appropriate
           output file indicating the terrain profile between the source
-          and destination locations.  What is plotted is the height of land
-          above or below a straight line between the receibe and transmit
-          sites. "filename" is the name assigned to the output file
-          generated by gnuplot.  The filename extension is used to
-          set gnuplot's terminal setting and output file type.
+          and destination locations.  What is plotted is the height of
+          land above or below a straight line between the receibe and
+          transmit sites.  "filename" is the name assigned to the output
+          file generated by gnuplot.  The filename extension is used
+          to set gnuplot's terminal setting and output file type.
           If no extension is found, .gif is assumed. */
 
        int x, y, z;
@@ -3003,7 +3129,7 @@ void GraphHeight(struct site source, struct site destination, char *name)
        fprintf(fd,"plot \"profile.gp\" title \"Real Earth Profile\" with lines, \"reference.gp\" title \"Line Of Sight Path\" with lines\n");
 
        fclose(fd);
-                       
+
        x=system("gnuplot splat.gp");
 
        if (x!=-1)
@@ -3046,8 +3172,20 @@ void GraphLongley(struct site source, struct site destination, char *name)
        fprintf(fd2,"Analysis of RF path conditions between %s and %s:\n",source.name, destination.name);
        fprintf(fd2,"\n-------------------------------------------------------------------------\n\n");
        fprintf(fd2,"Transmitter site: %s\n",source.name);
-       fprintf(fd2,"Site location: %.4f North / %.4f West",source.lat, source.lon);
-       fprintf(fd2, " (%s N / ", dec2dms(source.lat));
+
+       if (source.lat>=0.0)
+       {
+               fprintf(fd2,"Site location: %.4f North / %.4f West",source.lat, source.lon);
+               fprintf(fd2, " (%s N / ", dec2dms(source.lat));
+       }
+
+       else
+       {
+
+               fprintf(fd2,"Site location: %.4f South / %.4f West",-source.lat, source.lon);
+               fprintf(fd2, " (%s S / ", dec2dms(source.lat));
+       }
+       
        fprintf(fd2, "%s W)\n", dec2dms(source.lon));
        fprintf(fd2,"Ground elevation: %.2f feet AMSL\n",GetElevation(source));
        fprintf(fd2,"Antenna height: %.2f feet AGL / %.2f feet AMSL\n",source.alt, source.alt+GetElevation(source));
@@ -3073,8 +3211,19 @@ void GraphLongley(struct site source, struct site destination, char *name)
        /* Receiver */
 
        fprintf(fd2,"Receiver site: %s\n",destination.name);
-       fprintf(fd2,"Site location: %.4f North / %.4f West",destination.lat, destination.lon);
-       fprintf(fd2, " (%s N / ", dec2dms(destination.lat));
+
+       if (destination.lat>=0.0)
+       {
+               fprintf(fd2,"Site location: %.4f North / %.4f West",destination.lat, destination.lon);
+               fprintf(fd2, " (%s N / ", dec2dms(destination.lat));
+       }
+
+       else
+       {
+               fprintf(fd2,"Site location: %.4f South / %.4f West",-destination.lat, destination.lon);
+               fprintf(fd2, " (%s S / ", dec2dms(destination.lat));
+       }
+
        fprintf(fd2, "%s W)\n", dec2dms(destination.lon));
        fprintf(fd2,"Ground elevation: %.2f feet AMSL\n",GetElevation(destination));
        fprintf(fd2,"Antenna height: %.2f feet AGL / %.2f feet AMSL\n",destination.alt, destination.alt+GetElevation(destination));
@@ -3174,12 +3323,14 @@ void GraphLongley(struct site source, struct site destination, char *name)
                        LR.frq_mhz, LR.radio_climate, LR.pol, LR.conf, LR.rel,
                        loss, strmode, errnum);
 
-                       /* Note: PASS BY REFERENCE ... loss and errnum are pass
-                       by reference, only used in this file by this function */
+                       /* Note: PASS BY REFERENCE ... loss and errnum are
+                          passed by reference, and are only used in this
+                          file by this function */
 
 
                fprintf(fd,"%f\t%f\n",path.distance[path.length-1]-path.distance[x],loss);
-               fprintf(fd2,"%7.2f\t\t%7.2f\t\t  %d\t%s\n",path.distance[x],loss, errnum, strmode); 
+               fprintf(fd2,"%7.2f\t\t%7.2f\t\t  %d\t%s\n",path.distance[x],loss, errnum, strmode);
+
                errflag|=errnum;
                  
                if (loss>maxloss)
@@ -3310,8 +3461,20 @@ void ObstructionReport(struct site xmtr, struct site rcvr, char report)
        fprintf(fd,"Analysis of line-of-sight path conditions between %s and %s:\n",xmtr.name, rcvr.name);
        fprintf(fd,"\n-------------------------------------------------------------------------\n\n");
        fprintf(fd,"Transmitter site: %s\n",xmtr.name);
-       fprintf(fd,"Site location: %.4f North / %.4f West",xmtr.lat, xmtr.lon);
-       fprintf(fd, " (%s N / ", dec2dms(xmtr.lat));
+
+
+       if (xmtr.lat>=0.0)
+       {
+               fprintf(fd,"Site location: %.4f North / %.4f West",xmtr.lat, xmtr.lon);
+               fprintf(fd, " (%s N / ", dec2dms(xmtr.lat));
+       }
+
+       else
+       {
+               fprintf(fd,"Site location: %.4f South / %.4f West",-xmtr.lat, xmtr.lon);
+               fprintf(fd, " (%s S / ", dec2dms(xmtr.lat));
+       }
+
        fprintf(fd, "%s W)\n", dec2dms(xmtr.lon));
        fprintf(fd,"Ground elevation: %.2f feet AMSL\n",GetElevation(xmtr));
        fprintf(fd,"Antenna height: %.2f feet AGL / %.2f feet AMSL\n",xmtr.alt, xmtr.alt+GetElevation(xmtr));
@@ -3337,8 +3500,19 @@ void ObstructionReport(struct site xmtr, struct site rcvr, char report)
        /* Receiver */
 
        fprintf(fd,"Receiver site: %s\n",rcvr.name);
-       fprintf(fd,"Site location: %.4f North / %.4f West",rcvr.lat, rcvr.lon);
-       fprintf(fd, " (%s N / ", dec2dms(rcvr.lat));
+
+       if (rcvr.lat>=0.0)
+       {
+               fprintf(fd,"Site location: %.4f North / %.4f West",rcvr.lat, rcvr.lon);
+               fprintf(fd, " (%s N / ", dec2dms(rcvr.lat));
+       }
+
+       else
+       {
+               fprintf(fd,"Site location: %.4f South / %.4f West",-rcvr.lat, rcvr.lon);
+               fprintf(fd, " (%s S / ", dec2dms(rcvr.lat));
+       }
+
        fprintf(fd, "%s W)\n", dec2dms(rcvr.lon));
        fprintf(fd,"Ground elevation: %.2f feet AMSL\n",GetElevation(rcvr));
        fprintf(fd,"Antenna height: %.2f feet AGL / %.2f feet AMSL\n",rcvr.alt, rcvr.alt+GetElevation(rcvr));
@@ -3377,7 +3551,13 @@ void ObstructionReport(struct site xmtr, struct site rcvr, char report)
                while (block=='*')
                {
                        if (result.lat!=result2.lat || result.lon!=result2.lon || result.alt!=result2.alt)
-                               fprintf(fd,"\t%.4f N, %.4f W, %5.2f miles, %6.2f feet AMSL.\n",result.lat, result.lon, Distance(rcvr,result), result.alt);
+                       {
+                               if (result.lat>=0.0)
+                                       fprintf(fd,"\t%.4f N, %.4f W, %5.2f miles, %6.2f feet AMSL.\n",result.lat, result.lon, Distance(rcvr,result), result.alt);
+                               else
+
+                                       fprintf(fd,"\t%.4f S, %.4f W, %5.2f miles, %6.2f feet AMSL.\n",-result.lat, result.lon, Distance(rcvr,result), result.alt);
+                       }
 
                        result2=result;
                        new_site.alt+=1.0;
@@ -3422,8 +3602,19 @@ void SiteReport(struct site xmtr)
        fprintf(fd,"\n\t--==[ SPLAT! v%s Site Analysis Report For: %s ]==--\n\n",splat_version,xmtr.name);
 
        fprintf(fd,"---------------------------------------------------------------------------\n\n");
-       fprintf(fd,"Site location: %.4f North / %.4f West",xmtr.lat, xmtr.lon);
-       fprintf(fd, " (%s N / ",dec2dms(xmtr.lat));
+
+       if (xmtr.lat>=0.0)
+       {
+               fprintf(fd,"Site location: %.4f North / %.4f West",xmtr.lat, xmtr.lon);
+               fprintf(fd, " (%s N / ",dec2dms(xmtr.lat));
+       }
+
+       else
+       {
+               fprintf(fd,"Site location: %.4f South / %.4f West",-xmtr.lat, xmtr.lon);
+               fprintf(fd, " (%s S / ",dec2dms(xmtr.lat));
+       }
+
        fprintf(fd, "%s W)\n",dec2dms(xmtr.lon));
        fprintf(fd,"Ground elevation: %.2f feet AMSL\n",GetElevation(xmtr));
        fprintf(fd,"Antenna height: %.2f feet AGL / %.2f feet AMSL\n",xmtr.alt, xmtr.alt+GetElevation(xmtr));
@@ -3457,47 +3648,49 @@ void SiteReport(struct site xmtr)
 
 int main(char argc, char *argv[])
 {
+       int             x, y, ymin, ymax, width, z=0, min_lat, min_lon,
+                       max_lat, max_lon, rxlat, rxlon, txlat, txlon,
+                       west_min, west_max, north_min, north_max;
 
-       int             x, y, z=0;
-       unsigned char   rxlat, rxlon, txlat, txlon, min_lat,
-                       min_lon, max_lat, max_lon, 
-                       coverage=0, LRmap=0,
-                       ext[20], terrain_plot=0,
+       unsigned char   coverage=0, LRmap=0, ext[20], terrain_plot=0,
                        elevation_plot=0, height_plot=0, 
                        longley_plot=0, cities=0, bfs=0, txsites=0,
-                       count, west_min, west_max, north_min, north_max,
-                       report='y';
+                       count, report='y';
  
        char            mapfile[255], header[80], city_file[5][255], 
                        elevation_file[255], height_file[255], 
                        longley_file[255], terrain_file[255],
-                       string[255], rxfile[255],
-                       txfile[255], map=0, boundary_file[5][255];
+                       string[255], rxfile[255], *env=NULL,
+                       txfile[255], map=0, boundary_file[5][255],
+                       rxsite=0;
 
        double          altitude=0.0, altitudeLR=0.0, tx_range=0.0,
                        rx_range=0.0, deg_range=0.0, deg_limit,
                        deg_range_lon, er_mult;
+
        struct          site tx_site[4], rx_site;
+
        FILE            *fd;
 
-       sprintf(header,"\n  --==[ SPLAT! v%s Terrain Analysis Software (c) 1997-2004 KD2BD ]==--\n\n", splat_version);
+       sprintf(header,"\n\t\t--==[ Welcome To SPLAT! v%s ]==--\n\n", splat_version);
 
        if (argc==1)
        {
-               fprintf(stdout, "%sAvailable Options...\n\n\t-t txsite(s).qth (max of 4)\n\t-r rxsite.qth\n",header);
-               fprintf(stdout,"\t-c plot coverage area(s) of TX(s) based on an RX antenna at X feet AGL\n");
-               fprintf(stdout,"\t-L plot path loss map of TX based on an RX antenna at X feet AGL\n");
-               fprintf(stdout,"\t-s filename(s) of city/site file(s) to import (max of 5)\n");
-               fprintf(stdout,"\t-b filename(s) of cartographic boundary file(s) to import (max of 5)\n");
-               fprintf(stdout,"\t-p filename of terrain profile graph to plot\n");
-               fprintf(stdout,"\t-e filename of terrain elevation graph to plot\n");
-               fprintf(stdout,"\t-h filename of terrain height graph to plot\n");
-               fprintf(stdout,"\t-l filename of Longley-Rice graph to plot\n");
-               fprintf(stdout,"\t-o filename of topographic map to generate (.ppm)\n");
-               fprintf(stdout,"\t-d sdf file directory path (overrides path in ~/.splat_path file)\n");
-               fprintf(stdout,"\t-n no analysis, brief report\n\t-N no analysis, no report\n");
-               fprintf(stdout,"\t-m earth radius multiplier\n");
-               fprintf(stdout,"\t-R modify default range for -c or -L (miles)\n\n");
+               fprintf(stdout, "%sAvailable Options...\n\n\t -t txsite(s).qth (max of 4)\n\t -r rxsite.qth\n",header);
+               fprintf(stdout,"\t -c plot coverage area(s) of TX(s) based on an RX antenna at X feet AGL\n");
+               fprintf(stdout,"\t -L plot path loss map of TX based on an RX antenna at X feet AGL\n");
+               fprintf(stdout,"\t -s filename(s) of city/site file(s) to import (max of 5)\n");
+               fprintf(stdout,"\t -b filename(s) of cartographic boundary file(s) to import (max of 5)\n");
+               fprintf(stdout,"\t -p filename of terrain profile graph to plot\n");
+               fprintf(stdout,"\t -e filename of terrain elevation graph to plot\n");
+               fprintf(stdout,"\t -h filename of terrain height graph to plot\n");
+               fprintf(stdout,"\t -l filename of Longley-Rice graph to plot\n");
+               fprintf(stdout,"\t -o filename of topographic map to generate (.ppm)\n");
+               fprintf(stdout,"\t -d sdf file directory path (overrides path in ~/.splat_path file)\n");
+               fprintf(stdout,"\t -n no analysis, brief report\n\t -N no analysis, no report\n");
+               fprintf(stdout,"\t -m earth radius multiplier\n");
+               fprintf(stdout,"\t -R modify default range for -c or -L (miles)\n");
+               fprintf(stdout,"\t-db maximum loss contour to display on path loss maps (80-230 dB)\n\n");
 
                fprintf(stdout,"Type 'man splat', or see the documentation for more details.\n\n");
                fflush(stdout);
@@ -3514,20 +3707,27 @@ int main(char argc, char *argv[])
        terrain_file[0]=0;
        sdf_path[0]=0;
        path.length=0;
-       rx_site.lat=0.0;
-       rx_site.lon=0.0;
+       rx_site.lat=91.0;
+       rx_site.lon=361.0;
        earthradius=EARTHRADIUS;
 
+       for (x=0; x<4; x++)
+       {
+               tx_site[x].lat=91.0;
+               tx_site[x].lon=361.0;
+       }
+
        for (x=0; x<MAXSLOTS; x++)
        {
-               dem[x].min_el=0;
-               dem[x].max_el=0;
-               dem[x].min_north=0;
-               dem[x].max_north=0;
-               dem[x].min_west=0;
-               dem[x].max_west=0;
+               dem[x].min_el=32768;
+               dem[x].max_el=-32768;
+               dem[x].min_north=90;
+               dem[x].max_north=-90;
+               dem[x].min_west=360;
+               dem[x].max_west=-1;
        }
 
+
        /* Scan for command line arguments */
 
        for (x=1; x<=y; x++)
@@ -3586,6 +3786,24 @@ int main(char argc, char *argv[])
                        }
                }
 
+               if (strcmp(argv[x],"-db")==0)
+               {
+                       z=x+1;
+
+                       if (z<=y && argv[z][0] && argv[z][0]!='-')
+                       {
+                               sscanf(argv[z],"%d",&maxdB);
+
+                               maxdB=abs(maxdB);
+
+                               if (maxdB<80)
+                                       maxdB=80;
+
+                               if (maxdB>230)
+                                       maxdB=230;
+                       }                        
+               }
+
                if (strcmp(argv[x],"-p")==0)
                { 
                        z=x+1;
@@ -3702,6 +3920,7 @@ int main(char argc, char *argv[])
                        {
                                strncpy(rxfile,argv[z],253);
                                rx_site=LoadQTH(rxfile);
+                               rxsite=1;
                        }
                }
 
@@ -3749,7 +3968,7 @@ int main(char argc, char *argv[])
 
        for (x=0, y=0; x<txsites; x++)
        {
-               if (tx_site[x].lat==0.0 && tx_site[x].lon==0.0)
+               if (tx_site[x].lat==91.0 && tx_site[x].lon==361.0)
                {
                        fprintf(stderr,"\n*** ERROR: Transmitter site #%d not found!",x+1);
                        y++;
@@ -3762,7 +3981,7 @@ int main(char argc, char *argv[])
                exit (-1);
        }
 
-       if ((coverage+LRmap)==0 && rx_site.lat==0.0 && rx_site.lon==0.0)
+       if ((coverage+LRmap)==0 && rx_site.lat==91.0 && rx_site.lon==361.0)
        {
                fprintf(stderr,"\n%c*** ERROR: No receiver site found or specified!\n\n",7);
                exit (-1);
@@ -3778,7 +3997,8 @@ int main(char argc, char *argv[])
 
        if (sdf_path[0]==0)
        {
-               sprintf(string,"%s/.splat_path",getenv("HOME"));
+               env=getenv("HOME");
+               sprintf(string,"%s/.splat_path",env);
                fd=fopen(string,"r");
 
                if (fd!=NULL)
@@ -3815,87 +4035,121 @@ int main(char argc, char *argv[])
        x=0;
        y=0;
 
-       min_lat=0;
-       max_lat=0;
-       min_lon=0;
-       max_lon=0;
+       min_lat=90;
+       max_lat=-90;
 
-       rxlat=(unsigned char)floor(rx_site.lat);
-       rxlon=(unsigned char)floor(rx_site.lon);
+       min_lon=(int)floor(tx_site[0].lon);
+       max_lon=(int)floor(tx_site[0].lon);
 
-       if (rxlat!=0)
+       for (y=0, z=0; z<txsites; z++)
        {
-               if (min_lat==0)
-                       min_lat=rxlat;
+               txlat=(int)floor(tx_site[z].lat);
+               txlon=(int)floor(tx_site[z].lon);
 
-               else if (rxlat<min_lat)
-                       min_lat=rxlat;
+               if (txlat<min_lat)
+                       min_lat=txlat;
+
+               if (txlat>max_lat)
+                       max_lat=txlat;
+
+               if (LonDiff(txlon,min_lon)<0.0)
+                       min_lon=txlon;
+
+               if (LonDiff(txlon,max_lon)>0.0)
+                       max_lon=txlon;
        }
 
-       if (rxlon!=0)
+       if (rxsite)
        {
-               if (min_lon==0)
-                       min_lon=rxlon;
+               rxlat=(int)floor(rx_site.lat);
+               rxlon=(int)floor(rx_site.lon);
+
+               if (rxlat<min_lat)
+                       min_lat=rxlat;
 
-               else if (rxlon<min_lon)
+               if (rxlat>max_lat)
+                       max_lat=rxlat;
+
+               if (LonDiff(rxlon,min_lon)<0.0)
                        min_lon=rxlon;
+
+               if (LonDiff(rxlon,max_lon)>0.0)
+                       max_lon=rxlon;
        }
 
-       if (rxlat>max_lat)
-               max_lat=rxlat;
 
-       if (rxlon>max_lon)
-               max_lon=rxlon;
+       /* Load the required SDF files */ 
 
-       for (y=0, z=0; z<txsites; z++)
+       width=ReduceAngle(max_lon-min_lon);
+
+       if ((max_lon-min_lon)<=180.0)
        {
-               txlat=(unsigned char)floor(tx_site[z].lat);
-               txlon=(unsigned char)floor(tx_site[z].lon);
+               for (y=0; y<=width; y++)
+                       for (x=min_lat; x<=max_lat; x++)
+                       {
+                               ymin=(int)(min_lon+(double)y);
 
-               if (txlat!=0)
-               {
-                       if (min_lat==0)
-                               min_lat=txlat;
+                               while (ymin<0)
+                                       ymin+=360;
 
-                       else if (txlat<min_lat)
-                               min_lat=txlat;
-               }
+                               while (ymin>=360)
+                                       ymin-=360;
 
-               if (txlon!=0)
-               {
-                       if (min_lon==0)
-                               min_lon=txlon;
+                               ymax=ymin+1;
 
-                       else if (txlon<min_lon)
-                               min_lon=txlon;
-               }
+                               while (ymax<0)
+                                       ymax+=360;
 
-               if (txlat>max_lat)
-                       max_lat=txlat;
+                               while (ymax>=360)
+                                       ymax-=360;
 
-               if (txlon>max_lon)
-                       max_lon=txlon;
+                               sprintf(string,"%d:%d:%d:%d",x, x+1, ymin, ymax);
+                               LoadSDF(string);
+                       }
        }
 
-       if (min_lat!=0 && min_lon!=0 && max_lat!=0 && max_lon!=0)
+       else
        {
-               for (y=min_lon; y<=max_lon; y++)
+               for (y=0; y<=width; y++)
                        for (x=min_lat; x<=max_lat; x++)
                        {
-                               sprintf(string,"%u:%u:%u:%u",x, x+1, y, y+1);
+                               ymin=max_lon+y;
+
+                               while (ymin<0)
+                                       ymin+=360;
+
+                               while (ymin>=360)
+                                       ymin-=360;
+                                       
+                               ymax=ymin+1;
+
+                               while (ymax<0)
+                                       ymax+=360;
+
+                               while (ymax>=360)
+                                       ymax-=360;
+
+                               sprintf(string,"%d:%d:%d:%d",x, x+1, ymin, ymax);
                                LoadSDF(string);
                        }
        }
 
-       if (coverage)
+       if (coverage | LRmap)
        {
+               if (LRmap)
+                       txsites=1;
+
                for (z=0; z<txsites; z++)
                {
                        /* "Ball park" estimates used to load any additional
                           SDF files required to conduct this analysis. */
 
                        tx_range=sqrt(1.5*(tx_site[z].alt+GetElevation(tx_site[z])));
-                       rx_range=sqrt(1.5*altitude);
+
+                       if (LRmap)
+                               rx_range=sqrt(1.5*altitudeLR);
+                       else
+                               rx_range=sqrt(1.5*altitude);
 
                        /* deg_range determines the maximum
                           amount of topo data we read */
@@ -3950,149 +4204,111 @@ int main(char argc, char *argv[])
                        if (deg_range_lon>deg_limit)
                                deg_range_lon=deg_limit;
 
-                       north_min=(unsigned char)floor(tx_site[z].lat-deg_range);
-                       north_max=(unsigned char)floor(tx_site[z].lat+deg_range);
-                       west_min=(unsigned char)floor(tx_site[z].lon-deg_range_lon);
-                       west_max=(unsigned char)floor(tx_site[z].lon+deg_range_lon);
 
-                       if (min_lat==0)
-                               min_lat=north_min;
+                       north_min=(int)floor(tx_site[z].lat-deg_range);
+                       north_max=(int)floor(tx_site[z].lat+deg_range);
 
-                       else if (north_min<min_lat)
-                               min_lat=north_min;
+                       west_min=(int)floor(tx_site[z].lon-deg_range_lon);
 
-                       if (min_lon==0)
-                               min_lon=west_min;
+                       while (west_min<0)
+                               west_min+=360;
 
-                       else if (west_min<min_lon)
-                               min_lon=west_min;
+                       while (west_min>=360)
+                               west_min-=360;
 
-                       if (north_max>max_lat)
-                               max_lat=north_max;
+                       west_max=(int)floor(tx_site[z].lon+deg_range_lon);
 
-                       if (west_max>max_lon)
-                               max_lon=west_max;
-               }
+                       while (west_max<0)
+                               west_max+=360;
 
-               if (min_lat!=0 && min_lon!=0 && max_lat!=0 && max_lon!=0)
-               {
-                       for (y=min_lon; y<=max_lon; y++)
-                               for (x=min_lat; x<=max_lat; x++)
-                               {
-                                       sprintf(string,"%u:%u:%u:%u",x, x+1, y, y+1);
-                                       LoadSDF(string);
-                               }
-               }
-       }
+                       while (west_max>=360)
+                               west_max-=360;
 
-       if (LRmap)
-       {
-               /* "Ball park" estimates used to load any additional
-                  SDF files required to conduct this analysis. */
+                       if (north_min<min_lat)
+                               min_lat=north_min;
 
-               tx_range=sqrt(1.5*(tx_site[0].alt+GetElevation(tx_site[0])));
-               rx_range=sqrt(1.5*altitudeLR);
+                       if (north_max>max_lat)
+                               max_lat=north_max;
 
-               /**
-               tx_range=sqrt(5.0*tx_site[0].alt);
-               rx_range=sqrt(5.0*altitudeLR);
-               **/
+                       if (LonDiff(west_min,min_lon)<0.0)
+                               min_lon=west_min;
 
-               /* deg_range determines the maximum
-                  amount of topo data we read */
+                       if (LonDiff(west_max,max_lon)>0.0)
+                               max_lon=west_max;
+               }
 
-               deg_range=(tx_range+rx_range)/69.0;
 
-               /* max_range sets the maximum size of the
-                  analysis.  A small, non-zero amount can
-                  be used to shrink the size of the analysis
-                  and limit the amount of topo data read by
-                  SPLAT!  A very large number will only increase
-                  the width of the analysis, not the size of
-                  the map. */
+               /* Load the required SDF files */ 
 
-               if (max_range==0.0)
-                       max_range=tx_range+rx_range;
+               width=ReduceAngle(max_lon-min_lon);
 
-               if (max_range<(tx_range+rx_range))
-                       deg_range=max_range/69.0;
+               if ((max_lon-min_lon)<=180.0)
+               {
+                       for (y=0; y<=width; y++)
+                               for (x=min_lat; x<=max_lat; x++)
+                               {
+                                       ymin=(int)(min_lon+(double)y);
 
-               /* Prevent the demand for a really wide coverage
-                  from allocating more slots than are available
-                  in memory. */
+                                       while (ymin<0)
+                                               ymin+=360;
 
-               switch (MAXSLOTS)
-               {
-                       case 2: deg_limit=0.25;
-                               break;
+                                       while (ymin>=360)
+                                               ymin-=360;
 
-                       case 4: deg_limit=0.5;
-                               break;
+                                       ymax=ymin+1;
 
-                       case 9: deg_limit=1.0;
-                               break;
+                                       while (ymax<0)
+                                               ymax+=360;
 
-                       case 16: deg_limit=2.0;
-                               break;
+                                       while (ymax>=360)
+                                               ymax-=360;
 
-                       case 25: deg_limit=3.0;
+                                       sprintf(string,"%d:%d:%d:%d",x, x+1, ymin, ymax);
+                                       LoadSDF(string);
+                               }
                }
 
-               if (tx_site[0].lat<70.0)
-                       deg_range_lon=deg_range/cos(deg2rad*tx_site[0].lat);
                else
-                       deg_range_lon=deg_range/cos(deg2rad*70.0);
-
-               /* Correct for squares in degrees not being square in miles */  
-
-               if (deg_range>deg_limit)
-                       deg_range=deg_limit;
-
-               if (deg_range_lon>deg_limit)
-                       deg_range_lon=deg_limit;
-
-               north_min=(unsigned char)floor(tx_site[0].lat-deg_range);
-               north_max=(unsigned char)floor(tx_site[0].lat+deg_range);
-               west_min=(unsigned char)floor(tx_site[0].lon-deg_range_lon);
-               west_max=(unsigned char)floor(tx_site[0].lon+deg_range_lon);
-
-               if (min_lat==0)
-                       min_lat=north_min;
-
-               else if (north_min<min_lat)
-                       min_lat=north_min;
+               {
+                       for (y=0; y<=width; y++)
+                               for (x=min_lat; x<=max_lat; x++)
+                               {
+                                       ymin=(int)(max_lon+(double)y);
 
-               if (min_lon==0)
-                       min_lon=west_min;
+                                       while (ymin<0)
+                                               ymin+=360;
 
-               else if (west_min<min_lon)
-                       min_lon=west_min;
+                                       while (ymin>=360)
+                                               ymin-=360;
+                                       
+                                       ymax=ymin+1;
 
-               if (north_max>max_lat)
-                       max_lat=north_max;
+                                       while (ymax<0)
+                                               ymax+=360;
 
-               if (west_max>max_lon)
-                       max_lon=west_max;
+                                       while (ymax>=360)
+                                               ymax-=360;
 
-               if (min_lat!=0 && min_lon!=0 && max_lat!=0 && max_lon!=0)
-               {
-                       for (y=min_lon; y<=max_lon; y++)
-                               for (x=min_lat; x<=max_lat; x++)
-                               {
-                                       sprintf(string,"%u:%u:%u:%u",x, x+1, y, y+1);
+                                       sprintf(string,"%d:%d:%d:%d",x, x+1, ymin, ymax);
                                        LoadSDF(string);
                                }
                }
        }
 
+
        if (mapfile[0])
                map=1;
 
-       if (coverage)
+       if (coverage | LRmap)
        {
                for (x=0; x<txsites; x++)
                {
-                       PlotCoverage(tx_site[x],altitude);
+                       if (coverage)
+                               PlotCoverage(tx_site[x],altitude);
+
+                       if (LRmap)
+                               PlotLRMap(tx_site[x],altitudeLR);
+
                        PlaceMarker(tx_site[x]);
 
                        if (report!='N')
@@ -4102,18 +4318,7 @@ int main(char argc, char *argv[])
                map=1;
        }
 
-       else if (LRmap)
-       {
-               PlotLRMap(tx_site[0],altitudeLR);
-               PlaceMarker(tx_site[0]);
-
-               if (report!='N')
-                       SiteReport(tx_site[0]);
-               
-               map=1;
-       }
-
-       else       
+       if (coverage==0 && LRmap==0)       
        {
                PlaceMarker(rx_site);
 
@@ -4301,3 +4506,4 @@ int main(char argc, char *argv[])
 
        return 0;
 }
+
diff --git a/splat.lrp b/splat.lrp
new file mode 100644 (file)
index 0000000..af9e174
--- /dev/null
+++ b/splat.lrp
@@ -0,0 +1,10 @@
+15.000 ; Earth Dielectric Constant (Relative permittivity)
+0.005  ; Earth Conductivity (Siemens per meter)
+301.000        ; Atmospheric Bending Constant (N-Units)
+300.000        ; Frequency in MHz (20 MHz to 20 GHz)
+5      ; Radio Climate
+0      ; Polarization (0 = Horizontal, 1 = Vertical)
+0.50   ; Fraction of situations
+0.50   ; Fraction of time
+
+Please consult SPLAT! documentation for the meaning and use of this data.
index 593a13c7fdfd5276f5cd1f6cdfa3bdcdd7245065..31a9c4d907399d3c61b2a74e29742cebe4b4811e 100644 (file)
@@ -1,34 +1,64 @@
+                       ================
+                       SPLAT! Utilities
+                       ================
+
 Utilities for use with SPLAT! software are found under the
-splat-1.1.0/utils directory.  They include the following:
+splat-1.1.1/utils directory.  They include the following:
 
-citydecoder
-===========
-This utility reads U.S. Census Bureau files of Incorporated Places/Census
-Designated Places, and generates city/site data files for use with SPLAT!
-software.  Files for use with this utility are available for download
-free of charge from:
 
-       http://www.census.gov/geo/www/cob/bdy_files.html.
+srtm2sdf
+========
+The srtm2sdf utility generates SPLAT Data Files (SDFs) from 3-arc second
+STS-99 Space Shuttle Topography Mission (SRTM-3) elevation data files.
+This data is of a much higher quality than that contained in older USGS
+Digital Elevation Models of the same resolution.  However, many SRTM-3
+Version 2 elevation models contain data "voids" and "wells" that are the
+consequence of the radar mapping process.
 
-Please select the ARC/INFO Ungenerate (ASCII) Metadata Cartographic Boundary
-Files from this site and unzip them prior to importing them to citydecoder.
-U.S. Census files are cataloged by the two digit FIPS code for the region
-(state) they represent.  citydecoder takes as an argument the two-letter
-file prefix plus the FIPS code of the region or state being processed.
-For example:
+The srtm2sdf utility has the ability to detect and replace SRTM data
+outliers with equivalent SDF data created through the usgs2sdf utility
+(below).  If equivalent USGS-derived SPLAT Data Files are not available,
+SRTM outliers are handled either through adjacent pixel averaging, or by
+threshold limiting using user-specified limits.  Of all three methods,
+the USGS-derived SDF replacement method yields the best results.
 
-       citydecoder pl34
+SRTM-3 Version 2 Elevation Data may be downloaded from:
 
-reads files "pl34_d00.dat" and "pl34_d00a.dat" that are extracted after
-the downloaded file has been unzipped, and generates a list of city names
-and geographical coordinates for the state of New Jersey (FIPS code 34).
-This data may be sorted and written to a file (cities.nj.dat) in the
-following manner:
+    ftp://e0srp01u.ecs.nasa.gov:21/srtm/version2/
 
-       citydecoder pl34 | sort > cities.nj.dat
+Files available at this site are ZIP compressed, and must be
+uncompressed (using "unzip", or "gunzip -S .zip") prior to being
+processed by srtm2sdf.
 
-A list of FIPS codes (fips.txt) is included under splat/utils for your
-convenience.
+The srtm2sdf utility accepts command-line options as follows:
+
+-d: used to specify the directory path to the location of existing
+    SDF files (presumably created at an earlier date through the
+    usgs2sdf or postdownload utility) that are to be used to replace
+    outliers found in the SRTM data file.  The -d option overrides
+    the default path specified in your $HOME/.splat_path file.
+
+-n: used to specify the elevation (in meters) below which SRTM data
+    is replaced.  Below this limit, SRTM elevation data is either
+    replaced using existing SDF equivalent files, or averaged among
+    adjacent elevation data points.  The default threshold for the
+    replacement limit is sea-level (0 meters).  Unless elevations
+    below sea-level are known to exist for the region being
+    processed by the srtm2sdf utility, the -n option need not be
+    specified.
+
+Some examples of srtm2sdf use:
+
+    srtm2sdf N40W074.hgt
+
+    srtm2sdf -d /cdrom/sdf N40W074.hgt
+
+    srtm2sdf -d /dev/null N40W074.hgt (/dev/null prevents USGS data
+               replacement from taking place)
+
+    srtm2sdf -n -5 N40W074.hgt
+
+In all cases, SDF files are written into the current working directory.
 
 
 usgs2sdf
@@ -48,14 +78,44 @@ takes as an argument the name of the gzipped Digital Elevation Model
 postdownload uncompresses the DEM file, adds necessary record delimiters,
 and invokes usgs2sdf to produce a SPLAT Data File (SDF).
 
-Digital Elevation Models may be downloaded from:
+USGS Digital Elevation Models may be downloaded from:
 
-     http://edcsgs9.cr.usgs.gov/glis/hyper/guide/1_dgr_demfig/index1m.html
+    http://edcftp.cr.usgs.gov/pub/data/DEM/250/
 
 Invoke postdownload with the name of each DEM file downloaded to
 produce a database of SPLAT Data Files.
 
 
+citydecoder
+===========
+This utility reads U.S. Census Bureau files of Incorporated Places/Census
+Designated Places, and generates city/site data files for use with SPLAT!
+software.  Files for use with this utility are available for download
+free of charge from:
+
+       http://www.census.gov/geo/www/cob/bdy_files.html.
+
+Please select the ARC/INFO Ungenerate (ASCII) Metadata Cartographic Boundary
+Files from this site and unzip them prior to importing them to citydecoder.
+U.S. Census files are cataloged by the two digit FIPS code for the region
+(state) they represent.  citydecoder takes as an argument the two-letter
+file prefix plus the FIPS code of the region or state being processed.
+For example:
+
+       citydecoder pl34
+
+reads files "pl34_d00.dat" and "pl34_d00a.dat" that are extracted after
+the downloaded file has been unzipped, and generates a list of city names
+and geographical coordinates for the state of New Jersey (FIPS code 34).
+This data may be sorted and written to a file (cities.nj.dat) in the
+following manner:
+
+       citydecoder pl34 | sort > cities.nj.dat
+
+A list of FIPS codes (fips.txt) is included under splat/utils for your
+convenience.
+
+
 fontdata
 ========
 The fontdata utility reads Slackware gzipped console font data
@@ -106,5 +166,5 @@ You need to be 'root' to install any or all of these utilities.
 
 ---
 John A. Magliacane, KD2BD
-January 2004
+March 2006
 
index fbc7581b2d448144795f76e0b12964c00df79761..4bc5b4ac302abd0525a02f0f1a50bd8893690cb7 100755 (executable)
@@ -1,7 +1,7 @@
 #!/bin/bash
 #
 # Simple shell script for building SPLAT! and associated utilities.
-# Written by John A. Magliacane, KD2BD May 2002
+# Written by John A. Magliacane, KD2BD May 2002.  Updated February 2006.
 #
 
 build_citydecoder()
@@ -18,6 +18,13 @@ build_usgs2sdf()
        echo "Done!"
 }
 
+build_srtm2sdf()
+{
+       echo -n "Compiling srtm2sdf... "
+       cc -Wall -O3 -s -lbz2 -fomit-frame-pointer srtm2sdf.c -o srtm2sdf
+       echo "Done!"
+}
+
 build_fontdata()
 {
        echo -n "Compiling fontdata... "
@@ -37,6 +44,9 @@ else
                build_usgs2sdf
        fi
 
+       if [ $1 == "srtm2sdf" ]; then
+               build_srtm2sdf
+       fi
        if [ $1 == "fontdata" ]; then
                build_fontdata
        fi
@@ -48,10 +58,12 @@ else
        if [ $1 == "all" ]; then
                build_citydecoder
                build_usgs2sdf
+               build_srtm2sdf
                build_fontdata
        fi
 
-       if [ $1 != "citydecoder" ] && [ $1 != "usgs2sdf" ] && [ $1 != "fontdata" ] && [ $1 != "clean" ] && [ $1 != "all" ]; then
-               echo "Usage: build { citydecoder, usgs2sdf, fontdata, all }"
+       if [ $1 != "citydecoder" ] && [ $1 != "srtm2sdf" ] && [ $1 != "usgs2sdf" ] && [ $1 != "fontdata" ] && [ $1 != "clean" ] && [ $1 != "all" ]; then
+               echo "Usage: build { citydecoder, srtm2sdf, usgs2sdf, fontdata, all }"
        fi
 fi
+
index 78b7d1aba5d03010fc8423361a8a76f49f55109d..425770f195a97dcf483cc853ff21b989afa550aa 100755 (executable)
@@ -1,7 +1,7 @@
 #!/bin/bash
 #
 # Simple shell script for installing SPLAT! and associated utilities.
-# Written by John A. Magliacane, KD2BD April 2002
+# Written by John A. Magliacane, KD2BD April 2002.  Updated February 2006.
 #
 
 install_citydecoder()
@@ -16,6 +16,12 @@ install_usgs2sdf()
        echo "usgs2sdf installed!"
 }
 
+install_srtm2sdf()
+{
+       cp srtm2sdf /usr/local/bin
+       echo "srtm2sdf installed!"
+}
+
 install_fontdata()
 {
        cp fontdata /usr/local/bin
@@ -29,13 +35,17 @@ if [ $whoami != "root" ]; then
 fi
 
 if [ $# == "0" ]; then
-       echo "Usage: ./install  { citydecoder, usgs2sdf, fontdata, all }"
+       echo "Usage: ./install  { citydecoder, srtm2sdf, usgs2sdf, fontdata, all }"
 else 
 
        if [ $1 == "citydecoder" ] && [ $whoami == "root" ] && [ -x citydecoder ]; then
                install_citydecoder
        fi
 
+       if [ $1 == "srtm2sdf" ] && [ $whoami == "root" ] && [ -x srtm2sdf ]; then
+               install_srtm2sdf
+       fi
+
        if [ $1 == "usgs2sdf" ] && [ $whoami == "root" ] && [ -x usgs2sdf ]; then
                install_usgs2sdf
        fi
@@ -49,6 +59,10 @@ else
                        install_citydecoder
                fi
 
+               if [ -x srtm2sdf ]; then
+                       install_srtm2sdf
+               fi
+
                if [ -x usgs2sdf ]; then
                        install_usgs2sdf
                fi
@@ -58,7 +72,8 @@ else
                fi
        fi
 
-       if [ $1 != "citydecoder" ] && [ $1 != "usgs2sdf" ] && [ $1 != "fontdata" ] && [ $1 != "all" ]; then
-               echo "Usage: install { citydecoder, usgs2sdf, fontdata, all }"
+       if [ $1 != "citydecoder" ] && [ $1 != "srtm2sdf" ] && [ $1 != "usgs2sdf" ] && [ $1 != "fontdata" ] && [ $1 != "all" ]; then
+               echo "Usage: install { citydecoder, srtm2sdf, usgs2sdf, fontdata, all }"
        fi
 fi
+
index ee608eb727ae65f0d9f0f62479ca04d53301da34..c123c10ce4442629b285b28c06547639b90c6975 100755 (executable)
@@ -1,21 +1,19 @@
 #!/bin/bash
+
 # Simple script for processing of downloaded undelimited gzipped
 # USGS DEM files, and converting them to SPLAT Data Files.
-# Written by John A. Magliacane, KD2BD May 2002
-#
+# Written by John A. Magliacane, KD2BD May 2002.
+# Last modified on Friday 24-Mar-06.
+
 if [ $# == "0" ]; then
        echo
        echo "This utility reads downloaded gzipped USGS DEM"
        echo "files and generates equivalent SPLAT Data Files (SDFs)."
        echo
        echo "Files compatible with this SPLAT! utility may be"
-       echo "obtained via anonymous ftp at:"
+       echo "obtained at:"
        echo
-       echo -e "\tedcftp.cr.usgs.gov"
-       echo
-       echo "in the pub/data/DEM/250 subdirectory, or via http at:"
-       echo
-       echo -e "\tedcwww.cr.usgs.gov/glis/hyper/guide/1_dgr_dem#dem7"
+       echo "http://edcftp.cr.usgs.gov/pub/data/DEM/250/"
        echo
        echo "Usage: postdownload wilmington-w.gz"
        echo
@@ -33,3 +31,4 @@ else
        echo
        echo "Done!"
 fi
+
diff --git a/utils/srtm2sdf.c b/utils/srtm2sdf.c
new file mode 100644 (file)
index 0000000..a12ee35
--- /dev/null
@@ -0,0 +1,586 @@
+/************************************************************\
+ **      Created originally by Jonathan Naylor, G4KLX      **
+ **     Later embellished by John Magliacane, KD2BD to     **
+ **     detect and handle voids found in the SRTM data     **
+ ************************************************************
+ **                    Compile like this:                  **
+ **      cc -Wall -O3 -s -lbz2 srtm2sdf.c -o srtm2sdf      **
+ **              Last modification: 18-Mar-2006            **
+\************************************************************/ 
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include <bzlib.h>
+
+#define BZBUFFER 65536
+
+char sdf_filename[25], sdf_path[255], replacement_flag, opened=0;
+int srtm[1201][1201], usgs[1200][1200], max_north, max_west,
+    min_north, min_west, merge=0, min_elevation, bzerror;
+
+int ReadSRTM(char *filename)
+{
+       int x, y, infile, byte, bytes_read;
+       unsigned char error, buffer[2];
+       char north[3], west[4], *base=NULL;
+
+       if (strstr(filename, ".zip")!=NULL)
+       {
+               fprintf(stderr, "*** Error: \"%s\" must be uncompressed\n",filename);
+               return -1;
+
+       }
+
+       if (strstr(filename, ".hgt")==NULL)
+       {
+               fprintf(stderr, "*** Error: \"%s\" does not have the correct extension (.hgt)\n",filename);
+               return -1;
+       }
+
+       base=strrchr(filename, '/');
+       
+       if (base==NULL)
+               base=filename;
+       else
+               base+=1;
+
+       north[0]=base[1];
+       north[1]=base[2];
+       north[2]=0;
+
+       west[0]=base[4];
+       west[1]=base[5];
+       west[2]=base[6];
+       west[3]=0;
+
+       if ((base[0]!='N' && base[0]!='S') || (base[3]!='W' && base[3]!='E'))
+       {
+               fprintf(stderr, "*** Error: \"%s\" doesn't look like a valid SRTM filename.\n", filename);
+               return -1;
+       }
+
+       max_west=atoi(west);
+
+       if (base[3]=='E')
+               max_west=360-max_west;
+
+       min_west=max_west-1;
+
+       if (max_west==360)
+               max_west=0;
+
+       if (base[0]=='N')
+               min_north=atoi(north);
+       else
+               min_north=-atoi(north);
+
+       max_north=min_north+1;
+
+       infile=open(filename, O_RDONLY);
+
+       if (infile==0)
+       {
+               fprintf(stderr, "*** Error: Cannot open \"%s\"\n", filename);
+               return -1;
+       }
+
+       read(infile,&buffer,2);
+
+       if ((buffer[0]=='P') && (buffer[1]=='K'))
+       {
+               fprintf(stderr, "*** Error: \"%s\" still appears to be compressed!\n",filename);
+               close(infile);
+               return -1;
+       }
+
+       lseek(infile,0L,SEEK_SET);
+
+       sprintf(sdf_filename, "%d:%d:%d:%d.sdf", min_north, max_north, min_west, max_west);
+
+       error=0;
+       replacement_flag=0;
+
+       printf("Reading %s... ", filename);
+       fflush(stdout);
+
+       for (x=0; (x<1201 && error==0); x++)
+               for (y=0; (y<1201 && error==0); y++)
+               {
+                       bytes_read=read(infile,&buffer,2);
+
+                       if (bytes_read==2)
+                       {
+                               byte=buffer[1]+(buffer[0]<<8);
+
+                               if (buffer[0]&128)
+                                       byte-=0x10000;
+
+                               /* Flag problem elevations here */
+
+                               if (byte<=min_elevation)
+                                       replacement_flag=1;
+
+                               srtm[x][y]=byte;
+                       }
+
+                       else
+                               error=1;
+               }
+
+       if (error)
+       {
+               fprintf(stderr,"\n*** Error: Premature EOF detected while reading \"%s\"!  :-(\n",filename);
+               return -1;
+       }
+
+       close(infile);
+
+       return 0;
+}
+
+int LoadSDF_SDF(char *name)
+{
+       /* This function reads uncompressed
+          SPLAT Data Files (.sdf) into memory. */
+
+       int x, y, dummy;
+       char sdf_file[255], path_plus_name[255];
+       FILE *infile;
+
+       for (x=0; name[x]!='.' && name[x]!=0 && x<250; x++)
+               sdf_file[x]=name[x];
+
+       sdf_file[x]='.';
+       sdf_file[x+1]='s';
+       sdf_file[x+2]='d';
+       sdf_file[x+3]='f';
+       sdf_file[x+4]=0;
+
+       strncpy(path_plus_name,sdf_path,255);
+       strncat(path_plus_name,sdf_file,255);
+
+       infile=fopen(path_plus_name,"rb");
+
+       if (infile==NULL)
+               return 0;
+
+       fscanf(infile,"%d", &dummy);
+       fscanf(infile,"%d", &dummy);
+       fscanf(infile,"%d", &dummy);
+       fscanf(infile,"%d", &dummy);
+
+       printf("\nReading %s... ",path_plus_name);
+       fflush(stdout);
+
+       for (x=0; x<1200; x++)
+               for (y=0; y<1200; y++)
+                       fscanf(infile,"%d",&usgs[x][y]);
+
+       fclose(infile);
+
+       return 1;
+}
+
+char *BZfgets(BZFILE *bzfd, unsigned length)
+{
+       /* This function returns at most one less than 'length' number
+          of characters from a bz2 compressed file whose file descriptor
+          is pointed to by *bzfd.  In operation, a buffer is filled with
+          uncompressed data (size = BZBUFFER), which is then parsed
+          and doled out as NULL terminated character strings every time
+          this function is invoked.  A NULL string indicates an EOF
+          or error condition. */
+
+       static int x, y, nBuf;
+       static char buffer[BZBUFFER+1], output[BZBUFFER+1];
+       char done=0;
+
+       if (opened!=1 && bzerror==BZ_OK)
+       {
+               /* First time through.  Initialize everything! */
+
+               x=0;
+               y=0;
+               nBuf=0;
+               opened=1;
+               output[0]=0;
+       }
+
+       do
+       {
+               if (x==nBuf && bzerror!=BZ_STREAM_END && bzerror==BZ_OK && opened)
+               {
+                       /* Uncompress data into a static buffer */
+
+                       nBuf=BZ2_bzRead(&bzerror, bzfd, buffer, BZBUFFER);
+                       buffer[nBuf]=0;
+                       x=0;
+               }
+
+               /* Build a string from buffer contents */
+
+               output[y]=buffer[x];
+
+               if (output[y]=='\n' || output[y]==0 || y==(int)length-1)
+               {
+                       output[y+1]=0;
+                       done=1;
+                       y=0;
+               }
+
+               else
+                       y++;
+               x++;
+
+       } while (done==0);
+
+       if (output[0]==0)
+               opened=0;
+
+       return (output);
+}
+
+int LoadSDF_BZ(char *name)
+{
+       /* This function reads .bz2 compressed
+          SPLAT Data Files into memory. */
+
+       int x, y, dummy;
+       char sdf_file[255], path_plus_name[255];
+       FILE *fd;
+       BZFILE *bzfd;
+
+       for (x=0; name[x]!='.' && name[x]!=0 && x<247; x++)
+               sdf_file[x]=name[x];
+
+       sdf_file[x]='.';
+       sdf_file[x+1]='s';
+       sdf_file[x+2]='d';
+       sdf_file[x+3]='f';
+       sdf_file[x+4]='.';
+       sdf_file[x+5]='b';
+       sdf_file[x+6]='z';
+       sdf_file[x+7]='2';
+       sdf_file[x+8]=0;
+
+       strncpy(path_plus_name,sdf_path,255);
+       strncat(path_plus_name,sdf_file,255);
+
+       fd=fopen(path_plus_name,"rb");
+       bzfd=BZ2_bzReadOpen(&bzerror,fd,0,0,NULL,0);
+
+       if (fd!=NULL && bzerror==BZ_OK)
+       {
+               printf("\nReading %s... ",path_plus_name);
+               fflush(stdout);
+
+               sscanf(BZfgets(bzfd,255),"%d",&dummy);
+               sscanf(BZfgets(bzfd,255),"%d",&dummy);
+               sscanf(BZfgets(bzfd,255),"%d",&dummy);
+               sscanf(BZfgets(bzfd,255),"%d",&dummy);
+       
+               for (x=0; x<1200; x++)
+                       for (y=0; y<1200; y++)
+                               sscanf(BZfgets(bzfd,20),"%d",&usgs[x][y]);
+
+               fclose(fd);
+
+               BZ2_bzReadClose(&bzerror,bzfd);
+
+               return 1;
+       }
+
+       else
+               return 0;
+}
+
+char LoadSDF(char *name)
+{
+       /* This function loads the requested SDF file from the filesystem.
+          First, it tries to invoke the LoadSDF_SDF() function to load an
+          uncompressed SDF file (since uncompressed files load slightly
+          faster).  Failing that, it tries to load a compressed SDF file
+          by invoking the LoadSDF_BZ() function. */
+
+       int return_value=-1;
+
+       /* Try to load an uncompressed SDF first. */
+
+       return_value=LoadSDF_SDF(name);
+
+       /* If that fails, try loading a compressed SDF. */
+
+       if (return_value==0 || return_value==-1)
+               return_value=LoadSDF_BZ(name);
+
+       return return_value;
+}
+
+int ReadUSGS()
+{
+       char usgs_filename[15];
+
+       /* usgs_filename is a minimal filename ("40:41:74:75").
+          Full path and extentions are added later though
+          subsequent function calls. */
+
+       sprintf(usgs_filename, "%d:%d:%d:%d", min_north, max_north, min_west, max_west);
+
+       return (LoadSDF(usgs_filename));
+}
+
+void average_terrain(x,y,z)
+int x, y, z;
+{
+       long accum;
+       int temp=0, count, bad_value;
+       double average;
+
+       bad_value=srtm[x][y];
+
+       accum=0L;
+       count=0;
+
+       if (x!=0)
+       {
+               temp=srtm[x-1][y];
+
+               if (temp>bad_value)
+               {
+                       accum+=temp;
+                       count++;
+               }
+       }
+
+       if (x!=1201)
+       {
+               temp=srtm[x+1][y];
+
+               if (temp>bad_value)
+               {
+                       accum+=temp;
+                       count++;
+               }
+       }
+
+       if ((x!=0) && (y!=1201))
+       {
+               temp=srtm[x-1][y+1];
+
+               if (temp>bad_value)
+               {
+                       accum+=temp;
+                       count++;
+               }
+       }
+
+       if (y!=1201)
+       {
+               temp=srtm[x][y+1];
+
+               if (temp>bad_value)
+               {
+                       accum+=temp;
+                       count++;
+               }
+       }
+
+       if ((x!=1201) && (y!=1201))
+       {
+               temp=srtm[x+1][y+1];
+
+               if (temp>bad_value)
+               {
+                       accum+=temp;
+                       count++;
+               }
+       }
+
+       if ((x!=0) && (y!=0))
+       {
+               temp=srtm[x-1][y-1];
+
+               if (temp>bad_value)
+               {
+                       accum+=temp;
+                       count++;
+               }
+       }
+
+       if (y!=0)
+       {
+               temp=srtm[x][y-1];
+
+               if (temp>bad_value)
+               {
+                       accum+=temp;
+                       count++;
+               }
+       }
+
+       if ((x!=1201) && (y!=0))
+       {
+               temp=srtm[x+1][y-1];
+
+               if (temp>bad_value)
+               {
+                       accum+=temp;
+                       count++;
+               }
+       }
+
+       if (count!=0)
+       {
+               average=(((double)accum)/((double)count));
+               temp=(int)(average+0.5);
+       }
+
+       if (temp>min_elevation)
+               srtm[x][y]=temp;
+       else
+               srtm[x][y]=min_elevation;
+}
+
+void WriteSDF(char *filename)
+{
+       int x, y, byte, last_good_byte=0;
+       FILE *outfile;
+
+       printf("\nWriting %s... ", filename);
+       fflush(stdout);
+
+       outfile=fopen(filename,"wb");
+
+       fprintf(outfile, "%d\n%d\n%d\n%d\n", max_west, min_north, min_west, max_north);
+
+       for (x=1200; x>0; x--)
+               for (y=1200; y>0; y--)
+               {
+                       byte=srtm[x][y];
+
+                       if (byte>min_elevation)
+                               last_good_byte=byte;
+
+                       if (byte<min_elevation)
+                       {
+                               if (merge)
+                                       fprintf(outfile,"%d\n",usgs[1200-x][1200-y]);
+                               else
+                                       {
+                                               average_terrain(x,y,last_good_byte);
+                                               fprintf(outfile,"%d\n",srtm[x][y]);
+                                       }
+                       }
+                       else
+                               fprintf(outfile,"%d\n",byte);
+               }
+
+       printf("Done!\n");
+
+       fclose(outfile);
+}
+
+int main(int argc, char **argv)
+{
+       int x, y, z=0;
+       char *env=NULL, string[255];
+       FILE *fd;
+
+       if (argc==1 || (argc==2 && strncmp(argv[1],"-h",2)==0))
+       {
+               fprintf(stderr, "\nsrtm2sdf: Generates SPLAT! elevation data files from unzipped SRTM-3\nelevation data files, and replaces SRTM data voids with elevation\ndata from existing SDF files.\n\n");
+               fprintf(stderr, "\tAvailable Options...\n\n");
+               fprintf(stderr, "\t-d directory path of existing .sdf files\n\t   (overrides path in ~/.splat_path file)\n\n");
+               fprintf(stderr, "\t-n elevation (in meters) below which SRTM data\n\t   is replaced by existing SDF data (default=0)\n\n");
+
+               fprintf(stderr, "Examples: srtm2sdf N40W074.hgt\n");
+               fprintf(stderr, "          srtm2sdf -d /cdrom/sdf N40W074.hgt\n");
+               fprintf(stderr, "          srtm2sdf -d /dev/null N40W074.hgt  (prevents data replacement)\n");
+               fprintf(stderr, "          srtm2sdf -n -5 N40W074.hgt\n\n");
+
+               return 1;
+       }
+
+       y=argc-1;
+
+       min_elevation=0;
+
+       for (x=1, z=0; x<=y; x++)
+       {
+               if (strcmp(argv[x],"-d")==0)
+               {
+                       z=x+1;
+
+                       if (z<=y && argv[z][0] && argv[z][0]!='-')
+                               strncpy(sdf_path,argv[z],253);
+               }
+
+               if (strcmp(argv[x],"-n")==0)
+               {
+                       z=x+1;
+
+                       if (z<=y && argv[z][0])
+                       {
+                               sscanf(argv[z],"%d",&min_elevation);
+
+                               if (min_elevation<-32768)
+                                       min_elevation=0;
+                       }                        
+               }
+       }
+
+       /* If no SDF path was specified on the command line (-d), check
+          for a path specified in the $HOME/.splat_path file.  If the
+          file is not found, then sdf_path[] remains NULL, and a data
+          merge will not be attempted if voids are found in the SRTM file. */
+
+       if (sdf_path[0]==0)
+       {
+               env=getenv("HOME");
+
+               sprintf(string,"%s/.splat_path",env);
+
+               fd=fopen(string,"r");
+
+               if (fd!=NULL)
+               {
+                       fgets(string,253,fd);
+
+                       /* Remove <CR> and/or <LF> from string */
+
+                       for (x=0; string[x]!=13 && string[x]!=10 && string[x]!=0 && x<253; x++);
+                       string[x]=0;
+
+                       strncpy(sdf_path,string,253);
+
+                       fclose(fd);
+               }
+       }
+
+       /* Ensure a trailing '/' is present in sdf_path */
+
+       if (sdf_path[0])
+       {
+               x=strlen(sdf_path);
+
+               if (sdf_path[x-1]!='/' && x!=0)
+               {
+                       sdf_path[x]='/';
+                       sdf_path[x+1]=0;
+               }
+       }
+
+       if (ReadSRTM(argv[z+1])==0)
+       {
+               if (replacement_flag && sdf_path[0])
+                       merge=ReadUSGS();
+
+               WriteSDF(sdf_filename);
+       }
+
+       return 0;
+}
+
index 0c1f1faa61bb13d31395f6a2f7ff3863b525054a..acfb7f887e87e421750ccc54ebba2d89e87484b7 100644 (file)
@@ -1,7 +1,10 @@
-/****************************************************************************
+/***************************************************************************\
 *            USGS2SDF: USGS to SPLAT Data File Converter Utility            *
 *               Copyright John A. Magliacane, KD2BD 1997-2001               *
-*                         Last update: 13-Apr-2002                          *
+*                         Last update: 05-Sep-2005                          *
+*****************************************************************************
+* Updated July 2005 by John Gabrysch (jgabby@gmail.com) to properly handle  *
+*   the updated USGS DEM file format and to properly scale Alaska tiles.    *
 *****************************************************************************
 *                                                                           *
 * This program reads files containing delimited US Geological Survey        *
@@ -23,7 +26,7 @@
 * they represent (ie: min_north:max_north:min_west:max_west.sdf).           *
 *                                                                           *
 *****************************************************************************
-*          To compile: gcc -Wall -O6 -s splat2sdf.c -o splat2sdf            *
+*           To compile: gcc -Wall -O3 -s usgs2sdf.c -o usgs2sdf             *
 *****************************************************************************
 *                                                                           *
 * This program is free software; you can redistribute it and/or modify it   *
@@ -36,7 +39,7 @@
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License     *
 * for more details.                                                         *
 *                                                                           *
-*****************************************************************************/
+\***************************************************************************/
 
 #include <stdio.h>
 #include <stdlib.h>
@@ -61,10 +64,12 @@ int argc;
 char *argv[];
 {
        unsigned char minimum[30], maximum[30], swlong[30], swlat[30],
-                nwlong[30], nwlat[30], nelong[30], nelat[30], selong[30],
-                selat[30], string[40];
-       double max_el, min_el,  max_west, min_west, max_north, min_north;
+                     nwlong[30], nwlat[30], nelong[30], nelat[30],
+                     selong[30], selat[30];
+       char string[40];
+       double max_el, min_el, max_west, min_west, max_north, min_north;
        int x, y, z, c, array[1202][1202];
+       int arc_mod=0;
        char splatfile[25];
        FILE *fd;
 
@@ -92,6 +97,7 @@ char *argv[];
 
                for (x=0; x<22; x++)
                        swlong[x]=getc(fd);
+
                swlong[x]=0;
 
                /* Skip 2 bytes */
@@ -103,6 +109,7 @@ char *argv[];
 
                for (x=0; x<22; x++)
                        swlat[x]=getc(fd);
+
                swlat[x]=0;
 
                /* Skip 2 bytes */
@@ -114,6 +121,7 @@ char *argv[];
 
                for (x=0; x<22; x++)
                        nwlong[x]=getc(fd);
+
                nwlong[x]=0;
 
                /* Skip 2 bytes */
@@ -125,6 +133,7 @@ char *argv[];
 
                for (x=0; x<22; x++)
                        nwlat[x]=getc(fd);
+
                nwlat[x]=0;
 
                /* Skip 2 bytes */
@@ -136,6 +145,7 @@ char *argv[];
 
                for (x=0; x<22; x++)
                        nelong[x]=getc(fd);
+
                nelong[x]=0;
 
                /* Skip 2 bytes */
@@ -147,6 +157,7 @@ char *argv[];
 
                for (x=0; x<22; x++)
                        nelat[x]=getc(fd);
+
                nelat[x]=0;
 
                /* Skip 2 bytes */
@@ -158,6 +169,7 @@ char *argv[];
 
                for (x=0; x<22; x++)
                        selong[x]=getc(fd);
+
                selong[x]=0;
 
                /* Skip 2 bytes */
@@ -169,6 +181,7 @@ char *argv[];
 
                for (x=0; x<22; x++)
                        selat[x]=getc(fd);
+
                selat[x]=0;
 
                /* Skip 2 bytes */
@@ -180,6 +193,7 @@ char *argv[];
 
                for (x=0; x<22; x++)
                        minimum[x]=getc(fd);
+
                minimum[x]=0;
 
                /* Skip 2 bytes */
@@ -194,23 +208,34 @@ char *argv[];
 
                maximum[x]=0;
 
-               sscanf(d2e(minimum),"%lf",&min_el);
-               sscanf(d2e(maximum),"%lf",&max_el);
+               sscanf(d2e((char*)minimum),"%lG",&min_el);
+               sscanf(d2e((char*)maximum),"%lf",&max_el);
 
-               sscanf(d2e(swlong),"%lf",&max_west);
-               sscanf(d2e(swlat),"%lf",&min_north);
+               sscanf(d2e((char*)swlong),"%lf",&max_west);
+               sscanf(d2e((char*)swlat),"%lf",&min_north);
 
-               sscanf(d2e(nelong),"%lf",&min_west);
-               sscanf(d2e(nelat),"%lf",&max_north);
+               sscanf(d2e((char*)nelong),"%lf",&min_west);
+               sscanf(d2e((char*)nelat),"%lf",&max_north);
 
                max_west/=-3600.0;
                min_north/=3600.0;
                max_north/=3600.0;
                min_west/=-3600.0;
 
-               /* Skip 84 Bytes */
+               /* If the latitude is between 50 and 70, there are only 600 vertical lines of data.  
+                  If the latitude is greater than 70, there are only 400.  arc_mod is the flag for
+                  use later */
+
+               if (min_north >= 50.0)
+                       arc_mod++;
+               
+               if (min_north >= 70.0)
+                       arc_mod++;
 
-               for (x=0; x<84; x++)
+
+               /* Skip 84 Bytes  - Modified to 238 by jgabby 07/05 */
+
+               for (x=0; x<238; x++)
                        getc(fd);
 
                /* Read elevation data... */
@@ -274,9 +299,26 @@ char *argv[];
                                        c=getc(fd);
                                }
 
-                               string[z]=0;    
+                               string[z]=0;
+
                                sscanf(string,"%d",&array[y][x]);
+
+                               /* The next few lines either duplicate or triplicate the lines to
+                                  ensure a 1200x1200 result, depending on how arc_mod was set earlier */
+
+                               if (arc_mod > 0)
+                                       sscanf(string,"%d",&array[y][x-1]);
+
+                               if (arc_mod > 1)
+                                       sscanf(string,"%d",&array[y][x-2]);                             
                        }
+                       
+                       if (arc_mod > 0)
+                               x--;
+
+
+                       if (arc_mod > 1)
+                               x--;
                }
 
                fclose(fd);
@@ -306,6 +348,8 @@ char *argv[];
                fprintf(stderr,"*** %c%s%c: File Not Found!\n",34,argv[1],34);
                exit(-1);
        }
+
        else
                exit(0);
 }
+