Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php MySQL使用可变半径计算地理位置距离_Php_Mysql_Math_Geolocation_Lamp - Fatal编程技术网

Php MySQL使用可变半径计算地理位置距离

Php MySQL使用可变半径计算地理位置距离,php,mysql,math,geolocation,lamp,Php,Mysql,Math,Geolocation,Lamp,我正在建立一个地理定位广告平台,我遇到了一个障碍。我可以成功地计算出在给定半径范围内的所有商业广告给用户使用。现在,客户想要改变广告商的半径,你可以将其视为“服务区域”。一个基本的广告商的服务半径为100英里,但其他规模较大或在广告上花费较多的公司的服务范围可能为250英里或500英里。进行此更改后,先前的计算将不起作用 我怎样才能获取所有这些可变半径和距离,以便返回对访问者有效的所有广告客户 为了更好地说明我的问题,请看: 目前,我们计算并返回用户(a、B和C公司)100英里半径范围内的所有广

我正在建立一个地理定位广告平台,我遇到了一个障碍。我可以成功地计算出在给定半径范围内的所有商业广告给用户使用。现在,客户想要改变广告商的半径,你可以将其视为“服务区域”。一个基本的广告商的服务半径为100英里,但其他规模较大或在广告上花费较多的公司的服务范围可能为250英里或500英里。进行此更改后,先前的计算将不起作用

我怎样才能获取所有这些可变半径和距离,以便返回对访问者有效的所有广告客户

为了更好地说明我的问题,请看:

目前,我们计算并返回用户(a、B和C公司)100英里半径范围内的所有广告商。对于新的更改,我们需要返回所有服务区域覆盖用户的公司,其中包括公司D。公司E的服务区域/半径较小,不覆盖用户,因此不应返回记录

广告商的表格目前看起来类似于:

id
name
lat
lng
radius

如果可以计算两点距离(以英里为单位)的lat/lng,请参见:

因此,如果给定了访问者位置(让我们将其定义为
访问者纬度
访问者经度
),则返回范围内所有广告商的查询是:

SELECT *,
       69.0412  * DEGREES(ACOS(COS(RADIANS(lat))
                * COS(RADIANS(visitor_latitude))
                * COS(RADIANS(lng - visitor_longitude))
                + SIN(RADIANS(lat))
                * SIN(RADIANS(visitor_latitude)))) AS distance
FROM advertisers
WHERE distance <= radius
选择*,
69.0412*度(ACOS(COS)(弧度(纬度))
*COS(弧度(访客纬度))
*COS(弧度(lng-经度))
+正弦(弧度(纬度))
*SIN(弧度(纬度))作为距离
来自广告商

用户与广告商之间的距离在哪里切换,而不是使用固定距离使用半径?谢谢。我只是将HAVING子句设置为have