在php中查找附近的人

时间:2017-09-25 09:26:46

标签: php

我的应用程序中有很多用户,他们都有一个固定的位置点我想创建一个新的部分,用户可以看到附近的其他用户,就像Messenger Wichet和Bitalk,我该如何比较这些地方和craeat json列出来了吗?

1 个答案:

答案 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/