Condividi tramite


Introduzione alle funzioni geospaziali di Analisi di flusso

Le funzioni geospaziali in Analisi di flusso di Azure abilitano l'analisi in tempo reale sul flusso di dati geospaziali. Con poche righe di codice, è possibile sviluppare una soluzione di livello di produzione per scenari complessi. Queste funzioni supportano tutti i tipi WKT e GeoJSON Point, Polygon e LineString.

Degli esempi di scenari che possono trarre vantaggio da funzioni geospaziali comprendono:

  • Condivisione delle corse
  • Gestione della flotta
  • Verifica delle risorse
  • Definizione del geo-fencing
  • Rilevamento telefonico tra siti di cella

Linguaggio di query di analisi di flusso ha sette funzioni geospaziali incorporati: CreateLineString, Createpoint(20.0, CreatePolygon, ST_DISTANCE , ST_OVERLAPS, ST_INTERSECTS, e ST_WITHIN.

CreateLineString

La funzione CreateLineString accetta i punti e restituisce un oggetto GeoJSON LineString, che può essere tracciato come una riga in una mappa. È necessario avere almeno due punti per creare una LineString. I punti di LineString verranno connessi in ordine.

La query seguente usa CreateLineString per creare una LineString che usa tre punti. Il primo punto viene creato dall'esecuzione del flusso di dati di input, mentre gli altri due vengono creati manualmente.

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

Esempio di input

latitudine longitudine
3.0 -10.2
-87.33 20.2321

Esempio di output

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

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

Per altre informazioni, visitare il riferimento CreateLineString.

CreatePoint

La funzione CreatePoint accetta una latitudine e longitudine e restituisce un punto GeoJSON, che può essere tracciato su una mappa. I termini di latitudine e longitudine devono essere un tipo di dati float.

La query di esempio seguente usa CreatePoint per creare un punto che usa termini di latitudine e longitudine dall'esecuzione del flusso di dati di input.

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

Esempio di input

latitudine longitudine
3.0 -10.2
-87.33 20.2321

Esempio di output

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

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

Per altre informazioni, visitare il riferimento CreatePoint.

CreatePolygon

La funzione CreatePolygon accetta i punti e restituisce un record di poligono GeoJSON. L'ordine dei punti deve seguire l'orientamento dell'anello a destra, o in senso antiorario. Si immagini da andare da un punto a un altro nell'ordine in cui sono stati dichiarati. Il centro del poligono sarebbe quello di sinistra tutto il tempo.

La query di esempio seguente usa CreatePolygon per creare un'istanza del poligono da tre punti. I primi due punti vengono creati manualmente e l'ultimo punto viene creato dai dati di input.

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

Esempio di input

latitudine longitudine
3.0 -10.2
-87.33 20.2321

Esempio di output

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

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

Per altre informazioni, visitare il riferimento CreatePolygon.

ST_DISTANCE

La ST_DISTANCE funzione restituisce la distanza tra due geometrie in metri.

La query seguente utilizza ST_DISTANCE per generare un evento quando una stazione di rifornimento è a meno di 10 km dalla propria auto.

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

Per altre informazioni, visitare il riferimento ST_DISTANCE.

ST_OVERLAPS

La ST_OVERLAPS funzione confronta due geometrie. Se le geometrie si sovrappongono, la funzione restituisce un valore 1. La funzione restituisce 0 se le geometrie non si sovrappongono.

La query seguente usa ST_OVERLAPS per generare un evento quando una compilazione è all'interno di una possibile zona di flood.

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

La query di esempio seguente genera un evento quando un temporale è diretto verso un'automobile.

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

Per altre informazioni, visitare il riferimento ST_OVERLAPS.

ST_INTERSECTS

La ST_INTERSECTS funzione confronta due geometrie. Se le geometrie si intersecano, la funzione restituisce 1. La funzione restituisce 0 se le geometrie non si intersecano tra loro.

La query di esempio seguente usa ST_INTERSECTS per determinare se una strada asfaltata interseca una strada sterrata.

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

Esempio di input

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

Esempio di output

1

0

Per altre informazioni, visitare il riferimento ST_INTERSECTS.

ST_WITHIN

La ST_WITHIN funzione determina se una geometria si trova all'interno di un'altra geometria. Se il primo è contenuto nell'ultimo, la funzione restituirà 1. La funzione restituirà 0 se la prima geometria non si trova all'interno dell'ultima.

La query di esempio seguente usa ST_WITHIN per determinare se il punto di destinazione di recapito è all'interno del poligono di warehouse specificato.

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

Esempio di input

deliveryDestination warehouse
{"type":"Point", "coordinate": [76.6, 10.1]} {"type":"Polygon", "coordinate": [ [0.0, 0.0], [10.0, 0.0], [10.0, 10.0], [0.0, 10.0], [0.0, 0.0] ]}
{"type":"Point", "coordinate": [15.0, 15.0]} {"type":"Polygon", "coordinate": [ [10.0, 10.0], [20.0, 10.0], [20.0, 20.0], [10.0, 20.0], [10.0, 10.0] ]}

Esempio di output

0

1

Per altre informazioni, visitare il riferimento ST_WITHIN.

Passaggi successivi