for (final RelationMember thisMember : this.members) final RelationMember thatMember = that.get(index++); if (thisMember == null && thatMember != null || thisMember != null && thatMember == null)
@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); }
@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)); if (this instanceof Edge) { tags.put("startNode", String.valueOf(((Edge) this).start().getIdentifier())); tags.put("endNode", String.valueOf(((Edge) this).end().getIdentifier())); } 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(getRawGeometry(), tags); }
/** * @param relation * The {@link Relation} for which to create seeds for * @return an array of identifiers corresponding to the first unused identifier for each * relation member in the given Relation */ private long[] createIdentifierSeeds(final Relation relation) { // Assume any member can be split, so create a seed for each one final long[] seeds = new long[relation.members().size()]; for (int seedIndex = 0; seedIndex < seeds.length; seedIndex++) { long identifier = relation.members().get(seedIndex).getEntity().getIdentifier(); final long originalAtlasIdentifier = new ReverseIdentifierFactory() .getFirstAtlasIdentifier(identifier); final Set<Long> createdWaysForIdentifier = this.slicedPointAndLineChanges .getDeletedToCreatedLineMapping().get(originalAtlasIdentifier); if (createdWaysForIdentifier != null) { // Grab the first Atlas identifier for this entity and increment at offset identifier = identifier + createdWaysForIdentifier.size() * CountrySlicingIdentifierFactory.IDENTIFIER_SCALE; } seeds[seedIndex] = identifier; } return seeds; }
for (int j = 0; j < beforeMembers.size(); j++) final RelationMember beforeMember = beforeMembers.get(j); if (beforeMember.getEntity().getIdentifier() == beforeEntity.getIdentifier()) final RelationMember afterMember = afterMembers.get(j); if (afterMember.getEntity().getIdentifier() == beforeEntity.getIdentifier()) if (!beforeMembers.get(beforeIndex).getRole() .equals(afterMembers.get(afterIndex).getRole())) if (beforeMembers.get(beforeIndex).getEntity().getType() != afterMembers .get(afterIndex).getEntity().getType())
for (int j = 0; j < baseMembers.size(); j++) final RelationMember baseMember = baseMembers.get(j); if (baseMember.getEntity().getIdentifier() == baseEntity.getIdentifier()) final RelationMember alterMember = alterMembers.get(j); if (alterMember.getEntity().getIdentifier() == baseEntity.getIdentifier()) if (!baseMembers.get(baseIndex).getRole() .equals(alterMembers.get(alterIndex).getRole())) if (baseMembers.get(baseIndex).getEntity().getType() != alterMembers.get(alterIndex) .getEntity().getType())
@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(); }
this.relations().forEach(relation -> final RelationMember member = relation.members().get(getIdentifier(), getType()); parentRelations.add(member.getRelationIdentifier() + "-" + member.getRole()); });
@Test public void testSlicedRelation() { final Relation relation1 = this.multi.relation(1L); final RelationMemberList members = relation1.members(); Assert.assertEquals(4, members.size()); for (int i = 0; i < members.size(); i++) { Assert.assertTrue(members.get(i) != null); } // Members are ordered by entity type and ascending member identifier Assert.assertEquals(4, members.get(0).getEntity().getIdentifier()); Assert.assertEquals(1234, members.get(1).getEntity().getIdentifier()); Assert.assertEquals(-9, members.get(2).getEntity().getIdentifier()); Assert.assertEquals(9, members.get(3).getEntity().getIdentifier()); final Relation relation2 = this.multi.relation(2L); final RelationMemberList allMembers2 = relation2.allKnownOsmMembers(); final Relation relation3 = this.multi.relation(3L); final RelationMemberList allMembers3 = relation3.allKnownOsmMembers(); Assert.assertEquals(8, allMembers2.size()); Assert.assertEquals(8, allMembers3.size()); }
final RelationMemberList members2 = relation2.members(); Assert.assertEquals(-9, members1.get(1).getEntity().getIdentifier()); Assert.assertEquals(5, members2.get(3).getEntity().getIdentifier()); Assert.assertTrue(members2.get(3).getEntity() instanceof Point); Assert.assertEquals("area", members2.get(1).getRole());