确定最小边界圆的半径或直径

时间:2015-07-19 12:07:07

标签: postgresql postgis

如果我的MBC看起来像以下查询:

SELECT ST_AsText(ST_MinimumBoundingCircle(geom)::geometry) AS Circle
FROM "Regions"

我想知道如何轻松确定它的半径。我已经求助于找到圆的质心,此时我可以尝试计算MBC返回多边形中的一个点与质心之间的距离但是我似乎无法抓住一个顶点来自多边形。

感谢。

2 个答案:

答案 0 :(得分:1)

ST_MinimumBoundingCircle是一个用户贡献的函数,其源代码用PL / pgSQL编写。您可以modify the source作为已重命名的函数ST_MinimumBoundingRadius(inputgeom geometry)进行以下修改:

  • 只需要一个参数inputgeom geometry
  • 将返回类型(靠近顶部)从geometry更改为double precision
  • 对于POINT类型,请将RETURN hull;更改为RETURN 0;
  • 删除结尾附近的ST_Buffer语句,然后返回radius

应该很容易。请注意,该算法存在一些问题,例如ticket #2996

答案 1 :(得分:0)

我设计了一个简单的解决方案,但效率可能不高。为了我的目的,它运作良好。

SELECT
    ROUND(
        ST_Distance_Sphere(
            ST_Centroid(ST_MinimumBoundingCircle(geom)),
            ST_PointN(ST_Boundary(ST_MinimumBoundingCircle(geom)), 1)
        ) / 1000
    ) AS radius,
    ST_AsGeoJSON(ST_Centroid(geom)) AS center
FROM
    "Regions"

结果最终是以km为单位的半径和质心。