È possibile eseguire ricerche spaziali come parte della funzionalità SQL. Le ricerche spaziali possono essere implicite tramite le opzioni selezionate nella finestra di dialogo SQL oppure esplicite utilizzando la parola chiave SPATIAL in una query scritta.
Le ricerche spaziali implicite vengono interamente definite all'interno della finestra di dialogo SQL e possono essere eseguite tra due layer di rete qualsiasi o tra un layer di rete e un layer GIS, come descritto di seguito:
Per includere un campo nella ricerca del layer spaziale, selezionarlo nella casella Campo o inserirlo direttamente nella casella di modifica utilizzando la sintassi gislayer.<nome_campo>.
Esempi di questo tipo di query sono elencati di seguito e sono disponibili nell'argomento della Guida Esempio SQL: condotte critiche.
Se nella query sono definite entrambe le opzioni di selezione della ricerca spaziale e di selezione del tipo di oggetto, la ricerca spaziale viene eseguita per prima. Utilizzando i criteri del tipo di oggetto la query principale viene quindi eseguita sui risultati della ricerca spaziale. Ad esempio:
diameter > 200
Questa query consente di:
diameter > 200
utilizza i dati GIS per trovare tutte le condotte con un diametro superiore a 200 che si trovano entro 2 metri da una strada.
z < 100 AND gislayer.area > 150
Seleziona tutti i nodi con una quota altimetrica minore di 100 che si trovano all'interno di un poligono con un'area maggiore di 150.
Il vantaggio principale dell'utilizzo della parola chiave SPATIAL per le ricerche spaziali è che consente di combinare diverse righe nel blocco SQL, alcune delle quali utilizzano la ricerca spaziale e altre no.
L'esecuzione di ricerche spaziali esplicite utilizzando la parola chiave SPATIAL richiede anche che venga definita la tabella dell'oggetto sulla quale la query dovrà eseguire la ricerca, che viene effettuata tramite una semplice clausola SELECT. L'ordine di scrittura è il seguente:
La sintassi per l'uso della ricerca spaziale nelle query è la seguente:
SPATIAL <geometry type> <layer type> <layer name>; SELECT FROM <object type>;
SPATIAL <geometry type> <layer type> <layer name> <distance>; SELECT FROM <object type>;
| Funzione della sintassi SPATIAL | Opzioni della sintassi | Descrizione | |
|---|---|---|---|
| Tipo geometria | Trasversale | Consente di cercare gli oggetti di rete che intersecano una linea layer o un'area poligono. | |
| Interna | Consente di cercare oggetti di rete all'interno di un poligono layer. | ||
| Contenuto | Consente di cercare poligoni di rete con oggetti layer all'interno del poligono. | ||
| Distanza | Consente di cercare oggetti di rete all'interno di una distanza di ricerca di un punto, una linea o un poligono del layer. | ||
| Più vicino | Consente di cercare l'oggetto di rete più vicino entro una distanza specificata. Se sono presenti più oggetti entro la distanza specificata, il primo trovato viene restituito come risultato. | ||
| Tipo di layer | Rete | Layer oggetto nella rete corrente | |
| GIS | Layer di sfondo GIS visualizzato dietro la rete nella planimetria | ||
| Nome layer | Deve essere una stringa tra virgolette per i layer GIS e un nome di tabella (non tra virgolette, facoltativamente racchiuso da [ ] se è una singola parola senza spazi, o obbligatoriamente racchiuso da [ ] se non lo è) per gli altri oggetti di rete. | ||
| Distanza |
Importante: Il valore Distanza è obbligatorio/utilizzato solo quando si utilizzano i tipi di geometria Distanza o Più vicino.
Suggerimento: Il valore di in put del campo Distanza può essere una costante numerica o una variabile scalare.
|
||
SPATIAL Distance Network Reservoir 30.5; SELECT FROM [All Nodes]
Questa query consente di selezionare prima tutti i nodi che si trovano all'interno di un poligono di rete, quindi tutti i nodi che si trovano entro 30,5 unità di distanza da un oggetto serbatoio.
È inoltre possibile escludere la ricerca spaziale da segmenti di query utilizzando la sintassi seguente:
SPATIAL NONE;
Quando SPATIAL NONE viene aggiunto come blocco ad una query, annulla o rende nulla la clausola SPATIAL (implicita o esplicita) attiva per il resto della query, ad es. la clausola SQL ha il suo significato normale e agisce sui dati nella rete senza riferimento ad alcuna ricerca spaziale. È possibile aggiungere ulteriori clausole SPATIAL ad una query dopo un blocco SPATIAL NONE per introdurre nuove clausole di ricerca spaziale, se lo si desidera.
Ciò consente di creare una combinazione di righe in un blocco SQL, alcune delle quali utilizzano la ricerca spaziale e altre no, garantendo una maggiore flessibilità.
La tabella seguente illustra in dettaglio le combinazioni compatibili di geometrie per ogni tipo di ricerca.
|
Tipo di ricerca spaziale |
Descrizione del tipo di ricerca |
Combinazioni di geometria compatibili |
||||||||
|---|---|---|---|---|---|---|---|---|---|---|
|
Trasversale |
Consente di cercare gli oggetti di rete che intersecano una linea layer o un'area poligono. |
|
||||||||
|
Interna |
Consente di cercare oggetti di rete all'interno di un poligono layer. |
|
||||||||
|
Contenuto |
Consente di cercare poligoni di rete con oggetti layer all'interno del poligono. |
|
||||||||
|
Distanza |
Consente di cercare oggetti di rete all'interno di una distanza di ricerca di un punto, una linea o un poligono del layer. |
|
||||||||
|
Più vicino |
Consente di cercare l'oggetto di rete più vicino entro una distanza specificata. Se sono presenti più oggetti entro la distanza specificata, il primo trovato viene restituito come risultato. |
|