计算与当前纬度和经度的距离(在一公里内具有不同纬度和经度)

时间:2019-03-19 20:30:10

标签: php mysql

我认为有问题,但找不到理想的解决方案。我在Mysql表中存储不同的餐厅位置经度和纬度。我想使用经度和纬度在距用户当前位置约1公里的径向位置找到一家餐厅,因此该如何做。我必须显示距离用户当前位置经纬度方圆1公里范围内的所有餐馆。

2 个答案:

答案 0 :(得分:1)

这是使用经度和纬度的距​​离公式

a = sin²(Δφ/2) + cos φ1 ⋅ cos φ2 ⋅ sin²(Δλ/2)

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

d = R * c
//Where φ represent the latitudes, and λ represent the longitudes.

参考:https://www.sisense.com/blog/latitude-longitude-distance-calculation-explained/

您还可以检查此页面是否使用javascript。 https://www.movable-type.co.uk/scripts/latlong.html

答案 1 :(得分:-2)

请记住,纬度和经度最初是用度数写的,我想您首先需要知道1º是多少距离,在一些书和网站上说1º约为111 km,具体取决于距赤道线的距离有多近,所以(或多或少):

1º  - 111km, also 1º equals 60'
then 1' should be 1.85km, and 1' equals 60"
then 1" is more or less 0.03km 
so 32.4324" is about 1km

现在...基本上,您现在需要基于初始位置来确定正方形的极限,为此,只需将32.4324“添加/减去纬度和经度,就可以尝试一下。让我们去拉斯维加斯(使用谷歌地图)

36.1699412,-115.1398296

此位置在一个六进制符号上,让我们转换32.4324“。其简单...将其除以3600,即0.009009009,这是您必须在纬度/经度中添加/减去的值

north bound, after add: 36.1789502
south bound, after substract: 36.1609322
east bound, after add: -115.1308206
west bound, after substract: -115.1488386

现在在gmap上尝试找到ex的这些边界(北边界:36.1789502,-115.1398296),您将看到该边界刚好位于原始位置上方,您还可以测量距原始位置的距离,最大可达1km,而该距离或多或少接近您刚刚计算出的北边界。

因此,现在,只需查询数据库并在北纬(36.1609322)和南纬(36.1789502)之间,经度在西边界(-115.1488386)和东边界(-115.1308206)之间进行过滤,就可以了做工作。因此,魔术只是将0.009009009加/减到任何位置。