PostGis: un esempio di query “spaziale” con la funzione ST_DWithin.

PostGis: un esempio di query “spaziale” con la funzione ST_DWithin.

Giugno 7, 2023 0 Di Ruggero Grando

Immaginiamo di utilizzare un database spaziale PostGreSQL con l’estensione PostGIS, e quindi di avere la possibilità di usufruire la funzione ST_DWithin.

In questo esercizio, sarà creata una tabella chiamata “ristoranti” che memorizza la posizione dei vari ristoranti in una città. Ogni ristorante è rappresentato come un punto nel sistema di coordinate con latitudine e longitudine.

La struttura della tabella “Ristoranti” potrebbe essere la seguente:

CampoDescrizione
IdCodice identificativo univoco del ristorante (chiave primaria)
NomeNome ristorante
IndirizzoIndirizzo ristorante
LatitudineLatitudine posizione ristorante
LongitudineLongitudine posizione ristorante
PosizioneCampo di tipo geometry (POINT) che rappresenta la posizione geografica del ristorante nel sistema di riferimento spaziale (SRID) WGS84
Tabella 1
(Descrizione dei campi della tabella “Ristoranti”)

Le descrizioni dei campi presenti nella tabella precedente descrivono in modo esaustivo a cosa servono realmente i campi e quindi non mi dilungo in nessun tipo di spiegazione.

Ora, supponiamo di voler trovare tutti i ristoranti che si trovano a meno di 2000 metri da un certo punto, ad esempio la mia abitazione, le cui coordinate sono (40.748817, -73.985428) (un punto a caso a Manhattan, New York).

Prima di tutto, avremmo bisogno di creare un punto geografico che rappresenta la mia abitazione. Possiamo farlo con la funzione ST_SetSRID e con la funzione ST_MakePoint offerta da PostGis come descritto nella SELECT seguente.

SELECT ST_SetSRID(ST_MakePoint(-73.985428, 40.748817), 4326);

Questa funzione crea un punto geografico con le coordinate della mia abitazione. Il numero 4326 è l’identificatore del sistema di riferimento spaziale (SRID) per le coordinate WGS 84, che è il sistema di coordinate standard utilizzato nella cartografia mondiale e nei sistemi di posizionamento come il GPS.

Ora, possiamo utilizzare la funzione ST_DWithin per trovare i ristoranti entro 2000 metri dalla mia abitazione. Di fatto, ST_DWithin restituisce tutti i punti che sono entro una certa distanza da un altro punto.

SELECT Nome, Indirizzo 
FROM ristoranti 
WHERE ST_DWithin(
    Posizione::geography, 
    ST_SetSRID(ST_MakePoint(-73.985428, 40.748817), 4326)::geography, 
    2000
);

La query sopra descritta restituirà i nomi e gli indirizzi di tutti i ristoranti entro 2000 metri dalla mia abitazione. Abbiamo convertito i campi di tipo geometry a geography usando `::geography` perché ST_DWithin, quando usa i tipi di dati geography, misura la distanza in metri (mentre con i tipi geometry, la distanza è misurata in unità del sistema di riferimento spaziale, che di solito non sono metri).

Questo è solo un esempio di un interrogazione spaziale SQL con l’utilizzo della funzione ST_DWithin.

Conclusioni

Spero di aver trattato l’argomento, e quindi la funzione ST_DWithin in modo esaustivo, ma se qualcuno volesse esporre una qualche perplessità o domanda non esitate a “postare” dei commenti o ad inviarmi un e-mail a webmaster@megalinux.cloud.

Sostenete The Megalinux: In un mare di siti web sovraccarichi di pubblicità invadente, The Megalinux si distingue come l’unico rifugio libero da annunci. Abbiamo scelto di offrirvi un’esperienza di navigazione pulita e ininterrotta, ma per fare ciò, abbiamo bisogno del vostro supporto. Considerate l’idea di contribuire alla nostra missione inviando Bitcoin al nostro indirizzo. Anche una piccola donazione può fare la differenza e ci aiuterà a mantenere il sito libero da pubblicità.

È davvero difficile immaginare che esista qualcuno che, indipendentemente dalle donazioni ricevute (che non ci sono), continui a scrivere in totale libertà, tutto ciò o quasi che trova interessante?

3LpoukFpvDHTZPn5qGbLwUzve3rX9zsSq6

No votes yet.
Please wait...