我知道我有類似的問題,但是在幾個小時內嘗試了無數“答案”之后,我認為我最好的下一步是在這里提交我的難題。我尊重你的時間。
幾個小時后,我沒有成功理解為什么我的 Python 腳本不起作用,我決定看看是否有人可以幫助我。本質上,目標是使用天文程式“Stellarium”作為“白天和夜晚的天空”來練習天體導航 (CelNav),在 Microsoft Flight Simulator X (FSX) 的模擬世界中導航。該腳本實際上撰寫了一個“startup.ssc”腳本,用于初始化 Stellarium 的日期、時間和位置。
該程序因此...
- 使用 FSX 并保存“航班”。這將創建一個 *.FLT 檔案,該檔案是一個保存完整情況的文本檔案,包括時間和位置。
- 運行 FSXtoStellarium.py
- 在 *.FLT 文本中找到日期、時間、緯度、經度和高度的行。
- 將資料讀入變數。
- 將度 (°)、分 (')、秒 (") (DMS) 轉換為十進制度 (DD)。
- 最后,該腳本構建一個“startup.ssc”并在記錄的時間和地點打開 Stellarium。
問題:我無法將 DMS 正確讀取到變數中,也無法將 DMS 格式化為十進制度 (DD)。根據我在 IDE (PyScripter) 中設定的“手表”,腳本正在讀取我無法破譯的“int”值,而不是 DMS 的文本字串(例如:W157° 27' 23.20")。
以下是檔案和腳本的一些摘錄。
HMS 賞金.FLT
Various lines of data above...
[SimVars.0]
Latitude=N21° 20' 47.36"
Longitude=W157° 27' 23.20"
Altitude= 000004.93
Various lines of data below...
EOF
FSXtoStellarium.py
Various lines of script above...
# find lat & Lon in the file
start = content.find("SimVars.0")
latstart = content.find("Latitude=")
latend = content.find("Latitude=",latstart 1)
longstart = content.find("Longitude=",start)
longend = content.find(",",longstart)
# convert to dec deg
latitude = float(content[longend 1:latend])/120000
longitude = float(content[longstart 10:longend])/120000
Various lines of script below...
那么,我錯過了什么?
僅供參考 - 我是一個感到困惑的老人。我的職業生涯是在 COBOL/DB2/CICS,但你可以認為我是 Python 新手(它表明,對嗎?)。:)
非常感謝您的幫助,我很樂意提供任何其他資訊。
卡爾文
uj5u.com熱心網友回復:
這是從文本檔案(具有多個輸入行)一直到 python 2.7 中的十進制度數的一種方法:
from __future__ import print_function
content='''
[SimVars.0]
Latitude=N21° 20' 47.36"
Longitude=W157° 27' 23.20"
'''
latKey = "Latitude="
longKey = "Longitude="
latstart = content.index(latKey) len(latKey)
latend = content.find('"', latstart) 1
longstart = content.find(longKey, latend) len(longKey)
longend = content.find('"', longstart) 1
lat = content[latstart:latend]
long = content[longstart:longend]
print()
print('lat ', lat)
print('long ', long)
deg, mnt, sec = [float(x[:-1]) for x in lat[1:].split()]
latVal = deg mnt / 60 sec / 3600
deg, mnt, sec = [float(x[:-1]) for x in long[1:].split()]
longVal = deg mnt / 60 sec / 3600
print()
print('latVal ', latVal)
print('longVal ', longVal)
解釋:
- 我們從一個多行字串開始,
content - 第一次呼叫找到其中子字串的
index()起始位置,我們將長度添加到其中,因為我們關心的是字符后面的字符"Latitude="content"Latitude="= - 第二個
index()呼叫搜索“秒”字符"(標記Latitude子字串的結尾),我們添加一個(對于 的長度") - 第三個
index()呼叫Longitude=與我們對緯度所做的類似,除了它從位置開始,latend因為我們希望Longitude=遵循以下緯度字串Latitude= - 第四次呼叫尋找經度子串的結尾,與上面第二次呼叫緯度
index()完全類似index() - 對串列的賦值
lat使用方括號切片表示法content來提取從末尾Latitude=到后續"字符的子字串 - 分配到
long類似于上一步 - 第一個分配
deg, mnt, sec是tuple使用串列理解為這些變數分配 3 個值:- split
lat[1:],即N去掉前導基本方向字符的 lat ,分成空格分隔的記號21°,20'和47.36" - 對于每個標記,
x[:-1]使用切片表示法洗掉給出字串的最后一個字符21,20并且47.36 float()將這些字串轉換為型別的數字float
- split
- 對 的賦值
latVal執行必要的算術運算,以使用存盤在deg, mnt, sec. longto get to的處理與 for及以上的處理longVal完全類似。latlatVal
輸出:
lat N21° 20' 47.36"
long W157° 27' 23.20"
latVal 21.34648888888889
longVal 157.45644444444443
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/490509.html
標籤:Python python-2.7 寻找 坐标 模拟器
