在LBS(基于位置服务)的一些应用中,有时我们会需要计算两个用户或两个坐标点之间的距离。要解决这类问题,就要了解空间几何的概念并结合数学中在三角函数公式计算两点之间的值。本文介绍基于经度/纬度的,两个坐标点之间的距离计算,与JavaScript的实现代码。

1. 解决思路

问题:已知两个GPS坐标点A和B,其坐标值分别为(φ1, λ1)和(φ2, λ2)(φ表示纬度,λ表示经度),计算两个坐标点之间的直线距离。

解决这个问题时,我们可以将经度想象成平面几何中的x轴,将纬度想象成平面几何中的y轴。并利用这两个点,构造出一个∠C=90°的直角三角型,如下所示:

在这个三角型中,我们可以根据坐标点A和B计算出坐标点C的坐标为(φ2, λ1),并可以坐标点A和B的经/纬度计算出边a和边b的距离。

经过这一系列的推导和计算,坐标点之间的距离计算,已经转换为利用三角函数计算勾股值的问题。

2. 公式及方法

2.1 公式

根据上面的问题分析,在这个计算中,我们应该包括以下推导过程:

经纬度转换为10进制

在GPS坐中,使用度/分/秒的形式表示,我们首先应该将其转换为10进制表示。如,点A坐标为(北纬39°54'27",东经116°23'17"),可以将其表示为(39.5427, 116.2317)。

经纬度转换为弧度

三角函数中使用弧度值进行计算,还需要将经纬度转换为弧度。转换公式为N*PI/180,如将点A的纬度值39.5427转换为弧度39.5427*PI/180(PI为圆周率)。

经纬度转换为弧度

三角函数中使用弧度值进行计算,还需要将经纬度转换为弧度。转换公式为N*PI/180,如将点A的纬度值39.5427转换为弧度39.5427*PI/180(PI为圆周率)。A/B两点的经/纬度转为弧度后分别用φA、λA、φB、λB

计算边a和边b的弦度

利用纬度差,我们可得到边a的弧度Δa;利用经度差,我们可得到边b的弧度Δb(计算时注意取绝对值)。

计算边两点间的正弦值和余弦值

计算出以上一系列变量后,计算出半正矢值a,其计算公式为sin²(Δa/2)+cos(φA)*cos(φA)*sin²(Δb/2)。

计算边正切值

c = 2*atan2(√a, √(1−a))

返回距离

d = R*c(R表示地球半径)

2.2 算法实现

综上所述,JavaScript实现计算两个坐标点之间的距离方法如下:

function getDistance(lat1, lon1, lat2, lon2) {

var R = 6378137; // 地球长半径

var φ1 = toRadians(lat1);

var φ2 = toRadians(lat2);

var Δφ = toRadians(lat2-lat1);

var Δλ = toRadians(lon2-lon1);

var a = Math.sin(Δφ/2) * Math.sin(Δφ/2) +

Math.cos(φ1) * Math.cos(φ2) *

Math.sin(Δλ/2) * Math.sin(Δλ/2);

var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));

var d = R * c;

return d;

// 转为弧度

function toRadians(d) {

return d * Math.PI / 180;

}

}

或者,我们可以写成更易读的方式:

function getDistance(lat1, lng1, lat2, lng2) {

var dis = 0;

var radLat1 = toRadians(lat1);

var radLat2 = toRadians(lat2);

var deltaLat = radLat1 - radLat2;

var deltaLng = toRadians(lng1) - toRadians(lng2);

var dis = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(deltaLat / 2), 2) + Math.cos(radLat1) * Math.cos(radLat2) * Math.pow(Math.sin(deltaLng / 2), 2)));

return dis * 6378137;

function toRadians(d) { return d * Math.PI / 180;}

}

使用这个公式计算坐标点(北纬39°54'00",东经116°23'00")与坐标点(北纬38°38'00",东经115°48'00")之间的距离:

getDistance(39.54, 116.23, 38.85, 115.48)// 100430.73284694664

html GPS坐标实现,JavaScript 实现GPS坐标点距离计算(两个经/纬度间的距离计算)...相关推荐

  1. 高德地图获取坐标距离_高德地图获取两个经纬度点间直线距离JS/PHP/SQL代码

    最近做了几个小站,要求要定位到当前地址并且显示附近多少公里内的商家和产品. 定位好办,直接用高德地图搞定.有不需要显示地图又需要定位的页面把地图直接隐藏掉都可以.或者可以直接调用高德的定位组件. 但是 ...

  2. PHP+百度地图API+JAVASCRIPT实现GPS坐标与百度坐标转换的实例

    PHP+百度地图API+JAVASCRIPT实现GPS坐标与百度坐标转换的实例 原文:PHP+百度地图API+JAVASCRIPT实现GPS坐标与百度坐标转换的实例 <!--小幅的坐标转换点位程 ...

  3. mysql gps数据查询_Mysql数据库中计算两GPS坐标的距离

    Mysql数据库中计算两GPS坐标的距离有两种方式: 1.直接使用SQL语句:#lat为纬度, lng为经度, 一定不要弄错 declare @lng1 float; declare @lat1 fl ...

  4. 计算坐标点的距离计算机公式,计算两个GPS坐标点的距离

    原标题:计算两个GPS坐标点的距离 在日常开发中,我们难免要计算两个左边之间的距离,但是地图软件api的接口普遍要求我们必须要先将坐标点传递到他们服务器,然后计算出一个距离返还给我们,使用起来太不方便 ...

  5. java gps 距离计算_Java教程之地图中计算两个GPS坐标点的距离

    原标题:Java教程之地图中计算两个GPS坐标点的距离 在日常开发中,我们难免要计算两个左边之间的距离,但是地图软件api的接口普遍要求我们必须要先将坐标点传递到他们服务器,然后计算出一个距离返还给我 ...

  6. oracle 翻译ip归属地/经纬度/定位;获取ip归属地/经纬度/定位;获取ip gps定位/lng,lat/坐标

    目录 首先.oracle 配置访问webservice/url 权限 由于本文使用了pljson,需安装pljson后使用 一.通过pconline获取归属地 二.通过ip-api获取归属地 三.通过 ...

  7. c#语言+计算两个位置的距离,计算两个GPS坐标的距离 方法一 - C#语言

    场景:已知两个GPS点的经纬度坐标信息.计算两点的距离. 1. 距离/纬度关系 GPS: 22.514519,113.380301 GPS: 22.511962,113.380301 距离:284.6 ...

  8. JAVA 拍照 exif GPS_读取图片EXIF块中GPS信息,转换为高德地图API坐标

    最近两天做了一个需求,从APP端上传的照片信息里面读取出GPS位置信息,然后翻译成可读的地点信息. 总结一下,分为三步: (1)提取图片中的GPS信息,使用到了metadata-extractor; ...

  9. gps坐标转百度坐标 java_BD09坐标(百度坐标) WGS84(GPS坐标) GCJ02(国测局坐标) 的相互转换...

    为什么不统一用WGS84地理坐标系这就是国家地理测绘总局对于出版地图的要求,出版地图必须符合GCJ02坐标系标准了,也就是国家规定不能直接使用WGS84地理坐标系.所以定位大家感觉不准确很多又叫出版地 ...

最新文章

  1. 图文解说nginx中server的匹配顺序
  2. java debug体系为什么不能debug到jdk里所有的代码
  3. 2019年财政收支分析_2019年模锻行业经济运行情况分析
  4. 硬干货!一张图弄清楚在ESXi下如何进行网络抓包
  5. PHP 使用 ZipArchive 将文件打包成 zip
  6. Spring框架的本质:1Spring框架的起源
  7. abaqus的python安装文件在哪_Abaqus2016安装教程【附软件下载地址】
  8. 19行Python代码让你拥有属于自己的智能聊天机器人
  9. android4.4 音量控制,android4.4调整音量调节速度
  10. Cast方法oracle,oracle 中cast方法的使用
  11. Chrome下如何复制禁止复制网页上的文字
  12. 东莞耳机工厂告诉你,多唛降噪是什么!
  13. Qt小程序之自绘震动铃铛提示控件
  14. TF实战QA丨这个问题,我以前也遇到过
  15. 电子计算机与多媒体教学教案,《电子计算机与多媒体》教学设计模板3篇
  16. 用友iUAP綦玉冰:学习新技术 应对企业互联网市场
  17. Jackson解析与生成Json字符串
  18. 邮箱里的服务器备份是什么,邮件归档和邮件备份,两者有什么区别?
  19. FEKO计算多层介质的反射系数
  20. aqlserver实用程序_mssql sqlserver数据库监控方法分享

热门文章

  1. java -jar maven项目打包提示.jar中没有主清单属性
  2. RAISERROR (Transact-SQL)
  3. php 页面加载进度条,HTML5/CSS3 网页加载进度条的实现,下载进度条等经典案例
  4. IO流的体系及FileReader、FileWriter
  5. java常见数据校验
  6. 如何获取服务器的地理位置,如何获取Restify服务器的确切IP地址进行监听?
  7. mysql教程丿it教程网_MySQL整体
  8. hystrix断路器引发的相关概念
  9. 1064. 朋友数(20)
  10. SpingBoot+Mybaits+Vue,更新学习