1

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

例如:我在 latlang (50, 10),我需要获取距离我 5km 以内 latlang 的所有记录。

我发现 geodjango 的东西叫做 GeoDjango,但它包含许多其他依赖项和库,如 GEOS、POSTGIS 和其他我并不真正需要的东西。我只需要这一范围的功能。

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

4

1 回答 1

2

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

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

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

ST_DWithin 使用自制解决方案无法使用的空间索引。启用 GeoDjango 时,ST_DWithin 可用作 dwithin 形式的 django 查询集的过滤

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

于 2015-09-24T14:16:45.323 回答