Puede usar las extensiones espaciales de MySQL con SIG.
En un ejemplo de código de Google que muestra puntos en un mapa, dicen:
Cuando crea la tabla MySQL, desea prestar especial atención a los atributos lat y lng. Con las capacidades de zoom actuales de Google Maps, solo debería necesitar 6 dígitos de precisión después del decimal.
Para mantener al mínimo el espacio de almacenamiento requerido para nuestra tabla, puede especificar que los atributos lat y lng sean flotantes de tamaño (10,6). Eso permitirá que los campos almacenen 6 dígitos después del decimal, más hasta 4 dígitos antes del decimal, por ejemplo, -123.456789 grados. No me preocuparía por las diferencias de rendimiento entre los tipos numéricos. Los índices decentes tendrán un efecto mucho mayor.
También puedes probar DECIMAL
como sugiere @ gandaliter .
DECIMAL
es el tipo de datos MySQL para aritmética exacta. A diferencia de FLOAT
su precisión, se fija para cualquier tamaño de número, por lo que, al usarlo en lugar de FLOAT
, puede evitar errores de precisión al hacer algunos cálculos. Si solo estuviera almacenando y recuperando los números sin calcular, en la práctica FLOAT
sería seguro, aunque no hay ningún daño en el uso DECIMAL
. Con los cálculos FLOAT
todavía está bien, pero para estar absolutamente seguro de 8d.p. precisión que debes usar DECIMAL
.
Las latitudes varían de -90 a +90 (grados), por lo que DECIMAL(10,8)
está bien para eso, pero las longitudes varían de -180 a +180 (grados), por lo que necesita
DECIMAL(11,8)
. El primer número es el número total de dígitos almacenados, y el segundo es el número después del punto decimal. En resumen: lat DECIMAL(10,8) NOT NULL, lng DECIMAL(11,8) NOT NULL
esto explica cómo funciona MySQL con los tipos de datos de punto flotante.
Información relacionada: