2013-07-10 82 views
1

我使用SQL Server 2008 R2,我需要將一列多點轉換爲行。我嘗試了各種地理特徵,但沒有成功......SQL Server 2008 R2 - 如何將多點轉換爲線?

例如:

declare @f varchar(max); 
declare @g geography; 
set @f = (SELECT replace((SUBSTRING(T.ROUTEM.ToString(),11,9999999)),'(','') 
      FROM dbo.TRAVELS T WHERE T.ID_TRAVEL = 74063); 
set @f = (SELECT replace(@f,')', '')); 
set @f = (SELECT 'LINESTRING (' + @f + ')'); 
set @g = geography::STLineFromText(@f,4326); 
select @g; 

從SQL Server的回報是:

A .NET Framework error occurred during execution of user-defined routine or aggregate "geography": 
System.ArgumentException: 24200: The specified input does not represent a valid geography instance. 
System.ArgumentException: 
    at Microsoft.SqlServer.Types.SqlGeography.ConstructGeographyFromUserInput(GeoData g, Int32 srid) 
    at Microsoft.SqlServer.Types.SqlGeography.GeographyFromText(OpenGisType type, SqlChars taggedText, Int32 srid)* 

如果有人幫助我,我將不勝感激。

PS:STLineFromText有沒有限制點數?

+0

你能告訴我們一些你的數據嗎? –

+0

我可以,但這個問題是關於如何將一個字段地理與多點信息轉換爲線串。 我設法使用幾何函數MakeValid()來轉換場中的線串,但由於我需要經緯度,所以這種轉換不適合我。 你想看什麼樣的信息? –

回答

0

這將有助於看到LINESTRING WKT要傳遞到SQL Server。但是,儘管將多點轉換爲線的算法可能在大多數情況下都有效,但它不能保證點的任何順序,除非您知道多點是以特定方式生成的。正因爲如此,可能會生成一個自相交的行字符串,這會導致此錯誤。

MakeValid通過移動點來解決問題,以便線不會自交叉。

關於你對點的線段形式的最大數量的問題,請參見Sql Server 2008 geography LineString size limitations

相關問題