【问题标题】:Create geography polyline from points in T-SQL从 T-SQL 中的点创建地理折线
【发布时间】:2014-06-17 09:15:25
【问题描述】:

我有一个如下所示的表架构:

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

示例数据如下所示:

如何使用 TSQL 将这些点转换为地理折线?

【问题讨论】:

    标签: sql-server tsql geospatial


    【解决方案1】:

    试试这个: (注意:点的顺序对于正确生成线很重要。)

    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
    

    【讨论】:

    • 我建议避免SELECT @var = @var + '' ... ORDER BY ... 构造。 Group by value and create geography polyline from points
    • @lad2025 好点。该链接说applying a function or expression to the columns in the SELECT list *should* produce deterministic behavior(如答案),他们还继续说The correct behavior for an aggregate concatenation query is undefined。基于类似问题的答案here 中的替代结构更可靠。感谢您的评论。
    • 使用 COALESCE 的字符串聚合显然不安全:marc.durdin.net/2015/07/…
    猜你喜欢
    • 2012-04-02
    • 1970-01-01
    • 2012-04-27
    • 2015-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多