我的应用程序中有很多用户,他们都有一个固定的位置点我想创建一个新的部分,用户可以看到附近的其他用户,就像Messenger Wichet和Bitalk,我该如何比较这些地方和craeat json列出来了吗?
答案 0 :(得分:0)
要从任何纬度和经度找到给定距离附近的点,我们使用称为Haversine公式的球面三角函数方程式:
R = earth’s radius (mean radius = 6,371km)
Δlat = lat2− lat1
Δlong = long2− long1
a = sin²(Δlat/2) + cos(lat1).cos(lat2).sin²(Δlong/2)
c = 2.atan2(√a, √(1−a))
d = R.c
Angles need to be in radians to pass to Trigonometric functions
如果不是专家数学家,这基本上转换为以下MySQL查询:
SELECT *,
( 3959 * acos( cos( radians(55.864237) ) * cos( radians( latitude ) )
* cos( radians( longitude ) - radians(-4.251806) ) + sin( radians(55.864237) )
* sin( radians( latitude ) ) ) ) AS distance
FROM postcodes HAVING distance < 20
ORDER BY distance LIMIT 1;
上面我检查了20英里内的任何区域,但你可以根据需要做短或长。查询开头的3959
数字是用于里程的数字,如果您使用公里数,则应将此数字更改为6371
。我将它限制为1行,因为我只想要最接近的匹配,但是你可能想在其他情况下改变它!
这是我写的一篇小博客文章提醒自己我是如何做到的,你可以在这里阅读:https://delboy1978uk.wordpress.com/2014/08/04/geolocate-your-visitors/