我应该使用高级GeoDjango库进行一个简单的计算吗?

时间:2015-09-24 13:53:06

标签: python django gis geodjango geos

我在Django中启动Web应用程序,它必须提供一个简单的任务:从DB获取与其他记录足够接近的所有记录。

例如:我在latlang(50,10),我需要得到latlang距离我不到5公里的所有记录。

我发现geodjango称为GeoDjango,但它包含很多其他依赖项和库,如GEOS,POSTGIS和其他我不需要的东西。我只需要这一个范围功能。

我应该使用GeoDjango,还是只编写自己的范围计算查询?

1 个答案:

答案 0 :(得分:2)

绝对不是自己写的。随着您对地理数据越来越熟悉,您会发现这个特定的计算并不简单,例如this question进行详细讨论。然而,该问题中给出的大多数解决方案(答案)仅产生近似结果。部分原因是地球不是一个完美的球体。

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

  

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

ST_DWithin利用自制解决方案无法做到的空间索引。启用GeoDjango后,ST_DWithin可用作dwithin

形式的django查询集的过滤器

最后但并非最不重要的是,如果您编写自己的代码,则必须编写大量代码来测试它。而dwithin经过全面测试。