如何在postgreSQl中获得三个3d点的中心?

时间:2015-01-11 13:12:02

标签: postgis

如何在postgreSQl中获得三个3d点的中心? p1(110 120 10) 第2页(150 90 8) 第3页(165 95 11)

1 个答案:

答案 0 :(得分:2)

PostGIS无法做到这一点(见this enhancement request)。

PostGIS最好的只能是2D质心(通过ST_Centroid(geom)):

SELECT ST_AsText(ST_Centroid('MULTIPOINT Z(110 120 10,150 90 8,165 95 11)'));

                st_astext
------------------------------------------
 POINT(141.666666666667 101.666666666667)

然而,点的质心算法相当简单。只需平均所有维度的坐标值:

SELECT ST_AsText(ST_MakePoint(avg(ST_X(geom)), avg(ST_Y(geom)), avg(ST_Z(geom))))
FROM (
  SELECT       1 AS id, 'POINT Z (110 120 10)'::geometry AS geom
  UNION SELECT 2 AS id, 'POINT Z (150 90 8)'::geometry AS geom
  UNION SELECT 3 AS id, 'POINT Z (165 95 11)'::geometry AS geom
) AS f;
                          st_astext
--------------------------------------------------------------
 POINT Z (141.666666666667 101.666666666667 9.66666666666667)

其他几何类型的算法更复杂。