让Django支持地理定位的好方法?- Django/地理定位

2 投票
2 回答
1242 浏览
提问于 2025-04-16 06:10

我想把不同的模型(比如场馆、地点、地标)和一个城市或国家关联起来。

但我不太确定有哪些好的方法来实现这个目标。


我现在走的是一条简单的路,我已经实现了国家和城市的模型。

每当提到一个新的城市或国家时,它会自动创建。

不过,我遇到了一些问题:

  • 数据库很容易被污染

  • Django(一个流行的框架)对这些城市和国家的真实情况并没有很好的理解


有没有什么建议或想法?谢谢! :)

2 个回答

0

从雅虎和谷歌获取地理编码的数据集可以是一个不错的起点。此外,可以看看Django中的geopy库。

7

一个好的起点是从像Geonames这样的服务获取一个地点数据集。还有GeoDjango,它在这个问题中提到过。当你遇到新的地点名称时,先和你更大的数据集进行对比,再决定是否添加。关于你的第二点,你需要把这个设计进你的对象模型中,并相应地编写代码。

这里还有一些你可能想考虑的事情:

  • 别名和缩写
    • 这种情况比你想象的要多。人们常常使用一些不是官方城镇的郊区或社区名称。你还可以考虑像LA代表洛杉矶,MTL代表蒙特利尔,MT. Forest代表森林山,Saint与ST、st.、ST-等的区别。
  • 模糊搜索
    • 查找城市名称时,如果考虑到拼写的差异,事情会简单很多。这也有助于减少同一个地方的重复名称。
    • 你可以通过预先计算数据集中城市的SoundexDouble Metaphone值来实现。当进行查找时,计算搜索词的值并与预先计算的值进行比较。这在英语中效果最好,但在其他一些罗曼语系的语言中也可能有效(不太确定除了这些还有哪些选择)。
  • 地点的等价性/包含关系
    • 能够判断布鲁克林是纽约市的一个区。

总的来说,这是一个难题,但应用这些建议应该能大大减少数据错误和其他麻烦。

撰写回答