Create a gist now

Instantly share code, notes, and snippets.

Embed
What would you like to do?
Two Python scripts that can be used to create animated route maps to multiple locations
import pandas as pd
import urllib.request
# path to your csv file with the endpoint coordinates
coordinates = pd.read_csv('swe_points.csv')
# graphhopper API call building blocks. Check Graphhopper documentation how to modify these.
urlStart = 'http://localhost:8989/route?'
point = 'point='
urlEnd = '&type=gpx&instructions=false&vehicle=car'
separator = '%2C'
# The starting point for each query (lat, lon). Use e.g. QGIS to change these.
startY = '59.3250'
startX = '18.0691'
# Make the API calls for each row in you CSV file and save the results to individual .gpx files.
for index, row in coordinates.iterrows():
req = urlStart + point + startY + separator + startX + '&' + point + str(row['Y']) + separator + str(row['X']) + urlEnd
try:
resp = urllib.request.urlopen(req)
gpxData = str(resp.read(),'utf-8')
fileName = 'sweden_' + str(index)
saveFile = open('gpx_files/{0}.gpx'.format(fileName), 'w')
print('processed index ' + str(index))
saveFile.write(gpxData)
saveFile.close()
except:
print('bad request on index ' + str(index))
pass
import gpxpy
import csv
import os
import re
#create csv file called merged.csv to working directory and give column names x, y & t
with open(r'sweden.csv', 'a') as f:
writer = csv.writer(f, quoting=csv.QUOTE_NONE, escapechar=' ', lineterminator='\n')
writer.writerow('yxt')
#create a folder for your files manually
for file in os.listdir('sweden'):
filePath = 'sweden/' + file
print(filePath)
gpx_file = open(filePath, 'r')
gpx = gpxpy.parse(gpx_file)
count = 0
#iterate through rows and append each gpx row to merged csv
for track in gpx.tracks:
for segment in track.segments:
for point in segment.points:
fields=['{0},{1},{2}'.format(point.latitude, point.longitude, point.time)]
#Here double whitespace is removed so QGIS accepts the time format
re.sub(' +',' ',fields[0])
#Graphhopper creates quite a lot of GPX points and for this purpose every second is enough.
count += 1
if count % 2 == 0:
with open(r'merged.csv', 'a') as f:
writer = csv.writer(f, quoting=csv.QUOTE_NONE, escapechar=' ', lineterminator='\n')
writer.writerow(fields)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment