1

SQL Server 2008 R2 を使用しており、1 つの列のマルチポイントをラインに変換する必要があります。さまざまな地理的特徴を試しましたが、成功しませんでした...

例えば:

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 にポイントの制限はありますか?

4

2 に答える 2

0

問題を解決しました。CodePlex によるこのパッケージ SQL Spatial Tools が存在します。パッケージには関数 MakeValidValidGeographicFromText() が存在します。

詳細については、http ://sqlspatialtools.codeplex.com/wikipage?title=Current%20Contents をご覧ください。

于 2013-07-11T20:21:11.570 に答える
0

SQL Server に渡す LINESTRING WKT を確認すると役立ちます。ただし、マルチポイントをラインに変換するアルゴリズムはほとんどの場合機能しますが、マルチポイントが特定の方法で生成されたことがわかっていない限り、ポイントの順序は保証されません。このため、自己交差するライン ストリングが生成される可能性があり、このエラーが発生する可能性があります。

MakeValid は、ラインが自己交差しないようにポイントをシフトすることで問題を修正しています。

LineString のポイントの最大数に関する質問については、Sql Server 2008 geography LineString size limitsを参照してください。

于 2013-07-11T20:23:31.233 に答える