Какая единица измерения используется в ST_Distance ()?

24

Интересно, что это за штука возвращаемого поплавка ST_Distance.

В документации сказано:

... минимальное декартово расстояние (основанное на пространственной привязке) между двумя геометриями в проецируемых единицах.

Каковы эти прогнозируемые единицы?

Геометрия хранится в поле: geometry(Point,4326).

stUrb
источник

Ответы:

36

Я думаю, что это самый частый вопрос в списке PostGIS с течением времени :-)

Если ваши данные в SRID 4326, и вы используете geometrytype, результат не будет иметь никакого значения. Это в градусах.

Чтобы получить результат в метрах, просто geographyнаберите ST_Distanceтекст, а вместо этого вычислите расстояние по большому кругу и верните в метрах.

geometry(Point,4326)::geography

Другой вариант - проецировать ваши данные в какой-либо локальный проект на основе подходящей единицы. Тогда ответ будет в этом блоке.

Никлас Авен
источник
2
Вот пример, чтобы найти расстояние между двумя строками в таблице SELECT ST_Distance (a.geom :: geography, b.geom :: geography) ОТ pure_gis a, pure_gis b WHERE a.id = '1' AND b.id = '2';
Брайан Макколл
4

С http://postgis.net/docs/ST_Distance.html

- Пример геометрии - единицы в плоских градусах 4326 - это WGS 84 длинная широта = градусы

Если ST_Distanceзадано две геометрии, предполагается, что эти геометрии действительно находятся в декартовых (или плоских) координатах. Таким образом, единицы измерения такие же, как в координатах - обычно это метры или футы.

Похоже, ваша проблема в том, что ваша система пространственной привязки, 4326, фактически использует (угловые) географические координаты - градусы длинного широты - поэтому результаты в (несколько бессмысленных) градусах.

Мартин Ф
источник
1
Результаты совершенно бессмысленны, даже несколько.
Пол Рэмси
@PaulRamsey. Разве они не будут такими же, как то, что я получу, «измеряя» расстояния на проекции PlateCaree?
Мартин Ф
На ПК вы получите линейные единицы назад и, по крайней мере, скажете: «Хорошо, я знаю, что эти единицы подвержены серьезным искажениям». Возвращаясь к градусам, люди могут подумать: «Ага, у меня здесь угловое расстояние, просто нужно умножить на 2R, и у меня будет линейное расстояние». Единицы делают плохое измерение, потенциально еще более ужасно вводящее в заблуждение. И компьютер настолько ужасен, что я не знаю, почему он получает имя проекции ... не сохраняет расстояние, не сохраняет направление, не сохраняет область ...
Пол Рэмси,
ПК сохраняет расстояния вдоль экватора и перпендикулярно экватору. Помимо требуемых радианов и преобразований радиуса (по общему признанию, это очень большое неудобство), результаты использования ST_Distance на геометриях 4326 будут иметь такую ​​же общую смесь недостатков и преимуществ, которые необходимо учитывать при использовании ST_Distance с проекционными геометриями. Может быть, лучшая дискуссия должна быть (не "несколько", а "полностью" бессмысленной, но) "Должны ли ST_Distance и ST_Area даже позволять возвращать результаты с учетом 4326 геометрий?"
Мартин Ф