Как получить значение метра расстояния между двумя геометриями в PostGIS?

14

У меня простой вопрос о расчете расстояний в PostGIS.

Я хотел бы получить расстояние между двумя геометриями. Я использую этот sid: 4269 в метрах, что я делаю сейчас, это: ST_Distance((a.geom,b.geom)) FROM ...но я получаю результат в градусах. Я думаю, что я должен работать с географией, но как я могу привести геом к географии? Я пытался с (a.geom :: geography), но я получаю ошибку.

Что я могу сделать, чтобы получить результат в метрах?

Спасибо

YassineGeoma
источник

Ответы:

20

с ST_Distance_Sphere вы можете добиться этого:

ST_Distance_Sphere(a.geom,b.geom)
Франсиско Вальдес
источник
ОШИБКА: la stonction 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
Максимальное расстояние будет earth_radius --imum_distance, которое будет путешествовать в противоположном направлении. (курс + 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 даст вам расстояние в метрах, но если вы действительно указали свои начальные координаты в метрах, то вам следует использовать прогнозируемую систему координат. Вероятно, для Северной Америки вы хотите что-то вроде государственной системы координат самолетов, которая имеет ряд различных проекций в зависимости от того, какой регион вы хотите отобразить.

Я подозреваю, что вы просто используете значения широты / долготы, так что, вероятно, этот второй абзац не имеет значения - просто используйте ST_Distance_Sphereфункцию, как указано выше.

Stev_k
источник