X-Git-Url: http://git.maemo.org/git/?p=gpssportsniffer;a=blobdiff_plain;f=tilesMap.cpp;h=aa7efbefda2d3a7d52998d8b2d8d20e0cedd88fe;hp=cff06cb9942f4a6a3f8dd5857036d9ee37796add;hb=d83d54cbe39ffa872c360c017fccfafc3520e392;hpb=562d093bd082a53636e18d4f07d842310984ceb4 diff --git a/tilesMap.cpp b/tilesMap.cpp index cff06cb..aa7efbe 100755 --- a/tilesMap.cpp +++ b/tilesMap.cpp @@ -1,3 +1,22 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Tito Eritja Real +** +** This program is free software: you can redistribute it and/or modify +** it under the terms of the GNU General Public License as published by +** the Free Software Foundation, either version 3 of the License, or +** (at your option) any later version. +** +** This program is distributed in the hope that it will be useful, +** but WITHOUT ANY WARRANTY; without even the implied warranty of +** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +** GNU General Public License for more details. +** +** You should have received a copy of the GNU General Public License +** along with this program. If not, see . +** +****************************************************************************/ + #include "tilesMap.h" #include "constants.h" #include "log.h" @@ -39,7 +58,8 @@ TilesMap::TilesMap(QNetworkSession *session, QObject *parent = 0, Log* log=0, in longitude(0), width(WIDTH_DEFAULT), height(HEIGHT_DEFAULT), - tilesD(0){ + tilesD(0), + cache(false){ m_mapsDir = QDir(QString(APPLICATION_PATH).append(MAPS_DIR)); m_manager = new QNetworkAccessManager(this); @@ -49,9 +69,9 @@ TilesMap::TilesMap(QNetworkSession *session, QObject *parent = 0, Log* log=0, in m_emptyTile.fill(Qt::lightGray); //log->debug(QString("Is Network accessible?:%1").arg(m_manager->networkAccessible())); - QNetworkDiskCache *cache = new QNetworkDiskCache; - cache->setCacheDirectory(QDesktopServices::storageLocation(QDesktopServices::CacheLocation)); - m_manager->setCache(cache); + QNetworkDiskCache *nCache = new QNetworkDiskCache; + nCache->setCacheDirectory(QDesktopServices::storageLocation(QDesktopServices::CacheLocation)); + m_manager->setCache(nCache); connect(m_manager, SIGNAL(finished(QNetworkReply*)), this, SLOT(handleReplies(QNetworkReply*))); @@ -158,13 +178,17 @@ void TilesMap::getTiles() { request.setAttribute(QNetworkRequest::User, QVariant(grab)); m_pendingReplies << m_manager->get(request); - m_tileRequests[grab]=TileRequest(zoom,QDateTime::currentDateTime(),false); + m_tileRequests[grab]=TileRequest(zoom,QDateTime::currentDateTime(),cache,false); } } } } +void TilesMap::cancelDownloading(){ + +} + int TilesMap::downloadMaps(Track* track_p){ int numTiles = 0; tilesD=0; @@ -180,7 +204,7 @@ int TilesMap::downloadMaps(Track* track_p){ // ading tiles needed by track QList gpsPoints = track_p->getGpsPoints(); int updateProgress=0; - for(int zoom_temp=zoom; zoom_temp < 17; zoom_temp++){ + for(int zoom_temp=zoom; zoom_temp <= MAX_ZOOM_DOWNL; zoom_temp++){ for (int i = 0; i < gpsPoints.size(); ++i) { GpsPoint* point = gpsPoints.at(i); downloadTiles(point->getLatitude(), point->getLongitude(),zoom_temp,&numTiles); @@ -242,7 +266,7 @@ void TilesMap::downloadWindow(int* numTiles,int zoom){ request.setAttribute(QNetworkRequest::User, QVariant(grab)); m_pendingReplies << m_manager->get(request); - m_tileRequests[grab]= TileRequest(zoom,QDateTime::currentDateTime(),true); + m_tileRequests[grab]= TileRequest(zoom,QDateTime::currentDateTime(),true,true); (*numTiles)++; } } @@ -250,8 +274,6 @@ void TilesMap::downloadWindow(int* numTiles,int zoom){ } - - void TilesMap::render(QPainter *p, const QRect &rect) { //log->debug("rendering maps..."); for (int x = 0; x <= m_tilesRect.width(); ++x) @@ -301,33 +323,38 @@ void TilesMap::handleReplies(QNetworkReply *reply){ QDir().mkdir(mapsDir()); } if (!reply->error()){ + if (!img.load(reply, 0)){ img = QImage(); }else{ - if(tr.save){ + if(tr.downloading){ zoomReply=tr.zoom; } - QString fileString = QString(fileUrlProvider()).arg(zoomReply).arg(tp.x()).arg(tp.y()); - if(!QDir(urlProvider()).exists()) - QDir().mkdir(urlProvider()); + if(tr.save){ + QString fileString = QString(fileUrlProvider()).arg(zoomReply).arg(tp.x()).arg(tp.y()); + + if(!QDir(urlProvider()).exists()) + QDir().mkdir(urlProvider()); - if(!QDir(urlProvider().append("%1/").arg(zoomReply)).exists()) - QDir().mkdir(urlProvider().append("%1").arg(zoomReply)); + if(!QDir(urlProvider().append("%1/").arg(zoomReply)).exists()) + QDir().mkdir(urlProvider().append("%1").arg(zoomReply)); + + if(!QDir(urlProvider().append("%1/").arg(zoomReply).append("%1/").arg(tp.x())).exists()) + QDir().mkdir(urlProvider().append("%1/").arg(zoomReply).append("%1/").arg(tp.x())); - if(!QDir(urlProvider().append("%1/").arg(zoomReply).append("%1/").arg(tp.x())).exists()) - QDir().mkdir(urlProvider().append("%1/").arg(zoomReply).append("%1/").arg(tp.x())); - if(tr.save){ QFile file(fileString); if (!file.open(QIODevice::WriteOnly)) { qDebug() << QString("Cannot open file for writing: %1").arg(file.errorString()); } img.save(fileString); - tilesD++; + + if(tr.downloading) + tilesD++; } } } @@ -336,7 +363,7 @@ void TilesMap::handleReplies(QNetworkReply *reply){ m_tileRequests.remove(tp); - if(!tr.save){ + if(!tr.downloading){ m_tileMaps[tp] = QPixmap::fromImage(img); if (img.isNull()){ @@ -350,6 +377,7 @@ void TilesMap::handleReplies(QNetworkReply *reply){ foreach(QPoint tp, m_tileMaps.keys()) if (!bound.contains(tp)) m_tileMaps.remove(tp); + }else{ emit tilesDownloaded(tilesD); } @@ -396,6 +424,9 @@ QString TilesMap::fileUrlProvider(){ case MapTypeICC: dir.append("/icc/%1/%2/%3.png"); break; + case MapTypeCloudMade: + dir.append("/cloudmade/%1/%2/%3.png"); + break; case MapTypeOpenCycleMaps: dir.append("/ocm/%1/%2/%3.png"); break; @@ -422,6 +453,9 @@ QString TilesMap::urlProvider(){ case MapTypeICC: dir.append("/icc/"); break; + case MapTypeCloudMade: + dir.append("/cloudmade/"); + break; case MapTypeOpenCycleMaps: dir.append("/ocm/"); break; @@ -438,9 +472,14 @@ QString TilesMap::mapUrlProvider(){ //m_log->debug("--- mapUrlProvider ---"); QString url("http://"); //m_log->debug(QString("mapType:%1").arg(mapType)); + switch(mapType){ + case MapTypeCloudMade: + url.append("tile.cloudmade.com/e63d1732f3be48299e0c19d6bcefe25c/3/256/%1/%2/%3.png"); + break; case MapTypeGoogleMaps: - url.append("mt1.google.com/vt/&x=%2&y=%3&z=%1"); + url.append("mt1.google.com/vt/lyrs=m@121,bike&hl=es&x=%2&y=%3&z=%1"); + //url.append("mt1.google.com/vt/&x=%2&y=%3&z=%1"); break; case MapTypeICC: url.append("norma.icc.cat/tilecache/tilecache.py/1.0.0/topo3857/%1/%2/%3.png?type=google");