2013-05-07 10 views
6

Mam około 40 000 wielokątów zapisanych jako geometria w moim stole. Teraz chcę utworzyć indeks przestrzenny na tej kolumnie geometrii. Tworząc indeks przestrzenny, pytam mnie o wartości Bounding box. Czy możesz mi pomóc, jak znaleźć moje ograniczenie? aby zdobyć moje pole ograniczające muszę znaleźć moje xmin, ymin, xmax, ymax.Pole ograniczające do wielokąta

Dzięki

+1

iteracyjne nad wszystkimi wierzchołkami, śledzenie najdalszej lewej, najdalej w prawo, najdalej w górę iw dół najdalej XS i YS jak ty. (Lub rób to, kiedy po raz pierwszy tworzysz, jeśli jest zbyt wolny) – Patashu

Odpowiedz

7

EDIT: Można użyć EnvelopeAggregate w miejsce UnionAggregate i STEnvelope oczywiście ...


Można wykonać UnionAggregate na wszystkich wielokątów, położyć STEnvelope wokół nich i wizualnie wybierz wartości XMin, YMin, XMax, YMax. Oczywiście możesz zrobić manipulację TSQL na STAsText ograniczającej ramce, ale zostawię to jako ćwiczenie ręczne.

To daje pole, które obejmuje istniejące wielokąty, ale należy wziąć pod uwagę, ile potrzebne jest wypełnienie lub jakie ograniczenia są konieczne dla przyszłych danych.

Próbka:

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

Geniusz! Dziękuję za to. Jestem z Wellington –

+0

Czy można to zrobić na serwerze SQL 2008? UnionAggregate i EnvelopeAggregate już tam nie istnieje .. – Philipp

+0

@Philipp To *** jest *** SQL server 2008. Może masz na myśli 2005 lub 2008 z innym trybem zgodności? – RichardTheKiwi

Powiązane problemy