上一篇博客里已经实现了轨迹的绘制,但是这时的轨迹并不是按照你的旅游顺序来绘制的,这就需要我们先将照片按照拍摄时间排序。

我先声明了一个结构体,包括拍摄时间,拍摄时间与当前时间的差值

1
2
3
4
5
6
7
8
9
struct image
{
easyexif::EXIFInfo result;

QDateTime time;
int difference;
};

image ab[20];

然后写了一个排序的算法,思路为获取每一张照片的拍摄时间与当前时间的差值,然后用冒泡排序比较差值后排序

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
//将GPS信息按照时间先后顺序排序
void MainWindow::arrangeGPS()
{
for(int i = 0;i <len;i++ )
{
//获取各图片的拍摄时间
ab[i].time = QDateTime::fromString(QString::fromStdString(ab[i].result.DateTime),
"yyyy:MM:dd hh:mm:ss");
//获取当前时间
QDateTime now = QDateTime::currentDateTime();

//比较各图片与现在时间的差值,精确到秒
ab[i].difference = ab[i].time.secsTo(now);
}

for (int i = 0; i < len; i++)
{
for (int j = 0; j < len - i - 1; j++)
{
if (ab[j].difference < ab[j+1].difference)
{
image temp[50];
temp[j] = ab[j];
ab[j] = ab[j + 1];
ab[j + 1] = temp[j];
}
}
}
}

这里有一个容易犯错的地方,我当时比较差值后,交换的是结构体里的time,导致无法正常排序。
以后如果遇到类似排序,应该交换的是整个结构体,才能正确排序。