it-swarm.com.de

Dezimal- oder Punktdatentyp zum Speichern von Geostandortdaten in MySQL

Ich möchte den Geo-Speicherort für jede Adresse in meiner MySQL (Innodb) "tblAddress" -Tabelle speichern und habe 2 Optionen:

1) 2 columns for Each Address:
Latitude DECIMAL(10, 8), 
Longitude DECIMAL(11, 8)

2) One Column for Each Address:
GeoLocation POINT

Mein Programm muss alle Adressen finden, die unter 1 km Radius vom aktuellen Standort (Mobile Client) liegen.

Auch der folgende Befehl funktioniert bei mir nicht, ich bin mir nicht sicher, was ich dafür haben muss.

CREATE SPATIAL INDEX GeoLocation ON tblAddress (GeoLocation);

Was ist der vorgeschlagene Ansatz zum Speichern von Daten für eine schnellere Berechnung und Abfrage hier. Bitte beraten.

8
Prabhat

Sie können die räumlichen Erweiterungen von MySQL mit GIS verwenden.

In einem Codebeispiel von Google , das Punkte auf einer Karte anzeigt, heißt es:

Wenn Sie die MySQL-Tabelle erstellen, möchten Sie den Attributen lat und lng besondere Aufmerksamkeit widmen. Mit den aktuellen Zoomfunktionen von Google Maps sollten Sie nach der Dezimalstelle nur 6 Stellen Genauigkeit benötigen.

Um den für unsere Tabelle erforderlichen Speicherplatz auf ein Minimum zu beschränken, können Sie angeben, dass die Attribute lat und lng Floats der Größe (10,6) sind. Dadurch können die Felder 6 Stellen nach der Dezimalstelle sowie bis zu 4 Stellen vor der Dezimalstelle speichern, z. -123.456789 Grad Ich würde mir keine Sorgen über Leistungsunterschiede zwischen numerischen Typen machen. Anständige Indizes werden eine weitaus größere Wirkung haben.

Sie können auch DECIMAL als @ gandaliter vorschlagen versuchen.

DECIMAL ist der MySQL-Datentyp für exakte Arithmetik. Im Gegensatz zu FLOAT ist die Genauigkeit für jede Zahlengröße festgelegt. Wenn Sie sie also anstelle von FLOAT verwenden, können Sie bei einigen Berechnungen Präzisionsfehler vermeiden. Wenn Sie nur die Zahlen ohne Berechnung speichern und abrufen würden, wäre FLOAT in der Praxis sicher, obwohl die Verwendung von DECIMAL keinen Schaden anrichtet. Mit Berechnungen ist FLOAT meistens noch in Ordnung, aber um absolut sicher zu sein, 8d.p. Genauigkeit sollten Sie DECIMAL verwenden.

Die Breiten reichen von -90 bis +90 (Grad), daher ist DECIMAL(10,8) dafür in Ordnung, aber die Längen reichen von -180 bis +180 (Grad), sodass Sie DECIMAL(11,8) benötigen. Die erste Zahl ist die Gesamtzahl der gespeicherten Ziffern und die zweite die Zahl nach dem Dezimalpunkt. Kurz gesagt: lat DECIMAL(10,8) NOT NULL, lng DECIMAL(11,8) NOT NULLThis erklärt, wie MySQL mit Gleitkomma-Datentypen funktioniert.

Verwandte Informationen:

6
oNare