4
我有一个看起来像这样的表模式:创建一个从点地理折线
CREATE TABLE [dbo].[LongAndLats](
[Longitude] [decimal](9, 6) NULL,
[Latitude] [decimal](9, 6) NULL,
[SortOrder] [int] NULL
)
的样本数据是这样的:
我怎样才能将这些点转换为使用TSQL的地理折线?
我有一个看起来像这样的表模式:创建一个从点地理折线
CREATE TABLE [dbo].[LongAndLats](
[Longitude] [decimal](9, 6) NULL,
[Latitude] [decimal](9, 6) NULL,
[SortOrder] [int] NULL
)
的样本数据是这样的:
我怎样才能将这些点转换为使用TSQL的地理折线?
试试这个: (注:点的顺序很重要,以便正确生成行。)
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
我建议,以避免'选择@var = @var + ''。 .. ORDER BY ...'构造。 [按值分组并创建地理多段线](https://stackoverflow.com/questions/48241483/group-by-value-and-create-geography-polyline-from-points-latitude-and-longitude/48241575# 48241575) – lad2025
@ lad2025好点。该链接指出:“对SELECT列表中的列应用函数或表达式应该产生确定性行为(如在答案中),他们还会说'聚合级联查询的正确行为是未定义的。基于类似问题的答案[这里](https://stackoverflow.com/a/48241575/2293226)中的替代构造更可靠。感谢您的评论。 – g2server