定义几个点如下:
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/