Ich bin es gewohnt, das Standortformat als Breitengrad gefolgt von Längengrad zu sehen, aber wenn ich Bibliotheken verwende, glaube ich, dass ich MySQL verstehe, um es in POINT(LNG LAT)
umgekehrter Reihenfolge zu speichern . Ist meine Bibliothek falsch oder ist dies das tatsächliche Format? Ich kann dieses Detail anscheinend nicht in der MySQL-Dokumentation finden.
9
Antworten:
Konstruktorsyntax
Wenn Sie die räumliche Funktionsreferenz nachschlagen, werden Sie sehen
Das ist nicht ganz richtig. Alle GIS-Implementierungen müssen
(x,y)
für projizierte Koordinaten ausgeführt werden(long,lat)
. Bei geodidischen Koordinatensystemen gibt es jedoch einige Meinungsverschiedenheiten darüber, was zu tun ist. MySQL (und SQL Server) tun dies,(lat,long)
aber PostGIS wird(long,lat)
überall verwaltet.Dies wird in der Spezifikation OpenGIS® Implementation Standard für geografische Informationen - Einfacher Funktionszugriff - Teil 2: SQL-Option ,
Beachten Sie, dass die obigen Wörter wörtlich in Geografische Informationen - Bekannte Textdarstellung von Koordinatenreferenzsystemen enthalten sind
Schon in der 1.1-Spezifikation
Es scheint jedoch, dass PostGIS und Oracle sowie viele Bibliotheken von Drittanbietern
(x,y,[z])
für alle Arten von Punkten verwaltet werden. Dies verstößt gegen die Spezifikation für WKT, ist jedoch eine weit verbreitete Konvention. Zum Beispiel macht GeoJSON dies auch,Die (lat, long) Reihenfolge wird von EPSG für SRSID 4326 explizit definiert .
Sie können auch den Blog von Paul Ramsey (Captain PostGIS) zu diesem Thema mit dem Titel "Let's Call the Whole Thing Off" lesen.
Schönheiten
Als besonderen Hinweis bringt MySQL zwei neue Funktionen in den Mix:
ST_Longitude()
ST_Latitude()
Diese Funktionen stehen neben
ST_X()
undST_Y()
und erfordern eine geographische SRS oder sie werfen eine Ausnahme und Irrtum.Lager
Aus den Dokumenten
Das Speichern wird hier definiert .
quelle
Eine einfache Möglichkeit, die Reihenfolge zu überprüfen, besteht darin, den Breitengrad zu überschreiten:
Gibt FEHLER 3732 (22S03): Ein Parameter der Funktion st_srid enthält eine Geometrie mit dem Breitengrad 160.000000, die außerhalb des Bereichs liegt. Es muss innerhalb von [-90.000000, 90.000000] liegen;
Beachten Sie, dass sich die Reihenfolge abhängig von den von Ihnen verwendeten Funktionen ändern kann:
quelle