php - ubicacion - Problema al almacenar los valores de latitud y longitud en la base de datos MySQL
pintar coordenadas google maps (7)
Quiero almacenar los valores de latitud y longitud obtenidos de la API de codificación geográfica de Google Maps en una base de datos MySQL. Los valores están en formato flotante.
12.9274529
77.5905970
Y cuando quiero almacenarlo en la base de datos (que es el tipo de datos flotante), redondea el flotante y lo almacena en el siguiente formato:
12.9275
77.5906
¿Estoy usando el tipo de datos incorrecto? En caso afirmativo, ¿qué tipo de datos debo usar para almacenar los valores de latitud y longitud?
Actualización:
Aquí está la TABLA DE CREAR según lo solicitado por Allin
CREATE TABLE `properties` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`title` varchar(100) NOT NULL,
`description` text,
`latitude` float DEFAULT NULL,
`longitude` float DEFAULT NULL,
`landmark` varchar(50) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `serial` (`serial`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=3 ;
Decimal (10,8) es más que suficiente. Algunos dispositivos GPS proporcionan una posición más precisa.
La configuración óptima en mi experiencia es DOBLE (11,8), tenga en cuenta que la latencia / lng podría ser> 99
Modifique su mesa para que sea un flotador de doble precisión en lugar de un flotador de precisión simple:
alter table properties modify latitude double, modify longitude double;
MySQL tiene tipos especiales para aplicaciones GIS.
Use el tipo de point
y vea:
http://dev.mysql.com/doc/refman/5.0/en/spatial-extensions.html
Para una discusión general, consulte: http://dev.mysql.com/tech-resources/articles/4.1/gis-with-mysql.html
Algunos individuos hicieron un UDF especial para calcular distancias entre puntos en una esfera (es decir, la tierra)
Consulte: http://www.lenzg.net/archives/220-New-UDF-for-MySQL-5.1-provides-GIS-functions-distance_sphere-and-distance_spheroid.html
Aquí hay un howto: http://howto-use-mysql-spatial-ext.blogspot.com/2007/11/using-circular-area-selection.html
Necesitas usar decimal si no quieres que los números sean aproximados.
Tipos de punto fijo (valor exacto)
Los tipos DECIMAL y NUMÉRICO almacenan valores de datos numéricos exactos. Estos tipos se utilizan cuando es importante preservar la precisión exacta, por ejemplo, con datos monetarios.
Y ahora la respuesta "aquí tienes":
Utilice DECIMAL(10,7)
. Donde 10
es el número total de dígitos en el número y 7
es el número de dígitos después de .
. (Esto significa que antes del punto habrá 3
dígitos).
Ajuste estos números según sea necesario. También, por favor, eche un vistazo a la entrada del manual que vinculé anteriormente en la respuesta.
Utilizar doble
CREATE TABLE `properties` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`title` varchar(100) NOT NULL,
`description` text,
`latitude` Double DEFAULT NULL,
`longitude` Double DEFAULT NULL,
`landmark` varchar(50) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `serial` (`serial`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=3 ;
usar double
float
carece de la precisión necesaria para guardar esa cantidad de dígitos después del punto decimal. double
, aunque no siempre se garantiza que tenga 7 decimales para todos los números, tendrá un lugar donde no haya más de 8 dígitos a la izquierda del decimal, por lo que debe satisfacer sus necesidades.