DbGeography.Intersects()能否可靠判断点是否在LineString线段上?
DbGeography中Intersects()判断点是否在线段上的可靠性
可以信任myPoint.Intersects(myLine)来判断点是否位于LineString线段的起止点之间(包括端点),但需要留意几个关键细节:
标准行为:DbGeography的
Intersects()遵循OGC空间关系规范,只要两个几何图形存在公共部分就返回true。当点严格落在LineString的线段(含两端点)上时,完全满足相交条件,方法会返回true。精度问题:由于浮点数计算的固有精度限制,如果点的坐标是通过复杂运算得到的,可能存在微小偏移,导致本该在线段上的点被误判。这种场景下,建议结合
Distance()方法,判断点到线段的距离是否小于一个极小阈值(如1e-9)来做补充验证。多段LineString的情况:如果LineString包含多个顶点(即由多段子线段组成),
Intersects()会判断点是否落在任意一段子线段上,这一行为符合预期。
示例代码
// WGS84坐标系(SRID 4326) var line = DbGeography.LineStringFromText("LINESTRING(0 0, 2 2)", 4326); var pointOnSegment = DbGeography.PointFromText("POINT(1 1)", 4326); var pointOffSegment = DbGeography.PointFromText("POINT(0 1)", 4326); Console.WriteLine(pointOnSegment.Intersects(line)); // 输出 True Console.WriteLine(pointOffSegment.Intersects(line)); // 输出 False
内容的提问来源于stack exchange,提问作者J.Manifold
相关产品推荐
相关产品推荐

