地理大圆距离 C语言,通过经纬度计算两点之间的距离
2019独角兽企业重金招聘Python工程师标准>>>
项目里有一个需求是计算两台机器之间的距离,有了这两台机器的经纬度,距离就很好计算了。
有一个 球面余弦定律 可以用来可以计算球面两点距离,但是根据这个反余弦函数公式会有较大的舍入误差,所以最好选用 半正矢公式 是最好的,航海上运用广泛的也是半正矢公式。
根据 半正矢函数(半正矢公式) 的定义和两角和的余弦函数展开式求出使用半正矢函数计算大圆距离的公式。
首先 半正矢公式 的权威介绍可以参考维基百科: https://en.wikipedia.org/wiki/Haversine_formula
关于求大圆距离也就是从球面的一点A出发到达球面上另一点B,所经过的最短路径的长度,可以参考: https://en.wikipedia.org/wiki/Great-circle_distance
知道了数学理论基础,接下来就是要把计算方法翻译成计算机的计算逻辑。
如图所示 d 就是我们要求的距离,
代码如下:
/**
* 根据经纬度计算两点间的距离距离
*
* @param long1 经度1
* @param lat1 纬度1
* @param long2 经度2
* @param lat2 纬度2
* @return double 距离,单位是 米
*/
private double findDistance(double long1, double lat1, double long2, double lat2) {
// 地球半径的平均值,
final double R = 6371393;
lat1 = lat1 * Math.PI / 180.0;
lat2 = lat2 * Math.PI / 180.0;
double a = lat1 - lat2;
double b = (long1 - long2) * Math.PI / 180.0;
double sa2 = Math.sin(a / 2.0);
double sb2 = Math.sin(b / 2.0);
return 2 * R * Math.asin( Math.sqrt( sa2 * sa2 + Math.cos(lat1) * Math.cos(lat2) * sb2 * sb2 ) );
}
测试数据记录:
深圳桃园地铁站 22.5323483070,113.9248001575
深圳大新地铁站 22.5322492086,113.9152836800
实际距离:985
程序运行结果:977
深圳市 22.5277797987,114.0682983398
惠州市 23.1024705550,114.4198608398
实际距离:73368
程序运行结果:73366
深圳市 22.544300,114.065379
北京市 39.908057,116.409885
实际距离:1943.381
程序运行结果:1943.501
这样得到的数据在数学的严谨上来说不算是最准确的,更准确的方法,应该是考虑地球离心率的Vincenty公式或其他有关地理距离的论文所给出方法来得到半径值,因为地球并不是真正完全的球形的,所以使用地球的平均半径只能算是一个折中值。
地理大圆距离 C语言,通过经纬度计算两点之间的距离相关推荐
- Java根据经纬度计算两点之间的距离
1. 前言 在我们平时使用美团,饿了么等app进行订餐,或者使用猫眼进行订电影票的时候,都有一个距离的排序,表明该家店距离我们当前的位置,这种基于地理位置的服务,统一被称为LBS(Location ...
- php 如何根据经纬度计算距离,小程序实例:如何根据经纬度计算两点之间的距离(代码)...
本篇文章给大家带来的内容是关于小程序实例:如何根据经纬度计算两点之间的距离(代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助.//计算两点位置距离 getDistance: fun ...
- 根据经纬度计算两点之间的距离(单位米)
package com.xiao.map;// 算法工程师!! public class MapUtils {private static double rad(double d) {return d ...
- 通过经纬度计算两点之间的距离的公式
通过经纬度计算两点之间距离的常用公式如下: 设点 A 的纬度为 $lat_A$,经度为 $lon_A$,点 B 的纬度为 $lat_B$,经度为 $lon_B$,则两点之间的距离 $d$ 为: $d ...
- php根据经纬度计算两点之间的距离
之前我们已经说过了如何根据IP获取当前用户的经纬度,不会获取的小童鞋可以去看一下之前的文章. 这回我们将功能再延伸一下,根据将纬度计算两点之间的距离. 废话不多说,直接上码: function get ...
- 根据经纬度计算两点之间的距离、点到直线的距离
以下内容适合初学者,我用来评估跑路径跟踪结果的代码. 简单的看了其他人的博客,基本都是用半正矢公式(Haversine formula)计算距离的. 其中,a=lat1-lat2(经度差);b=lon ...
- 根据经纬度计算两点之间的距离的公式
//距离单位 米 public static double algorithm(double longitude1, double latitude1, double longitude2, doub ...
- MySQL中利用经纬度计算两点之间的距离
MySQL中利用st_distance 函数计算经纬度距离 方法一: 精确到0.000000米 例: 经度:lon1,lon2 纬度:lat1 , lat2 SELECT st_distance(PO ...
- 根据经纬度计算两点之间的距离---google计算公式推导
经纬度常用词 经度 longitude, 维度 latitude 图和解读来源网上资料,自我也进行一遍推导,有些地方会加入自己的一些理解,重新温故了之前学的三角函数,度,弧度,弧长的概念,记忆模糊 ...
最新文章
- yum-fastestmirror模块的使用 提升yum速度的!
- WinAPI: waveInUnprepareHeader - 清除由 waveInPrepareHeader 完成的准备
- QUIC实战(五) 使用nginx quic开发分支部署支持HTTP3 的NGINX
- 部署Ceph分布式高可用集群中篇
- 学习ASP.NET之前,先了解它
- Servlet的学习之web路径问题
- 解决VS2013+IE11调试DevExpress ASP.NET MVC的性能问题
- logmmse降噪算法
- null object java_java1.8--Null Object模式
- JS正则表达式语法大全(非常详细)
- 今天母亲节,作为程序员,我是这样表达爱的……
- node学习记三之vue与安装的模块(d3\echarts\jquery)
- 在淘宝上遭遇诈骗卖家
- npm 更新 npm_您可以使用8 npm技巧来打动同事
- Linux_vi/vim快捷键
- Android基站定位——通过手机信号获取基站信息
- 2022年下半年软考所有科目详情表
- 微博上对乔布斯的评价
- 索引失效的情况及解决(超详细)
- 网络上游戏制作相关学习站点的网址!