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.
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.
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.
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: