2009-12-22 13 views
37

Tengo en mi base de datos MySQL las coordenadas de longitud y latitud (datos de GPS).¿Cuántos dígitos significativos debo almacenar en mi base de datos para una coordenada de GPS?

se almacena en la actualidad como:

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

Pregunta: ¿Es realmente necesario un tipo de datos tan grande como decimal(10,6) para almacenar correctamente los datos de coordenadas?

Como tengo un índice combinado de la longitud y la latitud, este tamaño de índice es enorme. Si puedo hacerlo más pequeño sin comprometer nada, sería genial.

+0

Además, me doy cuenta de que MySQL tiene un complemento SPATIAL, pero mi servidor web no lo tiene instalado desafortunadamente, por lo que no es una opción (en caso de que alguien lo recomiende) – teddyk

+0

¡Bienvenido a StackOverflow! Gran primera pregunta. – Sampson

+0

@Jonathan, gracias! – teddyk

Respuesta

33

WGS84 dato se suelen dar como coordenadas en una notación totalmente decimal, generalmente con 5 decimales, por lo que para latitud (-90 a +90) puede usar decimal (7, 5) (-90.00000 a 90.00000), para longitud que podría usar decimal (8, 5) (-180.00000 a 180.00000).

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

Los DECIMAL/NUMERIC data type is a fixed precision scaled integer y tanto positivas como negativas partes de la gama están siempre disponibles - que no afectan a la precisión o escala (es evidente que existe almacenamiento requerido para ello, pero usted no recibe una elección sobre eso para DECIMAL)

+1

¿El signo (positivo/negativo) no ocupa espacio? es decir, no "-90.12345" tomaría 8 digitales y no 7 – teddyk

+2

Sí, ocupa espacio en la base de datos, pero el espacio requerido en la base de datos para una especificación DECIMAL dada siempre permite un signo. No estoy familiarizado con los requisitos de almacenamiento interno de MySQL, pero para SQL Server, un decimal toma 5 bytes (1-9 dígitos)/9 bytes (10-19 dígitos)/13 bytes (20-28 dígitos)/17 bytes (29-38 dígitos) dependiendo de los dígitos de precisión especificados (es independiente de la escala, obviamente). –

+0

Google Maps opera en 6 lugares decimales. Acérquese a su casa, haga clic con el botón derecho en el mapa, luego elija "Centrar en esta posición". Haga clic en el botón de enlace justo fuera del mapa, arriba a la izquierda, luego encuentre las coordenadas GPS en la URL del enlace. Fue 6 decimales cuando lo probé. – angularsen

0

Eso depende de la precisión con la que quiera ubicarlo. Obviamente cuanto más grande sea más preciso, y cuanto menor sea, más amplios serán sus resultados. Te sugiero que mantengas tus valores más grandes, ya que en realidad no son muchos datos.

+0

Esto es solo para almacenar datos geográficos para la ubicación de la casa/hogar (aplicación de bienes raíces). Por lo tanto, no es necesario que sea súper preciso, pero cercano. – teddyk

4

Siempre he trabajado con seis dígitos después del decimal. Solía ​​hacer trabajos GIS bajo un contrato militar y esto fue suficiente.

+0

Entonces, ¿estás diciendo que podría cambiarlo a "decimal (6,6)" y estar bien? – teddyk

+0

Pero, como señala Jonathan, realmente depende de la precisión que desee. Desde mi punto de vista, la precisión de seis dígitos nos llevó a un punto alrededor de +/- 1 metro. Esto fue importante porque estábamos haciendo un seguimiento de los bunkers llenos de armas químicas. –

+1

Creo que el "10" es el tamaño de todo el campo, ¿no? Tendrá que acomodar +/- xxx.xxxxxx para la longitud y +/- xx.xxxxxx para la latitud. –

3

Tenga en cuenta que es más fácil reducir los datos que aumentar los datos. Por lo general, aumentar la precisión de los datos ni siquiera es posible sin volver a medir. Y volver a medir tiene un costo. Al no saber nada más de su situación o la industria, diría que capture la mayor cantidad posible de datos/especificidad.

Los datos que realmente usa pueden seleccionarse de este conjunto. Si termina necesitando un mayor grado de especificidad, siempre puede volver a calcular sin volver a medir.

Además, no estoy seguro de que indexar los datos sin procesar sea lo mejor que se puede hacer, ya que no se trata de un conjunto discreto de elementos. Crear una tabla de puntos de datos menos precisos/más pequeños haría los índices mucho más pequeños.

+0

* Siempre * haga este tipo de preguntas cuando piense en almacenar datos: ¿Para qué se usará? ¿Qué precisión/rango/lo que se necesita para lograr esto? – mlo

1

si esto es para bienes raíces, ¿realmente tiene tantas casas que 2 bytes guardados por fila va a ser tan notable? Mantendría la mayor precisión posible a menos que haya una buena razón para no hacerlo.

+0

Me preocupa más el tamaño de mi índice ya que tengo un índice combinado tanto de longitud como de latitud. Entonces, en este momento, mi tamaño de índice es decimal (10,6) + decimal (10,6) en tamaño. Que es muy grande para un índice. – teddyk

+0

iba a responder con indexación espacial, pero notó su comentario diciendo que no puede usarlo, de ahí que tenga estos problemas. –

0

La representación regular de GGA en una salida NMEA Lat/lon es de solo 3 posiciones décimas aproximadamente 10 m de resolución en el ecuador. Algunas marcas agregan un dígito extra personalizado para dar 1m.

4 dígitos deg.mm mm/1000 también es común.

Si está utilizando alta precisión final RTK-GPS es posible que tenga más lugares para conseguir mm de precisión

0

También puede intentar almacenar (y/o trabajar con) sus coordenadas en diferentes unidades. Un proyecto en el que trabajé, todas nuestras coordenadas estaban en milisegundos almacenados como largos (tal vez ints, han pasado un par de años). Esto se hizo en parte por la velocidad y el espacio de almacenamiento (este era un sistema integrado).Pero la misma lógica podría aplicarse aquí.

0

Si todas las coordenadas están en un área específica, repare un punto central (es decir, puntos actuales medios y redondos para obtener un número que pueda decir en voz alta) y luego almacene las coordenadas relativas a este punto. De esta manera, probablemente pueda omitir los primeros 2-4 dígitos más significativos, lo que significa grandes ahorros. Pero recuerde manejar estos datos solo a través de una Clase o VISTA que devuelva verdaderos coords WGS84.

Cuestiones relacionadas