0

予想とは異なる動作をする次のコードを試しました。DbGeometry.FromText は、WKT からオブジェクトを作成することになっています。ただし、contains 関数は Polygon WKT でのみ機能し、円や折れ線では機能しないようです (この例ではひし形を描いています)。これらの例では、すべてのジオメトリに 0,0 が「含まれています」が、実際に期待した値が得られるのはポリゴンのみです。何が起こっているのか分かりますか?コードに何か欠けているのでしょうか、それとも DbGeometry の動作に関する理論が欠けているのでしょうか?

  DbGeometry point = DbGeometry.FromText("POINT (0 0)");

  DbGeometry circle = DbGeometry.FromText("CIRCULARSTRING(0 -1, 1 0, 0 1, -1 0, 0 -1)");
  Console.WriteLine(circle.Contains(point)); // returns false

  var diamond = DbGeometry.FromText("LINESTRING(0 -1, 1 0, 0 1, -1 0, 0 -1)");
  Console.WriteLine(diamond.Contains(point)); //returns false

  var polygon = DbGeometry.FromText("POLYGON((-1 -1, -1 1, 1 1, 1 -1, -1 -1))");
  Console.WriteLine(polygon.Contains(point)); //returns true
4

1 に答える 1

0

ポリゴンではなく文字列であるため、この例circleには含まれていません。point(ただし、例の円ストリングにPOINT(0 -1) 次のようなものがあります)。円環が閉じているからといって、多角形にはなりません。

あなたが望むのはCURVEPOLYGON(CIRCULARSTRING(0 -1, 1 0, 0 1, -1 0, 0 -1))、 を含むだと思います。POINT(0 0)

STCurveToLine最後に、すべての実装が曲線をサポートしているわけではないため、曲線セグメントを含むジオメトリ インスタンスの多角形近似を取得するためにを使用する必要がある場合があります。

于 2014-09-01T06:30:41.553 に答える