2011-01-17 4 views
7

Ich benutze PostgreSQL mit PostGIS. Alle meine Daten haben bereits eine Dezimalstelle lat/long angehängt (d. H. -87.34554 33.12321), aber um PostGIS zu verwenden, muss ich es in einen bestimmten Typ von SRID konvertieren. Die meisten meiner Abfragen suchen nach Daten innerhalb eines bestimmten Radius.Welche SRID sollte ich für meine Anwendung verwenden und wie?

Welche SRID sollte ich verwenden? Ich habe bereits eine Geometrie-Spalte mit SRID 4269 erstellt. In diesem Beispiel: link text der Autor konvertiert SRID 4269 zu SRID 32661. Ich bin sehr verwirrt darüber, wie und wann diese SRIDs verwenden. Jede Lite zu diesem Thema würde wirklich geschätzt werden.

Antwort

6

Solange Sie niemals beabsichtigen, die Daten in ein anderes Koordinatensystem zu reprojizieren/transformieren, ist es technisch egal, welche srid Sie verwenden. Wenn Sie jedoch nicht möchten, dass wichtige Metadaten weggeworfen werden und Sie sie transformieren möchten, sollten Sie sicherstellen, dass Ihr zugewiesenes Srid mit den Daten übereinstimmt. So weiß postgis, was zu tun ist, wenn die Zeit reif ist.

Warum sollten Sie von epsg: 4269 reprojectieren? Die Antwort ist, weil bestimmte Arten von Abfragen (wie Entfernung) in dieser "unprojizierten" Welt keinen Sinn ergeben. Ihre Einheiten sind in Dezimalgraden und eine gerade Messung von x Dezimalgraden ist eine andere reale Entfernung, abhängig davon, wo auf dem Planeten Sie sich befinden.

In Ihrem obigen Beispiel verwendet jemand epsg:32661, weil er glaubt, dass es ihnen eine bessere Genauigkeit für die Arbeitsergebnisse gibt. Wenn sich Ihre Daten in einem bestimmten Bereich des Globus befinden, können Sie eine Projektion auswählen, die genau ist für dieses Gebiet. Wenn es den gesamten Globus umspannt, müssen Sie eine Projektion auswählen, die für Ihre Bedürfnisse "ok" ist.

Nun hat PostGIS glücklicherweise ein paar Möglichkeiten, all das zu vereinfachen. Für ungefähre Entfernungen können Sie einfach die Funktion st_distance_sphere verwenden, die, wie Sie sich vorstellen können, davon ausgeht, dass die Erde eine Kugel ist. Oder das genauere st_distance_spheroid. Mit diesen müssen Sie nicht erneut projizieren, und Sie werden wahrscheinlich für Ihre Distanzabfragen in Ordnung sein, außer in Randfällen. Neuere Versionen von PostGIS können Sie auch verwenden geography columns

tl; dr - verwenden Sie st_distance_spheroid für Ihre Distanzabfragen, speichern Sie Ihre Daten in Geographie Spalten, oder verwandeln Sie es in eine lokale Projektion (beim Speichern oder im laufenden Betrieb, je nach Bedürfnisse).

+0

Ich stimme das deshalb ab: "Die Antwort ist, weil bestimmte Arten von Abfragen (wie Entfernung) in dieser" unprojected "Welt keinen Sinn ergeben. Ihre Einheiten sind in Dezimalgrad und eine gerade Messung von x Dezimalgrad ist eine andere reale Entfernung abhängig davon, wo auf dem Planeten du bist. " In einem "unprojected" Wort gibt es eine Vorstellung von einer Entfernung, hier ist für die Sphäre: (http://en.wikipedia.org/wiki/Great-circle_distance) es ist einfach etwas schwieriger zu berechnen. Soweit Abstandsberechnung in Lat/Lon-Koordinaten ist dies kein Problem in Postgis http://postgis.net/docs/ST_Distance.html –

+0

Fairer Punkt - ich hätte Entfernung als in einem einfachen Unterschied von Lof der Koordinaten bemerkt haben sollte. Aber Ihr Kommentar ist auch irreführend: Die Distanzberechnung, auf die Sie zeigen, ist eine Form des Projizierens von lat/lng (auf eine Kugel in diesem Fall), so dass Sie eine "vernünftige" Distanzantwort erhalten können. Aber es projiziert immer noch. Und während PostGIS dies unter der Haube für Sie mit geografischen Koordinaten tun kann, wird st_distance verwirrende Ergebnisse (z. B. einfache Differenz von Koordinaten) erzeugen, wenn Sie beispielsweise epsg: 4326 mit Geometrie-Spalten verwenden. – jlivni

+0

Es ist nicht irreführend, und ich behaupte nicht, dass "lat/lon in die Sphäre projiziert werden". Ich sage, dass es auf einer Kugel eine Distanz gibt, und man muss keine Kugel projizieren, um sie zu fühlen . lat/lon ist einfach ein Koordinatensystem zur Beschreibung von Punkten auf der Kugel. Sie haben nichts mit Projektionen zu tun, die eine Möglichkeit sind, den N-dimensionalen Raum (in unserem Fall Sphäre) in einen anderen M-dimensionalen Raum (normalerweise eine kartesische 2-dimensionale Ebene) zu transformieren, wo der Begriff der Entfernung intuitiver und klarer ist. Projektion ist das Ergebnis der Transformation von einem Koordinatensystem in ein anderes. –

1

in dieser Frage Werfen Sie einen Blick: How do you know what SRID to use for a shp file?

Die SRID ist nur ein Weg, um die WKT in der Datenbank zu speichern (Sie haben vielleicht bemerkt, dass, altough Sie lat/long Punkte zu speichern, ist die bevorzugte Speicher lang ist String mit Zahl und Großbuchstaben).

Die SRID oder EPSG können für das Land/Staat/... unterschiedlich sein, obwohl es einige sehr häufige vor allem die 2 von Ihnen genannten gibt. Wenn Sie bestimmte Informationen benötigen, welcher Bereich welche SRID verwendet, gibt es eine database for handling that.

In Ihrer Datenbank haben Sie eine Tabelle spatial_ref_sys, die Informationen darüber enthält, was SRID PostGIS kennt.

+0

Wie ich gerne sage "bessere echte Verwirrung als falsche Klarheit". Jedenfalls kam meine Verwirrung von der Tatsache, dass das Beispiel auf dieser Seite: http://unserializableone.blogspot.com/2007/02/using-postgis-to-find-points-of.html die 4269 zu 32661 jedes Mal umwandelte, wenn er machte Abfrage. Hat das mit der Tatsache zu tun, dass er am Ende einige wichtige Daten haben könnte, die 32661 sind, weshalb er sie immer in dieses System umwandelt? Sonst wäre die 4269 in Ordnung? – avatar

+0

@itgorilla Es hängt davon ab, wie Sie es ausgeben. Meistens wird eine JS-Bibliothek für die Anzeige zuständig sein (wie Google Maps, OSM, ...).) und diese Bibliothek muss die Linien, Punkte, ... irgendwo platzieren und wenn die zugrunde liegenden Koordinaten in 4269 benötigt werden, dann muss er sie entsprechend konvertieren. Ich bin kein Experte, also hat vielleicht jemand eine bessere Erklärung dafür. – DrColossos

+0

Wie Sie sehen können, versuche ich das selbst herauszufinden :). Jedenfalls denke ich, je mehr ich lese und frage, desto klarer wird mir, wie das funktioniert. Ich schätze Ihre Hilfe. – avatar