让Django支持地理定位的好方法?- Django/地理定位
我想把不同的模型(比如场馆、地点、地标)和一个城市或国家关联起来。
但我不太确定有哪些好的方法来实现这个目标。
我现在走的是一条简单的路,我已经实现了国家和城市的模型。
每当提到一个新的城市或国家时,它会自动创建。
不过,我遇到了一些问题:
数据库很容易被污染
Django(一个流行的框架)对这些城市和国家的真实情况并没有很好的理解
有没有什么建议或想法?谢谢! :)
2 个回答
0
从雅虎和谷歌获取地理编码的数据集可以是一个不错的起点。此外,可以看看Django中的geopy库。
7
一个好的起点是从像Geonames这样的服务获取一个地点数据集。还有GeoDjango,它在这个问题中提到过。当你遇到新的地点名称时,先和你更大的数据集进行对比,再决定是否添加。关于你的第二点,你需要把这个设计进你的对象模型中,并相应地编写代码。
这里还有一些你可能想考虑的事情:
- 别名和缩写
- 这种情况比你想象的要多。人们常常使用一些不是官方城镇的郊区或社区名称。你还可以考虑像LA代表洛杉矶,MTL代表蒙特利尔,MT. Forest代表森林山,Saint与ST、st.、ST-等的区别。
- 模糊搜索
- 查找城市名称时,如果考虑到拼写的差异,事情会简单很多。这也有助于减少同一个地方的重复名称。
- 你可以通过预先计算数据集中城市的Soundex或Double Metaphone值来实现。当进行查找时,计算搜索词的值并与预先计算的值进行比较。这在英语中效果最好,但在其他一些罗曼语系的语言中也可能有效(不太确定除了这些还有哪些选择)。
- 地点的等价性/包含关系
- 能够判断布鲁克林是纽约市的一个区。
总的来说,这是一个难题,但应用这些建议应该能大大减少数据错误和其他麻烦。