1

我有一个点表,每个点都有名称、纬度、经度和区号。我想做的是执行聚合(即“分组依据”子句)并返回包含特定区号的所有点的多边形。

我正在努力寻找是否有任何地理数据类型的内置聚合,更不用说给我边界多边形了

为了争论,假设我有一个看起来有点像的表:

+---------+------+---------+---------+
| 姓名 | 面积 | 纬度 | 长 |
+---------+------+---------+---------+
| 伊普斯维奇 | 一个 | 52.053 | 1.156 |
| 卢顿 | 一个 | 51.8717 | -0.4246 |
| 梅尔顿 | 一个 | 52.1064 | 1.3322 |
| 迪科特 | 乙| 51.6024 | -1.2321 |
| 牛津 | 乙| 51.7486 | -1.265 |
+---------+------+---------+---------+

(实际上最小的区域有57个点,最大的有626个)

4

2 回答 2

2

虽然没有内置的方法来执行此操作,但作为Sql Spatial Tools CodePlex 包的一部分提供了聚合。根据您想要的确切内容,您可能有兴趣使用 Bounding Box Aggregate 或 Union Aggregate,然后调用 ConvexHull 来获取最小多边形而不是框。

于 2009-08-03T16:46:45.440 回答
2

对于任何已经到达这里并希望查看您使用(真棒)Sql Spatial Tools获得的代码的人的好处:

DECLARE @points TABLE
(
 Name VARCHAR(50),
 Area CHAR(1),
 Point GEOGRAPHY
)

INSERT INTO @points VALUES ('Ipswich', 'A', geography::STGeomFromText('POINT( 1.156  52.053  )', 4326))
INSERT INTO @points VALUES ('Luton', 'A', geography::STGeomFromText('POINT(  -0.4246 51.8717 )', 4326))
INSERT INTO @points VALUES ('Melton', 'A', geography::STGeomFromText('POINT( 1.3322  52.1064 )', 4326))

INSERT INTO @points VALUES ('Didcot', 'B', geography::STGeomFromText('POINT( -1.2321 51.6024 )', 4326))
INSERT INTO @points VALUES ('Oxford', 'B', geography::STGeomFromText('POINT( -1.265  51.7486 )', 4326))

SELECT  dbo.ConvexHullGeography(dbo.GeographyUnionAggregate(point)), 'red' as color, 1 as thickness
FROM @points
GROUP BY Area

您可以在GeoQuery2008中查看结果。

于 2009-10-12T11:13:52.397 回答