Korrigieren Sie GPS-Daten mithilfe der Map Matching API von Mapbox. Ich habe versucht, ein Werkzeug zu erstellen.
--Dieser Artikel verwendet Python3, die Map Matching API von Mapbox.
――Für die Nutzungsdaten werden GPS-Daten verwendet, die von der Garmin-Uhr erfasst wurden, die während des Marathonturniers am Handgelenk getragen wurde.
MapboxMapMatchingAPI.py
import os
import csv
import json
import datetime
import time
import configparser
import requests
#Geben Sie die CSV-Dateispezifikation ein
input_csvfile = "Eingabe Bitte geben Sie die CSV-Datei ein."
#CSV-Dateispezifikation ausgeben
output_csvfile = "Geben Sie die Ausgabe-CSV-Datei ein."
#Map Matching API URL * Nicht ändern.
api_url = "https://api.mapbox.com/matching/v5/mapbox/driving/"
# Mapbox Access token
api_token = "Bitte geben Sie das Zugriffstoken ein."
#Arbeitsliste
data = []
wklst = []
#Stellen Sie die CSV-Eingabedatei auf die Arbeitsliste ein
with open(input_csvfile) as f:
#Kopfzeile überspringen
h = next(csv.reader(f))
for v in csv.reader(f):
data.append(v)
for i in range(len(data) -1):
wklst.append([data[i][0],data[i][1],data[i+1][0],data[i+1][1]])
# print(wklst)
#Überprüfen Sie, ob die CSV-Ausgabedatei vorhanden ist(Beurteilung des Vorhandenseins oder Nichtvorhandenseins eines Headers)
if(os.path.exists(output_csvfile)):
header_flg = 0
else:
header_flg = 1
#Überprüfen Sie, ob die CSV-Ausgabedatei vorhanden ist(Beurteilung des Vorhandenseins oder Nichtvorhandenseins eines Headers)
if(os.path.exists(output_csvfile)):
header_flg = 0
else:
header_flg = 1
#Fordern Sie die Map Matching API aus der Arbeitsliste an und schreiben Sie das Ergebnis in die Ausgabe-CSV-Datei
with open(output_csvfile, 'a', encoding='shift_jis') as output_csvfile_fp:
fieldnames = ['bef_lat','bef_lng','aft_lat','aft_lng']
csvfile_writer = csv.DictWriter(output_csvfile_fp, fieldnames=fieldnames,lineterminator='\n')
#Ausgabe Header-Ausgabe beim Erstellen einer neuen CSV-Datei
if header_flg == 1:
csvfile_writer.writeheader()
header_flg == 0
print(len(wklst))
for i in range(len(wklst)):
# print(wklst[i])
#Generierung von Map Matching API-Parametern
origins = wklst[i][1] + ','+ wklst[i][0]
destinations = wklst[i][3] + ','+ wklst[i][2]
params = {
'radiuses':'50;50',
'access_token': api_token
}
#Anforderung der Map Matching API
raw_response = requests.get(api_url + origins + ';' + destinations, params)
parsed_response = json.loads(raw_response.text)
parsed_response_json = json.dumps(parsed_response, indent=4)
# print(parsed_response_json)
breakpoint
#Extrahieren Sie Elemente aus JSON
if parsed_response['code'] == 'Ok':
lng1 = parsed_response['tracepoints'][0]['location'][0]
lat1 = parsed_response['tracepoints'][0]['location'][1]
lng2 = parsed_response['tracepoints'][1]['location'][0]
lat2 = parsed_response['tracepoints'][1]['location'][1]
else:
lng1 = None
lat1 = None
lng2 = None
lat2 = None
#Schreiben, um eine CSV-Datei auszugeben
csvfile_writer.writerow({
'bef_lat': wklst[i][0],
'bef_lng': wklst[i][1],
'aft_lat': lat1,
'aft_lng': lng1
})
print(wklst[i][0],wklst[i][1],lat1,lng1)
print(u'Verarbeitung beenden')
――Das Ausführungsergebnis wird von QGIS wie folgt visualisiert.
** * Bitte beachten Sie, dass Ihnen eine Gebühr berechnet wird, wenn Sie die API über die kostenlose Stufe (> _ <) hinaus verwenden **
Recommended Posts