经纬度转换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("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()
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值