Ricerche SQL e spaziali

È 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.

Ricerche spaziali implicite

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:

  1. Scegliere il tipo di ricerca:
    • Trasversale: consente di cercare gli oggetti di rete che intersecano una linea layer o un'area poligono.
    • Interno: consente di cercare oggetti di rete all'interno di un poligono layer.
    • Contiene: 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'area 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.
  2. Selezionare il tipo di layer:
    • Layer di rete: layer oggetto nella rete corrente
    • Layer GIS: layer di sfondo GIS visualizzato dietro la rete nella planimetria
  3. Selezionare il layer nella casella Layer.
    Nota: Quando si esegue la ricerca utilizzando un layer di GIS, il layer deve essere caricato nella vista Planimetria.
    Nota: Nella query si fa riferimento al layer come gislayer (anche quando si utilizza una rete come tipo di layer).
  4. Se necessario, definire un valore di distanza.
    Importante: Un valore di distanza è obbligatorio/utilizzato solo quando si utilizzano i tipi di ricerca Distanza o Più vicino.

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>.

Nota: I campi spaziali possono essere utilizzati nelle query esattamente allo stesso modo dei campi oggetto di rete.

Esempi di questo tipo di query sono elencati di seguito e sono disponibili nell'argomento della Guida Esempio SQL: condotte critiche.

Sequenza delle operazioni

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:

SQL query context:
  • Tipo di oggetto: Condotta
  • [Spatial] Tipo di ricerca: Trasversale
  • [Spatial] Tipo di layer: Layer GIS
  • [Spatial] Layer: [SHP] Roads


diameter > 200

Questa query consente di:

  1. Cercare eventuali condotte che intersecano strade nel layer "[SHP] Roads"
  2. Utilizzare le condotte del passaggio 1 per selezionare quelle con un diametro maggiore di 200

Esempio 1

SQL query context:
  • Tipo di oggetto: Condotta
  • [Spatial] Tipo di ricerca: Distanza
  • [Spatial] Tipo di layer: Layer GIS
  • [Spatial] Layer: [SHP] Roads
  • [Spatial] Distanza: 2.0


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.

Esempio 2

SQL query context:
  • Tipo di oggetto: Tutti i nodi
  • [Spatial] Tipo di ricerca: Interno
  • [Spatial] Tipo di layer: Layer di rete
  • [Spatial] Layer: Poligoni


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.

Ricerche spaziali esplicite con la parola chiave SPATIAL

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:

  1. SPATIAL blocco di query
  2. SELECT blocco di query
Importante: Le clausole SPATIAL e SELECT sono definite come blocchi di query separati e devono essere separate da un punto e virgola " ; " (come avviene in generale per separare i blocchi di query), anche se si comportano come un unico blocco.

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.

Regole di utilizzo delle parole chiave SPATIAL

  1. Come le query standard, anche le query spaziali osservano le regole di precedenza della finestra di dialogo SQL, vale a dire che le opzioni specificate nelle caselle combinate e nella casella di testo fungono da configurazione spaziale iniziale fino a quando non viene modificata da un'istruzione SPATIAL. Ad esempio:
    SQL query context:
    • Tipo di oggetto: Tutti i nodi
    • [Spatial] Tipo di ricerca: Interno
    • [Spatial] Tipo di layer: Layer di rete
    • [Spatial] Layer: Poligoni


    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.

  2. Qualsiasi clausola SPATIAL rimane in vigore solo fino alla fine del blocco che la contiene, ad es.
    • Se si trova all'interno di un blocco IF/ELSE/ELSEIF, cessa di avere qualsiasi effetto alla fine di tale blocco
    • Se si trova all'interno di un blocco WHILE, cessa di avere qualsiasi effetto alla fine di quel blocco
    • Rimane in vigore in qualsiasi blocco nidificato IF/WHILE contenuto all'interno di un blocco esistente

Esclusione della ricerca spaziale dalle query

È 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à.

Tipo di ricerca spaziale e geometria

La tabella seguente illustra in dettaglio le combinazioni compatibili di geometrie per ogni tipo di ricerca.

Nota:
  • Per i layer GIS ArcGIS Engine e ArcGIS Desktop, il tipo di ricerca Interno consente di trovare oggetti completamente all'interno di un poligono GIS.
  • Per i layer GIS MapXtreme, i layer di rete e i layer rete di sfondo, il tipo di ricerca Inside consente di trovare gli oggetti il cui centro si trova all'interno di un contorno del poligono.
  • Il tipo di ricerca Trasversale consente di includere tutti gli oggetti all'interno di un poligono layer e anche quelli che intersecano il contorno.
  • Il tipo di ricerca Contiene consente di cercare poligoni di rete con oggetti layer completamente contenuti nel poligono di rete.
  • Il tipo di ricerca Più vicino cerca l'oggetto di rete più vicino all'interno di una distanza specificata. Se sono presenti più oggetti entro la distanza specificata, il primo trovato viene restituito come risultato.

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.

Geometria InfoWorks WS Pro

Geometria layer
Linea

Linea

Poligono

Poligono

Linea

Poligono

Interna

Consente di cercare oggetti di rete all'interno di un poligono layer.

Geometria InfoWorks WS Pro

Geometria layer
Punto Poligono
Linea Poligono
Poligono Poligono

Contenuto

Consente di cercare poligoni di rete con oggetti layer all'interno del poligono.

Geometria InfoWorks WS Pro

Geometria layer
Poligono

Punto

Linea

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.

Geometria InfoWorks WS Pro

Geometria layer
Punto

Punto

Linea

Poligono

Linea

Punto

Linea

Poligono

Poligono

Punto

Linea

Poligono

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.

Geometria InfoWorks WS Pro

Geometria layer
Punto

Punto

Linea

Poligono

Linea

Punto

Linea

Poligono

Poligono

Punto

Linea

Poligono