Quel système de coordonnées devrait être utilisé pour stocker les données géographiques pour les coordonnées célestes?


37

Je fais un projet d'astronomie. Je souhaite que les informations sur nos images soient stockées dans une base de données activée spatialement. Je pense que cela devrait constituer un cas spécial très simple pour les fonctions SIG car le ciel peut être traité comme parfaitement sphérique et ne nécessite pas de traitement elliptique comme la surface de la Terre. Malheureusement, je n'ai pas encore trouvé le moyen de le faire et j'ai esquivé des mines avec des fonctions spatiales utilisant une terre elliptique. (Pratiquement toutes les fonctions qui renvoient des mètres au lieu de degrés utilisent un calcul elliptique. Heureusement, beaucoup de fonctions PostGIS dont j'ai besoin semblent avoir des implémentations incomplètes où la documentation indique explicitement que les résultats renvoyés sont pour une sphère et non pour. l’ellipsoïde. Mais cela pourrait changer avec les versions futures, ce qui est un sujet de préoccupation.)

Contexte: J'utilise actuellement PostgreSQL avec les coordonnées PostGIS et WGS 84 (SRID = 4326). Cela fonctionne assez bien. Je crée un POLYGONE fermé à partir de l'ascension droite et de la déclinaison des quatre coins de l'image. J'ai beaucoup d'images (10k ou plus), couvrant une grande partie du ciel. Chaque image correspond à environ 1 degré carré. À partir de l’ensemble de ces images, je réalise des mosaïques à partir de petits sous-ensembles de 15 à 30 images. Chaque mosaïque mesure environ 1,5 degré carré.

Actuellement, je stocke la géographie des mosaïques en tant que MULTIPOLYGONE qui comprend tous les POLYGONES correspondant à chaque image entrée dans la mosaïque. [Une meilleure solution serait de créer un POLYGONE unique décrivant le périmètre de l'union de tous les polygones individuels. Je ne sais pas si cela peut être fait en coordonnées sphériques (c'est-à-dire le type de géographie). Cela constituerait également une réponse intéressante pour moi aussi.] La ligne de date et les pôles célestes peuvent être inclus dans une image du jeu de données, de sorte que j'ai évité de projeter autant que possible vers des coordonnées planaires.

Quel système de coordonnées dois-je utiliser pour les coordonnées célestes avec les fonctions PostGIS?

J'ai regardé http://spatialreference.org/ mais je n'ai rien trouvé jusqu'à présent. Google a peu tourné. Je suis perplexe. En gros, je veux m'assurer que si une fonction renvoie des mètres en distance, elle parcourt des mètres le long d'un grand cercle sur une sphère.

Plus généralement, des conseils sur l'utilisation de coordonnées célestes dans une base de données spatiale seraient également appréciés.

Ai-je commis une erreur en choisissant PostGIS?

Y at-il des choix commerciaux de loin supérieurs?

Choix de logiciels libres?


J'utilise PostGIS 1.5.2. Je n'ai pas encore essayé PostGIS 2.0. Je suis curieux de savoir si la fonction ST_CoveredBy fonctionne avec un POLYGONE et un MULTIPOLYGONE de type geography. Si quelqu'un utilise la version 2.0, pouvez-vous me dire si vous obtenez la même erreur que celle-ci:

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

J'ai essayé PostGIS 2.0. Cette fonction ne fonctionne toujours que sur des points et des polygones, pas de formes plus générales.


N'est-ce pas semblable à ce que fait wcs2kml? Si oui, vous pourriez peut-être adapter une partie du code à vos utilisations. code.google.com/p/wcs2kml
Kirk Kuykendall Le

J'ai vu cette présentation de l'USGS "PLANETARY GIS 101" et ai brièvement vu quelques diapositives sur les projections, peut-être que cela vous aiderait.
Jonatr

Plutôt que de créer des multipolygones, pourquoi ne pas créer plusieurs polygones partageant un identifiant de groupe?
Raphael

Réponses:


17

Découvrez pgsphere, il est spécialement conçu pour traiter des données astronomiques.

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


C'est très bon. Malheureusement, il ne semble pas supporter de classe de géométrie "smultipoly". Merci pour la grande tête sur ce projet cependant.
Dr. Person Person II

1
Lorsque j'essaie de suivre ce lien, je reçois le message "Interdit. Vous n'êtes pas autorisé à accéder à / sur ce serveur".
PolyGeo

12

Il est possible de stocker des positions célestes dans PostGIS - il vous suffit de créer votre propre système de coordonnées!

PostGIS obtient toutes ses informations de système de coordonnées et de projection à partir de la table spatial_ref_sysqui est normalement remplie lorsque la base de données est initialisée. Mais rien ne vous empêche d’ajouter vos propres projections - en fait, cela est pratiquement encouragé .

Comme presque tous les produits SIG / base de données spatiale / cartographie disponibles, PostGIS utilise Proj4 pour ses besoins de projection. Vous devez donc insérer une chaîne Proj4 dans la spatial_ref_systable. Un SRS sphérique simple dans sa forme Proj4 est: +proj=longlat +ellps=sphere +no_defs. PostGIS nécessite également une version WKT de la projection, mais je pense que c'est simplement utilisé comme joli texte.

Vous aurez également besoin de créer un SRID unique pour votre nouveau SRS, ainsi qu'une "autorité", mais cela peut être ce que vous voulez.

Donc, pour insérer une nouvelle entrée dans spatial_ref_sys, il suffit d'exécuter ce 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');

Notez que j'ai choisi 40000 comme SRID - c'est le nombre que vous utilisez dans votre table d'objets célestes. L'autorité est "ME", mais cela peut être votre nom, votre organisation ou tout ce qui peut contenir jusqu'à 256 caractères. Le numéro suivant, 1, représente simplement votre identifiant unique pour cette entrée, par rapport à l'autorité. En théorie, vous pouvez vous référer à cette entrée par ME: 1, mais pour tous les traitements PostGIS, c'est le SRID unique qui compte. L'entrée WKT que j'ai générée avec GDAL et Python:

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

Maintenant les mises en garde:

  • L'ascension droite devra être spécifiée en degrés plutôt qu'en angles horaires.
  • Un certain nombre de fonctions PostGIS ne sont pas conçues pour des données non projetées, mais le problème est identique si vous avez des données de Terre dans WGS84 long / lat.
  • À l'heure actuelle, les données sont géocentriques. Si vous voulez faire un travail d'observation avec cela, je suggère d'utiliser quelque chose comme PyEphem .
  • Je n'ai pas essayé de créer de données dans ce SRS, donc YMMV.
  • Cependant, cela m'intéresse beaucoup maintenant, donc je devrai peut-être jouer avec l'importation du catalogue Hipparchos ... :)

2
+1 Vous pouvez commencer à cartographier les cieux en chargeant une version de la base de données HYG , en multipliant l'ascension droite par 15 et en soustrayant 180 pour la convertir en une "longitude" SIG standard, et en utilisant le datum parfaitement sphérique de votre choix. Pour l'affichage et la cartographie, les projections gnomoniques et orthographiques sont assez classiques.
whuber

@whuber: et la latitude? est le DEC?
Magno C

@MagnoC Oui, c'est bien ça. Les champs sont décrits sur le site Web auquel j'ai lié: il suffit de faire défiler un peu. Pour le vérifier, j’ai vidé la version "petite" (seulement 31K étoiles) dans un programme de visualisation 3D, converti en coordonnées cartésiennes (sur une sphère céleste unitaire, en ignorant la distance), et les ai tracées: jolies.
whuber

@whuber: "RA, Dec: l'ascension et la déclinaison droites de l'étoile, pour la période 2000.0. Les étoiles présentes uniquement dans le catalogue de Gliese, qui utilise les coordonnées 1950.0, ont fait précéder ces coordonnées de 2000". Je ne suis pas si clair sur Lat / Lon. Alors LON = (RA*15) - 180et LAT = DEC?
Magno C

@MagnoC J'ai trouvé que fr.wikipedia.org/wiki/Equatorial_coordinate_system était utile pour résoudre ce problème .
whuber
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.