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