我需要获取直线或多边形的中心点才能制作marker
我的应用。这样,当您单击标记时,就会显示几何图形(直线或多边形)。我曾经ST_Centroid
使它工作。
结果是我所期望的,使某些多边形或线的质心超出了几何形状。我想要这些线或多边形是在几何体内部获得“最中心点”。
我怎样才能做到这一点?有解决方案吗?
我需要获取直线或多边形的中心点才能制作marker
我的应用。这样,当您单击标记时,就会显示几何图形(直线或多边形)。我曾经ST_Centroid
使它工作。
结果是我所期望的,使某些多边形或线的质心超出了几何形状。我想要这些线或多边形是在几何体内部获得“最中心点”。
我怎样才能做到这一点?有解决方案吗?
Answers:
来自文档:ST_PointOnSurface —返回保证位于表面上的POINT。
就我而言,我在离散表中有每个几何。我所做的是:
ST_LineInterpolatePoint()
0.5因子。ST_Centroid()
在其几何形状内。如果是这样,ST_Centroid()
则是最佳选择,否则,我会选择PointOnSurface()
。这是查询:
SELECT
CASE WHEN (SELECT the_geom FROM points WHERE gid = d.gid) IS NOT NULL
THEN (SELECT the_geom FROM points WHERE gid = d.gid)
WHEN (SELECT the_geom FROM lines WHERE gid = d.gid) IS NOT NULL
THEN ST_LineInterpolatePoint((SELECT the_geom FROM lines WHERE gid = d.gid), 0.5)
WHEN (SELECT the_geom FROM polygons WHERE gid = d.gid AND ST_Intersects(ST_Centroid(the_geom),the_geom)) IS NOT NULL
THEN ST_Centroid((SELECT the_geom FROM polygons WHERE gid = d.gid))
ELSE ST_PointOnSurface((SELECT the_geom FROM polygons WHERE gid = d.gid))
END AS center
FROM someTable d