Introduction: Create Custom Maps for Your Garmin GPS
If you have a Garmin GPS designed for hiking and other outdoor activities (including the GPSMAP, eTrex, Colorado, Dakota, Oregon, and Montana series, among a few others), you don't have to settle for the bare-bones maps that came pre-loaded on it. Even if your unit came with TOPO maps, you can improve the functionality of your GPS by creating and uploading custom maps of areas you explore often.
Garmin provides instructions for doing this here, but there's a catch. Garmin has purposefully included limitations on the size and number of custom maps you can upload to your device to encourage you to purchase their premium maps. Of course, they won't tell you some clever tricks to get around them! While it's not possible to completely circumvent Garmin's limitations, there are a wealth of tools online - some free, and some not - that can help you make better custom maps. So many tools and suggestions, in fact, that it's a bit overwhelming.
In this Instructable, I'll lay out a simple process I've come up with for making custom maps for Garmin outdoor GPS units and share the entirely free tools I use to do it.
Please note that many of the screenshots in this Instructable look pretty bad. I believe this is due to compression used by the website when loading the images. You can download the originals or rely on my descriptions to get a sense of image quality.
- Garmin outdoor GPS unit that supports Custom Maps (see the list at the bottom of Garmin's instructions, linked above also)
- PC able to run the following software (You can create these maps on a Mac as well, but some of the software I like to use is PC-only)
- Google Earth Pro for desktop (free)
- GIMP (free), Photoshop (not free), or similar
- KMZFactory (free)
Step 1: The Limitations of Garmin Custom Maps
To encourage us all to pay for their premium maps and services, Garmin has placed several limitations on the size and number of custom maps that can be uploaded to their GPS devices. These limitations are:
- Map images over 1 megapixel in size (1024x1024 pixels, 512x2048 pixels..... in short, any image that contains more than 1048576 pixels) will be displayed at a reduced resolution on your GPS. In other words, fine map details and text will become indistinguishable.
- All map image files must be less than 3 MB
- Depending on your device (details here), you can upload no more than 100 or 500 custom map images or tiles. It doesn't matter if you have the storage space, any more and they won't load.
While there is no way to completely get around these limitations, we can use a method called map tiling to upload maps that are larger than these limits and view them in full resolution. When a map is tiled, it is divided into smaller pieces, or "tiles" which are displayed adjacent to each other, creating a seamless image. Doing this manually can be very frustrating and a lot of work for a large map.
Step 2: Getting Started
To get started, we'll of course need a map! For this Instructable, I'll be using a map of Olympic National Park that I downloaded from the Park's website. However, you can use a map image file you've already got, scan a paper map into your computer, or even take a screenshot of Google Maps.
The map of Olympic I downloaded is 26.6 MB and in PDF format.
Here's a screenshot of this map open in my PDF viewer, zoomed in to 190%. It looks pretty good! The detail is very crisp and all of the text is readable.
Step 3: Converting the Map to JPEG
My map is a PDF file, so the first thing I'll need to do to get the map onto my GPS is convert it into a JPEG. To do this, I'll be using GIMP, a free open source image editor with functionality similar to Photoshop.
Since a PDF is not an image file, upon opening GIMP prompts me to import the PDF and gives me some options.
The real thing we need to pay attention to here is the resolution. Don't worry about the GPS's image size limit yet, though. For now, we'll just focus on keeping the map looking good as it's converted into an image. First I'll try the default resolution of 100 pixels/in and see how that looks.
Looks...... eh. It's okay, but some of the small text is getting hard to read. This may be just fine for your purposes, and that's great. I'm going to close this and import the PDF map again, this time setting the resolution to 200pixels/in.
And it looks great. All of the text and important detail is clear. Spend some time playing around with the resolution until you find a setting that looks good.
Now is also a great time to crop your map if it has any boarders or frames you don't want to see when you load it onto your GPS. In GIMP, this can be done by selecting Tools>Transform Tools>Crop. Then select the area you want to keep and press Enter on your keyboard.
Now we'll export the map into the JPEG image format. Select File > Export As...
Give your map a name, then click "Select File Type (By Extension)" near the bottom of the Export window and select JPEG image. Click Export.
Now you should be presented with even more options! But there are some important settings here, don't just click Export again. First, slide the Quality setting all the way up to 100. Next, open the Advanced Options. Be sure to deselect the checkbox next to "Progressive." If you don't do this, everything will work until you upload the map onto your GPS, when it suddenly won't show up.
Step 4: Georeferencing the Map
Now that our map is in the JPEG format, it's time to georeference it. In other words, we are going to tell the computer where this map image belongs on the globe. Open up the desktop version of Google Earth Pro and navigate to the approximate area where your map belongs.
Now select Add > Image Overlay. Give your map a name, then hit the Browse button and open the JPEG image you just saved. Then adjust the Transparency slider to right about in the middle. This will allow you to see the globe in Google Earth through your JPEG overlay.
Now move the Overlay Properties window to the side and use the green "handles" to line the overlap up with the map beneath. This is by far the most time-consuming part of the process. First, I would suggest rotating the overlay (using the diamond-shaped "handle") to roughly the correct orientation. Then roughly match up roads or easily distinguished buildings near the corners of the map. Rotate the map again if needed to make roads on the overlay parallel with those on the globe, then make your final adjustments. Note that often it is not possible to perfectly line up every road, building, body of water, etc. Line it up as well as you can, and keep in mind that for general outdoor activities like hiking, it won't matter if a road or trail is off by a few yards.
One word of caution: Under the "Location" tab in the Overlay Properties window, there is an option to "Convert to LatLonQuad." This option makes it much easier to line the overlay up with the map below, but do not select it or the map will not work on your GPS.
Once your map is aligned with the globe, click over to the Altitude tab and set the Draw Order to 50 or higher so your custom map will appear on top of the default basemap on your GPS.
Hit OK to close the Overlay Properties, then find your map under "My Places" in the Google Earth sidebar. Right click it, and select "Save Place As..." Remember whether you're saving the file as a KML or KMZ (either is fine), and save it in a spot you'll remember too.
The hard work is done!
Also note: You can overlay multiple custom maps at once. If they overlap, maps with a higher Draw Order value will be displayed over maps with a lower value. Keep in mind that no matter what Transparency setting you select in Google Earth, all custom maps will be fully opaque once displayed on the GPS.
Step 5: Tiling the Map
Now we'll tile the map if needed and upload it to our GPS. Remember, tiling is a process by which the map is split up into smaller "tiles" which are later displayed adjacent to each other to create the full map. This helps us get around Garmin's pixel limit for custom maps.
Open up KMZFactory and open the KML or KMZ file you just saved. Once you open your file, KMZFactory presents you with a slate of settings. If your map has a border you didn't crop off before and you'd like to do it now, KMZFactory has a tool to do this in the middle third of the window. You'll also see here that KMZFactory has automatically chosen a number of tiles to spit up your map to ensure that each tile is below Garmin's pixel limit.
In the bottom third of the window, enter the map's name as you'd like it to show up on your GPS in the "Image Tag" field. I like to note the number of tiles the map contains at the end of the file name for future reference. Leave the Projection set to "Mercator," you can change this later if your map doesn't display correctly. Make sure the Draw Order is set to 50 or higher so the map appears on top of the basemap on your GPS. Finally, decide how you'd like to set the JPG Quality. If you have a newer GPS unit like mine with plenty of storage space or a map with a lot of fine details, you might choose to set the quality to 100 to get the crispest image possible. If, on the other hand, you have limited space on your GPS or a very basic map, you can leave this setting at 80 or set it even lower. As an example, my map of Olympic takes up about 2 MB when the JPG Quality is set to 80, and about 8 MB when the quality is set to 100. Honestly, this map looks fine at the default quality setting of 80.
The really good news about all of this is that the KML or KMZ file you created in Google Earth won't be changed by KMZFactory. If you're unhappy with any of the settings you choose, you can reload the map into KMZFactory and try again.
Finally, click "Create KMZ File" and save it in a location you'll remember. You can then open this file in Google Earth to make sure it looks alright. If you'd like to load it directly onto your GPS, continue to the next step.
Step 6: Loading the Custom Map to Your GPS
Connect your GPS to your computer with its cord, and find it in the file browser. Navigate to the folder Garmin > CustomMaps, this is where you will save the KMZ file generated by KMZFactory. If this folder doesn't exist, create it. Save the file here directly with KMZFactory, or move the file to this folder from wherever it was saved. Now right-click on your GPS in the file browser, "Eject" it, unplug it, and power it up!
Step 7: View the Custom Map on Your GPS
In order to see the custom map on your GPS, you'll have to enable it in the map settings. Navigate to Main Menu>Setup>Map>Map Information>Custom Maps on your GPS (I have a GPSMap 64, this could be slightly different on other units) and enable the map you just created. Now it should show up on the GPS! If you ever want to turn the custom map off, you can also do that here.
Step 8: Potential Problems and Solutions
Here are some mistakes I've made /problems I've had and solutions for them. If you have any other problems, post about them in the comments and we can try to find a solution to add to this step.
The map doesn't show up at all on your GPS
- Did you turn off the "Progressive" setting when you saved the JPEG?
Is the KMZ file in the Garmin>CustomMaps folder on your GPS?
Do you have an older GPS? If so, you might try the "Maximize compatibility" setting in KMZFactory.
The vertical center of the map is distorted.
Try the other Projection setting in KMZFactory
I would also highly recommend reading the documentation PDF that comes with KMZFactory if you'd like to know more about this process or to learn more about the Projection setting.
Participated in the
3 days ago on Step 8
I cam across this instrutable when trying to create custom maps for my new Garmin GPSMAP 66i. The steps are really easy to follow.
Unfortunately, KMZFactory appears to no longer be supported/available (and may have only been available on PC and not osx in the first place).
For anyone trying to replicate this. I have created a python package that will process the kmz file such that it contains a bunch of smaller jpegs and can be used as a custom map. It's no where near as flexible as KMZFactory appears to have been. But it does the job for me.
You can find it here https://github.com/jnh277/kmz_custom_maps or https://pypi.org/project/kmz-custom-maps/0.1.0/
Question 1 year ago
Thanks for the information! I don't yet own a Garmin handheld, as I use Navionics on a phone, but I want to use this idea for a backup. I've converted some NOAA marine strip charts to kmz. Can a Garmin use and overlay several maps, or can I only navigate on one kmz map at a time?
Reply 1 year ago
You can overlay and use several KMZ custom maps at once as long as you don't exceed the file size or tile limits explained in Step 1. They can even overlap each other - a higher "draw order" value set in KMZFactory or Google Earth will cause a layer to be drawn over other layers. However, all KMZs will be displayed as fully opaque on the GPS even if you make some semi-transparent in Google Earth, I just tried.
You can also turn individual custom maps on and off on the GPS under Setup Map > Map Information > Custom Maps
Reply 1 year ago
I just learned that not all GPSMap series plotters will support kml files. I got an old GPSMap 541 to try this out.
Although I can convert NOAA raster charts using your instructions, older GPSMap units only recognize a Garmin .IMG file format
Question 2 years ago on Step 8
Hi, When entering the map into KMZ Factory the map appears black and once completed this is how it shows up on google earth, base camp and the gps unit. Not sure why can you help please?
Answer 1 year ago
I really can't say for sure, but here are some things that immediately come to mind that might be causing your issue:
- Did you deselect the "Progressive" option when you saved the JPEG?
- Is your image file actually a JPEG? I believe you can make KMZs with other image formats, but only a JPEG will work on the GPS
- Did you select the "Convert to LatLonQuad" option in Google Earth to help line up the overlay? The map won't work on the GPS if you do this.
Sorry it's taken so long for me to get you a response, hope this helps.
1 year ago
Excellent! Thanks for taking the time to write this up - great explanation adn easy to follow.
1 year ago
Thanks facklere! It was very frustrating to load maps before I read your article. I, admit, I am disappointed in GARMIN and their obstructionism to load useful maps at a high resolution. Your solution worked perfectly!! Well done and well explained.
Question 1 year ago
Thanks for a very useful guide. However, I must be doing something wrong. I tried converting a small pdf map (for a 9 km hike) in PhotoShop and GoogleEarth on my Mac. I did the KMZ Factory step in Windows, since this software does not exist for MacOS.
I used PhotoShop for the .jpg conversion. There did not seem to be a "Progressive" checkbox to uncheck, so I just did the export. During georeferencing in Google Earth, I avoided the "Convert to LatLonQuad" option and saved my map as a .kmz file when I was satisfied that everything lined up. KMZ Factory split the .jpg map into 9 tiles.
The problem is that BaseCamp cannot open the map ("not a valid KMZ file")
I then tried everything in Windows, using GIMP, Google Earth and KMZ Factory. Same result.
I have not tried to upload the map to a Garmin unit yet but I did test another small .kmz map I made about 10 years ago (don't remember how) and it imported fine in BaseCamp.
I will test my new map with a Garmin GPS receiver but it seems that I am stuck.
Another strange thing: I tried to have Google Earth save my map as a .kml instead, but KMZ Factory could not open it so no luck there either.
Thanks for any tips or suggestions!
Answer 1 year ago
It works now!
I am not 100% sure what the problem was but my guess is that the name I gave the kmz file created in Google Earth was too long. The pdf I wanted to turn into a Garmin map was for a short walking route in Belgium. I had originally used the name of the route, which consisted of several words, as a file name, separating the words by underscores. The file name must have been around 30 characters in length. When I changed that to a single word (5 characters) and re-tiled it in KMZ Factory, everything worked like a charm. I can now import and see the map both in BaseCamp and on my Garmin GPSmap 65s.
I did consider if the problem was due to the use of French accents at any stage in the process but as far as I remember, there weren't any special characters in the first file name.
I have converted several other pdf maps since this discovery. They all work flawlessly.
Let me add that this is the best guide I have found so far about turning maps in the pdf format into custom maps for Garmin GPS receivers. Thank you very much!
3 years ago on Step 8
Thanks for the great write up. Works really well.
Reply 3 years ago
Glad it helped!