Delen via


Zelfstudie: Reisgegevens analyseren met behulp van Uitlijnen op wegen in Microsoft Fabric-notebook

Snap to Roads is een Azure Maps-service die een set GPS-punten verwerkt die langs een route zijn verzameld en deze uitlijnt op de meest waarschijnlijke wegen die het voertuig heeft afgelegd. Deze functie is handig bij het bepalen van het exacte pad gevolgd door een voertuig, zelfs wanneer de verzamelde GPS-gegevens enigszins zijn uitgeschakeld.

In deze zelfstudie wordt uitgelegd hoe u Azure Maps Snap to Roads API gebruikt met Microsoft Fabric om GPS-gegevens van bewegende assets te analyseren, zelfs als de gegevens onjuist of onvolledig zijn vanwege signaalverlies. U wordt begeleid bij het maken van aanroepen naar de Azure Maps Snap to Roads-API vanuit een Microsoft Fabric-notebook om de GPS-punten uit telijnen op de dichtstbijzijnde weg, ontbrekende punten op te vullen met behulp van geïnterpoleerde gegevenspunten en deze te verbeteren met extra kenmerken, zoals wegnamen en snelheidslimieten.

In deze zelfstudie leert u het volgende:

  • Maak een Microsoft Fabric Lakehouse en importeer de onbewerkte GPS-gegevens van een vechicle erin.
  • Maak een Microsoft Fabric-notebook met onbewerkte GPS-gegevens en retourneert de aangevraagde vastgemaakte coördinaatgegevens met behulp van de Azure Maps Snap to Roads-API .
  • Maak een eventhouse - en KQL-database en importeer de vastgepakte GPS-gegevens erin.
  • Maak een realtime dashboard met behulp van de vastgemaakte GPS-gegevens in de Kusto-database.
  • Query's uitvoeren op KQL-gegevens en de vastgelijnde GPS-gegevens weergeven in een kaartvisual.

Vereisten

Notitie

Zie Verificatie beheren in Azure Maps voor meer informatie over verificatie in Azure Maps.

Een Microsoft Fabric-notebook en Lakehouse maken

Volg deze stappen om een Microsoft Fabric-notebook te maken:

  1. Ga naar mijn werkruimte en selecteer Nieuw item.

    Een schermopname van de pagina Mijn werkruimte in Microsoft Fabric met de knop Nieuw item gemarkeerd.

  2. Wanneer het scherm Nieuw item wordt weergegeven, schuift u omlaag en selecteert u Notitieblok.

    Een schermopname van de notitieblokoptie in het scherm nieuw item in Microsoft Fabric.

  3. Selecteer in het scherm Notebook Explorer de .

    Een schermopname van de pijl lakehouse selecteren.

  4. Selecteer de knop Toevoegen.

    Een schermopname van de knop Lakehouse toevoegen.

  5. Selecteer New Lakehouse in het dialoogvenster Lakehouse toevoegen en vervolgens de knop Toevoegen.

  6. Voer in het dialoogvenster New lakehouse een naam 'Azure_Maps_Data' in en selecteer vervolgens de knop Maken .

Een gegevensbestand toevoegen aan het lakehouse

Uitlijnen op wegen neemt GPS-puntgegevens (lat, lon) en retourneert een lijst met objecten die een route vormen die is vastgelijnd aan de wegen op een kaart. Een gegevensbestand met de vereiste GPS-gegevens kan worden toegevoegd als een bestand aan het lakehouse en waarnaar wordt verwezen door de Python-code in uw notebook.

Gegevensbestand downloaden

Download de voorbeeldgegevens (mockData_20240919.csv) van GitHub naar uw lokale opslagapparaat om in de volgende sectie te uploaden naar Lakehouse. Dit bestand bevat een matrix met GPS-coördinaten die de snap to Roads-service indien nodig wijzigt om ervoor te zorgen dat elke coördinaat verwijst naar een geldige weg.

  1. Open het bestand mockData_20240919.csv in GitHub.

  2. Selecteer de knop Onbewerkt bestand downloaden in de rechterbovenhoek van het scherm en sla het bestand lokaal op.

    Een schermopname die laat zien hoe u het gegevensbestand met de naam mockData_20240919.csv downloadt vanuit de GitHub-opslagplaats.

Gegevensbestand uploaden naar Lakehouse

In de volgende stappen wordt uitgelegd hoe u een gegevensbron toevoegt aan Lakehouse.

  1. Selecteer Bestanden uploaden in de map Bestanden in Lakehouse.>

    Een schermopname met de menuoptie Bestanden uploaden.

  2. Open het dialoogvenster Bestand openen door het mappictogram te selecteren. Selecteer het mockData_20240919.csv bestand dat u in de vorige sectie hebt gedownload en klik vervolgens op de knop Openen . Zodra het dialoogvenster Bestand is geopend en de juiste bestandsnaam wordt weergegeven in het besturingselement Bestanden uploaden, selecteert u de knop Uploaden om het bestand te uploaden naar Lakehouse.

    Een schermopname van het deelvenster Bestanden uploaden.

Code toevoegen aan notebook

U moet vier cellen met code toevoegen en uitvoeren in uw notebook om het scenario Uitlijnen op wegen uit te voeren. In de volgende secties wordt u stapsgewijs begeleid.

Pakketten installeren

U moet eerst de vereiste pakketten laden:

!pip install geopandas
!pip install geojson

Voer de pip-installatie-instructies in de eerste cel van uw notebook in en voer vervolgens de instructies uit door de uitvoeringspijl te selecteren.

Een schermopname van de code voor het installeren van pakketten in een cel van het notebook.

Gegevens laden

Laad vervolgens de voorbeeldgegevens die u eerder hebt geüpload naar uw Lakehouse.

  1. Plaats de aanwijzer net onder de cel die wordt gebruikt om de pakketten te installeren. Er worden opties weergegeven om code of markdown toe te voegen. Selecteer Code om een andere codecel toe te voegen aan uw notitieblok.

    Een schermopname van de koppeling Code toevoegen in het notebook.

  2. Zodra de nieuwe cel is gemaakt, voegt u de volgende code toe.

    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. Voer de code uit door de uitvoeringspijl te selecteren. Hiermee worden uw voorbeeldgegevens geladen.

Verbeteren met uitlijnen op wegen

De code in deze notebookcel leest onbewerkte GPS-gegevens uit het gegevensbestand in Lakehouse en geeft deze door aan de Azure Maps Snap to Road-API. Als interpolatie is ingeschakeld, voegt de API punten toe tussen GPS-locaties om het routepad langs de weg te voltooien. Het biedt ook kenmerken zoals wegnamen en snelheidslimieten, indien beschikbaar.

  1. Plaats de aanwijzer net onder de cel die is gebruikt om de pakketten in de vorige stap te installeren. Er worden opties weergegeven om code of markdown toe te voegen. Selecteer Code om een andere codecel toe te voegen aan uw notitieblok.

  2. Zodra de nieuwe cel is gemaakt, voegt u de volgende code toe. Zorg ervoor dat u uw abonnementssleutel toevoegt.

    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. Voer de code uit door de uitvoeringspijl te selecteren.

Bestand maken met verbeterde gegevens

De volgende code gebruikt de uitvoer die is gemaakt in de vorige codecel en maakt een nieuw CSV-bestand in het lakehouse met de naam SnapRoadResponses.csv. Dit nieuwe gegevensbestand bevat bijgewerkte GPS-coördinaten die zijn afgestemd op de juiste weg, het bevat ook straatnamen en snelheidslimieten indien beschikbaar. SnapRoadResponses.csv worden geïmporteerd in een eventhouse en gebruikt om later in deze zelfstudie een kaartvisual te maken.

  1. Plaats de aanwijzer net onder de cel die is gebruikt om uitlijnen op wegen in de vorige stap te verbeteren. Er worden opties weergegeven om code of markdown toe te voegen. Selecteer Code om een andere codecel toe te voegen aan uw notitieblok.

  2. Zodra de nieuwe cel is gemaakt, voegt u de volgende code toe.

    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. Voer de code uit door de uitvoeringspijl te selecteren. Dit bespaart SnapRoadResponses.csv met bijgewerkte GPS-coördinaten naar het lakehouse.

Aanbeveling

Als het nieuwe bestand niet wordt weergegeven nadat u de notebookcode hebt uitgevoerd, moet u mogelijk uw browser vernieuwen.

Bestandspad kopiëren

Het ABFS-pad naar SnapRoadResponses.csv is verderop in deze zelfstudie vereist wanneer u het eventhouse maakt. Als u het ABFS-pad naar dit bestand wilt ophalen, selecteert u het beletselteken (...) naast het bestand en selecteert u vervolgens in het pop-upmenu ABFS-pad kopiëren. Sla deze op voor later nadat u het hebt gekopieerd.

Een schermopname van het kopiëren van een ABFS-pad naar het gegevensbestand dat is opgeslagen in Lakehouse.

Maak een eventhouse om de telemetriegegevens voor uw vloot te beheren of assets te verplaatsen. Er wordt automatisch een KQL-database gemaakt. In deze zelfstudie importeert u de vastgepakte gegevens uit het lake house in de KQL-database. Voor realtime analyses voegt u streaminggegevens toe. Zodra de gegevens zijn geüpload, kunt u een query uitvoeren op uw gegevens met behulp van Kusto-querytaal in een KQL-queryset.

  1. Ga naar mijn werkruimte en selecteer Nieuw item.

  2. Wanneer het scherm Nieuw item wordt weergegeven, schuift u omlaag en selecteert u Eventhouse.

  3. Voer in het scherm New Eventhouse een naam in voor uw nieuwe eventhouse, zoals SnapToRoadDemo.

    Koppel vervolgens het lakehouse dat u eerder hebt gemaakt aan uw nieuwe eventhouse.

  4. Selecteer het beletselteken naast uw nieuwe eventhouse en haal vervolgens gegevens > op OneLake uit het pop-upmenu.

    Een schermopname van OneLake in het pop-upmenu.

  5. Selecteer Nieuwe tabel, noem deze GPSData en selecteer vervolgens Volgende.

    Een schermopname van de nieuwe tabeloptie.

  6. Voer het ABFS-pad in naar het Lakehouse-gegevensbestand (SnapRoadResponses.csv) in het OneLake-bestand dat u eerder hebt opgeslagen en selecteer vervolgens het plusteken (+) om het toe te voegen aan de lijst.

    Een schermopname van het invoeren van een OneLake-bestandsnaam met de volgende knop gemarkeerd.

  7. Selecteer Volgende.

  8. Nadat u de gegevens in het scherm Gegevens controleren hebt gecontroleerd, selecteert u Voltooien.

    Een schermopname van het gegevensscherm controleren.

  9. Selecteer Sluiten om de pagina Samenvatting te sluiten.

    Een schermopname van het scherm Gegevenssamenvatting ophalen.

Het eventhouse moet nu worden gemaakt en de GPS-gegevens bevatten.

Een schermopname van het eventhouse met de GPS-gegevens.

Realtime dashboard maken

Er kan een realtime dashboard worden gemaakt om verbinding te maken met uw gegevensset in het eventhouse. De invoer in deze zelfstudie is statische gegevens, geen realtime stream, maar de tegels in het dashboard, zoals Azure Maps Visual, kunnen worden gebruikt voor visuele weergave en analyse.

Gegevensbron toevoegen

  1. Ga naar mijn werkruimte en selecteer Nieuw item.

  2. Wanneer het scherm Nieuw item wordt weergegeven, zoekt of schuift u omlaag en selecteert u realtimedashboard.

  3. Voer in het scherm Nieuw realtime dashboard de naam SnapToRoadDashboard in en selecteer Vervolgens Maken.

  4. Selecteer nieuwe gegevensbron in het scherm Realtime dashboard.

  5. Selecteer de knop Toevoegen en selecteer vervolgens OneLake-gegevenshub.

    Een schermopname met het scherm Gegevensbron toevoegen in realtime dashboard.

  6. Selecteer uw gegevensbron en vervolgens Verbinding maken.

    Een schermopname van het gegevensbestand dat is geselecteerd met de knop Verbinding maken gemarkeerd.

  7. Voer een weergavenaam in en selecteer Vervolgens Toevoegen.

    Een schermopname van het scherm Voor het maken van een nieuwe gegevensbron, met de knop Toevoegen gemarkeerd.

  8. Sluit het deelvenster Gegevensbronnen .

Nu u de gegevensbron voor uw realtime dashboard hebt toegevoegd, kunt u een query en kaartvisual toevoegen.

Query- en kaartvisual toevoegen

  1. Selecteer Tegel toevoegen.

    Een schermopname met de knop Tegel toevoegen gemarkeerd.

  2. Voer GPSData de query in en selecteer Uitvoeren. Nadat u hebt gecontroleerd of de query werkt, selecteert u Visual toevoegen.

    Een schermopname van de resultaten in het queryscherm uitvoeren.

  3. Selecteer In het deelvenster Visuele opmaak de optie Kaart in de vervolgkeuzelijst Visual-type .

  4. Stel vervolgens uw waarden in de sectie Gegevens in:

    Gegevensinstelling waarde
    Definiëren op locatie Breedtegraad en lengtegraad
    Breedtegraadkolom breedtegraad (reëel)
    Kolom Lengtegraad lengtegraad (reëel)
  5. Werk de kaart kaart met kaartgegevens bij door een waarde te selecteren in de vervolgkeuzelijst Labelkolom . Selecteer SpeedLimitInKilometersPerHour.

  6. Wijzigingen toepassen selecteren

De kaartvisual wordt weergegeven. U kunt elk punt op de kaart selecteren om de coördinaten en snelheidslimiet in kilometers per uur voor die locatie op te halen.

Een schermopname van de voltooide kaartvisual met een infokaart die de snelheidslimiet in kilometers per uur weergeeft.

Volgende stappen

Voor meer informatie over Microsoft Fabric-notebooks:

In deze zelfstudie hebt u een dashboard gemaakt voor analyse van route na rit. Voor een stapsgewijze handleiding voor het bouwen van realtime dashboards in Microsoft Fabric: