2013-05-07 37 views
6

Tôi có khoảng 40.000 đa giác được lưu trữ dưới dạng hình học trong bảng của tôi. Bây giờ tôi muốn tạo chỉ mục không gian trên cột hình học đó. Trong khi tạo chỉ mục không gian, nó yêu cầu tôi cho các giá trị hộp Bounding. Bạn có thể vui lòng giúp tôi về cách tìm ra giới hạn của tôi không. để có được hộp giới hạn của tôi, tôi cần phải tìm xmin, ymin, xmax, ymax của tôi.Hộp giới hạn cho đa giác

Cảm ơn

+1

lặp qua tất cả các đỉnh, theo dõi các trái xa nhất, xa nhất phải, xa nhất và xa nhất xuống xs và ys như bạn làm. (Hoặc làm điều đó khi lần đầu tiên tạo ra, nếu nó quá chậm) – Patashu

Trả lời

7

EDIT: Bạn có thể sử dụng EnvelopeAggregate ở vị trí của UnionAggregate và STEnvelope tất nhiên ...


Bạn có thể thực hiện một UnionAggregate trên tất cả các đa giác, chấm STEnvelope xung quanh họ và trực quan chọn ra các giá trị XMin, YMin, XMax, YMax. Tất nhiên bạn có thể thực hiện một số thao tác TSQL của STAsText của hộp giới hạn, nhưng tôi sẽ để nó như một bài tập thủ công.

Điều đó cung cấp cho bạn một hộp bao gồm đa giác hiện có của bạn, nhưng bạn nên xem xét số lượng đệm bạn cần hoặc giới hạn cần thiết cho dữ liệu trong tương lai.

mẫu:

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! Cảm ơn vì điều đó. Tôi đến từ Wellington –

+0

Có cách nào để thực hiện điều này trong SQL Server 2008 không? UnionAggregate và EnvelopeAggregate không tồn tại ở đó .. – Philipp

+0

@Philipp Đây là *** máy chủ SQL 2008. Có thể bạn có nghĩa là năm 2005 hoặc 2008 với một chế độ tương thích? – RichardTheKiwi