Come posso ottenere il valore del distanziometro tra due geometrie in PostGIS?


14

Ho una semplice domanda sul calcolo delle distanze in PostGIS.

Vorrei ottenere la distanza tra due geometrie. Sto usando questo sid: 4269 in metri quello che sto facendo ora è questo: ST_Distance((a.geom,b.geom)) FROM ...ma sto ottenendo risultati in gradi. Penso che dovrei lavorare con la geografia, ma come posso trasmettere un geom a una geografia? Ho provato con (a.geom :: geography) ma sto ricevendo un errore.

Cosa posso fare per ottenere il mio risultato in metri?

Grazie

Risposte:


20

con ST_Distance_Sphere puoi ottenere questo:

ST_Distance_Sphere(a.geom,b.geom)

ERREUR: la fonction st_distance_spheroid (geometria, geometria) n'existe pas ... ho appena aggiunto (a.geom, b.geom, 'SPHEROID ["WGS 84", 6378137,298.257223563]') e ora funziona bene grazie tu molto !
YassineGeoma,

1
bene, hai usato una funzione diversa, st_distance_spheroid che è più lenta di st_distance_sphere ma più precisa.
Francisco Valdez,

Che dire della distanza massima tra 2 geometrie?
vasilakisfil,

La distanza massima sarebbe earth_radius - minimum_distance, che viaggerebbe nella direzione opposta. (rotta + 180º)
Francisco Valdez

1
@ don-prog Funziona per punti 3D e 2D:SELECT ST_Distance_Sphere(ST_GeomFromEWKT('SRID=4326;POINT(-72.1235 42.3521 4)'), ST_GeomFromEWKT('SRID=4326;POINT(-72.1260 42.45 15)'))
Francisco Valdez,

3

Le unità di SRID 4269 ( NAD 83 ) non sono metri - questa è una proiezione geodetica , cioè le coordinate sono gradi (coordinate geografiche).

La risposta di pacofvf ti fornirà la distanza in metri, ma se davvero avevi le tue coordinate iniziali specificate in metri, allora dovresti usare un sistema di coordinate proiettato. Probabilmente per il Nord America vuoi qualcosa come State Plane Coordinate System che ha una serie di proiezioni diverse a seconda della regione che vuoi mappare.

Sospetto però che tu stia usando solo i valori lat / lon, quindi probabilmente questo secondo paragrafo non è rilevante - usa la ST_Distance_Spherefunzione come sopra.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.