Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
As funções geoespaciais no Azure Stream Analytics permitem análises em tempo real sobre dados geoespaciais em streaming para cenários como partilha de boleias, gestão de frotas, rastreamento de ativos, geo-vedação e rastreamento telemóvel entre sites móveis. Com apenas algumas linhas de código de consulta, pode construir soluções que utilizam as sete funções incorporadas na Stream Analytics Query Language (CreateLineString, CreatePoint, CreatePolygon, ST_DISTANCE, ST_OVERLAPS, ST_INTERSECTS, e ST_WITHIN), que suportam todos os tipos WKT e GeoJSON point, polygon e LineString. Este artigo descreve cada função e mostra exemplos de consultas para que possa aplicá-las aos seus próprios dados de streaming.
Tipos de geometria e ordem de coordenadas
As funções geoespaciais funcionam com três tipos de geometria GeoJSON. Um ponto é um único local definido por uma longitude e latitude. Um LineString é um conjunto ordenado de dois ou mais pontos que forma uma linha contínua, como uma rota ou uma estrada. Um polígono é uma forma fechada cujo limite retorna ao seu ponto de partida, como uma área de construção ou uma geo-cerca.
As funções dividem-se em dois grupos. As funções construtoras (CreatePoint, CreateLineString, e CreatePolygon) constroem geometrias a partir dos valores de coordenadas nos seus dados de eventos. As funções de relação (ST_DISTANCE, ST_OVERLAPS, ST_INTERSECTS, e ST_WITHIN) comparam duas geometrias e descrevem como se relacionam no espaço.
No GeoJSON, as coordenadas são ordenadas com a longitude primeiro e a latitude em segundo, pelo que os valores de latitude e longitude de entrada aparecem pela ordem inversa na geometria resultante. Compreender esta ordenação, juntamente com a orientação em anel no sentido anti-horário que os polígonos exigem, ajuda a prever a saída de cada função.
CreateLineString
CreateLineString é uma função construtora que retorna um objeto GeoJSON do tipo LineString, uma geometria que representa uma sequência ligada de pontos como uma linha num mapa. Aceita dois ou mais pontos e liga-os pela ordem em que os lista, o que torna uma forma natural de modelar rotas, caminhos e segmentos de estrada a partir de dados em fluxo.
O exemplo seguinte ilustra este comportamento combinando três pontos numa LineString. O primeiro ponto vem do streaming de dados de entrada, e defines os outros dois 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", "coordenadas" : [ [-10.2, 3.0], [10.0, 10.0], [10.5, 10.5] ]}
{"type" : "LineString", "coordenadas" : [ [20.2321, -87.33], [10.0, 10.0], [10.5, 10.5] ]}
Para saber mais, consulte a referência CreateLineString .
CreatePoint
CreatePoint é uma função construtora que retorna um ponto GeoJSON a partir de uma latitude e de uma longitude. Um ponto é a geometria mais básica e representa um único local num mapa, como a posição atual de um veículo ou de um ativo. Os valores de latitude e longitude devem ser um tipo de float dados.
O exemplo seguinte ilustra este comportamento criando um ponto a partir dos valores de latitude e longitude nos dados de entrada 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
{"tipo" : "Ponto", "coordenadas" : [-10.2, 3.0]}
{"tipo" : "Ponto", "coordenadas" : [20.2321, -87.33]}
Para saber mais, consulte a referência ao CreatePoint .
CreatePolygon
CreatePolygon é uma função construtora que devolve um polígono GeoJSON a partir de um conjunto de pontos. Um polígono representa uma área fechada num mapa, como a área de um edifício, o limite de um armazém ou uma geo-cerca. A ordem dos pontos segue a orientação do anel à direita, ou no sentido anti-horário: se imaginar caminhar de um ponto para o outro na ordem em que os declara, o centro do polígono mantém-se à sua esquerda o tempo todo.
O exemplo seguinte ilustra este comportamento criando um polígono a partir de três pontos. Define-se os dois primeiros pontos manualmente, e o último ponto vem 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
{"tipo" : "Polígono", "coordenadas" : [[ [-10.2, 3.0], [10.0, 10.0], [10.5, 10.5], [-10.2, 3.0] ]]}
{"tipo" : "Polígono", "coordenadas" : [[ [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
ST_DISTANCE é uma função de relação que devolve a distância entre duas geometrias em metros. Ajuda-o a perceber a proximidade ou distância de dois locais, o que é útil em cenários de proximidade, como alertas de veículos próximos e cálculos de áreas de serviço.
O exemplo seguinte mostra como usar esta função para identificar quando um posto de gasolina está a menos de 10 km de um carro.
SELECT Cars.Location, Station.Location
FROM Cars c
JOIN Station s ON ST_DISTANCE(c.Location, s.Location) < 10 * 1000
Para saber mais, consulte a ST_DISTANCE referência.
ST_OVERLAPS
ST_OVERLAPS é uma função de relação que compara duas geometrias e reporta se partilham uma região comum. Devolve 1 quando as geometrias se sobrepõem e 0 quando não se sobrepõem. Esta função é útil para detetar conflitos espaciais, como uma zona de perigo a tocar uma área de interesse.
O exemplo seguinte mostra como usar esta função para identificar quando um edifício se encontra dentro de uma possível zona de inundação.
SELECT Building.Polygon, Flooding.Polygon
FROM Building b
JOIN Flooding f ON ST_OVERLAPS(b.Polygon, f.Polygon)
O exemplo seguinte também serve ST_OVERLAPS para detetar quando uma tempestade se dirige para um carro.
SELECT Cars.Location, Storm.Course
FROM Cars c
JOIN Storm s ON ST_OVERLAPS(c.Location, s.Course)
Para saber mais, consulte a referência ST_OVERLAPS .
ST_INTERSECTS
ST_INTERSECTS é uma função de relação que compara duas geometrias e reporta se se cruzam ou se tocam. Devolve 1 quando as geometrias se cruzam e 0 quando não o fazem. Esta função ajuda-te a detetar onde os caminhos ou regiões se encontram.
O exemplo seguinte mostra como usar esta função para determinar se uma estrada pavimentada cruza uma estrada de terra.
SELECT
ST_INTERSECTS(input.pavedRoad, input.dirtRoad)
FROM input
Exemplo de entrada
| Estrada pavimentada | Estrada de terra |
|---|---|
| {"type":"LineString", "coordenadas": [ [-10.0, 0.0], [0.0, 0.0], [10.0, 0.0] ]} | {"type":"LineString", "coordenadas": [ [0.0, 10.0], [0.0, 0.0], [0.0, -10.0] ]} |
| {"type":"LineString", "coordenadas": [ [-10.0, 0.0], [0.0, 0.0], [10.0, 0.0] ]} | {"type":"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 ST_INTERSECTS referência.
ST_WITHIN
ST_WITHIN é uma função de relação que indica se uma geometria está totalmente contida dentro de outra. Devolve 1 quando a primeira geometria está dentro da segunda e 0 quando não está, que é a base para cenários de contenção como geo-fencing e verificações de zonas de entrega.
O exemplo seguinte ilustra este comportamento ao determinar se um ponto de destino de entrega se encontra dentro de um dado polígono de armazém.
SELECT
ST_WITHIN(input.deliveryDestination, input.warehouse)
FROM input
Exemplo de entrada
| destino de entrega | warehouse |
|---|---|
| {"type":"Point", "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] ]} |
| {"type":"Point", "coordenadas": [15.0, 15.0]} | {"type":"Polygon", "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 ST_WITHIN referência.