我在Django中启动Web应用程序,它必须提供一个简单的任务:从DB获取与其他记录足够接近的所有记录。
例如:我在latlang(50,10),我需要得到latlang距离我不到5公里的所有记录。
我发现geodjango称为GeoDjango,但它包含很多其他依赖项和库,如GEOS,POSTGIS和其他我不需要的东西。我只需要这一个范围功能。
我应该使用GeoDjango,还是只编写自己的范围计算查询?
答案 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经过全面测试。