web-dev-qa-db-ja.com

緯度と経度のどのデータ型ですか?

私はPostgreSQLとPostGISの初心者です。 PostgreSQL 9.1.1データベーステーブルに緯度と経度の値を保存したい。 2つのポイント間の距離を計算し、この位置の値を使用してより近いポイントを見つけます。

緯度と経度に使用するデータ型はどれですか?

119
user1008404

データ型 point を使用できます-(x,y)を組み合わせて、lat/longにすることができます。 16バイトを占有:2 float8番号を内部的に。

または、タイプ float (= float8またはdouble precision)の2列にします。各8バイト。
または追加の精度が必要ない場合は、real(= float4)。各4バイト。
または偶数 numeric 絶対精度が必要な場合。 4桁のグループごとに2バイト、および3〜8バイトのオーバーヘッド。

数値型 および 幾何学的型 に関する詳細なマニュアルをお読みください。


geometry および geography データ型は追加モジュールによって提供されますPostGISおよびテーブル内のone列を占有します。各ポイントは、32バイトを占有します。 SRIDのような追加のオーバーヘッドがあります。これらのタイプは、(lat/long)ではなく(long/lat)を格納します。

PostGISマニュアルはこちら を読み始めます。

119

PostGISでは、緯度と経度を持つポイントには、geographyデータタイプがあります。

列を追加するには:

alter table your_table add column geog geography;

データを挿入するには:

insert into your_table (geog) values ('SRID=4326;POINT(longitude latitude)');

4326は空間参照IDで、GPSと同様に経度と緯度のデータです。それについての詳細: http://epsg.io/4326

順序は経度、緯度です。したがって、マップとしてプロットする場合は(x、y)です。

最も近いポイントを見つけるには、最初に空間インデックスを作成する必要があります。

create index on your_table using Gist (geog);

そして、例えば、与えられたポイントに最も近い5を要求します:

select * 
from your_table 
order by geog <-> 'SRID=4326;POINT(lon lat)' 
limit 5;
26

PostGis を強く推奨します。これはその種類のデータタイプに固有であり、ポイント間の距離を計算するためのすぐに使用可能なメソッドがあります。他のGIS操作の中で、将来役立つ可能性があります。

22
tvieira

PostGISが提供するすべての機能が必要でない場合、Postgres(現在)は earthdistance と呼ばれる拡張モジュールを提供しています。距離計算の精度のニーズに応じて、 point または cube データ型を使用します。

earth_box関数を使用して、たとえば、場所から一定の距離内にあるポイントを照会できます。

4