Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Snap to Roads é um serviço do Azure Mapas que processa um conjunto de pontos GPS coletados ao longo de uma rota e os prende às estradas mais prováveis que o veículo viajou. Esse recurso é útil para determinar o caminho exato seguido por um veículo, mesmo quando os dados GPS coletados estão ligeiramente desativados.
Este tutorial explica como usar a API Snap to Roads do Azure Mapas com o Microsoft Fabric para analisar dados de GPS da movimentação de ativos, mesmo quando os dados são imprecisos ou incompletos devido à perda de sinal. Ele orienta você a fazer chamadas para a API Snap to Roads do Azure Mapas de um bloco de anotações do Microsoft Fabric para ajustar os pontos GPS para a estrada mais próxima, preencher pontos ausentes usando pontos de dados interpolados e aprimorá-los com atributos adicionais, como nomes de estrada e limites de velocidade.
Neste tutorial, você irá:
- Crie um Microsoft Fabric Lakehouse e importe os dados brutos de GPS de um vequicle para ele.
- Crie um notebook do Microsoft Fabric que usa dados brutos de GPS e retorna as informações de coordenadas solicitadas usando a API Snap to Roads do Azure Mapas.
- Crie um eventhouse e um banco de dados KQL e importe os dados de GPS ajustados para ele.
- Crie um Painel em tempo real usando os dados de GPS ajustados no Banco de Dados Kusto.
- Consulte dados KQL e exiba os dados de GPS ajustados em um Visual de Mapa.
Pré-requisitos
- Uma Conta do Azure Mapas
- Uma chave de assinatura
- Uma conta do Microsoft Fabric
- Compreensão básica do Microsoft Fabric.
Observação
Para obter mais informações sobre a autenticação nos Azure Mapas, confira Gerenciar a autenticação nos Azure Mapas.
Criar um bloco de anotações do Microsoft Fabric e um lakehouse
Siga estas etapas para criar um notebook do Microsoft Fabric:
Vá para o Meu workspace e selecione Novo item.
Quando a tela Novo item aparecer, role para baixo e selecione Notebook.
Na tela Explorer do notebook, selecione a seta Lakehouses>.
Selecione o botão Adicionar.
Na caixa de diálogo Adicionar lakehouse, selecione Novo Lakehouse e, em seguida, o botão Adicionar.
Na caixa de diálogo New lakehouse, insira um nome "Azure_Maps_Data" e selecione o botão Criar.
Adicionar um arquivo de dados ao lakehouse
Snap to Roads usa dados de ponto GPS (lat, lon) e retorna uma lista de objetos que formam uma rota quebrada para as estradas em um mapa. Um arquivo de dados que contém os dados de GPS necessários pode ser adicionado como um arquivo ao lakehouse e referenciado pelo código python em seu notebook.
Baixar o arquivo de dados
Baixe os dados de exemplo (mockData_20240919.csv) do GitHub para seu dispositivo de armazenamento local para carregar no lakehouse na próxima seção. Esse arquivo contém uma matriz de coordenadas GPS que o serviço Snap to Roads modifica conforme necessário para garantir que cada coordenada aponte para uma estrada válida.
Abra o mockData_20240919.csv de arquivo no GitHub.
Selecione o botão Baixar arquivo RAW no canto superior direito da tela e salve o arquivo localmente.
Carregar arquivo de dados no lakehouse
As etapas a seguir explicam como adicionar uma fonte de dados ao lakehouse.
Na pasta Arquivos na lakehouse, selecione Carregar > Carregar arquivos.
Abra a caixa de diálogo abrir o arquivo selecionando o ícone pasta. Selecione o arquivo mockData_20240919.csv baixado na seção anterior e, em seguida, o botão Abrir. Depois que a caixa de diálogo abrir o arquivo for fechada e o nome de arquivo correto aparecer no controle Carregar arquivos, selecione o botão Carregar para carregar o arquivo no lakehouse.
Adicionar código ao notebook
Você precisa adicionar e executar quatro células de código em seu notebook para executar o cenário Snap to Roads. As seções a seguir orientam você sobre isso.
Instalar Pacotes
Primeiro, você precisa carregar os pacotes necessários:
!pip install geopandas
!pip install geojson
Insira as instruções de instalação pip na primeira célula do bloco de anotações e execute as instruções selecionando a seta de execução.
Carregar dados
Em seguida, carregue os dados de exemplo que você carregou anteriormente em seu lakehouse.
Focalize o ponteiro logo abaixo da célula usada para instalar os pacotes. As opções aparecem para adicionar código ou markdown. Selecione Código para adicionar outra célula de código ao bloco de anotações.
Depois que a nova célula for criada, adicione o código a seguir.
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()Execute o código selecionando a seta de execução. Isso carrega seus dados de exemplo.
Aprimorar com o Snap to Roads
O código nesta célula do notebook lê dados GPS brutos do arquivo de dados no lakehouse e os passa para a API Snap to Road do Azure Mapas. Com a interpolação habilitada, a API adiciona pontos entre locais GPS para concluir o caminho da rota ao longo da estrada. Ele também fornece atributos como nomes de estrada e limites de velocidade quando disponíveis.
Focalize o ponteiro logo abaixo da célula usada para instalar os pacotes na etapa anterior. As opções aparecem para adicionar código ou markdown. Selecione Código para adicionar outra célula de código ao bloco de anotações.
Depois que a nova célula for criada, adicione o código a seguir. Adicione sua chave de assinatura.
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.')Execute o código selecionando a seta de execução.
Criar arquivo com dados aprimorados
O código a seguir usa a saída criada na célula de código anterior e cria um novo arquivo CSV no lakehouse chamado SnapRoadResponses.csv. Este novo arquivo de dados contém coordenadas GPS atualizadas alinhadas com a estrada apropriada, ele também inclui nomes de rua e limites de velocidade quando disponível. SnapRoadResponses.csv serão importados para uma casa de eventos e usados para criar um visual de mapa posteriormente neste tutorial.
Focalize o ponteiro logo abaixo da célula usada para Aprimorar com o Snap to Roads na etapa anterior. As opções aparecem para adicionar código ou markdown. Selecione Código para adicionar outra célula de código ao bloco de anotações.
Depois que a nova célula for criada, adicione o código a seguir.
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)Execute o código selecionando a seta de execução. Isso salva SnapRoadResponses.csv com coordenadas GPS atualizadas para o lakehouse.
Dica
Se o novo arquivo não aparecer depois de executar o código do bloco de anotações, talvez seja necessário atualizar o navegador.
Copiar caminho do arquivo
O caminho do ABFS para SnapRoadResponses.csv é necessário posteriormente neste tutorial quando você cria a casa de eventos. Para obter o caminho do ABFS para esse arquivo, selecione a elipse (...) ao lado do arquivo e, no menu pop-up, selecione Copiar Caminho do ABFS. Depois de copiado, salve-o para mais tarde.
Criar uma casa de eventos e vincular a dados no lakehouse
Crie uma casa de eventos para gerenciar os dados de telemetria para sua frota ou ativos móveis. Um banco de dados KQL é criado automaticamente por padrão. Neste tutorial, você importará os dados ajustados da casa do lago para o banco de dados KQL. Para análise em tempo real, adicione dados de streaming. Depois que os dados forem carregados, você poderá consultar seus dados usando a Linguagem de Consulta Kusto em um conjunto de consultas KQL.
Vá para o Meu workspace e selecione Novo item.
Quando a tela Novo item for exibida, role para baixo e selecione Eventhouse.
Na tela New Eventhouse, insira um nome para sua nova casa de eventos, como SnapToRoadDemo.
Em seguida, vincule a lakehouse que você criou anteriormente à sua nova casa de eventos.
Selecione as reticências ao lado da nova casa de eventos e, em seguida Obter dados > do OneLake no menu pop-up.
Selecione Nova tabela, nomeie-a GPSData e selecione Avançar.
Insira o caminho do ABFS para o arquivo de dados lakehouse (SnapRoadResponses.csv) no controle de arquivo OneLake que você salvou anteriormente e selecione o sinal de adição (+) para adicioná-lo à lista.
Selecione Avançar.
Depois de verificar os dados na tela Inspecionar dados, selecione Concluir.
Selecione Fechar para fechar a página Resumo.
O eventhouse agora deve ser criado e conter os dados de GPS.
Criar painel em tempo real
Um Painel em Tempo Real pode ser criado para se conectar ao seu conjunto de dados na casa de eventos. A entrada neste tutorial são dados estáticos, não um fluxo em tempo real, mas os blocos no painel, como o Visual do Azure Mapas, podem ser usados para representação visual e análise.
Adicionar fonte de dados
Vá para o Meu workspace e selecione Novo item.
Quando a tela Novo item aparecer, pesquise ou role para baixo e selecione Painel em Tempo Real.
Na tela Novo Painel em Tempo Real, insira o nome SnapToRoadDashboard e selecione Criar.
Na nova tela Painel em tempo real, selecione Nova fonte de dados.
Selecione o botão Adicionar e selecione o hub de dados do OneLake.
Selecione sua fonte de dados e, em seguida, Conectar.
Insira um nome de exibição e selecione Adicionar.
Feche o painel Fontes de dados.
Agora que você adicionou a fonte de dados para seu painel em tempo real, você pode adicionar uma consulta e um visual de mapa.
Adicionar visual de consulta e mapa
Selecione Adicionar bloco.
Insira
GPSDatana consulta e selecione Executar. Depois de verificar se a consulta funciona, selecione Adicionar visual.No painel Formatação visual, selecione Mapa na lista suspensa tipo de visual.
Em seguida, defina seus valores na seção Dados:
Configuração de dados valor Definir por local Latitude e longitude Coluna de latitude latitude (real) Coluna de longitude longitude (real) Atualize o cartão de informações do mapa selecionando um valor na lista suspensa coluna de Rótulo. Selecione SpeedLimitInKilometersPerHour.
Selecione Aplicar alterações.
O visual do mapa é exibido. Você pode selecionar qualquer ponto no mapa para obter as coordenadas e limite de velocidade em quilômetros por hora para esse local.
Próximas etapas
Para saber mais sobre notebooks do Microsoft Fabric:
Este tutorial criou um painel para análise de rota pós-viagem. Para obter um guia passo a passo sobre como criar painéis em tempo real no Microsoft Fabric: