Объединить геометрии быстрее в 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 не предлагает никакого ускорения для операций наложения, таких как объединение.