2

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

位置将按国家/地区过滤,而不是按城市过滤,因此用户可以从同一国家/地区获得来自不同城市的其他用户。

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

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

知道如何在没有非常繁重的计算的情况下实现它吗?

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

请指导我。

4

1 回答 1

5

您可以使用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上找到

于 2013-02-21T19:48:04.200 回答