我正在使用pyephem来计算特定时间特定卫星的位置。 使用此处描述的简单3LE方法执行此操作; http://rhodesmill.org/pyephem/quick.html#catalog-format
我当时正在做的是写一个循环,并将x分钟添加到我的now()时间,以便我可以在将来获得卫星的位置 - 在我的脑海中创建它将遵循的轨道。
所以使用
mySat = ephem.readtle(第1行,第2行,第3行) mySat.compute(myTime)// MyTime在每个循环中递增1分钟。
这给了我几点,但是当我绘制它们时,它们看起来很粗糙,你可以在这里看到; http://cdb.io/1zvJbQX (忽略日期行问题)。
我认为问题可能是一些问题 - 所以请允许我进行健全检查;
myDets = mySat.compute的输出是各种各样的东西,但包括myDets.sublong和myDets.sublat。这两个是我正在使用的。它们的格式为117:34:3.45,我读为度/分/秒,并使用D + M / 60 + S / 3600进行转换。 我认为这是正确的,因为返回的位置看起来适合所涉及的卫星。
之后 - 我只能假设这是造成这种情况的pyephem计算?
我希望这是有道理的,如果有人对如何管理我有任何指示我会非常感激。
由于
答案 0 :(得分:0)
我似乎已经感染了“在网上发布后找到解决方案”'错误...
Sooo,在从DDMMSS转换为DD时,似乎我没有考虑负面/正面因素。
以下是我的代码 - 我知道这很难看。
dmsLong = str(satLine.sublong);
#print dmsLong
dmsLat = str(satLine.sublat);
ddLong = abs(float(dmsLong.split(":")[0]))+(float(dmsLong.split(":")[1])/60)+(float(dmsLong.split(":")[2])/3600)
ddLat = abs(float(dmsLat.split(":")[0]))+(float(dmsLat.split(":")[1])/60)+(float(dmsLat.split(":")[2])/3600)
if float(dmsLong.split(":")[0]) < 0:
ddLong = -ddLong
if float(dmsLat.split(":")[0]) < 0:
ddLat = -ddLat
#print ddLong
coordstring += "[" + str(ddLong) + "," + str(ddLat) + "],"
所以这似乎有助于使曲线更平滑。
感谢阅读!
答案 1 :(得分:0)
您可以通过对数字进行数学运算将sublat
等值直接转换为数字:
print(satLine.sublat)
print(satLine.sublat / ephem.degree)
输出:
45:54:58.6
45.9162779596