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