import pandas as pd
import numpy as np
from pyproj import Transformer
import matplotlib.pyplot as plt
from haversine import haversine
读取txt,需要将txt文件放入脚本所在文件夹
df900 = pd.read_table("M900-2",header = None,sep = ',',dtype=str)
df100 = pd.read_table("M100X-2",header = None,sep = ',',dtype=str)
df华测 = pd.read_table("华测-2",header = None,sep = ',',dtype=str)
df100.head(10)
删除M900文本中的 Warning Ant2 Check!信息
df901 = df900[ ~ df900[0].str.contains('Warning')]
度分格式转换成度函数
def dufen_to_du(a):
E = a[4].str[0:3].astype(float)+a[4].str[3:].astype(float)/60
N = a[2].str[0:2].astype(float)+a[2].str[2:].astype(float)/60
return E,N
将元祖转换成DataFrame,并将角度换算成弧度
df902 = pd.DataFrame(dufen_to_du(df901)).T
#df902 = np.radians(pd.DataFrame(dufen_to_du(df901)).T)
df102 = pd.DataFrame(dufen_to_du(df100)).T
#df102 = np.radians(pd.DataFrame(dufen_to_du(df100)).T)
df华测2 = pd.DataFrame(dufen_to_du(df华测)).T
#df华测2 = np.radians(pd.DataFrame(dufen_to_du(df华测)).T)
调用第三方库将经纬度转换成UTM坐标系下的XY坐标
参数1:WGS84地理坐标系统 对应 4326
参数2:上海所在区域 WGS_1984_UTM_Zone_51N 对应 32651,WGS84地理坐标系统 对应 3857
tf = Transformer.from_crs("epsg:4326", "epsg:32651")
df903 = pd.DataFrame(tf.transform(df902[2].values,df902[4].values)).T
df103 = pd.DataFrame(tf.transform(df102[2].values,df102[4].values)).T
df华测3 = pd.DataFrame(tf.transform(df华测2[2].values,df华测2[4].values)).T
# 设置起点和终点的经纬度
#start = (df902[2], df902[4])
#end = (df102[2], df102[4])
# 计算距离,单位为千米
#distance = haversine(start, end)
#更改列名
df903.columns=['M900X','M900Y']
df103.columns=['M100X','M100Y']
df华测3.columns=['华测X','华测Y']
#增添一列注明解状态
df103.insert(loc=2,column='解状态',value= '')
df103['解状态'] = df100.loc[:,6]
#更改索引为UTC时间
df903.index = df901[1].astype(float).round(1)
df103.index = df100[1].astype(float).round(1)
df华测3.index = df华测[1].astype(float).round(1)
#导出计算的XY结果
#df903.to_excel("M900经纬度转XY结果.xlsx")
#df103.to_excel("M100X经纬度转XY结果.xlsx")
#df华测3.to_excel("华测经纬度转XY结果.xlsx")
合并DataFrame
df = pd.merge(df903,df103,right_index=True,left_index=True)
df1 = pd.merge(df,df华测3,right_index=True,left_index=True)
插入列M900_M100距离、M900_华测距离
df1.insert(loc=7,column='M900_M100距离',value= "")
df1.insert(loc=8,column='M900_华测距离',value= "")
计算距离
df1['M900_M100距离']=np.sqrt(np.square(df1['M900X']-df1['M100X'])+np.square(df1['M900Y']-df1['M100Y']))
df1['M900_华测距离']=np.sqrt(np.square(df1['M900X']-df1['华测X'])+np.square(df1['M900Y']-df1['华测Y']))
预览结果
df1.head(10)
输出距离计算结果
df1.to_excel("距离计算结果.xlsx")
plt.scatter(df1['M900X'],df1['M900Y'])
plt.show()