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 回答