2013-12-11 4 views
0

GIS 클라이언트에서 정상적으로 표시되는 점 Geometry로 가득 찬 테이블이 있습니다. 나는 속성 (groupid)에 포인트를 그룹화하고 그 주위에 볼록 선체를 만들고 싶다. 직선적 인 것처럼 보이지만 예기치 않은 결과를 얻습니다. 점, 선 스트링 및 다각형이 혼합 된 '지오메트리'필드. 나는 폴리곤만을 기대하고 있었고 아마도 1의 개수를 가진 그룹을 무시하려고했다. 어떤 아이디어? ST_ConvexHull (ST_Collect (pointgeom))은 점, 선 스트링 및 다각형을 리턴합니다.

쿼리 :

SELECT groupid, ST_ConvexHull(ST_Collect(geom))) As hull_geom into hulledpoints 
    FROM somepoints 
    GROUP BY groupid; 

답변

2

만 폴리곤이 있는지 확인하는 가장 쉬운 방법은 단지 그룹 ID 수가 이것은보다 2

SELECT groupid, ST_ConvexHull(ST_Collect(geom))) As hull_geom into hulledpoints 
FROM somepoints 
GROUP BY groupid 
HAVING count(groupid)>2; 

입니다 그룹의 볼록 선체를 취할 수 있도록하는 것입니다 때문에 두 가지의 볼록 선체 포인트는 포인트의 볼록 선체 인 반면, 선 스트링 같은 점, 예를 들어 유도 선 (1, 2 (2))를 반환

select ST_AsText(ST_ConvexHull(ST_Collect(St_MakePoint(1,1),St_MakePoint(2,2)))); 

.

SQL 접근 방식이 아닌 기하학적 방식을 사용하려는 경우 반환 된 선체가 다각형인지 확인할 수 있습니다. 다음 예는 아무 것도 반환하지 않습니다. 세 점이 있지만 두 개가 일치하므로 볼록한 선체는 여전히 선 스트링이됩니다.

원래의 예에서
with hulls as (select ST_ConvexHull(ST_Collect(Array[St_MakePoint(1,1), 
    St_MakePoint(2,2), St_MakePoint(2,2)])) as hull) 
select * from hulls where ST_GeometryType(hull)='ST_Polygon'; 

, 당신은 내가 그들은 모두이 동일한 지 확인하는 방법에 관한이 정말 질문에 대한 대답 잘 모르겠어요

with hulls as (SELECT groupid, ST_ConvexHull(ST_Collect(geom)) As hull_geom 
    FROM somepoints GROUP BY groupid) 
select * from hulls where ST_GeometryType(hull_geom)='ST_Polygon'; 
+1

답변을 수락하고 감사 드려 죄송합니다. 이것은 트릭을 수행합니다. 이제 분명히 - 하루는 앉아서 모든 ST_ 함수 (예 : ST_GeometryType)를 읽어야합니다! – kgeo

+0

예, 물론 그 문서를 읽는 동안 가치가 있습니다. 그러나 그들은 새로운 기능을 계속 추가하고 있습니다 :-) –

1

광고

"예상치 못한 결과를 얻는 :. 점, 선 스트링과 다각형의 혼합과 '기하'필드를" 시험을 쉽게

: 당신이 더 많은 GIS 관련 질문이있을 경우 점의 볼록 선체는 점

select st_astext(st_convexhull(st_makepoint(1,2))) 

st_astext 
POINT(1 2) 

와 두 지점에 대한, 그것은 선

select st_astext(st_convexhull(st_collect(st_makepoint(1,2),st_makepoint(2,2)))) 

st_astext 
LINESTRING(1 2,2 2) 

입니다 http://gis.stackexchange.com에 게시 해주십시오.

+0

의 라인을 따라 위의 쿼리를 작성합니다 단 하나의 구성원 만 갖는 유형 또는 그룹은 제외됩니다. –

+0

@ JohnBarça 필자는 왜 결과에 점, 선 및 다각형이 혼합 될 수 있는지 질문하는 부분에 답변했습니다. – underdark

+0

참, downvote가 제거되었습니다. –