11

間の距離を計算する必要があります

  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:サンプル結果:

上記のクエリのサンプル結果

更新 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
4

1 に答える 1

18

単位の原則として、出力の長さの単位は入力の長さの単位と同じです。

OSMwayジオメトリ データには、緯度と経度の長さの単位があります ( SRID=4326)。したがって、ST_Distanceからの出力単位には長さ単位の度も含まれますが、これはあまり役に立ちません。

できることはいくつかあります。

  • ST_Distance_Sphereを使用して、メートル単位の速い/おおよその距離を取得します
  • メートル単位の正確な距離にはST_Distance_Spheroidを使用します
  • 緯度/経度のgeometryデータ型をgeographyに変換します。これにより、ST_Distance およびその他の関数がメートルの距離単位を使用するように自動的に作成されます。
于 2012-11-05T01:22:48.903 に答える