识别线串是进入还是退出多边形

时间:2016-08-14 06:48:56

标签: java geometry jts

如果我在JTS中有一个linestring(或者通常是某种开放折线)并且它的方向由它的起始点定义,那么是否有一些聪明的方法可以告诉交叉点是否有一个关闭的polygon是否linestring是'进入'多边形或退出多边形:

  • 在JRS中(我无法在文档中找到方法),只有行和闭合形状与intersection相交的坐标
  • 一些聪明的方法。我目前已经通过在linestring边缘的polygon沿着polygon测试一个非常小的距离并测试哪个是'in',哪个是'out'来完成它。如果<form method="post" action="/process.php"> 具有(不太可能的)非常尖锐的内部边缘,则可能会返回错误的结果。

2 个答案:

答案 0 :(得分:1)

检查component.jsx段的起始点是在多边形内部还是外部,以确定它是进入还是退出var documentRow = _dsACL.Documents.Where(o => o.ID == id).FirstOrDefault(); 。简单的代码示例:

linestring

此代码并未涵盖所有可能性。例如。如果单个段多次与多边形相交(输入+退出),则此示例中不包含此内容。在这种情况下,只需计算交叉点的数量,并在交点之间创建相应的线串数。

答案 1 :(得分:0)

回答我自己的问题 - 对于有类似问题的人。 我最后根据交叉点的数量编写了一些代码(因为我已经通过JTS获得了这些代码)。想法源于crossing number algorithmodd-even rule的内容。

'规则'(我认为没有例外,可能是错误的)是:

  1. 输入交叉点后面必须有一个出口,反之亦然。
  2. 如果从闭合多边形开始,则第一个交叉点是出口。
  3. 如果您不是从多边形开始,则第一个交叉点是输入。
  4. 作为伪代码,类似这样:

        Get intersection_points between polyline and closed polygon // using JTS.intersect()
        Sort intersection_points along chainage of polyline
        if polyline start_point in polygon // using JTS.contains()
            first intersect_point is an EXIT, next is an ENTER, EXIT, ENTER and so on alternating along chainage.
        else //start point not in polygon
            first intersect_point is an ENTER, next is an EXIT, ENTER, EXIT and so on along chainage.
    

    没有查看JTS intersectcontains方法的来源,所以可能会在我正在做的事情和那里的一些优化方面加倍。