/** * Generates a unique identifier tuple as a {@link String} for given {@link Area}s identifiers * * @param area * First {@link Area} instance * @param otherArea * Another {@link Area} instance * @return A unique identifier tuple in {@link String} */ private static String getIdentifierTuple(final Area area, final Area otherArea) { return area.getIdentifier() < otherArea.getIdentifier() ? String.format(UNIQUE_IDENTIFIER_FORMAT, area.getIdentifier(), otherArea.getIdentifier()) : String.format(UNIQUE_IDENTIFIER_FORMAT, otherArea.getIdentifier(), area.getIdentifier()); }
private DynamicArea newArea(final Area area) { return new DynamicArea(this, area.getIdentifier()); }
@Override public String toString() { return "[Area: id=" + this.getIdentifier() + ", polygon=" + this.asPolygon() + ", " + tagString() + "]"; }
public static CompleteArea from(final Area area) { return new CompleteArea(area.getIdentifier(), area.asPolygon(), area.getTags(), area.relations().stream().map(Relation::getIdentifier).collect(Collectors.toSet())); }
@Override public String toDiffViewFriendlyString() { final String relationsString = this.parentRelationsAsDiffViewFriendlyString(); return "[Area: id=" + this.getIdentifier() + ", polygon=" + this.asPolygon() + ", relations=(" + relationsString + "), " + tagString() + "]"; }
public static CompleteArea shallowFrom(final Area area) { return new CompleteArea(area.getIdentifier()).withInitialBounds(area.asPolygon().bounds()); }
@Override public LocationIterableProperties toGeoJsonBuildingBlock() { final Map<String, String> tags = getTags(); tags.put("identifier", String.valueOf(getIdentifier())); tags.put("osmIdentifier", String.valueOf(getOsmIdentifier())); tags.put("itemType", String.valueOf(getType())); final Optional<String> shardName = getAtlas().metaData().getShardName(); shardName.ifPresent(shard -> tags.put("shard", shard)); final StringList parentRelations = new StringList(); this.relations().forEach(relation -> { final RelationMember member = relation.members().get(getIdentifier(), getType()); parentRelations.add(member.getRelationIdentifier() + "-" + member.getRole()); }); if (!parentRelations.isEmpty()) { tags.put("parentRelations", parentRelations.join(", ")); } return new GeoJsonBuilder.LocationIterableProperties(getClosedGeometry(), tags); }
private void writeAreasToBuilder(final Atlas atlas, final ProtoAtlas.Builder protoAtlasBuilder) { long numberOfAreas = 0; for (final Area area : atlas.areas()) { final ProtoArea.Builder protoAreaBuilder = ProtoArea.newBuilder(); protoAreaBuilder.setId(area.getIdentifier()); final List<ProtoLocation> protoLocations = area.asPolygon().stream() .map(ProtoAtlasBuilder.PROTOLOCATION_CONVERTER::backwardConvert) .collect(Collectors.toList()); protoAreaBuilder.addAllShapePoints(protoLocations); final Map<String, String> tags = area.getTags(); protoAreaBuilder .addAllTags(ProtoAtlasBuilder.PROTOTAG_LIST_CONVERTER.backwardConvert(tags)); numberOfAreas++; protoAtlasBuilder.addAreas(protoAreaBuilder.build()); } protoAtlasBuilder.setNumberOfAreas(numberOfAreas); }
private AtlasPrimitiveArea convert(final Area area) { return new AtlasPrimitiveArea(area.getIdentifier(), area.asPolygon(), area.getTags()); }
this.markAsFlagged(area.getIdentifier());
private String convertArea(final Area item) { final StringList list = new StringList(); list.add(item.getIdentifier()); list.add(item.asPolygon().toCompactString()); list.add(convertTags(item)); return list.join(SEPARATOR); }
area -> area.getIdentifier() != aoi.getIdentifier() && !this.isFlagged(area.getIdentifier()) && area.intersects(aoiPolygon) && aoiFiltersTest(area))) .collectToSet(); flag.addInstruction(this.getLocalizedInstruction(0, object.getOsmIdentifier(), area.getOsmIdentifier())); this.markAsFlagged(area.getIdentifier()); hasOverlap = true;
edge -> builder.addEdge(edge.getIdentifier(), edge.asPolyLine(), edge.getTags())); atlas.areas().forEach( area -> builder.addArea(area.getIdentifier(), area.asPolygon(), area.getTags())); atlas.lines().forEach( line -> builder.addLine(line.getIdentifier(), line.asPolyLine(), line.getTags()));
@Test public void testFull() { final Atlas atlas = this.rule.getAtlas(); final Area source = atlas.area(27); final CompleteArea result = CompleteArea.from(source); Assert.assertEquals(source.getIdentifier(), result.getIdentifier()); Assert.assertEquals(source.bounds(), result.bounds()); Assert.assertEquals(source.asPolygon(), result.asPolygon()); Assert.assertEquals(source.getTags(), result.getTags()); Assert.assertEquals( source.relations().stream().map(Relation::getIdentifier) .collect(Collectors.toSet()), result.relations().stream().map(Relation::getIdentifier) .collect(Collectors.toSet())); }
final Predicate<Area> hasArea = item -> builder.peek().area(item.getIdentifier()) != null; final Predicate<Line> hasLine = item -> builder.peek().line(item.getIdentifier()) != null; final Predicate<Point> hasPoint = item -> builder.peek() area -> builder.addArea(area.getIdentifier(), area.asPolygon(), area.getTags()));
final Predicate<Area> hasArea = item -> builder.peek().area(item.getIdentifier()) != null; final Predicate<Line> hasLine = item -> builder.peek().line(item.getIdentifier()) != null; final Predicate<Point> hasPoint = item -> builder.peek() area -> builder.addArea(area.getIdentifier(), area.asPolygon(), area.getTags()));
final Area source = atlas.area(27); final CompleteArea result = CompleteArea.shallowFrom(source); Assert.assertEquals(source.getIdentifier(), result.getIdentifier()); Assert.assertEquals(source.bounds(), result.bounds()); result.withPolygon(Polygon.TEST_BUILDING);
/** * Add all points, areas and lines that pass the given matcher to the sub-atlas, using the given * {@link PackedAtlasBuilder}. * * @param matcher * The matcher to consider * @param builder * The {@link PackedAtlasBuilder} used to build the sub-atlas */ private void indexPointsAreasLines(final Predicate<AtlasEntity> matcher, final PackedAtlasBuilder builder) { for (final Point point : this.atlas.points(matcher::test)) { builder.addPoint(point.getIdentifier(), point.getLocation(), point.getTags()); } for (final Area area : this.atlas.areas(matcher::test)) { builder.addArea(area.getIdentifier(), area.asPolygon(), area.getTags()); } for (final Line line : this.atlas.lines(matcher::test)) { builder.addLine(line.getIdentifier(), line.asPolyLine(), line.getTags()); } } }
building.bounds(), area -> BuildingTag.isBuilding(area) && building.getIdentifier() != area.getIdentifier() && area.intersects(buildingPolygon));
protected void populateReferences(final Atlas atlas, final int atlasIndex) { for (final Node node : atlas.nodes()) { this.nodeIdentifierToAtlasIndices.add(node.getIdentifier(), atlasIndex); } for (final Edge edge : atlas.edges()) { this.edgeIdentifierToAtlasIndex.put(edge.getIdentifier(), atlasIndex); } for (final Area area : atlas.areas()) { this.areaIdentifierToAtlasIndices.add(area.getIdentifier(), atlasIndex); } for (final Line line : atlas.lines()) { this.lineIdentifierToAtlasIndices.add(line.getIdentifier(), atlasIndex); } for (final Point point : atlas.points()) { this.pointIdentifierToAtlasIndices.add(point.getIdentifier(), atlasIndex); } for (final Relation relation : atlas.relations()) { this.relationIdentifierToAtlasIndices.add(relation.getIdentifier(), atlasIndex); } }