[PYTHON] Ich habe ein Tool zum Korrigieren von GPS-Daten mit der Map Matching API von Mapbox (Mapbox Map Matching API) erstellt.

Zweck

Korrigieren Sie GPS-Daten mithilfe der Map Matching API von Mapbox. Ich habe versucht, ein Werkzeug zu erstellen.

Map Matching API

Ausführungsumgebung

--Dieser Artikel verwendet Python3, die Map Matching API von Mapbox.

Voraussetzungen

Nutzungsdaten

――Für die Nutzungsdaten werden GPS-Daten verwendet, die von der Garmin-Uhr erfasst wurden, die während des Marathonturniers am Handgelenk getragen wurde.

Ausführungsmethode

Eingabeeinstellungen

image.png

Lauf

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')

Ausführungsergebnis

image.png

――Das Ausführungsergebnis wird von QGIS wie folgt visualisiert.

image.png

Zu beachtende Punkte

** * Bitte beachten Sie, dass Ihnen eine Gebühr berechnet wird, wenn Sie die API über die kostenlose Stufe (> _ <) hinaus verwenden **

Recommended Posts

Ich habe ein Tool zum Korrigieren von GPS-Daten mit der Map Matching API von Mapbox (Mapbox Map Matching API) erstellt.
Ich habe eine Python-Bibliothek erstellt, um die API von LINE WORKS aufzurufen
[3.] Ich habe versucht, mit Python ein bestimmtes Authenticator-ähnliches Tool zu erstellen
[4.] Ich habe versucht, mit Python ein bestimmtes Authenticator-ähnliches Tool zu erstellen
[1.] Ich habe versucht, mit Python ein bestimmtes Authenticator-ähnliches Tool zu erstellen
Ich habe ein Tool zum automatischen Durchsuchen mehrerer Websites mit Selenium (Python) erstellt.
Ich habe versucht, "Sakurai-san" LINE BOT mit API Gateway + Lambda zu erstellen
Senden Sie Daten mit Vue.js an die DRF-API
Ich habe mit Python eine Hex-Map erstellt
Ich habe eine Web-API erstellt
Ich habe ein Tool erstellt, um Jupyter py mit VS Code in ipynb zu konvertieren
Ich habe ein Passwort-Tool in Python erstellt.
[Patentanalyse] Ich habe versucht, mit Python eine Patentkarte zu erstellen, ohne Geld auszugeben
Ich habe gerade ein Tool erstellt, mit dem Daten mithilfe der GUI-Operation einfach als Diagramm angezeigt werden können
Ich habe eine Burgsuch-API mit Elasticsearch + Sudachi + Go + Echo erstellt
Ich habe versucht, eine verdächtige Person mithilfe von Geolonia-Adressdaten schnell zu einem MAP zu machen
Ich habe versucht, eine einfache Bilderkennungs-API mit Fast API und Tensorflow zu erstellen
Ich habe versucht, die Daten mit Zwietracht zu speichern
Ich möchte 100 Datenwissenschaften mit Colaboratory schlagen
Ich möchte ein Spiel mit Python machen
Ich habe versucht, CloudWatch-Daten mit Python abzurufen
Folium: Visualisieren Sie Daten auf einer Karte mit Python
Ich habe ein Tool erstellt, um Hy nativ zu kompilieren
Ich habe mit Diamond gespielt, einem Tool zum Sammeln von Metriken
Ich habe ein Tool erstellt, um neue Artikel zu erhalten
Ich möchte mit Python in eine Datei schreiben
Ich habe ein gestapeltes Balkendiagramm mit matplotlib von Python erstellt und eine Datenbeschriftung hinzugefügt
Hier ist ein Mechanismus, um betrügerische Papiere zu reduzieren. Mit iPython Notebook erstelltes Datenmaterial.
Ich habe ein CLI-Tool in der Sprache Go geschrieben, um Qiitas Tag-Feed in CLI anzuzeigen
Ich habe versucht, einen Pandas-Datenrahmen zu erstellen, indem ich mit Python Informationen zum Lebensmittelrückruf abgekratzt habe
Ich möchte einem Pandas-Datenrahmen eine group_id geben
Ich möchte mit einem Knopf am Kolben übergehen
Lassen Sie uns ein Befehls-Standby-Tool mit Python erstellen
Ich möchte mit verstärkendem Lernen einen Berg besteigen
Ich möchte mit einem Roboter in Python arbeiten.
Ich möchte eine Zeichenkette mit Hiragana teilen
Ich habe versucht, unsere Dunkelheit mit der Chatwork-API aufzudecken
Ich möchte manuell eine Legende mit matplotlib erstellen
Ich habe versucht, mit Scrapy Daten von einer Website zu sammeln
Ich habe ein Tool zur Erzeugung sich wiederholender Textdaten "rpttxt" erstellt.
Hochladen auf ein freigegebenes Laufwerk mit Google Drive API V3
Ich möchte einen Quantencomputer mit Python betreiben
Stellen Sie eine mit Streamlit erstellte Web-App für Heroku bereit
Ich möchte eine lokale Variable mit Lambda binden
Ich habe versucht, mit Docker einen Dienst aufzubauen, der maschinell erlernte Daten mit explosiver Geschwindigkeit verkauft
Ich habe versucht, mit Quantx eine Linie mit gleitendem Durchschnitt des Volumens zu implementieren
Ich möchte Daten mit Python analysieren können (Teil 3)
Ich habe versucht, Videos mit der Youtube Data API (Anfänger) zu suchen.
Mit den Daten von COVID-19 wurde ein Netzwerkdiagramm erstellt.
Ich habe versucht, mit Python faker verschiedene "Dummy-Daten" zu erstellen
Ich habe versucht, automatisch einen Bericht mit der Markov-Kette zu erstellen
[Linux] Kopieren Sie Daten mit einem Shell-Skript von Linux nach Windows
Ich möchte Daten mit Python analysieren können (Teil 1)