В JTS, когда я буду делать geometry.buffer (1) .buffer (-1), будет ли полученная геометрия эквивалентна исходной? - PullRequest
1 голос
/ 18 марта 2010

У меня были проблемы при пересечении двух геометрий, возникла исключительная ситуация TopologyException, вероятно, из-за ошибки округления во время операции, затем я прочитал это исправление и попробовал buffer(0) на обеих входных геометриях, но все еще без успех. Затем я попытался geo.buffer(1).buffer(-1), и это сработало.

Будут ли эти геометрии эквивалентны исходным?

Ответы [ 2 ]

4 голосов
/ 18 марта 2010

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

Предположим, у вас есть две фигуры:

 XXX      XXX
 X X      XXX
 XXX      XXX

Насколько я понимаю, buffer(1) в обоих случаях приведет примерно к следующему:

XXXXX    XXXXX
XXXXX    XXXXX
XXXXX    XXXXX
XXXXX    XXXXX
XXXXX    XXXXX

Теперь buffer(-1) не сможет получить два разных результата из этих двух фигур.

Эффективно операция buffer() теряет информацию, поэтому ее нельзя отменить без повторного добавления этой информации откуда-либо еще.

3 голосов
/ 18 марта 2010

Я не думаю, что эти геометрии будут одинаковыми. По умолчанию буферизация функции добавляет вершины в исходную конфигурацию, и нет гарантии, что эти вершины будут удалены.

Попробуйте создать очень маленький буфер, например, a.buffer (0,00001) (1/1000 мм, если координаты в метрических системах).

В PostGIS некоторые проблемы устраняются путем этого.

...