private void addRelation(final PackedAtlasBuilder builder, final Relation relation) { final RelationBean bean = new RelationBean(); relation.members().forEach(member -> bean.addItem(member.getEntity().getIdentifier(), member.getRole(), member.getEntity().getType())); builder.addRelation(relation.getIdentifier(), relation.osmRelationIdentifier(), bean, relation.getTags()); } }
@Override protected boolean isValid(final Relation item, final Rectangle bounds) { return item.intersects(bounds); }
public static CompleteRelation from(final Relation relation) { return new CompleteRelation(relation.getIdentifier(), relation.getTags(), relation.bounds(), relation.members().asBean(), relation.allRelationsWithSameOsmIdentifier().stream().map(Relation::getIdentifier) .collect(Collectors.toList()), relation.allKnownOsmMembers().asBean(), relation.osmRelationIdentifier(), relation.relations().stream().map(Relation::getIdentifier) .collect(Collectors.toSet())); }
@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())); tags.put("relation", this.toSimpleString()); final Optional<String> shardName = getAtlas().metaData().getShardName(); shardName.ifPresent(shard -> tags.put("shard", shard)); return new GeoJsonBuilder.LocationIterableProperties(bounds().center(), tags); }
public static CompleteRelation shallowFrom(final Relation relation) { return new CompleteRelation(relation.getIdentifier()).withInitialBounds(relation.bounds()); }
@Test public void testFull() { final Atlas atlas = this.rule.getAtlas(); final Relation source = atlas.relation(22); final CompleteRelation result = CompleteRelation.from(source); Assert.assertEquals(source.getIdentifier(), result.getIdentifier()); Assert.assertEquals(source.bounds(), result.bounds()); Assert.assertEquals(source.members().asBean(), result.members().asBean()); Assert.assertEquals(source.allKnownOsmMembers().asBean(), result.allKnownOsmMembers().asBean()); Assert.assertEquals(source.osmRelationIdentifier(), result.osmRelationIdentifier()); Assert.assertEquals( source.relations().stream().map(Relation::getIdentifier) .collect(Collectors.toSet()), result.relations().stream().map(Relation::getIdentifier) .collect(Collectors.toSet())); }
private static List<LocationIterableProperties> processRelationForGeoJson( final Relation relation, final Map<String, String> parentTags) { final Map<String, String> relationTags = relation.getTags(); final Map<String, String> modifiedRelationTags = new HashMap<>(parentTags); for (final String key : relationTags.keySet()) { modifiedRelationTags.put("[REL_ID:" + relation.getIdentifier() + "]" + key, relationTags.get(key)); } final List<LocationIterableProperties> result = new ArrayList<>(); for (final RelationMember member : relation.members()) { if (member.getEntity() instanceof Relation) { final Relation subRelation = (Relation) member.getEntity(); result.addAll(processRelationForGeoJson(subRelation, modifiedRelationTags)); } else { final AtlasItem item = (AtlasItem) member.getEntity(); final Map<String, String> modifiedTags = item.getTags(); modifiedTags.putAll(modifiedRelationTags); result.add(new LocationIterableProperties(item.getRawGeometry(), modifiedTags)); } } return result; }
protected RelationMemberList getOldMembers() { return this.relation.members(); }
@Override protected Long compress(final Relation item) { return item.getIdentifier(); }
/** * Gets all of the polygons contained in this object, if this object has any. * * @param object * any atlas object * @return A singleton stream if object is an Area, a stream if object is a Multipolygon, or an * empty stream if object is neither */ private Stream<Polygon> getPolygons(final AtlasObject object) { if (object instanceof Area) { return Stream.of(((Area) object).asPolygon()); } else if (((Relation) object).isMultiPolygon()) { return ((Relation) object).members().stream().map(this::toPolygon) .flatMap(optPoly -> optPoly.map(Stream::of).orElse(Stream.empty())); } return Stream.empty(); }
private AtlasPrimitiveRelation convert(final Relation relation) { final RelationBean bean = new RelationBean(); for (final RelationMember member : relation.members()) { bean.addItem(member.getEntity().getIdentifier(), member.getRole(), member.getEntity().getType()); } return new AtlasPrimitiveRelation(relation.getIdentifier(), relation.getIdentifier(), bean, relation.getTags(), relation.bounds()); }
thatReference, entity -> ((Relation) entity).members() == null ? null : ((Relation) entity).members().asBean(), Optional.of(relationBeanMerger)); final Rectangle mergedBounds = Rectangle.forLocated(thisReference, thatReference); final Long mergedOsmRelationIdentifier = mergedMember("osmRelationIdentifier", thisReference, thatReference, entity -> ((Relation) entity).getOsmIdentifier(), Optional.empty()); final Set<Long> mergedAllRelationsWithSameOsmIdentifierSet = mergedMember( "allRelationsWithSameOsmIdentifier", thisReference, thatReference, atlasEntity -> ((Relation) atlasEntity).allRelationsWithSameOsmIdentifier() == null ? null : ((Relation) atlasEntity).allRelationsWithSameOsmIdentifier().stream() .map(Relation::getIdentifier).collect(Collectors.toSet()), Optional.of(directReferenceMerger)); final RelationBean mergedAllKnownMembers = mergedMember("allKnownOsmMembers", thisReference, thatReference, entity -> ((Relation) entity).allKnownOsmMembers() == null ? null : ((Relation) entity).allKnownOsmMembers().asBean(), Optional.of(relationBeanMerger));
final Set<AtlasItem> viaMembers = relation.members().stream() .filter(member -> member.getRole().equals(RelationTypeTag.RESTRICTION_ROLE_VIA)) .filter(member -> member.getEntity() instanceof Node relation.getOsmIdentifier(), viaNodeCount); relation.getIdentifier()); relation.members().stream().filter( member -> member.getRole().equals(RelationTypeTag.RESTRICTION_ROLE_TO)) .forEach(member -> temporaryToMembers.add((AtlasItem) member.getEntity())); relation.members().stream().filter(member -> member.getRole() .equals(RelationTypeTag.RESTRICTION_ROLE_FROM) && member.getEntity() instanceof Edge relation.members().stream().filter(member -> member.getRole() .equals(RelationTypeTag.RESTRICTION_ROLE_TO) && member.getEntity() instanceof Edge
Assert.assertEquals(/* 4 */3, relation1.members().size()); Assert.assertEquals(5, relation2.members().size()); final RelationMemberList members1 = relation1.members(); final RelationMemberList members2 = relation2.members(); for (final Relation relation : this.atlas.node(1234).relations()) if (relation.getIdentifier() == 1) if (relation.getIdentifier() == 2) Assert.assertEquals(5, relation2.allKnownOsmMembers().size());
@Override public JsonObject asGeoJsonGeometry() final JsonObject properties = geoJsonProperties(); exception.getClass().getSimpleName(), exception.getMessage()); properties.addProperty("exception", message); logger.warn("Unable to recreate multipolygon for relation {}.", getIdentifier(), message); geometry = GeoJsonUtils.boundsToPolygonGeometry(bounds()); geometry = GeoJsonUtils.boundsToPolygonGeometry(bounds()); addMembersToProperties(properties);
@Override protected Optional<CheckFlag> flag(final AtlasObject object) { final Relation relation = (Relation) object; final RelationMemberList members = relation.members(); // If the number of members in the relation is 1 if (members.size() == 1) { if (members.get(0).getEntity().getType().equals(ItemType.RELATION)) { return Optional.of(createFlag(getRelationMembers((Relation) object), this.getLocalizedInstruction(2, relation.getOsmIdentifier(), members.get(0).getEntity().getOsmIdentifier()))); } // If the relation is a multi-polygon, if (relation.isMultiPolygon()) { return Optional.of(createFlag(getRelationMembers((Relation) object), this.getLocalizedInstruction(1, relation.getOsmIdentifier()))); } return Optional.of(createFlag(getRelationMembers((Relation) object), this.getLocalizedInstruction(0, relation.getOsmIdentifier()))); } return Optional.empty(); }
if (relation.members().size() > 0 && relation.bounds() != null) final long osmIdentifier = relation.osmRelationIdentifier(); this.relationOsmIdentifierToRelationIdentifiers.add(osmIdentifier, identifier); this.relationIdentifierToRelationOsmIdentifier.put(identifier, osmIdentifier);
for (final RelationMember member : relation.allKnownOsmMembers()) for (final RelationMember member : relation.members())
protected void validateRelationsLinked() { for (final AtlasEntity entity : this.atlas.entities()) { for (final Relation relation : entity.relations()) { if (!relation.members().asBean() .getItemFor(entity.getIdentifier(), entity.getType()).isPresent()) { throw new CoreException( "Entity {} {} lists parent relation {} which does not have it as a member.", entity.getType(), entity.getIdentifier(), relation.getIdentifier()); } } } }
@Override public Set<Relation> relations() { return subRelation().relations().stream() .map(relation -> new DynamicRelation(dynamicAtlas(), relation.getIdentifier())) .collect(Collectors.toSet()); }