我的数据库中有一个数量有限的城市的网站,需要向用户显示距离他当前位置最近的城市。
我可以通过MaxMind API获取位置,但我希望将数据库中最近的城市送到用户城市。
例如,如果我在数据库中有这些城市:Los Angeles
,San Francisco
和New York City
,并且我正在访问其他城市,例如Miami
,我应该看到NYC被选中,因为它是最接近的地理位置。
快速且提高性能的最佳方式是什么?
答案 0 :(得分:7)
您应该存储每个城市的近似纬度和经度,以度为单位计算用户的纬度和经度,然后使用Haversine formula找到距离。它是在Javascript here中实现的。 MaxMind API应该为您提供纬度和经度。
答案 1 :(得分:0)
这样,无论何时向数据库添加城市,都会运行一段代码(离线)来计算与您拥有的每个城市最近的城市。您可以将每个城市指向另一个城市,作为其最近的城市与外国钥匙。
现在您已经预先计算了所有内容,只要有实时请求,城市名称,您只需使用城市名称命中数据库,就可以通过指定的外键到达最近的城市。 (city --- foreignkey ---> city)
现在这将非常快,因为您预先计算了最近的离线城市,并且可以在每个实时请求中立即返回结果。
但您计划多久添加一个城市?可能不常见。因此,即使需要一些时间,离线预计算也很少。但实时请求的响应速度非常快。 (其他人已经建议使用公式来计算距离,所以我将跳过那部分!)