我有一个数据库中城市数量有限的网站,需要向用户显示离他当前位置最近的城市。
我可以通过 MaxMind API 获取位置,但我想获取数据库中离用户城市最近的城市。
例如,如果我在数据库中有这些城市:和Los Angeles
,并且我正在从其他城市访问,例如,我应该看到 NYC 被选中,因为它在地理上是最近的。San Francisco
New York City
Miami
什么是快速和性能感知的最佳方法?
我有一个数据库中城市数量有限的网站,需要向用户显示离他当前位置最近的城市。
我可以通过 MaxMind API 获取位置,但我想获取数据库中离用户城市最近的城市。
例如,如果我在数据库中有这些城市:和Los Angeles
,并且我正在从其他城市访问,例如,我应该看到 NYC 被选中,因为它在地理上是最近的。San Francisco
New York City
Miami
什么是快速和性能感知的最佳方法?
您应该存储每个城市的大致纬度和经度,为用户计算纬度和经度(以度为单位),然后使用Haversine 公式求距离。它在这里用 Javascript 实现。MaxMind API 应该为您提供纬度和经度。
让它每当您将一个城市添加到您的数据库中时,都会运行一段代码(离线),该代码会计算离您拥有的每个城市最近的城市。您可以使用外键让每个城市指向另一个城市作为其最近的城市。
现在您已经预先计算了所有内容,每当有实时请求时,只要有城市名称,您只需使用城市名称访问数据库,您就可以通过您指定的外键到达最近的城市。(城市---外键--->城市)
现在这将非常快,因为您已经离线预先计算了最近的城市,并且可以在每个实时请求时立即返回结果。
但是您打算多久添加一次城市?可能不会那么频繁。因此,即使需要一些时间,离线预计算也很少见。但是实时请求的响应速度非常快。(其他人已经推荐了用于计算距离的公式,所以我将跳过这部分!)