2016-06-01 4 views
-3

列に複数のポイントを持つ地理的なライン文字列の順序を通常(緯度、経度)に戻すにはどうすればよいですか?SQL Serverの経度/緯度の逆転方法は?

enter image description here

+0

SQLを表示するには、画像へのリンクを使用しないでください。あなたの質問にテキストとして含めるだけです。 – sstan

答えて

0

あなたは数字のテーブルを持っていると仮定すると、あなたはこれを行うことができます。私が今までに書いた中で最もエレガントなものではありませんが、それは仕事を終わらせます。

DECLARE @g GEOGRAPHY, @g_new GEOGRAPHY, @t VARCHAR(200); 
SET @g = geography::STLineFromText('LINESTRING (2 1,4 3)', 4236); 
SELECT @g.ToString(); 

WITH cte AS (
    SELECT [n] , 
      @g.[STPointN]([n]) AS [point] 
    FROM  [Util].[dbo].[Numbers] AS [n] 
    WHERE [n] <= @g.[STNumPoints]() 
) 

SELECT @t = CONCAT('LINESTRING(', 
    STUFF((
     SELECT CONCAT(',', [cte].[point].Lat, ' ', [cte].[point].Long) 
     FROM [cte] 
     ORDER BY n 
     FOR XML PATH('') 
    ),1, 1, ''), 
    ')' 
); 

SET @g_new = GEOGRAPHY::STGeomFromText(@t, @g.[STSrid]); 
SELECT @g_new.ToString();