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

Should I use advance GeoDjango libraries for one simple calculation?

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

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

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

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

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

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

ST_DWithin — Returns true if the geometries are within the specified distance of one another. For geometry units are in those of spatial reference and For geography units are in meters and measurement is defaulted to use_spheroid=true (measure around spheroid), for faster check, use_spheroid=false to measure along sphere.

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

形式的 django 查询集过滤器

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