Freigeben über


Tutorial: Analysieren von Reisedaten mithilfe der Ausrichtung an Straßen im Microsoft Fabric-Notebook

Snap-to-Roads ist ein Azure Maps-Dienst, der eine Reihe von GPS-Punkten verarbeitet, die entlang einer Route gesammelt werden und sie an den wahrscheinlichsten Straßen andockt, die das Fahrzeug befahren hat. Diese Funktion ist hilfreich bei der Bestimmung des genauen Pfads, dem ein Fahrzeug gefolgt ist, auch wenn die gesammelten GPS-Daten leicht abweichend sind.

In diesem Tutorial wird erläutert, wie Sie die Azure Maps Snap-to-Roads-API mit Microsoft Fabric verwenden, um GPS-Daten aus dem Verschieben von Ressourcen zu analysieren, auch wenn die Daten aufgrund von Signalverlusten ungenau oder unvollständig sind. Es führt Sie durch Aufrufe der Snap-to-Roads-API von Azure Maps aus einem Microsoft Fabric-Notebook, um die GPS-Punkte an die nächste Straße anzudocken, fehlende Punkte mit interpolierten Datenpunkten zu füllen und sie mit zusätzlichen Attributen wie Straßennamen und Geschwindigkeitsbegrenzungen zu verbessern.

In diesem Lernprogramm lernen Sie Folgendes:

  • Erstellen Sie ein Microsoft Fabric Lakehouse und importieren Sie die rohen GPS-Daten eines Fahrzeugs hinein.
  • Erstellen Sie ein Microsoft Fabric-Notebook, das unformatierte GPS-Daten verwendet, und die angeforderten angedockten Koordinateninformationen mithilfe der Azure Maps Snap-to-Roads-API zurückgibt.
  • Erstellen Sie ein Eventhouse und eine KQL-Datenbank und importieren Sie die angedockten GPS-Daten darin.
  • Erstellen Sie ein Echtzeitdashboard mithilfe der angedockten GPS-Daten in der Kusto-Datenbank.
  • Abfragen von KQL-Daten und Anzeigen der angedockten GPS-Daten in einer Kartenvisualisierung.

Voraussetzungen

Hinweis

Weitere Informationen zur Authentifizierung in Azure Maps finden Sie unter Verwalten der Authentifizierung in Azure Maps.

Erstellen eines Microsoft Fabric-Notebooks und eines Lakehouse

Führen Sie die folgenden Schritte aus, um ein Microsoft Fabric-Notebook zu erstellen:

  1. Wechseln Sie zu Ihrem My Workspace und wählen Sie Neues Element aus.

    Screenshot der Seite „My Workspace“ in Microsoft Fabric mit hervorgehobener Schaltfläche „Neues Element“.

  2. Wenn die Anzeige Neues Element erscheint, scrollen Sie nach unten und wählen Sie Notebook aus.

    Screenshot der Option „Notebook“ in der Anzeige „Neues Element“ in Microsoft Fabric.

  3. Wählen Sie in der Notebook-Anzeige Explorer den Lakehouses-Pfeil > aus.

    Ein Screenshot mit dem Pfeil „Lakehouse auswählen“.

  4. Wählen Sie die Schaltfläche Hinzufügen aus.

    Ein Screenshot der Schaltfläche „Lakehouse hinzufügen“.

  5. Wählen Sie im Dialogfeld Lakehouse hinzufügenNeues Lakehouse und dann die Schaltfläche Hinzufügen aus.

  6. Geben Sie im Dialogfeld Neues Lakehouse den Namen „Azure_Maps_Data“ ein, und wählen Sie dann die Schaltfläche Erstellen aus.

Hinzufügen einer Datendatei zum Lakehouse

Snap-to-Roads akzeptiert GPS-Punktdaten (lat, lon) und gibt eine Liste von Objekten zurück, die eine Route bilden, die an den Straßen auf einer Karte angedockt ist. Eine Datendatei mit den erforderlichen GPS-Daten kann dem Lakehouse als Datei hinzugefügt und vom Python-Code in Ihrem Notebook referenziert werden.

Datendatei herunterladen

Laden Sie die Beispieldaten (mockData_20240919.csv) von GitHub auf Ihr lokales Speichergerät herunter, um sie im nächsten Abschnitt in Lakehouse hochzuladen. Diese Datei enthält ein Array von GPS-Koordinaten, die der Dienst „Snap-to-Roads“ nach Bedarf ändert, um sicherzustellen, dass jede Koordinate auf eine gültige Straße verweist.

  1. Öffnen Sie die Datei mockData_20240919.csv in GitHub.

  2. Wählen Sie auf dem Bildschirm oben rechts die Schaltfläche Rohdatei herunterladen aus und speichern Sie die Datei lokal.

    Screenshot, der zeigt, wie Sie die Datendatei namens mockData_20240919.csv aus dem GitHub-Repository herunterladen.

Hochladen der Datendatei in Lakehouse

In den folgenden Schritten wird erläutert, wie Sie eine Datenquelle in Lakehouse hinzufügen.

  1. Wählen Sie im Ordner Dateien in Lakehouse Hochladen > Dateien hochladen aus.

    Screenshot der Menüoption „Dateien hochladen“.

  2. Öffnen Sie das Dialogfeld „Datei öffnen“, indem Sie das Symbol Ordner auswählen. Wählen Sie die Datei mockData_20240919.csv aus, die Sie im vorherigen Abschnitt heruntergeladen haben, und klicken Sie dann auf die Schaltfläche Öffnen. Sobald das Dialogfeld „Datei öffnen“ geschlossen wird und der richtige Dateiname im Steuerelement Datei hochladen angezeigt wird, wählen Sie die Schaltfläche Hochladen, um die Datei in Lakehouse hochzuladen.

    Screenshot des Bereichs „Dateien hochladen“.

Hinzufügen von Code zum Notebook

Sie müssen ihrem Notebook vier Codezellen hinzufügen und sie ausführen, um das Szenario Snap-to-Roads auszuführen. In den folgenden Abschnitten wird dieser Prozess Schritt für Schritt beschrieben.

Installieren von Paketen

Sie müssen zuerst die erforderlichen Pakete laden:

!pip install geopandas
!pip install geojson

Geben Sie die Pip-Installationsanweisungen in die erste Zelle Ihres Notebooks ein und führen Sie dann die Anweisungen aus, indem Sie den Ausführungspfeil auswählen.

Screenshot des Installationspaketcodes in einer Zelle des Notebooks.

Laden der Daten

Laden Sie als Nächstes die Beispieldaten, die Sie zuvor in Ihr Lakehouse hochgeladen haben.

  1. Zeigen Sie mit dem Mauszeiger direkt unterhalb der Zelle, die zum Installieren der Pakete verwendet wird. Es erscheinen Optionen, um Code oder Markdown hinzuzufügen. Wählen Sie Code aus, um Ihrem Notebook eine weitere Codezelle hinzuzufügen.

    Screenshot mit dem Link „Code hinzufügen“ im Notebook.

  2. Nachdem die neue Zelle erstellt wurde, fügen Sie den folgenden Code hinzu.

    import geopandas as gpd
    import pandas as pd
    
    lakehouseFilePath = "/lakehouse/default/Files/"
    
    mockdata_df = gpd.read_file(lakehouseFilePath + "mockData_20240919.csv")
    mockdata_df = gpd.GeoDataFrame(
        mockdata_df, geometry=gpd.points_from_xy(mockdata_df.longitude, mockdata_df.latitude), crs="EPSG:4326"
    )
    
    mockdata_df.head()
    
    mockdata_df.tripID.unique()
    
  3. Führen Sie den Code aus, indem Sie den Ausführungspfeil auswählen. Dadurch werden die Beispieldaten geladen.

Verbessern mit Snap-to-Roads

Der Code in dieser Notebookzelle liest unformatierte GPS-Daten aus der Datendatei in Lakehouse und übergibt sie an die Snap-to-Roads-API von Azure Maps. Mit aktivierter Interpolation fügt die API Punkte zwischen GPS-Standorten hinzu, um den Routenpfad entlang der Straße zu vervollständigen. Es stellt auch, wenn verfügbar, Attribute wie Straßennamen und Geschwindigkeitsbeschränkungen bereit.

  1. Zeigen Sie mit dem Mauszeiger direkt unterhalb der Zelle, die zum Installieren der Pakete im vorherigen Schritt verwendet wird. Es erscheinen Optionen, um Code oder Markdown hinzuzufügen. Wählen Sie Code aus, um Ihrem Notebook eine weitere Codezelle hinzuzufügen.

  2. Nachdem die neue Zelle erstellt wurde, fügen Sie den folgenden Code hinzu. Stellen Sie sicher, dass Sie Ihren Abonnementschlüssel hinzufügen.

    import requests
    import json
    
    az_maps_subkey = ""
    az_maps_snaproads_url = "https://atlas.microsoft.com/route/snapToRoads?api-version=2025-01-01&subscription-key=" + az_maps_subkey
    
    # Function to process snap to road for each given trip
    def process_route(df, outputFilePath):
        # List to store successful responses
        successful_responses = []
    
        # Function to send a chunk of features
        def send_chunk_snaproads(chunk):
            geojson_data = chunk.to_json()
            # Convert the JSON string to a Python dictionary
            geojson_dict = json.loads(geojson_data)
    
            # Add the new fields at the end of the dictionary
            geojson_dict['includeSpeedLimit'] = True
            geojson_dict['interpolate'] = True
            geojson_dict['travelMode'] = "driving"
    
            # Convert the dictionary back to a JSON string
            updated_geojson_data = json.dumps(geojson_dict)
    
            response = requests.post(
            az_maps_snaproads_url, 
            headers={'Content-Type': 'application/json'}, 
            data=updated_geojson_data
            )
    
            if response.status_code == 200:
                print('Chunk request was successful...')
                successful_responses.append(response.json())
            else:
                print(f'Failed to send request. Status code: {response.status_code}')
                print('Response body:', response.text)
    
        # Loop over the GeoDataFrame in chunks of 100
        chunk_size = 100
        for start in range(0, len(df), chunk_size):
            end = start + chunk_size
            chunk = df.iloc[start:end]
            send_chunk_snaproads(chunk)
    
        # Extract features with geometry from successful responses
        features_with_geometry = []
        for response in successful_responses:
            if 'features' in response:
                for feature in response['features']:
                    if 'geometry' in feature:
                        longitude = feature['geometry']['coordinates'][0]
                        latitude = feature['geometry']['coordinates'][1]
                        feature['properties']['latitude'] = latitude
                        feature['properties']['longitude'] = longitude
                        features_with_geometry.append(feature)
    
        # Convert the list of features with geometry to a GeoDataFrame
        if features_with_geometry:
            responses_gdf = gpd.GeoDataFrame.from_features(features_with_geometry)
    
            # Write successful responses to a cvs file
            #responses_gdf.to_file(outputFilePath, driver='GeoJSON')
            responses_gdf.to_csv(outputFilePath, encoding='utf-8', index=False)
    
            print(f'Successful responses written to {outputFilePath}')
        else:
            print('No valid features with geometry found in the responses.')
    
  3. Führen Sie den Code aus, indem Sie den Ausführungspfeil auswählen.

Erstellen einer Datei mit erweiterten Daten

Der folgende Code verwendet die in der vorherigen Codezelle erstellte Ausgabe und erstellt eine neue CSV-Datei im Lakehouse namens SnapRoadResponses.csv. Diese neue Datendatei enthält aktualisierte GPS-Koordinaten, die an der entsprechenden Straße ausgerichtet sind. Sie enthält auch Straßennamen und Geschwindigkeitslimits, wenn verfügbar. SnapRoadResponses.csv werden in ein Eventhouse importiert und verwendet, um später in diesem Tutorial eine Kartenvisualisierung zu erstellen.

  1. Zeigen Sie mit dem Mauszeiger direkt unterhalb der Zelle, die zum Verbessern mit „Snap-to-Roads“ im vorherigen Schritt verwendet wird. Es erscheinen Optionen, um Code oder Markdown hinzuzufügen. Wählen Sie Code aus, um Ihrem Notebook eine weitere Codezelle hinzuzufügen.

  2. Nachdem die neue Zelle erstellt wurde, fügen Sie den folgenden Code hinzu.

    lakehouseFilePath = "/lakehouse/default/Files/"
    #execute snap to road
    outputFilePath = lakehouseFilePath + "SnapRoadResponses" + ".csv"
    df = mockdata_df.sort_values(by='timeStamp').reset_index(drop=True)
    process_route(df, outputFilePath)
    
  3. Führen Sie den Code aus, indem Sie den Ausführungspfeil auswählen. Dies speichert SnapRoadResponses.csv mit aktualisierten GPS-Koordinaten im Lakehouse.

Tipp

Wenn die neue Datei nach dem Ausführen des Notebook-Codes nicht angezeigt wird, müssen Sie ihren Browser möglicherweise aktualisieren.

Dateipfad kopieren

Der ABFS-Pfad zu SnapRoadResponses.csv ist später in diesem Tutorial erforderlich, wenn Sie das Eventhouse erstellen. Um den ABFS-Pfad zu dieser Datei abzurufen, wählen Sie die Auslassungspunkte (...) neben der Datei aus, und wählen Sie dann im Popupmenü ABFS-Pfad kopieren aus. Nachdem sie kopiert wurde, speichern Sie sie für später.

Screenshot, der zeigt, wie ein ABFS-Pfad in die in Lakehouse gespeicherte Datendatei kopiert wird.

Erstellen Sie ein Eventhouse, um die Telemetriedaten für Ihre Flotte oder das Verschieben von Ressourcen zu verwalten. Standardmäßig wird automatisch eine KQL-Datenbank erstellt. In diesem Tutorial importieren Sie die angedockten Daten aus dem Lakehouse in die KQL-Datenbank. Fügen Sie für Echtzeitanalysen Streamingdaten hinzu. Nachdem die Daten hochgeladen wurden, können Sie Ihre Daten mithilfe der Kusto-Abfragesprache in einem KQL-Abfrageset abfragen.

  1. Wechseln Sie zu Ihrem My Workspace und wählen Sie Neues Element aus.

  2. Wenn die Anzeige Neues Element angezeigt wird, scrollen Sie nach unten und wählen Sie Eventhouse aus.

  3. Geben Sie im Bildschirm Neues Eventhouse einen Namen für Ihr neues Eventhouse ein, z. B. SnapToRoadDemo.

    Verknüpfen Sie als Nächstes das Lakehouse, das Sie zuvor erstellt haben, mit Ihrem neuen Eventhouse.

  4. Wählen Sie die Auslassungspunkte neben Ihrem neuen Eventhouse aus, und dann Daten abrufen > OneLake im Popupmenü.

    Screenshot von OneLake im Popupmenü.

  5. Wählen Sie Neue Tabelle aus, nennen Sie sie GPSData und wählen Sie dann Next aus.

    Screenshot der Option „Neue Tabelle“.

  6. Geben Sie den ABFS-Pfad zur Lakehouse-Datendatei (SnapRoadResponses.csv) in dem Steuerelement OneLake-Datei ein, das Sie zuvor gespeichert haben, und wählen Sie dann das Pluszeichen (+) aus, um es der Liste hinzuzufügen.

    Screenshot der Eingabe eines OneLake-Dateinamens mit hervorgehobener Schaltfläche.

  7. Wählen Sie Weiter aus.

  8. Nachdem Sie die Daten in der Anzeige Überprüfen der Daten überprüft haben, wählen Sie Fertigstellen aus.

    Screenshot des Bildschirms „Daten prüfen“.

  9. Wählen Sie Schließen aus, um die Zusammenfassungsseite zu schließen.

    Screenshot der Anzeige „Datenzusammenfassung abrufen“.

Das Eventhouse sollte nun erstellt und die GPS-Daten enthalten sein.

Screenshot des Eventhouses mit den GPS-Daten.

Erstellen Sie Echtzeitdashboards

Ein Echtzeitdashboard kann erstellt werden, um eine Verbindung mit Ihrem Dataset im Eventhouse herzustellen. Die Eingabe in diesem Tutorial sind statische Daten, kein Echtzeitdatenstrom, aber die Kacheln im Dashboard, z. B. Azure Maps Visual, können für visuelle Darstellung und Analyse verwendet werden.

Datenquelle hinzufügen

  1. Wechseln Sie zu Ihrem My Workspace und wählen Sie Neues Element aus.

  2. Wenn die Anzeige Neues Element angezeigt wird, suchen oder scrollen Sie nach unten, und wählen Sie Echtzeitdashboard aus.

  3. Geben Sie im Bildschirm Neues Echtzeitdashboard den Namen SnapToRoadDashboard ein und wählen Sie dann Erstellen aus.

  4. Wählen Sie in der neuen Anzeige EchtzeitdashboardNeue Datenquelle aus.

  5. Wählen Sie die Schaltfläche Hinzufügen und dann OneLake-Datenhub aus.

    Screenshot des Bildschirms „Datenquellen hinzufügen“ im Echtzeitdashboard.

  6. Wählen Sie Ihre Datenquelle aus, und stellen Sie dann eine Verbindung her.

    Screenshot der ausgewählten Datendatei mit hervorgehobener Schaltfläche „Verbinden“.

  7. Geben Sie einen Anzeigenamen ein, wählen Sie dann Hinzufügen aus.

    Screenshot des Bildschirms „Neue Datenquelle erstellen“ mit hervorgehobener Schaltfläche „Hinzufügen“.

  8. Schließen Sie den Bereich Datenquellen.

Nachdem Sie die Datenquelle für Ihr Echtzeitdashboard hinzugefügt haben, können Sie eine Abfrage und visuelle Zuordnung hinzufügen.

Hinzufügen visueller Abfragen und Karten

  1. Wählen Sie Kachel hinzufügen aus.

    Screenshot der hervorgehobenen Schaltfläche „Kachel hinzufügen“.

  2. Geben Sie GPSData in die Abfrage ein und wählen Sie dann Ausführen aus. Nachdem Sie überprüft haben, ob die Abfrage funktioniert, wählen Sie Visual hinzufügen aus.

    Screenshot mit den Ergebnissen im Ausführungsabfragebildschirm.

  3. Wählen Sie im Bereich Formatierung des Visual aus der Dropdownliste Zuordnung des Visual-Typs aus.

  4. Legen Sie als Nächstes Ihre Werte im Abschnitt Daten fest:

    Dateneinstellung Wert
    Nach Speicherort definieren Breiten- und Längengrad
    Breitengradspalte Breitengrad (real)
    Längengradspalte Längengrad (real)
  5. Aktualisieren Sie die Karteninfokarte, indem Sie einen Wert aus dem Dropdownmenü Spalte beschriften auswählen. Wählen Sie SpeedLimitInKilometersPerHour aus.

  6. Wählen Sie Änderungen übernehmen aus.

Ihre Kartenvisualisierung wird angezeigt. Sie können einen beliebigen Punkt auf der Karte auswählen, um die Koordinaten und Geschwindigkeitsbegrenzung in Kilometern pro Stunde für diesen Standort zu erhalten.

Screenshot des Visuals „Fertige Karte“ mit einer Infokarte, welche die Geschwindigkeitsbegrenzung in Kilometern pro Stunde zeigt.

Nächste Schritte

Weitere Informationen zu Microsoft Fabric-Notebooks:

In diesem Tutorial wurde ein Dashboard für die Analyse der Route nach der Reise erstellt. Eine schrittweise Anleitung zum Erstellen von Echtzeitdashboards in Microsoft Fabric: