2014-06-17 52 views
4

我有一个看起来像这样的表模式:创建一个从点地理折线

CREATE TABLE [dbo].[LongAndLats](
[Longitude] [decimal](9, 6) NULL, 
[Latitude] [decimal](9, 6) NULL, 
[SortOrder] [int] NULL 
) 

的样本数据是这样的:

enter image description here

我怎样才能将这些点转换为使用TSQL的地理折线?

回答

4

试试这个: (:点的顺序很重要,以便正确生成行。)

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 = 'LINESTRING(' + @BuildString + ')'; 
DECLARE @LineFromPoints geography = geography::STLineFromText(@BuildString, 4326); 
SELECT @LineFromPoints 
+0

我建议,以避免'选择@var = @var + ''。 .. ORDER BY ...'构造。 [按值分组并创建地理多段线](https://stackoverflow.com/questions/48241483/group-by-value-and-create-geography-polyline-from-points-latitude-and-longitude/48241575# 48241575) – lad2025

+1

@ lad2025好点。该链接指出:“对SELECT列表中的列应用函数或表达式应该产生确定性行为(如在答案中),他们还会说'聚合级联查询的正确行为是未定义的。基于类似问题的答案[这里](https://stackoverflow.com/a/48241575/2293226)中的替代构造更可靠。感谢您的评论。 – g2server