python 探空数据根据“纬度”“经度”“纬度偏移量”“经度偏移量”列,纬度、经度、偏移量为浮点数,计算具体的经纬度
在Python中,如果您有包含“纬度”、“经度”、“纬度偏移量”和“经度偏移量”的DataFrame,并且这些值都是浮点数,可以使用这些值来计算新的、具体的经纬度。通常,这些偏移量是基于某种单位(如米、公里等)在地球表面上的距离转换而来的。由于地球是一个近似椭球体,计算精确的偏移后的经纬度需要考虑地球的曲率。
然而,对于小范围的偏移(例如几公里内),可以使用一种简化的方法,即“Haversine公式”的逆运算的一个近似版本,但这种方法通常用于从经纬度计算距离,而不是从距离反推经纬度。对于小偏移量,一个简单的线性近似(基于地球在某个点的切线平面)可能是足够的,但请注意这种方法的精度有限。
下面是一个使用线性近似的示例代码,但请注意这种方法并不精确,特别是在接近极点或偏移量较大时:
#!/usr/bin/python3 # -*- coding: utf-8 -*- """ @Time : 2025/1/20 22:24 @Author : Suyue @Email : 1493117872@qq.com @File : cloud_area.py @Project : untitled4 """ import pandas as pd import numpy as np # 读取CSV文件到DataFrame df = pd.read_csv('D:/探空数据计算/tankong-2020-50527_with_final_times.csv') # 并且这些偏移量是以某种单位(例如米)表示的在地球表面上的距离。 # 注意:这里的偏移量单位需要转换为度或弧度之前进行适当的转换,但这里我们假设是小偏移量并使用线性近似。 # 定义一个函数来计算新的经纬度 def calculate_new_coordinates(row, earth_radius=6371e3): # 地球半径,单位:米 # 注意:这里的偏移量转换是非常简化的,并不准确! # 正确的做法是使用更复杂的地理库(如geopy、pyproj)来进行精确的转换。 # 但为了示例,我们假设偏移量很小,并且单位已经是度(这不是实际情况,仅用于演示)。 # 获取原始经纬度 lat = row['Lat'] lon = row['Lon'] # 获取偏移量(这里假设已经是度,实际上需要先从米转换为度) lat_dev = row['Lat_Dev'] # 实际上需要转换:offset_meters / (earth_radius * pi / 180) * cos(lat) lon_dev = row['Lon_Dev'] # 实际上需要转换:offset_meters / (earth_radius * cos(lat) * pi / 180) # 计算新的经纬度(这里直接使用加法,实际上应该使用更复杂的公式) new_lat = lat + lat_dev new_lon = lon + lon_dev return new_lat, new_lon # 应用函数并添加新列 df[['New_Latitude', 'New_Longitude']] = df.apply(lambda row: pd.Series(calculate_new_coordinates(row)), axis=1) # 将结果写入Excel文件 output_file_path = 'D:/探空数据计算/tankong-2020-50527_with_final_times_lat_lon.csv' df.to_csv(output_file_path, index=False) # index=False表示不写入行索引 # 打印成功消息 print(f"结果已成功写入Excel文件: {output_file_path}")
批量处理数据:
#!usr/bin/env python # -*- coding:utf-8 -*- """ @author: Suyue @file: batch_process_raindrop_data.py @time: 2025/02/19 @desc: 批量经纬度转换 """ import pandas as pd import numpy as np import os import glob # 设置CSV文件所在的目录 input_directory = '/lianxi2/' # 获取该目录下所有CSV文件的列表 csv_files = glob.glob(os.path.join(input_directory, '*.csv',)) # 遍历每个CSV文件 for csv_file in csv_files: # 读取CSV文件到DataFrame df = pd.read_csv(csv_file, encoding='gbk') # 定义一个函数来计算新的经纬度 def calculate_new_coordinates(row, earth_radius=6371e3): # 注意:这里的偏移量转换是非常简化的,并不准确! # 正确的做法是使用更复杂的地理库(如geopy、pyproj)来进行精确的转换。 # 但为了示例,我们假设偏移量很小,并且单位已经是度(这不是实际情况,仅用于演示)。 # 获取原始经纬度 lat = row['Lat'] lon = row['Lon'] # 获取偏移量(这里假设已经是度,实际上需要先从米转换为度) lat_dev = row['Lat_Dev'] # 实际上需要转换:offset_meters / (earth_radius * pi / 180) * cos(lat) lon_dev = row['Lon_Dev'] # 实际上需要转换:offset_meters / (earth_radius * cos(lat) * pi / 180) # 计算新的经纬度(这里直接使用加法,实际上应该使用更复杂的公式) new_lat = lat + lat_dev new_lon = lon + lon_dev return new_lat, new_lon # 应用函数并添加新列(注意:这里我们假设每个CSV文件都有'Lat', 'Lon', 'Lat_Dev', 'Lon_Dev'列) df[['New_Latitude', 'New_Longitude']] = df.apply(lambda row: pd.Series(calculate_new_coordinates(row)), axis=1) # 将结果写回原文件(这里直接覆盖原文件,请务必小心) # 如果想要保留原文件,可以将结果写入一个新文件,例如:csv_file.replace('.csv', '_modified.csv') df.to_csv(csv_file, index=False, encoding='gbk') # 打印成功消息(为了避免输出过多信息,这里可以选择性地打印每个文件的处理状态) # print(f"结果已成功写入文件: {csv_file}") # 可选:打印一个总结消息表示所有文件都已处理完毕 print("所有文件都已成功处理。")
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)