OpenStreetMap

aliaksei's Diary

Recent diary entries

#include

struct GPSPOINT {
unsigned long time;
float latitude;
float longtitude;
unsigned long altitude;
};

int main(int argc, char* argv[])
{
unsigned char raw_data[] = {0xD6, 0xB5, 0x84, 0x48, 0xA9, 0x90, 0x57, 0x42, 0xCD, 0x68, 0xDC, 0x41, 0xAA, 0x72, 0x43, 0x20};

GPSPOINT *point = (GPSPOINT*)raw_data;
point->altitude <<= 0x08;

float *altitude = (float *)&point->altitude;

printf("latitude: %3.7f, longtitude: %3.7f, altitude: %5.2f\n", point->latitude, point->longtitude, *altitude);

return 0;
}

#include

struct GPSPOINT {
unsigned long time;
float latitude;
float longtitude;
unsigned long altitude;
};

int main(int argc, char* argv[])
{
unsigned char raw_data[] = {0xD6, 0xB5, 0x84, 0x48, 0xA9, 0x90, 0x57, 0x42, 0xCD, 0x68, 0xDC, 0x41, 0xAA, 0x72, 0x43, 0x20};

GPSPOINT *point = (GPSPOINT*)raw_data;
point->altitude <<= 0x08;

float *altitude = (float *)&point->altitude;

printf("latitude: %3.7f, longtitude: %3.7f, altitude: %5.2f\n", point->latitude, point->longtitude, *altitude);

return 0;
}

When you download tracks from your data logger, you gets set of .trl files. This files contains raw binary data. Each point takes 16 bytes of memory.

D6 B5 84 48 A9 90 57 42 | CD 68 DC 41 AA 72 43 20
8B B6 84 48 49 90 57 42 | BD 6B DC 41 9F 78 43 D2
92 B6 84 48 E1 90 57 42 | 98 6E DC 41 EE 78 43 32
99 B6 84 48 8B 91 57 42 | 35 71 DC 41 14 78 43 1A

First line for example:

Bytes | Type | Description
0-3 | long | unixtime, 0x4884B5D6 (1216656854) is 19:14:14, 21 Jul 2008
4-7 | float | latitiude, 0x425790A9 is 53.8912696838
8-11 | float | longtitude, 0x41DC68CD is 27.5511722565
12-14 | float* | altitude, 0x4372AA00 is 242.6640625 meters
15 | char | unknown field

---
* This field contains only 24 bits of 32-bits float value. Just append zero: 0x4372AA -> 0x4372AA00 -> 242.6640625