Объединить геометрии быстрее в JTS?

Я написал код для объединения (объединения) геометрий. Я завернул его в сборщик потоков Java8. Внутри него просто используется Geometry#union для объединения геометрий:

geometries[0] = geometries[0].union(geometry);

К сожалению, это работает довольно медленно.

Можно ли сделать это быстрее, используя подготовленную геометрию или другие хаки?

ОБНОВИТЬ

Геометрии такие:

и они очень разных масштабов.

2 ответа

Решение

Рассмотрите возможность использования унарного объединения. См. http://bjornharrtell.github.io/jsts/1.2.1/apidocs/org/locationtech/jts/operation/union/UnaryUnionOp.html

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

Унарный союз использует пространственный индекс для кластеризации геометрий и их иерархического слияния, что обеспечивает лучшую производительность. К сожалению, это может плохо работать с последовательной природой потоков Java.

PreparedGeometry не предлагает никакого ускорения для операций наложения, таких как объединение.

Другие вопросы по тегам