Ich mache ein Astronomieprojekt. Ich möchte, dass die Informationen zu unseren Bildern in einer räumlich aktivierten Datenbank gespeichert werden. Ich denke, dies sollte ein sehr einfacher Spezialfall für GIS-Funktionen sein, da der Himmel als perfekt kugelförmig behandelt werden kann und keine elliptische Behandlung wie die Erdoberfläche erfordert. Leider habe ich noch keinen Weg gefunden, dies zu tun, und ich bin Minen mit räumlichen Funktionen ausgewichen, die eine elliptische Erde verwenden. (So gut wie jede Funktion, die Meter anstelle von Grad zurückgibt, verwendet möglicherweise eine elliptische Berechnung. Glücklicherweise scheinen viele der von mir benötigten PostGIS-Funktionen unvollständig implementiert zu sein, wobei in der Dokumentation ausdrücklich angegeben ist, dass die zurückgegebenen Ergebnisse für eine Kugel und nicht für eine Kugel gelten das Ellipsoid. Dies kann sich jedoch mit zukünftigen Versionen ändern, was Anlass zur Sorge gibt.)
Hintergrund: Ich verwende derzeit PostgreSQL mit PostGIS- und WGS-84-Koordinaten (SRID = 4326). Das funktioniert ziemlich gut. Ich erschaffe ein geschlossenes POLYGON aus dem richtigen Auf- und Abstieg der vier Ecken des Bildes. Ich habe viele Bilder (10k oder mehr), die einen großen Bereich des Himmels bedecken. Jedes Bild hat ein Quadrat von etwa 1 Grad. Aus diesen Bildern mache ich Mosaike aus kleinen Teilmengen von 15 bis 30 Bildern. Jedes Mosaik ist ungefähr 1,5 Grad im Quadrat.
Gegenwärtig speichere ich die Geographie der Mosaike als MULTIPOLYGON, das aus allen POLYGONEN besteht, die jedem Bild entsprechen, das in das Mosaik eingegangen ist. [Eine bessere Lösung wäre, ein einziges POLYGON zu erstellen, das den Umfang der Vereinigung aller einzelnen Polygone beschreibt. Ich weiß nicht, ob dies in sphärischen Koordinaten (dh dem Geografietyp) möglich ist. Dies wäre auch für mich eine interessante Antwort.] Die Datumsgrenze und die Himmelspole sind möglicherweise in einem Bild des Datensatzes enthalten, sodass ich es nach Möglichkeit vermieden habe, auf planare Koordinaten zu projizieren.
Welches Koordinatensystem soll ich für Himmelskoordinaten mit PostGIS-Funktionen verwenden?
Ich habe auf http://spatialreference.org/ geschaut, aber noch nichts gefunden. Google ist wenig aufgetaucht. Ich bin ratlos Grundsätzlich möchte ich sicherstellen, dass eine Funktion, die Meter als Distanz zurückgibt, Meter entlang eines großen Kreises auf einer Kugel ist.
Allgemeiner wäre auch ein Rat für die Verwendung von Himmelskoordinaten in einer räumlichen Datenbank wünschenswert.
Habe ich mich geirrt, als ich PostGIS gewählt habe?
Gibt es weitaus bessere kommerzielle Möglichkeiten?
FOSS Entscheidungen?
Ich benutze PostGIS 1.5.2. Ich habe PostGIS 2.0 noch nicht ausprobiert. Ich bin gespannt, ob die Funktion ST_CoveredBy mit einem POLYGON und einem MULTIPOLYGON vom Typ Geographie funktioniert. Wenn jemand 2.0 ausführt, können Sie mir sagen, ob Sie den gleichen Fehler wie diesen erhalten:
mydb=# select ST_CoveredBy(ST_GeographyFromText('MULTIPOLYGON(( (10.37795 -69.57926,8.9498 -69.54875,9.0178 -69.21643,10.4242 -69.24648,10.37795 -69.57926),(10.42436 -69.24618,9.01774 -69.2162, 9.08363 -68.88389,10.46914 -68.91344,10.42436 -69.24618)))'),ST_GeographyFromText('POLYGON((10.46915 -68.91315,9.08371 -68.88364,9.14755 -68.5513,10.5125 -68.58038,10.46915 -68.91315))'));
ERROR: geography_covers: only POLYGON and POINT types are currently supported
CONTEXT: SQL function "st_coveredby" statement 1
Ich habe PostGIS 2.0 ausprobiert. Diese Funktion kann nur für Punkte und Polygone verwendet werden, nicht für allgemeinere Formen.
quelle
Antworten:
Pgsphere wurde speziell für den Umgang mit astronomischen Daten entwickelt.
http://pgsphere.projects.postgresql.org/
quelle
Es ist möglich, Himmelspositionen in PostGIS zu speichern - Sie müssen nur Ihr eigenes Koordinatensystem erstellen!
PostGIS bezieht alle Informationen zum Koordinatensystem und zur Projektion aus der Tabelle,
spatial_ref_sys
die normalerweise beim Initialisieren der Datenbank ausgefüllt wird. Aber nichts hindert Sie daran, Ihre eigenen Projektionen hinzuzufügen - in der Tat wird dies praktisch empfohlen .Wie bei fast allen GIS- / Geodatenbank- / Mapping-Produkten verwendet PostGIS Proj4 für die Projektionsanforderungen. Daher müssen Sie einen Proj4-String in die
spatial_ref_sys
Tabelle einfügen . Eine einfache sphärische SRS in Proj4 Form ist:+proj=longlat +ellps=sphere +no_defs
. PostGIS erfordert auch eine WKT-Version der Projektion, aber ich denke, das wird nur als hübscher Text verwendet.Sie müssen auch eine eindeutige SRID für Ihren neuen SRS sowie eine "Autorität" erstellen, aber dies kann alles sein, was Sie möchten.
Um einen neuen Eintrag einzufügen
spatial_ref_sys
, führen Sie einfach diese SQL aus:Beachten Sie, dass ich 40000 als SRID gewählt habe - dies ist die Nummer, die Sie in Ihrer Himmelsobjekttabelle verwenden. Die Authroität ist "ME", aber dies kann Ihr Name, Ihre Organisation oder alles sein, was wirklich bis zu 256 Zeichen lang ist. Die nächste Zahl, 1, ist nur Ihre eindeutige Kennung für diesen Eintrag in Bezug auf die Behörde. Theoretisch könnten Sie diesen Eintrag als ME: 1 bezeichnen, aber für die gesamte PostGIS-Verarbeitung zählt die eindeutige SRID. Der WKT-Eintrag, den ich mit GDAL und Python erstellt habe:
Nun die Vorbehalte:
quelle
LON = (RA*15) - 180
undLAT = DEC
?