2011-11-16 9 views
87

Sono novizio di PostgreSQL e PostGIS. Voglio memorizzare i valori di latitudine e longitudine nella tabella del database di PostgreSQL 9.1.1. Calcolerò la distanza tra due punti, trovo i punti più vicini usando questi valori di posizione.Quale tipo di dati per latitudine e longitudine?

Quale tipo di dati devo utilizzare per latitudine e longitudine?

+4

se si sta facendo due punti (Mappa lat/lon 2D) Utilizzerei il tipo di dati Geometry. Se hai bisogno di introdurre l'altitudine o la curvatura della terra nei tuoi calcoli di distanza, la geografia è dove vuoi andare. – Twelfth

+2

Qualcuno delle risposte seguenti ha risposto alla tua domanda?Se è così, ti incoraggio a selezionarne una come risposta :) – Volte

+0

c'è una risposta per questo? –

risposta

81

È possibile utilizzare il tipo di dati point - combina (x,y) che può essere lat/long. Occupa 16 byte: 2 numeri float8 internamente.

Oppure due colonne di tipo (= float8 o double precision). 8 byte ciascuno.
oppure real (= float4) se non è necessaria ulteriore precisione. 4 byte ciascuno.
O anche numeric se avete bisogno di precisione assoluta. 2 byte per ogni gruppo di 4 cifre, più 3 - 8 byte di overhead.

Leggere il manuale di precisione su numeric types e geometric types.


I tipi di dati geometry e geography sono forniti dal modulo aggiuntivo PostGIS e occupano uno colonna nella tabella. Ognuno occupa 32 byte per un punto. C'è un sovraccarico addizionale come un SRID. Questi tipi memorizzano (long/lat), non (lat/long).

Iniziare a leggere il PostGIS manual here.

+1

Non consiglierei di usare il tipo di dati 'float'. Rende molto complicato il calcolo con le coordinate. È necessario utilizzare PostGIS e il tipo di dati 'geography' per tali calcoli. – m13r

+0

È davvero un bel manuale, vero? Un esempio brillante nella documentazione. – otocan

17

Sono fortemente a favore di PostGis. È specifico per quel tipo di datatype e ha metodi pratici per calcolare la distanza tra i punti, tra le altre operazioni GIS che puoi trovare utili in futuro

4

In PostGIS, per i punti con latitudine e longitudine c'è il tipo di dati geografici .

Per aggiungere una colonna:

alter table your_table add column geog geography; 

Per inserire i dati:

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

4326 è ID di riferimento spaziale che dice che è dati in gradi di longitudine e latitudine, come nel GPS. Maggiori informazioni: http://epsg.io/4326

L'ordine è Longitudine, Latitudine, quindi se lo si traccia come mappa, è (x, y).

Per trovare il punto più vicino è necessario prima creare indice spaziale:

create index on your_table using gist (geog); 

e quindi richiedere, ad esempio, 5 più vicina ad un dato punto:

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