Java JTS Polygon содержит еще один Polgyon

Я пытаюсь использовать JTS, чтобы определить, содержит ли один многоугольник другой многоугольник.

У меня есть ресурсы здесь. Как использовать синтаксис? это дает мне ошибки. Следующим шагом является применение содержимого. Если у кого-то есть опыт работы с JTS, было бы полезно.

https://gis.stackexchange.com/questions/368520/jts-geometry-contains-not-detecting-point-of-an-inner-polygon-on-out-of-outer

https://gis.stackexchange.com/questions/262751/how-to-determine-if-one-polygon-is-contained-in-another

https://locationtech.github.io/jts/javadoc/org/locationtech/jts/geom/Polygon.html

Polygon item1 = ((0 0, 1000 0, 1000 1000, 0 1000, 0 0))
Polygon item2 = ((500 500, 1000 500, 600 600, 500 600, 500 500))

введите здесь описание изображения

введите здесь описание изображения


person mattsmith5    schedule 24.03.2021    source источник


Ответы (1)


Вы не можете создать многоугольник просто так. JTS — довольно тяжелый фреймворк, поэтому вам нужно пройти полный путь.

  1. Все начинается с GeometryFactoryдокументов. Он отвечает за создание всех геометрий, это необходимо, потому что он учитывает несколько вещей, таких как, например, PrecisionModel.
  2. Нужно понимать иерархию геометрий, Polygon описывается линией - LineRig или LineString (разница выходит за рамки данного вопроса).
  3. Вы должны понимать, что каждая линия состоит из точек, которые могут быть описаны как Point, так и Coordinate. Итак, если вы хотите создать Polygon

Код будет выглядеть так:

 GeometryFactory factory = new GeometryFactory(); //default
 Coordinate[] coordinates1 = {
        new CoordinateXY(0,0),
        new CoordinateXY(1000,0),
        new CoordinateXY(1000, 1000),
        new CoordinateXY(0, 1000),
        new CoordinateXY(0, 0)
 };
 Coordinate[] coordinates2 = {
        new CoordinateXY(500,500),
        new CoordinateXY(1000,500),
        new CoordinateXY(600, 600),
        new CoordinateXY(500, 600),
        new CoordinateXY(500, 500)
 };
 LinearRing linearRing1 = factory.createLinearRing(coordinates1);
 LinearRing linearRing2 = factory.createLinearRing(coordinates2);
 Polygon polygon1 = factory.createPolygon(linearRing1);
 Polygon polygon2 = factory.createPolygon(linearRing2);
 assertTrue(polygon1.contains(polygon2));
person NeatNerd    schedule 24.03.2021