【发布时间】:2016-04-02 06:49:31
【问题描述】:
我有一个用户数据库,每个用户都存储了相关的经度、纬度、半径(以 m 为单位)和 notificationID 值。
当用户登录我的应用程序时,我会检查他们的经度和纬度,并且我需要检索符合此条件的通知 ID 列表:
用户 A 想要接收来自 1000m 半径范围内的通知。 用户 B 想要接收半径 20000m 范围内的通知。 用户 C 想要接收半径 5000m 范围内的通知。
因此,如果用户 C 发出推送通知,即使用户 A 实际上比用户 B 更接近用户 C,它也可能被用户 B 而不是用户 A 接收。
抱歉,如果不清楚,我很难解释。
我之前做过一个查询,它将返回某个范围内的坐标,例如50m(下图),但我正在努力计算每个人的个人半径,以及他们是否会收到其他用户的通知。
set @orig_lat= mysql_real_escape_string($_POST['Latitude']);
set @orig_lon=mysql_real_escape_string($_POST['Longitude']);
set @dist= mysql_real_escape_string($_POST['Distance']);
$Search_Query= "SELECT *,
3956 * 2 * ASIN(SQRT( POWER(SIN((@orig_lat -
abs(
dest.lat)) * pi()/180 / 2),2) + COS(@orig_lat * pi()/180 ) * COS(
abs
(dest.lat) * pi()/180) * POWER(SIN((@orig_lon – dest.lon) * pi()/180 / 2), 2) ))
as distance FROM hotels dest having distance < @distORDER BY distance limit 10";
【问题讨论】:
-
OT:如果这样的任务是您应用程序的主要目标,我会考虑使用 PostgreSQL/PostGIS 后端。
标签: php mysql coordinates radius