代码之家  ›  专栏  ›  技术社区  ›  gerrit

从地面看卫星天顶和仰角的计算

  •  1
  • gerrit  · 技术社区  · 6 年前

    我有卫星和地面观察员的纬度、经度和高度。我试图计算卫星天顶角和卫星方位角,从地面上看。

    我正在尝试用 astropy . 文件 describes 如何计算太阳的天顶和方位角。

    我试着把卫星直接放在观察者的上方,这样天顶角应该是0°(或仰角90°)。

    In [41]: ground = astropy.coordinates.EarthLocation(lat=3*u.deg, lon=5*u.deg)
    
    In [42]: sat = astropy.coordinates.EarthLocation.from_geodetic(3*u.deg, 5*u.deg, 700*u.km)
    

    但是,很明显 .transform_to(AltAz(...)) 不代表我认为的意思,因为答案不是我想要的:

    In [43]: print(sat.get_itrs().transform_to(AltAz(location=ground)))
    <AltAz Coordinate (obstime=None, location=(6345216.684243768, 555134.5274868822, 331574.3153428908) m, pressure=0.0 hPa, temperature=0.0 deg_C, relative_humidity=0, obswl=1.0 micron): (az, alt, distance) in (deg, deg, m)
        (314.96287134, 63.2970069, 773970.24385554)>
    

    我预计仰角接近90度,而不是63度。

    还有一些例行程序 pyorbital 但它似乎不包含我要找的东西。

    我相信它也可以使用 pyephem 但这似乎是希望我能从目录中获得卫星信息。我已经有了纬度,经度,海拔。

    我也看过 pyproj 但我认为这只适用于大地水准面上的物体。

    如何计算从地面观测到的卫星的高度和方位角?

    1 回复  |  直到 6 年前
        1
  •  0
  •   gerrit    6 年前

    pyorbital get_observer_look

    In [50]: import pyorbital.orbital
    
    In [51]: print(pyorbital.orbital.get_observer_look(atleast_1d(1), atleast_1d(1), atleast_1d(700), datetime.datetime.now(), atleast_1d(1), atleast_1d(1), atleast_1d(1)))
    (array([261.11934085]), array([89.99999915]))
    
    In [53]: print(pyorbital.orbital.get_observer_look(atleast_1d(10), atleast_1d(0), atleast_1d(700), datetime.datetime.now(), atleast_1d(0), atleast_1d(0), atleast_1d(0.1)))
    /home/zmaw/u237009/.conda/envs/FCDR37a/lib/python3.7/site-packages/pyorbital/orbital.py:112: RuntimeWarning: divide by zero encountered in true_divide
      az_ = np.arctan(-top_e / top_s)
    (array([270.]), array([25.73173269]))
    
    In [54]: print(pyorbital.orbital.get_observer_look(atleast_1d(10), atleast_1d(0), atleast_1d(700), datetime.datetime.now(), atleast_1d(0.1), atleast_1d(0.1), atleast_1d(0.1)))
    (array([90.56944651]), array([26.03504444]))
    
    推荐文章