Пример #1
0
void Map::loadTilesSync(QList<Tile> &list)
{
	QList<Download> dl;

	for (int i = 0; i < list.size(); i++) {
		Tile &t = list[i];
		QString file = tileFile(t);
		QFileInfo fi(file);

		if (!fi.exists())
			dl.append(Download(tileUrl(t), file));
		else
			loadTileFile(t, file);
	}

	if (dl.empty())
		return;

	QEventLoop wait;
	connect(&Downloader::instance(), SIGNAL(finished()), &wait, SLOT(quit()));
	if (Downloader::instance().get(dl))
		wait.exec();

	for (int i = 0; i < list.size(); i++) {
		Tile &t = list[i];

		if (t.pixmap().isNull()) {
			QString file = tileFile(t);
			QFileInfo fi(file);

			if (!(fi.exists() && loadTileFile(t, file)))
				fillTile(t);
		}
	}
}
Пример #2
0
void OsmTileDownloader::download(uint32_t zoomLevel, uint32_t x, uint32_t y)
{
  if (!tileProvider.isValid()){
    emit failed(zoomLevel, x, y, false);
    return;      
  }
  if ((int)zoomLevel > tileProvider.getMaximumZoomLevel()){
    emit failed(zoomLevel, x, y, true);
    return;
  }  
  
  QStringList servers = tileProvider.getServers();
  if (servers.empty()){
    emit failed(zoomLevel, x, y, false);
    return;      
  }
  QString server = servers.at(serverNumber % servers.size());

  QUrl tileUrl(server.arg(zoomLevel).arg(x).arg(y));
  qDebug() << "Download tile " << tileUrl << " (current thread: " << QThread::currentThread() << ")";
  
  TileCacheKey key = {zoomLevel, x, y};
  requests.insert(tileUrl, key);
  
  QNetworkRequest request(tileUrl);
  request.setHeader(QNetworkRequest::UserAgentHeader, QString(OSMSCOUT_USER_AGENT).arg(OSMSCOUT_VERSION_STRING));
  //request.setAttribute(QNetworkRequest::HttpPipeliningAllowedAttribute, true);
  webCtrl.get(request);
}
Пример #3
0
void Map::loadTilesAsync(QList<Tile> &list)
{
	QList<Download> dl;

	for (int i = 0; i < list.size(); i++) {
		Tile &t = list[i];
		QString file = tileFile(t);
		QFileInfo fi(file);

		if (!fi.exists()) {
			fillTile(t);
			dl.append(Download(tileUrl(t), file));
		} else
			loadTileFile(t, file);
	}

	if (!dl.empty())
		Downloader::instance().get(dl);
}