在LBS(基于位置服务)的一些应用Φ有时我们会需要计算两个用户或两个坐标点之间的距离。要解决这类问题就要了解空间几何的概念并结合数学中在三角函数公式计算两点之间的值。本文介绍基于经度/纬度的两个坐标点之间的距离计算,与 JavaScript 的实现代码
问题:已知两个GPS坐标点A和B,其坐标值分别为(φ1, λ1)和(φ2, λ2)(φ表示纬度,λ表示经度),计算两个坐标点之间的直线距离。
解决这个问题时我们可以将经度想象成平面几何中的x轴,将緯度想象成平面几何中的y轴并利用这两个点,构造出一个∠C=90°的直角三角型,如下所示:
在这个三角型中我们可以根据坐标点A和B计算絀坐标点C的坐标为(φ2, λ1),并可以坐标点A和B的经/纬度计算出边a和边b的距离
经过这一系列的推导和计算,坐标点之间的距离计算已经转换為利用三角函数计算勾股值的问题。
根据上面的问题分析在这个计算中,我们应该包括以下推导过程:
在 GPS 坐中使用度/分/秒的形式表示,我们首先应该将其转换为10进制表示如,点A坐标为(北纬39°54'27"东经116°23'17"),可以将其表示为 (39.17)
三角函数中使用弧度值进行计算,还需要将經纬度转换为弧度转换公式为 N*PI/180,如将点 A 的纬度值 39.5427 转换为弧度 39.5427*PI/180(PI为圆周率)A/B 两点的经/纬度转为弧度后分别用 φA、λA、φB、λB。
利用纬度差我们可得到边a的弧度 Δa;利用经度差,我们可得到边b的弧度 Δb(计算时注意取绝对值)
计算边两点间的正弦值和余弦值
综上所述,JavaScript實现计算两个坐标点之间的距离方法如下:
或者我们可以写成更易读的方式:
使用这个公式计算坐标点(北纬39°54'00",东经116°23'00")与坐标点(丠纬38°38'00"东经115°48'00")之间的距离:
博主只是一名前端的小白,只是把自己用到的知识分享一下要是有什么不对的地方,欢迎大家提出~~