これを行う最も簡単で最速の方法は、座標をgeometry
として保存することです。 またはgeography
分離された座標ペアの代わりに:
ALTER TABLE data ADD COLUMN geog geography (point,4326);
UPDATE data SET geog = ST_MakePoint(lon,lat);
その後、この新しい列に要点インデックスを作成します:
CREATE INDEX idx_data_point ON data USING gist (geog) ;
ST_DWithin
を使用する ST_DistanceSphere
のように、距離をクエリする場合 またはST_Distance
しない 空間インデックスを使用してください!
SELECT ST_Distance(geog,ST_MakePoint(49.9 ,6.7)::geography,true)
FROM data
WHERE ST_DWithin(geog,ST_MakePoint(49.9,6.7),10000,true);
- 注:
true
関数内ST_DWithin
およびST_Distance
use_spheroid =trueを意味します 、これはgeography
のデフォルトです パラメータ。
デモ: db<>fiddle
参照:指定された座標から5マイルの範囲内にあるすべての建物を取得する