2009-01-14 1 views
5

Definieren Sie ein paar Punkte wie folgt:Wie kann ich mit räumlichen SQL 2008-Funktionen ein LINESTRING erstellen, das die Linie zwischen zwei (oder mehr) POINT-Instanzen darstellt?

declare @p1 geography, @p2 geography 
set @p1 = 'POINT(1 2)' 
set @p2 = 'POINT(6 8)' 

Nun möchte Ich mag die kürzeste Linie zwischen diesen beiden Punkten zu erhalten. Welche Funktion kann ich verwenden, um diese Zeile zu erhalten? (dh es sollte eine LINESTRING (1 2, 6 8) oder LINESTRING (6 8, 1 2))

Ich weiß, ich könnte dies tun, indem Sie die Punkte als WKT, ein wenig String-Manipulation, und dann Parsing es zurück, aber das scheint lächerlich. Sicherlich gibt es eine Möglichkeit, eine Linienfolge direkt aus einer Reihe von Punkten zu konstruieren?

(mit "Geometrie" Typen kann ich @ verwenden p2.STUnion (@ p1) .STConvexHull(), aber es gibt keine STConvexHull() für einen Geographie-Typen.)

Antwort

5

Es gibt zwei Möglichkeiten, es zu tun in 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)+')') 
Verwandte Themen