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

时间:2009-01-14 13:46:59

标签: 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()。)

1 个答案:

答案 0 :(得分:5)

在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)+')')