Как создать полигон из точки (Spatial4j) - PullRequest
1 голос
/ 20 марта 2019

Я хочу сделать некоторые геометрические вычисления в Java и обнаружил, что Spatial4j должен соответствовать моим потребностям.

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

Я думаю, что мне нужно создать многоугольник из ряда точек.

С этой целью я проверил этот код:

Point point1 = shapeFactory.pointXY(0, 0);
Point point2 = shapeFactory.pointXY(5, 1);
Point point3 = shapeFactory.pointXY(3, 3);
Point point4 = shapeFactory.pointXY(0, 1);
List<Point> points = new ArrayList<>();
points.addAll(Arrays.asList(point1, point2, point3, point4));

Итак, у меня есть свои очки сейчас.Как мне сделать многоугольник (или, если уж на то пошло, любую форму) из этих точек?

Я бы подумал, что shapeFactory.polygon() создаст мне многоугольник, но это бросит мне UnsupportedOperationException.Любая помощь?

1 Ответ

1 голос
/ 20 марта 2019

Хорошо, кажется, что Spatial4j не соединяет точки, поэтому он не является заполненной формой.Вместо этого я опирался на реализацию JTS в Spatial4j, и это помогло.(Многоугольник Spatial4j не реализован).

JtsSpatialContextFactory jtsSpatialContextFactory = new JtsSpatialContextFactory();
JtsSpatialContext jtsSpatialContext = jtsSpatialContextFactory.newSpatialContext();
JtsShapeFactory jtsShapeFactory = jtsSpatialContext.getShapeFactory();
ShapeFactory.PolygonBuilder polygonBuilder = jtsShapeFactory.polygon();
// note due to it being a builder one needs to chain the points.
Shape shape1 = polygonBuilder.pointXY(4, 0).pointXY(3, 3).pointXY(1, 4).pointXY(0, 0).pointXY(4, 0).build(); 

Теперь, например, shape.getArea() возвращает площадь поверхности.Можно также создать Geometry из Shape, выполнив jtsShapeFactory.getGeometryFrom(shape), что затем вернет Geometry.

Примечание. Будьте внимательны, выполнив polygonBuilder.pointXY() даже после вызова build().Он все равно добавит эти пункты к тому, что было приковано к строителю до build.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...