Jak uzyskać wartość miernika odległości między dwiema geometriami w PostGIS?

14

Mam proste pytanie dotyczące obliczania odległości w PostGIS.

Chciałbym uzyskać odległość między dwiema geometriami. Używam tego sid: 4269 w metrach, co teraz robię, to: ST_Distance((a.geom,b.geom)) FROM ...ale otrzymuję wynik w stopniach. Myślę, że powinienem pracować z geografią, ale jak mogę rzucić geom na geografię? Próbowałem z (a.geom :: geography), ale otrzymuję błąd.

Co mogę zrobić, aby uzyskać wynik w metrach?

Dziękuję Ci

YassineGeoma
źródło

Odpowiedzi:

20

dzięki ST_Distance_Sphere możesz to osiągnąć:

ST_Distance_Sphere(a.geom,b.geom)
Francisco Valdez
źródło
ERREUR: la fonction st_distance_spheroid (geometria, geometria) n'existe pas ... właśnie dodałem (a.geom, b.geom, 'SPHEROID ["WGS 84", 6378137,298.257223563]) i teraz działa dobrze, dziękuję ty bardzo!
YassineGeoma,
1
cóż, użyłeś innej funkcji, st_distance_spheroid, która jest wolniejsza niż st_distance_sphere, ale bardziej precyzyjna.
Francisco Valdez,
Co z maksymalną odległością między 2 geometriami?
vasilakisfil
Maksymalna odległość będzie równa promieniowi ziemi - minimalnemu odstępowi, który podróżowałby w drugą stronę. (kurs + 180º)
Francisco Valdez
1
@ don-prog Działa dla punktów 3D i 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

Jednostkami SRID 4269 ( NAD 83 ) nie są metry - jest to rzut geodezyjny , tzn. Współrzędne są stopniami (współrzędne geograficzne).

Odpowiedź pacofvf poda odległość w metrach, ale jeśli naprawdę masz określone współrzędne początkowe w metrach, to powinieneś użyć rzutowanego układu współrzędnych. Prawdopodobnie dla Ameryki Północnej potrzebujesz czegoś w rodzaju układu współrzędnych płaszczyzny stanu, który ma wiele różnych rzutów w zależności od regionu, który chcesz zmapować.

Podejrzewam jednak, że używasz tylko wartości lat / lon, więc prawdopodobnie ten drugi akapit nie jest istotny - po prostu użyj ST_Distance_Spherefunkcji jak wyżej.

Stev_k
źródło