@Override protected void parseRelations(List<Osmformat.Relation> osmRels) { if (exception == null) { try { for (Osmformat.Relation r : osmRels) { final Info info = r.getInfo(); if (!info.hasVersion()) discourageUpload = true; final Relation rel = new Relation(r.getId(), info.hasVersion() ? info.getVersion() : 1); setMetadata(rel, info); Map<String, String> keys = new HashMap<>(); for (int i = 0; i < r.getKeysCount(); i++) { keys.put(getStringById(r.getKeys(i)), getStringById(r.getVals(i))); } rel.setKeys(keys); long previousId = 0; // Member ids are delta coded Collection<RelationMemberData> members = new ArrayList<>(); for (int i = 0; i < r.getMemidsCount(); i++) { members.add( new RelationMemberData( getStringById(r.getRolesSid(i)), mapOsmType(r.getTypes(i)), previousId += r.getMemids(i))); } relations.put(rel.getUniqueId(), members); externalIdMap.put(rel.getPrimitiveId(), rel); } } catch (IllegalDataException e) { exception = e; } } if (discourageUpload) ds.setUploadDiscouraged(true); }