应使用哪种坐标系来存储天体坐标的地理数据?


37

我正在做一个天文学项目。我想将有关我们图像的信息存储在启用空间的数据库中。我认为,这对于GIS功能来说应该是一个非常简单的特殊情况,因为天空可以被视为完全球形,并且不需要像地球表面那样的椭圆形处理。不幸的是,我还没有找到实现此目的的方法,并且我一直在躲避具有椭圆形地球空间功能的地雷。(几乎所有返回米而非度的函数都可能使用椭圆计算。幸运的是,我需要的许多PostGIS函数似乎都具有不完整的实现,其中文档明确指出返回的结果是针对球体而不是针对球体。椭圆形。但这可能会随着将来的版本而改变,这值得关注。)

背景:目前,我正在使用具有PostGIS和WGS 84坐标(SRID = 4326)的PostgreSQL。这工作得很好。我正在根据图像四个角的正确提升和偏斜创建一个封闭的POLYGON。我有很多图像(10k或更多),覆盖了很大的天空。每个图像约为1度角。从这些图像的集合中,我正在从15到30张图像的小子集中制作马赛克。每个马赛克约为1.5度正方形。

目前,我将镶嵌的地理位置存储为MULTIPOLYGON,其中包括与进入镶嵌图的每个图像相对应的所有多边形。[更好的解决方案是创建一个描述所有单个多边形并集周长的POLYGON 。我不知道是否可以在球坐标系中完成(即地理类型)。对我来说,这也是一个有趣的答案。]日期线和天极可能包含在数据集中的图像中,因此我一直在尽量避免投影到平面坐标。

对于带有PostGIS功能的天体坐标,应该使用什么坐标系?

我看过 http://spatialreference.org/,但到目前为止还没有找到任何东西。谷歌几乎没有出现。我感到难过。基本上,我想确保如果一个函数返回米作为距离,那么它就是球体上沿大圆的米。

更一般地,在空间数据库中使用天体坐标的一些建议也将被理解。

我选择PostGIS会犯错吗?

是否有优越的商业选择?

FOSS的选择?


我正在使用PostGIS 1.5.2。我尚未尝试过PostGIS 2.0。我很好奇ST_CoveredBy函数是否与POLYGON和地理类型的MULTIPOLYGON一起使用。如果有人正在运行2.0,可以告诉我是否遇到与此相同的错误:

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

我已经尝试过PostGIS 2.0。此功能仍仅适用于点和多边形,不适用于更一般的形状。


这与wcs2kml相似吗?如果是这样,也许您可​​以修改一些代码以供使用。code.google.com/p/wcs2kml
Kirk Kuykendall

我碰到了USGS的演示文稿“ PLANETARY GIS 101”,并简要地看到了投影上的一些幻灯片,也许会对您有所帮助。
jonatr

为什么不创建共享多边形的多个多边形而不是创建多多边形?
拉斐尔2014年

Answers:



12

可以在PostGIS中存储天体位置-您只需要创建自己的坐标系即可!

PostGIS从表中获取所有坐标系统和投影信息,该表spatial_ref_sys通常在初始化数据库时填充。但是,没有什么可以阻止您添加自己的预测的-实际上,实际上是鼓励这样做的

与几乎所有的GIS /空间数据库/映射产品一样,PostGIS使用Proj4满足其投影需求,因此您需要在spatial_ref_sys表中放入Proj4字符串。Proj4形式的简单球形SRS为:+proj=longlat +ellps=sphere +no_defs。PostGIS还需要投影的WKT版本,但我认为这只是用作漂亮的文字。

您还需要为新的SRS提供一个唯一的SRID,以及一个“权限”,但这可以是您喜欢的任何东西。

因此,要将新条目插入spatial_ref_sys,只需执行以下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');

请注意,我已选择40000作为SRID-这是您在天体表中使用的数字。身份验证为“ ME”,但这可以是您的姓名,组织或最多256个字符的名称。下一个数字1只是您相对于授权机构的该条目的唯一标识符。理论上,您可以将该条目称为ME:1,但是对于所有PostGIS处理而言,它的唯一SRID才是最重要的。我用GDAL和Python生成的WKT条目:

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

现在的警告:

  • 向右提升必须以度数而不是小时角来指定。
  • 许多PostGIS功能不是为非投影数据设计的,但是如果WGS84 long / lat中的地面数据具有相同的问题。
  • 就目前而言,数据是地心的。如果您想对它进行任何观测工作,建议您使用PyEphem之类的东西
  • 我没有尝试在此SRS中创建任何数据,因此没有尝试使用YMMV。
  • 我现在对此很感兴趣,所以我可能不得不尝试导入Hipparchos目录... :)

2
+1。您可以通过加载HYG数据库版本,将右提升量乘以15并减去180以转换为标准GIS“经度”,并使用您喜欢的任何完美球形基准,来开始绘制天空的映射。对于显示和制图,地标和正投影是相当标准的。
ub

@whuber:还有纬度?是DEC吗?
Magno C 2014年

@MagnoC是的,这是正确的。这些字段在我链接到的网站上进行了描述:向下滚动一下。为了检查它,我将“小”版本(仅31K星)转储到3D观看程序中,转换为笛卡尔坐标(在单位天球上,忽略距离),并绘制它们:看起来不错。
whuber

@whuber:“ RA,12月:在2000.0时代,恒星的右上升和偏角。仅在使用1950.0坐标的格利兹星表中存在的恒星,这些坐标的前移为2000”。关于Lat / Lon,我不太清楚。那么,LON = (RA*15) - 180LAT = DEC
Magno C 2014年

@MagnoC我发现en.wikipedia.org/wiki/Equatorial_coordinate_system有助于解决此问题。
whuber
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.