Как рассчитать общую площадь озера в Атласе - PullRequest
0 голосов
/ 08 ноября 2018

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

1 Ответ

0 голосов
/ 08 ноября 2018

Atlas поставляется с концепцией 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());
...