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