web-dev-qa-db-fra.com

Quel type de données pour la latitude et la longitude?

Je suis débutant dans PostgreSQL et PostGIS. Je souhaite stocker les valeurs de latitude et de longitude dans la table de base de données PostgreSQL 9.1.1. Je vais calculer la distance entre deux points, trouver des points plus proches en utilisant ces valeurs de localisation.

Quel type de données dois-je utiliser pour la latitude et la longitude?

103
user1008404

Vous pouvez utiliser le type de données point - combine (x,y) qui peut être votre lat/long. Occupe 16 octets: 2 numéros float8 en interne.

Ou faites-en deux colonnes de type float (= float8 ou double precision). 8 octets chacun.
Ou real (= float4) si une précision supplémentaire n'est pas nécessaire. 4 octets chacun.
Ou même numeric si vous avez besoin d'une précision absolue. 2 octets pour chaque groupe de 4 chiffres, plus 3 à 8 octets supplémentaires.

Lisez le manuel détaillé sur les types numériques et les types géométriques .


Les types de données geometry et geography / sont fournis par le module supplémentaire PostGIS et occupent la colonne un de votre tableau. Chacun occupe 32 octets pour un point. Il y a des frais généraux supplémentaires comme un SRID. Ces types stockent (long/lat), pas (lat/long).

Commencez à lire le manuel PostGIS ici .

112
Erwin Brandstetter

Je préconise fortement/ PostGis . Il est spécifique à ce type de données et propose des méthodes prédéfinies pour calculer la distance entre les points, parmi d'autres opérations SIG que vous pourrez juger utiles à l'avenir

21
tvieira

Dans PostGIS, il existe un type de données géographiques pour les points avec latitude et longitude.

Pour ajouter une colonne:

alter table your_table add column geog geography;

Pour insérer des données:

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

4326 est l'ID de référence spatiale indiquant ses données en degrés de longitude et de latitude, comme dans le GPS. Pour en savoir plus: http://epsg.io/4326

L'ordre est la longitude, la latitude - donc si vous la tracez comme la carte, c'est (x, y).

Pour trouver le point le plus proche, vous devez d'abord créer un index spatial:

create index on your_table using Gist (geog);

et ensuite demander, disons, 5 le plus proche d'un point donné:

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

Si vous n’avez pas besoin de toutes les fonctionnalités offertes par PostGIS, Postgres (actuellement) propose un module d’extension appelé earthdistance . Il utilise le type de données point ou cube en fonction de vos besoins en précision pour les calculs de distance.

Vous pouvez maintenant utiliser la fonction earth_box pour interroger, par exemple, des points situés à une certaine distance d'un emplacement.

1
Hans Bouwmeester