Samouczek: analizowanie danych podróży przy użyciu przystawki do dróg w notesie usługi Microsoft Fabric

Snap to road to usługa Azure Maps, która przetwarza zestaw punktów GPS zebranych wzdłuż trasy i przyciąga je do najbardziej prawdopodobnych dróg, które podróżował pojazd. Ta funkcja jest przydatna w określaniu dokładnej ścieżki, po której następuje pojazd, nawet jeśli zebrane dane GPS są nieznacznie wyłączone.

W tym samouczku wyjaśniono, jak używać interfejsu API przyciągania usługi Azure Maps do dróg w usłudze Microsoft Fabric do analizowania danych GPS z przenoszenia zasobów, nawet jeśli dane są niedokładne lub niekompletne z powodu utraty sygnału. Przeprowadzi Cię przez wykonywanie wywołań do interfejsu API przyciągania usługi Azure Maps do dróg z notesu usługi Microsoft Fabric w celu przyciągania punktów GPS do najbliższej drogi, wypełniania brakujących punktów danych przy użyciu punktów danych interpolowanych i ulepszania ich dodatkowymi atrybutami, takimi jak nazwy dróg i ograniczenia prędkości.

Ten samouczek obejmuje następujące kroki:

  • Utwórz usługę Microsoft Fabric Lakehouse i zaimportuj do niej nieprzetworzone dane GPS z vechicle.
  • Utwórz notes usługi Microsoft Fabric, który pobiera nieprzetworzone dane GPS i zwraca żądane informacje o współrzędnych przy użyciu interfejsu API przyciągania usługi Azure Maps do dróg.
  • Utwórz bazę danych eventhouse i KQL i zaimportuj do niej przycięte dane GPS.
  • Utwórz pulpit nawigacyjny w czasie rzeczywistym przy użyciu przyciągniętych danych GPS w bazie danych Kusto.
  • Wykonywanie zapytań dotyczących danych KQL i wyświetlanie przyciągniętych danych GPS w wizualizacji mapy.

Wymagania wstępne

Uwaga

Aby uzyskać więcej informacji na temat uwierzytelniania w usłudze Azure Maps, zobacz Zarządzanie uwierzytelnianiem w usłudze Azure Maps.

Tworzenie notesu usługi Microsoft Fabric i usługi Lakehouse

Wykonaj następujące kroki, aby utworzyć notes usługi Microsoft Fabric:

  1. Przejdź do obszaru Mój obszar roboczy i wybierz pozycję Nowy element.

    Zrzut ekranu przedstawiający stronę Mój obszar roboczy w usłudze Microsoft Fabric z wyróżnionym przyciskiem nowego elementu.

  2. Po wyświetleniu ekranu Nowy element przewiń w dół i wybierz pozycję Notes.

    Zrzut ekranu przedstawiający opcję notesu na ekranie nowego elementu w usłudze Microsoft Fabric.

  3. Na ekranie Eksploratora notesów wybierz .

    Zrzut ekranu przedstawiający strzałkę select lakehouse.

  4. Kliknij przycisk Dodaj.

    Zrzut ekranu przedstawiający przycisk Dodaj lakehouse.

  5. W oknie dialogowym Dodawanie usługi Lakehouse wybierz pozycję New Lakehouse, a następnie przycisk Dodaj.

  6. W oknie dialogowym New lakehouse wprowadź nazwę "Azure_Maps_Data", a następnie wybierz przycisk Utwórz.

Dodawanie pliku danych do lakehouse

Przyciąganie do dróg pobiera dane punktów GPS (lat, lon) i zwraca listę obiektów, które tworzą trasę przyciąganą do dróg na mapie. Plik danych zawierający wymagane dane GPS można dodać jako plik do lakehouse i przywoływany przez kod języka Python w notesie.

Pobieranie pliku danych

Pobierz przykładowe dane (mockData_20240919.csv) z usługi GitHub do lokalnego urządzenia magazynu, aby przekazać je do usługi Lakehouse w następnej sekcji. Ten plik zawiera tablicę współrzędnych GPS, które usługa Snap to Roads modyfikuje zgodnie z potrzebami, aby zapewnić, że każda współrzędna wskazuje prawidłową drogę.

  1. Otwórz plik mockData_20240919.csv w usłudze GitHub.

  2. Wybierz przycisk Pobierz nieprzetworzonego pliku w prawym górnym rogu ekranu i zapisz plik lokalnie.

    Zrzut ekranu przedstawiający sposób pobierania pliku danych o nazwie mockData_20240919.csv z repozytorium GitHub.

Przekazywanie pliku danych do usługi Lakehouse

W poniższych krokach wyjaśniono, jak dodać źródło danych do usługi Lakehouse.

  1. W folderze Files in lakehouse wybierz pozycję Przekaż > pliki.

    Zrzut ekranu przedstawiający opcję menu Przekaż pliki.

  2. Wyświetl okno dialogowe otwierania pliku, wybierając ikonę folderu . Wybierz plik mockData_20240919.csv pobrany w poprzedniej sekcji , a następnie przycisk Otwórz . Po zamknięciu okna dialogowego otwierania pliku i wyświetleniu poprawnej nazwy pliku w kontrolce Przekazywanie plików wybierz przycisk Przekaż , aby przekazać plik do usługi Lakehouse.

    Zrzut ekranu przedstawiający panel przekazywania plików.

Dodawanie kodu do notesu

Aby wykonać scenariusz Przyciąganie do dróg, musisz dodać i wykonać cztery komórki kodu w notesie. W poniższych sekcjach opisano to.

Instalowanie pakietów

Najpierw należy załadować wymagane pakiety:

!pip install geopandas
!pip install geojson

Wprowadź instrukcje install w pierwszej komórce notesu, a następnie wykonaj instrukcje, wybierając strzałkę uruchamiania.

Zrzut ekranu przedstawiający kod pakietów instalacyjnych w komórce notesu.

Ładowanie danych

Następnie załaduj przykładowe dane, które zostały wcześniej przekazane do usługi Lakehouse.

  1. Umieść wskaźnik tuż pod komórką użytą do zainstalowania pakietów. Opcje są wyświetlane w celu dodania kodu lub znacznika markdown. Wybierz pozycję Kod , aby dodać kolejną komórkę kodu do notesu.

    Zrzut ekranu przedstawiający link dodawania kodu w notesie.

  2. Po utworzeniu nowej komórki dodaj następujący kod.

    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. Wykonaj kod, wybierając strzałkę przebiegu. Spowoduje to załadowanie przykładowych danych.

Ulepszanie za pomocą przyciągania do dróg

Kod w tej komórce notesu odczytuje nieprzetworzone dane GPS z pliku danych w lakehouse i przekazuje je do interfejsu API road przystawki usługi Azure Maps. Po włączeniu interpolacji interfejs API dodaje punkty między lokalizacjami GPS, aby ukończyć ścieżkę trasy wzdłuż drogi. Udostępnia również atrybuty, takie jak nazwy dróg i limity prędkości, gdy są dostępne.

  1. Umieść wskaźnik tuż pod komórką użytą do zainstalowania pakietów w poprzednim kroku. Opcje są wyświetlane w celu dodania kodu lub znacznika markdown. Wybierz pozycję Kod , aby dodać kolejną komórkę kodu do notesu.

  2. Po utworzeniu nowej komórki dodaj następujący kod. Upewnij się, że dodano klucz subskrypcji.

    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. Wykonaj kod, wybierając strzałkę przebiegu.

Tworzenie pliku z rozszerzonymi danymi

Poniższy kod pobiera dane wyjściowe utworzone w poprzedniej komórce kodu i tworzy nowy plik CSV w usłudze Lakehouse o nazwie SnapRoadResponses.csv. Ten nowy plik danych zawiera zaktualizowane współrzędne GPS, które są dopasowane do odpowiedniej drogi, zawiera również nazwy ulic i ograniczenia prędkości, gdy są dostępne. SnapRoadResponses.csv zostaną zaimportowane do magazynu zdarzeń i użyte do utworzenia wizualizacji mapy w dalszej części tego samouczka.

  1. Umieść wskaźnik tuż pod komórką użytą do ulepszenia za pomocą przyciągania do dróg w poprzednim kroku. Opcje są wyświetlane w celu dodania kodu lub znacznika markdown. Wybierz pozycję Kod , aby dodać kolejną komórkę kodu do notesu.

  2. Po utworzeniu nowej komórki dodaj następujący kod.

    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. Wykonaj kod, wybierając strzałkę przebiegu. Pozwala to zaoszczędzić SnapRoadResponses.csv z zaktualizowanymi współrzędnymi GPS do jeziora.

Napiwek

Jeśli nowy plik nie zostanie wyświetlony po uruchomieniu kodu notesu, może być konieczne odświeżenie przeglądarki.

Kopiowanie ścieżki pliku

Ścieżka ABFS do SnapRoadResponses.csv jest wymagana w dalszej części tego samouczka podczas tworzenia magazynu zdarzeń. Aby uzyskać ścieżkę ABFS do tego pliku, wybierz wielokropek (...) obok pliku, a następnie z menu podręcznego wybierz pozycję Kopiuj ścieżkę ABFS. Po skopiowaniu zapisz go później.

Zrzut ekranu przedstawiający sposób kopiowania ścieżki ABFS do pliku danych przechowywanego w usłudze Lakehouse.

Utwórz magazyn zdarzeń, aby zarządzać danymi telemetrii dla floty lub przenoszeniem zasobów. Baza danych KQL jest tworzona automatycznie. W tym samouczku zaimportujesz przyciągane dane z magazynu lake house do bazy danych KQL. W przypadku analizy w czasie rzeczywistym dodaj dane przesyłane strumieniowo. Po przekazaniu danych można wykonywać zapytania dotyczące danych przy użyciu język zapytań Kusto w zestawie zapytań KQL.

  1. Przejdź do obszaru Mój obszar roboczy i wybierz pozycję Nowy element.

  2. Po wyświetleniu ekranu Nowy element przewiń w dół i wybierz pozycję Eventhouse.

  3. Na ekranie Nowy magazyn zdarzeń wprowadź nazwę nowego magazynu zdarzeń , na przykład SnapToRoadDemo.

    Następnie połącz utworzoną wcześniej usługę Lakehouse z nowym magazynem zdarzeń.

  4. Wybierz wielokropek obok nowego magazynu zdarzeń, a następnie pozycję Pobierz dane > OneLake z menu podręcznego.

    Zrzut ekranu przedstawiający element OneLake w menu podręcznym.

  5. Wybierz pozycję Nowa tabela, nadaj jej nazwę GPSData , a następnie wybierz pozycję Dalej.

    Zrzut ekranu przedstawiający nową opcję tabeli.

  6. Wprowadź ścieżkę ABFS do pliku danych usługi Lakehouse (SnapRoadResponses.csv) w zapisanej wcześniej kontrolce pliku OneLake, a następnie wybierz znak plus (+), aby dodać go do listy.

    Zrzut ekranu przedstawiający wprowadzenie nazwy pliku OneLake z wyróżnionym następnym przyciskiem.

  7. Wybierz Dalej.

  8. Po zweryfikowaniu danych na ekranie Inspekcja danych wybierz pozycję Zakończ.

    Zrzut ekranu przedstawiający ekran inspekcji danych.

  9. Wybierz pozycję Zamknij , aby zamknąć stronę Podsumowanie .

    Zrzut ekranu przedstawiający ekran pobierania podsumowania danych.

Magazyn zdarzeń powinien zostać utworzony i zawierać dane GPS.

Zrzut ekranu przedstawiający magazyn zdarzeń z danymi GPS.

Tworzenie pulpitu nawigacyjnego w czasie rzeczywistym

Pulpit nawigacyjny w czasie rzeczywistym można utworzyć w celu nawiązania połączenia z zestawem danych w centrum zdarzeń. Dane wejściowe w tym samouczku to dane statyczne, a nie strumień w czasie rzeczywistym, ale kafelki na pulpicie nawigacyjnym, takie jak wizualizacja usługi Azure Maps, mogą służyć do wizualnej reprezentacji i analizy.

Dodaj źródło danych

  1. Przejdź do obszaru Mój obszar roboczy i wybierz pozycję Nowy element.

  2. Gdy pojawi się ekran Nowy element, wyszukaj lub przewiń w dół i wybierz pozycję Pulpit nawigacyjny w czasie rzeczywistym.

  3. Na ekranie Nowy pulpit nawigacyjny w czasie rzeczywistym wprowadź nazwę SnapToRoadDashboard, a następnie wybierz pozycję Utwórz.

  4. Na nowym ekranie Pulpit nawigacyjny w czasie rzeczywistym wybierz pozycję Nowe źródło danych.

  5. Wybierz przycisk Dodaj, a następnie wybierz pozycję OneLake Data Hub.

    Zrzut ekranu przedstawiający ekran dodawania źródła danych pulpitu nawigacyjnego w czasie rzeczywistym.

  6. Wybierz źródło danych, a następnie pozycję Połącz.

    Zrzut ekranu przedstawiający wybrany plik danych z wyróżnionym przyciskiem Połącz.

  7. Wprowadź nazwę wyświetlaną, a następnie wybierz pozycję Dodaj.

    Zrzut ekranu przedstawiający ekran tworzenia nowego źródła danych z wyróżnionym przyciskiem dodawania.

  8. Zamknij panel Źródła danych.

Po dodaniu źródła danych dla pulpitu nawigacyjnego w czasie rzeczywistym możesz dodać wizualizację zapytania i mapy.

Dodawanie wizualizacji zapytania i mapy

  1. Wybierz pozycję Dodaj kafelek.

    Zrzut ekranu przedstawiający wyróżniony przycisk dodawania kafelka.

  2. Wprowadź GPSData w zapytaniu, a następnie wybierz pozycję Uruchom. Po sprawdzeniu, czy zapytanie działa, wybierz pozycję Dodaj wizualizację.

    Zrzut ekranu przedstawiający wyniki na ekranie uruchamiania zapytania.

  3. Na panelu Formatowanie wizualizacji wybierz pozycję Mapa z listy rozwijanej Typ wizualizacji.

  4. Następnie ustaw wartości w sekcji Dane :

    Ustawienie danych wartość
    Definiowanie według lokalizacji Długość i szerokość geograficzna
    Kolumna szerokości geograficznej szerokość geograficzna (rzeczywista)
    Kolumna długości geograficznej długość geograficzna (rzeczywista)
  5. Zaktualizuj kartę informacji o mapie, wybierając wartość z listy rozwijanej Etykieta kolumny . Wybierz pozycję SpeedLimitInKilometersPerHour.

  6. Wybierz pozycję Zastosuj zmiany

Wizualizacja mapy jest wyświetlana. Możesz wybrać dowolny punkt na mapie, aby uzyskać współrzędne i limit prędkości w kilometrach na godzinę dla tej lokalizacji.

Zrzut ekranu przedstawiający ukończoną wizualizację mapy z wyświetloną kartą informacyjną pokazującą limit prędkości w kilometrach na godzinę.

Następne kroki

Aby dowiedzieć się więcej o notesach usługi Microsoft Fabric:

W tym samouczku utworzono pulpit nawigacyjny do analizy tras po podróży. Aby uzyskać szczegółowy przewodnik po tworzeniu pulpitów nawigacyjnych w czasie rzeczywistym w usłudze Microsoft Fabric: