2013-05-07 7 views
6

내 테이블에 약 40,000 개의 다각형이 형상으로 저장되어 있습니다. 이제 그 기하학 컬럼에 공간 인덱스를 생성하려고합니다. 공간 인덱스를 생성하는 동안 Bounding box 값을 묻습니다. 제 경계를 찾는 방법에 대해 도와주세요. 내 경계 상자를 얻으려면 내 xmin, ymin, xmax, ymax를 찾아야합니다.다각형의 경계 상자

감사

+1

으로 반복, 멀리 왼쪽을 추적하는 데, 멀리 오른쪽, 위쪽 멀리하고 당신이로 XS와 YS를 가장 먼. (또는 처음 생성 할 때 너무 느리다면) – Patashu

답변

7

편집 : 당신은 그들 주위 STEnvelope을 넣어

이 가

당신은 모든 다각형에 UnionAggregate을 수행 할 수 있습니다 ... UnionAggregate 물론 STEnvelope 대신에 EnvelopeAggregate를 사용할 수 있으며, 시각적으로 XMin, YMin, XMax, YMax 값을 선택하십시오. 물론 바운딩 박스의 STAsText에 대한 TSQL 조작을 수행 할 수 있지만 수동 연습으로 남겨 두겠습니다.

기존 다각형을 처리하는 상자가 있지만 필요한 패딩이나 향후 데이터에 필요한 경계를 고려해야합니다.

샘플 : 모든 정점에 걸쳐

use tempdb; 
create table GeometryTest(id int identity primary key, geom Geometry); 
insert GeometryTest values ('POLYGON((-130 54, -130 23, -60 23, -60 54, -130 54))'); 
insert GeometryTest values ('POLYGON((1 0, 0 0, 0 1, 1 1, 3 5, 1 0))'); 
insert GeometryTest values ('POLYGON((0 0, -100 5, 0 60, 70 70, 3 5, 0 0))'); 

select geometry::UnionAggregate (geom).STEnvelope().STAsText() 
from GeometryTest; 

--------------------------------------------------------------- 
POLYGON ((-130 0, 70 0, 70 70, -130 70, -130 0)) 
--------------------------------------------------------------- 

create spatial index six_GeometryTest_geom on GeometryTest(geom) 
    WITH (BOUNDING_BOX = (-130, 0, 70, 70)); 
+0

Genius! 고마워. 나는 웰링턴 출신이다 –

+0

SQL 서버 2008에서이 작업을 수행 할 수있는 방법이 있습니까? UnionAggregate와 EnvelopeAggregate는 아직 존재하지 않습니다 .. – Philipp

+0

@Philipp 이것은 *** *** SQL 서버 2008입니다. 아마 또 다른 호환 모드로 2005 또는 2008을 의미할까요? – RichardTheKiwi