我正在建立一个地理定位广告平台,但我遇到了障碍。我可以使用this (page 8)成功计算给定半径范围内的所有广告业务。现在,客户希望改变广告客户的半径,您可以将其视为"服务区域"。基本广告客户的服务半径为100英里,但其他公司规模较大或在广告上花费较多的公司可能拥有250或500英里的服务区域。通过此更改,以前的计算不起作用。
如何获取所有这些可变半径和距离,以便返回对访问者有效的所有广告客户?
为了更好地说明我的问题,请查看:
目前,我们计算并返回用户半径100英里范围内的所有广告客户(公司A,B和C)。随着新的变化,我们需要返回所有具有覆盖用户的服务区域的公司,其中包括公司D.公司E的服务区域/半径较小,不覆盖用户,因此记录不应该退还。
广告客户目前的表格类似于:
id
name
lat
lng
radius
答案 0 :(得分:2)
如果可以计算以英里为单位的两点距离的纬度/经度,请参阅:
Find distance between two points using latitude and longitude in mysql
因此,如果给出了访问者位置(让我们将其定义为visitor_latitude
和visitor_longitude
),则返回范围内所有广告商的查询是:
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