Lewis Hamilton took his fourth win of the year at the Circuit to Catalunya, holding off a late charge from his teammate Rosberg.
As ever, the Mercedes pilots were in a class of their own, while Australian Red Bull driver Daniel Ricciardo came home a fine third.
Sebastian Vettel salvaged fourth after a weekend full of technical drama.
PRACTICE AND QUALIFYING
Practice was smooth sailing for Mercedes, with Hamilton taking the honours two sessions to Rosberg's one.
Vettel's dramas began with a failure to to really get going on Friday and then a dead gearbox in qualifying leaving him fifteenth after a penalty.
The Mercedes pair battled it out for pole, with Rosberg heading in Q1 and Q2. To the German's surprise, Hamilton bounced back to take P1 in the final session.
Ricciardo took best of the rest with third, teammate Vettel causing one of two red flags in the session.
The first red flag was a result of Pastor Maldonado crashing hard into the wall at turn three. The Lotus driver blamed the tyres while Grosjean planted the improving Lotus in fifth place.
Lewis Hamilton got a good start, as did Romain Grosjean who had a heart-stopping lock-up into turn one. This allowed Ricciardo hang on to fourth after letting Valtteri Bottas slip through.
The McLarens fell back, Magnussen running wide and then getting clouted by Vettel at the final chicane.
The Ferraris jostled for position, with Raikkonen staying ahead.
Pastor Maldonado's awful weekend continued after he mounted a kerb and walloped Marcus Ericsson's Caterham. He copped a five second penalty.
Daniel Ricciardo wasted no time in attacking Bottas who had great straightline speed but less in the corners. Rosberg was already seven seconds ahead of Bottas by lap five, so Ricciardo was only ever fighting for the bottom step of the podium.
The team decided to leapfrog with strategy rather than racing and asked Ricciardo to back off.
Only problem was, the Australian had Grosjean not far behind, putting him in a bit of a bind. He had one last go at turn one on lap seven.
The Ferraris were being driven right at the edge by both drivers, but Kimi Raikkonen was getting a lot of movement from the F14T.
Vettel was the first to pit from thirteenth on lap 13.
Red Bull pulled Ricciardo in from behind Bottas on lap fifteen for his first stop. He came out and immediately put in fastest sector times to breeze by Button.
The Force Indias both crept up the top ten in the first part of the race, with Hulkenberg running fifth before pitting. Perez was passed by Ricciardo who was streaking through the field after his stop.
Hamilton pitted on lap 19, returning in second ahead of Bottas in third such was his overall lead. Raikkonen pitted and managed to return to the track just a few feet ahead of his teammate, although Alonso didn't make it easy.
Rosberg stayed out for a number of laps, setting the fastest lap on lap 19, with Hamilton punching back on lap 20. Bottas pitted from third, hoping to have eked out enough of a lead over Ricciardo - he didn't and the Red Bull assumed third place.
Rosberg pitted on lap 22 for hard compound tyres, the opposite of Hamilton's choice. Hamilton retook his lead as Rosberg came out of the pits. Tons of radio traffic ensued as the two sides of the garage tried to figure out how to beat the other.
Hamilton was told he needed to extend his lead to more than five seconds and Rosberg was told to not drop back more than two.
Kimi Raikkonen almost put himself out of sixth while trying an ambitious pass around the outside of Romain Grosjean. The Frenchman held his line and Raikkonen somehow survived without even running off the track.
The Finn had another go the following lap, but the Lotus appeared to be limping, with Alonso shooting past a further lap later.
Hamilton wasn't happy - he radioed his team to explain, "My rear end is everywhere," the Briton feeling the pressure of his teammate's pace.
Vettel pitted on lap 34 from tenth. The stop was lightning fast, but his race was already a hard one given his lowly starting position. At least he'd gotten the harder tyre out of the way and was now on the softer compound.
Grosjean's rearward slide wasn't helped by a stop on lap 35, the Lotus just not able to hold on to its fifth place starting position.
Alonso pitted on lap 36 and just made it out in front of Massa. Next lap he passed Kevin Magnussen with a big outbraking move at turn one, just keeping it between the white lines.
Vettel was on a mission to collect some points - or bits of his car - as he made kamikaze moves on Massa and Magnussen, running an impressive seventh and lapping quickly on the new tyres.
Magnussen pitted for his second stop on lap 43, but the two stop strategy hadn't helped the Dane - just two laps previous he had been passed by Massa who had already stopped twice.
Hamilton pitted at the end of lap 43 to hard compound tyres, setting the scene for the showdown over the final 22 laps. Hamilton had a brief argument with his team over the front wing modification while Rosberg complained of graining tyres.
Raikkonen pitted from fifth on lap 45, the Finn having a stellar race to keep Alonso behind him.
Rosberg came out of the pits behind Hamilton, but on the softer tyre. Meanwhile, RIcciardo pitted from a comfortable third place, Bottas pitting from fourth.
Hamilton continued arguing with his engineer, this time about the decision to pit the leading Mercedes when they did. The reply was a curt, "Knuckle down, you have 21 laps to go."
The Force Indias, which had been running line astern for most of the race, swapped places on lap 52 when Perez passed Hulkenberg.
On the same lap, Vettel pitted, rejoining in seventh. Next time around, the German shot past Alonso who was emerging from the pits.
Hamilton had a 2.1 second lead with nine laps to go, complaining of graining on the front left tyre. Rosberg had been gaining and continued to gain as Hamilton's engineer suggested settings changes.
Vettel nailed Kimi Raikkonen on lap 57 with a sensational move from a fair way back. The German just had much more stability under braking, the Ferrari unable to answer.
Hamilton and Rosberg were running a second and a half apart, with the pair reaching backmarkers on lap 59. Hamilton had done a better job in earlier traffic-clearing efforts, but Rosberg had more confidence on the softer tyres and got to within DRS range.
Alonso's decision to go with a three stop strategy paid off for Alonso as he reeled in Kimi Raikkonen, mirroring the battle at the front between the Mercedes.
Bottas and Vettel fought fiercely for fourth place, but Bottas had the edge on the front straight. Vettel prevailed on lap 65, keeping that fourth place until the flag.
Alonso and Raikkonen fought just as hard for sixth place with a multi-corner passing move. Alonso went for the dive bomb but Raikkonen switched lines and made the Spaniard work very hard through the long turns one and two then three and four.
With a lap to go, Rosberg was half a second behind Lewis Hamilton. Rosberg made a tiny error, letting Hamilton get away by a couple of tenths.
Rosberg was unable to stay close enough to the 2007 world champion who was keen to take the world championship lead and his first win at Catalunya.
Ricciardo came home third, 48 seconds behind the all-conquering Mercedes for his second go at the bottom step of the podium.
"The Mercedes were a long way ahead. We knew a boring race would be a good one for us, and we looked like a third place car," Ricciardo said.
"It's really nice to be on the podium and I'm sure we'll get to keep this one this time."
Formula 1 returns next week for the Monaco Grand Prix.
Spain F1 GP Results
- Lewis Hamilton - Mercedes - 1h41m05.155s
- Nico Rosberg - Mercedes +0.636s
- Daniel Ricciardo - Red Bull-Renault +49.014s
- Sebastian Vettel - Red Bull-Renault +1m16.702s
- Valtteri Bottas - Williams-Mercedes +1m19.293s
- Fernando Alonso - Ferrari +1m27.743s
- Kimi Raikkonen - Ferrari +1 lap
- Romain Grosjean - Lotus-Renault +1 lap
- Sergio Perez - Force India-Mercedes +1 lap
- Nico Hulkenberg - Force India-Mercedes +1 lap
- Jenson Button - McLaren-Mercedes +1 lap
- Kevin Magnussen - McLaren-Mercedes +1 lap
- Felipe Massa - Williams-Mercedes +1 lap
- Daniil Kvyat - Toro Rosso-Renault +1 lap
- Pastor Maldonado - Lotus-Renault +1 lap
- Esteban Gutierrez - Sauber-Ferrari +1 lap
- Adrian Sutil - Sauber-Ferrari +1 lap
- Jules Bianchi - Marussia-Ferrari +2 laps
- Max Chilton - Marussia-Ferrari +2 laps
- Marcus Ericsson - Caterham-Renault +2 laps
Kamui Kobayashi - Caterham-Renault - 34 laps
Jean-Eric Vergne - Toro Rosso-Renault - 24 laps