ST_PointOnSurface는 어떻게 계산됩니까?


21

PostGIS 문서 ST_PointOnSurface는 "표면에 놓여진 포인트" 를 반환 한다고 명시하고 있습니다. PostGIS가 사소한 구현을 제공한다고 확신하지만이 기능은 문서를 만족하지만 실제 유틸리티는 거의 제공하지 않는 결과를 제공하기 위해 사소하게 구현 될 수있는 것처럼 보입니다.

PostGIS에 대한 이 소개 는 "[ST_PointOnSurface]가 센트 로이드 연산보다 계산 비용이 훨씬 비쌉니다." ST_Centroid와의 비교 및 대비를 제공합니다 ST_PointOnSurface.

ST_PointOnSurface계산 방법에 대한 자세한 설명이 있습니까? 을 사용 ST_Centroid하고 있지만 중심이 형상 외부에있는 데이터에서 일부 사례가 발생했습니다. 나는 이것이 ST_PointOnSurface올바른 대안 이라고 생각 하지만 기능 이름과 문서는 불확실성을 남깁니다.

또한, ST_PointOnSurface중심이 이미 지오메트리 내에있는 경우에도 발생 하는 계산 비용이 있습니까?


볼록하지 않은 다각형의 중심이 항상 포함되어 있지 않기 때문에 정확하게 존재합니다. 이름의 혼란스러운 부분이라면 높이와 DEM과는 아무런 관련이 없습니다. 구현 세부 사항은 코드에서 가장 잘 확인되지만 GIS.se에서 더 나은 답변을 얻을 수 있다고 생각합니다.
lynxlynxlynx

GIS.se에 대한 좋은 지적. 이 질문을 그곳으로 이전하는 방법이 있습니까? 두 기능이 모두 존재하는 이유를 이해합니다. 내가 작업중 인 다각형 가면의 표면에 무한한 점이 있기 때문에 이름이 혼동됩니다. 그러나 그 점의 작은 하위 집합 만 내 목적에 도움이됩니다. 어떻게 사용하고 싶은지 이해가 되길 바랍니다.

답변:


24

몇 가지 실험을 바탕으로 ST_PointOnSurface()형상이 다각형이면 대략 다음과 같이 작동 한다고 생각 합니다.

  1. 다각형의 북쪽과 남쪽 범위의 중간에 위치한 동서 광선을 추적합니다.
  2. 다각형과 교차하는 광선의 가장 긴 세그먼트를 찾으십시오.
  3. 해당 세그먼트를 따라 중간 지점을 반환하십시오.

의미가 없을 수도 있으므로 광선을 다각형으로하여 북쪽과 남쪽으로 나눕니다.

             _
            / \             <-- northern extent
           /   \
          /     \
         /       \
        /         \      __
       /           \    /  \
      /_ _ _ P _ _ _\  / _ _\  P = point-on-surface
     /               \/      \
    /                         \
   /            C              \   C = centroid
  /                             \
 /                              /
/______________________________/  <-- southern extent

따라서, ST_PointOnSurface()그리고 ST_Centroid()심지어 볼록 다각형에, 일반적으로 다른 점이다.

이름의 "표면"에 대한 유일한 이유는 지오메트리에 3D 선이있는 경우 결과는 단순히 꼭지점 중 하나 일 것이기 때문입니다.

더 많은 설명과 더 나은 이름 지정이 도움이되었고 GEOS 프로그래머가이 문제에 대해 더 많은 것을 밝힐 수 있기를 바랍니다.


3
libgeos 코드를 보면 , 당신이 옳다고 생각합니다. 수평 이등분선이 발견되면 가장 넓은 교차점의 중간 점이 사용됩니다.
mjobrien
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.