JTS/Geotools Корректное объединение/различие множественной геометрии

Проблема:

У меня есть файл формы, содержащий целевую область (желтый).

У меня есть файл формы, содержащий здания (зеленые).

Мне нужно белое пространство в желтой области.

фото: ://db.tt/kjjXZlQF

Мои решения:

  1. Получить все здания в этой области

    Filter inPolygon = CQL.toFilter("WITHIN(the_geom,"+wktwriter.write(targetarea) + ")");

    FeatureCollection<SimpleFeatureType, SimpleFeature> collection = featureSource.getFeatures(inPolygon);//this works

  2. Из каждого здания получите его геометрию и используйте разницу в целевой области.

    toCover = toCover.Difference(building);

ИЛИ второе решение:

Объединение каждого здания, а затем различие в конце.

ИЛИ третье решение:

Поместите их все в объединение вызовов GeomtryCollection, а затем используйте разницу

Каждое из этих решений дает мне что-то вроде следующей картинки

изображение: https://dl.dropboxusercontent.com/u/639458/stackoverflow/stfr2.png

Да будет ясно, что я испробовал несколько способов решения этой проблемы, используя разные способы ее создания/создания или использования. Даже с данным кодом на сайте ниже он не работал правильно.

http://docs.geotools.org/latest/userguide/library/jts/combine.html


person HappyProgrammerUser    schedule 03.05.2013    source источник
comment
вы можете получить больше ответов на gis.stackexchange.com   -  person Ian Turton    schedule 15.05.2013
comment
Вы пробовали звонить .buffer(0) по набору зданий?   -  person mdup    schedule 05.06.2013


Ответы (1)


В конце концов мои проблемы были решены, как @mdup предложил использовать

.buffer(0)
person HappyProgrammerUser    schedule 10.06.2016