标签: pyephem

使用PyEphem计算黎明和日落时间

是否可以使用PyEphem计算黎明,黄昏和日落时间?我用PyEphem来制作白天和黑夜时间,但是我没有在日落/黄昏/黎明时找到任何东西

python astronomy pyephem

16
推荐指数
3
解决办法
1万
查看次数

Python坐标转换ECI到ECEF

我正在使用sgp4 python包(由Brandon Rhodes开发); 我正在为ISS(Zarya)输入TLE信息.我在某个日期,在ECI坐标系中获得卫星的位置.但是,我想将其转换为ECEF坐标系.

至少有两个实现了matlab函数的实例(ecitoecef,eci2ecef)和一个为RTKLIB项目实现的C函数(eci2ecef).(我不能发布链接,因为我对每个问题限制了两个链接,因为这是我的第一个问题和我有声誉1)

我无法找到实现的python函数.然而,在上一个问题中, 使用spg4的python卫星跟踪,与 用户不匹配pyephem-位置说"我发现了问题的至少一部分.spg84.propagate()返回ECI中的位置,而不是ECEF.快速运行eci2ecef并且它与预测反应完美排列."

这是eci2ecef指的是python实现吗?这可以在线获得吗?是否有在线文档可以解释如果我自己实施的话需要完成的步骤?在此问题中如何将ECI坐标转换为经度纬度和海拔高度以在地图上显示? 在评论中他们说"它们因地球的旋转速度而不同,所以变换只是一个二维cos的罪恶; -sin cos型变换.".变换的角度是什么?这是Greenwhich侧面时间吗?当我们使用sgp4时,它是我们指定的GST还是其他时间?

非常感谢你的帮助!

python satellite astronomy coordinate-transformation pyephem

10
推荐指数
1
解决办法
5127
查看次数

Observer()的结果似乎不能解释PyEphem中的高程效应

我查询PyEphem模块给出的与Observer()查询有关的结果以及提升的影响.我从几个来源(例如http://curious.astro.cornell.edu/question.php?number=388)了解到,观察者的高度对日落时间有显着影响.但是在下面的代码中,我看到旁边没有区别:

import ephem

emphemObj = ephem.Observer()
emphemObj.date = '2011/08/09'
emphemObj.lat = '53.4167'
emphemObj.long = '-3'
emphemObj.elevation = 0

ephemResult = ephem.Sun()
ephemResult.compute(emphemObj)
print "Sunset time @ 0m: " + str(emphemObj.previous_rising(ephemResult))

emphemObj.elevation = 10000
ephemResult.compute(emphemObj)
print "Sunset time @ 10000m: " + str(emphemObj.previous_rising(ephemResult))
Run Code Online (Sandbox Code Playgroud)

我得到输出:

Sunset time @ 0m: 2011/8/8 04:38:34
Sunset time @ 10000m: 2011/8/8 04:38:34
Run Code Online (Sandbox Code Playgroud)

我很确定我做错了,而不是这是一个错误,但是尝试了很多不同的方法,我担心我会不断收拾相同的结果.有谁知道我在这里做错了什么?

我已经在https://launchpad.net/pyephem上发布了这个,但我没有回复.我希望我没有从根本上误解提升功能的目的......

python astronomy pyephem

9
推荐指数
1
解决办法
700
查看次数

使用PyEphem计算阴影长度

我正在使用PyEphem并且想要计算阴影的长度(假设一个单位长度的棍子被种植在地上).长度将由cot(phi)给出,其中phi是太阳高度角(如果我错了,请纠正我).我不确定在太阳上使用哪个字段?在下面的示例中,我使用角度alt:

import ephem, math
o = ephem.Observer()
o.lat, o.long = '37.0625', '-95.677068'
sun = ephem.Sun()
sunrise = o.previous_rising(sun, start=ephem.now())
noon = o.next_transit(sun, start=sunrise)
shadow = 1 / math.tan(sun.alt)
Run Code Online (Sandbox Code Playgroud)

请检查我的解释如下:

  1. 如果切线是无限的,则表示太阳直接在头顶,没有阴影.
  2. 如果切线为零,则表示太阳位于地平线上且阴影无限长.
  3. 我不知道如何解释cot(phi)的负面结果.有人能帮我吗?

最后,考虑到ephem.Observer(),我很困惑如何使用PyEphem从阴影长度向下工作到下一次太阳将投射该长度的阴影.

我很感激这方面的帮助.

python shadow astronomy pyephem

8
推荐指数
1
解决办法
1871
查看次数

Pyephem算法参考

我之前从未使用过pyephem,而且我不是卫星定位专家.我想利用pyephem来计算使用TLE的卫星位置.我必须做一些非常简单的事情,比如说:

tle=["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"]
iss = ephem.readtle(*tle)
observer = ephem.Observer()
observer.lon, observer.lat = ('-84.39733', '33.775867')     
observer.date = ephem.Date('2002/4/23 10:10:00.000')
iss.compute(observer)
print iss.alt, iss.az, iss.range
Run Code Online (Sandbox Code Playgroud)

-40:06:46.3 199:08:24.3 8834968.0

这三个变量提供卫星在水平参考系统中的位置.我不清楚pyephem如何计算这个值.我已阅读参考指南:http: //rhodesmill.org/pyephem/radec

阅读文件时,似乎pyephem应用了岁差和章动,但在文件的最后两行中它说:

"请注意,最后两组坐标中没有任何进动,但仅限于第一组.这意味着只有"天体测量"位置对应于星形图谱中的线条.其他位置被称为"最新的"坐标",是在观测当天进行天极和天体赤道方向测量的.

地球岁差是否适用于az和alt?

此外,我想知道什么样的模型pyephem用于岁差和章动(我真的需要一些参考).有一个链接到Xephem和libastro,但我找不到任何有关算法的信息.你有什么建议吗?

非常感谢你!

algorithm satellite pyephem

7
推荐指数
1
解决办法
506
查看次数

如何让pylint识别出扭曲和流行的成员?

我非常喜欢让pylint告诉我,如果我使用的是不存在的成员.然而,我的新项目是使用twisted和ephem模块,这似乎混淆了pylint.

如何在不关闭E1101的情况下解除这些(不正确的)pylint警告,并且不会在每个相关呼叫周围发出警告删除注释?

E1101:  8,0: Module 'twisted.internet.reactor' has no 'run' member
E1101: 49,25:sunrise_next: Module 'ephem' has no 'Sun' member
E1101: 63,26:sunset_next: Module 'ephem' has no 'Sun' member
Run Code Online (Sandbox Code Playgroud)

python twisted pylint pyephem

7
推荐指数
1
解决办法
1883
查看次数

如何使用pyEphem计算太阳在地平线上方的角度

我是PyEphem的新手,这可能是一个简单的问题.我想在某个GPS点和日期计算太阳在地平线上方的角度.我的代码如下:

import ephem
import datetime

date = datetime.datetime(2010,1,1,12,0,0)
print "Date: " + str(date)

obs=ephem.Observer()
obs.lat='31:00'
obs.long='-106:00'
obs.date = date
print obs

sun = ephem.Sun(obs)
sun.compute(obs)
print float(sun.alt)
print str(sun.alt)
sun_angle = float(sun.alt) * 57.2957795 # Convert Radians to degrees
print "sun_angle: %f" % sun_angle
Run Code Online (Sandbox Code Playgroud)

输出是:

python sunTry.py
Date: 2010-01-01 12:00:00
<ephem.Observer date='2010/1/1 12:00:00' epoch='2000/1/1 12:00:00' lon=-106:00:00.0 lat=31:00:00.0 elevation=0.0m horizon=0:00:00.0 temp=15.0C pressure=1010.0mBar>
-0.44488877058
-25:29:24.9
sun_angle: -25.490249
Run Code Online (Sandbox Code Playgroud)

为什么alt为负?GPS位置在墨西哥的某个地方,我在观察者的日期参数中指定了中午12点.太阳应该是直接开销的,所以我原以为alt变量会在70-90度的范围内返回某个角度?我在这里错过了什么?

谢谢

斯蒂芬

python pyephem

7
推荐指数
1
解决办法
3807
查看次数

使用pyephem计算卫星何时越过经度

我很难弄清楚如何计算卫星何时越过特定经度.能够提供时间段和TLE并且能够返回卫星在指定时间段内穿过给定经度的所有时间将是很好的.pyephem支持这样的东西吗?

python latitude-longitude pyephem

6
推荐指数
1
解决办法
1013
查看次数

PyEphem:至日和春分的日期及其在较长时间尺度上的有效性

我的问题是 PyEphem 为至日和分点的日期以及太阳几何提供准确结果的时间跨度是多少。

到目前为止,我在 GitHub https://github.com/brandon-rhodes/pyephem/issues/61上这篇非常翔实的帖子中发现了 BC 9998-03-20 到 AD 9999-12-31 的限制 以及结果的总体指示在当前任一地点移动超过 +/- 20,000 年时变得不稳定。

我想澄清这一点,因为我试图在更长的时间内获得太阳的位置 - 通常可以追溯到 10,000 年 BP - 以便计算来自太阳在给定的高度和方位角的入射太阳辐射地点。PyEphem 似乎提供了一个很好的替代方案,例如 Berger, 1978 (J. Atmosph. Sc., 35: 2362-2367)。对我来说,PyEphem 相对于这些算法的一个基本优势是它也可以跟踪时间,而地球轨道通常固定在上述算法中的某个特定时刻(例如,3 月 21 日的春分)。

通常,地球轨道的变化与 Berger 和其他人的算法是在最后一次冰川的规模上(高达 126,000 年 BP)进行评估的。在该范围内评估 PyEphem 时,当日期远早于今天时,我遇到了一些关于至日日期的奇怪行为:

import ephem
date= ephem.date((-59000,1,1))

orbitPoints= ['vernal_equinox_start','summer_solstice',\
  'autumnal_equinox','winter_solstice','vernal_equinox_end']

dates= {}
dates['vernal_equinox_start']= ephem.next_vernal_equinox(date)
dates['summer_solstice']= ephem.next_summer_solstice(dates['vernal_equinox_start'])
dates['autumnal_equinox']= ephem.next_autumnal_equinox(dates['vernal_equinox_start'])
dates['winter_solstice']= ephem.next_winter_solstice(dates['vernal_equinox_start'])
dates['vernal_equinox_end']= ephem.next_vernal_equinox(dates['winter_solstice'])

for orbitPoint in orbitPoints:
  date= dates[orbitPoint]
  distance= body_distance(sun, date)
  hlon, hlat= body_hpos(sun, date)
  print '%-20s %30s …
Run Code Online (Sandbox Code Playgroud)

python pyephem skyfield

5
推荐指数
1
解决办法
1018
查看次数

随时间传播卫星目录的有效方法

问题陈述

我需要使用或类似方法从 space-track.org传播最近的 TLE整个目录(需要一个免费帐户才能查看)skyfield。列表中通常有 15k-16k TLE。我有它的工作,但它慢。在服务器上使用 46 个核心数小时。

没有结婚skyfield。如果astropypyephem或其他东西更快,我很乐意接受一个答案,该答案表明我正在尝试使用它来做什么。

最小的例子

对于我的应用程序,我将 TLE 加载到 Pandas 数据框中并在那里进行分析,因此我将在 Pandas 世界中保留我的示例。最小的例子如下。

假设卫星目录保存为catalog.txt,设置环境,然后读取 TLE,生成sf.sgp4lib.EarthSatellite对象,并将所有内容加载到 Pandas 数据帧中。我们还将位置偏移到了一些观察点。我将选择一个观察点留给读者(0, 0, 0 就可以了):

import skyfield as sf
import pandas as pd
from skyfield.api import load, Topos
from datetime import datetime, timezone, timedelta

with open('catalog.txt', 'r') as f:
    tle_list = [line.strip() for line in f.read().split('\n')
                if line is not ''] …
Run Code Online (Sandbox Code Playgroud)

python pyephem astropy skyfield sgp4

5
推荐指数
1
解决办法
933
查看次数