在Azure上的SQL Server(2008 R2)中,有一个包含大量地理Points
(纬度/经度)的表格:
CREATE TABLE MyPoints
(
Region uniqueidentifier NOT NULL,
Number int NOT NULL,
Position geography NOT NULL,
CONSTRAINT PK_MyPoints PRIMARY KEY(Region, Number)
)
现在我想从这些点创建一个Polygon
来确定我的哪些商店位于由这些点定义的区域。
是否有一种原生且快速的方法来从T-SQL中的给定点构建多边形? The solutions I found正在使用STGeomFromText
/ STGeomFomWKB
方法创建一个多边形,这对我来说似乎非常麻烦和缓慢。
类似的东西:
SET @POLY = geometry::STPolyFromPoints(SELECT Position FROM MyPoints)
答案 0 :(得分:6)
假设我们在此表中有一个完整的有序长度和拉数表:
CREATE TABLE [dbo].[LongAndLats](
[Longitude] [decimal](9, 6) NULL,
[Latitude] [decimal](9, 6) NULL,
[SortOrder] [int] NULL
)
这会将这些点转换为多边形:
DECLARE @BuildString NVARCHAR(MAX)
SELECT @BuildString = COALESCE(@BuildString + ',', '') + CAST([Longitude] AS NVARCHAR(50)) + ' ' + CAST([Latitude] AS NVARCHAR(50))
FROM dbo.LongAndLats
ORDER BY SortOrder
SET @BuildString = 'POLYGON((' + @BuildString + '))';
DECLARE @PolygonFromPoints geography = geography::STPolyFromText(@BuildString, 4326);
SELECT @PolygonFromPoints
一些注意事项:
答案 1 :(得分:3)
据我所知,没有本机函数将表作为参数并将其转换为多边形。
最好的方法是组合一个标量用户定义函数,将一列结果连接成一个逗号分隔的字符串,其中包含您已经阅读过的STPolyFromText。