2011-11-16 30 views
87

No soy nuevo en PostgreSQL y PostGIS. Quiero almacenar valores de latitud y longitud en la tabla de base de datos de PostgreSQL 9.1.1. Calcularé la distancia entre dos puntos, encontraré los puntos más cercanos usando estos valores de ubicación.¿Qué tipo de datos corresponde a latitud y longitud?

¿Qué tipo de datos debo usar para la latitud y la longitud?

+4

si está haciendo dos puntos (2D lat/lon map) Usaría el tipo de datos Geometry. Si necesita introducir altitud o curvatura de la tierra en sus cálculos de distancia, la geografía es hacia donde desea ir. – Twelfth

+2

¿Respondió alguna de las siguientes preguntas a su pregunta?Si es así, lo animo a que seleccione uno como la respuesta :) – Volte

+0

¿hay alguna respuesta para esto? –

Respuesta

81

Puede usar el tipo de datos point - combina (x,y) que puede ser su latitud/longitud. Ocupa 16 bytes: 2 float8 números internamente.

O hágala dos columnas del tipo float (= float8 o double precision). 8 bytes cada uno.
O real (= float4) Si no se necesita una precisión adicional. 4 bytes cada uno.
O incluso numeric si necesita precisión absoluta. 2 bytes para cada grupo de 4 dígitos, más 3 - 8 bytes de sobrecarga.

Lea el manual fino sobre numeric types y geometric types.


Los tipos de datos y geometrygeography son proporcionados por el módulo adicional PostGIS y ocupan una columna de la tabla. Cada uno ocupa 32 bytes para un punto. Hay algunos gastos generales adicionales como un SRID allí. Estos tipos almacenan (largo/lat), no (lat/long).

empezar a leer el PostGIS manual here.

+1

No recomendaría usar el tipo de datos 'float'. Hace el cálculo con las coordenadas muy complicado. Debe usar PostGIS y el tipo de datos 'geography' para tales cálculos. – m13r

+0

Realmente es un buen manual ¿no? Un brillante ejemplo en la documentación. – otocan

17

Defiendo encarecidamente PostGis. Es específico para ese tipo de tipo de datos y tiene métodos listos para usar para calcular la distancia entre puntos, entre otras operaciones GIS que puede encontrar útiles en el futuro

4

En PostGIS, para los puntos con latitud y longitud, hay tipo de datos geográficos .

Para agregar una columna:

alter table your_table add column geog geography; 

para insertar datos:

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

4326 es espacial ID de referencia que dice que es los datos en grados longitud y latitud, igual que en el GPS. Obtenga más información al respecto: http://epsg.io/4326

El pedido es Longitud, Latitud, por lo que si lo traza como el mapa, es (x, y).

Para encontrar el punto más cercano que necesita primero en crear índice espacial:

create index on your_table using gist (geog); 

y luego solicitar, por ejemplo, 5 más cercano a un punto dado:

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