Partager via


Tutoriel : Analyser les données de voyage à l’aide de Snap to Roads dans un notebook Microsoft Fabric

Snap to Roads est un service Azure Maps qui traite un ensemble de points GPS collectés le long d’un itinéraire et les aligne sur les routes les plus probables parcourues par le véhicule. Cette fonctionnalité est utile pour déterminer le chemin exact suivi par un véhicule, même lorsque les données GPS collectées sont légèrement imprécises.

Ce tutoriel explique comment utiliser l’API Snap to Roads Azure Maps avec Microsoft Fabric pour analyser les données GPS provenant de ressources mobiles, même lorsque ces données sont imprécises ou incomplètes en raison d’une perte de signal. Il vous guide tout au long des appels à l’API Snap to Roads d’Azure Maps à partir d’un notebook Microsoft Fabric afin d’aligner les points GPS sur la route la plus proche, de remplir les points manquants à l’aide de points de données interpolés, et de les améliorer avec des attributs supplémentaires tels que les noms des routes et les limites de vitesse.

Ce didacticiel présente les procédures suivantes :

Prérequis

Remarque

Pour plus d’informations sur l’authentification dans Azure Maps, voir Gérer l’authentification dans Azure Maps.

Créer un notebook et un lakehouse Microsoft Fabric

Effectuez ces étapes pour créer un notebook Microsoft Fabric :

  1. Accédez à Mon espace de travail et sélectionnez Nouvel élément.

    Capture d’écran de la page Mon espace de travail dans Microsoft Fabric avec le bouton Nouvel élément mis en évidence.

  2. Lorsque l’écran Nouvel élément s’affiche, faites défiler vers le bas et sélectionnez Notebook.

    Capture d’écran montrant l’option Notebook sur l’écran Nouvel écran dans Microsoft Fabric.

  3. Sur l’écran Explorateur du notebook, sélectionnez la flèche Lakehouses>.

    Capture d’écran montrant la flèche de sélection de lakehouse.

  4. Cliquez sur le bouton Ajouter.

    Capture d’écran montrant le bouton d’ajout de lakehouse.

  5. Dans la boîte de dialogue Ajouter un lakehouse, sélectionnez Nouveau Lakehouse, puis le bouton Ajouter.

  6. Dans la boîte de dialogue Nouveau lakehouse, entrez le nom «Azure_Maps_Data», puis sélectionnez le bouton Créer .

Ajouter un fichier de données au lakehouse

Snap to Roads prend des données de points GPS (lat, lon) et retourne une liste d’objets qui forment un itinéraire aligné sur les routes sur une carte. Un fichier de données contenant les données GPS requises peut être ajouté en tant que fichier au lakehouse, et référencé par le code Python dans votre notebook.

Télécharger le fichier de données

Téléchargez les exemples de données (mockData_20240919.csv) à partir de GitHub vers votre appareil de stockage local, afin de les charger dans le lakehouse dans la section suivante. Ce fichier contient un tableau de coordonnées GPS que le service Snap to Roads modifie selon les besoins pour s’assurer que chaque coordonnée pointe vers une route valide.

  1. Ouvrez le fichier mockData_20240919.csv dans GitHub.

  2. Sélectionnez le bouton Télécharger le fichier brut dans le coin supérieur droit de l’écran et enregistrez le fichier localement.

    Capture d’écran montrant comment télécharger le fichier de données nommé mockData_20240919.csv à partir du dépôt GitHub.

Charger le fichier de données dans le lakehouse

Les étapes suivantes expliquent comment ajouter une source de données au lakehouse.

  1. Dans le dossier Fichiers du lakehouse, sélectionnez Charger > Charger des fichiers.

    Capture d’écran montrant l’option de menu Charger des fichiers.

  2. Affichez la boîte de dialogue d’ouverture de fichier en sélectionnant l’icône de dossier. Sélectionnez le fichier mockData_20240919.csv que vous avez téléchargé dans la section précédente, puis le bouton Ouvrir. Une fois que la boîte de dialogue d’ouverture de fichier s’est fermée et que le nom de fichier correct apparaît dans le contrôle Charger des fichiers, sélectionnez le bouton Charger pour charger le fichier dans le lakehouse.

    Capture d’écran montrant le panneau de chargement de fichiers.

Ajouter du code au notebook

Vous devez ajouter et exécuter quatre cellules de code dans votre notebook pour exécuter le scénario Snap to Roads. Les sections suivantes vous guident tout au long de ce processus.

Installer des packages

Vous devez d’abord charger les packages requis :

!pip install geopandas
!pip install geojson

Entrez les instructions pip install dans la première cellule de votre notebook, puis exécutez les instructions en sélectionnant la flèche d’exécution.

Capture d’écran montrant le code d’installation des packages dans une cellule du notebook.

Charger les données

Ensuite, chargez les exemples de données que vous avez précédemment chargés dans votre lakehouse.

  1. Placez le pointeur juste en dessous de la cellule utilisée pour installer les packages. Des options s’affichent pour ajouter du code ou du markdown. Sélectionnez Code pour ajouter une autre cellule de code à votre notebook.

    Capture d’écran montrant le lien d’ajout de code dans le notebook.

  2. Une fois la nouvelle cellule créée, ajoutez le code suivant.

    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. Exécutez le code en sélectionnant la flèche d’exécution. Cela charge vos exemples de données.

Améliorer avec Snap to Roads

Le code de cette cellule de notebook lit les données GPS brutes du fichier de données dans le lakehouse, et les transmet à l’API Snap to Roads d’Azure Maps. Avec l’interpolation activée, l’API ajoute des points entre les localisations GPS pour compléter l’itinéraire le long de la route. Elle fournit également des attributs tels que les noms de routes et les limites de vitesse lorsqu’ils sont disponibles.

  1. Placez le pointeur juste en dessous de la cellule utilisée pour installer les packages à l’étape précédente. Des options s’affichent pour ajouter du code ou du markdown. Sélectionnez Code pour ajouter une autre cellule de code à votre notebook.

  2. Une fois la nouvelle cellule créée, ajoutez le code suivant. Veillez à ajouter votre clé d’abonnement.

    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. Exécutez le code en sélectionnant la flèche d’exécution.

Créer un fichier avec des données améliorées

Le code suivant prend la sortie créée dans la cellule de code précédente et crée un fichier CSV dans le lakehouse nommé SnapRoadResponses.csv. Ce nouveau fichier de données contient des coordonnées GPS mises à jour qui sont alignées avec la route appropriée. Il inclut également les noms de rues et les limites de vitesse lorsqu’ils sont disponibles. SnapRoadResponses.csv sera importé dans un eventhouse et utilisé pour créer un visuel de carte plus loin dans ce tutoriel.

  1. Placez le pointeur juste en dessous de la cellule utilisée pour améliorer avec Snap to Roads à l’étape précédente. Des options s’affichent pour ajouter du code ou du markdown. Sélectionnez Code pour ajouter une autre cellule de code à votre notebook.

  2. Une fois la nouvelle cellule créée, ajoutez le code suivant.

    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. Exécutez le code en sélectionnant la flèche d’exécution. Cela enregistre SnapRoadResponses.csv avec les coordonnées GPS mises à jour dans le lakehouse.

Conseil

Si le nouveau fichier n’apparaît pas après l’exécution du code du notebook, vous devrez peut-être actualiser votre navigateur.

Copier le chemin d’accès au fichier

Le chemin d’accès ABFS à SnapRoadResponses.csv est requis plus loin dans ce tutoriel lorsque vous créez l’eventhouse. Pour obtenir le chemin d’accès ABFS à ce fichier, sélectionnez les points de suspension (...) en regard du fichier puis, dans le menu contextuel, sélectionnez Copier le chemin d’accès ABFS. Une fois le chemin d’accès copié, enregistrez-le pour une utilisation ultérieure.

Capture d’écran montrant comment copier un chemin d’accès ABFS au fichier de données stocké dans le lakehouse.

Créez un eventhouse pour gérer les données de télémétrie de votre flotte ou déplacer des ressources. Une base de données KQL est créée automatiquement par défaut. Dans ce tutoriel, vous allez importer les données alignées du lakehouse dans la base de données KQL. Pour l’analytique en temps réel, ajoutez des données de streaming. Une fois les données chargées, vous pouvez interroger vos données à l’aide du langage de requête Kusto dans un ensemble de requêtes KQL.

  1. Accédez à Mon espace de travail et sélectionnez Nouvel élément.

  2. Lorsque l’écran Nouvel élément s’affiche, faites défiler vers le bas et sélectionnez Eventhouse.

  3. Sur l’écran Nouvel eventhouse, entrez un nom pour votre nouvel eventhouse, tel que SnapToRoadDemo.

    Ensuite, liez le lakehouse que vous avez créé à votre nouvel eventhouse.

  4. Sélectionnez les points de suspension en regard de votre nouvel eventhouse, puis Obtenir des données > OneLake dans le menu contextuel.

    Capture d’écran montrant OneLake dans le menu contextuel.

  5. Sélectionnez Nouvelle table, nommez-la GPSData, puis sélectionnez Suivant.

    Capture d’écran montrant l’option Nouvelle table.

  6. Entrez le chemin d’accès ABFS au fichier de données Lakehouse (SnapRoadResponses.csv) dans le contrôle Fichier OneLake que vous avez enregistré précédemment, puis sélectionnez le signe plus (+) pour l’ajouter à la liste.

    Capture d’écran montrant l’entrée d’un nom de fichier OneLake avec le bouton Suivant mis en évidence.

  7. Cliquez sur Suivant.

  8. Après avoir vérifié les données sur l’écran Inspecter les données, sélectionnez Terminer.

    Capture d’écran montrant l’écran Inspecter les données.

  9. Sélectionnez Fermer pour fermer la page Résumé.

    Capture d’écran montrant l’écran d’obtention de résumé des données.

L’eventhouse doit maintenant être créé et contenir les données GPS.

Capture d’écran montrant l’eventhouse avec les données GPS.

Créer un tableau de bord en temps réel

Vous pouvez créer un tableau de bord en temps réel pour vous connecter à votre jeu de données dans l’eventhouse. L’entrée de ce tutoriel est constituée de données statiques, et non d’un flux en temps réel, mais les vignettes du tableau de bord, telles que Visuel Azure Maps, peuvent être utilisées pour la représentation visuelle et l’analytique.

Ajouter une source de données

  1. Accédez à Mon espace de travail et sélectionnez Nouvel élément.

  2. Lorsque l’écran Nouvel élément s’affiche, recherchez ou faites défiler vers le bas et sélectionnez Tableau de bord en temps réel.

  3. Sur l’écran Nouveau tableau de bord en temps réel, entrez le nom SnapToRoadDashboard, puis sélectionnez Créer.

  4. Sur l’écran Nouveau tableau de bord en temps réel, sélectionnez Nouvelle source de données.

  5. Sélectionnez le bouton Ajouter, puis Hub de données OneLake.

    Capture d’écran montrant l’écran d’ajout de source de données à un tableau de bord en temps réel.

  6. Sélectionnez votre source de données, puis Se connecter.

    Capture d’écran montrant le fichier de données sélectionné avec le bouton connexion mis en évidence.

  7. Entrez un Nom d’affichage, puis sélectionnez Ajouter.

    Capture d’écran montrant l’écran de création de source de données avec le bouton Ajouter mis en évidence.

  8. Fermez le panneau Sources de données.

Maintenant que vous avez ajouté la source de données pour votre tableau de bord en temps réel, vous pouvez ajouter une requête et un visuel cartographique.

Ajouter une requête et un visuel de carte

  1. Sélectionnez Ajouter une vignette.

    Capture d’écran mettant en évidence le bouton Ajouter une vignette.

  2. Entrez GPSData dans la requête, puis sélectionnez Exécuter. Une fois que vous avez vérifié que la requête fonctionne, sélectionnez Ajouter un visuel.

    Capture d’écran montrant les résultats sur l’écran d’exécution de requête.

  3. Dans le panneau Mise en forme visuelle, sélectionnez Carte dans la liste déroulante Type de visuel.

  4. Ensuite, définissez vos valeurs dans la section Données :

    Paramètre de données valeur
    Définir par localisation Latitude et longitude
    Colonne de latitude Latitude (réelle)
    Colonne de longitude Longitude (réelle)
  5. Mettez à jour la carte d’informations cartographiques en sélectionnant une valeur dans la liste déroulante Colonne d’étiquette. Sélectionnez SpeedLimitInKilometersPerHour.

  6. Sélectionnez Appliquer les changements

Votre visuel de carte s’affiche. Vous pouvez sélectionner n’importe quel point sur la carte pour obtenir les coordonnées et la limite de vitesse en kilomètres par heure pour cette localisation.

Capture d’écran montrant le visuel cartographique terminé avec une carte d’informations montrant la limite de vitesse en kilomètres par heure.

Étapes suivantes

Pour en savoir plus sur les notebooks Microsoft Fabric :

Ce tutoriel a créé un tableau de bord pour l’analyse des itinéraires post-trajet. Pour obtenir un guide pas à pas expliquant comment créer des tableaux de bord en temps réel dans Microsoft Fabric :