7 Create your own maps
Tom Russo edited this page 2026-01-12 21:23:29 -07:00

Create your own maps

You're supporting an event and want to draw a custom map to use? There are ways.

Download a GPS track

TBD. We used to recommend GPSMan, but none of our current users use this anymore. If you can get your GPS data pulled off into a GPX file, there are many ways to convert this into a shapefile. See Map Converters, as this is just the sort of job that ogr2ogr lives for. We also have a Helper Script called "gpx2shape" that might do the trick for you.

Have someone travel a route and save their APRS track log

You can use Xastir's "Save Track" feature to create a shapefile map of an APRS station's track log.

You can travel along a given route (or have an APRS co-conspirator do so) transmitting APRS packets and observe the track on Xastir's display. When the route is complete, right-click on the station's icon, select "Station Info", and click the "Store Track" button.

A shapefile named WeekDay_Month_Day_Hour_Min_Sec_TZone_Year_CALLSN-SSID_APRS_Trail_Red.shp and its associated DBF and PRJ files will be created in the .xastir/tracklogs directory of your home directory.

Move all the files with that base name to your maps directory (renaming them if needed) and create a dbfawk file to go with it.

BEGIN {dbfinfo="Credits:DateTime";dbffields="Credits:"}
BEGIN_RECORD {key=""; lanes=4; color=12; name=""; filled=0; 
      pattern=1; display_level=8192; label_level=32; symbol=""}

Give this file the same name as the others, but with a ".dbfawk" extension. This specific DBFAWK will make thick, red lines. Customize it as needed.

You just made a map for APRS using APRS.

You can do the same thing with objects

Right click on the map where you want your shapefile to start, choose "Object/Item->Create" to get started.

Select the "Move" button at the top of the map.

Using your mouse, left-drag your object to a new point. Keep doing that until your course is mapped out.

Deselect the "Move" toggle button at the top.

Right-click on your object, select "Station Info" and save the track. From here it's just as if you'd saved an APRS track.

Note

If you're transmitting these objects and your packet is digipeated, you may find your object moving back to a prior position. It is best if you do this work with transmit disabled for objects, which can be done by selecting the "Disable Transmit: Objects/Items" in the Interface menu.

Use Xastir and one of its scripts to create point maps from objects

You can also use objects to create point shapefiles
  • Turn off object transmission using Interface->Disable Transmit:Objects
  • Put objects where you want. Set the display symbol as you like it.
  • run the "object2shp.pl" script in the scripts directory to generate a shapefile. If your install is the typical one, this script is in /usr/local/share/xastir/scripts/object2shp.pl:
     /usr/local/share/xastir/scripts/object2shp.pl ~/.xastir/object.log myshape
    
    This requires the four shapelib utilities "dbfcreate", "shpcreate", "shpadd", and "dbfadd" that should come with shapelib.
  • EXIT XASTIR
  • REMOVE ~/.xastir/config/object.log
  • move "myshape.shp," "myshape.shx," and "myshape.dbf" to your maps directory.
  • restart xastir.
  • select your newmap in the map chooser.

Creating maps in this way is basically just a scripted version of the manual map generation technique below.

Use shapelib tools manually

object2shp.pl is just a perl script that runs shpcreate, dbfcreate, shpadd, and dbfadd using coordinates taken out of Xastir's object log. You can skip the object creation step and just make maps using these tools yourself.

An example creating mileposts for a marathon
       rm -f posts.shp posts.dbf
       shpcreate posts point
       dbfcreate posts -n ID 8 0 -s CFCC 3 -s NAME 30
       shpadd posts -74.0570 40.6025
       dbfadd posts 1 'X\m ' Start
       shpadd posts -74.0443 40.6065
       dbfadd posts 2 'X\m ' 1M
       shpadd posts -74.0353 40.6093
       dbfadd posts 3 'X\m ' 2M
       shpadd posts -74.0268 40.6260
       dbfadd posts 4 'X\m ' 3R
       shpadd posts -74.0200 40.6277
       dbfadd posts 5 'X\m ' 3G
       shpadd posts -74.0270 40.6252
       dbfadd posts 6 'X\m ' 3B
       shpadd posts -74.0197 40.6395
       dbfadd posts 7 'X\m ' 4R
       shpadd posts -74.0203 40.6388
       dbfadd posts 8 'X\m ' 4BG
       shpadd posts -74.0077 40.6508
       dbfadd posts 9 'X\m ' 5R
       shpadd posts -74.0083 40.6503
       dbfadd posts 10 'X\m ' 5BG
       shpadd posts -73.9957 40.6623
       dbfadd posts 11 'X\m ' 6R
       shpadd posts -73.9962 40.6617
       dbfadd posts 12 'X\m ' 6BG
       shpadd posts -73.9850 40.6743
       dbfadd posts 13 'X\m ' 7R
       shpadd posts -73.9858 40.6738
       dbfadd posts 14 'X\m ' 7BG
       shpadd posts -73.9782 40.6865
       dbfadd posts 15 'X\m ' 8M
       shpadd posts -73.9597 40.6890
       dbfadd posts 16 'X\m ' 9M
       shpadd posts -73.9573 40.7007
       dbfadd posts 17 'X\m ' 10M
       shpadd posts -73.9622 40.7122
       dbfadd posts 18 'X\m ' 11M
       shpadd posts -73.9515 40.7230
       dbfadd posts 19 'X\m ' 12M
       shpadd posts -73.9520 40.7345
       dbfadd posts 20 'X\m ' 13M
       shpadd posts -73.9525 40.7465
       dbfadd posts 22 'X\m ' 14M
       shpadd posts -73.9403 40.7503
       dbfadd posts 23 'X\m ' 15M
       shpadd posts -73.9578 40.7587
       dbfadd posts 24 'X\m ' 16M
       shpadd posts -73.9556 40.7675
       dbfadd posts 25 'X\m ' 17M
       shpadd posts -73.9465 40.7808
       dbfadd posts 26 'X\m ' 18M
       shpadd posts -73.9372 40.7935
       dbfadd posts 27 'X\m ' 19M
       shpadd posts -73.9272 40.8047
       dbfadd posts 28 'X\m ' 20M
       shpadd posts -73.9343 40.8142
       dbfadd posts 29 'X\m ' 21M
       shpadd posts -73.9453 40.8050
       dbfadd posts 30 'X\m ' 22M
       shpadd posts -73.9525 40.7923
       dbfadd posts 31 'X\m ' 23M
       shpadd posts -73.9630 40.7810
       dbfadd posts 32 'X\m ' 24M
       shpadd posts -73.9720 40.7696
       dbfadd posts 33 'X\m ' 25M
       shpadd posts -73.9811 40.7683
       dbfadd posts 34 'X\m ' 26M
       shpadd posts -73.9763 40.7720
       dbfadd posts 35 'X\m ' Finish

The shpcreate command creates an empty shapefile of type "point". The dbfcreate command creates an empty DBF file with a signature that happens to match the "tgrlpt.dbfawk" file in the config directory, which was augmented to treat any CFCC value that is four characters starting with "X" as an APRS symbol expressed as symbol table, symbol, and overlay. These dbfadd lines all have 'X\m ' for that field, and so create symbols from the secondary ("\") symbol table, symbol "m", and no overlay (the signpost symbol).

Each shpadd run adds a single longitude/latitude point to the shapefile, and the following dbfadd adds a mile marker with a "signpost" icon and the point name.

You can do the same thing for line maps

The previous example creates a point map, but it is possible to create line shapefiles or even polygon shapefiles the same way. You would instead use shpcreate filename arc to create the line file, and each shpadd command would have the complete list of longitude/latitude pairs for the line.

Convert an old "Overlay" ".pos" file to a shapefile

This one's just for nostalgia: Bob Bruninga had added a feature to his APRSDOS program to "overlay" point data on the map using a format he called MAP-OVERLAY files which were just text files in a rigid format with the file extension ".pos" or ".wes".

.pos files consist of lines of text. The format is a name of up to nine characters, an exclamation point, and then a lat/lon pair with symbol embedded just like an APRS posit, followed by a comment. For example, Bob's old "RSHACKS.WES" file (documenting Radio Shack locations) has lines like:

RS!3252.00N\11144.00Wh#01-3457
RS!3318.00N\11150.00Wh#01-3466
RS!3120.00N\10933.00Wh#01-3463

Each of these lines is defining a point with the name "RS", with symbol "\h" (secondary symbol table, "h", no overlay, which translates to the "ham store" or "store" symbol).

Xastir ships with a script called pos2shp.pl that can convert those files to shapefile. It is nothing more than a scripted use of shpcreate/dbfcreate/shpadd/dbfadd as described above.

Since you have to make the file in a rigid format and embed the APRS symbol, you might as well just use the manual process described above and save yourself a conversion step. But if you already have a .pos file, you can convert it with:

/usr/local/share/xastir/scripts/pos2shp.pl file.pos myshape

to create a file called "myshape.shp" and its friends from an old APRSDOS overlay file called "file.pos".