如何在postgreSQl中获得三个3d点的中心? p1(110 120 10) 第2页(150 90 8) 第3页(165 95 11)
答案 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)
其他几何类型的算法更复杂。