在Geodjango + Postgres中存储一个圆形

3

想在 geodjango 字段中存储一个圆,以便使用 geodjango 查询 __contains 查找点是否在圆内(类似于 PolygonField 的用法)。

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

希望这有意义。


如果圆的方程式为(X-H)平方+(Y-K)平方=R平方,其中(H,K)是GeoDjango pointField,R是小数,并且所有这些圆都存储在数据库中。如果我用搜索点(A,B)查询,则应该能够确定它将落入我的数据库的哪个圆中。 - dilip kumbham
与https://dev59.com/6UnSa4cB1Zd3GeqPSvy_相同。 - dilip kumbham
我不太确定是否应该在这种逻辑中使用“包含”。你的圆将有一个中心点和半径...逻辑是“当点与圆心之间的距离小于半径时”,应该使用而不是“包含”。 - Twelfth
1个回答

2

从技术角度来说,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函数(例如,GeoDjango将其称为__dwithin,请参见此问题)查询是否有另一个几何图形在指定距离内。例如,如果您有一个点位置,您可以查看其他几何图形是否在该点的一定距离(即半径)内。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接