Animerade akvarell karta för Cycle Tour/tävlingen videor (1 / 9 steg)
Steg 1: Starta med Python, läsa i Data
Skapa skriptetFörst och främst se till att du har python installerade genom att skriva "python" i ett kommandoradsfönster. Om du inte huvudet här. Jag har testat skriptet med version 2.7.1
Skapa en projektmapp en göra en ny textfil i det som kommer att vara ditt manus, jag ringde min "overlay.py". Öppna filen med en textredigerare som gedit (Ubuntu) eller Notepad ++ (Windows). Regelbundna anteckningar fungerar också, men du kommer inte ha någon syntaxmarkering.
Importera Data
Vårt första mål är att importera GPS spår som en enkel lista över lat, lon par. Det finns antal format för lagring av GPS spår, men jag kommer bara ta itu med kommaavgränsade värden (CSV) och GPS eXchange Format (GPX) eftersom det finns gott om verktyg för att konvertera nästan alla format till någon annan en (GPSVisualiser, är min favorit online converter).
En CSV-fil kan sedan enkelt läsas till en python lista med följande enkla funktion vilket gör användningen av Pythons byggdes "csv" modul.
def traceImportCSV(fname):
importera csv
Trace =]
för lat, lon i csv.reader(open(fname,'r')):
trace.append([float(lat),Float(Lon)])
returnera spår
De flesta platser/enheter har möjlighet att spara rutter som GPX (till exempel Endomondo's export-funktion), så om vi kan läsa i en GPX-fil direkt som skulle vara praktiskt. Följande bit kod läser filen rad för rad och använder reguljära uttryck för att söka efter text som säger "lat =" eller "lon =" och hämtar oavsett icke-blankstegstecken faller inom följande citattecknen.
Om båda finns på en rad, sedan det lat, läggs lon par till i listan. För enkelhet bara ovanliga tillstånd som jag har hanterats har lat, lon visas som lon, lat istället. Om flaggorna på olika linjer, eller filen innehåller artiklar som inte spårpunkter, uppstå konstiga resultat.
def traceImportGPX(fname):
importera re
Trace =]
för linje i open(fname,'r'):
matchLat = re.search (r'. * lat=\"(\S*)\".*',line)
matchLon = re.search (r'. * lon=\"(\S*)\".*',line)
om matchLat! = ingen och matchLon! = ingen:
lat = matchLat.group(1)
Lon = matchLon.group(1)
trace.append([float(lat),Float(Lon)])
returnera spår