2009-01-14 6 views
5

birkaç noktayı tanımlayın: SQL 2008 mekansal işlevleri ile, iki (veya daha fazla) POINT örneği arasındaki çizgiyi temsil eden bir LİNESTRE nasıl oluşturabilirim? aşağıdaki gibi

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

Şimdi bu iki nokta arasındaki en kısa çizgi elde etmek istiyorum. Bu hattı almak için hangi işlevi kullanabilirim? (yani, bir LINESTRING (1 2, 6 8) veya LINESTRING (6 8, 1 2)) vermelidir

Bunu WKT olarak biçimlendirerek, bir dizi dize işlemi yaparak bunu yapabilirim. sonra geri ayrıştırmak, ama bu saçma görünüyor. Elbette doğrudan bir dizi puandan bir linestring inşa etmenin bir yolu var mı?

("geometri" türleri ile, kullanabileceğim @ p2.STUnion (@ p1) .STConvexHull(), ancak bir coğrafya türü için hiçbir STConvexHull(). Yoktur)

cevap

5

bunu yapmak için iki yol vardır T-SQL'de:

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)+')') 
İlgili konular