1

SQLServer 2008では、2つのLineStringを複数のLineString(できれば、MultiLineString)に変換しようとしています。これは、それらを互いに部分的に分割することによって行います。

L1 | --------------- |
L2 | ---- |

= | ---- | ---- | ----- |

一般的な言葉で考えると、L1.STIntersection(L2)を使用して中心部分を取得できます。L1.STSymDifference(Intersection)で取得できる他の2つの部分。最後の2つの部分は、MultiLineStringとして返されます。

このMultiLineStringに最初の中心部分を追加するにはどうすればよいですか?

STUnionを使用すると、L1のような単一のマージされたLineStringが生成されます。おそらくこれが問題です。マージできるMultiLineStringsは常にマージする必要がありますか?

4

1 に答える 1

0

SQL Server 2008 でこれを実現する関数は見つかりませんが、SQL Server 2008 の sql 関数も比較的初めてです。

SQL Server 2008 を扱うときは、通常、PostGIS フォーラムとメーリング リストをチェックして、そこでどのように処理されているかを確認します (PostgreSQL-PostGIS は、これよりずっと前から行われています)。誰かが、あなたが求めている結果のように見えるこの問題とは逆の問題を抱えているようです。

残念ながら、ST_LineMerge (または STLineMerge) はないので、おそらく独自のものを作成する必要があります。

これらの例がすべての場合に機能するかどうかはわかりません (また、折れ線自体は順番どおりではありません)。

select geometry::STGeomFromText(Replace(@g2.STSymDifference(@g1).ToString(),'))','),' + Replace(@g1.STIntersection(@g2).ToString(),'LINESTRING','') + ')'), @g1.STSrid).STAsText()

実際の折れ線データを使用した同じロジックは次のとおりです。

DECLARE @g1 geometry;
DECLARE @g2 geometry;
DECLARE @g3 geometry;

SET @g1 = geometry::STGeomFromText('LINESTRING(0 0, 0 20)', 0);
SET @g2 = geometry::STGeomFromText('LINESTRING(0 5, 0 10)', 0);

SELECT @g1.STIntersection(@g2).ToString();

SELECT @g1.STIntersection(@g2).STAsText();

SELECT @g2.STSymDifference(@g1).ToString();

select @g1.STIntersection(@g2).ToString();


SET @g3 = geometry::STGeomFromText(Replace(@g2.STSymDifference(@g1).ToString(),'))','),' + Replace(@g1.STIntersection(@g2).ToString(),'LINESTRING','') + ')'), @g1.STSrid);

select @g3.STAsText();
于 2009-03-16T16:54:29.370 に答える