SQL Server 2008 R2 - 如何将Multipoint转换为Line?

时间:2013-07-10 21:05:45

标签: sql-server tsql geospatial

我使用SQL Server 2008 R2,我需要将一列Multipoint转换为Line。我尝试了各种地理特征,但没有成功......

例如:

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是否存在点数限制?

2 个答案:

答案 0 :(得分:0)

我解决了我的问题。 CodePlex存在此SQL Spatial Tools包。在包上存在函数MakeValidValidGeographicFromText()。

了解更多:http://sqlspatialtools.codeplex.com/wikipage?title=Current%20Contents

答案 1 :(得分:0)

看到传递给SQL Server的LINESTRING WKT会很有帮助。但是,虽然将Multipoint转换为Line的算法在大多数情况下都可以工作,但它并不保证对点的任何顺序,除非您知道多点是以特定方式生成的。因此,可以生成自相交的线串,这会导致此错误。

MakeValid正在通过移动点来解决问题,使线不会自行交叉。

关于有关LineString中最大点数的问题,请参阅Sql Server 2008 geography LineString size limitations