我使用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是否存在点数限制?
答案 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