From cae76b32deb53ddbfb94b44de132a72435f56e88 Mon Sep 17 00:00:00 2001 From: Bdale Garbee Date: Thu, 5 Jun 2008 17:33:47 -0600 Subject: [PATCH] Imported Upstream version 1.1.1 --- CHANGES | 46 +- README | 76 +- build | 6 +- clean | 2 +- configure | 1 + docs/man/splat.1 | 534 +++++----- docs/man/splat.man | 305 +++--- docs/pdf/splat.pdf | Bin 72975 -> 35273 bytes docs/postscript/splat.ps | 1535 +++++++++++++++------------- docs/text/splat.txt | 534 +++++----- install | 1 + splat-1.1.0.lsm => splat-1.1.1.lsm | 10 +- splat.cpp | 1284 +++++++++++++---------- splat.lrp | 10 + utils/README | 112 +- utils/build | 18 +- utils/install | 23 +- utils/postdownload | 15 +- utils/srtm2sdf.c | 586 +++++++++++ utils/usgs2sdf.c | 76 +- 20 files changed, 3179 insertions(+), 1995 deletions(-) rename splat-1.1.0.lsm => splat-1.1.1.lsm (91%) create mode 100644 splat.lrp create mode 100644 utils/srtm2sdf.c diff --git a/CHANGES b/CHANGES index b8060bb..59e41c6 100644 --- a/CHANGES +++ b/CHANGES @@ -1,5 +1,49 @@ +Release 1.1.1: +By John A. Magliacane, (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 (29-Jan-2004): +By John A. Magliacane, (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 2f0db5d..09f6e00 100644 --- 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 7866f7f..8559558 100755 --- 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 17660d2..e600f20 100755 --- 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!" diff --git a/configure b/configure index 369430e..85bc681 100755 --- 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" + diff --git a/docs/man/splat.1 b/docs/man/splat.1 index c45eceb..0c1c962 100644 --- a/docs/man/splat.1 +++ b/docs/man/splat.1 @@ -3,114 +3,139 @@ SPLAT!(1) KD2BD Software SPLAT!(1) NNAAMMEE - splat - A SSignal PPropagation, LLoss, AAnd TTerrain analysis - tool + splat - An RF SSignal PPropagation, LLoss, AAnd TTerrain analy- + sis tool SSYYNNOOPPSSIISS - splat [-t _t_r_a_n_s_m_i_t_t_e_r___s_i_t_e_._q_t_h] [-r _r_e_c_e_i_v_e_r___s_i_t_e_._q_t_h] [-c - _r_x___a_n_t_e_n_n_a___h_e_i_g_h_t___f_o_r___l_o_s___c_o_v_e_r_a_g_e___a_n_a_l_y_s_i_s _(_f_e_e_t_) - _(_f_l_o_a_t_)] [-L _r_x___a_n_t_e_n_n_a___h_e_i_g_h_t___f_o_r___L_o_n_g_l_e_y_-_R_i_c_e___c_o_v_e_r_- - _a_g_e___a_n_a_l_y_s_i_s _(_f_e_e_t_) _(_f_l_o_a_t_)] [-p _t_e_r_r_a_i_n___p_r_o_f_i_l_e_._e_x_t] [-e - _e_l_e_v_a_t_i_o_n___p_r_o_f_i_l_e_._e_x_t] [-h _h_e_i_g_h_t___p_r_o_f_i_l_e_._e_x_t] [-l _L_o_n_g_- - _l_e_y_-_R_i_c_e___p_r_o_f_i_l_e_._e_x_t] [-o _t_o_p_o_g_r_a_p_h_i_c___m_a_p___f_i_l_e_n_a_m_e_._p_p_m] - [-b _c_a_r_t_o_g_r_a_p_h_i_c___b_o_u_n_d_a_r_y___f_i_l_e_n_a_m_e_._d_a_t] [-s - _s_i_t_e_/_c_i_t_y___d_a_t_a_b_a_s_e_._d_a_t] [-d _s_d_f___d_i_r_e_c_t_o_r_y___p_a_t_h] [-m + splat [-t _t_r_a_n_s_m_i_t_t_e_r___s_i_t_e_._q_t_h] [-r _r_e_c_e_i_v_e_r___s_i_t_e_._q_t_h] + [-c _r_x___a_n_t_e_n_n_a___h_e_i_g_h_t___f_o_r___l_o_s___c_o_v_e_r_a_g_e___a_n_a_l_y_s_i_s _(_f_e_e_t_) + _(_f_l_o_a_t_)] [-L _r_x___a_n_t_e_n_n_a___h_e_i_g_h_t___f_o_r___L_o_n_g_l_e_y_-_R_i_c_e___c_o_v_e_r_- + _a_g_e___a_n_a_l_y_s_i_s _(_f_e_e_t_) _(_f_l_o_a_t_)] [-p _t_e_r_r_a_i_n___p_r_o_f_i_l_e_._e_x_t] [-e + _e_l_e_v_a_t_i_o_n___p_r_o_f_i_l_e_._e_x_t] [-h _h_e_i_g_h_t___p_r_o_f_i_l_e_._e_x_t] [-l _L_o_n_g_- + _l_e_y_-_R_i_c_e___p_r_o_f_i_l_e_._e_x_t] [-o _t_o_p_o_g_r_a_p_h_i_c___m_a_p___f_i_l_e_n_a_m_e_._p_p_m] + [-b _c_a_r_t_o_g_r_a_p_h_i_c___b_o_u_n_d_a_r_y___f_i_l_e_n_a_m_e_._d_a_t] [-s + _s_i_t_e_/_c_i_t_y___d_a_t_a_b_a_s_e_._d_a_t] [-d _s_d_f___d_i_r_e_c_t_o_r_y___p_a_t_h] [-m _e_a_r_t_h___r_a_d_i_u_s___m_u_l_t_i_p_l_i_e_r _(_f_l_o_a_t_)] [-R _m_a_x_i_m_u_m___c_o_v_e_r_- - _a_g_e___r_a_n_g_e _(_f_o_r _-_c _o_r _-_L_) _(_m_i_l_e_s_) _(_f_l_o_a_t_)] [-n] [-N] + _a_g_e___r_a_n_g_e _(_f_o_r _-_c _o_r _-_L_) _(_m_i_l_e_s_) _(_f_l_o_a_t_)] [-dB _m_a_x_i_m_u_m + _a_t_t_e_n_u_a_t_i_o_n _c_o_n_t_o_u_r _t_o _d_i_s_p_l_a_y _o_n _p_a_t_h _l_o_s_s _m_a_p_s _(_8_0_-_2_3_0 + _d_B_)] [-n] [-N] DDEESSCCRRIIPPTTIIOONN - SSPPLLAATT!! is a simple, yet powerful terrain analysis tool - written for Unix and Linux-based workstations. SSPPLLAATT!! 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 - SSPPLLAATT!! source code in proprietary or closed-source appli- - cations is a violation of this license, and is ssttrriiccttllyy - forbidden. - - SSPPLLAATT!! 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- + SSPPLLAATT!! 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. SSPPLLAATT!! 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 SSPPLLAATT!! source + code in proprietary or closed-source applications is a + violation of this license, and is ssttrriiccttllyy forbidden. + + SSPPLLAATT!! 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. IINNTTRROODDUUCCTTIIOONN - SSPPLLAATT!! 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. SSPPLLAATT!! 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. SSPPLLAATT!! - 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, SSPPLLAATT!! determines individual - and mutual areas of coverage within the network specified. - - SSPPLLAATT!! operates in two modes: _p_o_i_n_t_-_t_o_-_p_o_i_n_t _m_o_d_e, and - _a_r_e_a _p_r_e_d_i_c_t_i_o_n _m_o_d_e. These modes may be invoked using - either line-of-sight (LOS) or Irregular Terrain (ITM) + Applications of SSPPLLAATT!! 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. + + SSPPLLAATT!! 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. + SSPPLLAATT!! 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, SSPPLLAATT!! determines individ- + ual and mutual areas of coverage within the network speci- + fied. + + SSPPLLAATT!! operates in two distinct modes: _p_o_i_n_t_-_t_o_-_p_o_i_n_t + _m_o_d_e, and _a_r_e_a _p_r_e_d_i_c_t_i_o_n _m_o_d_e, 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. IINNPPUUTT FFIILLEESS - SSPPLLAATT!! 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. + SSPPLLAATT!! 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. SSPPLLAATT DDAATTAA FFIILLEESS - SSPPLLAATT!! 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 uussggss22ssddff utility - included with SSPPLLAATT!!. USGS Digital Elevation Models com- - patible with this utility are available at no cost via the - Internet at: _h_t_t_p_:_/_/_e_d_c_- - _s_g_s_9_._c_r_._u_s_g_s_._g_o_v_/_g_l_i_s_/_h_y_p_e_r_/_g_u_i_d_e_/_1___d_g_r___d_e_m_- - _f_i_g_/_i_n_d_e_x_1_m_._h_t_m_l. - - 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 - (_._s_d_f) as generated by the uussggss22ssddff utility, or in bzip2 - compressed format (_._s_d_f_._b_z_2). Since uncompressed files - can be slightly faster to load than compressed files, + SSPPLLAATT!! 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 uussggss22ssddff utility + included with SSPPLLAATT!!. USGS Digital Elevation Models com- + patible with this utility may be downloaded from: + _h_t_t_p_:_/_/_e_d_c_f_t_p_._c_r_._u_s_g_s_._g_o_v_/_p_u_b_/_d_a_t_a_/_D_E_M_/_2_5_0_/. + + 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 ssrrttmm22ssddff utility. + SRTM-3 Version 2 data may be obtained through anonymous + FTP from: _f_t_p_:_/_/_e_0_s_r_p_0_1_u_._e_c_s_._n_a_s_a_._g_o_v_:_2_1_/_s_r_t_m_/_v_e_r_s_i_o_n_2_/ + + Despite the higher accuracy that SRTM data has to offer, + some voids in the data sets exist. When voids are + detected, the ssrrttmm22ssddff utility replaces them with corre- + sponding data found in existing SDF files (that were pre- + sumably created from earlier USGS data through the + uussggss22ssddff 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 (_._s_d_f) as generated by the uussggss22ssddff and + ssrrttmm22ssddff utilities, or in bzip2 compressed format + (_._s_d_f_._b_z_2). Since uncompressed files can be processed + slightly faster than files that have been compressed, SSPPLLAATT!! searches for the needed SDF data in uncompressed - format first. If such data cannot located, then SSPPLLAATT!! - tries to read the data in bzip2 compressed format. If no + format first. If uncompressed data cannot located, SSPPLLAATT!! + then searches for data in bzip2 compressed format. If no compressed SDF files can be found for the region - requested, SSPPLLAATT!! 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 SSPPLLAATT!! 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 SSPPLLAATT!! underscores the - importance of having all the SDF files required for the - region being analyzed if meaningful results are to be - expected. + requested, SSPPLLAATT!! assumes the region is over water, and + will assign an elevation of sea-level to these areas. + + This feature of SSPPLLAATT!! 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 SSPPLLAATT!! underscores the importance of hav- + ing all the SDF files required for the region being ana- + lyzed if meaningful results are to be expected. SSIITTEE LLOOCCAATTIIOONN ((QQTTHH)) FFIILLEESS - SSPPLLAATT!! imports site location information of transmitter - and receiver sites analyzed by the program from ASCII - files having a _._q_t_h 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 + SSPPLLAATT!! imports site location information of transmitter + and receiver sites analyzed by the program from ASCII + files having a _._q_t_h 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 @@ SSIITTEE LLOOCCAATTIIOONN ((QQTTHH)) FFIILLEESS LLOONNGGLLEEYY--RRIICCEE PPAARRAAMMEETTEERR ((LLRRPP)) FFIILLEESS SSPPLLAATT!! imports Longley-Rice model parameter data from files having the same base name as the transmitter site - QTH file, but carrying a _._l_r_p 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 (_w_n_j_t_._l_r_p): + QTH file, but with a _._l_r_p extension, thus providing simple + and accurate correlation between these associated data + sets. The format for the Longley-Rice model parameter + files is as follows (_w_n_j_t_._l_r_p): 15.000 ; Earth Dielectric Constant (Relative per- mittivity) @@ -158,7 +183,8 @@ LLOONNGGLLEEYY--RRIICCEE PPAARRAAMMEETTEERR ((LLRRPP)) then the default parameters listed above will be assigned by SSPPLLAATT!! 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 @@ LLOONNGGLLEEYY--RRIICCEE PPAARRAAMMEETTEERR ((LLRRPP)) 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 _._l_r_p file correspond to - the statistical analysis provided by the Longley-Rice - model. In this example, SSPPLLAATT!! 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 _._l_r_p file correspond to + the statistical analysis provided by the Longley-Rice + model. In this example, SSPPLLAATT!! 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: - _h_t_t_p_:_/_/_e_l_b_e_r_t_._i_t_s_._b_l_d_r_d_o_c_._g_o_v_/_i_t_m_._h_t_m_l and + For further information on these parameters, see: + _h_t_t_p_:_/_/_f_l_a_t_t_o_p_._i_t_s_._b_l_d_r_d_o_c_._g_o_v_/_i_t_m_._h_t_m_l and _h_t_t_p_:_/_/_w_w_w_._s_o_f_t_w_r_i_g_h_t_._c_o_m_/_f_a_q_/_e_n_g_i_n_e_e_r_i_n_g_/_p_r_o_p___l_o_n_g_- _l_e_y___r_i_c_e_._h_t_m_l CCIITTYY LLOOCCAATTIIOONN FFIILLEESS - The names and locations of cities, tower sites, or other - points of interest may imported and be plotted on topo- - graphic maps generated by SSPPLLAATT!!. SSPPLLAATT!! 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 SSPPLLAATT!!. SSPPLLAATT!! 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 _._q_t_h 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 _._q_t_h files, latitude and longi- + tude information may be entered in either decimal or degree, minute, second (DMS) format. For example (_c_i_t_i_e_s_._d_a_t): @@ -227,47 +253,51 @@ CCIITTYY LLOOCCAATTIIOONN FFIILLEESS 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. - SSPPLLAATT!! 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 cciittyyddee-- - ccooddeerr utility included with SSPPLLAATT!!. Such data is avail- - able free of charge via the Internet at: _h_t_t_p_:_/_/_w_w_w_._c_e_n_- - _s_u_s_._g_o_v_/_g_e_o_/_w_w_w_/_c_o_b_/_b_d_y___f_i_l_e_s_._h_t_m_l, 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. SSPPLLAATT!! 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 SSPPLLAATT's execution. This behavior + minimizes clutter in SSPPLLAATT!! 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 cciittyyddee-- + ccooddeerr utility included with SSPPLLAATT!!. Such data is avail- + able free of charge via the Internet at: _h_t_t_p_:_/_/_w_w_w_._c_e_n_- + _s_u_s_._g_o_v_/_g_e_o_/_w_w_w_/_c_o_b_/_b_d_y___f_i_l_e_s_._h_t_m_l, and must be in ASCII format. CCAARRTTOOGGRRAAPPHHIICC BBOOUUNNDDAARRYY DDAATTAA FFIILLEESS - Cartographic boundary data may also be imported to plot - the boundaries of cities, counties, or states on topo- - graphic maps generated by SSPPLLAATT!!. 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: _h_t_t_p_:_/_/_w_w_w_._c_e_n_- - _s_u_s_._g_o_v_/_g_e_o_/_w_w_w_/_c_o_b_/_c_o_2_0_0_0_._h_t_m_l_#_a_s_c_i_i and _h_t_t_p_:_/_/_w_w_w_._c_e_n_- - _s_u_s_._g_o_v_/_g_e_o_/_w_w_w_/_c_o_b_/_p_l_2_0_0_0_._h_t_m_l_#_a_s_c_i_i. 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 SSPPLLAATT!!. 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: _h_t_t_p_:_/_/_w_w_w_._c_e_n_- + _s_u_s_._g_o_v_/_g_e_o_/_w_w_w_/_c_o_b_/_c_o_2_0_0_0_._h_t_m_l_#_a_s_c_i_i and _h_t_t_p_:_/_/_w_w_w_._c_e_n_- + _s_u_s_._g_o_v_/_g_e_o_/_w_w_w_/_c_o_b_/_p_l_2_0_0_0_._h_t_m_l_#_a_s_c_i_i. 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. PPRROOGGRRAAMM OOPPEERRAATTIIOONN - SSPPLLAATT!! is invoked via the command-line using a series of - switches and arguments. Since SSPPLLAATT!! is a CPU and memory - intensive application, this type of interface minimizes - overhead, and also lends itself well to scripted opera- + SSPPLLAATT!! is invoked via the command-line using a series of + switches and arguments. Since SSPPLLAATT!! is a CPU and memory + intensive application, this type of interface minimizes + overhead and lends itself well to scripted (batch) opera- tions. SSPPLLAATT!!'s CPU and memory scheduling priority may be - adjusted through the use of the Unix nniiccee command. + modified through the use of the Unix nniiccee command. The number and type of switches passed to SSPPLLAATT!! determine - its mode of operation and method of output data genera- - tion. Nearly all of SSPPLLAATT!!'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 SSPPLLAATT!!'s switches may be cascaded in + any order on the command line when invoking the program. PPOOIINNTT--TTOO--PPOOIINNTT AANNAALLYYSSIISS SSPPLLAATT!! may be used to perform line-of-sight terrain analy- @@ -275,38 +305,43 @@ PPOOIINNTT--TTOO--PPOOIINNTT AANNAALLYYSSIISS 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 _t_x___s_i_t_e_._q_t_h and receiver specified in _r_x___s_i_t_e_._q_t_h, - and writes a SSPPLLAATT!! Obstruction Report to the current - working directory. The report contains details of the - transmitter and receiver sites, and identifies the loca- + and writes a SSPPLLAATT!! 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, SSPPLLAATT!! 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. SSPPLLAATT!! 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 SSPPLLAATT!! 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, SSPPLLAATT!! 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 _m_i_n_i_m_u_m necessary for a line- + of-sight path to exist, and do not take Fresnel zone + clearance requirements into consideration. + + _q_t_h extensions are assumed by SSPPLLAATT!! for QTH files, and + are optional when invoking the program. SSPPLLAATT!! automati- + cally reads all SPLAT Data Files necessary to conduct the + terrain analysis between the sites specified. SSPPLLAATT!! + searches for the needed SDF files in the current working + directory first. If the needed files are not found, + SSPPLLAATT!! 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 _$_H_O_M_E_/_._s_p_l_a_t___p_a_t_h 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 + _$_H_O_M_E_/_._s_p_l_a_t___p_a_t_h 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 @@ PPOOIINNTT--TTOO--PPOOIINNTT AANNAALLYYSSIISS 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. SSPPLLAATT!! 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 xxvv, TThhee GGIIMMPP, IImmaaggeeMMaaggiicckk, and XXPPaaiinntt. PNG format is highly recommended for lossless @@ -476,7 +511,7 @@ DDEETTEERRMMIINNIINNGG RREEGGIIOONNAALL CCOOVVEERRAAGG work of sites, and predict the regional coverage for each site specified. In this mode, SSPPLLAATT!! 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. SSPPLLAATT!! switches from point-to- point analysis mode to area prediction mode when the _-_c @@ -502,7 +537,7 @@ DDEETTEERRMMIINNIINNGG RREEGGIIOONNAALL CCOOVVEERRAAGG 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 SSPPLLAATT!! to + An earth radius multiplier of 1.333 instructs SSPPLLAATT!! 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 @@ DDEETTEERRMMIINNIINNGG RREEGGIIOONNAALL CCOOVVEERRAAGG 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, SSPPLLAATT!! generates a multi-color map illus- @@ -528,26 +563,38 @@ DDEETTEERRMMIINNIINNGG RREEGGIIOONNAALL CCOOVVEERRAAGG 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, SSPPLLAATT!! will perform Longley-Rice path loss calculations between all four corners of the area prediction map. + The _-_d_b 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, SSPPLLAATT!!'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 + + DDEETTEERRMMIINNIINNGG MMUULLTTIIPPLLEE RREEGGIIOONNSS OOFF CCOOVVEERRAAGGEE - SSPPLLAATT!! can also display line-of-sight coverage areas for - as many as four separate transmitter sites on a common + SSPPLLAATT!! 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 _n_e_t_w_o_r_k_._p_p_m. 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 _n_e_t_w_o_r_k_._p_p_m. 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 @@ DDEETTEERRMMIINNIINNGG MMUULLTTIIPPLLEE RREEGGIIOONNSS site1 + site2 + site3 + site4: Gold2 (238,201,0) - If separate _._q_t_h 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 _._q_t_h 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 SSPPLLAATT!!. TTOOPPOOGGRRAAPPHHIICC MMAAPP GGEENNEERRAATTIIOONN - 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 @@ TTOOPPOOGGRRAAPPHHIICC MMAAPP GGEENNEERRAATTIIOONN 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 _m_a_p_._p_p_m in the current working directory by + file named _m_a_p_._p_p_m in the current working directory by default. DDEETTEERRMMIINNAATTIIOONN OOFF AANNTTEENNNNAA HHEEIIGGHHTT AABBOOVVEE AAVVEERRAAGGEE TTEERRRRAAIINN - SSPPLLAATT!! determines antenna height above average terrain - (HAAT) according to the procedure defined by Federal Com- - munications Commission Part 73.313(d). According to this + SSPPLLAATT!! 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 SSPPLLAATT!! are + SRTM-derived. + When performing point-to-point terrain analysis, SSPPLLAATT!! determines the antenna height above average terrain only if enough topographic data has already been loaded by the @@ -628,49 +682,42 @@ DDEETTEERRMMIINNAATTIIOONN OOFF AANNTTEENNNNAA HHEEIIG 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, SSPPLLAATT!! reports _N_o _T_e_r_- - _r_a_i_n for those radial paths. - -SSEETTTTIINNGG TTHHEE MMAAXXIIMMUUMM SSIIZZEE OOFF AANN AANNAALLYYSSIISS RREEGGIIOONN - SSPPLLAATT!! 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 _#_d_e_f_i_n_e _M_A_X_S_L_O_T_S - statement in the first several lines of _s_p_l_a_t_._c_p_p sets the - maximum number of "slots" available for topography data. - It also sets the maximum size of the topographic maps gen- - erated by SSPPLLAATT!!. MAXSLOTS is set to 9 by default. If - SSPPLLAATT!! 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 SSPPLLAATT!! - with this number of MAXSLOTS. In this case, MAXSLOTS may - be reduced to 4, although this will greatly limit the max- - imum region SSPPLLAATT!! 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, SSPPLLAATT!! + reports _N_o _T_e_r_r_a_i_n for the radial paths affected. + +RREESSTTRRIICCTTIINNGG TTHHEE MMAAXXIIMMUUMM SSIIZZEE OOFF AANN AANNAALLYYSSIISS RREEGGIIOONN + SSPPLLAATT!! 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 _#_d_e_f_i_n_e _M_A_X_S_L_O_T_S statement in the + first several lines of _s_p_l_a_t_._c_p_p sets the maximum number + of "slots" available for topography data. It also sets + the maximum size of the topographic maps generated by + SSPPLLAATT!!. MAXSLOTS is set to 9 by default. If SSPPLLAATT!! 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 SSPPLLAATT!! 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 SSPPLLAATT!! + 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. AADDDDIITTIIOONNAALL IINNFFOORRMMAATTIIOONN Invoking SSPPLLAATT!! 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 SSPPLLAATT!! software + The latest news and information regarding SSPPLLAATT!! software is available through the official SSPPLLAATT!! software web page located at: _h_t_t_p_:_/_/_w_w_w_._q_s_l_._n_e_t_/_k_d_2_b_d_/_s_p_l_a_t_._h_t_m_l. -FFIILLEESS - $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. - AAUUTTHHOORRSS John A. Magliacane, KD2BD <_k_d_2_b_d_@_a_m_s_a_t_._o_r_g> Creator, Lead Developer @@ -680,4 +727,3 @@ AAUUTTHHOORRSS -KD2BD Software 20 January 2004 SPLAT!(1) diff --git a/docs/man/splat.man b/docs/man/splat.man index b4af60b..7cd520c 100644 --- a/docs/man/splat.man +++ b/docs/man/splat.man @@ -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> diff --git a/docs/pdf/splat.pdf b/docs/pdf/splat.pdf index 1ab6b8483f56ab2db7b85b22d8eab7d81a39be9e..0ad143cd9ab20f6ba9d5b8494b5a565749b97e58 100644 GIT binary patch literal 35273 zcma&NL$D~owq?6*+qP}n`)u2`ZQHhO+qP}n_P_T<{p!3q=Kn`6&eL)^Pt%i9^Antb|) zRfp*vnin`aqfbNo))F*F6lheCKkcg5?8(Q(f%QY5*Pz=^KeBuG_?!E<4qmYJL;D%c z@6qPL8uRPk-ALElrR;5o0nR0R&eUhE7Yp{VWM+C@lNeJMtGr@bnQOpC9Nsjq+I=!@ zDgt9bIGt`_@)JS$cJj=R1TBYBmisdn{0;-En8ew0I3CO<9lObD z!=G6gYS(-Ip8WKe!C|QbmX>H~)#v8HC5^WguKl{V{NVYYP~HoP@=m%PTaQ0)^l6a+*#TfcWH=TOq4f!xVUa- zrrYPt@}_9JgYk{yiStaf6*rg0N^Mka(u}N@bK~FUPg9p#E9`+Lu6hqC(i(o@{aY1b zc`$awuJ6;RNU7bbmWDkDzOI#VA7AJ%u^YX~!#(@35CWJWRuAQ>qa|j#`a9beg3+FB zV`Y*`%Fgzbq08RR_R5T`MjQK-Cm6hkF9A+?NpL!{<2yCh<XnO=lT)cJhwt&A3NhUJe0;uGss<#>exu2Y?u=DDheI$BwKn3o}0% zzr8qJ7nbR|acMh2xp#xovk*JpytOwQK6Ay#r$%O2fSG9O{n$@TWfaj3b*MdX9`*6u zqv6(Wb(@Kr^`sCRayUuByBtiIZM-KvW^nK&;^U!4JV+08UAD_>jk?_$+TjFv7Xp4k zH|%5|)T7$$48?Gzik)-|B&Wf;h%WaL5bhBCDdZ)57Cq+A+i<-Wzu0^5L2{ff_f=u? zjT|8%9$N`0ph5*Y4mcI>Vae0?4m0%z3p<)2rnzE^%K3Dv%gV|Y7)b01XhJP{s2yb> z#<(=N?M!CvNiX_1l>YBLR4^QR(~d`QuvD(bLGoSrerw z?)YKKtx7-tBFX+aF-*j*1!*|Oqa;3@Hnb1ZdrHt@PJ=8jG6=H6A* z5%mIQeN5>^GbudBJ|_;_B8a#aLzQF8GbVnh4Xo2~!R&4SOARpo@wgaJydmU2C1vW> z9qCou_*vL(7wRr?N@`p|6raK{fOy5Cr2F-Yvc6=7_xFb-y<2O%PoUSAoTFI5V(nIQ zP2*V#hN~Fs=J)qAX%%lJYWYaZFB>_A)F$zgj=F^PR;(F(o3hlFTe-903Oz`hUl?D= zAoL$37)+3bTP#YKj|ZZ|SykS$8!yR&$6kD>ZGo=DOsO;-2@$&OQcH++=C_ayY+dHs zO-(gife)7)^u07qpKLg#@>xPN3St0iCO(`_TMeJG-?O6)^j8Jddi9Cfwl8g_CiwZ33%rc1L%Es&YC}l<^Ucw|$RhDbP zpacZ-E=?p&^@(f2e^gb;DIrBu< zwGQyd7~4T3?lEZir!QjSOFK>N65aP9?e3&{LGw%|n>;Hu1osw{39=o= zd>1_+G85jmx|3`a9Gfk)N*=%emP;a>8!>ySTNYkhkQ00m6U~7plA%SrmUgPhb~Qr| zZ8lQmxqYe$=-8+L+C+1wEXmbQ!x!S$XS6~1EmA4=SE&kW8=yw4w~?iviDD_lvj;>_ zu-+sbyakYToUa=wr1v4VT9G8$=4@H3OA@Z&zcNJ(^y1L-`1~~Lhnn`*)sT2a)%akD z;ppk$=Fs{sY{#A`i-GRr2n*iu$x# zKEMFcs(k)naIWOzdlQxA;pu#TLK4j>3R2*4hTX-=$D;QsJbQEKX5;GUHp1u8uM={w zQ6>YiR}U1_W~zTk;aOF)EGE?->Gfsf=+-~cqo3u`$7#D#PMm6r;!hCmS4$f6h9&Za z-Jvi6LOBk*D#RkLs!FPS63ND>?BnFo(kZhCSiAA{{XJGurEwo1!-_%6HsZ%F8MB)W zBn~2u`EYY2{d-nG0Vm_CGU=E}VT}*GVWW=fgQ>g_YObS_(@^$f!0pGOvVKar4yA%R z<3)q@ltM_TYwExM1KPr4V_I5{^|F`UcA`3y$&4HjPXG=3B-1Vr4Vd@Nad0VjatFI? zfp^xZGifT`ly@|-+9xzu0H)Ha3fr2*h;EU$Ay>d{-0Cz-<4PA)rVF``t9VGTeB!7AnD+_c4#gZ=zhC`cu~bI(utj*AKC$4uRTHqJ;VjSUE{~2wrR-E|kXdQD zL`?VAs#|{QR!7xgJJH$P%~VX0vfX<#fbfD4g2c`+1TlrSihF{tDLiPJna`|O^)5pr%87Xepxn{IYbIIYodX_hB;A$x&zD)LEH73zj@1-iwM}~)23LjH zj-`z<)sPC=(`XsyT6{;dLEW{ZJy7Dl*tq2pF)0v^X|yk7FwuhVNpC=dofih4XxKx4 z2(z9Z2iGt0kr~7aY!+%HnS%qwc7m?r zt7+Y6xD63@Ci*?XJ(#x}#9%TyX?6z*xDvHnjdk2ZiIa#)`y7ue1;dHpr4(<1Mp6dj$`>vaWCNSG|st(n`-<7eAh%T{P-aw(psnMwnnL z_Y5EYEX5DUIP6!54O3kyxLd-E9A1V!SOyCQ^xtWz?o1_&bW&D@2*H^_$sk=$efqTB ztz08NFRvz|X!Eaa_;;3Q4w6R8MgoITHS}0hJQJg^y}?h0j!99Vd%vUuDnA@w^^qFA zF)q8~T)$a4!S+_O`i1A1CSN))#QA9piB@Z-4^%xOFQ&pQ>)ZkEGFVw%X~`luNtUH) z6Gc_~X?zT&PI&UYEHnx5C9GCcGJg-oKIRhzHM1$ilgzvG@E&#synKbQI+x>4U3Ga3{8s+}Z z;NDg`nPlN9@HGZNUUHti$Ig<3z}M=1z;ml2Zgg@^(+3d-os!=4$>>v1 zKz~JxrKtKok){43(9>Sz$s}F@fs=J9g5s^__q0$bpFwO)Uy?#7{%LuA@880%?R_kbl@8OyQ9M?sd;0<~FT}XJWLi%BZ;dNQ( z@L_}V^A3KDTs-Y>^qTq5rw_}MjZ&lZl9j<)PO-6@l59LBpFQH6vgiTQP1k&~so^G2 z-#Jq(sbFH8y@hlNQj={Lx1x>u-cZ$MtxXx^_BrToKVwpxNJx4`FGYLRikm!` zf(HvqGd}~YM#&`zW%`^+q-BL*Zy$&j)}st25nNLKuCE7Z>7254=vzXuyXd^`?Z71- zTve(3T=)fshPuLZahL;f)`A{9!t`AueAI+RMA~pia6NV7S85a-r+i!d`zc<_vdNu4 z9XEOP3P1jU4<)leulFxsj>NDQE3uJn=gRG8kRLto6MgwyElJA6u@3(v$zF<0m`O!9 zXiUJbG81db8%y%;)!;NeDay$SW~PXD?!(%;_@tg{33YS8iSvz?`N}ibN*3fV2coeI50i@VRt(cZmJQ(y796*2am9RHv`VIpQ-THk1k%8ud-Z=+d(fJly z==k1_#PS?Ii8RP?L~~&kazr`900NK@7W6n@|MCh_D7f2?QE`8*cl#zd(m|e}e90B< ztubYjAM9Dx(hyXr5?CE1-U-8cpfyx>m-WRnaavR~FtZ^da~`Px#z;hFAID0iR~b}c zNBVI2zI{!9#Da^`;Wl#+N-u4}6*05&Bo42g$=C ziN#Dr!YxSW$DZ)rp?;~|>#TPkyx@=x5BF`#7-UtC@7Ay|d4> zxhkUJAMip9Y8!z4qLdztdWh_D6(#uQUE{2T7u2nu%;T%tBhG%9uHpP&?-g4g4$io@ z$C}Ny3Gn za?Y;g(#p&2K0)q;7U8w?4@R7r*7&Ul1ChXGSxNODsYN=G<~1k?`nu%$75{0)2303y zC)7(Qtz46-$6WB4s1$u?VLeRJ61#X*kKf^3A3$xR_N9rf@&7Ry|GE9we*D*Y{P$#G z;^2V#KW~i8|4WT9vi!feks3`Mr!BEYpS8MlpLW!GDV#Z&-lR?Nu~gi%$yl}Ho#oUP zcm&AA@jw7r|HPBMeS9DJIdp-^*r)mvM-8HYjN9B>C%LzGVq|S5LBH$1s-F=3x(7F} zhXWF% z%n|DkdqkQ)SM2dE%&)z)%d@mkNlN$Z(bEb21=~>YE`iLGjGy*%sngU{jaidh-TJEq z^d|`E6Kg!OXW3zs^b6Xzo6c&l+0?E^`ilXQ1ENSJD;#;bT%+c-dTI@|*D+818?nDu zb-GiJS+p?25Ixs1gK}wCrRu0y+Lj)LSwvtXWiRtK9f$P=^wroE(ey`UL&&G`Bdt%x zd32^Dp_0|?{L8OO8#;}J>Isya^!-S@?68VsDwqvzD&$nJK8aDM;3+Hu_tI#2Q5AHz zdgmoq>%CWC?&dHf9hj5Mj22SYv;?fZsTVJ;^?B~Sx=7n~2Tv{~6i>5CZp3WXo>ng2 z7yS=MXT}3bYn?v?6yX6~6_<@BpNH{VsaD#o#w9VEPS-g!_9hXKsW$5va# z#-b-vDefzv#a&p@6#~4WTC2D%+{OYMQ>Ig)V~zWEyEtC27H>O4;sjI+CR5Ond+{R! zTVCY_k~cn(tb_ZbCbN?BuAq2v-CECG6rX{%8yMAyf29LIaZ-Fm_Pky6+<%lAmAMx- zWA`&Vm+u3{36aHo*=Z(zj=Z#; zX7DTZMpdoASa_SJvLmHI^%ije6u~9S7MQ1sUb1`iy1j;a<(+mx0kPKw*D}qg9>cf6GS}+{r2;*@2nhs7V3`)bz@x9KrCOm$o&B-4bwXlgx-Y6X}tAP|e>0H&($6vC3F zKK}!)F3U;dl{OHx3DH54Vkuz*Xc|EX2!>)F|CYt`5?Wccya|)xp3Z6Xs^7{Us@ao>XB|m% z%+0xhAs|!_9|+T5cv2cX*k8vYQbX@LgNom#&lVrHQs47`7Bko*Pr-eXSGsy+}R#u_2d~p8+l&y5=sUPlW*uUHrq`34td_gl0gS(_)n% za?(N~n7QSck^;v}4G&o;;dHu~@?Kd%1_6N9&07kPlx^amh7k7^eqv3Nb~r^!DC3Oq zE2ga@fQ;OTLyLK$m#(L)^J%gq&*|jlA#Fg+*&P?Y^a-G0Lb+1Rxo3-jEhUepBX|wr zbH*u3P(R^l`zx9=8-vAGa4Zn|49Eu>Apc6PU>z$_v{6ovI>lalH?n(6*Mwwny#!_f zV7gxfcWNn0=DcBub45GU0QO$~84m(G*v8`XS+ryKINSOVv&N_;YSvF^E_$pqFR9Hk z3>UkkE}RmZ7I#Q85ld?4)3#C?)Wi1q@uc>|20Toq6$Sn}4jNzub9_o6DCU}6sHauP z-WP`XGG8oY>glOWIE)uF_IF~bFz`Wc6UK}dKX~%+u zS^|A-&LQT9Rf5eGO>MK8Q?npz_7ucS5iM?i=n)DfZj0p;#f|;~Z!qu^^AD=Q4;86< z9^QrJ;|XkPwu4BRz|Y6S8=PnQ(z*a$o=UEw^dw-oLu*lxGZqu~>vs$xTIW;6%?sR| z!pt4irUm;IfEZtXCg|&Zk1f{Xe0d%Vi0ZH%O8c;b3=~{bJZ%&ZaM?tDHn20rwZQJz z^1>!Vh_gIZAd){)S18EGl1YZxvCsng5uA2_KwXM~CHvv1E4@0 z4T$N3R-xT%Et3syYKLm6+7o%y=jga zF~>Hx30HWn9~paxB6~WErsj82W_SJ^bc^<(4sh;2X^s}Q4ZTkpJEFi;xy!&x1ZBpDvqqW-*ADgJg%pe7lZEl3XSf&eTP5cT!hh;} zj%~dw>%poRF+@$WI}4X&^v{P)4yS}Ea_mI{KW=1R6HYGq0g8(m{>Q(9lTmpQ$u_TJ z(Oi-!8A;zz`cOP{prZ^&R+MWNd8MLk7YZXcT6lBD_}$;rzEK$4=$jL+YinaeFoy1g z=f&pXxLiWzI0AgHb)%D6XfgXGgZIlPb)x{6WSvwOC^jU50Y1}g9HjDS0cJ-FiI?*O z`?>W;bT>*ep(J4j`Jd7finW>|^+05olC3N<&iQ#?xc7JKk{lu2n6)Fdo2F)NL?*&8 zk7;t6gTiA4zTF;>Y3p7h2|UBv{`6B3n2M)Ye5n65b#T!(_1 zEazVSh<=sM0xC7oST7IC^4zQWl^XYJN%dN$6|r-HfK%|+=!{$vVV&gZ*ST23${JfW zfmxC3T4;!5I715*~VRsPDiOH*eFz59!Rp7c-X-F@m(XcmTdi{n5cb7+M8T zzidzu&BGAcRdqbntgE@k=OT;*5+oKTJgs6XaxHGX!tPpcaH)vd9k3Mt*Wa;b(Ly)t zU|$%*Qxg)`Ce4)KTusE|w#NQ7+t(ITN(1GRbZcGak-y)JJ2-WZcUM1EQV3=y8xcLp zu?BW5hqfL_-R1_oNTY+Hpdk(>hz_S{+_u{k!3GB-nh(`0IF>G&**3gXVAfA%)$Owj zJS#1V6(;HaKc4`ghD!XOpPf2so6I($5ftt{OxiN*ly|o3p!yQ8Hn%>$3^q{;Q~peE z^Ir@c@-JGlL@*5QPH*llc`NQmW)mGrPa;)}f6&aCV8?LNautzK%cVM>1)@&Fk|fPL+9*r`+78Wcl6t?vfln+ zA83*u$Ov1LAjos;vMr+>K;AT%IkN71Zx$~ZX1GN*ixFkTKU3}36E#|a3y zVTrkX@Nx(;Vvb2_@@aTIH>`}~IG-4VCciMF6v#K(27H-lN1R29{*C~=GyrSW{v!j| zqgo3V_#7r;VzGzO+f(98JJ;0gx$Ml}_}eL0Ri<>8_iqE7ou+@~u;JtFVP{lQPk!_1iKcf= z3o76b$@8{-7v5}ioL9`kEP3P3g&Q9H~+~>h>0Nr_X$El2&;Ym{WARN`OF(ezp1jsw1mk$!4b0}m z;Mv20!-4{-D;aK2x1TH4A9>6NO8ojjb!i`%@SG=t5~*Lzb{}QjaeFi4@^vHdbvKf; z<``kO#coU0&%NjfML-cGxC)Fo)oMXW692w#7nVF-Ep0+BMo)XhYFbbqIC6P>m!9csoa*O%Yh6_TE;M3Ux-&y3wJ z1+u`IWCj3j|7Bhu!zBD8nxh^ghRMxkL18l$GwyXIE5jgc;y|L9F9fz5yZQy5JaC#~ z$;pXqX!0;pHk&qG-DavK*)IqsE$Ri1`@*eM#ihob-uxzyaU`tZK@lOl$XgBcnX;B2 zKD8=L$2k!McSkkL#*~`sWK|pS$-*Tn^2go=+gXL|dSdP;B|%|+-0tTbm)#&oUq+|U zvgDEh_tLk1>PaM34tmbA1bm!s7*WHy@mlItR+K${yfPwV7Kx#E3o4*rYbqjsJXna3 zsgUY}c}X3a!!(1S{=~2cHH}*oIUp(hxk}2Z(cVXo>zgjoykSHk7<17J{jHj}&-~X$HE!W_ z%qKdp90$7l41D5C@06?DXIg^>%u^<*KzSZ9w1I33`zBbte=c@m8Nd z+0K3>P`_#@;Yy$w)1z_HOW;vK1b7j9j463ij({F(0AKJ65JAL7XWIqmLUtv77RHQ{Cngs%WT@aIiT=1_1=}fEiEWrN3@*VtiO0S3dOrQM}^Gpu}7cpdL>a zRrs8#j$HlI**j)_5p! zL;P?xmUqH7XR9%zV>=AxI5z+p(IEH~XIk9KK2(F{_$mV&mEEphEVM}sxL0y^T#GiD zX!cM}42+yc$8D2}g{xeehW$aH$0L(yWaxuh2P!#~FseOj81+j6Sa)H|Fg%p5Nv!#Z z;&1Q*P0B?ol(K;=SmA{)-z3L9PeTI<=U8&g$4}C*KfFq15grMEUGx6HcMqA81k(w| z?hg7MbSAY8OTB@G>7g`{VAB*jJmlQs(YZ3A=J?Dv0hk6HRtOSXN=Tu6uHiSWEfzl!H0FifuLFaM6gXB}f^>1uQ!#Z$q1FL-D7&@-?i9s>li6fZ4%fQ(a;wO7!leUwA- zV`ZB8jWTi^yWmkD1j_iPEVU|=aQorS5#SHrb@HVxP(;8_uekSU{H#-UTWUqAK03-> zQQz6tl{cKtKc?d)g~8<6@Ck-5>+w1$FN~-SkRPv|*7$9em?UpP^j84250`G$r;kT= zrdKl=ti%!GBoAU6{m%WDja@qPV!Q%91_8iaNhhLQ3^Ij+N@sT7FH7Xa*J+vlQ+ROl z!DRf*D@!!t-5-H~)-N&KRa)VQ9nnCz(}JUI+)xc!#Hpez(XOG9=oZo$Ufant8nRxD z5+HcXWJqie@3w#;>m$Qd7eDQ8uE}oS`P)j-#(ss7$1^p*)wC^mcD1*^=Ph?`EDE_j z_fBtNiV-3EUY^K`t;OgJxg&VMqleUaMRnmEu1ER17$)-owzDG`cz7drRt%^d<5 z@k{b-8Z_i}Nqn3?EYJIi-&&^6Qj)!Uijq;?cL>(40^8Z1~dX7=2EA zeXnP#9v3isTQ*tXW`_Q-0yK-T$Ss*G0;Q=<`6XQG(dkf+NS@Qy`F?eriCTJ~eH7=a~$=b{~vH)Y`y$UQ^XSq~bay)XLn5tQP*FytTH<&{|I zZ^KE9R-2P*+ABV-J*FPSxFg)l39T#lrcN=0o@IMQgGQ#18oL7cKihD|wNR^`HY zW*k=M>A3dqYK;z)YG^}JA%)#ExImS>#>BOkT}f1dqFLpmF^X>it5YI&fn1sIo(P(x`mAQtj2u1C=3Mn1`4)@d>Zd> z5^g|#e@@=Rxxoe$1me9oPb4$O#RZ<>>~R&<5ch@%_QqRjJ$GtqTt4{fRLk_QY>~y? zc4kmcu&Cf5nv6Yitwu;kS+s{4rBms25@_h*Wsco8Asv1Xc6jE3&$MU^nata?7iS$$ zH+%P!BNwn{?BFRO&Ya_-qqn$Yc}(z`_!7U?Tb|gRH%u6Q2W*tb)O6d@;KFtJEgDoB@{8tbT8@gxtI`=rBgnS zZzo%xq&PbGeeQR(S7~*|Fk2Xk{kB!yj=ZB9f?a6Ax7F zPB)KE^^fx~Fp}cf-lK)jFi`L2++Fh$@A}4NPrDwyzDk zoJ96|OhXHyjYV27-O4ZraS;PQ2$|JK zHQ_YWyJLv^$FUw4nW_bjs?z~ej8tB+EqXBurK@`8Gw|5NPkvP+FM(cVA;HE~z7|^1 z)=hQ`-74{ggxIHpHda!#PO^`ZfW$=nGF17b^;&XoKdhMgk7l0iy@%TV%minFB$ZL4 z&}x7{J2%sv^mScZky5*!9|NHTQ8p=D&>#Iz_s8jwIANXwG9v^H^%TP z<3W1sg~YCPB;vP*TJwggR0zu7g?e~2XXI1dF~`NkEVjKWvp2}4(u+f83ANbrv6?=s zli2H93qLk0Ts;bd^ z!qa@})Ag1P@HbM&QFe#4NWY|~B{)0L$sAIw!woyk`*?HS4407{aQ>WJU8F>d`(4}p zzWAO4WLO(PdGqWE@TSzbg_3nXl?c$E>R`x6$C@dr_1>Wp=Uv43&{d6%b|aNl|6JZ* zM;F%qJ2m;`dz|K&#S?#emMT7<*Db%V9drgbZsbKeWxp;z}lK9tDh zKloGI3C33k$geNi2RM%XZst-)+|1Hzf)q2_*8^s? zv>g0?Eoh241Vo4LpL{nle^Ah<>132VdX6*8aT0GZ%K7$#Q{``g%3Y6^2MfDNZsrgB zi8%4k9>s~ecBx359Y6MHkw5KUiQy??_Th~^&saRWO%o}sXOi>G{3+-@v~~;K z<|Dy?VJ27B9iC*peobCPd!YeF%r{X8WsxWI&C)d8?8_k{2EOOfUE{>1b)%<-h4Q%y zL+#xKDyf<14lJ$*BS0D)8;1P@0ix1AUKf;*t z>E_3Cs|Em%FrMhZ&P2^G?jR-#?5CWHpFqd{oB%1Q_@pg9o_iXCZ-f07?vb+rxp{b z;G`GtePssHgM_NUNrMAOAp%!0yJ(&Tu&JQOLEvL$HB{AdJ$HH;8~FT~#j~0@f?Wt) zP#6^!EVDKfxkT2R*t0)H4hd#ZEMPJZAF~lCtdKZVL@*N39~C79BWXzYfdPi4)VuiV ziHU~<3?hl)Arp`{8@uQ*i=^QTtWxziB4ak|E8q`;j0}nlujyf}=eUSy5^&C>p&0RA z&%C6nuy`15ENXp3vj($OAPH(I9Mz5^?>sQ1eQ?r%(bJRuuKaN%;@7??T+}B~5(98_ zT^9*3@qWQPC2aTB{#Q49jFS8%kg`yi7GOfUD2%wwL~%DGi6j4yebP)~^pI+W;|-gM zYZ-SI`sp!LSJLr(CKNY0kD-Fr58Mw{_2uJA&doz-e7+DS=uy{Hi2waq0Sul0{a$>O z8@~=#pke`(>KVEnEtd~Ja-9CB>D}1yI7WespV=4aw4awU=W0<`28?`#lDHp6gscMP z{+W=>@!AdwqoVupx*I zCLiY*nuI1PZ)-BIayCrT)m53pT+9uQ^6i=>D)055S>Yq9KUiawU~jS3;ZlUnl$7HZK}mR8aX=! zY6BH60`3t^u;BAs{ZKS)c#eh!bPt^vcg&~#YzxFh!M*8vK#IHhj1+-Z^!e(^O3Mav zOsHGA0|(%N)g>h;l5D_N3^o3IU@#Hx)L3*nAs!&Exw5*Mm<9;nF0Q^$Zcz&n z+##{mY0&7ou-RA0em9Do1)Zr=(~XoiY;&B*)){A(#>-x62cD(70u*FsP;_O7ows|8 zPpuOW?IqbGF^3Od7;Y&P5Oi5?<>PS zlcRFnMS+U&E-u<&!UORk5R99x>f6?mTrF2RAY12+|UT;)Tv`i$M&6%;Qr0qRnSl6F0Gg%HIg38=`iz~}*6~xB? zu9h>s9!hWiB;3?#^QEyOz=M>rIwO;ll}@Ohk@aCmbN8ewEYN)btOdDn{3PCm>1s9& zlr-nwOX_J>_pthf%tLxpuCMg>**P*($x0o^W1GFNRG?Z*wpQnA81wRp;H z5#o4QCbxn$+GgP-@j&yU7w5`88}L_$@BdiD^zYm(KS}^1(I!M{q)DT(UrEO!8+D7y z>7EmsE%93S!Hs50=Uqx@`Cv&s0W9It+3C5uVBFEB*&w6s`1#U2N1q7FEUvceBg4M^ zLvm#$C`y4kZ!w_=&bLB41kU$kLbWVR08QGIdq-R~@xzP@b9;f<^YJL@QvhT;Fh$GM zXWAH;0ZLN_$RVM1+c>W`?hZC!Q~fI@aEwkOzCIjjk8iFU|JQgBKP7*J%PI{ix&gmQ zi+0M2tj8Be|8F#6XsKU-EjgOYh(+L<2a}O`LIEE9D|5*c*0?CQLHP2$mxV%i#<^rj zXkkTE^w-)ls~z)s5N@E8f7G=>@bbDJRnB3~O4(Yf)6dJcC1~ul*dt((;2RwdZ;27X zO8T#pSWM)S(P&L@s+PPF{Ei$MVPD=gBKJb2QbiODda%}_^PlUq}TIfQU+z})9NB%FHqrVSR>fg-?5zcxl5NISzX`; zt-?frJ3VB2Sn!vI`R3HqC>Xi)9Cj8Fo*D&UopRs~LCxAbX`Yzwr{Ly*CCQ!9+vktf z7Uo!natzXt?*f?#CBL2?mIm|eV{S)UnfOB)7U?-JBE|WUc%(gJQjs+(YM5Kja z;Fxdx#C|O5^0MQIPcDJSogmHxxP5ia^LgDExg#lvCV4mdt96YE{)YI&L+hhY?-jbv zTZ#2<)7I{rdx$zQHNev+IU_+2q;ZQnzumc+IeFZJ&RtX{!J(sHgC@f?5lTEcBGUZ5 zFdF95P3-GA*y~wvYYd*$&g3rY@@3}R1br-|xn5iOhup?OEj20iKP0Q&XBN>ygH~@T zdB`%9h1Aou*|s8am=LYUS7BN$$rC@|qn&iM;(6}2X4%uh7S*BT$gy!lR6t4ZkaMEP zC&G?fL7!19nJK0>>Umz7TAfv(8}oB7^19Ma+I1PRy(V&VrSc@+L-uy>qg9i68=!oQ zT^aKc?B*-{Yi{LuzWO3CO6#roV(;)#cQOYp7nMw-7R7Ru>;+#zo0+x`I%+?fZ6G*Iv5lRmKUzGn2D2XseZlI%7%(R1#I{ zHLQvK^HH|v`*FZ!f5>AfDg_;fi~9|qz>fq1O0xuh8J5$UNC5$@ZI>md*WK~;d!xm) ziO_^&_+1k#5zf#i8T}5BRr~ehUPH?jR8W4oYOLbY{w2J#BFqXz1}8OC(ADj)E{&^@ zJ73(K;ECl@PQWgu4y?LHBx38+ASi7Gft)4O(tUNYrRr&pdNr#n0C&L-7tdi#JG|$ze0V>u+(;}}Ej$?j+WzT4RUVgR%T(@an)SDB) zKqctgfLh#4`=+m#jAu1K9T?y@)zOX4FrVNso2=GSn5mH}&2^xJOQwso;6XLa_-bhY zGc|30Ttt-7lE#_^&k027GB=ZkmLM#B*8ezBsj2{aAYsX2ONb=eLR#ZZ~;wOW`CY@~!*YK$O|xy*PYPYycr z_-&;HYQR@Egksna9thHXctEjm7NV#!l+JhkrS5xSmRYy67>S{-vsIFx0gVae6S`r< zReCVviX!f9z}adkONh&N2$1e+z8tPv7Z4rjpC@1#0TUmngX+NC%FTN6717wIlX9(( zq~GW;4vOt%!LuLLu2^Hvsx5%b>1xzf(k3p=r_9Z%w$O{G$xSWedmbx{d{x^P+k-|I z4<*Vk4#8`TV6g*;*%i#-m7x&&+VixY0QxN@Zzqde%@waR*yK05a_gWNAP3Of+rp4y zIEao^xqIzWgiVAOR<^KXes;iD?ncxkn;aCF}}IeDqyg zaWib1jr)D`Cj(%)OZPY9TmK*d*=R=!Pr&bN1O>&1>&D!C6i1gLab`i8>xwsXDB`#` zWBN1~y&0w$qhF8sVjAxuuqmzqB&;!vD=HCS1aaB!jabM?CB;uX0L;AW+CLE%W&uxN zo`eaPN6-Y@s~Lz|oi!)SXGShwhPmf5wOn@kb+tL@3L0Z3%J9Gth%XVei?v`OFhtZ=N%WBmS*F zAP==p+)1cQMm$~(Dc~6hP=iOU$>@VGJQ;_Cwfx?}xSap5x37$fYgyXHf_v~FgS!vz z?(PtR4({&m3GVJP1Sddn4-(u74#6$KC6JHg-gE9r&U@D@Yu#`DP3^Akr>ncFyLNTg zHnO@2O_*^x{19Zlyvb=^AT}ppSa2wX8&=0+l(r+E28zCl5~R;?LYe}z7TL?uxZH^# zUCUpkc`fUEe!0F5815a0N9McK4m2kGL=7dg6y1`Es1$iJ1rxdZ9glX9LYj~yB~ra^ z`3)VL?mF_9Z)L^=kHTUJ^)ei{A(Q>%h}pK4E1WZ#US+MxC+A~)9DQHpo4cBo(xoUS zAa5M|&u7>*noTe)%_9b&3)v5#Da+qxNcGmtE1;sUpSf3};;r zG-OHlP*W<9VKBwOAT$pDf$(m9GdZYsmda1`c_$U#Ycgl@6Mu`;IcQE=kFfoSx$3x+ ze6E1IY%ah3c~`mB^lAzGjl`y#&-Vl`0B=moz_Dg@mhmcM{q*K^6L?9Bliv_bnJZY5 z7his=V5v zXr|N$QKMg4o6ESs)Y6HdPnOn6=*4*U3`b1;w8t~}x3KV0Y*0%vT*+J1Y8lV4m{Z{D zct*daorBKkkcQ8Fs-Bw&R0wS{mvy;qYz!mg3Uh37agT%zQon174>;LKDuA%z&M#&Klc6kqJ!bAQ{@@zGM26p#Y}X z7az}FTJy*Z1noqo##~*=@Y10{>P+>yzYgSSS80v&y_ZeYgx!|7Ya(Y<5;BmB@r4_3U>hYwV!lC&10967CIw!YX3w}Pwq4>ZMO(oJWa`- zqe?L>=q7_MH?^Pdym6=0&*E{({d~J_Q7)lyJB!EuuJ@rHDMVvE{h6S+eE^>hhAr&4 zZ!*4K+kPOUNO!mdHQ)-lbjt6mvQ(7eg>8vm_ny@znUz9>$ifnCIW)ot|AF*57UOlOlzhym9>Joh`~eU5X+-#vgo zE*Y`$aI^mD0r31Sl*P{SKM7?eKZUZE1~HyOS@JnJt@8o zGmj0%?@otbm*lQubNkM7FJy>sj0iIlSMTpS_&yv@w)<6e+0Wj%m<8V>yD^Nzm{>q@#Ao{`LVm6hUpp-@0C-p;TTB&aYE`OX~ zA9*9XED5*WITe?A!fI+Q39J#ftJaa}0Np!SHF>h^XA&P@;a6t=^XxE$He8|20&aQC&HmgOEBRyA$)YnxmrcQo-@FL4ML zMLSpLQ9f$-t$uqz(tCVuryl|MY64z>YKg0v<$PP-*4CZ{rcg7W1(%Q#zU+REU(zlK zsZ}%?zKVZeu~b)Qr`KqIAXgR(9e)kh-nDkScDP;Jt|k}BLdp%-oPbkv1D{P(sM8>L zzsF@T$wf*>4k~thri0pBp8}fBQqCuN)>a+kyMm+tl{QzGJRVo{0{oK5&E3=aAhu6Q z6+_{CN`gi>WLfMml*(W`^oj=pA+EMXc?wN3FiG=XsdHT=aB|Vve7wy9PdR;N2GI(2%NjRx@qEZyb)RmCI@gC~N>_*Smoy+YPSsGxx@> z{dHCXAB|~nc=IynNu~f8s4O`bDoG`4`9>T!40r~W)*FXA6AMvaN_Ck$pymg_y@82r zyYazkXsb-#hVDFiv#k&LVvl6~Cx>+v%+IEHBZ}Q^{NKqOu)K&mD9V(<%hv|>tdx@8 z&l0*na~kY^m|o|pw;@GX#r%o_qaLZszRwgEk|*E<9oaK6>)UvMsxwrl?_0(j)Z^Y+ z)BZIM ze3_2h)s#za;B}mt%n{v4tg*?1c={+vngfBQytI*uuzVC#?~dQE?rKj2oud8|^nL)$ zl!Ja=Pzw}e7iaEt&?enwq5~6740p2kVKfZ2N8i1)lnZe{ke{e(qpO-v;KZg%e&CtL zjex39Tr*}_Dl9E>)}4HSE#=q9@iDr!=xiLmm3CXZFDeicWb;=Q&ze#@X89)1lyR$> z-{-f5ZB^l{QYwK{cu5f$}zD z+8ZNVE84ZhX-&LGvS_9Ed3sMR(@lWk9j9uhNo6a^J8ry&v(@MKJ{msyIzktrxOY(l z({ppPuVu-76G^}OXKex?h#@j5Q1@344@)SS$qs>HuAYdq^uTV z0R2`zk*^VG(mp8-uLB!$(H9NBZ9gZbFFWUt+@vYZCmmzzIu@hj8Jm-G&u)4K$)wI% z^(-OZHC&t`LQ$~wbC#IjCgWPCp-`ZPYX2uxMs$yT-Q8rUZ*V!SxaOq^O;mj_OG#* zK;CBFcU09*X%^D^eg6DO9f$>|J4K=nf`jjFhw_AUjlWWoNPpE|B|2~8O@H21JeF4m z!QjLJUUEL3+lguU|A*1Dh9hBk)8s;VPC?I&r4R+PSZ52^7?R}$LBX& zG0hpowC7+}@5xwa zi3gcrP>YJn@o=ljvLAyKCT-nW;KKyoy{#CjUcex!wXG$s9-CdqD=g6V6+>xRJHmP+ zsL)}5##ue6vC;@edts^wjgUll%qbSF+DT0$A8;{G$|w<=V7^KIpbmBkIJ*=}j>jJC zQm|tT8)hS7z{v-3rD$Wd+9awOOlekAr&mPV^JVv^;G2j-?)I90##ovT?T1f$;cH-6 z@xrSym|^NTVy35!^daq>l)JIAE^DmphnTl#*nVaV?gtsc)ozKH=C_`I02I;XOI%5}{ ztaY^WWbnQ%x2_xYIk6m~h-FFY@fAT4z0`qRzZ}@32J=-)sL03M-bHO&=i&N^PHX5Z zKs_(L_&99@*$fmkg1zt>$csO&t9piNB)Ld3Tv2})nObDtxs4k3>P6)oYRC7=;bSg15 zrAD*fXr&Sy`B_uKn$?AAz{-3E0_~w0d9NrHE3Eh=-&Jtaamz#O{QSVyS2oSQ_vGWu zuleeNplFM}d~0cjAq+-wws&q9TGrp%ztq?N?zl1sch8VaTtex;bS!(kiH;KqzU5c2 z$TXzyZ*vpYK+SG7C_8{xyazGh&8e=gLWlR!$oEe`;AJN5| z%?R7DXvRqQJUWr9#r3tjI&acMj>D31q%u`5_BYtHe3e;wTmV%pQ0j+gqp^-R<@p5( z!^XU>(O^shy^3Ht=0u_}fYaPT~vbauHhP`4~ptIp4=@3tl~7#lC+f$JjT;Ec4Da{YMteg3K>y zCfSlJBDus|!z#%t+dS)|LP9}=`mY+iicPiWAshkG8Bk`n-V51JStej2)I9LD+p?ca z;k~sm zTAW&MxkBo8LH~wC(f6!JrM4a)Vxkfz%<}F^rs_EcagsWw2<(*`EtDnd>BdK^q*}$< z(32eopbkZN(4%PZw1ejqy^)09*|GIbS_a3cXSy|~&E&+NyjmE+g(eJ|A2iZBAQS%9 zt$bc#9A4fbmWBFuj14|MNSvA+hYE_F(>gJF9bF^w;wVW{X=PFf*LFVVsF=0`FT^Gw zQdX8y*hT8armbQk;YXpVj+g#Ihb4zgk<1k3nv~OhaejnZOM#6hU2>u1#V|BYIbw}| z$s89QG#|dIoYvEriYA5Re6L*^yA2fHa=oZBD7wmRDSu;P`R%fNT0#0W)deYRKg?&T zAYFmUtcq&T^4O549E{DzVP9=gJ}s!&?AM#;PUNLK;bUMePt|_17JhsMJPq({Uh;te zOHejZ`Zp3d&rb3&7MOQ+cVwQhugJ7|AqIoHt4>$VzCc2d?DJflIpT@p9%H4cDwN*S zk8x#%N@G>-++{B&R+ctAUe3FiS%}v^fL}dbr9Y-kFc3oVOG-n~U-7=Bpp`n^Kl3et zbOyD5^6Ra9C%56hDNuWU0H>5{s+H%Ba(ZIn#dEcq)6pdt$kF@xOyGobi20JQ+eP}3 zWrq1fJMM+*kw~fIQv9gPr-dAy)tp3sqfig&EExrQE_<2db(Ack2Mv>pz?PkS$e)0+Rl!znxd?~ z3P88`runri=7RbuOTuHM(091zWdZfSIb%Pate@c+b}r68oH6zv=^cI$|CJ1r{YQl6 zzs-i3t-Iv5^a1;aGj@(yBPSeyzg%LkxVhb;!Q?t~C312WBpe}*2!#xxtJ%>_vf{fF zh6L6_lMZHfe~UcvGz?`Dwxlnu2L)w(4StRown~iggsn( zKOSEn4AUSdFidKBb-JK!74iT+g6vkA?xGe83tz&7IeU=tO8Oa4O07w@3f*l*nH{wyasJ3`2&mt|o}gXl%8$@PXZ;pNaA2$jpessJEw z;<~q#vJs%hI;YQ9GvND746W3xB37aQLx)AUm_Uq%l9mQExzIsMcGy7%HZ&jB@y;PV z1_ju#X&YO~6J6?4E#E14A%X%0MyY+n=)8KVGmfMfRo-}+S}cUEh;QG!ri4D4BYZP* zMe9f#S*#&c=u_fySi~+ks*uFdR}9+_AC4`Syia4r>FlMc2-f18g9tL^XD<%L`iWa| zux%&#Q7*rfx-uPc`68}f@ngjMb{``d8T7rTAX=aq?)-Y`HZ!0W% zbMIw1OC=k`B3pC~<_3_?*Ch6+6TR-}3LKO(01$CsI*Tn@HdVBee0Wq>h0!q}YV{M> zJuJzWJ}GZ3V76O)NQ{h$E|J~>G^A%jrT1~hMRL|;Nnsf{Vq8LLEYtO?a8^I$+xgzX zb7U`?=7U7RPBn$RV&Idz&G*%E6c2;L1(eR=CK_|OM#l(JN9YN%1M;7)LL-fAPEXxG zMo6jv#Be_=ro z7vzbT0y9w%!k(jlsVkpN7AD88gdvKTm|D0|@r1C*KTX!cWRWZfGRHRv|y6BhE4xNhsw+98yU844i@^0l! zmcnIzWar$CjT+V1Zf#AAPL)ZSim@XC6gN=6ZVK+0-}S>wRW?57bsHCF?9rJr4tY(W zRF9Ir7+H*?@YW4@qV5lI2Es#rYU2qx^{GH9MbzW->^H3PNMqYgfMpzbt3S z2IO23|J5^7r3WK*&dhScp{}_|&ZMiiBBdDev~-il9)jdS!kh^v6G^^_LV%tBv2FwB z$o$H$qP2ve8n^p-NS^0sSuuQnGj^k;_x|~l@#1x<-8&*@#b@w|?B3xmR!d}QW=M!i zvAFM;s57Sl^EEdQhfDLPejfK*OC)PG?$v8;5Bmcs2~6j}vsWuMr+%L(jL@BE+x?#c zeO8GOLLeM(`&YRl$KP4%Joc=}lMuU4_=BW4D*UP~{6;rJX<uG7pxJCv{tagxvIST;8qUnWHjeZ*WejrMAXUMAd{su2G8^2 zEMie?jcB3v?b0L(pFz6=zY;c%j!gdCR(5Fsd~FZy3JI3=}Ow+;IlGrL2m%xSV@9llOq%T*NJ(rAo5rPX$hu)K?nW1%@ zx0LKV5Pjl~X_uPNCz^^pJ&S|Z+phOXy`_Bq9_1WPbIwE`Mc4V|1Rz&1X=NY^@$Suu znWjHpITBHKFwg~(CCOcfFfU7oyZKDw25UXPkvk4*lv`mM4Y#F(A*19|mFkNv*m$J6 zGnozAezY;30QD8@ah-s#ODH3eSa1VdM#UptSk7Ei9|XuEXkDQ)wHnJ=tL0Q)>>&~N z2ytnU$2Dp99wf}`Dl1Lx3hT=bHZu5PFu9_A+=CA+0?je1k;;uL(_=u2S&YiROScd} zQBr?nMAa4x^CIzasW40I!7M-De8TlwS;J!MJ{gy=j(j}3X5`Wqe!)!*(`ip-sl?aa zs>w`rTO{hN=BNsc6PF(3C^LlnbwgLB!eplHdPED`x2Lw=$>Y*Y1*Jz5+Wp}3&I6TU z6TwRuiT(t`_qI%s3K9$vYt?KR(1CS*X2w<{8f<5PR2|Oj^82`uhuZxQj+8WrmACuX zb$e3t4A)q#1p|zD_%PU3<(TL=eQf&17L`ihmMfGKJ&v(*c)S>*VfOLAKt!<2>% zps|h(kn?Y-1MAPklBb^eN|7f(_)ko$G{ExSHqWgO21OXm5YU&23Yiz78SoB7V5M81 z<}NgPDdRmK>Z4a29c&~LU2!YBuMaR)yLp{AEbRy`j}2>|A-PUAYByqyr|>yLdez>}=)SMyv~}a;Wz( z#v3!ucy^t9;M0~~V&Si>U60W7O``?lt0O(+RSRHt0(a>SIB_sMA6Cxz!oU($*LrsS zLyJr)?`Nl129HLZ#<*(BGE>)?Mw$p0`ma%~-se`vNsnXRr35T3LI!MN5RUk^4u4MhWa?pni*j>W53P{cmP^V z+(fBoE1D&Fc1#rqbDq%mml8C1>$#LG0tQma)F=4^-3?7vY8PzF=!Pgp0~rg+zoLhI zd6jL5i5EB;qFE|9%58@w&8iYfp1nNZr=E+H4erUeDpzHmOnU9mutpI%rxgemj2Pt+ z4pasA(fH_22_h>;l71Ealp6XC^J_2i=og}NPg_=UKY;o&>Z@3o{-}{E0KHOB$kV+| zg^ma+*I|q;j#gDu6=qV6lm=ydbD8^WthI#4kNksExS!UM5a`eFuZkme&J~*6o+IW( zk&LpWY8V{a!j+_yM}`=VGBTOBL2>}6@huC$rrSIDAjWyCOS21Hm8AZuAWoZQ#;qcr zXUN;@Cn4p#K4g_Aipp=HG2a_g#dWKi8mK2lzj}_3Q|zP2;z)@01y&)LJIS3}Z>l67 z=iT_tb7*=|!OG&1S!@3QTD8w39OL(i12R|sH^GFG<8V(D#Q^XQ7fbm%gTM8lq`Jc0H6R)SqHzl-weU z&9Xz&WS`BHMb{abFA>99v^8sa zyuNcFxF&!jeOfECWIVx=(JxvYDFF_gZC(LgGWj`nxH z;s-n@(yOL&c+83G}) zw6fOkuFec@?2m6GGoSAO3 zIwgmesJB)x?+zA&5R(#X#OL3jhuS>4%#dT9=V-e-e_+a=-el%TgQM|3ZSHGZQ>LW1 zvnQ4o&QKJkh*K3p!&7Wm^-B@1s>e%v_FkUDtW+drfv>|#Ge9v_$4TWl2O5gDVYpn{ zXHVl$04VETvr_GbroW~Y9aTt>#2aB{tC{v-u}`5%W+tZOAXqu05nW}7{qB`??W@$? ztlUM}kHIK#2hT@5(Iy8OUPs_qyB?g#bYR*OdN{&ky<`Uj1Q zeFQRN#Mgcjmwq$S&?4%WN=L1^-(y^$zlVG2^U+!{_y$(5UOHAu!MN`&y5k6mc|~w1 zYP$8!LhBTR>8%Fl5|$VXN+3o(Aa%i#k~q&iPs-RJrnBl@#hnn$5ca@{u{qyQkVhzv zRgUhu2uoE)ZP6VhGg^fdXlBv|g{Q@s=E9B?!x0P40?ahv8<+9T?O* zc7=^Um*w_W_(kaL7~49oKzv$Qf?IKp{8V=17;%pv^$@-N^uBc89?t3f!d2>UoAJ(l z8MktAeo1QO5Szrwn1r(e+gp^!3w$NQvzzFntOSbHh>hZ2h&S%G;}oedjtxrtSj?&6 zYh7BG(Q~z-Jqf()7D9)5#q;Qu55jWuY@2#vm zB>*;Y6t3f(+MKlStTt}O7EB>(( z^DzAO^Si49`;}K;fz6yOVe99x>5r16tGJyfo=3@I| z-_D2fjZ@Es!FBWM7#`2Sq0yD=hf&0R!8yG%I}UH>7Y8Jond!a(iOO*k*F#o(nQJRA zJM=3aGZ18o$6->m_TSJeHdhZGuw+(0URjO_F%EXFzIHzyRU9irOkUyXe9L*9{~TS? zapoaw2H&y36HAS_6^_@_tNWakjw%QF0@4tItfyFp*lHCCI35+QJLFP+-3PmW<+fAH3uEq}cg_Lt zQm5K2dtYLXu}{>k(_g8vl}snFrQTXeN<=+cR%A}x5u5dR0ed>a|PZnO7B2L71~Z=uS+<<+N7=kaj{ zPs1LPNxv3t8UUwQN>v$k`>mMmtJ?cJzi{0{AS3v~QZw%JZZOi9Kx$Y@9rwH5L%yrB zWH_Yr)PNeQcF^653^mFk$|sugAdweqM|^vVVjwJUo^`H=%~EnkRhl8M-}M8Kll)i zqK$%Czl<`PXB$CTy&BsYt&-N=Z1}AF7&e*Pl)xT7xZXNJJNp@2!-*`#x(*q1DH~5OY>&Q=<@$>-= zff;@#N(od?0_S~rXI)#n)lkpWofYcUmS7_ZS!D|ie^xwpRef!I6kY>sWKJr|y!oLK zEue6LUi1ai3;S$QnXl(G12^H#X>A0c7t2;Avj(~k$Kfvt3Ys*RsZr`Q;GRWQ*82<} z3Gfim}Ig?6D6D%a7I;iLCsTVNcX@iQ#q&U)VAQ zXrbhpAvi96ODI%VsTPZ9zJJ`wf`Aq4fuHtXZhx!&(vu@LFt(uPA5a)>DGI)}v+ zj@RC@CQt=#ERB__+>PBbW6exBhc2edWk~<%1p)1$*mvatAIkU{c z!lon3h>~h2udaooY+cM3_iEhCPbgQ=L&omMj1`B>rQB`6Lm*O+7v*2`r* za@$t;wPP!kX4Y2@EoTN_R=yk!1K=LMB}jSP9;L#@6lh?BCzL+I^PY_j2NJYFj!3Jn zsjl^xRClOtex3Ao*uRPOvn45QK$Q6)KGBo|V9K09(@D3q+)pqay2Ah&haZg$Yx0qk z>JQD)>2+}FuR~P~6*2F4Pw=+jE-^;HSJnwBgYCgCiL>b81*UIdxglU0j|ea<%Z3w` z4I~7fjU<`@L=_8#BRg8--O7TzB;1x|!B6~ z#Oyq(XE3lku;M$eC?fSx4-^iaEUHgncGcXV&rUwSEGtY1GO1FL0xoh(ElBdIo=KYk24eVh7Y2?o!`QzL@yUQ-?{sC zbv!D>>_<+rx*B(0PrqVg{p1IU7QPUgf=WxwCqZTm!{nr7aWQp$9Vyv66GMsuJ38k{ zI-1d@coLoJl?u@`uny)dQD6%cZ{coR2M}L-uqIbPohWd;>s@_!1SL2^sS8IkuD)mv zf95ssAy`oQZL;iRTEE3wA9L)Tq=49#l*?7NjBe@y@!r5^Ft!Ahmg`cQ1L-*!s~4h& zA+v%wJ~Iq9!;(D|65jAZ19h(?9}xbmXFM$y>S4x$x+J+(K94HIQC{b$4FR^kUI018 ziRKQt>1I(mj4WtJ+^r;pHedhp^mYiwi9d5M?8fsueQyA)69KJE@!Xb9nWPU4|NBPQ zD$7YAH>cQEK#a+t*hh_$TbV)MY;%js5gu8Cy&GR)k9jvg`_>xEiK@eIj|+_-7J@u$ zC7M5m9TGW5=Tp}dXYPeh0ay+YH;yib3wr?Q{M!X4_Wsh)5xAD_e8D0F?CE(#!J znD%%_a`EXjR{{InO10HrPGHsYrSF{cUj41z<#lY!dP*{CMh9FxKVc|5dtg3}KHsQA zo`8Mw!2qN|UbK5or`OIcd6U>CG4#^;h6brl!EW!N9H;)nGSz#Y^{V6v#N0RWo6tzU zB4_2~zVSt@NF{XE+(D@BhT<1kpt=Sh)$|d$A(8w3RVK4RsLz|u9(SZ(p?e%2n-gW7 zcNGVPj@ET|3BleFmc5K*Z#H?=c-uEFjVfN`&xqNU_~D`H55)#PyIasn%YSdNG!6D* zD~QjrsqkX{AogJ<6?$-mu%TLE+O%0?TpN$P;kjCu?TY4QVn>i%eYDPejr^5_T&t&S z-im>%yio!Ckq6+{SNOmmd7S^-t>4e{RMH7gTfdnr zL1aAAp0b_>Do!d%+o47?Mo&%SQ_zuTfV6ZUCwvX$gw-Y2h1BU#%LZ9_G0GBYIt^5E zI<->HNDni^7apX&*xTmSY?veRM}e$wPCc{OW_}g!M+37%t(i%J+AFzx%nm7tDUuj^ z$BJ!Bo&JJ)6_3~AA%1wzo^ow{OZ z`_l4t><+9Y75lm4D$dAihWXU)lwbF9EK^(SPz@_dYE2Uei?YM?Ba6z%F=kC%F0Iu0 zcXmS$5Uu*T6oDi#G8QK;jRmhE_1ELapATJz3LoE}edM@53(VH9W~!Ri56KO~XB<-% z8hKyiehXZFb}t_?gWKVSn@S>7xv&^(fWw+YFS_xt`;1Soi`5T3>}Gs)ku1iCc6#vM zqq}A;lilVf_iZQs$0Qy8D4!eeNVxJ=x@u`3#@F0gMk!11q3I-j;M(3)m2#U!EZ@nK z;g&t^SJx8yyEb}BXiGWU?$KxHUFh`B#XnOoa|hj%4bPx-;4*0C2fUu1StiNloi1iZ zZ?o{Ixm(q$9wk8x3vcq&skdJ(WnUQQk?7Wg#Jcrbd6!w|XXx8|XWM;cThGJ^C+@HI z?G^3|x9cK?muC#;l*ZQI0v@QqetqG_YVSPzSGihO@|os64LDs(ANAab{LK9g9NzOw zi*=Qo)5Z<=+OO^`^=Mt=h~5|-U5zD*FZyt<=q-X7lU=UW%vDveKlqE@Gb{SQMW5ad z3i*7AEp<=RQh3PgAc9gwaM*t%2P(SC3!d4@WUJPy2$J88vYqpZwn-wwr2BN`|Xnn zd!2c5;JfYt%UdQ={^9oD$5B+S45QD%=rc)g?Tx7H*j+!2?QaU8f8Q(>m z+2__kD~1ZOZeO0h?Ptqgm7~vE-n|hID=XrpTirre6y}a$)Cn9DJ%;7ZY2;9#CB+!i z84EEC*c&{5%W7CKQAZ)r-3R4phw7_khlu?t7edPFw{7ilC|4P z>6`F1M=QihB#$_jXJ-&6*9xH)f8+zr#`!{m$hdLl8p`8n&7}PMb*Is~QP{5bTw|7q z2Z|m0E<<7ZSAB*%rH(Yz_gEfPH)6lGf{^ ziz7)Okk6w-r8uvqVREY`6857s+hmy3->ub6$3fFmTYd(VYLf6Wz=lqv+6MYS>JUOY zLwyEarLD{Equ%JR*WQ$VB;x{oZP`aUE?vre2F4`L2fPA18AFszGmy_>P}$Sc*aV9U zfWlko{O7peyq}_v?0PWqjxE4nj_`?83kM7-NK`5->%1RX;y8?Qg%+YioxGl>#WC1kEK^*liX!tzNr>=-a3Jsywofs0~FnB+L^$8&^X{*Mh?1ff5yZ%A@Y@-E|gP!BC zv^32Nu@=}DCPGMRnGtW@j7{P`%`mr!&AQv93I*bO+hjvH_?OW&+9@M_Y<0^{rP zeRU6(&8FnVo?et?GzjCmkRiQCPUD(klLe2t&KdD5Gx~9+`~;d?(37`Gzli z)#e`R>{AYKsne5S_J>bgtjJUGzb16!c$O{YR638K^Dve=X5KR)$=F!mHVKzvaCdDJLXms9K4HZq0&`e+=_=$2ge`A-?dvZ4qB)B5pz zF&C_}57J_0{B>Q$=6i|=h_mnfqOgM0F5Z;NZ&IUuMH>H-iC$ZdAs0{9uw8VGs|$|6 zI+WfEec6yDn^Ba0!hD%r_eu*6#vs440%1XS8-KqPzJl?}f^AVu1($L7Op;xK#+dsA ze{1|sNlXJ#sYN)WI{kR+U9a0vOT#|u@pYs%c@n!^&#SK&s%9$G@7C3a)KGm@1P-0Z zAx?El@kw4Q-*bn(CG-kjPGP$jh{DGZHy`r#MNEf+LZcy_6Z%EZ;dn?=EOUwrA;8rejj->Q6X7^hu2yANe?Z)ToD zJ)G9Dg5n*eXvi*F1Ql>OI6JnsH2ZY6v^@@L<}xkJF8Uk1dT{BtWB%@#Z(e-Uif%PX z*H%A{G~|m+*9`FI`8GU?$fll7&XF1*b9} zky6MM4pDTWv~-!A7n$VrDbR%u5Z5dGMm<}{q7?ODtI^^7BiwXO3sa&`QOR+jLR&rU zjj~LT(cMM0Rk>_n>+B_oKw@s681mEC)5HTM2M*j&Yx~CQ7~YXajM%&{lr)1=V=R1J z73FuE-Xv8MQn<0+>@MW7D-LPP2}X7kPbdj@b6Gpir~P*6SB<+!WPF$p9XXHPURBll zO)Dvb=q*|+Uq;L_AJ&L8Ii!}kJq3y}*|DfhIGh;NxTLN4p!nB7jnaCNOmdrgbve;N zXASuf7#`$NSt~7d{ob6#`Q%RQ@g#QLNd1n}uuoTQt@8VO+i15;9};I7jFMtql-Jcu z{5ckq?i3?EQ7u%2d(~5qVSrYRUAp98ET`$cHO#_Z!2=tL?fw#FkHH(34KWk@lwFI1 zjhcI~4(Uv~4|{Z}A4SeFw0I3qMWhyT&ekBBer1tsq>MpNX9{+U=+=;xp0tI)(ktRC zuNp%|%!@h}Oshp&dT)(BU?p>C26_w@nzs6JS%~f&HKCV}cy!9Xq}^DR^p`g1eShYq z#{hM8p9{JYGF=IgluXo9ujXkxn0t1S&d7Mhaj{i9Q}l?UFmtSVv<-)==9s&qZ1`R_tEfUZZ+ z<9UHAEroR=3oFXXWXHl51r$WtY@w=X>u++AE-ry(2Z3a+M-mV(TKs1U+Dc&?mXjYs z+;#OA0R#-)YS|g_$ci_C6IQEj`sMRxXDR** zcv~fq_U8)Z|p7hYVZ1q$=%JV)5C<%2tylH6{%sy`=P;;=>a6qt{mzzVi9-~I3<&xrC%Rrlo)hD zpeY6e46h{|Z4w|nV)3X@`X*6dw(wBdinL7yN+}|@F%*=m_3Yc+wb0U5&+8(M!xaE) z(%_i5-8lOON|kyPHr8RXJ<1-sg(q_e?rxzm7Oq6Wel@pcT0DG0oiA1Vg_+`M8_Ldqcqxhb*hleUxsQ{E*riKG zScl}~PrzEdW=3e;YTu3@Y}@FH8!K~I?UAODKps6T z{?Mh{vm?lPjGyguF~&!%8S8KmE>cErGz( zOJTWmeJ|AMeSLHDUYdMDGR5N6ZfF&L48MTW~2%fKQf zCQa(^fltTzuHG~v{Vfdi)5rhe_5)d1{|p2D1|KNV*Ek&sXo@#zEE%wkXfpZJ{tKMxN6AU%Qof$XWJKi^FJr{VnB z_P^l#{F>EIh=1Vu<2u??&;HYReg@xu6%Xr=WZ!?q!}eo5{`uzSKa7X%AA|eLaQ)0F z`3s)^f76HUPg(qHyndzz`328kf|~zf`LO>?rupl5vHdxQ|C~SUKZN-IXS~>d=0y1w z&(E{Ef0YmWU$V#lhvftOc|-FzJU=tl|DgR-KES^uDg965`T1G8U-A5W5&DaK{v56+ z+x27)0YB}bGk{sn($pEChxm^=ep)G2MAm;u{HIQ;BC`GC8QVX)_;cV@5r4{C74c^` zRT1?8PgB?R$rSSZ%as007Qcz&sjQKUk&V6i9~l1B$3JY-Ul>$*5dRUoSLH_h34mFZ z3-PDIFsrh%AhP}(i@!AW$AN$+v-ZDb{o{r5|DN@yMfs;P{4ZPmsr>&p)}MO%KVW5N zMP&cELj9K#`>9?3gIfLzVgFQw|0C;P%@urc+Jc-JWuB&z zrO7|mupeYZW(hkJds9n0a{%z?LddM~_tzT!Km`E) zRLXzbo8Q;-KluJlZxC6z*qLoD?OdJz(yyP>6PKE&t+Bn$e+}s$iui9j3H(bh ze--eLy8pzdWoaj3=WO}s|6imJM#4SryZTCs|m=7 zMnX*)AZ20i?BZZ> zp5NQ++&7X6;uRD;LM_Z9MV*P@P}Ov9j>|$h7tgjh&r^<8S?C<>vXl z+!ODQnf(hdE0F7l6YvX-o&Blg?=&`+A4c<+a!s7x&-#`!w->mlZo3>)+-E zD;GD*@0i(G**N|-huFD)?0SE}!p_e2V?p|r#`ZJ=f1^Fs$MritHXs-G@3McYkLU08 z0l9uJ#|GqP`F+gUxY&PeGJeIv&d%|B-`LqWf9zL&Dfh(7@jGUAR^Shl|4X^2x%)R= zcxvKr^W_Q2-{uuNJ2%f?#@EHk$kGPn^mKU)z^rEJ1$xqHz>`~P|KuM2aCHF8GInP6 zfTxZ>xjoD>;s8Aw#R;%gLflC+k&K9Q#u-N_?cXW-KX!G_E=Eo+KMlnbS{_zJN=gYO HNyPsLvJJ+5 literal 72975 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 diff --git a/docs/postscript/splat.ps b/docs/postscript/splat.ps index 2dbe5de..291e7ff 100644 --- a/docs/postscript/splat.ps +++ b/docs/postscript/splat.ps @@ -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 diff --git a/docs/text/splat.txt b/docs/text/splat.txt index 40fc60a..4a0a3b7 100644 --- a/docs/text/splat.txt +++ b/docs/text/splat.txt @@ -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 Creator, Lead Developer @@ -680,4 +727,3 @@ AUTHORS -KD2BD Software 20 January 2004 SPLAT!(1) diff --git a/install b/install index 936ba84..f279186 100755 --- 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.1.lsm similarity index 91% rename from splat-1.1.0.lsm rename to splat-1.1.1.lsm index 3785f71..1f83772 100644 --- a/splat-1.1.0.lsm +++ b/splat-1.1.1.lsm @@ -1,7 +1,7 @@ -Begin3 +Begin4 Title: SPLAT! -Version: 1.1.0 -Entered-date: 29JAN04 +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 @@ -26,11 +26,11 @@ Description: SPLAT! is a terrestrial RF propagation analysis tool for 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 + 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.0.tar.gz +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 diff --git a/splat.cpp b/splat.cpp index 2fe6fd4..3e17692 100644 --- 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 * @@ -14,13 +22,6 @@ * 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 *****************************************************************************/ @@ -55,49 +56,48 @@ #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=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 (latxmin && lonymin) + + if (latxmin && (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=0 && indx=0 && indxdem[indx].max_el) dem[indx].max_el=data; - if (dem[indx].min_el==0) + if (datamax_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_northmax_west) + max_west=dem[indx].max_west; + } + + else + { + if (dem[indx].max_westmin_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=0 && indx=0 && indxdem[indx].max_el) dem[indx].max_el=data; - if (dem[indx].min_el==0) + if (datamax_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_northmax_west) + max_west=dem[indx].max_west; + } + + else + { + if (dem[indx].max_westmin_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=0 && indx=0 && indxmax_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_northmax_west) + max_west=dem[indx].max_west; + } + + else + { + if (dem[indx].max_westmin_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; y225.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=(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>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; x230) + 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; xmax_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 (rxlatmax_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=360) + ymin-=360; - if (txlon!=0) - { - if (min_lon==0) - min_lon=txlon; + ymax=ymin+1; - else if (txlonmax_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; zdeg_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=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_minmax_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=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 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 diff --git a/utils/build b/utils/build index fbc7581..4bc5b4a 100755 --- a/utils/build +++ b/utils/build @@ -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 + diff --git a/utils/install b/utils/install index 78b7d1a..425770f 100755 --- a/utils/install +++ b/utils/install @@ -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 + diff --git a/utils/postdownload b/utils/postdownload index ee608eb..c123c10 100755 --- a/utils/postdownload +++ b/utils/postdownload @@ -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 index 0000000..a12ee35 --- /dev/null +++ b/utils/srtm2sdf.c @@ -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 +#include +#include +#include +#include +#include + +#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 and/or 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; +} + diff --git a/utils/usgs2sdf.c b/utils/usgs2sdf.c index 0c1f1fa..acfb7f8 100644 --- a/utils/usgs2sdf.c +++ b/utils/usgs2sdf.c @@ -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 #include @@ -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); } + -- 2.30.2