Как только я загрузил в память объект Atlas, что лучше всего? как посчитать общую площадь озера? Выполнение простого поиска по тегам находит все простые озера Area, но мне не хватает всех озер на основе type = multipolygon Relations, которые построены на "внешних" путях, которые, соединенные вместе, образуют полное озеро.

0
matthieun 8 Ноя 2018 в 02:43

1 ответ

Лучший ответ

Атлас поставляется с ComplexEntity концепция, которая позволяет пользователю создавать объекты более высокого уровня на основе определенных концепций. Объект ComplexWaterEntity должен соответствовать этой потребности:

Atlas atlas;
Iterable<ComplexWaterEntity> waterEntities =
    new ComplexWaterEntityFinder().find(atlas);

// Get all water bodies and keep lakes only.
// This will include the multipolygon ones.
Iterable<ComplexWaterBody> lakes = Iterables.stream(waterEntities)
    .filter(entity -> WaterType.LAKE == entity.getWaterType())
    .map(entity -> (ComplexWaterBody) entity);

// Add all the surface areas
Surface result = Surface.MINIMUM;
for (ComplexWaterBody lake : lakes)
{
    result = result.add(lake.getGeometry().getSurface()));
}
System.out.println(result.asKilometerSquared());
0
matthieun 7 Ноя 2018 в 23:43