una ubicacion tipo studio servidor pintar para longitud latitud guardar googlemaps google geocodificar enviar datos dato coordenadas con php mysql types floating-point

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.