Геометрия союзов быстрее в JTS?

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

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

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

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

ОБНОВЛЕНИЕ

Геометрия выглядит следующим образом: введите здесь описание изображения

и они очень разного масштаба.


person Dims    schedule 01.06.2017    source источник
comment
Можете ли вы предоставить некоторые данные? насколько медленно с каким количеством геометрий?   -  person Yu Jiaao    schedule 01.06.2017
comment
Всего у меня около 8000 геометрий, но я строю сложное дерево, чтобы соединить их иерархически (это регионы на карте, блоки, области переписи и т. д., и я хочу обрабатывать разные масштабы), и для объединения требуется примерно 3 геометрии в секунду. Итак, мне потребуется 40+ минут, чтобы обработать их все.   -  person Dims    schedule 01.06.2017


Ответы (2)


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

person Ohlsen1980    schedule 01.06.2017
comment
Я не часто использовал JTS, но, возможно, есть функция пространственного индексирования. Вы тестировали это? - person Ohlsen1980; 01.06.2017
comment
Может ли это помочь СОЮЗУ? - person Dims; 01.06.2017
comment
Это должно помочь вычислить любые пространственные операции, например. пересечение, пересечение... - person Ohlsen1980; 01.06.2017
comment
У меня была та же проблема, и с использованием UnaryUnionOp операция выполняется как минимум в 7 раз быстрее. Спасибо @Ohlsen1980 - person Jonatas Emidio; 11.10.2018

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

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

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

person dr_jts    schedule 17.12.2017