Corrigez les données GPS à l'aide de Map Matching API de Mapbox J'ai essayé de créer un outil.
――Pour les données d'utilisation, les données GPS acquises par la montre Garmin portée au poignet pendant le tournoi marathon sont utilisées.
--Entrez les données GPS (latitude, longitude) dans le fichier CSV d'entrée.
MapboxMapMatchingAPI.py
import os
import csv
import json
import datetime
import time
import configparser
import requests
#Spécification du fichier CSV d'entrée
input_csvfile = "Entrée Veuillez saisir le fichier CSV."
#Spécification du fichier CSV de sortie
output_csvfile = "Entrez le fichier CSV de sortie."
#URL de l'API de correspondance de la carte * Ne pas modifier.
api_url = "https://api.mapbox.com/matching/v5/mapbox/driving/"
# Mapbox Access token
api_token = "Veuillez saisir le jeton d'accès."
#Liste de travail
data = []
wklst = []
#Définissez le fichier CSV d'entrée sur la liste de travail
with open(input_csvfile) as f:
#Ignorer la ligne d'en-tête
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)
#Vérifiez l'existence du fichier CSV de sortie(Jugement de la présence ou de l'absence d'un en-tête)
if(os.path.exists(output_csvfile)):
header_flg = 0
else:
header_flg = 1
#Vérifiez l'existence du fichier CSV de sortie(Jugement de la présence ou de l'absence d'un en-tête)
if(os.path.exists(output_csvfile)):
header_flg = 0
else:
header_flg = 1
#Demander à mapper l'API de correspondance à partir de la liste de travail et écrire le résultat dans le fichier CSV de sortie
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')
#Sortie de l'en-tête de sortie lors de la création d'un nouveau fichier CSV
if header_flg == 1:
csvfile_writer.writeheader()
header_flg == 0
print(len(wklst))
for i in range(len(wklst)):
# print(wklst[i])
#Génération de paramètres d'API Map Matching
origins = wklst[i][1] + ','+ wklst[i][0]
destinations = wklst[i][3] + ','+ wklst[i][2]
params = {
'radiuses':'50;50',
'access_token': api_token
}
#Demande de mappage de l'API de correspondance
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
#Extraire des éléments de 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
#Écrire dans le fichier CSV de sortie
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'Sortie de traitement')
――Le résultat de l'exécution est visualisé par QGIS comme suit.
** * Veuillez noter que vous serez facturé si vous utilisez l'API au-delà du niveau gratuit (> _ <) **
Recommended Posts