Tom Clark
tc "at" trailmapper "dot" org

Why'd I write my email address like that? It's an anti-spam measure, since there are lots of email bots out there, surfing for email addresses. Just replace the "at" with @, and "dot" with a period.

About the site:

Since this is sort of a nerdy website and web application, it isn't out of line to detail some site particulars. Naturally, the site is hosted on a Linux server, running Apache (of course) and mySQL (of course). All the programming is done in Perl, so some might call it scripting. The web pages are coded by hand, rather than trying to figure out some damn thing like Dream Weaver. While a reasonable attempt was made to adhere to HTML5 protocols, no attempt was made to validate pages. That might get corrected down the line.

Privacy Policy:

Your personal data will NOT be shared. We appreciate your trust in us, and we won't abuse that trust. Assuming that your TrailMapper username isn't your real name or your real email address, then we can safely say that neither your name nor email address will appear anywhere on the site. When you upload a new trail, your TrailMapper username will be attached to that data. Similarly, when you edit existing trail data, your TrailMapper username will accompany that data. For this reason, it is hoped that you are comfortable with your chosen TrailMapper username. We may use your name and email address to get in contact with you if the need arises. That's it. Your personal information will not be shared, sold, traded or otherwise permitted to leave the database.


No attempt is made by to ensure the accuracy or suitability of use of the data presented within the TrailMapper application. Thus, using such data for navigational purposes could result in trespassing on private properties, or even life-threatening situations. It is recommended that you confirm any GPX data from TrailMapper with official sources. Navigating unfamiliar territory by GPS alone is never a good idea. Either travel with someone who knows the area, or bring a map and compass and know how to use them. And when you do get lost and the wolves munch on you, remember this:, and it's creators and contributors accept no liability or responsibility for any situation arising from the use of TrailMapper data. After all, you are the one who went out the door. Ha ha.

Philosophy and impetus behind TrailMapper:

Back in the day (70's, 80's and 90's), there would be conversations about trails and where they were, how to find them, what the trail name was, etc. After a while, the conversation would include something like "there should be a map of trails..." Any time such a map was created, the shortcomings would be apparent. For starters, a printed map doesn't change and so it goes out of date pretty quickly. Also, a printed map either shows a few trails in great detail or a lot of trails in limited detail. Maintaining printed maps is tiresome as well, so they came and went.

With the advent of the Internet and images on web pages, maps started going digital, but they were just online versions of their paper cousins -- static, difficult to maintain, and the same detail problems -- either a detailed map of just a few trails, or lots of trails but limited detail.

Enter Google. With their killer web applications, Google Maps and Google Earth, a large collection of trails can be presented in one resource, zooming in and out, panning left, right, up and down. TrailMapper takes advantage of Google Maps (initially, it used the Earth Plugin, but that was discontinued.) Trail data is stored on a server in a database, retrieved when a visitor asks for it, and displayed on a Google Earth map.

It was decided to have all data uploaded by TrailMapper users, and to make that data freely downloadable as well, in either GPX (for GPS's) or KML (for Google Earth) formats. So far, no control over the data contained in TrailMapper has been made, making it truly a product of the trail user community. Thus, TrailMapper is a good tool for sharing trail locations, directions, names, etc.

Technical notes about TrailMapper:

TrailMapper is written in Perl, with some Javascript tidbits for good measure. A bunch of it is "FrankenCode", way scary, even in the light of day. Countless hours have been spent conceiving, writing, debugging and refining the code. Many more hours may lie ahead, and there will still be FrankenCode.

Generally speaking, here's how TrailMapper works: A visit to TrailMapper displays a Google Map, centered over Fairbanks. Assuming the visitor uses the search function to search for a "trail" named "foo". (This means that the Advanced Search function was used, and the Type was set to "Trail", and that the word "foo" was typed into the Keyword Search field.)

The Perl script constructs a query using all the visitors search parameters, in this case looking for type=TRAIL, and a keyword FOO. (In this instance, no waypoints or routes will be shown, only type=TRAIL.) The keyword search is limited to three fields in the database -- name, notes and description. Any occurence of the string "foo" in one of those fields produces a match.

The page reloads with the search results -- "trails" with the text "foo" occuring in one or more of the three fields. In this imaginary scenario, we'll say it found a trail named "Foo", another one named "Fool's Gold", and one with "foot traffic" in the description.

The data is returned in KML format, a proprietary XML format by Google, used with Google Earth and compatible with Google Maps. The KML data is displayed in the Google Map, and a Javascript routine sets the size of the viewport, depending on the extents of the latitudes and longitudes of the points returned, and the visitor is hopefully zoomed in to the just the loaded trails. (When trails are spread out over a wide region, the viewport is large, and sometimes the trails are either hard to see.)

After all the KML data is loaded, individual tracks and waypoints can be clicked on, displaying information windows that contain varying amounts of detail. When generating the KML data, the Perl script also creates GPX data, and both data types are readied for download. Other things happen as well, but that's the crux of the behavior.