How to Make Custom TOPO Maps for Your
Garmin Mapping GPS:
(updated 5/11/2008)

 

                                                                                          
A custom TOPO map with streams/lakes/rivers, trails, POI, and roads
(left image also includes Garmin City Select 7)
Shown on a GPSMap 60CS.



Here's the steps:

1.  Download digital elevation data from the USGS.
        2.  Convert elevation data to contours.
3.  Edit map layers and zoom levels.
4.  Add stream and lake data.
        5.  Add trails, roads, boundaries etc.
        6.  Add your own Tracks and Waypoints.
7.  Convert your map to a Garmin compatible map.
8.  Create a preview image for MapSource.
9.  Upload to your GPSr
(using MapSource, SendMap, or a memory card).

Happy mapping,
jacksan

 

                Download and install the following free software:

Þ DEM2TOPO from:  http://people.uleth.ca/~brad.gom/dem2topo/index.htm.
    ... which requires ...
Þ IDL Virtual Machine (IDL VM) from:  http://www.rsinc.com.
    (You have to download and install the full demo version just to get the "VM".)

Þ GPSMapEdit from www.geopainting.com.

Þ cGPSMapper from www.cgpsmapper.com.


Others Optional Software:

Þ
SDTS2MP lets you convert SDTS (the newer USGS format files from geocomm.com) directly to a .mp file.

Þ MapSetToolKit takes care of the items in Step #8 above:  Creates a preview map and loads your map into MapSource.

Þ SendMap from www.cgpsmapper.com.  Just unzip, nothing to install. Use this if you don't want to use MapSource to upload your maps to the GPS.

Þ Paper maps: If you have no other option and have a paper map that you 'must' get into your GPS then this method may be the only option.

Þ NSIS custom map installer.  Create an .exe file that copies your map files and updates the registry automatically.  Great for distributing custom maps. Definitely not for beginners.

                    Þ MapWindow GIS is a free GIS program for working directly with digital map data! 
                View and edit shapefiles, convert data, open a POI text file (from the link below) and
                convert it to a point shapefile...

                Þ BASINS 4 from the EPA.  Another free GIS package geared towards water data.

 

Favorite Data Sources:

Þ MapCenter - Perhaps someone has made 'your' map already.
Þ Ibycus - Dale has custom software and is cranking out topo maps of Canada and the US!!

Þ seamless.usgs.gov - USGS Elevation data for making contours (this site goes down often, just try again later).  Now also has now some global data.

Þ nhd.usgs.gov - Awesome water feature data from the USGS!

Þ OpenStreet has the latest and greatest road data.  Us the mkgmap program to convert this data directly to a Garmin img file (skipping the cGPSMapper step).

Þ data.geocomm.com - Good source for roads, boundaries, and many others.

Þ  I've seen many lists of free downloadable map data but this one is impressive.

Þ POI (Points Of Interest) coordinates from the USGS.  Download by state and import them into your map.

Þ National Map Viewer - USGS has made a one-stop shop for elevation, water, road data and much more.  It points to the same data server as Seamless and NHD.

Þ Geodata.gov: Another one-stop shop for all data types.
   
Þ  A bunch of downloadable posters  are available... way cool!

Þ National Atlas - Download the various shapefiles used in the National Atlas project.

Þ "ENC direct to GIS" - NOAA nautical chart data.

Þ http://www.geobase.ca/geobase/en/index.html - Canadian data

Þ National Park service - some trail data (note that trail data is very hard to find).  If you have a paper map you can try contacting the maker and ask for their trail shapefiles.

Þ geocommunicator.gov - Federal lands survey data (BLM).

Þ Get coordinates of any place. Based on Google Map.

Þ See below: "Notes on where to get Stream/River/Lake and other DLG data".

 


Let's make some map...

You may want to start with something simple.  There are a lot of steps, follow each step carefully until you get a feel for the process.  While this tutorial is not thorough, it will let you produce very useful maps.

In this tutorial I create one map and add each of the components to it (contours, water, trails, roads).  In reality I usually put contours on one map, water on another, roads on another, etc., and then combine all of them in MapEdit when I want to do the final compile.  This makes it much easier to tweak various components without starting completely over each time.

 

1) Download high resolution DEM (Digital Elevation Model) data from the USGS at seamless.usgs.gov ... or from the National Map.

Note:  This "NED .3 arc second" elevation data is extremely good.  It has 10m resolution versus 30m for all the other DEM data sources (i.e. 24K topos)!

 

2) Convert the raw GeoTiff elevation data to contours using DEM2TOPO:

Note: DEM2TOPO versions after v1.9 produce much larger maps with smoother contours compared to the previous versions, the resulting file size is now 2-3x larger.  This is because the Simplification Factor (SF) behavior has changed to not allow smaller, cruder maps anymore.  In fact, changing the SF now has very little affect on the contour "quality". If you need to produce a smaller file size map with more crude (jagged) contours then use v1.9 or older.  If you use an older version, setting the SF to 3 will produce a fairly small map while maintaining pretty smooth contours.  It is a good compromise, I recommend it for very large maps.

DEM2TOPO
Version
SF File Size Contour Quality
v 2.6 100 6.1 mb very good
v 2.6 10 6.3 mb very good
v1.9 3 4 mb good
v.19 10 3 mb ok

       Creating Contours:

 

3) Edit your new .mp map file in GPSMapEdit:

  1. Open the newly created .mp file in GPSMapEdit

  2. Change the displayed units to "Feet" if needed:  Tools, Option, Units, Elevation/Depth.

  3. Next click File, Map Properties...

  4. Click on the cGPSMapper tab: select "Map is transparent".  While working with a map I've seen this option uncheck itself so double check this setting before your final save. Note: Only make your map transparent IF you have another map(s) that you want to see at the same time.  For instance you may or may not want to see the underlying basemap or City Navigator at the same time as the topo.

  5. Click on the Header tab: enter a unique map ID number (8 digits).

  6. Give the map a name, this is the name that will display in MapSource and on your GPS.

  7. Click on the Levels tab: you have to edit the GPS "zoom levels" so the contours and streams appear at appropriate "zoom levels" on your GPS:

A Note about GPS Zoom and Data Visibility.  As you zoom in on your GPS you see more data.   Example:  As you zoom in, a layer configured as "21 Bits" becomes visible at .5 miles (".5 mi" is displayed in the lower left corner of your GPS screen).
          24 bits becomes visible at 500 feet
          22 bits becomes visible at .3 miles
          21 bits becomes visible at .5 miles
          20 bits becomes visible at 1.2 miles
          19 bits becomes visible at 3 miles

Setting up Zoom Levels:
Create all the Zoom levels (layers) before importing streams and other data: Edit, Map Properties, Levels.  If you just finished using DEM2TOPO then your new custom map will already have 4 layers (0, 1, 2, 3) in it by default.  Highlight the bottom layer on the list and click "Insert Before" to insert new layers.  A total of five or six layers should be enough:

  • Layer 0 set for 24 bits - contains "minor" contours, Streams/Rivers/Lakes, and Waypoints.

  • Layer 1 set for 22 bits - contains "intermediate" contours, Streams/Rivers/Lakes and Waypoints

  • Layer 2 set for 20 bits - contains "major" contours and large Rivers

  • Layer 3 set for 19 bits - also contains large Rivers and large roads

  • Layer 4 set for 18 bits - this layer should ONLY have one small line (polyline) on it:  click View, Levels, Level 4.  Then select Tools, Create Object, and draw a tiny line anywhere (right-click and select "End" to finish drawing the line.  Do not enter a name, press ESC).  The purpose of this layer is to HIDE your custom map when you zoom way out on the GPS.

  • Layer 5 set for 17 bits - This layer must be totally empty.

IMPORTANT:  Even though the "MapSource Zoom" field is not used for our purposes you must set it so that it increases as you go down the zoom list (see the screen shot above).  Otherwise the map will fail to compile in cGPSmapper and you will get an error!

  1. Add streams, rivers, and lakes by importing hydrography Shapefiles from NHD:  File, Import, ESRI Shape.
    See the "Adding Streams" section below for the steps to import Stream data.
     

  2. Add your own Tracks and Waypoints that you have saved in your GPS.  See the "Adding Tracks and Waypoints" section below.
     

  3. Add any other object you wish:  Trails, Roads (see section below), boundaries, parks.
     

  4. Remove any duplicate objects.  Select the Tools menu then select "Remove Object Duplicates".
     

  5. Delete any extra items that are outside your topo area (there will be many streams and lakes).  Click the arrow icon on the toolbar then "window" the items you want to delete, then press the Delete key.  To do this: Zoom out to see your full map (View, Full Map).  Delete the large areas that appear to be empty that surround your area of interest.  Do this even if you don't see anything there.  There will be many tiny streams and lakes that are not visible unless you are zoomed way in. 

    NOTE: Don't accidentally delete an entire river because some if it extends out of your contour area.  You can use the TRIM command to remove parts of a river that run outside your area of interest.  Click the Trim button, draw a rectangle around your area, right-click in the rectangle and select "Trim Outside".
     

  6. Double-check the "Map is Transparent" option.
     

  7. Save your map in Polish format (.mp).

 

4) Convert the new .mp file to a Garmin compatible .img map using cGPSMapper:

OR...

            If you get an error (Error E021, code 40...) you probably don't have your layers set up correctly.  See the "Important" note in step 7 above.

 

5) Create a Preview Map and Upload to your GPSr using MapSource :
        Upload you custom map together with Garmin maps (like City Select) using Garmin MapSource.
       
See below for how to use the "USB Mode" to simply copy your map to the memory card of the new GPSMap Cx units.


One of my bigger maps as seen in MapSource.
(click for details)

        Whenever you upload a map using MapSource it will erase all existing maps on the GPS. 
        You have to upload all maps at the same time.

For MapSource to be able to see your new map you must create a "preview map":
ÞÞÞ You can use MapSetToolKit instead of the steps listed below.

  1. First, you must give your map a name of all numbers: 10000123.img.  This should be the ID Number you assigned in GPSMapEdit (File, Map Properties).

  2. Create a folder named "custom" under the Garmin folder and copy your custom map(s) to it.

  3. Copy cgpsmapper.exe to the same folder.

  4. Copy test_pv.txt (found in the Test_Map folder of cGPSmapper) to your custom folder.              

Use Notepad to edit test_pv.txt so it looks something like this:

[Map]
FileName=CINtopo                ' this will be the output file name for the map .img and .tdb files
MapVersion=100                 
ProductCode=111                  ' a different number for each custom map (not sure this matters)
Color=32

Levels=2
Level0=20                                ' this should be the least detailed (but not empty) layer on your map
Level1=17                                ' anything

Zoom0=5
Zoom1=6

MapsourceName=CINtopo     ' anything, this will be the name of the files and registry entry that are created.
MapSetName=10CinTopo      'anything
CDSetName=10CinTopo        'This is the name that shows up on the Map Setup page on your GPs. 
Copy1=Garmin
Copy2=Stan
[End-Map]

 ' erase the Dictionary section

[Files]
img=10000123.img                'This is your map file name.  *** MUST be numbers *** 
[END-Files]

' YOU CAN INCLUDE  SEVERAL OF THESE "img" LINES.  They will all be compiled into a single preview map, and you can select and upload them individually to your GPS using MapSource.
You can add more maps (IMG lines) to this section later, then create a new preview file, and you're done.

If the img=  name does not match your map name and if it is not all number then you will get a "Layer 0 cannot be empty" error.

  1. Then, open a "command window" (DOS prompt):  In Windows click Start, Run , then type "cmd". 

  2. Change directory to the "custom" folder: Type "cd c:\garmin\custom" in the command window.

  3. Create the preview files:  type "cgpsmapper pv test_pv.txt". 
    This creates a small preview map file (.img), a table file (.TDB) and a registry file (.reg).

  4. Edit the registry file that you just created (i.e. CINtopo.reg):  Right click on it and select Edit.  Change the folder names so they point to your custom folder.  Yes, you need the double back-slashes.

REGEDIT4
[HKEY_LOCAL_MACHINE\SOFTWARE\Garmin\MapSource\Products\CINtopo]
"LOC"="C:\\Garmin\\custom\\"
"BMAP"="C:\\Garmin\\custom\\CINtopo.img"
"TDB"="C:\\Garmin\\custom\\CINtopo.tdb"

According to MrZumma use the following for 64-Bit Vista:

REGEDIT4
[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Garmin\MapSource\Families\SE_MN]
"ID"=hex:64,00

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Garmin\MapSource\Families\SE_MN\1]
"Loc"="C:\\Garmin\\Custom\\"
"Bmap"="C:\\Garmin\\Custom\\SE_MN.img"
"Tdb"="C:\\Garmin\\Custom\\SE_MN.tdb"

  1. Click File, Save to save your changes.

  2. To "run" the registry file just double click it, select "yes" to load it into your registry.

  3. Start Mapsource.  If you made a registry file mistake you will get an error saying to reinstall MapSource.  Don't worry, you don't have to reinstall.  Just run regedit (seek help if unsure about this!) and remove the "HKEY_LOCAL_MACHINE\SOFTWARE\Garmin\MapSource\Products\CINtopo" key.  Repeat the above steps until you get it right.

  4. You should now see your map listed in MapSource along with your other Garmin maps in the 'Product' list.

  5. Select (click) your map and the preview map will show up as a blank rectangle in the map area of the screen.  You can zoom in to see more detail of your custom map.

  6. You should now be able to use the 'Map Tool' icon to select your custom map for uploading and upload it with your other Garmin and custom maps, and waypoints etc..

 

How to copy your map to the memory card of the new GPSMap Cx units using "USB Mode".

        Note:  To upload multiple maps use Mapsource, it will combine them into a single gmapsupp.img file.  Then you can use this USB mode to back it up, rename it, create new ones, and swap them around.

FIRST...BACKUP THE ORIGINAL MAP FILES ON YOUR CARD !!!

  1.  Generate the .img map as usual. Change the name of the .img file name to gmapsupp.img.
  2.  Turn on unit.
  3.  Attach the 60Cx via the USB cable to your computer.
  4.  After the device has been recognized, go to:
        -->Main Menu--> Interface--->USB Mass Storage
  5.  The system enters a USB storage mode and the GPS will appear as a disk drive in Windows.
  6.  Enter the disk drive, go to the folder called Garmin.  Create the folder if it does not exist.
  7. You DID back up your original GPS files first, right?  Ok, then copy the gmapsupp.img file to the Garmin folder.
  8.  Disconnect unit.

 


Adding STREAMS to your custom map

You can add Streams, Rivers, and Lakes and other "line" features (roads, trails, railroads etc.) to your topo map.


Þ Excellent water (hydrography) data can be downloaded from nhd.usgs.gov.  The advantages of this site is that the data is high resolution, it is already in shapefile format, and it contains the stream names!  It is much more detailed than the SDTS data from GeoComm and much better than the water data from Seamless.  The user interface at NHD looks similar to Seamless but the commands are different.

            Note: Water data for an entire "subbasin" watershed (often a very large area) is downloaded together at one time.

Next, import these shapefiles into your topo map using GPSMapEdit: File, Import, ESRI Shape:

                   

1) When prompted, select the "Type of data" that you are importing: Stream=0x0018, Small Lake=0x0040, Major River=0x0046, etc...

2) On the next screen: If and only if you see the actual names of the items you are importing (actual stream, lake, river, road, or railroad names) then highlight the column that lists their names. Otherwise uncheck the "Select field for labels" checkbox.

3) On the next screen, select the correct Coordinate System for your data (such as Latitude/Longitude deg).  Pick the Zone # if your data is "UTS" data.  Then, select the correct Datum (often WGS84).

4) On the next screen select "Zoom levels to import". This is where you pick the layers that you want to put your streams, etc on.  Import streams (Flowlines) and lakes (Waterbodies) to Layers 0, 1 (and 2 if you want to see streams more often on your GPS). Import rivers (Areas) to Layers 0, 1, 2, and 3 since you'll want the large rivers to show up 'more' (i.e. at a lower zoom).

 



Other Data you can also import into your map:

DLG DATA:  Streams, lakes, roads, railroads, boundaries etc. data is called "Digital Line Graph" (DLG) data. Each 'type' of data comes in its own file and often has to be downloaded separately: such as Transportation (roads, trails), Hydrography (water), Boundaries, Hypsography (contours, low quality compared to the custom contours we just made), Public lands, etc. Note that DLG data comes in various file formats that each require different handling by you:

The common DLG file formats are "Shapefiles", "DLG-O", and "SDTS":

Þ Shapefiles has a .shp file extension: This is a simple and preferred format that contains line data and feature names.  It is typically in a Lat/Long coordinate system and WGS84 Datum.

Þ DLG-O (O is for "Optional") has a .dlg file extension:  This is the older traditional USGS format.  It contains all the data you see on typical 24K topo maps.  It is usually in the UTM coordinate system (NAD27 Datum) with a specific Zone# of 1-60. Make note of the Zone number when you get the data!!!.


Þ
SDTS has a TAR.GZ file extension and unzips ("un-tars" to be correct) to several files, each with a .ddf file extension.  This is the same data as in DLG-O files but is in the new USGS format.  It is usually in the UTM coordinate system (NAD27 Datum) with a specific Zone# of 1-60. Make note of the Zone number when you get the data!!!.

 

Some other sources for downloading DLG data:

Þ The DLG shapefile data from "Seamless" (seamless.usgs.gov) is not very good. The water data is from NHD but is not very good... it must be based on the lower resolution NHD data. The Seamless "BTS" road data, and the "Atlas" data seem to be based on 1:200K maps so it is not very detailed, or accurate.  However, the BTS road data is the only road data I could find that contains the road names. I believe this is the same data as the "Census" road data available from other sources.

The Seamless DLG data is already in shapefile format so you won't need to convert it using Global Mapper.  Your choice depends on whether you need accuracy (use the SDTS data described below), or you want road names (use Seamless BTS data).  I much prefer Garmin City Select™ over making my own road maps.  :{>

Þ The SDTS format of DLG data at GeoComm (data.geocomm.com) is the same data that the USGS puts in typical "24K Topo" maps.  It is pretty accurate although somewhat dated.   Their "100K" DLG data is just as accurate and detailed as the 24K data, it simply covers a larger area.  If you download a standard 24K or 100K SDTS file you can convert it directly to a .mp file using the SDTS2MP program. This works pretty good!  (Thanks RoboMatt for adding the 100K support!)

 


Creating a ROAD map
The latest road data sources (http://www.openstreetmap.org/) have data that is as good or better than Garmin and other map makers.  OSM now includes the TIGER Sept 2007 database!

If you add roads to your Topo you may NOT want to make the Topo transparent, otherwise you would see City Select roads (if you also had CS loaded) at the same time as your Topo roads... can be pretty confusing and cluttered.

Creating a Road map:
You will need to create an empty map and define your layers: 21 (roads), 18 (for a single line), 17(empty) in GPSMapEdit before you import the road Shapefiles. Remember, if the DLG data is a standard 24K or 100K SDTS file then you can convert it directly to a .mp 'map' using SDTS2MP and voila, a nice separate road map.  If not, then the only way I know of to create an empty map is to open an existing map (.mp) then delete everything in it: highlight everything using the arrow icon then press delete.  Be sure to do this for each and every layer of he map. Next, create the layers you want then import your road shapefiles as described above in the Streams section..

For those who like pain, I hear there are some very complex techniques, not discussed here, for creating very accurate, up-to-date, routable road maps.

 


Adding TRACKS and WAYPOINTS to your custom map

You can download Tracks and Waypoints from your GPS
and add them to your custom map as a trail or POI.

  1. Download the Tracks and Waypoints from your GPS using MapSource.

  2. Save the Track as a .gpx file. 

  3. Save your Waypoints as a .gpb file.  Only do a couple major ones otherwise your map will be very cluttered. Also, you cannot do a "Find" on Waypoints loaded at the map level.

Add a Track:
IMPORTANT:  When you create a Track on your GPS it is your "Active" Track, and when you save it on your GPs it becomes a "Saved" Track.  ACTIVE Tracks have much more detail than SAVED ones.  So, try to use only Active Tracks when creating maps.

  1. Open you custom Topo map in MapEdit and add your .gpx file:  File, Add, then browse to your Track file.

  2. Click the Edit menu then click Select and All Tracks.

  3. Right click one of your tracks and select Convert To, then select Polyline.

  4. Check the Level 0, 1 and 2 boxes then click Ok.

  5. Select #16 Walkway/Trail as the Type and click Ok.  You can select a different "Type" to have the trail show up as a color and linetype that is easier to see on your particular GPS.

  6. Change the view to Level 4 (or the highest level you have in the map).  This will let you see the original unconverted Tracks:  View, Levels, Level4

  7. Right click on a Track and select Detach File. It will disappear. All the original unconverted Tracks will disappear (provided they were all still "selected").

  8. View your entire map:   View, Levels, Level0

Add Waypoints: (same process as Tracks)

  1. Open you custom Topo map in MapEdit and add your .gpb file:  File, Add then browse to your waypoint file.

  2. Click the Edit menu then click Select and All Waypoints.

  3. Right click on one of your Waypoints and select Convert to...Point.

  4. Check the Level 0, 1 and 2 boxes then click Ok.

  5. Select a "Type" and click Ok.  Note that some Waypoints symbols may show up differently in MapEdit compared to on your GPS.

  6. Change the view to Level 4 (or the highest level you have in your map).  This will let you see the original unconverted Waypoints:  View, Levels, Level4

  7. Right click on a Waypoint and select Detach File. It will disappear. All the original unconverted Waypoints will disappear if they were all still "selected".

  8. View your entire map:   View, Levels, Level0

Save your map.

 


 

Using SendMap to upload maps to your GPSr:

    Hint:  If you are using a USB-to-Serial converter be sure to set it to a high baud rate (i.e. 115K).

  1. Run sendmap20.exe.

  2. Select your map file(s) and click Upload.  Exisitn maps (except Basemap) will be deleted so you must upload all desired maps at the same time.

OR ...

 


See my custom topo map of Red River Gorge, Kentucky
here.
You can use this as a sample to test uploading a custom map.

 

Other GPS Topo mapping sites:


 Your comments are welcome:  jacksan

Sponsors who support this site:

 

All rights reserved by the respective individuals and companies listed above.
Users assume all risks when creating and uploading custom maps to their GPSr.
This web page is copyright protected by Jack Luers, 2006, all rights reserved.

 


            "Chewy"

 

Hit Counter