实际上我的服务器数据库中有数百万人的记录,我想获取那些靠近我5英里的人的数据(我的意思是半径为5英里的圆圈)...
我通过网络服务将这些数据发送到iPhone ......
请告诉我如何在我的PHP服务器上执行此操作....
答案 0 :(得分:7)
可能这可以帮到你
例如,您可以输入纬度和经度37和-122度。并且您希望从当前给定的纬度和经度搜索25英里范围内的用户。
SELECT item1, item2,
( 3959 * acos( cos( radians(37) )
* cos( radians( lat ) )
* cos( radians( lng )
- radians(-122) )
+ sin( radians(37) )
* sin( radians( lat ) )
)
) AS distance
FROM geocodeTable
HAVING distance < 25
ORDER BY distance LIMIT 0 , 20;
如果您想要以kms为单位的搜索距离。然后在上面的查询中用6371替换3959。
答案 1 :(得分:2)
您的服务器数据库中有数百万人记录(我希望您遵守数据保护法),那么您需要减少计算所有这些距离的工作量;否则你需要为这些数百万条记录中的每一条记录进行计算。
使用PHP计算“边界框”,可用于从数百万人的记录中选择可能候选人的子集,然后仅计算该人员记录子集的距离。请参阅可移动类型网站上的this article,例如描述如何执行此操作的PHP代码,以及该方法实际工作方式的绝佳描述。