How Far North?

Upon landing at the first leg of a multi-country tour of Asia, a friend boasted:

I’ll send you something better later, but: we got up to 84.5 degrees N today 🙂 By my jetlagged head math, that’s only about 333 miles from Santa Claus.

I would have liked to have been able to respond with the farthest north I’ve been, but I didn’t know. My wife and I flew to Italy several years ago, and somewhere along that flight path contains the farthest north I’ve been. I didn’t have a GPS with me like my friend on his Asia trip, so I’ll have to make a reasonable approximation.

The flight segment that holds my northernmost point would have been along our return route, from Amsterdam to Detroit. Why the return route in particular? Eastbound flights tend to follow the jet stream to take advantage of tailwinds, provided they’re at appropriate latitudes. Westbound flights follow great circle paths, and in the northern hemisphere, that  means they will go farther north on a westbound route.

Armed with the knowledge that straight lines on a polar map are great circles, I made an attempt to dust off my trigonometry. I came up with an answer of xxx degrees north. That equates to xxx miles from the North Pole.

Later in the day I remembered that the rule about polar maps is that the route must cross the center of the map in order to be a great circle. So my answer derived from longhand trig was invalid. I searched around the internet for a way to find the northernmost point on a great circle arc, and did not come up with a method that I could comprehend in a reasonable amount of time. R has a package (geosphere) available, however, that can easily give me exactly the answer I was looking for.

> library(geosphere)
>
> # World map data
> data(wrld)
>
> # Detroit
> dtw <- c(-83.353388, 42.212444)
>
> # Amsterdam
> ams <- c(4.763889, 52.308613)
>
> # Compute great circle
> gci <- gcIntermediate(dtw, ams)
>
> # More accurate method for determining point of maximum latitude
> f <- function(lon){gcLat(dtw, ams, lon)}
> opt <- optimize(f, interval=c(-180, 180), maximum=TRUE)
> maxLat <- c(opt$maximum, opt$objective)
> print(maxLat)
[1] -28.99516 57.28472

So, I have been as far north as 57.28 degrees. What does that look like on a map, and how far from the North Pole is that in miles?

> # North Pole. Keep the longitude from the point of maximum latitude
> np <- c(maxLat[1], 90)
> print(np)
[1] -28.99516 90.00000
>
> npdist <- gcIntermediate(maxLat, np)
>
> png('gc.png')

>
> plot(wrld, type = 'l', xlim = c(-150, 50), ylim = c(30, 90))
> grid()
> lines(gci, lwd = 2, col = 'blue')
> points(rbind(dtw, ams), col = 'red', pch = 20, cex = 2)
> points(rbind(np), pch=20, cex=2, col='dark blue')
> lines(npdist, lty=2)
> dev.off()

> # distance in meters
> dist <- dist2gc(dtw, ams, np)
>
> # distance in miles
> print(dist / 1609.344)
 r
-2262.94

So, there we have it. I’ve been to within 2263 miles or so of Santa Claus.

 

Wind Rose

I wanted to find a way to show which direction the wind normally comes from, but wasn’t sure of the best way to show that information. A histogram is close, but it would be nice it could be shown in a circular representation. I stumbled on exactly the type of plot I was looking for. Turns out that R has a nice package called “climatol” that has a function to show this perfectly.

GPS and altitude readings

Runners and cyclists can take advantage of some neat GPS technology. It is now possible to create routes, replay training runs, make maps, and compare workouts. Software tools for activity tracking are getting better, and costs are coming down to the point where some good options are even free.

While GPS enables accurate position and speed measurements, elevation measurements are on the weak side because there is a relatively large amount of “noise” in the readings. Even small changes in elevation can be significant to runners and cyclists, especially if running over rolling hills. These smaller fluctuations can be at the limit of the GPS’s ability to accurately measure, and sometimes the smoothing algorithms obliterate all that extra work you did running up and down all those hills. So, more accurate elevation information could give a clearer picture about the effort required.

Some of the tools for working with GPS data from outdoor activities can apply corrections to altitude data. The corrected data usually comes from the National Elevation Dataset, much of which came from the Shuttle Radar Topology Mission.

Out of curiosity, I compared elevation data from my GPS with elevation data from NED on three recent runs in different areas: a 6 mile run in Fishers, the USAF Marathon in Dayton, and the IU Mini in Bloomington. For the most part, they agreed to within a few feet, and the differences fit tidily into a normal distribution.

Fishers morning run mean difference: +1′ between GPS and corrected elevations; standard deviation: 12′

USAF Marathon mean difference: +18′; standard deviation: 14′

IU Mini mean difference: +2′; standard deviation: 19′

To loosely summarize those graphs, my GPS tends to read around 7′ higher than the USGS altitude data. 95% of the time, they agree to within ±15′.

The US Geological Survey claims that the NED data is accurate to within ±7–15 meters (23–49′). That’s about the same accuracy claimed by the GPS, so this is all probably a wash. It looks like it is not practical to get any better data for small elevation changes without adding a barometric pressure sensor to the GPS. Higher-end cycling GPS units have these, but I am not aware of any running GPS units with barometric altitude sensors.