Using the excellent Google Chart API, we can quickly build a nice elevation profile chart showing how the elevation changes across the route:
# Build the elevation chart using the Google Charts API log.info("Creating elevation profile chart") chart = SimpleLineChart(600, 300, y_range=[min(elvs), max(elvs)]) # API quirk - you need 3 lines of data to color # in the plot so we add a line at the minimum value # twice. chart.add_data([min(elvs)]*2) chart.add_data(elvs) chart.add_data([min(elvs)]*2) # Black lines chart.set_colours(['000000']) # fill in the elevation area with a hex color chart.add_fill_range('80C65A', 1, 2) # Set up labels for the minimum elevation, halfway value, and max value elv_labels = int(round(min(elvs))), int(min(elvs)+((max(elvs)-min(elvs))/2)), int(round(max(elvs))) # Assign the labels to an axis elv_label = chart.set_axis_labels(Axis.LEFT, elv_labels) # Label the axis elv_text = chart.set_axis_labels(Axis.LEFT, ["FEET"]) # Place the label at 30% the distance of the line chart.set_axis_positions(elv_text, [30]) # Calculate distances between track segments distances = [] measurements = [] coords = list(zip(lons, lats)) for i in range(len(coords)-1): x1, y1 = coords[i] x2, y2 = coords[i+1] d = haversine(x1, y1, x2, y2) distances.append(d) total = sum(distances) distances.append(0) j = -1