bool DirtyListDescriber::showChanges(QWidget* aParent) { QDialog* dlg = new QDialog(aParent); Ui.setupUi(dlg); dlg->setWindowFlags(dlg->windowFlags() & ~Qt::WindowContextHelpButtonHint); theListWidget = Ui.ChangesList; runVisit(); CoordBox bbox = theDocument->getDirtyOrOriginLayer()->boundingBox(); QString bboxComment = QString("BBOX:%1,%2,%3,%4") .arg(QString::number(bbox.bottomLeft().x(), 'f', 2)) .arg(QString::number(bbox.bottomLeft().y(), 'f', 2)) .arg(QString::number(bbox.topRight().x(), 'f', 2)) .arg(QString::number(bbox.topRight().y(), 'f', 2)); QString statComment = QString("ADD:%1 UPD:%2 DEL:%3").arg(glbAdded).arg(glbUpdated).arg(glbDeleted); glbChangeSetComment = bboxComment + " " + statComment; Ui.edChangesetComment->setText(glbChangeSetComment); Ui.edChangesetComment->selectAll(); bool ok = (dlg->exec() == QDialog::Accepted); if (!Ui.edChangesetComment->text().isEmpty()) glbChangeSetComment = Ui.edChangesetComment->text(); else glbChangeSetComment = "-"; Task = Ui.ChangesList->count(); SAFE_DELETE(dlg) return ok; }
bool downloadOSM(QWidget* aParent, const QString& aWeb, const QString& aUser, const QString& aPassword, const CoordBox& aBox , Document* theDocument, Layer* theLayer) { if (checkForConflicts(theDocument)) { QMessageBox::warning(aParent,QApplication::translate("Downloader","Unresolved conflicts"), QApplication::translate("Downloader","Please resolve existing conflicts first")); return false; } Downloader Rcv(aUser, aPassword); QString URL = Rcv.getURLToMap(); if ((fabs(aBox.bottomLeft().x()) < 180.0 && fabs(aBox.topRight().x()) > 180.0) || (fabs(aBox.bottomLeft().x()) > 180.0 && fabs(aBox.topRight().x()) < 180.0)) { /* Check for +-180 meridian, and split query in two if necessary */ int sign = (aBox.bottomLeft().x() > 0) ? 1 : -1; CoordBox q1 = aBox, q2 = aBox; if (aBox.bottomLeft().x() > 0) { q1.setRight(180*sign); q2.setLeft(-180*sign); q2.setRight(q2.right()-360); } else { q1.setLeft(180*sign); q2.setRight(-180*sign); q2.setLeft(q2.left()+360); } return downloadOSM(aParent, aWeb, aUser, aPassword, q1, theDocument, theLayer) && downloadOSM(aParent, aWeb, aUser, aPassword, q2, theDocument, theLayer); } else { /* Normal code path */ URL = URL.arg(aBox.bottomLeft().x(), 0, 'f').arg(aBox.bottomLeft().y(), 0, 'f').arg(aBox.topRight().x(), 0, 'f').arg(aBox.topRight().y(), 0, 'f'); QUrl theUrl(aWeb+URL); return downloadOSM(aParent, theUrl, aUser, aPassword, theDocument, theLayer); } }
void NativeRenderDialog::setBoundingBox(CoordBox aBBox) { ui.sbMinLat->setValue(aBBox.bottomLeft().y()); ui.sbMaxLat->setValue(aBBox.topLeft().y()); ui.sbMinLon->setValue(aBBox.topLeft().x()); ui.sbMaxLon->setValue(aBBox.topRight().x()); prtW->updatePreview(); }
bool downloadTracksFromOSM(QWidget* Main, const QString& aWeb, const QString& aUser, const QString& aPassword, const CoordBox& aBox , Document* theDocument) { Downloader theDownloader(aUser, aPassword); QList<TrackLayer*> theTracklayers; //TrackMapLayer* trackLayer = new TrackMapLayer(QApplication::translate("Downloader","Downloaded tracks")); //theDocument->add(trackLayer); IProgressWindow* aProgressWindow = dynamic_cast<IProgressWindow*>(Main); if (!aProgressWindow) return false; QProgressDialog* dlg = aProgressWindow->getProgressDialog(); dlg->setWindowTitle(QApplication::translate("Downloader","Parsing...")); QProgressBar* Bar = aProgressWindow->getProgressBar(); Bar->setTextVisible(false); Bar->setMaximum(11); QLabel* Lbl = aProgressWindow->getProgressLabel(); Lbl->setText(QApplication::translate("Downloader","Parsing XML")); if (dlg) dlg->show(); theDownloader.setAnimator(dlg,Lbl,Bar,true); for (int Page=0; ;++Page) { Lbl->setText(QApplication::translate("Downloader","Downloading trackpoints %1-%2").arg(Page*5000+1).arg(Page*5000+5000)); QString URL = theDownloader.getURLToTrackPoints(); URL = URL.arg(aBox.bottomLeft().x()). arg(aBox.bottomLeft().y()). arg(aBox.topRight().x()). arg(aBox.topRight().y()). arg(Page); QUrl theUrl(aWeb+URL); if (!theDownloader.go(theUrl)) return false; if (theDownloader.resultCode() != 200) return false; int Before = theTracklayers.size(); QByteArray Ar(theDownloader.content()); bool OK = importGPX(Main, Ar, theDocument, theTracklayers, true); if (!OK) return false; if (Before == theTracklayers.size()) break; theTracklayers[theTracklayers.size()-1]->setName(QApplication::translate("Downloader", "Downloaded track - nodes %1-%2").arg(Page*5000+1).arg(Page*5000+5000)); } return true; }
bool DrawingLayer::toXML(QXmlStreamWriter& stream, bool asTemplate, QProgressDialog * progress) { bool OK = true; stream.writeStartElement(metaObject()->className()); Layer::toXML(stream, asTemplate, progress); if (!asTemplate) { stream.writeStartElement("osm"); stream.writeAttribute("version", "0.6"); stream.writeAttribute("generator", QString("%1 %2").arg(STRINGIFY(PRODUCT)).arg(STRINGIFY(VERSION))); if (p->Features.size()) { stream.writeStartElement("bound"); CoordBox layBB = boundingBox(); QString S = QString().number(layBB.bottomLeft().y(),'f',6) + ","; S += QString().number(layBB.bottomLeft().x(),'f',6) + ","; S += QString().number(layBB.topRight().y(),'f',6) + ","; S += QString().number(layBB.topRight().x(),'f',6); stream.writeAttribute("box", S); stream.writeAttribute("origin", QString("http://www.openstreetmap.org/api/%1").arg(M_PREFS->apiVersion())); stream.writeEndElement(); } QList<MapFeaturePtr>::iterator it; for(it = p->Features.begin(); it != p->Features.end(); it++) (*it)->toXML(stream, progress); stream.writeEndElement(); QList<CoordBox> downloadBoxes = p->theDocument->getDownloadBoxes(this); if (downloadBoxes.size() && p->theDocument->getLastDownloadLayerTime().secsTo(QDateTime::currentDateTime()) < 12*3600) { // Do not export downloaded areas if older than 12h stream.writeStartElement("DownloadedAreas"); QListIterator<CoordBox>it(downloadBoxes); while(it.hasNext()) { it.next().toXML("DownloadedBoundingBox", stream); } stream.writeEndElement(); } } stream.writeEndElement(); return OK; }
bool downloadOSM(MainWindow* Main, const CoordBox& aBox , Document* theDocument) { QString osmWebsite, osmUser, osmPwd; static bool DownloadRaw = false; QDialog * dlg = new QDialog(Main); osmWebsite = M_PREFS->getOsmApiUrl(); osmUser = M_PREFS->getOsmUser(); osmPwd = M_PREFS->getOsmPassword(); Ui::DownloadMapDialog ui; ui.setupUi(dlg); SlippyMapWidget* SlippyMap = new SlippyMapWidget(ui.groupBox); #ifndef _MOBILE SlippyMap->setMinimumHeight(256); #endif CoordBox Clip(aBox); SlippyMap->setViewportArea(Clip); ui.verticalLayout->addWidget(SlippyMap); QObject::connect(SlippyMap, SIGNAL(redraw()), ui.FromMap, SLOT(toggle())); BookmarkListIterator i(*(M_PREFS->getBookmarks())); while (i.hasNext()) { i.next(); if (i.value().deleted == false) ui.Bookmarks->addItem(i.key()); } ui.edXapiUrl->setText(QString("*[bbox=%1,%2,%3,%4]").arg(aBox.bottomLeft().x(), 0, 'f').arg(aBox.bottomLeft().y(), 0, 'f').arg(aBox.topRight().x(), 0, 'f').arg(aBox.topRight().y(), 0, 'f')); ui.IncludeTracks->setChecked(DownloadRaw); ui.ResolveRelations->setChecked(M_PREFS->getResolveRelations()); bool OK = true, retry = true, directAPI = false; QString directUrl; while (retry) { retry = false; #ifdef _MOBILE dlg->setWindowState(Qt::WindowMaximized); #endif if (dlg->exec() == QDialog::Accepted) { DownloadRaw = false; if (ui.FromBookmark->isChecked()) { Clip = M_PREFS->getBookmarks()->value(ui.Bookmarks->currentText()).Coordinates; } else if (ui.FromView->isChecked()) { Clip = aBox; } else if (ui.FromLink->isChecked()) { QString link = ui.Link->text(); if (link.contains("/api/")) { directAPI=true; directUrl = link; } else if (link.contains("/browse/")) { QString tag("/browse/"); int ix = link.lastIndexOf(tag) + tag.length(); directUrl = M_PREFS->getOsmApiUrl(); if (!directUrl.endsWith("/")) directUrl += "/"; directUrl += link.right(link.length() - ix); if (!directUrl.endsWith("/")) directUrl += "/"; directUrl += "full"; directAPI=true; } else if (link.startsWith("way") || link.startsWith("node") || link.startsWith("relation")) { directUrl = M_PREFS->getOsmApiUrl(); if (!directUrl.endsWith("/")) directUrl += "/"; directUrl += link; directAPI=true; } else { OsmLink ol(link); Clip = ol.getCoordBox(); if (Clip.isNull() || Clip.isEmpty()) retry = true; } } else if (ui.FromXapi->isChecked()) { directAPI = true; directUrl = M_PREFS->getXapiUrl(); if (!directUrl.endsWith("/")) directUrl += "/"; directUrl += ui.edXapiUrl->text(); } else if (ui.FromMap->isChecked()) { QRectF R(SlippyMap->viewArea()); Clip = CoordBox(Coord(R.x(), R.y()), Coord(R.x()+R.width(), R.y()+R.height())); } if (retry) continue; Main->view()->setUpdatesEnabled(false); Layer* theLayer = new DrawingLayer(QApplication::translate("Downloader","%1 download").arg(QDateTime::currentDateTime().toString(Qt::ISODate))); theDocument->add(theLayer); M_PREFS->setResolveRelations(ui.ResolveRelations->isChecked()); if (directAPI) { if (ui.FromXapi->isChecked()) theLayer->setUploadable(false); OK = downloadOSM(Main,QUrl(QUrl::fromEncoded(directUrl.toLatin1())),osmUser,osmPwd,theDocument,theLayer); } else OK = downloadOSM(Main,osmWebsite,osmUser,osmPwd,Clip,theDocument,theLayer); if (OK && ui.IncludeTracks->isChecked()) OK = downloadTracksFromOSM(Main,osmWebsite,osmUser,osmPwd, Clip,theDocument); Main->view()->setUpdatesEnabled(true); if (OK) { theDocument->setLastDownloadLayer(theLayer); theDocument->addDownloadBox(theLayer, Clip); #ifndef _MOBILE if (directAPI) Main->on_viewZoomAllAction_triggered(); else #endif Main->view()->setViewport(Clip,Main->view()->rect()); Main->invalidateView(); } else { retry = true; theDocument->remove(theLayer); SAFE_DELETE(theLayer); } } } delete dlg; return OK; }
bool downloadOpenstreetbugs(MainWindow* Main, const CoordBox& aBox, Document* theDocument, SpecialLayer* theLayer) { QUrl osbUrl; osbUrl.setUrl(M_PREFS->getOpenStreetBugsUrl()); osbUrl.setPath(osbUrl.path() + "getGPX"); if (Main) Main->view()->setUpdatesEnabled(false); Downloader theDownloader("", ""); QList<TrackLayer*> theTracklayers; SpecialLayer* trackLayer = theLayer; if (!trackLayer) { SpecialLayer* trackLayer = new SpecialLayer(QApplication::translate("Downloader","OpenStreetBugs"),Layer::OsmBugsLayer); trackLayer->setUploadable(false); theDocument->add(trackLayer); } theTracklayers << trackLayer; IProgressWindow* aProgressWindow = dynamic_cast<IProgressWindow*>(Main); if (!aProgressWindow) return false; QProgressDialog* dlg = aProgressWindow->getProgressDialog(); dlg->setWindowTitle(QApplication::translate("Downloader","Parsing...")); QProgressBar* Bar = aProgressWindow->getProgressBar(); Bar->setTextVisible(false); Bar->setMaximum(11); QLabel* Lbl = aProgressWindow->getProgressLabel(); Lbl->setText(QApplication::translate("Downloader","Parsing XML")); if (dlg) dlg->show(); theDownloader.setAnimator(dlg,Lbl,Bar,true); Lbl->setText(QApplication::translate("Downloader","Downloading points")); #if QT_VERSION >= QT_VERSION_CHECK(5,0,0) QUrlQuery theQuery(osbUrl); #define theQuery theQuery #else #define theQuery osbUrl #endif theQuery.addQueryItem("t", COORD2STRING(aBox.topRight().y())); theQuery.addQueryItem("l", COORD2STRING(aBox.bottomLeft().x())); theQuery.addQueryItem("b", COORD2STRING(aBox.bottomLeft().y())); theQuery.addQueryItem("r", COORD2STRING(aBox.topRight().x())); theQuery.addQueryItem("open", "yes"); #if QT_VERSION >= QT_VERSION_CHECK(5,0,0) osbUrl.setQuery(theQuery); #endif #undef theQuery if (!theDownloader.go(osbUrl)) return false; if (theDownloader.resultCode() != 200) return false; QByteArray Ar(theDownloader.content()); bool OK = importGPX(Main, Ar, theDocument, theTracklayers, true); if (Main) Main->view()->setUpdatesEnabled(true); if (OK) { if (Main) Main->invalidateView(); } return OK; }
bool downloadMapdust(MainWindow* Main, const CoordBox& aBox, Document* theDocument, SpecialLayer* theLayer) { QUrl url; url.setUrl(M_PREFS->getMapdustUrl()); if (Main) Main->view()->setUpdatesEnabled(false); Downloader theDownloader("", ""); SpecialLayer* trackLayer = theLayer; if (!trackLayer) { trackLayer = new SpecialLayer(QApplication::translate("Downloader","MapDust"), Layer::MapDustLayer); trackLayer->setUploadable(false); theDocument->add(trackLayer); } IProgressWindow* aProgressWindow = dynamic_cast<IProgressWindow*>(Main); if (!aProgressWindow) return false; QProgressDialog* dlg = aProgressWindow->getProgressDialog(); dlg->setWindowTitle(QApplication::translate("Downloader","Parsing...")); QProgressBar* Bar = aProgressWindow->getProgressBar(); Bar->setTextVisible(false); Bar->setMaximum(11); QLabel* Lbl = aProgressWindow->getProgressLabel(); Lbl->setText(QApplication::translate("Downloader","Parsing XML")); if (dlg) dlg->show(); theDownloader.setAnimator(dlg,Lbl,Bar,true); Lbl->setText(QApplication::translate("Downloader","Downloading points")); #if QT_VERSION >= QT_VERSION_CHECK(5,0,0) QUrlQuery theQuery(url); #define theQuery theQuery #else #define theQuery url #endif theQuery.addQueryItem("t", COORD2STRING(aBox.topRight().y())); theQuery.addQueryItem("l", COORD2STRING(aBox.bottomLeft().x())); theQuery.addQueryItem("b", COORD2STRING(aBox.bottomLeft().y())); theQuery.addQueryItem("r", COORD2STRING(aBox.topRight().x())); #if QT_VERSION >= QT_VERSION_CHECK(5,0,0) url.setQuery(theQuery); #endif #undef theQuery if (!theDownloader.go(url)) return false; if (theDownloader.resultCode() != 200) return false; QByteArray Ar(theDownloader.content()); ImportExportGdal gdal(theDocument); bool OK = gdal.import(trackLayer, Ar, false); if (Main) Main->view()->setUpdatesEnabled(true); if (OK) { if (Main) Main->invalidateView(); } return OK; }
bool downloadOSM(QWidget* aParent, const QString& aWeb, const QString& aUser, const QString& aPassword, const CoordBox& aBox , Document* theDocument, Layer* theLayer) { if (checkForConflicts(theDocument)) { QMessageBox::warning(aParent,QApplication::translate("Downloader","Unresolved conflicts"), QApplication::translate("Downloader","Please resolve existing conflicts first")); return false; } Downloader Rcv(aUser, aPassword); QString URL = Rcv.getURLToMap(); URL = URL.arg(aBox.bottomLeft().x(), 0, 'f').arg(aBox.bottomLeft().y(), 0, 'f').arg(aBox.topRight().x(), 0, 'f').arg(aBox.topRight().y(), 0, 'f'); QUrl theUrl(aWeb+URL); return downloadOSM(aParent, theUrl, aUser, aPassword, theDocument, theLayer); }