R: plotting sky map in Mollweide projection in galactic coordinate system
我需要在Mollweide投影(椭圆投影提供360视角的椭圆投影,用于绘制夜空)中生成带有星座等特征的星图。我使用sf包在https://kimnewzealand.github.io/2019/02/21/celestial-maps/上找到了一个配方,并将天空对象的默认EPSG:4326数据转换为Mollweide投影。
在某个阶段,使用以下命令将数据转换为Mollweide投影:
1 | constellation_lines_sf_trans<- st_transform(constellation_lines_sf_trans, crs ="+proj=moll") |
按照链接中所述的线条复制的结果图像如下所示:
很好,但是,坐标系是赤道的,基本上与地球上的所有坐标系都具有相同的旋转轴,例如WGS84(北极向上)。例如,在该图上显示了银河系,以60度角移动。我们需要所谓的银河系坐标:这是与银河系平面重合的坐标平面。因此,这里的银河系只是椭圆轴的一条水平线。例如,在其他地方找到的解决方案似乎使用了相同的技术,但是此处未提供代码:
这里的银河系是一条水平线,北极在左上角(用np表示;例如,在这里,您可以看到北极附近大熊/次要星座的可辨认星座)。我将拍摄此图像,但有一个盲点(显示天文台的盲区,该盲区无法到达天空中的该区域),因此我想重现此图像:星座+ Mollweide投影+星系的"银河"方向参考范围。
我们能够在R包中的各种坐标系之间进行转换。似乎大多数GIS工具都根据地球所需的旋转(北极向上)来使用各种与地球相关的坐标系和投影,这是GIS所需的大多数应用程序。问题是,是否有可能加载并转换为预定义的银河坐标系(或例如,转换为黄道系),或者是否可以在脚本中通过手动转换星形数据即时执行此转换。
编辑:实际上,经过进一步研究,看来这全都归结为您的投影进行旋转。我在下面进一步提到的交互式示例的代码中也会发生这种情况。要使其以银河系中心为中心,您需要旋转
我对R中的映射了解不多,无法说出是否可以在投影上指定旋转,但这是一个了不起的示例,使用d3.js展示了此过程(对于真正感兴趣的人,展示了角度在哪里来自)。如果不可能,下面的路线也许仍然可行。
我正在调查同一件事,可能发现了一些东西。我认为您首先需要将赤道ra(右升)和dec(赤纬)坐标转换为银河坐标。然后应用(Mollweide)投影。由于我的情况略有不同,因此我不确定这是否完全正确,但至少这对我有用:
-
数据集在赤道坐标中有
ra &dec 行(在我的情况下以度为单位) -
使用astrolibR软件包的
euler 函数,我计算了银河经度gl 和纬度gb (ps:也可以使用glactc 函数):
1 2 | data$gl <- euler(data$ra, data$dec, select=1)$ao data$gb <- euler(data$ra, data$dec, select=1)$bo |
-
接下来,使用这些新坐标,我将Aitoff投影也用作astrolibR软件包的一部分,以获取
x 和y 坐标:
1 2 | data$x <- -aitoff(data$gl, data$gb)$x data$y <- aitoff(data$gl, data$gb)$y |
然后我可以画
1 | ggplot(data, aes(x, y)) + geom_point(shape=16, size = 0.1, alpha = 0.2) + coord_fixed() |
(下图基于我自己的观测数据集,"暗线"沿黄道线,右下角的两个斑点分别是大麦哲伦星云和小麦哲伦星云)
我发现比较此交互式地图并将坐标设置为"银河"(以0,0为中心),然后尝试各种投影很有用。
也许您可以尝试使用