import pandas as pd
import utm
from tqdm import tqdm
import os
import re
f_n = 'BSD'#文件最终目录波士顿(BSD)地理信息文件
f_path = r'.\DATA\{}'.format(f_n)
f_filelist = os.listdir(f_path)
f_file_n = []
print("开始进行os文件夹遍历=====>>")
for f_filename in f_filelist:
f_filepath = os.path.join(f_path, f_filename)
f_file_n += [f_filepath]
# 定义正则表达式模式
pattern = r"\\([^\\]+)\.csv"
# 遍历f_file_n列表中的每个元素
f_file_nls=[]
for file_path in f_file_n:
# 使用re.search()查找匹配项
match = re.search(pattern, file_path)
# 如果找到匹配项,输出结果
if match:
result = match.group(1)
f_file_nls+=[result]
else:
print("No match found!!")
print("找到文件:", f_file_nls)
print("os路径导入完成=====>>开始批量对地理数据进行投影")
#------------
for f_i in range(len(f_file_nls)):
file_name="{}".format(f_file_n[f_i])#文件名1
output_name="{}_utm".format(f_file_nls[f_i])
"----路径----"
outputpath=r'.\DATA_UTM\{}.csv'.format(output_name)
file=r'{}'.format(file_name)
"-----------"
gps_data = pd.read_csv(file,encoding='gbk')
# 删除包含nan值的行
gps_data =gps_data.dropna(subset=['s_lon', 's_lat', 'e_lon', 'e_lat'])
lat_slis=list(gps_data['s_lat'])
lon_slis=list(gps_data['s_lon'])
lat_elis=list(gps_data['e_lat'])
lon_elis=list(gps_data['e_lon'])
if f_i==0:
base = utm.from_latlon(lat_slis[0], lon_slis[0])
print("坐标投影基准线:",lat_slis[0],";", lon_slis[0])
x_data, y_data = [], []
for i in tqdm(range(0, len(gps_data))):
tmp = utm.from_latlon(lat_slis[i], lon_slis[i])
x_data.append(tmp[0] - base[0])
y_data.append(tmp[1] - base[1])
gps_data['x_slat'],gps_data['y_slon']=x_data,y_data
"end"
x_data_, y_data_ = [], []
for i in tqdm(range(0, len(gps_data))):
tmp_ = utm.from_latlon(lat_elis[i], lon_elis[i])
x_data_.append(tmp_[0] - base[0])
y_data_.append(tmp_[1] - base[1])
print("数据量与对称列检验:",len(x_data),len(x_data_))
gps_data['x_elat'],gps_data['y_elon']=x_data_,y_data_
gps_data.to_csv(outputpath,sep=',',index=False,header=True)
UTM地理经纬度向通用平面直角坐标系的投影
于 2023-05-18 10:00:32 首次发布