Единица возвращаемого значения расстояния ST

мне нужно рассчитать расстояние между

  1. все здания и
  2. все больницы

на карте, импортированной из OSM.

Я использую следующий запрос:

SELECT building_id, hospital_id, ST_Distance(building_centroid, hospital_location)
FROM 
(
select planet_osm_polygon.osm_id building_id, ST_Centroid(planet_osm_polygon.way) building_centroid
from planet_osm_polygon
where building = 'yes'
) buildings,
(
select planet_osm_point.osm_id hospital_id, planet_osm_point.way hospital_location
from planet_osm_point  
where amenity = 'hospital') hospitals

Я получаю странные результаты-расстояние всегда меньше 1.

Как я могу узнать единицу, в которой эти значения сообщаются?

обновление 1: образец результат:

Sample result of the query above

обновление 2: этот запрос, кажется, работает

SELECT building_id, hospital_id, ST_Distance_sphere(building_centroid, hospital_location) distance
FROM 
(
select planet_osm_polygon.osm_id building_id, ST_Centroid(planet_osm_polygon.way)  building_centroid
from planet_osm_polygon
where building = 'yes'
) buildings,
(
select planet_osm_point.osm_id hospital_id, planet_osm_point.way hospital_location
from planet_osm_point  
where amenity = 'hospital') hospitals
ORDER BY distance

1 ответов


общее правило для единиц заключается в том, что единицы выходной длины совпадают с единицами входной длины.

OSM way геометрические данные имеют единицы длины градусов широты и долготы (SRID=4326). Поэтому выходные единицы от ST_Distance также будет иметь lenth единиц градусов, которые на самом деле не полезны.

есть несколько вещей, которые вы можете сделать:

  • использовать ST_Distance_Sphere для быстрые / приблизительные расстояния в метрах
  • использовать ST_Distance_Spheroid для accurace расстояния в метрах
  • преобразовать LAT/длинные geometry типы данных geography, что автоматически делает ST_Distance и другие функции для использования линейных единиц метров