首先,你要想了解清楚经纬度的具体定义,看完后再往下看,便会一目了然。

将地球看成一个球体,A(WA,JA)、B(WB,JB)两点分别为两个点的位置,其中W为纬度,J为经度,O为球心,球半径为R,过A点画出A的纬度圈并与B所在的经度相交与点C,分别过B、C两点做球心O所在直线 的垂线相交与E、H,点B做垂线与CH的延长线相交于点D,OH与BC延长线相交与点F。添加辅助线后的两点距离示意图如图所示。

                                          
图 两点距离示意图

由示意图可知, H、E分别为A、B两点所在纬度圈的圆心,C点为与A点纬度相同,与B点经度相同,F为BC与HE延长线的交点,△OCF∽△DCB,因此:

因为△AHF为直角三角形,所以

             

由于A、C点在同一个纬度圈上,所以

       

设∠ACF为α,则设∠ACF为π-α,根据余弦定理得

综上则可以得出:

          

根据A、B两点经纬度可知:

带入公式(7),化简得

AB弧长(AB两点的距离)为

   

根据三角函数公                                                        

对(8)进行化简,得

具体过程如下图:(手算的,请见谅)

公式中的经纬度均用弧度表示,计算两点距离的核心代码如下:

public static double algorithm(double longitude1, double latitude1, double longitude2, double latitude2) {

double Lat1 = rad(latitude1); // 纬度

double Lat2 = rad(latitude2);

double a = Lat1 - Lat2;//两点纬度之差

double b = rad(longitude1) - rad(longitude2); //经度之差

double s = 2 * Math.asin(Math

.sqrt(Math.pow(Math.sin(a / 2), 2) + Math.cos(Lat1) * Math.cos(Lat2) * Math.pow(Math.sin(b / 2), 2)));//计算两点距离的公式

s = s * 6378137.0;//弧长乘地球半径(半径为米)

s = Math.round(s * 10000d) / 10000d;//精确距离的数值

return s;

}

private static double rad(double d) {

return d * Math.PI / 180.00; //角度转换成弧度

}

根据经纬度算两点距离相关推荐

  1. android double值排序,android根据Double类型数据经纬度算出距离再根据距离实现排序功能...

    前言 项目中用到全国的加油站数据加载 并根据经纬度算出距离 然后根据距离从小到大排序 主要是数据类型是Double 这里必须对数据进行封装 实现也不难 这里讲一下自己的实现方法和实现思路 效果图 先来 ...

  2. js根据经纬度计算两点距离

    js根据经纬度计算两点距离 1.html <button type="button" οnclick="distanceByLnglat(116.95400,39. ...

  3. 百度地图根据经纬度计算距离php,详解js根据百度地图提供经纬度计算两点距离...

    正常在使用百度地图时,我们可以通过BMap的实例对象提供的方法计算距离: var map = new BMap.Map('map_canvas'); map.getDistance(point1 ,p ...

  4. mySQL函数根据经纬度计算两点距离

    mysql根据经纬度计算两点距离 定义自定义函数 DROP FUNCTION IF EXISTS func_calcDistance ; CREATE FUNCTION func_calcDistan ...

  5. js距离米转换为千米_js根据经纬度计算两点距离

    地球是一个近乎标准的椭球体,它的赤道半径为6378.140千米,极半径为6356.755千米,平均半径6371.004千米.如果我们假设地球是一个完美的球体,那么它的半径就是地球的平均半径,记为R.如 ...

  6. js 根据百度地图提供经纬度计算两点距离

    正常在使用百度地图时,我们可以通过BMap的实例对象提供的方法计算距离: var map = new BMap.Map('map_canvas'); map.getDistance(point1 ,p ...

  7. 地球经纬度计算两点距离

    现在利用--地球经纬度计算两点的距离--的基本原理计算气辉层所对应的经纬度距离. 基本原理如下: 纬度分为60分,每一分再分为60秒以及秒的小数.没错,60进制,纬度线投射在图上看似水平的平行线,但实 ...

  8. python 根据经纬度计算两点距离

    def calcDistance(Lng_A, Lat_A, Lng_B, Lat_B):     """     根据两个点的经纬度求两点之间的距离     :para ...

  9. Java如何根据经纬度计算两点距离?

    在实际开发中,计算两点距离的应用场景有很多,比如,钉钉的打卡功能,超过距离不允许打卡. 经纬度实体类 /** *Data是lombok的注解,提供类的get.set.equals.hashCode.t ...

  10. python通过经纬度算出距离_Python中如何利用经纬度进行距离计算

    前些天由于工作中需求,要计算经纬度之间的距离,当我去网上搜索距离计算的方法时,发现很多文章中的方法乍一看都是很不同的,同是进行距离计算,为啥这么不一样呢?后来才发现问题在于很多文章没有进行相关的原理说 ...

最新文章

  1. linux重启查看日志及历史记录 查询原因
  2. sql 无法删除当前数据库,因为当前数据库正在使用
  3. 认识mysql总结_从根上理解Mysql - 读后个人总结1-搜云库
  4. BigDecimal丢失精度的坑
  5. 滴水穿石-07Java开发中常见的错误
  6. FastDFS多tracker配置
  7. 发现了一个美图看看软件的一个bug
  8. 分享SCI写作经验和一些工具
  9. 关于Linux内核vmlinuz、initrd.img和System.map
  10. python怎么编辑浏览器_怎样修改anaconda默认浏览器
  11. 在类中找不到 main 方法, 请将 main 方法定义为: public static void main(String[] args)
  12. 零信任的过去、现在和未来
  13. 1665 完成所有任务的最少初始能量
  14. 《大江大河2》里的创业故事
  15. python 报 KeyError: ('coupon_type', 'occurred at index act_code')故障
  16. 【SCNU课堂笔记】计划任务、进程管理、Linux启动流程(未完待续)
  17. TGA图像文件格式分析
  18. 杨校老师课堂之CSDN博客查找博文汇总-目录
  19. DI(Dependence Injection)依赖注入
  20. 本科学历的我拿到了腾讯的Offer、给大家推荐零基础初学小白C++学习路线,走过路过不要错,动动小手看看吧!!!

热门文章

  1. TryJquery- 14个jquery视频
  2. 免root卸载MIUI中在通知栏中推送广告的应用——msa
  3. 单网口RFC2544测试——信而泰网络测试仪实操
  4. 基于ssm的记账管理系统设计与实现【毕业设计jsp】
  5. 【Unity】Fly Bird(游戏实战)(1)
  6. 安卓android系统集成自己的程序 (海思hi3798mv200 安卓7.1sdk)
  7. 查看opencv版本
  8. 公差与配合查询的相关术语
  9. xp oracle10闪退,cad2010win10闪退怎么办_win10cad2010打开就闪退的解决方法
  10. 像素值、物理尺寸、分辨率三者关系