簡體   English   中英

從文本文件中的數據將度-分鍾轉換為弧度

[英]Converting degrees-minutes to radians from data in a text file

例如在我的文本文件Data.txt中

AB     N05-30-00E      495.85        
BC     N46-02-00E      850.62       
CD     S67-38-00E      855.45       
DE     S12-25-00E     1020.87      
EF     S83-44-00W     1117.26     
FA     N55-09-00W      660.08

這些分別是側面,方位和長度/距離。 如何將其轉換為弧度? (此后,我將獲得緯度和緯度,但是如果我只能先獲得該緯度和緯度,則稍后再做)。然后,我將結果寫入txt文件,第四個和第五個是緯度和緯度。

import math

fileread = open("Data.txt","r")
data = fileread.read
#missing code, convert the string to degrees decimal?
print "%.3f" %  math.cos(math.radians())

我不確定我是否理解您的數據顯示什么,因此這只是字符串轉換部分的粗略提示:

# s = "05-30-00"
(degrees, minutes, seconds) = \
   map(float, re.match("(\d+)-(\d+)-(\d+)", s).groups())

獲得degreesminutesseconds ,就可以將它們“展平”為一個值:

degrees = degrees + minutes / 60.0 + seconds / 3600.0

最后,

rads = math.radians(degrees)

如您所提示,將完成該轉換。

根據您的操作方式,您可能需要根據指南針的方向翻轉標志,例如:

if compass in ('W', 'S'):
  degrees = -degrees

有關轉換的更多詳細信息,請查找“ 地理坐標轉換 ”。

是的,Jay Kominek是對的。

只需添加他的答案即可。

  1. 根據Jay Kominek的回答創建了函數。
  2. 通過CSV模塊讀取輸入文件,因為文件結構良好。
  3. 計算輸出並將行寫入輸出文件。

輸入

AB  N05-30-00E  495.85
BC  N46-02-00E  850.62
CD  S67-38-00E  855.45
DE  S12-25-00E  1020.87
EF  S83-44-00W  1117.26
FA  N55-09-00W  660.08

演示

import csv
import math
import re


def convertRedis(format_input):
    """
        Coordinate format conversion
    degrees minutes seconds: 
    decimal degrees = degrees + minutes}/60 + seconds/3600. 
    """
    degrees, minutes, seconds = map(float, re.match("\w(\d+)-(\d+)-(\d+)\w", format_input).groups())
    degrees = degrees + minutes/60 + seconds/3600
    return math.radians(degrees)


with open("Technical Description.txt") as fp:
    root_r = csv.reader(fp)
    root_r = csv.reader(fp, delimiter='\t')
    with open("output.txt", "wb+") as fp2:
        root_w = csv.writer(fp2, delimiter='\t')
        for row in root_r:
            rads = convertRedis(row[1])
            new_row = list(row)
            distance = float(row[2])
            if "S" in row[1]:
                d_cos =  "%.2f"%(distance*math.cos(rads) * -1, )
            else:
                d_cos =  "%.2f"%(distance*math.cos(rads), )

            if "W" in row[1]:
                d_sin =  "%.2f"%(distance*math.sin(rads) * -1, )
            else:
                d_sin =  "%.2f"%(distance*math.sin(rads), )

            new_row.extend([d_sin, d_cos])
            root_w.writerow(new_row)

輸出:

AB  N05-30-00E  495.85  47.53   493.57
BC  N46-02-00E  850.62  612.23  590.53
CD  S67-38-00E  855.45  791.09  -325.53
DE  S12-25-00E  1020.87 219.51  -996.99
EF  S83-44-00W  1117.26 -1110.58    -121.96
FA  N55-09-00W  660.08  -541.70 377.19

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM