4

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

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

希望这是有道理的。

4

1 回答 1

3

从技术上讲,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而其他方法不起作用)。这些几何类型可能会引起很多悲伤,我建议不要这样做。

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

于 2012-06-10T07:58:51.817 回答