2013-05-07 208 views
6

我的表格中有大约40,000个多边形存储为几何图形。现在我想在该几何列上创建空间索引。创建空间索引时,它会询问我是否包含边界框值。你能帮我找到我的界限吗?为了得到我的边界框我需要找到我的xmin,ymin,xmax,ymax。多边形的边界框

感谢

+1

遍历所有顶点,跟踪最远的左,右最远,最远起来,为你做最远下来X和Y。 (或者在第一次创建时做,如果太慢) – Patashu 2013-05-07 03:43:06

回答

7

编辑:您可以代替UnionAggregate当然STEnvelope的使用EnvelopeAggregate ...


您可以在所有的多边形进行UnionAggregate,把一个STEnvelope他们周围,直观地选出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

天才!感谢那。我来自惠灵顿 – 2013-05-07 22:29:33

+0

有没有办法在SQL Server 2008中做到这一点? UnionAggregate和EnvelopeAggregate不存在那里.. – Philipp 2015-03-13 13:07:06

+0

@ Philipp这***是*** SQL服务器2008.也许你的意思是2005或2008与另一种兼容模式? – RichardTheKiwi 2015-03-16 08:52:07