0

python 和编程的初学者 - 我想从 inputfile.txt' 读取 WGS84 DD lat long 值并将它们转换为新的坐标系统 N/E 并将 N/E 输出写入'outputfile.txt。输入文件中还有其他数据列我想携带并写入新文件,省略未转换的坐标。我不确定如何将每行的纬度/经度一次一个地放入公式中,一行接一行,直到文件结束。我已经测试了输入数据和公式,并且知道它有效。为简洁起见,我省略了输入列表并显示公式。通过阅读此博客并观看 youtube 这我所了解的内容,我需要创建一个类,该类指定一种方法来根据类中包含的输入值和公式处理来自 txt 文件的数据。

import math
class Coordtrans
    def__init__(self, long, lat):
        self.long = long
        self.lat = lat
f = open('inputfile.txt')
for col in row[6:]

# how do input lat into formula?
# do I try all lats first, then longs (col by col), or one lat/long pair row by row?
# do I need a separate 'for' loop for lat and long?


#formulas

DB =Lat-Bo                           #lat from input file
u =DB*(L1+DB*(L2+DB*(L3+L4*DB)))
R =Ro-u
Y =(Lo-Long)*SinBo                   #long from input file
northing = No+u+R*math.sin(Y*math.pi/180)*math.tan(Y*math.pi/360) 
#write this output to ('outputfile.txt')
easting = Eo + R*math.sin(Y*math.pi/180)
#write to ('outputfile.txt')
4

2 回答 2

1

您可以从公式中创建一个函数:

import csv

def latlong_to_ne(Lat, Long):
    DB =Lat-Bo                           #lat from input file
    u =DB*(L1+DB*(L2+DB*(L3+L4*DB)))
    R =Ro-u
    Y =(Lo-Long)*SinBo                   #long from input file
    northing = No+u+R*math.sin(Y*math.pi/180)*math.tan(Y*math.pi/360) 
    easting = Eo + R*math.sin(Y*math.pi/180)
    return northing, easting

with open('inputfile.txt', 'rb') as f1, open('outputfile.txt', 'wb') as f2:
    w = csv.writer(f2)
    for row in csv.reader(f):
        lat = float(row[7])
        long = float(row[8])
        N, E = latlong_to_ne(lat, long)
        newrow = row[:7] + [N, E, row[9]]
        w.writerow(newrow)
于 2012-06-06T06:31:31.570 回答
0

这取决于如何在输入文本文件中重新表达 lat/lans。

尝试将 lats 和 lans 作为 Formualtion N AND E 的集合是一个好主意。

如果有一些字符分隔,您可以使用正则表达式来识别纬度/纬度。

于 2012-06-06T06:09:17.780 回答