wake-up-neo.com

Problem beim Speichern von Breiten- und Längengraden in der MySQL-Datenbank

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 ;
17

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.

40
Alin Purcaru

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

8
Johan

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.

7
Billy Moon

Meiner Erfahrung nach ist das optimale Setup DOUBLE (11,8). Denken Sie daran, dass lat/lng> 99 sein kann

2
peerless

Ä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;
0

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 ;
0
Adonias

Dezimal (10,8) ist mehr als genug. Einige GPS-Geräte liefern eine genauere Position.

0
Fredrik