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

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

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, выполнив некоторые манипуляции со строками, а затем проанализировав их обратно, но это кажется смешным. Конечно, есть какой-то способ построить линейную линию непосредственно из ряда точек?

(С типами "geometry" я могу использовать @ p2.STUnion (@ p1) .STConvexHull (), но для типа географии нет STConvexHull ().)

1 Ответ

5 голосов
/ 01 февраля 2009

Существует два способа сделать это в 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)+')')
...