如何通过STWithin对SQL Server几何数据进行分组?

时间:2011-12-12 09:48:23

标签: sql sql-server geometry spatial

我有两个表,我将几何存储在。

CREATE TABLE config.region
(
    id int identity(1,1) PRIMARY KEY,
    polygon GEOMETRY NOT NULL
)

CREATE TABLE config.location
(
    id int identity(1,1) PRIMARY KEY,
    position GEOMETRY
)

区域表将包含矩形多边形。位置表仅包含点。

我想要做的是选择所有区域和每个多边形内实际有多少个点的COUNT。

我提出了这个查询,它显示了多边形id,位置id以及该位置是否在多边形中。

SELECT 
    polygon.id as pid, 
    config.location.id as lid, 
    polygon,
    polygon.STContains(config.location.position) as within 
FROM 
    config.polygon, config.location

如何修改此项以提供计数,而不仅仅是列出它们是否在彼此之间?

1 个答案:

答案 0 :(得分:3)

我没有SQL Server 2008所以我现在无法测试它。你可以试试这个:

select r.id, count(*) as qty
from config.region r
join config.location l on r.polygon.STContains(l.position) = 1
group by r.id

所有多边形:

select p.*, isnull(t.qty, 0) as points_within_polygon
from config.region p
left join (
    select r.id, count(*) as qty
    from config.region r
    join config.location l on r.polygon.STContains(l.position) = 1
    group by r.id
) t on t.id = p.id

<强>加: 以下代码作为subqery也应该正常工作。您可以尝试哪种方式更快。<​​/ p>

select r.id, sum(cast(r.polygon.STContains(l.position) as int)) as qty
from config.region r
cross join config.location l
group by r.id

<强>更新: 已添加bitint