怎么用Python计算地球上任意两个用经纬度表示的点的弧面距离?
这是来自知乎上的问题。问我的时候,恰好我在写一个和向量计算相关的文章,于是灵光乍现,顺手写了这样一个答案。该算法未经严格验证,请谨慎参考。具体思路如下。
- 将两个点的经纬度换算成空间坐标;
- 计算地心与两个点所成的两个向量的点积;
- 点积除以两个向量的模(也就是地球半径)之积,结果就是向量夹角的余弦;
- 反余弦值对应着两点所在大圆(即经过两点的地球表面最大的圆)的弧度;
- 弧度乘以地球半径,即得弧长。
代码如下。
>>> def get_arc(p0, p1, r=1):z0 = r*np.sin(np.radians(p0[1]))x0 = r*np.cos(np.radians(p0[1]))*np.cos(np.radians(p0[0]))y0 = r*np.cos(np.radians(p0[1]))*np.sin(np.radians(p0[0]))z1 = r*np.sin(np.radians(p1[1]))x1 = r*np.cos(np.radians(p1[1]))*np.cos(np.radians(p1[0]))y1 = r*np.cos(np.radians(p1[1]))*np.sin(np.radians(p1[0]))theta = np.arccos(np.dot((x0,y0,z0),(x1,y1,z1))/(r*r))return theta * r>>> r = 6377.830 # 使用赤道半径,单位:km
>>> 北京 = (116.5,40.0)
>>> 济南 = (117.0,36.4)
>>> 悉尼 = (151.2,-33.9)
>>> 纽约 = (-74.0,40.5)
>>> 巴西利亚 = (-48.0,-15.9)
>>> get_arc(北京, 济南, r=r)
403.10853123743505
>>> get_arc(北京, 悉尼, r=r)
8966.07982007138
>>> get_arc(北京, 纽约, r=r)
11012.732277406261
>>> get_arc(北京, 巴西利亚, r=r)
16962.014473669606
怎么用Python计算地球上任意两个用经纬度表示的点的弧面距离?相关推荐
- 由经纬度计算地球上任意两点的距离
由经纬度计算地球上任意两点的距离 在地球上,城市的地理位置.GPS定位.一些地标的地理位置等是由经纬度给出的,本文主要根据两个地理位置的经纬度,来计算两个地理位置之间的距离. %计算城市间距离 zb= ...
- JAVA 计算地球上任意两点(经纬度)距离
/*** 计算地球上任意两点(经纬度)距离* * @param long1* 第一点经度* @param lat1* 第一点纬度* @param long2* 第二点经度* @param lat2* ...
- 数据库:计算地球上两个坐标点之间里程
今天给大家分享计算地球上两个坐标点之间里程不同数据库版本的脚本. 1.SQLServer脚本 –-计算地球上两个坐标点(经度,纬度)之间距离sql函数 CREATE FUNCTION [dbo].[f ...
- 根据经纬度计算地球上两点之间的距离——Haversine公式介绍及计算步骤
目录 摘要 1.半正矢公式(Haversine Formula)介绍 2.半正矢公式应用 3.半正矢公式计算 3.1 主要思路 3.2 计算步骤 3.2.1 平面向量计算方法 3.2.2 空间向量计算 ...
- 给定经纬度计算距离_根据经纬度计算地球上两点之间的距离js实现代码
利用JS实现的根据经纬度计算地球上两点之间的距离 最近用到了根据经纬度计算地球表面两点间距离的公式,然后就用JS实现了一下. 计算地球表面两点间的距离大概有两种办法. 第一种是默认地球是一个光滑的球面 ...
- php 计算两点时间距离,PHP计算地球上两点之间的距离(示例详解)
给定经度和纬度,求地球上两点之间的距离.首先我们需要了解该问题的解决思路,然后再用PHP代码来实现计算. 此问题可以用半正矢(haversine)公式求解: 大圆距离或正交距离是球面(或地球表面)上两 ...
- python 计算流形上两点之间的测地距离
在分析数据时,有时要计算流形上两点之间的测地距离.本着有现成轮子绝对不自己写的观点,发现可以通过以下方式计算流形上任意两点之间的测地距离. ISOMAP是一种保持测地距离不变的高维空间中低维流形的降维 ...
- 算法----- 给定一颗二叉树,找到二叉树上任意两个节点之间的距离(Java版本)
题目: 给定一颗二叉树,找到二叉树上任意两个节点之间的距离 class TreeNode {TreeNode left;TreeNode right;} 思路: 首先找到一个节点的路径,然后找到另一个 ...
- 根据地球上任意两点的经纬度计算两点间的距离
http://blog.chinaunix.net/u/6776/showart_694778.html 地球是一个近乎标准的椭球体,它的赤道半径为6378.140千米,极半径为6356.755千米, ...
最新文章
- 可以使用的mysql和navigate
- python能写软件吗-python可以编写什么软件
- 9.Boost之正则regex
- SQL 关于地图两个坐标点之间的距离运算
- android 6.0 ios9谁快,没安卓6.0流畅?iOS 9突飞猛进终于不卡
- 前端笔记-thymeleaf获取及回显input标签type=time
- (37)FPGA面试技能提升篇(IUS仿真工具)
- 华为性格测试通关指南
- 【MFC】测边网平差计算
- Java job interview:WinForm桌面小程序设计思想及项目实现思路
- 微信小程序防抖功能的实现
- EMERGENCY! EUREKA MAY BE INCORRECTLY CLAIMING INSTANCES ARE UP WHEN THEY'RE NOT. RENEWALS ARE LESSER
- 0203逻辑卷管理、RAID磁盘阵列、VD0、管理运行级别
- VASP - Bader Charge Analysis
- 海天蚝油《挑战不可能》清华博士远程驾驶无人车迎战高难度车道
- 显著性假设(基础篇)
- 福布斯:阿里巴巴收购雅虎对大家都有利
- 基于php的地铁查询系统,基于php的苏州实时公交/地铁接口调用代码实例
- 什么是腾讯云Redis弹性缓存?
- msgpack-c 官方文档整理翻译之pack
热门文章
- Linux——MySQL视图
- 码科速送同城跑腿小程序v3.0.62+前端+插件
- P2P 技术如何降低实时视频直播带宽
- 无人机集群飞行控制思考
- fork函数的介绍和使用
- Cursor对象详解:
- 链表 幸存 问题_微软-作为远程员工幸存的前三周
- 手机OTG 我的世界_手机存储不够用?插个U盘来帮忙
- tesseract-ocr识别中文扫描图片实例讲解 .
- “摄像头用不了”+win8.1+DELL+外置摄像头+USB免驱的解决办法