【问题标题】:Should I use advance GeoDjango libraries for one simple calculation?我应该使用高级 GeoDjango 库进行一项简单的计算吗?
【发布时间】:2015-09-24 13:53:06
【问题描述】:

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

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

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

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

【问题讨论】:

  • 你不需要它们并不意味着GeoDjango 不需要它们。它们被称为dependencies 的原因是:GeoDjango 是用这些构建块构建的。图书馆会在某些事情上为您节省很多时间,而且它们会随着时间的推移而改进。既然使用它不会伤害到你,为什么不呢:)?
  • 这让我很受伤。我在开发中使用 Windows,在 Prod 中使用 Ubuntu……我已经遇到了问题:Postgree、Django 中的 python posgre 支持和 GEOS ..所以我无法想象当它不会软安装时我会变得多么疯狂在 Ubuntu 上.. 我也只是在测试我的概念(我是 IT 学生,不是公司)
  • 我不确定您从哪里得到的想法,即从纬度/经度坐标计算线性距离是一种“简单的计算”。它可能会变得非常复杂。
  • 我找到了这个:plumislandmedia.net/mysql/haversine-mysql-nearest-loc,它确实有我需要的东西。

标签: python django gis geodjango geos


【解决方案1】:

绝对不要自己写。随着您对地理数据越来越熟悉,您会意识到这个特定的计算一点也不简单,请参阅 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 经过全面测试。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-15
    • 2010-10-10
    相关资源
    最近更新 更多