Разделить многоугольник с помощью LineString в JTS - PullRequest
1 голос
/ 09 ноября 2010

У меня есть многоугольник и отрезок, у которого есть конечные точки на двух сторонах многоугольника.Какой самый простой способ разбить многоугольник на два многоугольника.(Я использую пакет jts).

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

Ответы [ 2 ]

2 голосов
/ 07 июня 2011

Поздний ответ, но, возможно, кто-то тоже хочет это знать.

Предполагается, что у вас есть следующая геометрия:
GEOMETRYCOLLECTION (POLYGON ((100 150, 100 340, 350 340, 350 150, 100 150)), LINESTRING (220 340, 220 150)

Вы можете попробовать объединить линию этой геометрической коллекции, результат должен быть:
MULTILINESTRING ((220 340, 220 150), (100 150, 100 340, 350 340, 350 150, 100 150))

Отсюда унарный союз, результат:
MULTILINESTRING ((220 340, 220 150), (100 150, 100 340, 220 340), (220 340, 350 340, 350 150, 220 150), (220 150, 100 150))

Наконец, вы можете использовать полигонизатор и получить два полигона:
GEOMETRYCOLLECTION (POLYGON ((220 150, 220 340, 350 340, 350 150, 220 150)), ПОЛИГОН ((100 150, 100 340, 220 340, 220 150, 100 150)))

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

Проверено в JTS testbuilder

1 голос
/ 21 апреля 2011

Я сделал аналогичные вещи, сделав линейный сегмент частью очень большого многоугольника, а затем пересек два многоугольника. Вы можете создать большой многоугольник, добавив сегменты к каждому концу сегмента, пока не окажетесь за границами многоугольника, затем добавьте два сегмента под углом 90 градусов, которые выходят за границы исходного многоугольника, а затем свяжите последние два сегмента с помощью последний сегмент, чтобы создать большой многоугольник, который разделяет исходный полигон вдоль исходного сегмента и окружает остальную часть исходного многоугольника. Это скорее боль, но работает. Jim

...