DbGeometry Contains()仅适用于Polygon WKT

时间:2014-08-26 04:46:29

标签: c# wkt

我尝试了以下代码,其行为与我的预期不同。 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

1 个答案:

答案 0 :(得分:0)

示例circle不包含point,因为它是字符串而不是多边形。 (但是,POINT(0 -1) 之类的内容是示例circletring上的。仅仅因为圆弧线圈关闭,不会使它成为多边形。

我认为你想要的是CURVEPOLYGON(CIRCULARSTRING(0 -1, 1 0, 0 1, -1 0, 0 -1)) 包含POINT(0 0)

最后,并非所有实现都支持曲线,因此您可能需要使用STCurveToLine来获得包含曲线段的几何实例的多边形近似。