我尝试了以下代码,其行为与我的预期不同。 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
答案 0 :(得分:0)
示例circle
不包含point
,因为它是字符串而不是多边形。 (但是,POINT(0 -1)
之类的内容是示例circletring上的。仅仅因为圆弧线圈关闭,不会使它成为多边形。
我认为你想要的是CURVEPOLYGON(CIRCULARSTRING(0 -1, 1 0, 0 1, -1 0, 0 -1))
, 包含POINT(0 0)
。
最后,并非所有实现都支持曲线,因此您可能需要使用STCurveToLine
来获得包含曲线段的几何实例的多边形近似。