Если у меня два MULTILINESTRING:
g1: MULTILINESTRING ((1 1, 1 4), (3 1, 3 5), (0 1, 4 5))
g2: MULTILINESTRING ((0 2, 4 2), (0 3, 4 3), (0 3, 1 4))
Я хочу получить следующие пересечения для каждого из следующих случаев:
A) между g1 и g2
B) между сегментами g1
Я получил только первый случай со следующим кодом:
public class Principal {
public static void main(String[] args) throws ParseException {
LineString L1 = new GeometryFactory().createLineString(new Coordinate[]{new Coordinate(1, 1),new Coordinate(1, 4)});
LineString L2 = new GeometryFactory().createLineString(new Coordinate[]{new Coordinate(3, 1),new Coordinate(3, 5)});
LineString L3 = new GeometryFactory().createLineString(new Coordinate[]{new Coordinate(0, 1),new Coordinate(4, 5)});
Geometry g1 = new GeometryFactory().createMultiLineString(new LineString[]{L1, L2, L3});
System.out.println("g1: " + g1);
LineString L4 = new GeometryFactory().createLineString(new Coordinate[]{new Coordinate(0, 2),new Coordinate(4, 2)});
LineString L5 = new GeometryFactory().createLineString(new Coordinate[]{new Coordinate(0, 3),new Coordinate(4, 3)});
LineString L6 = new GeometryFactory().createLineString(new Coordinate[]{new Coordinate(0, 3),new Coordinate(1, 4)});
Geometry g2 = new GeometryFactory().createMultiLineString(new LineString[]{L4, L5, L6});
System.out.println("g2: " + g2);
System.out.println(g1.intersection(g2));
}
}
Output:
g1: MULTILINESTRING ((1 1, 1 2), (1 2, 1 4), (3 1, 3 4), (0 1, 1 2), (1 2, 3 4))
g2: MULTILINESTRING ((0 2, 4 2), (0 3, 4 3), (0 3, 1 4))
MULTIPOINT ((1 2), (1 3), (1 4), (2 3), (3 2), (3 3))
Но я не знаю, как найти пересечение между сегментами g1 (результат, я надеюсь, is: MULTIPOINT ((1 2), (3 4)).
Я прочитал некоторую документацию и, насколько я понимаю, для многих сегментов целесообразно использовать класс SimpleMCSweepLineIntersector, поскольку он позволяет найти все пересечения между одним или двумя наборами ребер (это именно то, что я пытаюсь).
Проблема в том, что я не знаю, как написать необходимый код, чтобы иметь возможность использовать этот класс и он возвращает мне через консоль пересечение, как для случая A, так и для B.
Не могли бы вы сказать мне, как написать код для использования этого класса в обоих случаях?