Ich wollte Geokoordinaten in einer SQL-Datenbanktabelle speichern und fragte mich, welche Auflösung / wieviel Nachkommastellen ich bei den DECIMAL -Werten konfigurieren sollte.
Kartendienste
OpenStreetMap nutzt in der URL maximal 5 Nachkommastellen. Google Maps nutzt immer 7 Nachkommastellen, um Koordinaten in der URL einzubetten. Bing wiederum nutzt 6 Nachkommastellen :)
Mathe
Ein Kreis hat 360°, und Geokoordinaten laufen von -180° bis +180°. Drei Stellen vor dem Komma sind also schonmal gesetzt.
Für die Anzahl der Nachkommastellen müssen wir wissen, wieviel Kilometer mit einem Grad, einem Zehntel, einem hunderstel Grad und so weiter ausgedrückt werden.
Die Erde ist näherungsweise eine Kugel, und wir wollen deshalb eigentlich die Länge eines Kreisbogens mit einem bestimmten Winkel berechnen.
Die Länge eines Bogens b ist b = π × r × α / 180°.
Der Radius der Erde ist 6378,16 Kilometer, also bekommen wir folgende Tabelle:
Stellen | Grad | Länge eines Grades |
---|---|---|
0 | 1 | 111,31 km |
1 | 0,1 | 11,13 km |
2 | 0,01 | 1,11 km |
3 | 0,001 | 111,3 m |
4 | 0,0001 | 11,1 m |
5 | 0,00001 | 1,11 m |
6 | 0,000001 | 0,1 m |
7 | 0,0000001 | 11,1 mm |
8 | 0,00000001 | 1,1 mm |
9 | 0,000000001 | 0,11 mm |
Wenn man eine metergenaue Auflösung haben möchte, muss man mindestens 6 Nachkommastellen nehmen.
Das ist in MySQL DECIMAL(9,6) (9 Stellen insgesamt, 6 Nachkommastellen).