2009-01-14 2 views
5

Définir quelques points comme suit:Avec les fonctions spatiales SQL 2008, comment puis-je construire un LINESTRING représentant la ligne entre deux instances POINT (ou plus)?

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

J'aimerais maintenant obtenir la ligne la plus courte entre ces deux points. Quelle fonction puis-je utiliser pour obtenir cette ligne? (ie, il devrait sortir un LINESTRING (1 2, 6 8) ou LINESTRING (6 8, 1 2))

Je sais que je pourrais le faire en formatant les points en WKT, en faisant un peu de manipulation de chaînes, et puis l'analyse, mais cela semble ridicule. Sûrement il y a un moyen de construire une ligne directement à partir d'une série de points?

(Avec types "géométrie", je peux utiliser @ p2.STUnion (@ p1) .STConvexHull(), mais il n'y a pas STConvexHull() pour un type de géographie.)

Répondre

5

Il y a deux façons de le faire dans 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)+')') 
Questions connexes