2009-12-22 4 views
37

Ich habe in meiner MySQL-Datenbank sowohl Längen- als auch Breitenkoordinaten (GPS-Daten).Wie viele signifikante Ziffern sollte ich in meiner Datenbank für eine GPS-Koordinate speichern?

column  type 
------------------------ 
geolat  decimal(10,6) 
geolng  decimal(10,6) 

Frage:

ist es zur Zeit als gespeicherte Brauche ich wirklich einen Datentyp so groß wie decimal(10,6) richtig Koordinatendaten speichern?

Da ich einen kombinierten Index für den Längen- und Breitengrad habe, ist diese Indexgröße sehr groß. Wenn ich es verkleinern kann, ohne etwas zu kompromittieren, wäre das großartig.

+0

Auch ich weiß, dass MySQL ein SPATIAL-Plugin hat - aber mein Webhost hat das leider nicht installiert, also ist das keine Option (falls jemand es empfiehlt) – teddyk

+0

Willkommen bei StackOverflow! Tolle erste Frage. – Sampson

+0

@ Jonathan, danke! – teddyk

Antwort

33

WGS84 Datum werden normalerweise als Koordinaten in einer vollständig dezimalen Schreibweise angegeben, normalerweise mit 5 Dezimalstellen, so dass für den Breitengrad (-90 bis +90) dezimal (7, 5) (-90.00000 bis 90.00000), z Länge könnte man Dezimal (8, 5) (-180,00000 bis 180,00000) verwenden.

.00001 gives an precision of around a meter at the equator

Die DECIMAL/NUMERIC data type is a fixed precision scaled integer und sowohl positive als auch negative Teile des Bereichs stehen immer zur Verfügung - sie haben keinen Einfluss auf die Genauigkeit oder Skala (es offensichtlich Speicher für es erforderlich ist, aber bekommt man nicht ein Wahl für die DECIMAL)

+1

Nimmt das Vorzeichen (positiv/negativ) nicht Platz ein? Bedeutung, würde nicht "-90.12345" nehmen 8 digital und nicht 7 – teddyk

+2

Ja, es nimmt Platz in der Datenbank, aber der Platzbedarf in der Datenbank für eine gegebene DECIMAL-Spezifikation erlaubt immer ein Zeichen. Ich bin nicht vertraut mit den internen Speicheranforderungen von MySQL, aber für SQL Server, eine Dezimalstelle dauert 5 Bytes (1-9 Ziffern)/9 Bytes (10-19 Ziffern)/13 Bytes (20-28 Ziffern)/17 Bytes (29-38 Ziffern) abhängig von den angegebenen Ziffern der Genauigkeit (offensichtlich unabhängig vom Maßstab). –

+0

Google Maps funktioniert auf 6 Dezimalstellen. Vergrößern Sie Ihr Haus, klicken Sie mit der rechten Maustaste auf die Karte und wählen Sie "In dieser Position zentrieren". Klicken Sie auf den Link-Button direkt außerhalb der Karte, oben links, und suchen Sie dann die GPS-Koordinaten in der Link-URL. Es war 6 Dezimalstellen, als ich es versuchte. – angularsen

0

Das hängt davon ab, wie genau Sie Ihre Lokalisierbarkeit erreichen möchten. Je größer, desto genauer, und je kleiner desto breiter die Ergebnisse. Ich würde vorschlagen, Ihre Werte größer zu halten, da es sowieso nicht viele Daten sind.

+0

Dies ist nur zum Speichern von Geodaten für Haus/Home Location (Immobilien-App). Es muss also nicht sehr genau, aber nahe sein. – teddyk

4

Ich habe immer mit sechs Nachkommastellen gearbeitet. Ich habe GIS-Arbeiten im Rahmen eines Militärvertrags gemacht, und das war ausreichend.

+0

Also, sagst du, dass ich es auf "dezimal (6,6)" ändern könnte und in Ordnung wäre? – teddyk

+0

Aber wie Jonathan bemerkt, hängt es wirklich davon ab, wie genau Sie wollen. Nach meinem Verständnis hat uns die sechsstellige Genauigkeit irgendwo auf +/- 1 Meter gebracht. Das war wichtig, weil wir Bunker voller chemischer Waffen im Auge hatten. –

+1

Ich glaube, die "10" ist die Größe des ganzen Feldes, oder? Sie müssen +/- xxx.xxxxxx für den Längengrad und +/- xx.xxxxxx für den Breitengrad berücksichtigen. –

3

Bedenken Sie, dass es einfacher ist, Daten zu reduzieren als Daten zu erhöhen. Gewöhnlich ist eine Erhöhung der Datengenauigkeit nicht einmal möglich, wenn eine erneute Messung nicht möglich ist. Und das erneute Messen hat seinen Preis. Da ich nichts anderes über Ihre Situation oder die Branche weiß, würde ich sagen, dass Sie möglichst viele Daten/Spezifitäten erfassen sollten.

Die Daten, die Sie tatsächlich verwenden, können aus diesem Satz entnommen werden. Wenn Sie einen höheren Grad an Spezifität benötigen, können Sie immer neu berechnen, ohne erneut zu messen.

Auch ich bin mir nicht sicher, ob die Indexierung von Rohdaten das Beste ist, da es sich nicht um eine diskrete Menge von Elementen handelt. Das Erstellen einer Tabelle mit weniger genauen/kleineren Datenpunkten würde die Indizes viel kleiner machen.

+0

* Stellen Sie immer diese Art von Frage beim Speichern von Daten: Wofür wird es verwendet? Welche Präzision/Reichweite/was wird benötigt, um dies zu erreichen? – mlo

1

Wenn das für Immobilien ist, haben Sie wirklich so viele Häuser, dass 2 Bytes pro Zeile gespart wird, dass auffällig sein? Ich würde so genau wie möglich bleiben, außer es gab einen guten Grund, es nicht zu tun.

+0

Ich bin mehr besorgt über die Größe meines Index, da ich einen kombinierten Index sowohl für den Längen- als auch für den Breitengrad habe. Im Moment ist meine Indexgröße dezimal (10,6) + dezimal (10,6) groß. Das ist sehr groß für einen Index. – teddyk

+0

sollte mit räumlicher Indizierung antworten - aber Sie haben bemerkt, dass Sie nicht verwenden können, weshalb Sie diese Probleme haben. –

0

Die reguläre GGA sentance in einem NMEA Lat/lon-Ausgang ist nur 3 Dezimalstellen von etwa 10m Auflösung am Äquator. Einige Marken fügen eine benutzerdefinierte zusätzliche Ziffer hinzu, um 1m zu geben.

4 Ziffern Grad mm/1000 ist auch üblich.

Wenn Sie High-End-Präzision RTK-GPS verwenden Sie könnten mehr Orte benötigen mm Präzision

0

Sie auch versuchen können, bekommen Speicherung (und/oder die Arbeit mit) Ihre Koordinaten in verschiedenen Einheiten. Bei einem Projekt, an dem ich arbeitete, waren alle unsere Koordinaten in Millisekunden gespeichert, die als Longs gespeichert wurden (vielleicht Ints, es waren ein paar Jahre). Dies wurde teilweise für die Geschwindigkeit und für Speicherplatz (dies war ein eingebettetes System) getan.Aber die gleiche Logik könnte hier gelten.

0

Wenn sich alle Koordinaten in einem bestimmten Bereich befinden, fixieren Sie einen zentralen Punkt (d. H. Durchschnittliche aktuelle Punkte und Runde, um eine Zahl zu erhalten) und speichern Sie dann die Koordinaten relativ zu diesem Punkt. Auf diese Weise können Sie wahrscheinlich die ersten 2-4 höchstwertigen Ziffern überspringen, was zu großen Einsparungen führt. Aber denken Sie daran, diese Daten nur über eine Klasse oder VIEW zu behandeln, die echte WGS84-Koordinaten liefert.

Verwandte Themen