SQL Server中使用地理列进行联合操作

4
我正在使用SQL Server 2008 R2,有两个表:Regions和Facilities。这两个表都有一个包含地理元素的列。
我想计算地理元素交集的并集,如下所示:
SELECT * from Regions join Facilities on [Regions].[geography].STIntersects([Facilities].[geography])

当然这是行不通的。这些区域是大型多边形,设施是点,每个点只包含在一个多边形中。

我可以写一些伪代码。

for each r in Regions:
    for each f in Facilities:
        if f.[geography].STIntersects(r.[geography]):
            print r, f

但使用数据库的整个目的是操作集合而不是元素,是吗?

那么,有更好的方法来做到这一点吗?

谢谢 Melanie


2
这个打印出来不是(r,f)吗?SELECT r.geography, f.geography from Regions r join Facilities f on r.geography.STIntersects(f.geography)=1 - RichardTheKiwi
是的,确实如此——在末尾加上“=1”就是关键。 - Melanie
1个回答

6

STIntersect()是SQL Server中的布尔函数之一,返回一个位(bit)值,因此它只能是0或1。
这将成为您的WHERE条件。

r和f的foreach在JOIN语句中是隐式的。

SELECT r.geography, f.geography
from Regions r
join Facilities f on r.geography.STIntersects(f.geography)=1

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