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 transmissão em fluxo. Com apenas algumas linhas de código, pode desenvolver uma solução de nível de produção para cenários complexos. Estas funções suportam todos os tipos WKT e GeoJSON Point, Polygon e LineString.

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

  • Partilha de boleias
  • Gestão de frotas
  • Controlo de recursos
  • Georrescrição
  • Controlo de telemóvel entre sites de células

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

CreateLineString

A CreateLineString função aceita pontos e devolve um LineString GeoJSON, que pode ser representado como uma linha num mapa. Tem de ter, pelo menos, dois pontos para criar um LineString. Os pontos LineString serão ligados por ordem.

A consulta seguinte utiliza CreateLineString para criar um LineString com três pontos. O primeiro ponto é criado a partir de dados de entrada de transmissão em fluxo, 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 CreatePoint função aceita uma latitude e longitude e devolve um ponto GeoJSON, que pode ser representado num mapa. As latitudes e longitudes têm de ser um tipo de dados flutuante .

A seguinte consulta de exemplo utiliza CreatePoint para criar um ponto com latitudes e longitudes a partir de dados de entrada de transmissão em fluxo.

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 do CreatePoint .

CreatePolygon

A CreatePolygon função aceita pontos e devolve um registo de polígono GeoJSON. A ordem dos pontos tem de seguir a orientação do anel direito ou no sentido contrário aos ponteiros do relógio. Imagine andar de um ponto para outro pela ordem em que foram declarados. O centro do polígono seria à sua esquerda o tempo todo.

A consulta de exemplo seguinte utiliza CreatePolygon para criar um polígono a partir de três pontos. Os primeiros dois 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 ST_DISTANCE função devolve a distância entre duas geometrias em metros.

A consulta seguinte utiliza 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 ST_OVERLAPS função compara duas geometrias. Se as geometrias se sobrepõem, a função devolve um 1. A função devolve 0 se as geometrias não se sobrepõem.

A consulta seguinte utiliza ST_OVERLAPS para gerar um evento quando um edifício está 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 seguinte consulta de exemplo gera um evento quando uma tempestade se dirige para 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 ST_INTERSECTS função compara duas geometrias. Se as geometrias se intersectarem, a função devolve 1. A função devolve 0 se as geometrias não se intercalarem entre si.

A consulta de exemplo seguinte utiliza ST_INTERSECTS para determinar se uma estrada pavimentada intercala uma estrada de terra batida.

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

Exemplo de entrada

datacenterArea stormArea
{"type":"LineString", "coordinates": [ [-10.0, 0.0], [0.0, 0.0], [10.0, 0.0] ]} {"type":"LineString", "coordinates": [ [0.0, 10.0], [0.0, 0.0], [0.0, -10.0] ]}
{"type":"LineString", "coordinates": [ [-10.0, 0.0], [0.0, 0.0], [10.0, 0.0] ]} {"type":"LineString", "coordinates": [ [-10.0, 10.0], [0.0, 10.0], [10.0, 10.0] ]}

Exemplo de saída

1

0

Para saber mais, visite a referência ST_INTERSECTS .

ST_WITHIN

A ST_WITHIN função determina se uma geometria está dentro de outra geometria. Se a primeira estiver contida na última, a função devolverá 1. A função devolverá 0 se a primeira geometria não estiver localizada na última.

A consulta de exemplo seguinte utiliza ST_WITHIN para determinar se o ponto de destino de entrega está dentro do polígono de armazém especificado.

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

Exemplo de entrada

deliveryDestination armazém
{"type":"Point", "coordinates": [76.6, 10.1]} {"type":"Polygon", "coordinates": [ [0.0, 0.0], [10.0, 0.0], [10.0, 10.0], [0.0, 10.0], [0.0, 0.0] ]}
{"type":"Point", "coordinates": [15.0, 15.0]} {"type":"Polygon", "coordinates": [ [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 .

Passos seguintes