Wie erhalte ich den Entfernungsmesserwert zwischen zwei Geometrien in PostGIS?

13

Ich habe eine einfache Frage zur Berechnung von Entfernungen in PostGIS.

Ich möchte den Abstand zwischen zwei Geometrien ermitteln. Ich benutze dieses Sid: 4269 in Metern, was ich jetzt tue, ist dieses: ST_Distance((a.geom,b.geom)) FROM ...aber ich erhalte Ergebnis in Graden. Ich denke, ich sollte mit Geografie arbeiten, aber wie kann ich ein Geom in eine Geografie umwandeln? Ich habe es mit (a.geom :: geography) versucht, aber ich erhalte einen Fehler.

Was kann ich tun, um mein Ergebnis in Metern zu erhalten?

Danke

YassineGeoma
quelle

Antworten:

20

Mit ST_Distance_Sphere erreichen Sie Folgendes :

ST_Distance_Sphere(a.geom,b.geom)
Francisco Valdez
quelle
FEHLER: Die Funktion st_distance_spheroid (Geometrie, Geometrie) n'existe pas ... Ich habe gerade hinzugefügt (a.geom, b.geom, 'SPHEROID ["WGS 84", 6378137,298.257223563]') und jetzt funktioniert es gut, danke Dich sehr !
YassineGeoma
1
Nun, Sie haben eine andere Funktion verwendet, st_distance_spheroid, die langsamer ist als st_distance_sphere, aber genauer.
Francisco Valdez
Was ist mit dem maximalen Abstand zwischen 2 Geometrien?
Vasilakisfil
Die maximale Entfernung wäre earth_radius - minimum_distance, was umgekehrt wäre. (Richtung + 180º)
Francisco Valdez
1
@ Don-Prog Es funktioniert für 3D-und 2D-Punkt: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

Die Einheiten von SRID 4269 ( NAD 83 ) sind keine Meter - dies ist eine geodätische Projektion , dh die Koordinaten sind Grad (geografische Koordinaten).

Die Antwort von pacofvf gibt Ihnen die Entfernung in Metern an. Wenn Sie jedoch wirklich Ihre Anfangskoordinaten in Metern angegeben haben, sollten Sie ein projiziertes Koordinatensystem verwenden. Wahrscheinlich möchten Sie für Nordamerika so etwas wie das State Plane Coordinate System, das abhängig von der abzubildenden Region eine Reihe unterschiedlicher Projektionen aufweist.

Ich vermute jedoch, dass Sie nur Lat / Lon-Werte verwenden, sodass dieser zweite Absatz wahrscheinlich nicht relevant ist - verwenden Sie einfach die oben beschriebene ST_Distance_SphereFunktion.

Stev_k
quelle