经纬度转换XY坐标,并计算距离

经纬度转换XY坐标,并计算距离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

大家好,我是讯享网,很高兴认识大家。
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()
小讯
上一篇 2025-02-26 12:47
下一篇 2025-03-16 08:14

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/58508.html