5 sql sql-server spatial geospatial sql-server-2008
定义几点如下:
declare @p1 geography, @p2 geography
set @p1 = 'POINT(1 2)'
set @p2 = 'POINT(6 8)'
Run Code Online (Sandbox Code Playgroud)
现在我想获得这两点之间的最短路线.我可以用什么功能来获得这条线?(即,它应输出LINESTRING(1 2 6 8)或LINESTRING(6 8,1 2))
我知道我可以通过将点格式化为WKT,进行一些字符串操作,然后再解析它来做到这一点,但这看起来很荒谬.当然有一些方法可以直接从一系列点构造线串?
(对于"几何"类型,我可以使用@ p2.STUnion(@ p1).STConvexHull(),但是对于地理类型没有STConvexHull().)
小智 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)+')')
Run Code Online (Sandbox Code Playgroud)