Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Le funzioni geospaziali in Analisi di flusso di Azure consentono analisi in tempo reale su dati geospaziali in streaming per scenari come ride-sharing, gestione flotta, tracciamento degli asset, geo-fencing e tracciamento telefonico tra siti cellulari. Con poche righe di query code, puoi costruire soluzioni che utilizzano le sette funzioni integrate nel Stream Analytics Query Language (CreateLineString, CreatePoint, CreatePolygon, ST_DISTANCEST_OVERLAPS, ST_INTERSECTS, , e ST_WITHIN), che supportano tutti i tipi WKT e GeoJSON point, polygon e LineString. Questo articolo descrive ogni funzione e mostra esempi di query in modo che tu possa applicarle ai tuoi dati di streaming.
Tipi di geometria e ordine delle coordinate
Le funzioni geospaziali lavorano con tre tipi di geometria GeoJSON. Un punto è una singola posizione definita da una longitudine e una latitudine. Una LineString è un insieme ordinato di due o più punti che forma una linea connessa, come un percorso o una strada. Un poligono è una forma chiusa il cui confine ritorna al punto di partenza, come l'impronta di un edificio o una geo-recinzione.
Le funzioni si dividono in due categorie. Le funzioni costruttrici (CreatePoint, CreateLineString, e CreatePolygon) costruiscono geometrie a partire dai valori delle coordinate nei dati degli eventi. Le funzioni di relazione (ST_DISTANCE, ST_OVERLAPS, ST_INTERSECTS, e ST_WITHIN) confrontano due geometrie e descrivono come si relazionano nello spazio.
In GeoJSON, le coordinate sono ordinate longitudinale prima e latitudine secondaria, quindi una latitudine e una longitudine in ingresso appaiono in ordine inverso nella geometria risultante. Comprendere questo ordinamento, insieme all'orientamento ad anello in senso antiorario che i poligoni richiedono, ti aiuta a prevedere l'output di ogni funzione.
CreateLineString
CreateLineString è una funzione costruttrice che restituisce una GeoJSON LineString, una geometria che rappresenta una serie connessa di punti come una retta su una mappa. Accetta due o più punti e li collega nell'ordine in cui li elenchi, il che lo rende un modo naturale per modellare percorsi, percorsi e segmenti stradali a partire dai dati in streaming.
L'esempio seguente illustra questo comportamento combinando tre punti in una LineString. Il primo punto deriva dallo streaming dei dati di input, e definisci manualmente gli altri due.
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 saperne di più, consulta il riferimento CreateLineString .
CreatePoint
CreatePoint è una funzione costruttrice che restituisce un punto GeoJSON da una latitudine e una longitudine. Un punto è la geometria più basilare e rappresenta una singola posizione su una mappa, come la posizione attuale di un veicolo o di un asset. I valori di latitudine e longitudine devono essere un tipo di float dato.
L'esempio seguente illustra questo comportamento creando un punto dai valori di latitudine e longitudine nei dati di ingresso in 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 saperne di più, consulta il riferimento di CreatePoint.
CreatePolygon
CreatePolygon è una funzione costruttrice che restituisce un poligono GeoJSON da un insieme di punti. Un poligono rappresenta un'area chiusa su una mappa, come l'impronta di un edificio, il confine di un magazzino o una recinzione geografica. L'ordine dei punti segue l'orientamento ad anello a destra, o in senso antiorario: se immagini di camminare da un punto all'altro nell'ordine in cui li dichiari, il centro del poligono rimane alla tua sinistra per tutto il tempo.
L'esempio seguente illustra questo comportamento creando un poligono da tre punti. Definisci manualmente i primi due punti, e l'ultimo punto proviene 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
ST_DISTANCE è una funzione di relazione che restituisce la distanza tra due geometrie in metri. Aiuta a capire quanto siano vicini o lontani due luoghi, il che è utile per scenari di prossimità come allerte di veicoli vicini e calcoli di aree di servizio.
Il seguente esempio mostra come utilizzare questa funzione per identificare quando una stazione di servizio si trova a meno di 10 km da un'auto.
SELECT Cars.Location, Station.Location
FROM Cars c
JOIN Station s ON ST_DISTANCE(c.Location, s.Location) < 10 * 1000
Per saperne di più, consulta il riferimento ST_DISTANCE .
ST_OVERLAPS
ST_OVERLAPS è una funzione di relazione che confronta due geometrie e riporta se condividono una regione comune. Restituisce 1 quando le geometrie si sovrappongono e 0 quando non si sovrappongono. Questa funzione è utile per rilevare conflitti spaziali come una zona di pericolo che tocca un'area di interesse.
Il seguente esempio mostra come utilizzare questa funzione per identificare quando un edificio si trova all'interno di una possibile zona di allagamento.
SELECT Building.Polygon, Flooding.Polygon
FROM Building b
JOIN Flooding f ON ST_OVERLAPS(b.Polygon, f.Polygon)
Il prossimo esempio serve ST_OVERLAPS anche a rilevare quando una tempesta si avvicina a un'auto.
SELECT Cars.Location, Storm.Course
FROM Cars c
JOIN Storm s ON ST_OVERLAPS(c.Location, s.Course)
Per saperne di più, consulta il riferimento ST_OVERLAPS .
ST_INTERSECTS
ST_INTERSECTS è una funzione di relazione che confronta due geometrie e riporta se si incrociano o si toccano. Restituisce 1 quando le geometrie si intersecano e 0 quando non lo fanno. Questa funzione ti aiuta a rilevare dove si incontrano i percorsi o le regioni.
L'esempio seguente mostra come utilizzare questa funzione per determinare se una strada asfaltata incrocia una strada sterrata.
SELECT
ST_INTERSECTS(input.pavedRoad, input.dirtRoad)
FROM input
Esempio di input
| Strada asfaltata | Strada di terra |
|---|---|
| {"type":"LineString", "coordinates": [ [-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", "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
ST_WITHIN è una funzione di relazione che riporta se una geometria è pienamente contenuta in un'altra. Restituisce 1 quando la prima geometria si trova all'interno della seconda e 0 quando non c'è, che è la base per scenari di contenimento come la geo-recinzione e i controlli delle zone di consegna.
L'esempio seguente illustra questo comportamento determinando se un punto di destinazione di consegna si trova all'interno di un dato poligono del magazzino.
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", "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 ulteriori informazioni, visitare la sezione ST_WITHIN.