After several years of trying to use Garmin’s Basecamp tool to plan the layout of caches, I finally got to wondering what else was available, and I started exploring Memory-Map (see Memory-Map). It needed a bit of work, but once that was done I really like it.

It’s no good without maps

The first step in any new venture into geocaching applications is to figure out what the maps are like. In Memory-Map’s case, the maps are whatever you buy. You can get a free trial for the UK Ordnance Survey 1:25,000 scale maps. These look much like the OS Explorer “Orange Top” printed maps – I guess the printed maps are just a rendering on paper of the electronic versions. Anyway, these electronic maps have the problem that they are raster maps so they get blurry at fine detail. At the sort of scale you need for planning a geocaching trip (which is wanting to see between 2 and 10 km of map across the width of your screen) the resolution is fine and the maps look lovely.

When your trial period runs out they will sting you for about £100 for the full Great Britain mapping, but that’s cheaper than buying the whole country for Garmin Basecamp despite being the same thing. They look nice, as you can see in the samples below.

This leads me quite naturally into a discussion about the main weakness of using Memory-Map though. They don’t sell up-to-date maps for very many places apart from Great Britain (the 1:25,000 OS Explorer maps), France (the IGN 1:25,000 map) and the USA (DeLorme 1:24,000 topo maps). There’s a bunch of free ones for much of the world but they aren’t detailed enough for planning caching trips. Coverage of the world seems patchy. I also failed to find any reasonable way of making Memory-Map compatible maps from other inputs like Freizeitkarte. That’s not to say you can’t do it, it’s just to say I’ve not had the patience to do it.

Memory-Map Sample
Memory-Map Sample
Memory-Map Sample

You need some geocaches too

So, moving on, the second thing you need to make a decent geocaching planning tool is a way of uploading shed-loads of geocaches onto the map. In this case I wasn’t quite sure where to go until I stumbled across some documentation on Google about a macro written for GSAK. I use GSAK a lot. The macro outputs content for Memory-Map based on caches stored in GSAK. It was written by rutson and is one of the standard downloadable macros from GSAK on their online macro index. I won’t explain how to get there – if you don’t use GSAK you don’t need to know, and if you do use GSAK you’ll know where it is. It’s in the online list as “rMMe” (rutson’s Memory Map export).

When I tried this the first time it was fully functional, but I had two issues with it :

  • I didn’t like the way it allocated icons to cache types. Some cache types were missing and the selection criterion for various parameters like “Found”, “Archived”, “Owned” and so on didn’t seem to be complete (Yes, I have some caches that I have found and that I now own, and which have corrected coordinates. The macro wouldn’t allow all of those in one icon).
  • I wasn’t particularly keen on the icons. If you’ve seen the post about Garmin Custom Icons you’ll know I like big, bold and clear colours and geometric shapes. They are easily discernible against the background of a busy map.

The way to get rid of these issues, as you would expect, was a bit time-consuming.

Cache Processing

The solution to the first of the two problems is evidently to rewrite the processing macro in GSAK to produce a different range of settings that equated to the items I wished to see. I started off with maintaining rMMe’s approach of marking caches that contain a trackable, but ultimately decided that I generally don’t plan on the basis of whether caches contain a trackable or not, so I decided to ignore that parameter. The things I thought to be important to include in the model were :

  • Found Status – this takes priority over the type of cache, as it does on the Groundspeak website – if I’ve found it, I don’t care what type it was any more. Found caches are always shown as smileys.
  • Cache type – Traditional, Unknown, Multi, Virtual, etc – There’s more different types than you think, so I contented myself with all the key types and then use a bucket “other” type for ones that will never occur frequently enough to be of concern (like “Project APE” and “Lost and Found Celebration”) – I chose to represent the type on the icons by using different colours and letters in a square box.
  • Active Status – is it Active, Disabled or Archived? – I represent this status on the icons by adding a grey diagonal bar for Disabled and a red diagonal bar for Archived, but I didn’t bother with Disabled for a “Found” cache
  • Ownership – For caches I own, I add a small green circle to the bottom right side of each icon, including on smileys. There was no need to create an “Owned” variant for some types, because I’ll never own a Virtual, a Webcam, a GPS Maze, a Mega Event or a Giga Event, for instance.
  • Corrected Coordinates – for types where the cache isn’t at the given coordinates (like Unknown, Multi, Letterbox and WherIGo) I add a small cyan circle at the top right when those corrected coordinates have been added to the cache, and not when it hasn’t. This identifies which caches are available to be found and which need some work (either now or in the field). I noticed on the current variant of the Groundspeak site it’s possible to add corrected coordinates to any cache, but it’s meaningless on types other than the four listed here.

Once I’d been through the process of deciding what different icons were needed for each cache, I also included some extra parameters which make the macro more useful for one of my purposes – blogging about historical days out. I often write blog posts well after the actual day. Sometimes that means the caches are in varying states of disrepair or are archived. I therefore included a “Show All Caches as Active” flag, which makes the macro ignore all the settings about status and just forces use of the “Active” variant of each icon. Occasionally I might like to draw a picture of all caches that someone else might see, i.e. ignoring my finds, so I added another flag to perform a “Show All Caches as Unfound” function.

You can update coordinates directly on the Groundspeak website. This isn’t great if the whole point of the trip was to create some GeoArt (see Val D’Oise Madness, for instance). In that instance the Groundspeak website displays found caches at the given coordinates, so GeoArt restores itself. To make Memory-Map do that you have to tell it to. The original coordinates are available in GSAK, but you have to choose to use those rather than the corrected ones. So, I added a “GeoArt Mode” flag, which forces use of the original rather than the corrected coordinates – see the third picture above – the one with the Mickey Mouse ears.

The original rMMe.gsk macro file already had the right structure for performing a loop over all of the displayed caches in GSAK and including an output line for them. It also had a small block for drawing the child waypoints out. This meant that all I had to do was to figure out how to change the core of the module to assign a different set of icons, and to apply the various control flags I wanted. That proved to be fairly easy once I’d read through the example a few times. The structure and meaning was quite apparent and quite simple to understand. Result!


You can use as many different icons as you can be bothered with creating and programming for. There are some limits to how you do it, but the number can be quite large. The constraints on the icons are as follows :

  • They must be 32×32 pixels in size
  • They must be saved as 256-color bitmaps (.BMP)
  • Pure white (RGB 255.255.255) is treated by Memory-Map as a transparent layer, so if you need something white, pick a light cream colour instead. I found that RGB 255.251.240 gives a decent looking shade

I chose to edit them using MS Paint – it’s easy to use and clear enough for these very simple files. One issue is that MS Paint always allows you to edit in the full 256x256x256 RGB colour-space. It’s a bit of a lottery whether the colours you’re using are actually available in the 256 colour palette (I couldn’t find a reliable source). The way around that is to pick a colour you like, then save the file as a 256-colour file, and then reopen it. MS Paint corrects any colour you’ve used to something that’s compatible with the 256-colour palette.

Somewhere in the configuration for Memory-Map is an entry which determines which pixel in the icon is placed over coordinates. In mine, it’s set to about 16,16 and I drew icons that are about 20 pixels square in size (always at the top right of a 32×32 frame. This means that, when being drawn by Memory-Map, the icon appears mainly to the top-left of the coordinates. For caches that are directly on a public footpath that’s advantageous, because the icon mainly covers the whitespace above the path on the map rather than covering the path.

Enough with the chat, how do I use this for myself

Here are the things you need to do to set this up.

There are two downloads here. One contains the GSAK macro, the other contains all the icon and configuration files.

  1. Download and unpack the GSAK macro. Install it in GSAK by taking the Macros -> Run/Manage menu option and then hitting the Install button – this produces another dialog where you can browse to this macro file and upload it
  2. Select a database in GSAK that has some caches in it and then Run the GSAK macro for the first time. This will, amongst other things, hunt for an installed version of Memory Map and create the relevant folders for later use. It install rutson’s original icons into the directory but these aren’t used.
  3. Navigate to C:\Users\’Me’\AppData\Roaming\gsak\MemoryMap\icons (where ‘Me’ is the current user) – You should see a bunch of icons and config files. You can delete all of them if you want. rutson’s original version has his icon data embedded in the macro and I didn’t remove this.
  4. Download the .ZIP file with the icons in
  5. Unpack the icons .ZIP into C:\Users\’Me’\AppData\Roaming\gsak\MemoryMap\icons

Everything is now installed, so you’re good to go. You should see my icons being used instead of rutson’s. The key file for this bit of configuration is header.txt – This makes the association between the icon file name and the integer number used to represent it in the Memory-Map upload.

How do I use it?

It’s quite easy. When you run the macro it brings up the dialog below. You can tell I didn’t spend much time tidying it up. I may do that at a later date. The result is that some of rutson’s original features don’t work now (as I didn’t want them).

Key areas of the dialog :

  • At the top left you can select the folder where output files are generated. I’m creating them in the same folder that the icons and input config files are stored.
  • Below that, you can define the name for the output file – it creates a .CSV file. You can use the last name, or the GSAK database name, or choose a custom name.
  • Below this, there’s a number of checkboxes which control the outputs. The names make it fairly obvious what will happen. “Add route?” adds a simple straight-line route from one cache to the next (but as far as I can tell the means of doing this is uncontrollable). “Display Spiders?” shows original and corrected coordinates separately and draws a straight line between the two on a cache-by-cache basis. “Display All as Unfound?” and “Display All as Active?” override the GSAK status for found and active/disabled/archived statuses. “GeoArt Mode?” ignores corrected coordinates and displays caches at the original coordinates (where there’s a difference).
  • On the top right is a group of controls “Links To” which I ignored and don’t use.
  • Below that are three flags that control whether child waypoints are displayed. I removed clutter by suppressing child waypoints if they’re at the same place as a cache. You can also choose to suppress output of children for found caches or for disabled/archived ones.

Hitting the Go button on the dialog takes the selected parameters and creates an output file. It then invokes Memory-Map and uploads the created file.

Memory-Map isn’t clever enough to figure out whether there’s already a waypoint with the same name. You’ll get duplicates if you reload the same caches. I’ve noticed this causing some strange behaviours and it certainly clutters the whole shebang. My recommendation is that you should delete all the current caches before you run the GSAK macro.

You’ll notice if you pull up the Overlay Objects panel in Memory-Map the caches are grouped by cache type and found status. You can double-click items in the side-panel to get the map to centre on that item.

As a final act, I also figured out what to post into the input file so that you can use Right-Click->Open File to invoke a browser with the cache details in it. It took a couple of attempts to get it right and at the moment it’s kind of hard-coded to my own PC setup, but in the original macro it simply tried to post a “…” string. This doesn’t work because MemoryMap doesn’t know that you use a browser to open an http link. The solution is to change that string so it begins with the full file location of the browser executable file (chrome.exe in my case) followed by “…” as a parameter to the executable. Works a treat, and if your browser is already open it just starts a new tab. #jobsagoodun

Waivers and Restrictions

The downloads above are, to the best of my knowledge, free of malware. However, I take no responsibility for that. Please scan anything you download (from anywhere, not just from me).

You may make copies whenever and wherever you want. However, if you break it then you own both pieces.

There is no copyright on any of the downloadable material. If you are going to rework it, I would appreciate it if you could credit myself and rutson when you do so. You may not use this material as the basis for a commercial offering. It’s free shareware – please keep it that way.

These materials were written for personal use by myself. You use them at your own risk and I don’t provide a helpdesk. I may update the features and repost occasionally. There is no warranty and I take no liability, under any circumstances.



Mr Google advised that we had a very long way to go. We were in the car by 6am because we supposedly had at least 9 hours of actual driving to do and needed to cover 870km just to get to Calais, so with the need to make stops we back-calculated that 12 hours would be our minimum journey time. The reality proved somewhat different, but fundamentally we spent all day travelling.

Getting out of Grenoble at 6am on a Sunday morning was very easy and there was pretty much nothing on the road. I’d planned not to make stops for caches during the day as timings looked tight and I didn’t want geocaching to be the reason for any failure. As a result we proceeded directly through Rhône and Metropolis de Lyon without stopping for a cache, and we found ourselves all the way up at the Saint Ambreuil services near Chalon-sur-Saône at 8am, having already covered 225 of the 870km. That sounded like time for breakfast, so we gave ourselves a decent break, filled the car up with fuel, and had something to eat and drink.

Kas took over the driving here and drove a massively long but very quick stint which got us all the way to Sommesous in another 2 ½ hours. It was only 11:30am and we’d already done nearly ⅔ of the distance.

We didn’t really feel like having a proper meal, so we found a cache and grabbed some thoroughly unhealthy sweet snacks in the garage, which ate mainly whilst sitting outside, and then we got back into the car for another stint. By this time we’d realised we were going to be very early, but decided we might as well get to Calais as soon as we could. There was always the option of getting an earlier train, or so we thought.

We’d got another 350km to go before Calais, which we assumed would be another 3 hours or so. Even with another impromptu toilet stop, we made it to the terminal at 3pm, so three full hours less than Google suggested.

It was at this point that the day started to go downhill at a rapid rate. We weren’t getting an earlier train. Why not ? Because the terminal was so busy that they wouldn’t even let you drive up to the check-in gate unless you were within two hours of your scheduled departure time. So we got directed off site, around the houses a bit, and onto a massive holding area where we were segregated out in approximately one-hour lots.

We sat there for 90 minutes before being allowed through, and then spent another hour getting checked in and passing through the two passport controls. At least we were on the train I’d booked (or so we thought, again).

The terminal building was heaving, as ever. We queued up to grab some pizzas for dinner and then killed a further 20 minutes not buying anything in the duty-free shop before deciding to go sit in the car. 20 minutes after getting in the car we agreed we might be able to blag our way into the holding pen (because they were calling the train two in front of us), so we trundled round and got separated off into a lane for our allotted train. And that’s where we stayed for another 90 minutes. The trains were all running late, because I think they fill them up to the gunwales rather than sending them off on time. The problem on a night like this is that there were so many people who had flexiplus tickets that cars were essentially being bounced off their allotted trains. Anyway, whatever the reason, we eventually got away about an hour after we were supposed to.

All of this put us back into the UK somewhat after 8pm, and we’d realised that we weren’t going to be getting home in time for the Co-Op still to be open. Also, I’d been in the driver’s seat since we left Sommesous, so it was time for a driver change. We stopped at the first lot of services out of the tunnel, having taken a slightly rural route to get there when I missed the mane as we entered the motorway. We grabbed a few snacks and drinks to eat at home and then set off again.

The motorways home were busy, like they always are, and we eventually made it home at around 10:30pm, having driven 1,080km (or 670 miles) over the course of the day. I thought it took a long time to get home from Aberdeen when I’d done it three weeks previously. We’d been travelling for 18 hours and had been out of bed for 19. After a quick snack, Kas and me went straight to bed because we’d both got work in the morning.