【发布时间】:2018-01-13 15:50:55
【问题描述】:
这里有人问过类似的问题:
Create geography polyline from points in T-SQL
进一步考虑这个问题,我有一个如下所示的表架构:
CREATE TABLE [dbo].[LongAndLats](
[Longitude] [float] NULL,
[Latitude] [float] NULL,
[SortOrder] [bigint] NULL,
[SensorID] [bigint] NULL,
)
示例数据如下所示:
如何使用 TSQL 将这些点转换为每个 SensorID 的地理折线(以便每个 SensorID 都有一个 SensorID/折线记录)?
我尝试过使用 db_cursor,但我得到了每个组的单独结果集(我认为地理位置可能相同)。这段代码:
DECLARE @SensorID VARCHAR(2000)
DECLARE @LineFromPoints geography
DECLARE @BuildString NVARCHAR(MAX)
DECLARE db_cursor CURSOR FOR
SELECT Distinct([SensorId])
FROM [dbo].[LongAndLats]
OPEN db_cursor
FETCH NEXT FROM db_cursor INTO LongAndLats
WHILE @@FETCH_STATUS = 0
BEGIN
SELECT @BuildString = COALESCE(@BuildString + ',', '') + CAST([Longitude] AS NVARCHAR(50)) + ' ' + CAST([Latitude] AS NVARCHAR(50))
FROM [LongAndLats]
WHERE SensorID = @SensorID
ORDER BY SortOrder
SET @BuildString = 'LINESTRING(' + @BuildString + ')';
SET @LineFromPoints = geography::STLineFromText(@BuildString, 4326);
SELECT @LineFromPoints As 'Geomerty', @name As 'SensorID'
FETCH NEXT FROM db_cursor INTO @name
END
CLOSE db_cursor
DEALLOCATE db_cursor
结果如下:
最后,我想要一个返回所有 SensorID/Polyline 对的视图。我不知道我目前的方法是否有效。我将不胜感激任何建议或示例。
【问题讨论】:
标签: sql-server tsql geospatial sqlgeography sqlgeometry