marker
앱 을 만들려면 선 또는 다각형의 중심점을 가져와야합니다 . 마커를 클릭하면 형상 (선 또는 다각형)이 나타납니다. 나는 ST_Centroid
그것을 작동시키는 데 사용 했다.
결과는 중심이 형상에서 벗어난 일부 다각형 또는 선을 예상하지 못한 것입니다. 이 선이나 다각형에 대해 원하는 것은 "가장 중심점"이지만 지오메트리 내부를 얻는 것입니다.
어떻게해야합니까? 해결책이 있습니까?
marker
앱 을 만들려면 선 또는 다각형의 중심점을 가져와야합니다 . 마커를 클릭하면 형상 (선 또는 다각형)이 나타납니다. 나는 ST_Centroid
그것을 작동시키는 데 사용 했다.
결과는 중심이 형상에서 벗어난 일부 다각형 또는 선을 예상하지 못한 것입니다. 이 선이나 다각형에 대해 원하는 것은 "가장 중심점"이지만 지오메트리 내부를 얻는 것입니다.
어떻게해야합니까? 해결책이 있습니까?
답변:
문서에서 : 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