In welchem ​​Koordinatensystem sollten Geografiedaten für Himmelskoordinaten gespeichert werden?

37

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.

Dr. Person Person II
quelle
Ist das nicht ähnlich wie bei wcs2kml? Wenn ja, könnten Sie vielleicht einen Teil des Codes für Ihre Zwecke anpassen. code.google.com/p/wcs2kml
Kirk Kuykendall
Ich bin auf diese USGS-Präsentation "PLANETARY GIS 101" gestoßen und habe kurz gesehen, dass es ein paar Folien mit Projektionen gibt. Vielleicht hilft es Ihnen.
Jonatr
Warum nicht mehrere Polygone mit einer gemeinsamen Gruppierungs-ID erstellen, anstatt mehrere Polygone zu erstellen?
Raffael

Antworten:

17

Pgsphere wurde speziell für den Umgang mit astronomischen Daten entwickelt.

http://pgsphere.projects.postgresql.org/

Paul Ramsey
quelle
Das ist sehr gutes Zeug. Leider scheint es keine "smultipoly" -Geometrieklasse zu unterstützen. Vielen Dank für das großartige Heads-up zu diesem Projekt.
Dr. Person Person II
1
Wenn ich versuche, diesem Link zu folgen, erhalte ich die Meldung "Verboten Sie haben keine Berechtigung zum Zugriff auf / auf diesem Server."
PolyGeo
12

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_sysdie 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_sysTabelle 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:

insert into spatial_ref_sys values(40000, 'ME', 1, 
'GEOGCS["Normal Sphere (r=6370997)",DATUM["unknown",SPHEROID["sphere",6370997,0]],PRIMEM["Greenwich",0],UNIT["degree",0.0174532925199433]]',
'+proj=longlat +ellps=sphere +no_defs');

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:

import osgeo.osr as osr
srs = osr.SpatialReference()
srs.ImportFromProj4('+proj=longlat +ellps=sphere +no_defs')
srs.ExportToWkt()

Nun die Vorbehalte:

  • Der richtige Aufstieg muss in Grad und nicht in Stundenwinkeln angegeben werden.
  • Einige PostGIS-Funktionen sind nicht für nicht projizierte Daten vorgesehen, aber es ist dasselbe Problem, wenn Sie terrestrische Daten in WGS84 long / lat haben.
  • Derzeit sind die Daten geozentrisch. Wenn Sie damit Beobachtungsarbeit leisten möchten, empfehle ich die Verwendung von PyEphem .
  • Ich habe nicht versucht, Daten in diesem SRS zu erstellen, also YMMV.
  • Das interessiert mich jetzt allerdings ziemlich, daher muss ich vielleicht mit dem Importieren des Hipparchos-Katalogs herumspielen ... :)
MerseyViking
quelle
2
+1. Sie können einen guten Einstieg in die Abbildung des Himmels erhalten, indem Sie eine Version der HYG-Datenbank laden , den richtigen Anstieg mit 15 multiplizieren und 180 subtrahieren, um ihn in einen Standard-GIS-Längengrad zu konvertieren. Für die Anzeige und Zuordnung sind gnomonische und orthografische Projektionen ziemlich üblich.
Whuber
@whuber: und der Breitengrad? ist der DEC?
Magno C
@MagnoC Ja, das stimmt. Die Felder sind auf der von mir verlinkten Website beschrieben: scrollen Sie einfach ein wenig nach unten. Um dies zu überprüfen, habe ich die "kleine" Version (nur 31K-Sterne) in ein 3D-Betrachtungsprogramm kopiert, in kartesische Koordinaten (auf einer Himmelskugeleinheit, ohne Berücksichtigung der Entfernung) konvertiert und sie gezeichnet: Sieht gut aus.
whuber
@whuber: "RA, Dec: Der richtige Aufstieg und Abstieg des Sterns für die Epoche 2000.0. Bei Sternen, die nur im Gliese-Katalog mit 1950.0-Koordinaten enthalten sind, wurden diese Koordinaten auf 2000 gesetzt." Über Lat / Lon ist mir nicht so klar. Also LON = (RA*15) - 180und LAT = DEC?
Magno C
@MagnoC Ich habe festgestellt, dass en.wikipedia.org/wiki/Equatorial_coordinate_system hilfreich ist, um dies zu klären .
whuber