计算两个盒子联合的边界框

时间:2014-12-21 23:17:06

标签: postgresql

我正在使用postgres并尝试使用几何类型。我没有很好的基本几何操作来源。例如,两个边界框的边界框。我编写代码,我希望它是正确的,但它很难看。

非常感谢帮助使它漂亮(更正确)。

CREATE OR REPLACE FUNCTION containingBox( bx1 Box ,  bx2 Box ) returns Box AS $cB$
       DECLARE
        minX  double precision;
        minY  double precision;
        maxX  double precision;
        maxY  double precision;
        bx Box;
       BEGIN
       if bx2 is null then
          return bx1;
       else 
          if bx1 is null then
             return bx2;
       end if;
       minX := least( (center(bx1))[0]-.5*width(bx1), (center(bx2))[0]-.5*width(bx2));
       maxX := greatest( (center(bx1))[0]+.5*width(bx1), (center(bx2))[0]+.5*width(bx2));
       minY := least( ((center(bx1))[1]-.5*height(bx1)), ((center(bx2))[1]-.5*height(bx2)));
       maxY := greatest( (center(bx1))[1]+.5*height(bx1), (center(bx2))[1]+.5*height(bx2));
       bx:=box(point(minX,minY),point(maxX,maxY));
       return bx;
       END;
$cB$ LANGUAGE plpgsql;

1 个答案:

答案 0 :(得分:0)

你已经安装了PostGIS,对吧?

在这种情况下,您可以使用内置函数。根本不认为你需要存储过程。

SELECT ST_Extent(thegeom) FROM
    (SELECT bx1 as thegeom
    UNION
    SELECT bx2 as thegeom) as geomlist;