介绍

众所周知地球是一个球体,地平面是一个弧形,那么两个地理位置之间的中点该如何确定,比如北京与上海两个城市之间的中点在哪里?
可以直接对经纬度进行平均,求中点吗?答案:当然不可以
我们都知道一个地理位置是由经度、维度来确定,平时在计算地理信息时基本都是两列数据,一列是经度,一列是维度,比如:
北京:"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轴如何进行投影(可进行参考):

球面点进行分解

根据手绘图可以计算出,各个分量:

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计算两个地理位置之间的中点相关推荐

  1. python计算两个向量之间的欧氏距离

    python计算两个向量之间的欧氏距离 代码: import numpy as np # 向量的值 feature_1 = np.array([1,2,3]) feature_2 = np.array ...

  2. python 计算两个日期之间的月数差额

    用python 计算两个日期之间的月数 一个多月认为是2个月 结果: beginTime="2022-03-31" endTime="2022-05-31" # ...

  3. python 计算两个向量之间的夹角

    python 计算两个向量之间的夹角 使用python计算两个向量的夹角代码如下: import numpy as np def dot_product_angle(v1, v2):if np.lin ...

  4. python计算两个点之间的距离_python实现两个经纬度点之间的距离和方位角的方法...

    最近做有关GPS轨迹上有关的东西,花费心思较多,对两个常用的函数总结一下,求距离和求方位角,比较精确,欢迎交流! 1. 求两个经纬点的方位角,P0(latA, lonA), P1(latB, lonB ...

  5. Python 计算两个日期之间天数

    关注RPA请访问网站: www.i-search.com.cn 学Python,用RPA,欢迎下载使用 www.i-search.com.cn/index.html?from=line1 有的时候要统 ...

  6. Python计算两个日期之间天数

    有的时候要统计两个日期之间的相距天数,可能有很多种方法,但使用datetime模块的datetime方法无疑是里面比较简单的,具体代码如下: >>> import datetime ...

  7. Python 计算两个序列之间差异的显著性水平检验

    ###################################################尝试显著性检验 ## 把2月份和3月份 # 从整体上来看,先看边界层高度的情况 # 整理气象数据 ...

  8. python 计算两个年份之间闰年的数量 判断某年份是否为闰年

    import calendar print(calendar.isleap(2020)) print(calendar.isleap(2021)) print(calendar.leapdays(20 ...

  9. Python计算向量夹角代码:如何用代码计算两个向量之间的夹角?

    Python计算向量夹角代码:如何用代码计算两个向量之间的夹角? 向量夹角是指两个向量之间的夹角,通常用cosine来表示.在机器学习和数据科学领域,计算向量夹角是一个非常基本的概念.Python是一 ...

最新文章

  1. MySql: 常见错误
  2. vue中使用mockjs
  3. 5.1 指针与地址 (C)
  4. 创建ROS消息和服务---ROS学习第8篇
  5. spinbox 上下箭头事件_[React] 3 - 自动绑定 (事件绑定)
  6. STM32开发 -- 自动连接一个未保存过的WIFI
  7. 关于坐标系,关于矩阵及线性相关和无关的关系
  8. 综述 | 深度学习弱目标检测定位
  9. 处理页面动态加载数据
  10. bzoj 1682: [Usaco2005 Mar]Out of Hay 干草危机(最小生成树)
  11. 常用命令2——VNC
  12. Ubuntu16.04 设置自启动脚本,系统重启自动执行自定义脚本任务
  13. Android应用app数据请求捕捉三步走
  14. 最好用的ps/lr滤镜插件ON1 photo raw 2021mac
  15. 微信小程序快手小店登录
  16. 《Web安全攻防》学习笔记
  17. Android Gradle Plugins系列-02-Maven Publish 插件踩坑指南
  18. 设计模式四:用一个生产手机的简单例子说清楚工厂模式
  19. 用Python做一款上课点名程序(附源码)
  20. uniapp运行编译时报错Module build failed,Error: Unbalanced delimiter found in string

热门文章

  1. 区块链是什么 通俗点
  2. linux SSD 硬盘优化
  3. 什么是DTO、VO、BO、PO、DO、POJO
  4. JavaEE大型分布式电商项目 上海淘淘商城 29期
  5. SpringCloud微服务架构标准版本拓扑图
  6. # Pedometer 计步器算法简介
  7. 【山外K60 KL26】jlink 下载失败的最详细解决办法
  8. 傅立叶变换在图像处理中的应用
  9. CSS相关知识【黑马程序员前端】
  10. 干支纪年、干支纪月、干支纪日、干支纪时