【问题标题】:Pyephem iss example observer.compute() error or datatype error?Pyephem iss example observer.compute() 错误或数据类型错误?
【发布时间】:2015-06-08 16:13:43
【问题描述】:

通过 pip 在 macbook air 上安装 pyephem:

pip show pyephem
---
Name: pyephem
Version: 3.7.5.3
Location: /usr/local/lib/python2.7/site-packages
Requires: 

我遇到的关键问题是从http://rhodesmill.org/pyephem/tutorial 找到的 iss 示例显示:

iss = ephem.readtle("ISS (ZARYA)",
...  "1 25544U 98067A   03097.78853147  .00021906  00000-0  28403-3 0  8652",
...  "2 25544  51.6361  13.7980 0004256  35.6671  59.2566 15.58778559250029")
gatech.date = '2003/3/23'
iss.compute(gatech)
print("%s %s %s" % (iss.rise_time, iss.transit_time, iss.set_time))
2003/3/23 00:00:50 2003/3/23 00:03:26 2003/3/23 00:06:01

但是对于我的代码在循环中 +1 分钟以获得 Az/El,我得到“无”或明显不正确的结果:

obs = ephem.Observer()
obs.lat = '50.045995'
obs.lon = '-5.177628'
obs.pressure = 0
obs.temp = 0
obs.date = '2015/6/8 19:43:24'

line1 = "ISS (ZARYA)"
line2 = "1 25544U 98067A   03097.78853147  .00021906  00000-0  28403-3 0  8652"
line3 = "2 25544  51.6361  13.7980 0004256  35.6671  59.2566 15.58778559250029"
iss = ephem.readtle(line1, line2, line3)
print("%f %f %f %f" % (iss._epoch,iss._n,iss._inc,iss._raan) ) # Check tle is read

while True:
    #mars.compute(obs)
    #print("Date/time: %s Mars    Az/El %.6f %.6f" % (obs.date, float(mars.az), float(mars.alt)))

    iss.compute(obs)

    print("Date/time: %s ISS     Az/El %.6f %.6f %.6f" % (obs.date, ephem.degree * iss.az, ephem.degree * float(iss.alt), iss.range))
    print("%s %s %s" % (iss.rise_time, iss.transit_time, iss.set_time))

    obs.date += ephem.minute * 1

    time.sleep(1)

结果是:

Date/time: 2015/6/8 19:50:24 ISS     Az/El 0.054831 -0.027391 6377154.500000
None None None
Date/time: 2015/6/8 19:51:24 ISS     Az/El 0.054831 -0.027391 6377154.500000
None None None
Date/time: 2015/6/8 19:52:24 ISS     Az/El 0.054831 -0.027391 6377154.500000
None None None
Date/time: 2015/6/8 19:53:24 ISS     Az/El 0.054831 -0.027391 6377154.500000
None None None

我认为这些错误与日期/角度/obs 相关 - 但我仍然希望看到它们移动。我已经检查过转换为各种数据类型的弧度/度数,但看不到错误在哪里。当行星体似乎都工作正常时,任何关于我在这里做错了什么的建议都将非常感激!

最好的,克里斯

更新 1 - obs 中的以下更改不起作用:

obs.lat = float(math.radians(50.045995))
obs.lon = float(math.radians(-5.177628))

【问题讨论】:

  • 基本测试:如果您只是更改示例中的日期(但保留原始观察者),它是否有效?如果您更改观察者但保留日期?
  • 尝试使用内置的 ephem.now() - 没有用。我还尝试了 ephem.cities('London') - 也没有用。行星体仍然工作正常。
  • 如果您使用与示例相同的日期?
  • 嗯!所以:obs.date = '2003/3/23' 有效。但是 obs.date = '2015/3/23' 没有!我们越来越近了!

标签: python space type-conversion pyephem satellite


【解决方案1】:

地球卫星元素仅在发布日期前后的几天内准确。文档中的元素来自 2003 年,因此 PyEphem 无法使用它们来预测 2015 年卫星的位置。

您需要从 NORAD 下载或剪切和粘贴新鲜元素:

https://celestrak.com/NORAD/elements/

【讨论】:

    猜你喜欢
    • 2012-01-02
    • 2019-01-27
    • 1970-01-01
    • 2015-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-08
    相关资源
    最近更新 更多