gpt4 book ai didi

geospatial - 我可以在 postgis 的同一个空间索引列中存储圆和多边形吗?

转载 作者:行者123 更新时间:2023-12-03 17:18:43 24 4
gpt4 key购买 nike

根据他们的文档,空间对象可以是以下内容

POINT(0 0)

LINESTRING(0 0,1 1,1 2)

POLYGON((0 0,4 0,4 4,0 4,0 0),(1 1, 2 1, 2 2, 1 2,1 1))

MULTIPOINT(0 0,1 2)

MULTILINESTRING((0 0,1 1,1 2),(2 3,3 2,5 4))

MULTIPOLYGON(((0 0,4 0,4 4,0 4,0 0),(1 1,2 1,2 2,1 2,1 1)), ((-1 -1,-1 -2,-2 -2,-2 -1,-1 -1)))

GEOMETRYCOLLECTION(POINT(2 3),LINESTRING(2 3,3 4))

但是,没有圆类型,我可以在其中存储一个点及其半径。并且具有相同的功能,当我查询该点是否存在于其中时,我可以获得该圆的边界框。

最佳答案

没有 Postgis 类型可以以 100% 的精度表示圆,即具有中心点和半径,就像 SQL Server 的 circular arcs 一样。 .正如评论中所指出的,您可以使用 ST_Buffer 的第二种形式来近似一个圆。 , 即 ST_Buffer(point, distance, num_seg_quarter_circle) .当你增加第三个参数时,你会更接近一个实际的圆,但代价是更多的计算时间和存储空间。
缓冲一个点的返回类型将是一个多边形,从运行中可以看出,类似于:

SELECT ST_GeometryType(ST_Buffer(ST_MakePoint(0,0),100));

我个人的观点是,虽然允许圆弧类型可以提高涉及圆的计算精度,但它也会使事情复杂化,因为您不再处理完全由点、线串和多边形组成的几何对象(后两者,也由点数)。

您始终可以运行增加 ST_Buffer 的第三个参数的测试,直到得到可接受的结果,但考虑到空间中固有的其他不准确性,例如地球被大地水准面近似,我认为由近似地理围栏引起的问题,例如这将是罕见的。如果你跑,
SELECT ST_Area(ST_Buffer(ST_MakePoint(0, 0), 1, num_segments));

对于 num_seg_quarter_circle 的不同值并与 PI 进行比较,您可以了解与真实圆的接近程度。

关于geospatial - 我可以在 postgis 的同一个空间索引列中存储圆和多边形吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28178421/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com