blob: 03552d6fc7c954fb256bb9892fd763888f146e19 (
plain)
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
|
#include "tileprovider.h"
#include "tile.h"
#include "tilespec.h"
#include <QNetworkAccessManager>
#include <QNetworkRequest>
#include <QNetworkReply>
#include <QUrl>
#include <QPixmap>
TileProvider::TileProvider(QObject *parent)
: QObject(parent)
{
nam_ = new QNetworkAccessManager(this);
connect(nam_,
SIGNAL(finished(QNetworkReply*)),
this,
SLOT(finished(QNetworkReply*)));
}
void TileProvider::tileRequest(const TileSpec &spec)
{
QString url = "http://tile.openstreetmap.org/";
url += QString::number(spec.zoom());
url += "/";
url += QString::number(spec.x());
url += "/";
url += QString::number(spec.y());
url += ".png";
QNetworkRequest request = QNetworkRequest(QUrl(url));
QNetworkReply *reply = nam_->get(request);
map_.insert(reply, spec);
}
void TileProvider::finished(QNetworkReply *reply)
{
if (!map_.contains(reply)) {
reply->deleteLater();
return;
}
TileSpec spec = map_.value(reply);
if (reply->error() == QNetworkReply::NoError) {
QByteArray bytes = reply->readAll();
QPixmap pixmap;
bool result = pixmap.loadFromData(bytes, "png");
if (result) {
Tile tile(spec, pixmap);
emit tileReady(tile);
}
} else {
emit tileError(spec);
}
reply->deleteLater();
}
|