我们有一个空间表 (dbo.Map),其中包含代表 11 个区域的 11 个多边形。此表具有唯一的 ID、名称和与其关联的其他元数据,以及称为 geo 的地理数据类型列。我们还有一个单独的表(dbo.points),其中包含一个点列表,它们的纬度/经度位于第一个表定义的区域中。这两个表没有任何东西可以连接它们,除非我们能够将纬度/经度连接到地理列。我们如何返回给定区域中所有点的列表?
问问题
1083 次
1 回答
0
这是我的做法:
首先,我必须推断您的架构。我会选择这样的东西:
create table dbo.Map (
MapID int identity not null,
geo geography not null
);
create table dbo.Points (
PointID int identity not null,
Latitude decimal(9, 7),
Longitude decimal(10, 7),
geo as geography::Point(Latitude, Longitude, 4236) persisted
);
接下来,选择:
select PointID, MapID
from dbo.Points as p
left join dbo.Map as m
on p.geo.STIntersects(m.geo) = 1
您可能想要添加某种 where 子句,但这是最基本的“我如何找到我的观点所在的区域?”。
另请注意,点表有一个持久计算列,它是一个地理实例,表示经度和纬度列给出的点。这有几个原因:
- 您不能将垃圾(例如
abs(Latitude) > 90
)数据放入纬度和经度。 - 您将 geography 实例存储在行中,因此您不必每次都计算它
于 2015-05-23T00:48:13.173 回答