2015-09-24 77 views
1

我在Django中启动web应用程序,它必须提供一个简单的任务:从DB获取所有足够接近其他记录的记录。我应该使用高级GeoDjango库来进行一个简单的计算吗?

例如:Iam在latlang(50,10)中,我需要使用拉特距离我5km以内的所有记录。

我发现Geodjango的东西叫做GeoDjango,但它包含了很多其他的依赖和库,比如GEOS,POSTGIS和其他我并不需要的东西。我只需要这一个范围功能。

所以我应该使用GeoDjango,或者只是写我自己的范围计算查询?

+0

仅仅因为你不需要它们并不意味着'GeoDjango'不需要它们。出于某种原因,它们被称为“依赖关系”:“GeoDjango”由这些构建块构建。图书馆可以为您节省大量时间,并随着时间的推移而改善。既然它不伤害你,如果你使用它,为什么不:)? –

+0

非常伤害我。我在开发中使用Windows,在Prod中使用Ubuntu ...我已经遇到了问题:Postgree,Django中的python posgre支持和GEOS ..所以我无法想象我会变得多么疯狂,什么时候它不会轻轻地安装在Ubuntu上..我也只是测试我的概念(我是IT学生,而不是公司) – ziomagic

+0

我不知道你从哪里得到计算从经纬度坐标的线性距离是“简单计算”的想法。它可能变得非常复杂。 –

回答

2

绝对不是自己写的。随着您对地理数据更加熟悉,您会意识到这一特殊计算并不简单,例如参见this question以进行详细讨论。然而,在这个问题中给出的大多数解答(答案)只能产生近似的结果。部分原因是地球不是一个完美的球体。

另一方面,如果您使用MySQL(5.7以上版本)或postgresql的地理空间扩展,则可以使用ST_DWithin函数。

ST_DWithin - 如果几何形状在彼此的指定距离内,则返回true。对于几何单位是空间参考的单位,对于地理单位以米为单位,测量默认为use_spheroid = true(围绕球体测量),为了更快速检查,use_spheroid = false沿球体进行测量。

ST_DWithin利用自制解决方案无法实现的空间索引。当启用GeoDjango时,ST_DWithin可用作django查询集的筛选器,形式为dwithin

最后但并非最不重要的是,如果您编写自己的代码,则必须编写大量代码才能对其进行测试。 dwithin经过彻底测试。

相关问题