A month ago I was hiking in the Fossil Ridge Wilderness Area. I wore several sensors over the four days — unfortunately, I lost the Fitbit and the Q-Sensor had a clock error which corrupted its data. Disappointing, but I did have two Garmin devices that held up, recording position and heartrate.

I finally managed to create a map from the data. I suppose I could have done this more efficiently with Google Earth, but I decided to parse the GPX files and draw my own paths with python, overlaying the result on a Google terrain map, which looks a lot nicer. The brighter red the path, the higher my heartrate — however, Im not sure that this ended up revealing anything particularly compelling. It is just, a la Certeau, a curious relic that substitutes for a rich experience.

Regardless, making it was a good exercise. Two complementary pieces of code were essential when doing this kind of thing outside of a mapping platform. First, when finding the geographic distance between two latitude/longitude pairs, Euclidean distance doesnt work, as we’re operating on an elliptical sphere. For that, there is the haversine formula:

def geo_distance(pt0, pt1, miles=True):
    ”“” Convert the distance between two points, specified (lon, lat), \
        to miles (or kilometers)
    ”“”
    LON, LAT = 0, 1
    pt0 = math.radians(pt0[LON]), math.radians(pt0[LAT])
    pt1 = math.radians(pt1[LON]), math.radians(pt1[LAT])
    lon_delta = pt1[LON] - pt0[LON]
    lat_delta = pt1[LAT] - pt0[LAT]
    a = math.sin(lat_delta / 2)**2 + math.cos(pt0[LAT]) * math.cos(pt1[LAT]) * math.sin(lon_delta / 2)**2
    c = 2 * math.atan2(math.sqrt(a), math.sqrt(1 - a))
    d = 6371 * c # radius of Earth in km
    if miles:
        d *= 0.621371192
    return d

Secondly, in order to plot data on a two-dimensional plane and have it line up with an image from Google, I needed to use the formula for the Mercator projection. This one is compliments of OpenStreetMap. It gives you coordinates relative to the globe, which have to be further scaled.

def geo_project(pt):
    ”“” Project a (lon, lat) point to x,y space using
        the Mercator projection
        http://wiki.openstreetmap.org/wiki/Mercator#Python_Implementation
    ”“”
    def merc_x(lon):
        r_major = 6378137.000
        return r_major * math.radians(lon)

    def merc_y(lat):
        if lat > 89.5:
            lat = 89.5
        if lat < -89.5:
            lat = -89.5
        r_major = 6378137.000
        r_minor = 6356752.3142
        temp = r_minor / r_major
        eccent = math.sqrt(1 - temp**2)
        phi = math.radians(lat)
        sinphi = math.sin(phi)
        con = eccent * sinphi
        com = eccent / 2
        con = ((1.0 - con) / (1.0 + con))**com
        ts = math.tan((math.pi / 2 - phi) / 2) / con
        y = 0-r_major * math.log(ts)
        return y

    return merc_x(pt[0]), merc_y(pt[1])
→ 2011-09-19         


Last week I spent four days backpacking through the Fossil Ridge wilderness area in Colorado. It’s remote, and beautiful, and a part of the world where I feel at home.

With your pack, you pay in sweat for the weight of every need. Thats a certain kind of perfection. Intentional living at its finest. The immediacy of the landscape and your physical effort supersede the solipsism of urban concerns.

Lefebvre suggests that the rhythms of the environment can only be understood in relation to those of one’s own body. Certainly the topography had a direct bearing on the sound of my heartrate in my ears. Lefebvre probably didnt have this in mind, but I wore sensors to record whatever physiological signals that I could, including temperature, electrodermal, fitbit/actigraphy (which didnt make it back), and heartrate for as long as their batteries held out, and I saved my path with a GPS unit. More on that when I process the data.

Having bushwacked down Crystal Creek, I made camp. Waiting until dinnertime, I performed a quick rhythmanalysis, sitting on a suitable rock, determining what was perceptible within about a one-hour window around 6pm, two hours before sunset. The stream and the wind were the primary voices, polyrhythmic with each other, and eurythmic with their components:

  • stream, continuous general rush, linear
  • stream, high-frequency, in two distinct places, linear
  • stream, low-frequency, bouncing, like a low-voice, ~2sec, linear
  • visual pattern of rapids in the stream, high-freq, linear
  • periodic wind flow through the valley ~5min, cyclical
  • creaking of oscillating pine trees nearby responding to the wind, ~5sec, cyclical
  • smoke from my smokefire cycling directions, responding to the wind, ~5min, cyclical
  • aspens quaking across the valley, continuous, cyclical
  • temperature drop, presumably cyclical
  • descent of the sun, presumably cyclical
  • mosquito attacks, in sorties, ~1min, linear

It strikes me that there are no isolated cycles in nature. All periods are dependent, and additionally subject to diurnal, seasonal, and geologic rhythms. Even the apparently linear nature of the rhythms of the stream are subject to these macro-cycles. Though not perceptible in my one hour window, the environment is saturated with the evidence of various timescales at work — cataloging this would be an infinite exercise. A few days later, after return to the cabin, mom identifies the geologic eras represented in the ore from the nearby mine, evidence of previous generations of Rocky Mountains. I love that dialog between ecology and geology.

But what the hell do mosquitoes eat when Im not around?