GPS for the boat

How to create an inexpensive GPS device for the boat to display fairly accurate moving maps of river and lake positions.

August 2009

Background

Back in late 2008 I bought a Navigon 2100 GPS for the car. The unit was really easy to use and did a pretty good job. I really liked the way it would guide you through complex interchanges on major roads with a reality view. Recently when my family was planning to go on vacation I decided it was time to purchase the map update package. However, after owning it for less than a year, I was very disappointed to find out that Navigon would no longer support map updates for the thing, planning instead to focus exclusively on their software for IPhones. Well to Navigon I say; "Kiss my ass you ungrateful bastards and I hope your IPhone business goes as well as my attempts to update your sorry product!"

<UPDATE 04/21/10>

Back in October of 2009, after doing more Google searches, I found out there is a dwindling supply of the Navigon FreshMaps Activation Cards available on Ebay. I was able to obtain one from some guy selling them in Canada. He provided me the codes almost immediately via email and sent me the actual packaged product via the mail. It worked and I was able to update the 2100’s maps although there was no PIO update.

<END UPDATE>

At this point I feared I was eventually going to end up with a $99 paper weight as the maps and POI data got older and older. However, after a little research I found out that the thing runs Windows CE 5.0 as its OS and that it could be "unlocked" so that you could use other CE programs on it. After a couple of Google searches I found a thread on how to unlock the Navigon 2100, located here. On page 5 there is a post by "bobdole" that explains how to install MioPocket 2.0. After following these directions you will end up with a GPS unit that can run various Windows CE programs. Back when I had a GPS enabled Windows Mobile phone I found a program call MapWelt. MapWelt is a "moving map" program written for pocket PCs and smart phones. It can read a GPS signal and display the position on a map that is created from JPGs or other sources. This program worked great for displaying maps of the rivers and lakes where we like to use our boat so I was eager to try the unlocking process on my Navigon and see if MapWelt would work on it.

Unlocking the Navigon 2100 with MioPocket 2.0

The "unlocking" process was very easy. I decided to buy a new 4GB SD card ($17 from Walgreens) so I could leave the original Navigon SD card untouched. I simply plugged the original Navigon SD card in to the SD card slot on my laptop and made a backup of the entire thing. I then copied the backup to my new 4GB SD card. Then I followed the directions on the thread mentioned above to install MioPockets.

The unlocking process worked, and I eventually got MapWelt working (sort of), but it didn't work quite right. This is because MapWelt requires a scripting language called eTcl to be installed on the CE device prior to installing MapWelt. There wasn't a eTcl package that would sucessfully install on CE so I just copied the files from a Windows Mobile device. While the kind of worked the MapWelt software didn't function quite right and eventually the map files I created stopped comming up. By this time I also realized that there were newer versions of the MioPocket that included a feature that would set the time in CE from the GPS, which is super handy on the boat. Between the two versions I tried to purchase a GPS program called Tracky that worked in CE if you asked for the special version. However, I found the activation code I purchased for Tracky didn't work if I upgraded to MioPocket 3.0. Frustrated and as it was near the end of the boating season, I tabled the project.

April 2010

Unlocking the Navigon 2100 with MioPocket 3.0

The end of April is when I get our boat back out of storage so this reminded me of this project. So a few more Google searches and this time I found that there was some GPS software called NoniGPSPlot that would run on Windows CE. NoniGPSPlot would also display a "moving map" made from JPGs, with the added bonus of displaying English units of measure like miles per hour. Excited to give this a try I decided to get the latest version of MioPocket 3.0 which was now at Release 59. After checking what was new in Release 59 I was happy to learn that NoniGPSPlot was already installed in this version. So here's what I did:

1) Unlocking the Navigon 2100

First, I backed up of the original Navigon SD card. I tried to simply plug the Navigon SD card into the CD slot of my computer but it told me that the card was not formatted (I'm not sure why it worked last year). So instead I pluged the 2100 into the PC via the USB cable. I was then able to see the card as a removable disk. So I just used windows explorer to copy all the files and directories from this removable disk to a folder on my PC. I then copied the backup to the emply new 4GB SD card, via the SD card slot on PC. I verifed that the backup that I copied onto the new 4GB SC card worked in the Navigon by putting it into the 2100 and cold booting it (holding the powerbutton down until the unit cycled). Once I verfied the new card worked I took the 4GB SD card back out of the 2100 and put it back in the SD card slot of my PC. Per the instraction in the MioPocket 3.0 Readme file, I renamed the AutoRunCE.exe file on the root of the 4GB SD card to AutoRunCE.exe.bak. Then I copied MioAutoRun.exe, MioAutoRun.mscr and MortScript.exe from the MioPocket 3.0 Release 59 download to the root of the 4 GB SD card, then I renamed MioAutoRun.exe to AutoRunCE.exe and MioAutoRun.mscr to AutoRunCE.mscr. Then I copied the Media and MioAutoRun folders from the MioPocket 3.0 Release 59 download to the root of the 4 GB SD card. Finally, I put the 4GB SD card back into the 2100 and cold booted once more. As the Navigon booted it briefly said something like "please insert the memory card", however this dissappeared within a few seconds. MioPocket the installed itself and rebooted the Navigon. This time when it came up I was greeted by a Windows CE interface with lots of neat programs on it, including NoniGPSPlot.

2) Making maps for NoniGPSPlot

There are many ways to create maps for NoniGPSPlot. The easiest way is probably NoniMapView. The link provides a good tutorial. This utility requires the Java runtime environment (JRE) to be installed on your PC to use it. This utility will let you download map tiles from GoogleMap, YahooMap, VirtualEarth, or OpenMapStreet and save them in a format readable by NoniGPSPlot. While this works pretty well I used some other methods for creating maps because I found these provide some additional abilities:

A) Making maps with USAPhotoMap

One source for my maps is USAPhotoMaps, which can be downloaded here. USAPhotoMaps 2.78 downloads USGS aerial photo and topo map data from Microsoft's free TerraServer Web site, saves it on your hard drive, and creates maps with GPS accuracy. The topo maps are old but I like them becasue they have the mile markers of the rivers on them. Once you install USAPhotoMaps launch it and navigate to the place you want the map data for and download the data for that area. Now from the main menu of USAPhotoMaps select File, then Create a BIG jpg file. Select the corners for the area you want to create the map for. Depending on the size of the area you want to create maps for you may have to do this several times because to large of an area will cause the program to crash. The output .jpg file is stored in the installation directory for USAPhotoMaps, usually C:\Program Files\USAPhotoMaps. The program create 3 files, we will need 2 of them, the .jpg and the .txt file.

The .txt file contains the coordinates of the corners of the .jpg in the UTM system. Determine the pixel locations coresponding to upper left, lower left, and lower right corners of the .jpg file. For example if the .jpg file was 10400x3400 pixels then the top left would be 0,0 the bottom left would be 0,3400 and the bottom right would be 10400,3400. Now with the data in the .txt file determine the UTM coordinates that correspond to those three points. Also the name of the .jpg and .txt files will indicate the UTM zone. An example of the text file output, that corresponds to a 10400x3400 .jpg I made, would look like this:

352000

393600

4585600

4572000

In this example the upper left corner, corresponding to pixel 0,0, would be Easting=352000 and Northing=4585600. The lower left corner, corresponding to pixel 0,3400, would be Easting=352000 and Northing=4572000. The lower right corner, corresponding to pixel 10400,3400, would be Easting=393600 and Northing=4572000. You will need convert the UTM cordianates to decimal LAT/LONG here. With the coordinates in LAT/LONG you can now calibrate the jpg file and create a cooesponding .map file using eMapZone. There is good tutorial on how to do this located here. Once the .map file is create we need to break the large map into tiles using MapSplit. A nice tutorial on how to do this is located here. Once your map is split into tiles they can be copied onto the SD card and then they can be loaded into NoniGPSPlot.

B) Making maps with SAS.Planet

SAS.Planet is similar to NoniMapView in that it lets you download map tiles from a number of potential sources. It can be downloaded here. However, it has additional features I utilized in creating maps for my boat GPS. For example, it lets you add your own placemarks, paths and polygons that can be superimposed over the downloaded map data. I used this feature to tag some of the IL river features like the islands. I also was able "draw" in the locks and dams on top of a Google Map download. Another technique I used was to draw some construction lines that helped me identify map tiles that would not be used while on the river. This helped me keep the overall map size down on the SD card, while at the same time having a map with a high zoom factor.

To create maps from SAS.Planet for use with NoniGPSPlot here's what I did: First using the SAS interface I went to the area I wanted the map for. I decided the zoom I wanted and then made sure that SAS cached all the map tiles for that zoom level by moving around the map area until everything was clear. Then I went to the Operations menu at the top left of screen and chose Select - Square-wave area or polygon to select an area on the screen. Next I Draw the area - click the left and clicked the mouse when done. The "Operations by chosen area" dialog box then pops open. I selected the Stick tab - Choose Type of map, overlay type and zoom level - check the .map box. The Save as file dialog box now opens - save as .jpg and put it where you want it. SAS now creates the .jpg and the corresponding .map files. After several unsucessful tries getting Noni to read the files directly from SAS I found that if I made one large .jpg file from SAS then used MapSplit, as described above, to break the map into a set of small tiles things worked better.

Here's a screenshot of the result. It is a Google Maps map, which seemed to have the most accurate land features (even over the Google Topo maps!?), that I "drew" in the Dresden Island lock and dam and that I added the annotation for Dresden Island using SAS.