【问题标题】:DbGeometry Contains() works only for Polygon WKTDbGeometry Contains() 仅适用于多边形 WKT
【发布时间】:2014-08-26 04:46:29
【问题描述】:

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

【问题讨论】:

    标签: c# wkt


    【解决方案1】:

    示例circle 不包含point,因为它是字符串而不是多边形。 (然而,类似POINT(0 -1) is 在示例圆串上)。仅仅因为圆串是闭合的,并不能使它成为一个多边形。

    我想你想要的是CURVEPOLYGON(CIRCULARSTRING(0 -1, 1 0, 0 1, -1 0, 0 -1)),它确实包含POINT(0 0)

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

    【讨论】:

    • 谢谢。虽然我目前正在使用带有 STBuffer 的点来创建一个圆(作为 DbGeometry\DbGeography 对象),然后我与我的点相交。
    猜你喜欢
    • 2012-12-07
    • 1970-01-01
    • 1970-01-01
    • 2016-05-15
    • 2020-12-26
    • 2020-01-10
    • 2017-12-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多