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 .