2

私はユーザーシステムを実装しようとしています。システム要件の1つは、近くにいる他のユーザーを見つけることです。

場所は国ではフィルタリングされますが、都市ではフィルタリングされないため、ユーザーは同じ国から別の都市から他のユーザーを取得できます。

問題は、都市間の距離をどのように計算するかです。100%正確である必要はありませんが、より近いユーザーにある程度の優先順位を与える必要があります。

Google GeoロケーションAPIはこれらの要件を満たしますか?選択肢は何ですか?

非常に重い計算なしでそれを実装する方法はありますか?

ユーザーにプロフィールを書き込むためだけに国と都市を尋ね、IPから地理的位置を取得するか、すべての都市とその地理的位置を含むデータベースをインポートすることを考えました。

教えてください。

4

1 に答える 1

5

半正矢関数を使用して、データベース内で最も近いユーザーを検索できます。

$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 に答える