Compartilhar via


Introdução às funções geoespaciais do Stream Analytics

As funções geoespaciais no Azure Stream Analytics permitem análises em tempo real em dados geoespaciais de streaming. Com apenas algumas linhas de código, é possível desenvolver uma solução de nível de produção para cenários complexos. Essas funções suportam todos os tipos WKT e ponto, polígono e LineString GeoJSON.

Exemplos de cenários que podem se beneficiar de funções geoespaciais incluem:

  • Compartilhamento de percurso
  • Gerenciamento de frota
  • Acompanhamento de ativos
  • Isolamento geográfico
  • Rastreamento por telefone em sites de celular

A Linguagem de Consulta do Stream Analytics tem sete funções geoespaciais internas: CreateLineString, CreatePoint, CreatePolygon, ST_DISTANCE, ST_OVERLAPS, ST_INTERSECTS e ST_WITHIN.

CreateLineString

A função CreateLineString aceita pontos e retorna um LineString GeoJSON, que pode ser plotado como uma linha em um mapa. É necessário ter pelo menos dois pontos para criar um LineString. Os pontos de LineString serão conectados em ordem.

A consulta a seguir usa CreateLineString para criar um LineString usando três pontos. O primeiro ponto é criado a partir dos dados de entrada de streaming, enquanto os outros dois são criados manualmente.

SELECT  
     CreateLineString(CreatePoint(input.latitude, input.longitude), CreatePoint(10.0, 10.0), CreatePoint(10.5, 10.5))  
FROM input  

Exemplo de entrada

latitude longitude
3.0 -10.2
-87.33 20.2321

Exemplo de saída

{"type" : "LineString", "coordinates" : [ [-10.2, 3.0], [10.0, 10.0], [10.5, 10.5] ]}

{"type" : "LineString", "coordinates" : [ [20.2321, -87.33], [10.0, 10.0], [10.5, 10.5] ]}

Para saber mais, visite a referência CreateLineString.

CreatePoint

A função CreatePoint aceita uma latitude e longitude e retorna um ponto GeoJSON, que pode ser plotado em um mapa. As latitudes e longitudes devem ser um tipo de dados float.

A consulta de exemplo a seguir usa CreatePoint para criar um ponto usando latitudes e longitudes dos dados de entrada de streaming.

SELECT  
     CreatePoint(input.latitude, input.longitude)  
FROM input 

Exemplo de entrada

latitude longitude
3.0 -10.2
-87.33 20.2321

Exemplo de saída

{"type" : "Point", "coordinates" : [-10.2, 3.0]}

{"type" : "Point", "coordinates" : [20.2321, -87.33]}

Para saber mais, visite a referência CreatePoint.

CreatePolygon

A função CreatePolygon aceita pontos e retorna um registro de polígono GeoJSON. A ordem dos pontos deve seguir a orientação do polígono direito ou sentido anti-horário. Imagine andar de um ponto a outro na ordem em que foram declarados. O centro do polígono estaria à esquerda o tempo todo.

A consulta de exemplo a seguir usa CreatePolygon para criar um polígono a partir de três pontos. Os dois primeiros pontos são criados manualmente e o último ponto é criado a partir dos dados de entrada.

SELECT  
     CreatePolygon(CreatePoint(input.latitude, input.longitude), CreatePoint(10.0, 10.0), CreatePoint(10.5, 10.5), CreatePoint(input.latitude, input.longitude))  
FROM input  

Exemplo de entrada

latitude longitude
3.0 -10.2
-87.33 20.2321

Exemplo de saída

{"type" : "Polygon", "coordinates" : [[ [-10.2, 3.0], [10.0, 10.0], [10.5, 10.5], [-10.2, 3.0] ]]}

{"type" : "Polygon", "coordinates" : [[ [20.2321, -87.33], [10.0, 10.0], [10.5, 10.5], [20.2321, -87.33] ]]}

Para saber mais, visite a referência CreatePolygon.

ST_DISTANCE

A função ST_DISTANCE retorna a distância entre dois polígonos, em metros.

A consulta a seguir usa ST_DISTANCE para gerar um evento quando um posto de gasolina está a menos de 10 km do carro.

SELECT Cars.Location, Station.Location 
FROM Cars c  
JOIN Station s ON ST_DISTANCE(c.Location, s.Location) < 10 * 1000

Para saber mais, visite a referência ST_DISTANCE.

ST_OVERLAPS

A função ST_OVERLAPS compara dois polígonos. Se os polígonos se sobrepuserem, a função retornará 1. A função retornará 0, se os polígonos não se sobrepuserem.

A consulta a seguir usa ST_OVERLAPS para gerar um evento quando uma construção estiver dentro de uma possível zona de inundação.

SELECT Building.Polygon, Building.Polygon 
FROM Building b 
JOIN Flooding f ON ST_OVERLAPS(b.Polygon, b.Polygon) 

A consulta de exemplo a seguir gera um evento quando uma tempestade indo em direção a um carro.

SELECT Cars.Location, Storm.Course
FROM Cars c, Storm s
JOIN Storm s ON ST_OVERLAPS(c.Location, s.Course)

Para saber mais, visite a referência ST_OVERLAPS.

ST_INTERSECTS

A função ST_INTERSECTS compara dois polígonos. Se houver intersecção entre os polígonos, a função retornará 1. Se não houver, a função retornará 0.

A consulta de exemplo a seguir usa ST_INTERSECTS para determinar se uma estrada pavimentada intersecciona uma estrada de terra.

SELECT  
     ST_INTERSECTS(input.pavedRoad, input.dirtRoad)  
FROM input  

Exemplo de entrada

datacenterArea stormArea
{"tipo":"LineString", "coordenadas": [ [-10.0, 0.0], [0.0, 0.0], [10.0, 0.0] ]} {"tipo":"LineString", "coordenadas": [ [0.0, 10.0], [0.0, 0.0], [0.0, -10.0] ]}
{"tipo":"LineString", "coordenadas": [ [-10.0, 0.0], [0.0, 0.0], [10.0, 0.0] ]} {"tipo":"LineString", "coordenadas": [ [-10.0, 10.0], [0.0, 10.0], [10.0, 10.0] ]}

Exemplo de saída

1

0

Para saber mais, visite a referênciaST_INTERSECTS.

ST_WITHIN

A função ST_WITHIN determina se um polígono está dentro de outro. Se o primeiro estiver contido no segundo, a função retornará 1. Se não estiver, a função retornará 0.

A consulta de exemplo a seguir usa ST_WITHIN para determinar se o ponto de destino de entrega está dentro do polígono do depósito especificado.

SELECT  
     ST_WITHIN(input.deliveryDestination, input.warehouse)  
FROM input 

Exemplo de entrada

deliveryDestination depósito
{"tipo":"Ponto", "coordenadas": [76.6, 10.1]} {"tipo":"Polígono", "coordenadas": [ [0.0, 0.0], [10.0, 0.0], [10.0, 10.0], [0.0, 10.0], [0.0, 0.0] ]}
{"tipo":"Ponto", "coordenadas": [15.0, 15.0]} {"tipo":"Polígono", "coordenadas": [ [10.0, 10.0], [20.0, 10.0], [20.0, 20.0], [10.0, 20.0], [10.0, 10.0] ]}

Exemplo de saída

0

1

Para saber mais, visite a referência ST_WITHIN.

Próximas etapas