我正在尝试实现一个用户系统,其中一个系统要求就是找到你附近的其他用户。
位置将按国家/地区进行过滤,但不会按城市进行过滤,因此用户可以从同一个国家/地区获取来自不同城市的其他用户。
问题是如何计算城市之间的距离?它不必100%准确,但必须为更近的用户提供一些优先权。
Google Geo位置API会满足这些要求吗?有哪些替代方案?
任何想法如何在没有大量计算的情况下实现它?
我想过要求用户在乡村和城市只是为了在他的个人资料中写作,并从它的IP获取它的地理位置或导入包含所有城市及其地理位置的数据库。
请指导我。
答案 0 :(得分:4)
您可以使用Haversine公式搜索数据库中最近的用户。
$stmt = $dbh->prepare("SELECT name, lat, lng, ( 3959 * acos( cos( radians(?) ) * cos( radians( lat ) ) * cos( radians( lng ) - radians(?) ) + sin( radians(?) ) * sin( radians( lat ) ) ) ) AS distance FROM mytable HAVING distance < ? ORDER BY distance LIMIT 0 , 20");
// Assign parameters
$stmt->bindParam(1,$center_lat);//lat coordinate of user
$stmt->bindParam(2,$center_lng);//lng coordinate of user
$stmt->bindParam(3,$center_lat);
$stmt->bindParam(4,$radius);//Radius in miles
可以在Geonames
找到城市数据库