Django + PostgreSQL: 查找附近点

0 投票
3 回答
747 浏览
提问于 2025-04-17 20:06

我在开发一个应用,需要找出离某个点最近的其他点。我想要一个简单但性能还不错的解决方案。我考虑过使用PostGIS和GeoDjango,但我觉得我的应用并不是特别“地理相关”(我其实也不太明白这是什么意思)。其中大约5%的内容是需要保存一些物体(比如人和地方)的坐标,然后我需要完成找最近点的任务。简单来说,使用PostGIS和GeoDjango似乎有点过于复杂了。

我还考虑过用django-haystack配合SOLR或Elasticsearch,因为我需要强大的文本搜索功能,而这些搜索引擎也有一些“地理”特性。不过我对此也不太确定,因为我担心主数据库和搜索引擎数据库之间的同步问题,以及这些引擎对硬件的要求。目前我更倾向于使用PostgreSQL的三元组功能,找一个自定义的方法来解决“找最近点”的问题。有没有什么好的建议呢?

3 个回答

0

你说得对,PostGIS/GeoDjango可能有点复杂,不过自己做一个Django应用程序其实对你这个简单的任务来说并不会太麻烦。Django在模板方面提供了很多功能,而且它自带的管理界面让你输入单条记录变得很简单。而且GeoDjango是Django的一个附加功能,以后如果你的项目需要的话,你随时可以使用它。

0

可以看看 shapely。看起来这个对象的 project() 方法可能正是你需要的。

2

如果你想找到彼此靠近的点或者边界框,可以考虑使用Rtree这个Python包。它使用了一种和PostGIS类似的空间索引技术,不过它不是数据库软件,而是可以在其他软件中使用的工具。我测试过,使用它来查找数百万个对象中靠近的点,速度比PostGIS还快。

可以查看教程中的示例,这样你能更好地理解如何找到最近的对象。

撰写回答