Least caloric paths using google maps

Jeffrey Holden
CSC 572 - Spring 2010


This project emphasizes visualizing paths of least caloric cost. This utilizes the framework established by Google Maps to visualize the terrain of an area. This also allows user interaction, to allow a user to select a "search space" and points to which the path should travel. The path is displayed both as least distance and is contrasted with the path which requires the least amount of calories required by a human walking this path.

Past Works

Similar work has been done multiple times, including past projects. While this is not a new concept to visualize these paths what I attempted to build upon is utilizing the existing Google framework to do these visualizations. Google has been attempted to be used previously, however this was using Google Earth and single point elevation query. I was able to do multiple data point query's to get the elevations and load into the internal data structure.

Complications with Google

While the Google framework assisted in the generation of terrain, it did not come with out issues. The following is a few problems encountered during this project:

These limit issues where resolved by running multiple smaller data point queries with a delay between them. In addition I had the application attempt to re-submit the data point query if it was rejected. By implementing these modification I was able to get approximately 3000 data points. Unfortunately it seems Google has a system built in to prevent higher amounts of queries, as I attempted to get above this amount and requested where continually denied.

Generating paths

To generate a path with the least caloric cost, the following equations were used:

MR is metabolic rate in watts;
w is subject weight in kilograms;
l is load carried in kilograms;
v is walking speed in meters per second;
g is grade in percentage,
t is terrain factor (e.g., 1 for treadmill walking).

In addition on down hills, as this can under predict the caloric cost, it is compared with standing metabolic rate and the maximum is used as:
MR(downhill) = MAX{MR(downhill), SMR}
SMR is calculated as:
SMR = 1.2 * BMR
BMRmale = 66 + (13.7 * w) + (5 * h) - (6.8 * a)
BMRfemale = 655 + (9.6 * w) + (1.7 * h) - (4.7 * a)

SMR is standing metabolic rate in Watts
BMR is the basal metabolic rate in watts
h is the person's height in centimeters
a is the person's age in years

I was not able to come up with a method to determine what type of terrain a particular area was for t, as such this simulation assumes that everything is t=1.2, which is light brush. While this does impact the simulations, I felt is was a decent approximation as prior to more roads, the majority of the area was indeed grass/light brush.
All simulations shown are for a 210 lb man carrying no load who is 6' tall walking at a constant 3 miles per hour (1.34 m/s).

Implementation Details

Once selecting the points for the path, the least caloric path is computed between the locations. In addition the shortest distance path is computed for comparison. The shortest path is displayed as red, the last caloric path is displayed as blue. In addition to the path being displayed, a graph of the change in elevations is displayed to contrast the two paths. As it can be noticed the least caloric path will attempt to keep approximately the same elevation where possible.


Below are three paths that were visualized using this project. From top to bottom they are:

Another example of this shows how the path does indeed represent real life paths fairly well. Visualized is a path from Cal Poly up Bishops Peak. As can be seen, it is a fairly good aproxemation of the real trail as seen by this satellite imagery.

The user is able to click multiple locations inside the search region and the program will draw a path between the points in order as displayed below:

Future expansion possibilities

While I believe I accomplished what I set out to do, there are areas that could be improved upon. A few of the areas that I see as clear expansion areas would be as follows:

Devise a way to get a higher number of data samples. While Google limits what can be done I believe that there could be a creative way around these limitations. Potentially setting up a proxy that queries the data for you to use. Alternatively it may be possible to utilize the Google maps to display the maps but get the elevation data from another online source which allows more frequent/more fine detail access.

Another possibility for future work would be to add in feature recognition (lakes, rivers, ect.) and have the paths respect these or at minimum penalize the path for crossing them. While this was a feature I was considering adding, I did not have enough time to accomplish this. One way would be to look for large areas where the elevation does not change (Google elevation service returns the same elevation of the shore for lakes/rivers but not oceans) and factor those as lakes/rivers. The down side is getting false positives especially with how "sparse" the data can be.


Andrew Tsui graphics project on caloric path
Brian Wood's Thesis: Energetically Optimal Travel across Terrain
Jason Rickwald's Thesis: Continuous Energetically Optimal Paths Across Large Digital Elevation Data Sets
Google maps elevation service API