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