+/****************************************************************************
+**
+** Copyright (C) 2011 Tito Eritja Real <jtitoo@gmail.com>
+**
+** 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 <http://www.gnu.org/licenses/>.
+**
+****************************************************************************/
+
#include "tilesMap.h"
#include "constants.h"
#include "log.h"
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);
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*)));
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;
// ading tiles needed by track
QList<GpsPoint*> 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);
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)++;
}
}
}
-
-
void TilesMap::render(QPainter *p, const QRect &rect) {
//log->debug("rendering maps...");
for (int x = 0; x <= m_tilesRect.width(); ++x)
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++;
}
}
}
m_tileRequests.remove(tp);
- if(!tr.save){
+ if(!tr.downloading){
m_tileMaps[tp] = QPixmap::fromImage(img);
if (img.isNull()){
foreach(QPoint tp, m_tileMaps.keys())
if (!bound.contains(tp))
m_tileMaps.remove(tp);
+
}else{
emit tilesDownloaded(tilesD);
}
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;
case MapTypeICC:
dir.append("/icc/");
break;
+ case MapTypeCloudMade:
+ dir.append("/cloudmade/");
+ break;
case MapTypeOpenCycleMaps:
dir.append("/ocm/");
break;
//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");