Как с помощью пространственных функций SQL 2008 построить LINESTRING, представляющую линию между двумя (или более) экземплярами POINT?

Определите пару пунктов следующим образом:

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() не подходит для типа geography.)


person Community    schedule 14.01.2009    source источник


Ответы (1)


В 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)+')')
person Marko Tintor    schedule 01.02.2009