ST_Distance的返回值单位

时间:2012-11-04 19:31:34

标签: postgresql postgis postgresql-9.2

我需要计算

之间的距离
  1. 所有建筑物和
  2. 所有医院
  3. 在从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 个答案:

答案 0 :(得分:14)

单位的一般规则是输出长度单位与输入长度单位相同。

OSM way几何数据具有纬度和经度(SRID=4326)的长度单位。因此,来自ST_Distance的输出单位也将具有最小的度数单位,这些单位不是真正有用。

你可以做几件事:

  • 使用ST_Distance_Sphere表示以米为单位的快速/近似距离
  • 使用ST_Distance_Spheroid表示精确距离(米)
  • 将纬度/经度geometry数据类型转换为geography,自动使ST_Distance和其他函数使用米的线性单位