public synchronized Long joinRelations(String key, Long id1, RelationOsm relation1, Long id2, RelationOsm relation2){

		List <Long> ids = new ArrayList<Long>();
		List <String> types = new ArrayList<String>();
		List <String> roles = new ArrayList<String>();
		List <String> shapes = new ArrayList<String>();

		int pos = 0;

		for(Long waysId1 : relation1.getIds()){
				// Comprobar si la via pertenece a las dos relaciones, en ese caso desecharla
				if (!relation2.getIds().contains(waysId1)){
					
					// Si no son la misma via entonces comprobar si es una via que conecta con otra de la
					// otra relacion
		
					ids.add(waysId1);
					types.add(relation1.getTypes().get(pos));
					roles.add(relation1.getRoles().get(pos));
				}
			pos++;
		}
		
		pos = 0;
		
		for(Long waysId2 : relation2.getIds()){
			// Comprobar si la via pertenece a las dos relaciones, en ese caso desecharla
			if (!relation1.getIds().contains(waysId2)){
				
				// Si no son la misma via entonces comprobar si es una via que conecta con otra de la
				// otra relacion
	
				ids.add(waysId2);
				types.add(relation2.getTypes().get(pos));
				roles.add(relation2.getRoles().get(pos));
			}
		pos++;
	}

		if(!ids.isEmpty()){
		
		for(String shapeID : relation1.getShapes())
			if(!shapes.contains(shapeID))
				shapes.add(shapeID);
		
		for(String shapeID : relation2.getShapes())
			if(!shapes.contains(shapeID))
				shapes.add(shapeID);
		
		Long newRelationID = generateRelationId(key, ids, types, roles, relation1.getTags(), shapes);
		
		return newRelationID;
		}
		
		return null;
	}