将用户的位置存储在数据库中并找到最近的用户

时间:2013-02-21 18:54:04

标签: php geolocation location

我正在尝试实现一个用户系统,其中一个系统要求就是找到你附近的其他用户。

位置将按国家/地区进行过滤,但不会按城市进行过滤,因此用户可以从同一个国家/地区获取来自不同城市的其他用户。

问题是如何计算城市之间的距离?它不必100%准确,但必须为更近的用户提供一些优先权。

Google Geo位置API会满足这些要求吗?有哪些替代方案?

任何想法如何在没有大量计算的情况下实现它?

我想过要求用户在乡村和城市只是为了在他的个人资料中写作,并从它的IP获取它的地理位置或导入包含所有城市及其地理位置的数据库。

请指导我。

1 个答案:

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

找到城市数据库