【问题标题】:Perform coordinates projection with astropy用 astropy 进行坐标投影
【发布时间】:2016-02-22 12:30:59
【问题描述】:

我在equatorial coordinates 中有一组点,我需要将它们投影到平面上,即:天顶或azimuthal projection

astropy 显然能够执行这种类型的投影,among many others

问题是我不知道如何将这些模块应用到我的数据中,而且文档相当稀缺。

对于这个例子,假设赤道ra, dec坐标可以通过以下方式生成:

ra = np.random.uniform(130., 135., 1000)
dec = np.random.uniform(-55., -57., 1000)

【问题讨论】:

    标签: python projection astropy


    【解决方案1】:

    这些投影与 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 documentationprojection unit tests

    【讨论】:

      【解决方案2】:

      我不确定这是否正是您想要的,但我试一试:

      您可能需要使用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)]>
      

      【讨论】:

      • 感谢 MSeifert,但这不是我想要的。这给出了单位半径球体上的坐标,我需要将赤道坐标投影到平面上。
      • 正如问题:您想要Altitude-Azimuth system 之类的东西,还是只想将wikipedia 中给出的公式应用于您的坐标?
      • 我想对astropy 中定义的许多数据应用投影,例如Zenithal equidistant projection
      • 参见here了解“Azimuthal Equidistant Projection”的定义(相当于“Zenithal Equidistant Projection”)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多