Gen*_*ene 8 t-sql sql-server geography sql-server-2008-r2
在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)
)
Run Code Online (Sandbox Code Playgroud)
现在我想创建一个Polygon
从这一点来确定,我的哪些商店位于由点定义的区域.
是否有一种原生的快速方法从T-SQL中的给定点构建多边形?我找到的解决方案是使用STGeomFromText
/ STGeomFomWKB
方法创建一个多边形,这对我来说似乎非常麻烦和缓慢.
就像是:
SET @POLY = geometry::STPolyFromPoints(SELECT Position FROM MyPoints)
Run Code Online (Sandbox Code Playgroud)
假设我们在此表中有一个完整的有序长度和拉特表:
CREATE TABLE [dbo].[LongAndLats](
[Longitude] [decimal](9, 6) NULL,
[Latitude] [decimal](9, 6) NULL,
[SortOrder] [int] NULL
)
Run Code Online (Sandbox Code Playgroud)
这会将这些点转换为多边形:
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
Run Code Online (Sandbox Code Playgroud)
一些说明:
据我所知,没有本地函数将表格作为参数并将其转换为多边形。
最好的方法是结合标量用户定义函数,将一列结果与您已经阅读过的 STPolyFromText 连接成单个逗号分隔的字符串。
归档时间: |
|
查看次数: |
19818 次 |
最近记录: |