Quale sistema di coordinate dovrebbe essere usato per memorizzare i dati geografici per le coordinate celesti?


37

Sto facendo un progetto di astronomia. Voglio che le informazioni sulle nostre immagini siano archiviate in un database abilitato spazialmente. Questo, penso, dovrebbe essere un caso speciale molto semplice per le funzioni GIS perché il cielo può essere trattato come perfettamente sferico e non richiede un trattamento ellittico come la superficie della terra. Sfortunatamente, non ho ancora trovato un modo per farlo e ho schivato le mine con funzioni spaziali che usano una terra ellittica. (Praticamente qualsiasi funzione che restituisce metri anziché gradi potrebbe usare un calcolo ellittico. Fortunatamente, molte delle funzioni PostGIS di cui ho bisogno sembrano avere implementazioni incomplete in cui la documentazione afferma esplicitamente che i risultati restituiti sono per una sfera e non per l'ellissoide. Ma ciò potrebbe cambiare con le versioni future, il che è motivo di preoccupazione.)

Sfondo: Attualmente sto usando PostgreSQL con coordinate PostGIS e WGS 84 (SRID = 4326). Funziona abbastanza bene. Sto creando un POLIGONO chiuso dalla giusta ascensione e declinazione dei quattro angoli dell'immagine. Ho molte immagini (10k o più), che coprono una vasta area del cielo. Ogni immagine è di circa 1 grado quadrato. Dall'insieme di queste immagini, sto realizzando mosaici da piccoli sottogruppi di 15-30 immagini. Ogni mosaico è di circa 1,5 gradi quadrati.

Attualmente, sto memorizzando la geografia dei mosaici come MULTIPOLIGONO che consiste in tutti i POLIGONI corrispondenti a ciascuna immagine che è entrata nel mosaico. [Una soluzione migliore sarebbe quella di creare un singolo POLIGONO che descriva il perimetro dell'unione di tutti i singoli poligoni. Non so se questo può essere fatto in coordinate sferiche (cioè, il tipo di geografia). Questa sarebbe anche una risposta interessante anche per me.] La linea della data e i poli celesti potrebbero essere inclusi in un'immagine nell'insieme di dati, quindi ho evitato di proiettare per quanto possibile le coordinate planari.

Quale sistema di coordinate dovrei usare per le coordinate celesti con le funzioni PostGIS?

Ho guardato http://spatialreference.org/ ma non ho trovato nulla finora. Google è cresciuto poco. Sono perplesso. Fondamentalmente, voglio assicurarmi che se una funzione restituisce metri come distanza, è metri lungo un grande cerchio su una sfera.

Più in generale, sarebbero anche apprezzati alcuni consigli per l'uso delle coordinate celesti in un database spaziale.

Ho sbagliato scegliendo PostGIS?

Ci sono scelte commerciali di gran lunga superiori?

Scelte FOSS?


Sto usando PostGIS 1.5.2. Non ho ancora provato PostGIS 2.0. Sono curioso di sapere se la funzione ST_CoveredBy funziona con un POLYGON e un MULTIPOLYGON di tipo geografico. Se qualcuno esegue 2.0, potresti dirmi se si ottiene lo stesso errore di questo:

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

Ho provato PostGIS 2.0. Questa funzione funziona ancora solo su punti e poligoni, non su forme più generali.


Non è simile a quello che fa wcs2kml? Se è così, forse potresti adattare parte del codice per i tuoi usi. code.google.com/p/wcs2kml
Kirk Kuykendall

Mi sono imbattuto in questa presentazione USGS, "PLANETARY GIS 101" e ho visto brevemente che ci sono alcune diapositive sulle proiezioni, forse ti aiuterà.
Jonatr

Invece di creare multipoligoni, perché non creare più poligoni che condividono un ID di raggruppamento?
Raffaello,

Risposte:


17

Dai un'occhiata a pgsphere, è specificamente progettato per la gestione di dati astronomici.

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


Questa è roba molto buona. Sfortunatamente, non sembra supportare alcuna classe di geometria "smultipoly". Grazie per l'ottimo heads-up su questo progetto però.
Dr. Person Person II

1
Quando provo a seguire questo link ricevo "Proibito Non hai i permessi per accedere / su questo server".
PolyGeo

12

È possibile memorizzare posizioni celesti in PostGIS: è sufficiente creare il proprio sistema di coordinate!

PostGIS ottiene tutte le informazioni sul sistema di coordinate e sulla proiezione dalla tabella spatial_ref_sysche viene normalmente popolata quando il database viene inizializzato. Ma non c'è nulla che ti impedisca di aggiungere le tue proiezioni, anzi è praticamente incoraggiato .

In comune con quasi tutti i GIS / database spaziali / prodotti di mappatura disponibili, PostGIS utilizza Proj4 per le sue esigenze di proiezione, quindi è necessario inserire una stringa Proj4 nella spatial_ref_systabella. Un semplice SRS forma sferica Proj4 è: +proj=longlat +ellps=sphere +no_defs. PostGIS richiede anche una versione WKT della proiezione, ma penso che sia solo usato come un bel testo.

Dovrai anche creare un SRID univoco per il tuo nuovo SRS, oltre a una "autorità", ma questo può essere quello che ti piace.

Quindi, per inserire una nuova voce in spatial_ref_sys, basta eseguire questo SQL:

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');

Nota che ho scelto 40000 come SRID: questo è il numero che usi nella tabella degli oggetti celesti. L'autenticità è "ME", ma questo potrebbe essere il tuo nome, la tua organizzazione o qualsiasi cosa con un massimo di 256 caratteri. Il numero successivo, 1, è solo il tuo identificativo univoco per quella voce, relativo all'autorità. In teoria potresti riferirti a questa voce come ME: 1, ma per tutte le elaborazioni PostGIS, è il SRID unico che conta. La voce WKT che ho generato con GDAL e Python:

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

Ora le avvertenze:

  • L'ascensione retta dovrà essere specificata in gradi piuttosto che negli angoli delle ore.
  • Diverse funzioni PostGIS non sono progettate per dati non proiettati, ma è lo stesso problema se si hanno dati terrestri in WGS84 long / lat.
  • Allo stato attuale, i dati sono geocentrici. Se vuoi fare qualche lavoro di osservazione con esso, ti suggerisco di usare qualcosa come PyEphem .
  • Non ho provato a creare dati in questo SRS, quindi YMMV.
  • Ora sono abbastanza interessato a questo, quindi potrei dover giocare con l'importazione del catalogo Hipparchos ... :)

2
+1. Puoi iniziare bene a mappare i cieli caricando una versione del database HYG , moltiplicando la giusta ascensione per 15 e sottraendo 180 per convertire in una "longitudine" GIS standard e usando qualsiasi dato perfettamente sferico che ti piace. Per la visualizzazione e la mappatura, le proiezioni gnomoniche e ortografiche sono abbastanza standard.
whuber

@whuber: e la latitudine? è il DEC?
Magno C,

@MagnoC Sì, è corretto. I campi sono descritti sul sito Web a cui mi sono collegato: basta scorrere un po 'verso il basso. Per verificarlo ho scaricato la versione "piccola" (solo 31K stelle) in un programma di visualizzazione 3D, convertito in coordinate cartesiane (su un'unità sfera celeste, ignorando la distanza), e le ho tracciate: sembra buono.
whuber

@whuber: "RA, dic: Ascensione e declinazione della stella, per l'epoca 2000.0. Le stelle presenti solo nel Catalogo Gliese, che utilizza le coordinate 1950.0, hanno avuto queste coordinate precedenti al 2000". Non è così chiaro su Lat / Lon. Quindi, LON = (RA*15) - 180e LAT = DEC?
Magno C,

@MagnoC Ho trovato en.wikipedia.org/wiki/Equatorial_coordinate_system per essere d'aiuto nel risolvere questo problema.
whuber
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.