0

我们有一个空间表 (dbo.Map),其中包含代表 11 个区域的 11 个多边形。此表具有唯一的 ID、名称和与其关联的其他元数据,以及称为 geo 的地理数据类型列。我们还有一个单独的表(dbo.points),其中包含一个点列表,它们的纬度/经度位于第一个表定义的区域中。这两个表没有任何东西可以连接它们,除非我们能够将纬度/经度连接到地理列。我们如何返回给定区域中所有点的列表?

4

1 回答 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 子句,但这是最基本的“我如何找到我的观点所在的区域?”。

另请注意,点表有一个持久计算列,它是一个地理实例,表示经度和纬度列给出的点。这有几个原因:

  1. 您不能将垃圾(例如abs(Latitude) > 90)数据放入纬度和经度。
  2. 您将 geography 实例存储在行中,因此您不必每次都计算它
于 2015-05-23T00:48:13.173 回答