【问题标题】:Store a Circle in Geodjango + Postgres在 Geodjango + Postgres 中存储一个圆圈
【发布时间】:2012-06-12 01:31:51
【问题描述】:

希望在 geodjango 字段中存储一个圆,以便我可以使用 geodjango 查询 __contains 来确定一个点是否在圆中(类似于使用 PolygonField 可以完成的操作)。

目前将其存储为十进制半径和 GeoDjango 点字段,但需要一种方法来查询数据库中的位置列表,以便这些不同的圆(点字段和半径)包含我的搜索点(长/纬度)。

希望它有意义。

【问题讨论】:

  • 如果圆方程是 (X-H)square2+(Y-K)square2=Rsquare2。如果 (H,K) 是 GeoDjango pointField 并且 R 是十进制并且所有这些圆圈都存储在 DB 中。如果我用搜索点(A,B)查询,我应该能够知道它将落在我的数据库中的哪个圆圈。
  • 不太确定我是否会为这种类型的逻辑使用“包含”。你的圆将有一个中心点和一个半径......'点和圆心之间的距离小于半径'的逻辑应该起作用而不是'包含'。

标签: django postgresql postgis geodjango


【解决方案1】:

从技术上讲,PostGIS 支持CurvePolygonCircularString 几何类型,可用于存储曲线几何。例如,在 x=10, y=10 周围的 2 个单位半径已由 64 点缓冲多边形近似为:

SELECT ST_AsText(ST_LineToCurve(ST_Buffer(ST_MakePoint(10, 10), 2, 16)));
                   st_astext
------------------------------------------------
 CURVEPOLYGON(CIRCULARSTRING(12 10,8 10,12 10))
(1 row)

但是,这种方法通常不会使用,因为对这种几何类型的支持非常有限(即,ST_AsSVG,其他方法不起作用)。这些几何类型可能会造成很多麻烦,我建议不要这样做。

通常,所有几何图形都存储为受良好支持的类型:POINTLINESTRINGPOLYGON(带有可选的 MULTI- 前缀)。对于这些类型,使用ST_DWithin function(例如,GeoDjango 调用此 __dwithin,另请参见this question)来查询另一个几何图形是否在指定距离内。例如,如果您有一个点位置,您可以查看其他几何图形是否在距该点一定距离(即半径)内。

【讨论】:

    猜你喜欢
    • 2017-09-26
    • 2018-12-15
    • 2012-11-12
    • 1970-01-01
    • 2011-03-10
    • 1970-01-01
    • 1970-01-01
    • 2014-07-13
    • 1970-01-01
    相关资源
    最近更新 更多