多边形的边界框

6

我有大约40,000个多边形存储在我的表中,现在我想在该几何列上创建空间索引。在创建空间索引时,它要求我提供包围盒的值。您能否帮助我找到我的包围盒?为了获取我的包围盒,我需要找到我的xmin、ymin、xmax和ymax。

谢谢


1
遍历所有顶点,同时跟踪最左、最右、最上和最下的x和y。如果速度太慢,可以在创建时完成。 - Patashu
1个回答

8

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


您可以对所有多边形执行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));

在SQL Server 2008中是否有方法可以实现这个?UnionAggregate和EnvelopeAggregate在那个版本中还不存在。 - Philipp
@Philipp 这是 SQL Server 2008。也许你指的是另一个兼容模式下的2005或2008? - RichardTheKiwi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接