我在equatorial coordinates中有一组点,我需要将它们投射到一个平面上,即:zenithal或azimuthal projection。
astropy
显然能够执行此类投影among many others。
问题在于我不知道如何将这些模块应用于我的数据,而且文档很少。
对于此示例,假设可以通过以下方式生成以度为单位的赤道ra, dec
坐标:
ra = np.random.uniform(130., 135., 1000)
dec = np.random.uniform(-55., -57., 1000)
答案 0 :(得分:3)
这些投影与wcs(世界坐标系)对象和FITS format一起使用。主要步骤是:
import numpy as np
from astropy import wcs
#create data
ra = np.random.uniform(130., 135., 1000)
dec = np.random.uniform(-55., -57., 1000)
#create wcs object
w = wcs.WCS(naxis=2)
# set coordinate and projection types for each axis
w.wcs.ctype = ["RA---ARC", "DEC--ARC"]
#do the projection
pixel_coords = w.wcs_world2pix(ra, dec, 1)
请注意,wcs项目有一些可能很重要的附加配置参数,例如crpixj,轴j的图像参考点和pvi_m,中间世界坐标轴i参数值。
有关一些用法示例,请参阅astropy.wcs documentation和projection unit tests。
答案 1 :(得分:1)
我不确定这是不是你想要的,但我试一试:
您可能需要使用SkyCoord
类:
import numpy as np
from astropy import units as u
from astropy.coordinates import SkyCoord
ra = np.random.uniform(130., 135., 10)
dec = np.random.uniform(-55., -57., 10)
您必须使用天体单位进行设置:
a = SkyCoord(ra * u.degree, dec * u.degree)
a
<SkyCoord (ICRS): (ra, dec) in deg
[(134.26176984, -55.707478), (134.58510684, -55.87649941),
(134.87524059, -56.48554659), (133.13341559, -56.81440026),
(132.87143675, -56.44936089), (131.14191795, -56.68300147),
(133.50910855, -56.07594072), (132.05561955, -56.90231565),
(134.62961065, -55.72207914), (133.64757046, -55.59277667)]>
现在您有一个坐标类(不确定哪个坐标系最合适。SkyCoord
默认为ICRS
)。如果你想计算它的方位角投影你可以使用其他representations我认为PhysicsSphericalRepresentation是你想要的吗?!
a.represent_as('physicsspherical')
<PhysicsSphericalRepresentation (phi, theta, r) in (deg, deg, )
[(134.26176984, 145.707478, 1.0), (134.58510684, 145.87649941, 1.0),
(134.87524059, 146.48554659, 1.0), (133.13341559, 146.81440026, 1.0),
(132.87143675, 146.44936089, 1.0), (131.14191795, 146.68300147, 1.0),
(133.50910855, 146.07594072, 1.0), (132.05561955, 146.90231565, 1.0),
(134.62961065, 145.72207914, 1.0), (133.64757046, 145.59277667, 1.0)]>