sql - 使用 SQL 2008 空间函数,如何构造表示两个(或多个)POINT 实例之间的线的 LINESTRING?

标签 sql sql-server sql-server-2008 geospatial spatial

定义几个点如下:

declare @p1 geography, @p2 geography
set @p1 = 'POINT(1 2)'
set @p2 = 'POINT(6 8)'

现在我想获得这两点之间的最短线。我可以使用什么函数来获取这条线? (即,它应该输出 LINESTRING(1 2, 6 8) 或 LINESTRING(6 8, 1 2))

我知道我可以通过将点格式化为 WKT,进行一些字符串操作,然后将其解析回来来做到这一点,但这看起来很荒谬。当然有某种方法可以直接从一系列点构造线串吗?

(对于“几何”类型,我可以使用 @p2.STUnion(@p1).STConvexHull(),但没有适用于地理类型的 STConvexHull()。)

最佳答案

在 T-SQL 中有两种方法可以做到这一点:

declare @p1 geography = 'POINT(1 2)', @p2 geography = 'POINT(6 8)';

-- using geometry
SELECT geography::Parse(geometry::Parse(@p2.STUnion(@p1).ToString()).STConvexHull().ToString())

-- using lat, long methods
SELECT geography::Parse('LINESTRING('+str(@p1.Long)+' '+str(@p1.Lat)+','+str(@p2.Long)+' '+str(@p2.Lat)+')')

关于sql - 使用 SQL 2008 空间函数,如何构造表示两个(或多个)POINT 实例之间的线的 LINESTRING?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/443002/

相关文章:

android - 从外部数据库获取所有行 - 好主意吗?

c# - SQL备份文件,区分部分和完整备份文件

sql - 如何将 INNER JOIN 与 GROUP BY 子句结合使用?

sql - 选择 "where clause"评估顺序

sql - 如何连接表变量?

mysql - max vs limit 哪个更有效

php - 搜索引擎只能单返回?

sql - 合并两列 SQL Server

sql - 从此 sql server 文章翻页的有效方法

c# - 将数据表从 C# 传递到 SQL Server 2008