我想找到X英里左右的人让我解释一下。
我有一个跟随
的应用程序1) it shows user's current location on a google map with a radius circle of 3 miles.
2) when ever user uses this application its current location will get stored into MySQL database
as follows
ID Name currLat currLan radius (in miles )
--------------------------------------------------------------------
34334 John 23.039574 72.56602 3
此外,当新用户使用相同的应用程序时,他当前的位置也将存储在上表中。
因此,当任何用户访问此应用程序时,服务器端代码将检查其与当前位置的接近程度,以确定是否有任何其他用户在他周围。
我谷歌但我真的don't know what's the approach to match and perform proximity search
我已经阅读了一些公式,但实际上并不了解执行它的程序。
到目前为止,我已经在php中使用了以下代码,它返回了max和min lat n lan,但我真的不知道该怎么做,因为对于邻近搜索来说是全新的,所以任何人都可以告诉我{{ 1}}
the road map to do that
我真的希望这次不是一个不真实的问题,如果有人想要任何进一步的信息,那么随时可以问
到目前为止我已经完成了
创建一个表格,其中包含POINT字段类型和SPATIAL索引
$radius = 600;
$longitude = (float) $lan;
$latitude = (float) $lat;
$lng_min = $longitude - $radius / abs(cos(deg2rad($latitude)) * 69);
$lng_max = $longitude + $radius / abs(cos(deg2rad($latitude)) * 69);
$lat_min = $latitude - ($radius / 69);
$lat_max = $latitude + ($radius / 69);
$data ["lat"] = $lng_min . '/' . $lng_max . PHP_EOL;
$data ["lan"] = $lat_min . '/' . $lat_max;
之后计算距离的程序
CREATE TABLE userstatus (
id varchar(100) NOT NULL,
userid varchar(100) NOT NULL,
username varchar(100) NOT NULL,
currLoc POINT NOT NULL,
radius INT(10),
SPATIAL INDEX(currLoc)
)ENGINE = MYISAM
现在我不知道我会DELIMITER $$
CREATE FUNCTION distance (a POINT, b POINT) RETURNS double DETERMINISTIC
BEGIN
RETURN 6371 * 2 * ASIN(SQRT(POWER(SIN(RADIANS(ABS(X(a)) - ABS(X(b)))), 2) + COS(RADIANS(ABS(X(a)))) * COS(RADIANS(ABS(X(b)))) * POWER(SIN(RADIANS(Y(a) - Y(b))), 2)));
END $$
DELIMITER ;
我使用
插入了我的数据compare my user's lat , lat and radius with above function
我在cdist<中解除了查询 10,值10是半径?
$userStatusInsert = "INSERT INTO userstatus (id,userid,username,currLoc,radius)
VALUES('".$id."','".$uid."','".$uname."',GeomFromText('POINT(".$lat." ".$lan.")'),'".$radius."')";
结果如下,但我真的不知道cdist列包含什么,我的意思是这个 确定一个人在范围内
SELECT userid, username, distance(userstatus.currLoc, GeomFromText('POINT(23.039574 72.56602)')) AS cdist FROM userstatus HAVING cdist < 10 ORDER BY cdist LIMIT 10
答案 0 :(得分:1)
harvesine公式描述了2个圆圈碰撞时的情况。第一个圆圈是您当前的位置,第二个圆圈是任何其他兴趣点。您需要定义第一个圆的半径,并将任何其他感兴趣的点与它进行比较。也可以使用正方形。或者您可以使用像quadkey或mysql空间扩展的空间索引。