希望在 geodjango 字段中存储一个圆圈,以便我可以使用 geodjango 查询 __contains 来确定一个点是否在圆圈中(类似于使用 PolygonField 可以完成的操作)。
目前将其存储为十进制半径和 GeoDjango 点字段,但需要一种方法来查询数据库中的位置列表,以便这些不同的圆(点字段和半径)包含我的搜索点(长/纬度)。
希望这是有道理的。
希望在 geodjango 字段中存储一个圆圈,以便我可以使用 geodjango 查询 __contains 来确定一个点是否在圆圈中(类似于使用 PolygonField 可以完成的操作)。
目前将其存储为十进制半径和 GeoDjango 点字段,但需要一种方法来查询数据库中的位置列表,以便这些不同的圆(点字段和半径)包含我的搜索点(长/纬度)。
希望这是有道理的。
从技术上讲,PostGIS 支持CurvePolygon
和CircularString
几何类型,可用于存储弯曲的几何图形。例如,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
,LINESTRING
或POLYGON
(带有可选MULTI-
前缀)。对于这些类型,使用ST_DWithin
函数(例如,GeoDjango调用此 __dwithin,另请参阅此问题)来查询另一个几何图形是否在指定距离内。例如,如果您有一个点位置,您可以查看其他几何图形是否在距该点一定距离(即radius)内。