32

PostgreSQL データベースのテーブルに列がlatitudeあり、PostgreSQL 関数を使用して距離クエリを実行しようとしています。longitudelocation

私はマニュアルのこの章を読みました:

https://www.postgresql.org/docs/current/static/earthdistance.html

しかし、私はそこに何かが欠けていると思います。

どうすればいいですか?利用可能な他の例はありますか

4

5 に答える 5

51

ポイント演算子を使用した別の例を次に示します。

初期設定(一度だけ実行する必要があります):

create extension cube;
create extension earthdistance;

そして、クエリ:

select (point(-0.1277,51.5073) <@> point(-74.006,40.7144)) as distance;

     distance     
------------------
 3461.10547602474
(1 row)

LONGITUDE FIRSTpointsで作成されていることに注意してください。ドキュメントごと:

ポイントは (経度、緯度) として取得され、その逆ではありません。これは、経度が x 軸、緯度が y 軸の直感的な考えに近いためです。

これはひどいデザインです...しかし、それはそうです。

出力はマイル単位になります。

地表上の 2 点間の法定マイルの距離を示します。

于 2014-08-05T13:49:22.487 に答える
9

Earthdistance モジュールが正しくインストールされていると仮定すると、2 つの都市間の距離がマイル単位で表示されます。この方法では、より単純な点ベースの地球距離が使用されます。point() の引数は、最初に経度、次に緯度であることに注意してください。

create table lat_lon (
  city varchar(50) primary key,
  lat float8 not null,
  lon float8 not null
);

insert into lat_lon values
('London, GB', 51.67234320, 0.14787970),
('New York, NY', 40.91524130, -73.7002720);

select 
  (
  (select point(lon,lat) from lat_lon where city = 'London, GB') <@>
  (select point(lon,lat) from lat_lon where city = 'New York, NY')
  ) as distance_miles

distance_miles
--
3447.58672105301
于 2012-04-05T20:10:38.560 に答える