获取用户最近城市的最佳方式?Python/Django

4 投票
2 回答
4919 浏览
提问于 2025-04-16 08:55

我有一个网站,数据库里只有有限的城市数量,现在我需要显示用户当前位置最近的城市。

我可以通过MaxMind的API获取用户的位置,但我想找到数据库中离用户城市最近的城市。

比如说,如果我的数据库里有这些城市:洛杉矶旧金山纽约市,而我从另一个城市比如迈阿密访问网站,那么我应该看到纽约市被选中,因为它在地理上是最近的。

那么,怎样才能快速且高效地做到这一点呢?

2 个回答

0

你可以设置一个机制,每当你往数据库里添加一个城市时,就会自动运行一段代码(在后台),这段代码会计算出每个城市离哪个城市最近。你可以让每个城市通过一个外键指向它最近的城市。

现在你已经把所有的最近城市都计算好了,以后只要有人请求某个城市的名字,你就可以直接在数据库里查找这个城市的名字,然后通过你之前设定的外键找到最近的城市。(城市 ---外键--> 城市)

这样做会非常快,因为你已经提前计算好了最近的城市,能够在每次请求时立刻返回结果。

不过,你打算多久添加一次城市呢?可能不会太频繁。所以,后台的预计算虽然需要花点时间,但其实很少发生。而实时请求的响应速度会非常快。(其他人已经推荐了计算距离的公式,所以我就不再讲这个了!)

7

你应该为每个城市存储大概的纬度和经度,然后根据用户的位置计算出具体的纬度和经度,接着使用哈弗辛公式来计算距离。这个公式在Javascript中可以在这里找到。你可以通过MaxMind的API获取到纬度和经度。

撰写回答