PostGIS에서 다각형 내부의 점을 어떻게 찾을 수 있습니까?


22

PostGIS에서 주어진 다각형 내에있는 점을 어떻게 찾을 수 있습니까?

ST_Centroid기능을 알고 있습니다. 그러나 중심이 항상 다각형 내에있는 것은 아닙니다. 아래를 참조하십시오.

다각형 바깥에있는 중심

또한 다각형 경계에있는 점을 사용하지 않고 경계 안에있는 점을 원합니다 (도넛 모양의 다각형의 구멍 안에 있지 않음).

답변:


17

다각형 안에있는 점을 알려주는 PostGIS 함수를 찾고 있다면 ST_PointOnSurface 함수가 필요한 것을 줄 수 있습니다.

SELECT 
   ST_AsText(ST_PointOnSurface('POLYGON((0 0, 0 5, 5 5, 5 0, 0 0))'::geometry));

   st_astext
----------------
 POINT(2.5 2.5)
(1 row)

6

PostGIS 메일 링리스트에서이 기능을 찾았습니다. 나는 그것이 당신이 요구하는 것 같아요 :

CREATE OR REPLACE FUNCTION point_inside_geometry(param_geom geometry)
  RETURNS geometry AS
$$
  DECLARE
     var_cent geometry := ST_Centroid(param_geom);
     var_result geometry := var_cent;
  BEGIN
  -- If the centroid is outside the geometry then 
  -- calculate a box around centroid that is guaranteed to intersect the geometry
  -- take the intersection of that and find point on surface of intersection
 IF NOT ST_Intersects(param_geom, var_cent) THEN
  var_result := ST_PointOnSurface(ST_Intersection(param_geom, ST_Expand(var_cent, ST_Distance(var_cent,param_geom)*2) ));
 END IF;
 RETURN var_result;
  END;
  $$
  LANGUAGE plpgsql IMMUTABLE STRICT
  COST 100;

이 솔루션은 ST_PointOnSurface보다 중심에 더 가까운 점을 제공하지만 다각형의 가장자리에 더 가까운 점을 생성한다는 점이 마음에 듭니다. ST_PointOnSurface는 가능한 한 가장자리에서 멀리 떨어진 지점을 선택하는 것 같습니다. 당신에게 맞는 솔루션을 선택하는 한 맛의 문제라고 생각합니다.
dslh
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.