Як отримати значення вимірювача відстані між двома геометріями в PostGIS?


14

У мене є просте запитання щодо обчислення відстаней у PostGIS.

Я хотів би отримати відстань між двома геометріями. Я використовую цей sid: 4269 метрів, що я зараз роблю, це таке: ST_Distance((a.geom,b.geom)) FROM ...але я отримую результат у градусах. Я думаю, що я повинен працювати з географією, але як я можу надати геометрію географії? Я намагався з (a.geom :: географія), але я отримую помилку.

Що я можу зробити, щоб отримати результат у метрах?

Дякую

Відповіді:


20

за допомогою ST_Distance_Sphere ви можете досягти цього:

ST_Distance_Sphere(a.geom,b.geom)

ПОМИЛКУ: la fonction st_distance_spheroid (геометрія, геометрія) n'existe pas ... я щойно додав (a.geom, b.geom, 'SPHEROID ["WGS 84", 6378137,298.257223563]') і тепер він працює добре дякую ви дуже сильно!
YassineGeoma

1
добре, ви використовували іншу функцію, st_distance_spheroid, яка повільніше, ніж st_distance_sphere, але більш точна.
Франциско Вальдес

А як щодо максимальної відстані між двома геометріями?
vasilakisfil

Максимальна відстань була б земною радіусом - мінімальна відстань, яка рухалася б протилежно. (заголовок + 180º)
Франциско Вальдес

1
@ don-prog Це працює для 3D та 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)'))
Франсіско Вальдес

3

Одиниці SRID 4269 ( NAD 83 ) не є метрами - це геодезична проекція , тобто координати - це градуси (географічні координати).

відповідь pacofvf дасть вам відстань у метрах, але якщо у вас дійсно були вказані ваші координати, вказані в метрах, то вам слід використовувати проектовану систему координат. Ймовірно, для Північної Америки ви хочете щось на зразок системи штатних літальних координат, яка має кілька різних проекцій, залежно від того, який регіон ви хочете зробити на карті.

Я підозрюю, що ви просто використовуєте значення lat / lon, ймовірно, цей другий абзац не має значення - просто використовуйте ST_Distance_Sphereфункцію, як описано вище.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.