2014-11-05 104 views
1

我正在使用pyephem來計算特定時間的特定衛星的位置。 使用這裏描述的簡單3LE方法做到這一點; http://rhodesmill.org/pyephem/quick.html#catalog-format在pyepehm中的軌道計算看起來並不順利

什麼,我那麼做的是寫一個循環,並增加x分鐘到我現在(的)時間,這樣我可以在未來獲得衛星的位置 - 在我的腦海裏,因此創建的軌道就會跟隨。

因此,使用

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

我似乎已經感染了「找到解決方案,一旦在網上發佈」錯誤......

的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) + "]," 

因此,似乎已經工作,使曲線更平滑。

感謝您的閱讀!

0

你可以做數學與他們一樣sublat值直接轉換爲數字:

print(satLine.sublat) 
print(satLine.sublat/ephem.degree) 

輸出:

45:54:58.6 
45.9162779596