2009-12-22 8 views
37

Ho nel mio database MySQL sia le coordinate di longitudine e latitudine (dati GPS).Quante cifre significative dovrei memorizzare nel mio database per una coordinata GPS?

E 'attualmente memorizzato come:

column  type 
------------------------ 
geolat  decimal(10,6) 
geolng  decimal(10,6) 

Domanda: Ho davvero bisogno di un tipo di dati grande come decimal(10,6) per memorizzare correttamente i dati delle coordinate?

Poiché ho un indice combinato su longitudine e latitudine, questa dimensione dell'indice è enorme. Se riesco a renderlo più piccolo senza compromettere nulla, sarebbe fantastico.

+0

Inoltre, mi rendo conto che MySQL ha un plug-in SPATIAL, ma il mio webhost non lo ha installato purtroppo, quindi non è un'opzione (nel caso qualcuno lo raccomandi) – teddyk

+0

Benvenuti in StackOverflow! Ottima prima domanda. – Sampson

+0

@ Jonathan, grazie! – teddyk

risposta

33

WGS84 di solito vengono dati come coordinate in una notazione decimale completa, in genere con 5 posizioni decimali, quindi per la latitudine (da -90 a +90) è possibile utilizzare decimali (7, 5) (da -90.00000 a 90.00000), per longitudine è possibile utilizzare decimale (8, 5) (da -180,00000 a 180,00000).

.00001 gives an precision of around a meter at the equator

I DECIMAL/NUMERIC data type is a fixed precision scaled integer e sia positivi che negativi parti della gamma sono sempre disponibili - non influenzano la precisione o la scala (c'è ovviamente archiviazione richiesta per questo, ma non si ottiene un scelta a riguardo per DECIMAL)

+1

Il segno (positivo/negativo) non occupa spazio? significato, non "-90.12345" occupa 8 digitali e non 7 – teddyk

+2

Sì, occupa spazio nel database, ma lo spazio richiesto nel database per una determinata specifica DECIMALE consente sempre un segno. Non ho familiarità con i requisiti di archiviazione interni di MySQL, ma per SQL Server, un decimale richiede 5 byte (1-9 cifre)/9 byte (10-19 cifre)/13 byte (20-28 cifre)/17 byte (29-38 cifre) a seconda delle cifre di precisione specificate (è indipendente dalla scala, ovviamente). –

+0

Google Maps opera con 6 posizioni decimali. Ingrandisci la casa, fai clic con il tasto destro sulla mappa, quindi seleziona "Centro su questa posizione". Fai clic sul pulsante di collegamento appena fuori dalla mappa, in alto a sinistra, quindi trova le coordinate GPS nell'URL del link. Erano 6 decimali quando l'ho provato. – angularsen

0

Ciò dipende dalla precisione con cui si desidera la localizzazione. Ovviamente più grande è il più preciso, e più piccoli saranno i risultati più ampi. Ti suggerirei di mantenere i tuoi valori più grandi, dato che non sono comunque molti dati.

+0

Questo è solo per memorizzare i dati geografici per la posizione casa/casa (app immobiliare). Quindi non ha bisogno di essere super preciso ma vicino. – teddyk

4

Ho sempre lavorato con sei cifre dopo il decimale. Ero solito fare lavori GIS con un contratto militare e questo era sufficiente.

+0

Quindi, stai dicendo che potrei cambiarlo in "decimale (6,6)" e va bene? – teddyk

+0

Ma come nota Jonathan, dipende davvero dalla precisione che si desidera. Da quanto ho capito, la precisione a sei cifre ci ha portati a circa 1 metro di distanza. Questo era importante perché tenevamo traccia dei bunker pieni di armi chimiche. –

+1

Credo che il "10" sia la dimensione dell'intero campo, non è vero? Dovrai accettare +/- xxx.xxxxxx per longitudine e +/- xx.xxxxxx per latitudine. –

3

Ricordare che è più semplice ridurre i dati che aumentare i dati. Solitamente, l'aumento dell'accuratezza dei dati non è nemmeno possibile a corto di rimisurazione. E il rimisurare ha un costo. Non sapendo nient'altro della vostra situazione o del settore, direi di catturare quanti più dati/specificità possibili.

I dati effettivamente utilizzati possono essere eliminati da questo set. Se si finisce per richiedere un grado più alto di specificità, è sempre possibile ricalcolare senza rimisurare.

Inoltre, non sono sicuro che l'indicizzazione dei dati grezzi sia la cosa migliore da fare poiché non è un insieme discreto di elementi. La creazione di una tabella con meno dati/punti di dati più piccoli renderebbe gli indici molto più piccoli.

+0

* Sempre * chiedi questo tipo di domande quando pensi di immagazzinare dati: a cosa servirà? Quale precisione/gamma/qualunque cosa è necessaria per realizzare questo? – mlo

1

se questo è per il settore immobiliare hai davvero così tante case che 2 byte salvati per fila saranno così visibili? Terrò la massima precisione possibile a meno che non ci fosse una buona ragione per non farlo.

+0

Sono più preoccupato per le dimensioni del mio indice poiché ho un indice combinato su longitudine e latitudine. Così adesso, la mia dimensione dell'indice è decimale (10,6) + decimale (10,6) di dimensione. Che è molto grande per un indice. – teddyk

+0

stava per rispondere con l'indicizzazione spaziale, ma ha notato il tuo commento dicendo che non puoi usarlo, quindi perché stai avendo questi problemi. –

0

La normale frequenza GGA in un output Lat/lon NMEA è di soli 3decimal posti con una risoluzione di circa 10m all'equatore. Alcune marche aggiungono una cifra extra personalizzata per dare 1m.

4 cifre deg.mm mm/1000 è anche comune.

Se si utilizza ad alta precisione end RTK-GPS potrebbe essere necessario più posti per ottenere mm precisione

0

È anche possibile provare la memorizzazione (e/o di lavoro con) le vostre coordinate in unità diverse. Un progetto su cui ho lavorato, tutte le nostre coordinate erano in milliarcseconds memorizzate come long (forse ints, sono passati un paio d'anni). Questo è stato fatto in parte per la velocità e per lo spazio di archiviazione (questo era un sistema embedded).Ma la stessa logica potrebbe applicarsi qui.

0

Se tutte le coordinate si trovano in un'area specifica, fissare un punto centrale (ovvero punti correnti medi e arrotondati per ottenere un numero che si può pronunciare ad alta voce) e quindi memorizzare le coordinate come relative a questo punto. In questo modo è possibile saltare le prime 2-4 cifre più significative, il che consente notevoli risparmi. Ma ricorda di gestire questi dati solo tramite una classe o VISUALIZZA che restituisce vere coordie WGS84.