从文本文件中的数据将度分转换为弧度
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
这些分别是侧面、轴承和 length/distance。我怎样才能把它转换成弧度? (之后我会得到纬度和出发点,但如果我能先得到这个我会稍后再做)然后我把结果写成一个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())
获得 degrees
、minutes
和 seconds
后,您 "flatten" 将它们合并为一个值:
degrees = degrees + minutes / 60.0 + seconds / 3600.0
最后,
rads = math.radians(degrees)
将按照您的提示完成转换。
根据您的用途,您可能希望根据罗盘方向翻转标志,例如:
if compass in ('W', 'S'):
degrees = -degrees
有关转化的更多详细信息,请查找“Geographic coordinate conversion”。
是的,Jay Kominek 是对的。
只需添加到他的回答即可。
- 根据 Jay Kominek 的回答创建函数。
- 通过
CSV
模块读取输入文件,因为文件结构良好。
- 计算输出并将行写入输出文件。
输入:
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
例如在我的文本文件中,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
这些分别是侧面、轴承和 length/distance。我怎样才能把它转换成弧度? (之后我会得到纬度和出发点,但如果我能先得到这个我会稍后再做)然后我把结果写成一个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())
获得 degrees
、minutes
和 seconds
后,您 "flatten" 将它们合并为一个值:
degrees = degrees + minutes / 60.0 + seconds / 3600.0
最后,
rads = math.radians(degrees)
将按照您的提示完成转换。
根据您的用途,您可能希望根据罗盘方向翻转标志,例如:
if compass in ('W', 'S'):
degrees = -degrees
有关转化的更多详细信息,请查找“Geographic coordinate conversion”。
是的,Jay Kominek 是对的。
只需添加到他的回答即可。
- 根据 Jay Kominek 的回答创建函数。
- 通过
CSV
模块读取输入文件,因为文件结构良好。 - 计算输出并将行写入输出文件。
输入:
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