利用Python计算两个地理位置之间的中点
介绍
众所周知地球是一个球体,地平面是一个弧形,那么两个地理位置之间的中点该如何确定,比如北京与上海两个城市之间的中点在哪里?
可以直接对经纬度进行平均,求中点吗?答案:当然不可以
我们都知道一个地理位置是由经度、维度来确定,平时在计算地理信息时基本都是两列数据,一列是经度,一列是维度,比如:
北京:"lon":116.512885,"lat":39.847469,
上海:"lon":116.332334,"lat":39.882806
- lon:longitude 经度
经度是指通过某地的经线面与本初子午面所成的二面角。
在本初子午线以东的经度叫东经,在本初子午线以西的叫西经。
东经用“E”表示,西经用“W”表示。- lat:latitude 维度
赤道的纬度为0°,将行星平分为南半球和北半球。
纬度是指某点与地球球心的连线和地球赤道面所成的线面角,其数值在0至90度之间。
位于赤道以北的点的纬度叫北纬,记为N,位于赤道以南的点的纬度称南纬,记为S。
概念-----计算原理
那么应该怎么计算呢?
我们可以把地球看做是一个立体坐标系,有x
轴,y
轴,z
轴三个方向,对于球面上的一个点,可以分别计算出在x
轴,y
轴,z
轴的投影,那么在三个轴上面的分量是可以直接求均值,最后再进行反向合成,这样即可求出球面上对应的中点。
下图手工画出了,在x
轴,y
轴,z
轴如何进行投影(可进行参考):
![](/assets/blank.gif)
根据手绘图可以计算出,各个分量:
x = cos(lat) * sin(lon)
y = cos(lat) * cos(lon)
z = sin(lat)
角度和弧度相互转换
由于我们实际数据中的经纬度是角度,而我们在计算分量时需要用弧度,比如cos(π/2)
,这里就先需要转换,那么怎么进行转换:
python的math模块里面有相应转换函数
radians()-----将角度转换为弧度
degrees()-----将弧度转换为角度
脑补一下角度与弧度:
度和弧度都是衡量角的大小的单位,就像米(m)和英寸(in)都是用来衡量长度的单位。度用°来表示,弧度用rad表示。
1rad = (180/π)° ≈ 57.3°
1° = (π/180)rad ≈ 0.01745rad弧度的定义
在一个圆中,弧长等于半径的弧,其所对的圆心角就是 1rad。也就是说,两条射线从圆心向圆周射出,形成一个夹角和夹角正对的一段弧。当这段弧的长度正好等于圆的半径时,两条射线的夹角的弧度为 1。
弧度根据定义,圆一周的弧度数为 2πr/r = 2π,360° = 2πrad,平角(即 180° 角)为 πrad,直角为 π/2rad
角度与弧度在具体计算中,角度以弧度给出时,通常不写弧度单位,直接写值。最典型的例子是三角函数,例如sin(8π)、tan(3π/2)
自定义函数
import pandas as pd
import numpy as np
from math import cos, sin, atan2, sqrt, radians, degreesdata=pd.read_excel('./data.xlsx')def center_geolocation(df): """输入多个经纬度坐标,找出中心点 [lon,lat]->[经度,维度]:param geolocations: 列表:return 中心经纬度"""x = 0y = 0z = 0lenth = len(df)for lon, lat in zip(df['lon'].to_list(),df['lat'].to_list()):lon = radians(float(lon)) #radians将角度转换为弧度lat = radians(float(lat))x += cos(lat) * sin(lon)y += cos(lat) * cos(lon)z += sin(lat)x = float(x / lenth)y = float(y / lenth)z = float(z / lenth)#degrees将弧度转换为角度lon=degrees(atan2(x, y))lat=degrees(atan2(z, sqrt(x * x + y * y)))return pd.DataFrame({'lon':[lon],'lat':[lat]}) #使用
result_data=data.groupby('ID').apply(center_geolocation)
result_data.index=result_data.index.droplevel(level=1)
result_data.to_excel('./result_data.xlsx')
利用Python计算两个地理位置之间的中点相关推荐
- python计算两个向量之间的欧氏距离
python计算两个向量之间的欧氏距离 代码: import numpy as np # 向量的值 feature_1 = np.array([1,2,3]) feature_2 = np.array ...
- python 计算两个日期之间的月数差额
用python 计算两个日期之间的月数 一个多月认为是2个月 结果: beginTime="2022-03-31" endTime="2022-05-31" # ...
- python 计算两个向量之间的夹角
python 计算两个向量之间的夹角 使用python计算两个向量的夹角代码如下: import numpy as np def dot_product_angle(v1, v2):if np.lin ...
- python计算两个点之间的距离_python实现两个经纬度点之间的距离和方位角的方法...
最近做有关GPS轨迹上有关的东西,花费心思较多,对两个常用的函数总结一下,求距离和求方位角,比较精确,欢迎交流! 1. 求两个经纬点的方位角,P0(latA, lonA), P1(latB, lonB ...
- Python 计算两个日期之间天数
关注RPA请访问网站: www.i-search.com.cn 学Python,用RPA,欢迎下载使用 www.i-search.com.cn/index.html?from=line1 有的时候要统 ...
- Python计算两个日期之间天数
有的时候要统计两个日期之间的相距天数,可能有很多种方法,但使用datetime模块的datetime方法无疑是里面比较简单的,具体代码如下: >>> import datetime ...
- Python 计算两个序列之间差异的显著性水平检验
###################################################尝试显著性检验 ## 把2月份和3月份 # 从整体上来看,先看边界层高度的情况 # 整理气象数据 ...
- python 计算两个年份之间闰年的数量 判断某年份是否为闰年
import calendar print(calendar.isleap(2020)) print(calendar.isleap(2021)) print(calendar.leapdays(20 ...
- Python计算向量夹角代码:如何用代码计算两个向量之间的夹角?
Python计算向量夹角代码:如何用代码计算两个向量之间的夹角? 向量夹角是指两个向量之间的夹角,通常用cosine来表示.在机器学习和数据科学领域,计算向量夹角是一个非常基本的概念.Python是一 ...
最新文章
- MySql: 常见错误
- vue中使用mockjs
- 5.1 指针与地址 (C)
- 创建ROS消息和服务---ROS学习第8篇
- spinbox 上下箭头事件_[React] 3 - 自动绑定 (事件绑定)
- STM32开发 -- 自动连接一个未保存过的WIFI
- 关于坐标系,关于矩阵及线性相关和无关的关系
- 综述 | 深度学习弱目标检测定位
- 处理页面动态加载数据
- bzoj 1682: [Usaco2005 Mar]Out of Hay 干草危机(最小生成树)
- 常用命令2——VNC
- Ubuntu16.04 设置自启动脚本,系统重启自动执行自定义脚本任务
- Android应用app数据请求捕捉三步走
- 最好用的ps/lr滤镜插件ON1 photo raw 2021mac
- 微信小程序快手小店登录
- 《Web安全攻防》学习笔记
- Android Gradle Plugins系列-02-Maven Publish 插件踩坑指南
- 设计模式四:用一个生产手机的简单例子说清楚工厂模式
- 用Python做一款上课点名程序(附源码)
- uniapp运行编译时报错Module build failed,Error: Unbalanced delimiter found in string