private static RoofFrontDirection findDirection(OsmPrimitive pWay, Perspective pPerspective) { Vector2d direction = null; boolean soft = false; direction = findDirectionByRelation(pWay, pPerspective); if (direction != null) { return new RoofFrontDirection(direction, false); } if (pWay instanceof Way) { direction = findDirectionByPoints((Way) pWay, pPerspective); if (direction != null) { return new RoofFrontDirection(direction, soft); } } else { // TODO } return findDirectionByDirectionTag(pWay); }
/** * Parse roof model from way. * * @param primitive * @param perspective * @return roof model */ public static RoofModel parse(OsmPrimitive primitive, Perspective perspective) { if (hasRoofLines(primitive)) { return RoofLinesParser.parse(primitive, perspective); } return parseDormerRoof(primitive, perspective); }
/** * Find roof direction saved in tag. * * @param pWay * way * @return roof direction */ private static RoofFrontDirection findDirectionByDirectionTag(OsmPrimitive pWay) { RoofFrontDirection roofDirection = parseDirectionStr(OsmAttributeKeys.ROOF_DIRECTION.primitiveValue(pWay), Ortagonal.NONE); if (roofDirection != null) { return roofDirection; } roofDirection = parseDirectionStr(OsmAttributeKeys.DIRECTION.primitiveValue(pWay), Ortagonal.NONE); if (roofDirection != null) { return roofDirection; } roofDirection = parseDirectionStr(OsmAttributeKeys.ROOF_RIDGE_DIRECTION.primitiveValue(pWay), Ortagonal.LEFT); if (roofDirection != null) { return roofDirection; } roofDirection = parseDirectionStr(OsmAttributeKeys.ROOF_SLOPE_DIRECTION.primitiveValue(pWay), Ortagonal.NONE); return roofDirection; }
String type = parseRoofShape(primitive); roof.setDirection(findDirection(primitive, perspective)); RoofOrientation parseOrientation = RoofParserUtil.parseOrientation(keys);
private static List<BuildingPart> parseBuildingPart(Way primitive, Perspective pPerspective) { if (!primitive.isClosed()) { throw new RuntimeException("Way is not closed: " + primitive); } OsmPrimitive p = primitive; BuildingPart bp = parseBuildingPartAttributes(p); bp.setWall(parseWall((Way) p, pPerspective)); bp.setInlineWalls(null); bp.setRoof(RoofParser.parse(primitive, pPerspective)); List<BuildingPart> bpList = new ArrayList<BuildingPart>(); bpList.add(bp); bpList.addAll(parseRelationClone(primitive, bp)); return bpList; }
private static boolean hasRoofLines(OsmPrimitive primitive) { if (!StringUtil.isBlankOrNull(parseRoofShape(primitive))) { return false; } // not tagged flat roofs should be resolved as regular flat roofs! return RoofLinesParser.hasRoofLines(primitive); }
/** * Parse building model from multipolygon. * * @param pRelation * @param pPerspective * @return */ static List<BuildingPart> parseBuildingMultiPolygonPart(Relation pRelation, Perspective pPerspective) { List<AreaWithHoles> waysPolygon = PolygonWithHolesUtil.findAreaWithHoles(pRelation); List<BuildingPart> ret = new ArrayList<BuildingPart>(); for (AreaWithHoles waysPolygon2 : waysPolygon) { BuildingPart bp = parseBuildingPartAttributes(pRelation); // DormerRoofModel roofClosedWay = RoofParser.parse(p, // pPerspective); // bp.setRoof(marge(roof, roofClosedWay)); bp.setRoof(RoofParser.parse(pRelation, pPerspective)); bp.setWall(parseWall(waysPolygon2.getOuter(), pPerspective)); if (waysPolygon2.getInner() != null) { List<Wall> innerWall = new ArrayList<Wall>(); for (List<ReversableWay> rwList : waysPolygon2.getInner()) { innerWall.add(parseWall(rwList, pPerspective)); } bp.setInlineWalls(innerWall); } ret.add(bp); } return ret; }