Rumah > rangka kerja php > Workerman > Cara menggunakan Workerman untuk melaksanakan sistem pengesyoran berasaskan lokasi masa nyata

Cara menggunakan Workerman untuk melaksanakan sistem pengesyoran berasaskan lokasi masa nyata

王林
Lepaskan: 2023-11-07 09:44:25
asal
1372 orang telah melayarinya

Cara menggunakan Workerman untuk melaksanakan sistem pengesyoran berasaskan lokasi masa nyata

Dengan pembangunan Internet mudah alih dan peningkatan permintaan orang ramai untuk pengesyoran diperibadikan, sistem pengesyoran berasaskan lokasi masa nyata menjadi semakin penting. Sebagai rangka kerja berprestasi tinggi untuk PHP, Workerman boleh membina sistem pengesyoran masa nyata dengan mudah. Artikel ini terutamanya akan memperkenalkan cara menggunakan Workerman untuk melaksanakan sistem pengesyoran berasaskan lokasi masa nyata dan memberikan contoh kod khusus.

  1. Tentukan seni bina sistem

Apabila melaksanakan sistem pengesyoran masa nyata berasaskan lokasi, kita perlu mempertimbangkan isu berikut:

(1) Bagaimana untuk mendapatkan maklumat lokasi pengguna?

(2) Bagaimana untuk menyimpan maklumat lokasi ke dalam pangkalan data?

(3) Bagaimana untuk mengira jarak antara dua pengguna?

(4) Bagaimana untuk mengemas kini keputusan yang disyorkan dalam masa nyata?

Untuk menangani masalah di atas, kami boleh mengguna pakai seni bina sistem berikut:

(1) Gunakan API geolokasi HTML5 untuk mendapatkan maklumat lokasi pengguna.

(2) Simpan maklumat lokasi ke dalam pangkalan data MySQL.

(3) Kira jarak antara dua pengguna dengan menggunakan formula haversine.

(4) Kira hasil pengesyoran dalam masa nyata di bahagian pelayan dan kembalikan kepada pelanggan.

  1. Pelaksanaan pihak pelanggan

Pertama, kami perlu menggunakan API geolokasi dalam HTML5 untuk mendapatkan maklumat lokasi pengguna:

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);
}
Salin selepas log masuk

Di sini kami menghantar longitud dan latitud ke fail savePosition.php pada bahagian pelayan melalui POST permintaan untuk pemprosesan.

Di bahagian pelayan, kami boleh menggunakan kelas MySQL Workerman untuk menyimpan maklumat lokasi ke dalam pangkalan data 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));
Salin selepas log masuk

Di sini kami menyimpan maklumat lokasi pengguna ke dalam jadual bernama user_position.

  1. Pelaksanaan bahagian pelayan

Untuk mengira jarak antara dua pengguna, kita boleh menggunakan formula haversine.

Pelaksanaan formula haversine adalah seperti berikut:

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
Salin selepas log masuk

Dalam PHP, kod untuk melaksanakan formula haversine adalah seperti berikut:

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;
}
Salin selepas log masuk

Melalui kod di atas, kita boleh mengira jarak antara dua pengguna, berdasarkan jarak dan maklumat minat dan hobi pengguna, Kami boleh mengira keputusan cadangan dalam masa nyata dan mengembalikannya kepada pelanggan. Kod tersebut dilaksanakan seperti berikut:

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;
}
Salin selepas log masuk
  1. Ringkasan

Melalui artikel ini, kami mempelajari cara menggunakan Workerman untuk melaksanakan sistem pengesyoran berasaskan lokasi masa nyata dan memberikan contoh kod khusus. Sistem pengesyoran masa nyata ialah aplikasi yang sangat praktikal dan mempunyai prospek aplikasi yang luas dalam bidang perniagaan, rangkaian sosial, dsb. Saya harap artikel ini dapat membantu anda memahami cara menggunakan Workerman untuk melaksanakan sistem pengesyoran masa nyata.

Atas ialah kandungan terperinci Cara menggunakan Workerman untuk melaksanakan sistem pengesyoran berasaskan lokasi masa nyata. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan