Condividi tramite


Introduzione alle funzioni geospaziali di Analisi di flusso

Le funzioni geospaziali in Analisi di flusso di Azure consentono l'analisi in tempo reale sui dati geospaziali in streaming. 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.

Esempi di scenari che possono trarre vantaggio dalle funzioni geospaziali includono:

  • Servizio di trasporto condiviso
  • Gestione della flotta
  • Tracciamento degli asset
  • Isolamento geografico
  • Rilevamento telefonico tra siti di cella

Il linguaggio di query di Analisi di flusso include sette funzioni geospaziali predefinite: CreateLineString, CreatePoint, CreatePolygon, ST_DISTANCE, ST_OVERLAPS, ST_INTERSECTS e ST_WITHIN.

CreateLineString

La CreateLineString funzione accetta punti e restituisce un elemento LineString GeoJSON, che può essere tracciato come linea su una mappa. Per creare un oggetto LineString, è necessario disporre di almeno due punti. I punti LineString verranno connessi in ordine.

La query seguente usa CreateLineString per creare un oggetto LineString usando tre punti. Il primo punto viene creato dai dati di input di streaming, 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 ulteriori dettagli, visitare la referenza CreateLineString.

CreatePoint

La CreatePoint funzione accetta una latitudine e una longitudine e restituisce un punto GeoJSON, che può essere tracciato su una mappa. Le latitudini e le longitudini devono essere un tipo di dato float.

La query di esempio seguente usa CreatePoint per creare un punto usando latitudine e longitudini dai dati di input di streaming.

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", "coordinates" : [-10.2, 3.0]}

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

Per ulteriori informazioni, visitare la documentazione di CreatePoint.

CreatePolygon

La CreatePolygon funzione accetta punti e restituisce un record poligono GeoJSON. L'ordine dei punti deve seguire l'orientamento dell'anello destro o in senso antiorario. Immagina di camminare da un punto a un altro nell'ordine in cui sono stati dichiarati. Il centro del poligono sarebbe sempre alla tua sinistra.

La query di esempio seguente usa CreatePolygon per creare un 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 ulteriori informazioni, visitare il riferimento CreatePolygon.

ST_DISTANCE

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

La query seguente usa ST_DISTANCE per generare un evento quando una stazione di servizio è inferiore a 10 km dall'auto.

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

Per ulteriori informazioni, visitare la pagina di 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 un edificio si trova all'interno di una possibile zona di inondazione.

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 una tempesta è diretta verso un'auto.

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

Per ulteriori informazioni, consultare 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 pavimentata interseca una strada di sporcizia.

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

Esempio di input

datacenterArea area di tempesta
{"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] ]}

Esempio di output

1

0

Per ulteriori 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 nell'ultima.

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

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

Esempio di input

destinazione di consegna magazzino
{"type":"Point", "coordinate": [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", "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 ulteriori informazioni, visitare la sezione ST_WITHIN.

Passaggi successivi