在 Azure 上的 SQL Server (2008 R2) 中,有一个包含大量地理点
(纬度/经度)的表:
CREATE TABLE MyPoints
(
Region uniqueidentifier NOT NULL,
Number int NOT NULL,
Position geography NOT NULL,
CONSTRAINT PK_MyPoints PRIMARY KEY(Region, Number)
)
现在我想从这些点创建一个多边形
来确定我的哪些商店位于这些点定义的区域内。
是否有一种本地且快速的方法可以从 T-SQL 中的给定点构建多边形? The solutions I found正在使用 STGeomFromText
/STGeomFomWKB
方法创建多边形,这对我来说似乎非常麻烦且缓慢。
类似于:
SET @POLY = geometry::STPolyFromPoints(SELECT Position FROM MyPoints)
最佳答案
假设我们有一张表,其中充满了有序的长线和拉特线:
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
一些注意事项:
- 多边形需要闭合。 IE。第一点和最后一点应该相同。
- 应至少获得 4 分。
- 要点的顺序很重要。它应该遵循“左手/脚规则”(位于点之间所画线左侧的区域被视为在多边形内部)
关于sql-server - 从 T-SQL 中的点创建地理多边形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9739433/