Compartilhar via


Mostrar dados de tráfego no mapa no SDK do iOS (versão prévia)

Os dados de fluxo e os dados de incidentes são os dois tipos de dados de tráfego que podem ser exibidos no mapa. Este guia mostra como exibir os dois tipos de dados de tráfego. Os dados de incidentes consistem em dados baseados em linha e ponto para itens como obras, fechamentos de estrada e acidentes. Os dados de fluxo mostram métricas sobre o fluxo de tráfego em trânsito.

Observação

Desativação do SDK do iOS no Azure Mapas

O SDK Nativo do Azure Mapas para iOS já foi preterido e será desativado em 31/03/25. Para evitar interrupções de serviço, migre para o SDK da Web do Azure Mapas até 31/03/25. Para obter mais informações, confira O guia de migração do SDK do iOS no Azure Mapas.

Pré-requisitos

Conclua o início rápido Criar um aplicativo iOS . Os blocos de código deste início rápido podem ser inseridos na função viewDidLoad de ViewController.

Mostrar tráfego no mapa

Há dois tipos de dados de tráfego disponíveis no Azure Mapas:

  • Dados de incidentes – consistem em dados baseados em ponto e em linha para coisas como obras, fechamentos de estrada e acidentes.

  • Dados de fluxo – fornecem métricas sobre o fluxo do tráfego nas estradas. Os dados de fluxo de tráfego são frequentemente usados para colorir as estradas. As cores são baseadas no quanto o tráfego está diminuindo o fluxo, em relação ao limite de velocidade ou a outra métrica. Há quatro valores que podem ser passados para a opção flow de tráfego do mapa.

    Enumeração de fluxo Descrição
    TrafficFlow.none Não exibe dados de tráfego no mapa
    TrafficFlow.relative Mostra os dados de tráfego relativos à velocidade de fluxo livre da estrada
    TrafficFlow.relativeDelay Exibe áreas em que o trânsito está mais lento do que o atraso médio esperado
    TrafficFlow.absolute Mostra a velocidade absoluta de todos os veículos na estrada

O código a seguir mostra como exibir dados de tráfego no mapa.

// Show traffic on the map using the traffic options.
map.setTrafficOptions([
    .incidents(true),
    .flow(.relative)
])

A captura de tela a seguir mostra o código acima que renderiza as informações de tráfego em tempo real no mapa.

Mapa que mostra informações de tráfego em tempo real.

Obter detalhes do incidente de tráfego

Os detalhes sobre um incidente de tráfego estão disponíveis nas propriedades do recurso usadas para exibir o incidente no mapa. Os incidentes de tráfego são adicionados ao mapa usando o serviço de bloco de vetor de incidente de tráfego dos Azure Mapas. O formato dos dados nesses blocos de vetor pode ser encontrado no artigo Blocos de incidentes vetoriais no site da TomTom. O código a seguir adiciona um delegado ao mapa. Este delegado manipula um evento de clique, recupera o recurso de incidente de tráfego que foi selecionado e exibe um alerta com alguns dos detalhes.

// Show traffic information on the map.
map.setTrafficOptions([
    .incidents(true),
    .flow(.relative)
])

// Add the delegate to handle taps on traffic incidents only.
map.events.addDelegate(self, for: [.trafficIncidentLayerId])
extension ShowDetailedTrafficViewController: AzureMapDelegate {
    func azureMap(_ map: AzureMap, didTapOn features: [Feature]) {
        guard let feature = features.first else {
            // No features provided.
            return
        }

        // Get the incident's type based on icon_category_[idx] property.
        let iconCategoryKeys = ["icon_category"] + (0...9).map { "icon_category_\($0)" }
        let title = iconCategoryKeys
            .compactMap { feature.properties[$0] as? Int }
            .last
            .map { IncidentCategory(categoryNumber: $0).description }

        // Get the incident's description based on description_[idx] property.
        let descriptionKeys = ["description"] + (0...9).map { "description_\($0)" }
        let message = descriptionKeys
            .compactMap { feature.properties[$0] as? String }
            .last
            .map { $0.capitalized }

        // Show an alert with the details.
        let alert = UIAlertController(title: title ?? "Traffic Incident", message: message, preferredStyle: .alert)
        alert.addAction(UIAlertAction(title: "OK", style: .default) { _ in
            alert.dismiss(animated: true)
        })
        present(alert, animated: true)
    }
}

A captura de tela a seguir mostra o código acima que renderiza as informações de tráfego em tempo real no mapa com um alerta que exibe os detalhes do incidente.

Mapa que mostra informações de tráfego em tempo real com uma mensagem de notificação do sistema exibindo detalhes do incidente.

Filtrar incidentes de tráfego

Em um dia típico na maioria das principais cidades, pode haver um grande número de incidentes de tráfego. No entanto, dependendo do cenário, recomendamos filtrar e exibir um subconjunto desses incidentes. Ao definir as opções de tráfego, existem as opções incidentCategoryFilter e incidentMagnitudeFilter que assumem uma matriz enumeradores de categoria ou de magnitude de incidente.

A tabela a seguir mostra todas as categorias de incidentes de tráfego que podem ser usadas na opção incidentCategoryFilter.

Enumeração de categoria Descrição
IncidentCategory.unknown Um incidente que não se ajusta a nenhuma das categorias definidas ou ainda não foi classificado.
IncidentCategory.accident Acidente de tráfego.
IncidentCategory.fog Neblina que reduz a visibilidade, provavelmente reduzindo o fluxo de tráfego e, possivelmente, aumentando o risco de um acidente.
IncidentCategory.dangerousConditions Situação perigosa na estrada, como um objeto na estrada.
IncidentCategory.rain Chuva forte que pode reduzir a visibilidade, dificultando as condições de condução e, possivelmente, aumentando o risco de um acidente.
IncidentCategory.ice Condições de estrada com gelo que podem tornar a condução difícil ou perigosa.
IncidentCategory.jam Congestionamento resultando em um tráfego com movimentação mais lenta.
IncidentCategory.laneClosed Uma pista da estrada está fechada.
IncidentCategory.roadClosed Uma estrada está fechada.
IncidentCategory.roadWorks Obras/construção na estrada nessa área.
IncidentCategory.wind Ventos fortes que podem dificultar a condução de veículos com um grande perfil lateral ou um alto centro de gravidade.
IncidentCategory.flooding Inundação na estrada.
IncidentCategory.detour Tráfego direcionado para um desvio.
IncidentCategory.cluster Um cluster de incidentes de tráfego de diferentes categorias. A ampliação do mapa resulta na separação do cluster em incidentes individuais.

A tabela a seguir mostra todas as magnitudes de incidentes de tráfego que podem ser usadas na opção incidentMagnitudeFilter.

Enumeração de magnitude Descrição
IncidentMagnitude.unknown Um incidente cuja magnitude ainda não foi classificada.
IncidentMagnitude.minor Um problema secundário de tráfego que geralmente é destinado apenas a informações e tem impacto mínimo sobre o fluxo de tráfego.
IncidentMagnitude.moderate Um problema moderado de tráfego que tem algum impacto sobre o fluxo de tráfego.
IncidentMagnitude.major Um problema crítico de tráfego que tem um impacto significativo no fluxo de tráfego.

O código a seguir filtra os incidentes de tráfego de maneira que apenas os congestionamentos de tráfego moderados e os incidentes com condições perigosas sejam exibidos no mapa.

map.setTrafficOptions([
    .incidents(true),
    .incidentMagnitudeFilter([.moderate]),
    .incidentCategoryFilter([.jam, .dangerousConditions])
])

A captura de tela a seguir mostra um mapa de congestionamentos de tráfego moderados e incidentes com condições perigosas.

Mapa de congestionamentos de tráfego moderados e incidentes com condições perigosas.

Observação

Alguns incidentes de tráfego podem ter várias categorias atribuídas. Se um incidente tiver uma categoria que corresponda a qualquer opção transmitida para incidentCategoryFilter, ele será exibido. A categoria primária do incidente pode ser diferente das categorias especificadas no filtro e, portanto, exibir outro ícone.

Informações adicionais

Os artigos a seguir descrevem diferentes maneiras de adicionar dados ao mapa: