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:
Campo | Descrizione |
Id | Codice identificativo univoco del ristorante (chiave primaria) |
Nome | Nome ristorante |
Indirizzo | Indirizzo ristorante |
Latitudine | Latitudine posizione ristorante |
Longitudine | Longitudine posizione ristorante |
Posizione | Campo di tipo geometry (POINT) che rappresenta la posizione geografica del ristorante nel sistema di riferimento spaziale (SRID) WGS84 |
(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