ホームページ  >  記事  >  PHPフレームワーク  >  Workerman を使用してリアルタイムの位置ベースのレコメンデーション システムを実装する方法

Workerman を使用してリアルタイムの位置ベースのレコメンデーション システムを実装する方法

王林
王林オリジナル
2023-11-07 09:44:251333ブラウズ

Workerman を使用してリアルタイムの位置ベースのレコメンデーション システムを実装する方法

モバイル インターネットの発展と、パーソナライズされた推奨事項に対する人々の需要の高まりに伴い、リアルタイムの位置ベースの推奨システムの重要性がますます高まっています。 Workerman は PHP の高性能フレームワークとして、リアルタイム レコメンデーション システムを簡単に構築できます。この記事では主に、Workerman を使用してリアルタイムの位置情報ベースのレコメンデーション システムを実装する方法と、具体的なコード例を紹介します。

  1. システム アーキテクチャを決定する

ロケーションベースのリアルタイム レコメンデーション システムを実装する場合は、次の問題を考慮する必要があります:

(1 ) ユーザーの位置情報を取得するにはどうすればよいですか?

(2) 位置情報をデータベースに保存するにはどうすればよいですか?

(3) 2 人のユーザー間の距離を計算するにはどうすればよいですか?

(4) レコメンド結果をリアルタイムに更新するにはどうすればよいですか?

上記の問題を解決するには、次のようなシステムアーキテクチャを採用します。

(1) HTML5 の geolocation API を使用して、ユーザーの位置情報を取得します。

(2) 位置情報を MySQL データベースに保存します。

(3) ハバーサイン公式を使用して 2 人のユーザー間の距離を計算します。

(4) サーバー側でリアルタイムにレコメンデーション結果を計算し、クライアントに返します。

  1. クライアント実装

まず、HTML5 で geolocation API を使用してユーザーの位置情報を取得する必要があります:

if (navigator.geolocation) {
    navigator.geolocation.getCurrentPosition(showPosition);
} else {
    alert("Geolocation API is not supported in your browser.");
}
 
function showPosition(position) {
    var lat = position.coords.latitude;
    var lng = position.coords.longitude;
 
    // 将经纬度发送到服务器端进行处理
    var xhr = new XMLHttpRequest();
    xhr.open("POST", "http://localhost:2345/savePosition.php", true);
    xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    xhr.send("lat=" + lat + "&lng=" + lng);
}

ここでは緯度を渡します。 POST を介した経度 リクエストは、処理のためにサーバー側の savePosition.php ファイルに送信されます。

サーバー側では、Workerman の MySQL クラスを使用して位置情報を MySQL データベースに保存できます。

require_once __DIR__ . '/vendor/autoload.php';
use WorkermanMySQLConnection;
 
$db = new Connection('localhost', '3306', 'root', 'password', 'dbname');
 
$lat = $_POST['lat'];
$lng = $_POST['lng'];
 
$db->insert('user_position', array('lat' => $lat, 'lng' => $lng));

ここでは、ユーザーの位置情報を user_position という名前のテーブルに保存します。

  1. サーバー側の実装

2 人のユーザー間の距離を計算するには、ハバーサイン公式を使用できます。

ハバーサイン式の実装は次のとおりです:

DELTA_LATITUDE = LATITUDE_B - LATITUDE_A
DELTA_LONGITUDE = LONGITUDE_B - LONGITUDE_A
a = sin(DELTA_LATITUDE/2)^2 + cos(LATITUDE_A) * cos(LATITUDE_B) * sin(DELTA_LONGITUDE/2)^2
c = 2 * atan2(sqrt(a), sqrt(1-a))
DISTANCE = EARTH_RADIUS * c

PHP では、ハバーサイン式を実装するコードは次のとおりです:

function haversineDistance($lat1, $lng1, $lat2, $lng2)
{
    $earth_radius = 6371;
 
    $delta_latitude = deg2rad($lat2 - $lat1);
    $delta_longitude = deg2rad($lng2 - $lng1);
 
    $a = sin($delta_latitude / 2) * sin($delta_latitude / 2) + cos(deg2rad($lat1)) * cos(deg2rad($lat2)) * sin($delta_longitude / 2) * sin($delta_longitude / 2);
    $c = 2 * atan2(sqrt($a), sqrt(1 - $a));
    $distance = $earth_radius * $c;
 
    return $distance;
}

上記のコードを通じて、 2人のユーザー間の関係を計算できます。距離とユーザーの興味や趣味の情報に基づいて、推奨結果をリアルタイムに計算し、クライアントに返すことができます。コードは次のように実装されます。

function getRecommendations($user_id, $lat, $lng)
{
    $earth_radius = 6371;
    $max_distance = 20;
 
    $query = "SELECT id, lat, lng, interests FROM user_position WHERE id != '$user_id'";
    $result = $db->query($query);
 
    $recommendations = array();
 
    while ($row = mysqli_fetch_assoc($result)) {
        $distance = haversineDistance($lat, $lng, $row['lat'], $row['lng']);
 
        if ($distance <= $max_distance) {
            $interests = explode(",", $row['interests']);
            $common_interests = array_intersect($user_interests, $interests);
 
            if (count($common_interests) > 0) {
                $recommendations[] = $row['id'];
            }
        }
    }
 
    return $recommendations;
}
  1. 概要

この記事を通じて、Workerman を使用してリアルタイムの位置ベースのレコメンデーション システムを実装する方法を学びました。具体的なコード例。リアルタイムレコメンドシステムは非常に実用的なアプリケーションであり、ビジネス分野やソーシャルネットワークなどへの幅広い応用が期待されています。この記事が Workerman を使用してリアルタイム レコメンデーション システムを実装する方法を理解するのに役立つことを願っています。

以上がWorkerman を使用してリアルタイムの位置ベースのレコメンデーション システムを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。