That dGPS library is pretty awful. It blocks the Arduino until the whole sentence comes in, and uses two copies of a 300-byte line buffer (600 bytes of RAM!). And look at this:
char linea[300];
char *data = "";
memset(data, 0, sizeof(data));
data = dGPS::subStr(linea, ",", 8);
...
char *dGPS::subStr (char *str, char *delim, int index) {
char *act, *sub, *ptr;
static char copy[300];
int i;
// Since strtok consumes the first arg, make a copy
strcpy(copy, str);
for (i = 1, act = copy; i <= index; i++, act = NULL) {
//Serial.print(".");
sub = strtok_r(act, delim, &ptr);
if (sub == NULL) break;
}
return sub;
}
o_O I think that corrupts one byte of memory after the empty string "". 
Really, any other library would be better, but...
I can suggest a library I wrote: NeoGPS. It is smaller and faster than other libraries, and the examples are structured to avoid blocking. As you add other features to your sketch, it becomes very important to avoid blocking and delay()
.
NeoGPS is available from the Arduino Library Manager in newer versions of the IDE, or you can install it manually, since you are using 1.0.6. The examples need these two #define
s added to them, just before the GPSport.h include statement:
#define RX_PIN 10
#define TX_PIN 4
#include "GPSport.h"
...as described in step 3 of the Installation instructions.
The NeoGPS examples also use the NeoSWSerial library. It is much more efficient than SoftwareSerial. See Installation step 2 and the NeoSWSerial description.
Cheers,
/dev