Ich möchte die von der Google Maps GeoCoding-API abgerufenen Längen- und Breitengrade in einer MySQL-Datenbank speichern. Die Werte liegen im Float-Format vor.
12.9274529
77.5905970
Und wenn ich es in der Datenbank speichern möchte (was Datentyp float ist), rundet es float auf und speichert es in folgendem Format:
12.9275
77.5906
Benutze ich den falschen Datentyp? Wenn ja, welchen Datentyp sollte ich verwenden, um Breiten- und Längengrade zu speichern?
Update:
hier ist die von Allin angeforderte CREATE TABLE
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 ;
Sie müssen decimal verwenden, wenn Sie nicht möchten, dass die Zahlen angenähert werden.
Festkommatypen (exakter Wert)
Die Typen DECIMAL und NUMERIC speichern genaue numerische Datenwerte. Diese Typen werden verwendet, wenn es wichtig ist, eine genaue Genauigkeit zu gewährleisten, beispielsweise bei Währungsdaten.
Und jetzt die Antwort "here you go":
Verwenden Sie DECIMAL(10,7)
. Dabei ist 10
die Gesamtzahl der Ziffern in der Zahl und 7
die Anzahl der Ziffern nach dem .
. (Dies bedeutet, dass vor dem Punkt 3
Ziffern stehen.)
Passen Sie diese Zahlen nach Bedarf an. Auch please werfen Sie einen Blick auf den manuellen Eintrag, den ich zuvor in der Antwort verlinkt habe.
MySQL hat spezielle Typen für GIS-Anwendungen.
Verwenden Sie den Typ point
und sehen Sie:
http://dev.mysql.com/doc/refman/5.0/en/spatial-extensions.html
Eine allgemeine Diskussion finden Sie unter: http://dev.mysql.com/tech-resources/articles/4.1/gis-with-mysql.html
Einige Leute haben eine spezielle UDF für die Berechnung von Entfernungen zwischen Punkten auf einer Kugel (d. H. Erde) erstellt.
Siehe: http://www.lenzg.net/archives/220-New-UDF-for-MySQL-5.1-provides-GIS-functions-distance_sphere-and-distance_spheroid.html
Hier ist eine Anleitung: http://howto-use-mysql-spatial-ext.blogspot.com/2007/11/using-circular-area-selection.html
benutze double
float
hat nicht die erforderliche Genauigkeit, um die Anzahl der Nachkommastellen zu speichern. double
hat, obwohl nicht immer garantiert, 7 Dezimalstellen für alle Zahlen, jedoch nicht mehr als 8 Stellen links von der Dezimalstelle, um Ihren Anforderungen zu entsprechen.
Meiner Erfahrung nach ist das optimale Setup DOUBLE (11,8). Denken Sie daran, dass lat/lng> 99 sein kann
Ändern Sie Ihren Tisch so, dass es sich um einen Gleitkommawert mit doppelter Genauigkeit anstelle eines Gleitkommawerts mit einfacher Genauigkeit handelt:
alter table properties modify latitude double, modify longitude double;
Verwenden Sie Double
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 ;
Dezimal (10,8) ist mehr als genug. Einige GPS-Geräte liefern eine genauere Position.