2011-11-16 5 views
87

Je suis novice à 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 pour la latitude et la longitude?

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

+4

Si vous faites deux points (Carte lat/lon 2D) J'utiliserais le type de données Geometry. Si vous avez besoin d'introduire l'altitude ou la courbure de la terre dans vos calcs de distance, la géographie est l'endroit où vous voulez aller. – Twelfth

+2

Est-ce que l'une des réponses ci-dessous a répondu à votre question?Si oui, je vous encourage à en choisir un comme réponse :) – Volte

+0

est là une réponse pour cela? –

Répondre

81

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 faire 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.

Lisez le bon manuel sur numeric types et geometric types.


Les geometry et geography types de données sont fournies par le module supplémentaire PostGIS et occupent une colonne dans votre table. Chacun occupe 32 octets pour un point. Il y a des frais supplémentaires comme un SRID là-dedans. Ces types stockent (long/lat), pas (lat/long).

Commencez à lire le PostGIS manual here.

+1

Je ne recommanderais pas d'utiliser le type de données 'float'. Cela rend le calcul avec les coordonnées très compliqué. Vous devriez utiliser PostGIS et le type de données 'geography' pour ces calculs. – m13r

+0

C'est vraiment un bon manuel n'est-ce pas? Un exemple brillant dans la documentation. – otocan

17

Je préconise fortement pour PostGis. Il est spécifique à ce type de données et il a des méthodes prêtes à l'emploi pour calculer la distance entre les points, parmi d'autres opérations SIG que vous pouvez trouver utiles dans le futur

4

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

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 spatiale ID de référence qui indique ses données en degrés de longitude et latitude, même que dans le GPS. Plus à ce sujet: http://epsg.io/4326

L'ordre est Longitude, Latitude - donc si vous le tracez comme la carte, il 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 demander, par exemple, 5 plus proche d'un point donné:

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