-4
アンドロイドアプリから緯度と経度を取得する必要があります。受け取った緯度と経度に基づいて、データベースから他のユーザーの情報を取得したいと考えています。表示PHPのユーザーの現在の居場所から10キロの半径のユーザーを表示
ユーザーは、指定された緯度と経度で半径5 km以内にいる必要があります。どんな助けもありがとうございます。
アンドロイドアプリから緯度と経度を取得する必要があります。受け取った緯度と経度に基づいて、データベースから他のユーザーの情報を取得したいと考えています。表示PHPのユーザーの現在の居場所から10キロの半径のユーザーを表示
ユーザーは、指定された緯度と経度で半径5 km以内にいる必要があります。どんな助けもありがとうございます。
データベースは、MySQLで、ユーザーテーブルはCodeIgniterの使用して、その後、ユーザーの名前、そしてあなたは10キロの半径内にあるすべてのユーザーを検索したいされている場合:詳細については
// You would supply real latitude and longitude values here.
// I used a location in the southwestern United States.
$lat = '34.770498';
$lng = '-116.015625';
$distance = 10; // Kilometers
$this->load->database();
$query = $this->db->query(
'
SELECT
*,
6371 * 2 * ASIN(SQRT(POWER(SIN(RADIANS(? - ABS(users.latitude))), 2) + COS(RADIANS(?)) * COS(RADIANS(ABS(users.latitude))) * POWER(SIN(RADIANS(? - users.longitude)), 2))) AS distance
FROM users
HAVING distance < ?
',
[
$lat,
$lat,
$lng,
$distance
]
);
$local_users = $query->num_rows() > 0
? $query->result()
: NULL;
をチェックこれは: http://vinsol.com/blog/2011/08/30/geoproximity-search-with-mysql/
でも、あなたが呼び出すことができるストアドプロシージャを作成することです。これはCodeIgniterのでは少しトリッキーです使用
--
-- STORED PROCEDURE users_in_km_radius
--
DELIMITER $$
DROP PROCEDURE IF EXISTS users_in_km_radius $$
CREATE PROCEDURE `users_in_km_radius`(center_latitude float, center_longitude float, dist int, x_limit int, x_offset int)
BEGIN
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
PREPARE ps FROM 'SELECT
u.*,
6371 * 2 * ASIN(SQRT(POWER(SIN(RADIANS(? - ABS(u.latitude))), 2) + COS(RADIANS(?)) * COS(RADIANS(ABS(u.latitude))) * POWER(SIN(RADIANS(? - u.longitude)), 2))) AS distance
FROM `users` u
WHERE u.`longitude` between ? and ?
AND u.`latitude` between ? and ?
HAVING distance < ?
ORDER BY distance';
set @center_latitude = center_latitude;
set @center_longitude = center_longitude;
set @dist = dist;
set @east = center_longitude-dist/abs(cos(radians(center_latitude))*111.04);
set @west = center_longitude+dist/abs(cos(radians(center_latitude))*111.04);
set @north = center_latitude-(dist/111.04);
set @south = center_latitude+(dist/111.04);
EXECUTE ps USING @center_latitude, @center_latitude, @center_longitude, @east, @west, @north, @south, @dist;
DROP PREPARE ps;
END $$
DELIMITER ;
:私は私のウェブサイト上で、次の方法のようにそれを行う半径の中心betwee距離は約10キロの下にある
$sql = '
CALL users_in_km_radius(?, ?, ?);
';
$query = $this->db->query($sql, [ $lat, $long, $km ]);
if($query->num_rows() > 0)
{
$result = $query->result();
mysqli_next_result($this->db->conn_id);
$query->free_result();
}
else
{
$result = NULL;
mysqli_next_result($this->db->conn_id);
$query->free_result();
}
ユーザーを選択し、(グーグル:距離緯度経度の計算方法) – NatNgs
私はあなたを手に入れませんでした..詳細を教えてください。 –
ここでは、ユーザーがいるデータベースがあり、各ユーザーにはその場所の情報があることを理解しています。半径10kmの特定のサークル内のユーザーを取得するには、すべてのユーザーとサークルの中心との距離を計算し、内側または外側にあるかどうかを10kmと比較する必要があります。半径内の人とのやりとりを行う – NatNgs