Je suis novice 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?
postgresql
types
latitude-longitude
postgis
user1008404
la source
la source
Réponses:
Vous pouvez utiliser le type de données
point
- combine(x,y)
qui peut être votre lat / long. Occupe 16 octets: 2float8
nombres en interne.Ou faites-en deux colonnes de type
float
(=float8
oudouble 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 de surcharge.Lisez le manuel détaillé sur les types numériques et les types géométriques .
Les types de données
geometry
etgeography
sont fournis par le module supplémentaire PostGIS et occupent une colonne dans votre tableau. Chacun occupe 32 octets pour un point. Il y a des frais généraux supplémentaires comme un SRID là-dedans. Ces types stockent (long / lat), pas (lat / long).Commencez à lire le manuel PostGIS ici .
la source
float
type de données. Cela rend le calcul avec les coordonnées très compliqué. Vous devez utiliser PostGIS et legeography
type de données pour de tels calculs.Dans PostGIS, pour les points avec latitude et longitude, il existe un type de données géographie.
Pour ajouter une colonne:
Pour insérer des données:
4326 est l'ID de référence spatiale qui indique que ses données sont exprimées en degrés de longitude et de latitude, comme dans le GPS. En savoir plus: http://epsg.io/4326
L'ordre est la longitude, la latitude - donc si vous la tracez comme carte, c'est (x, y).
Pour trouver le point le plus proche, vous devez d'abord créer un index spatial:
puis demandez, disons, 5 plus proches d'un point donné:
la source
Je préconise fortement PostGis . Il est spécifique à ce type de données et dispose de méthodes prêtes à l'emploi pour calculer la distance entre les points, entre autres opérations SIG que vous pourrez trouver utiles à l'avenir.
la source
Si vous n'avez pas besoin de toutes les fonctionnalités offertes par PostGIS, Postgres propose (de nos jours) un module d'extension appelé earthdistance . Il utilise le point ou le cube type de données fonction de vos besoins de précision pour les calculs de distance.
Vous pouvez maintenant utiliser la fonction earth_box pour - par exemple - rechercher des points à une certaine distance d'un emplacement.
la source
Dans PostGIS, la géométrie est préférée à la géographie (modèle de terre ronde) car les calculs sont beaucoup plus simples et donc plus rapides. Il a également BEAUCOUP plus de fonctions disponibles mais est moins précis sur de très longues distances.
Importez votre CSV dans les champs de lat long vers les
DECIMAL(10,6)
colonnes. 6 chiffres correspondent à une précision de 10 cm, ce qui devrait être suffisant pour la plupart des cas d'utilisation.Puis diffusez vos données importées
Vérifiez que le SRID n'est pas nul!
Validez l'ordre de votre paramètre de lat longue à l'aide d'un visualiseur WKT et
ST_AsEWKT(target_table.geom)
.Ensuite, indexez-le pour de meilleures performances
la source