version 2.21.1
Map download API mapviewer download feature
This commit is contained in:
132
utils/mapviewer/mainwindow.cpp
Normal file
132
utils/mapviewer/mainwindow.cpp
Normal file
@@ -0,0 +1,132 @@
|
||||
#include "mainwindow.h"
|
||||
|
||||
#include "mapitemellipse.h"
|
||||
#include "mapitemgeopolygon.h"
|
||||
#include "mapitemgeopolyline.h"
|
||||
#include "mapitemimage.h"
|
||||
#include "mapitempolygon.h"
|
||||
#include "mapitemtext.h"
|
||||
#include "osm_geocoding.h"
|
||||
#include "piqt.h"
|
||||
#include "qad_locations.h"
|
||||
|
||||
#include <QDateTime>
|
||||
#include <QDebug>
|
||||
#include <QFileDialog>
|
||||
#include <QTimer>
|
||||
#include <math.h>
|
||||
|
||||
MainWindow::MainWindow(QWidget * parent): EMainWindow(parent), Ui::MainWindow() {
|
||||
setupUi(this);
|
||||
session.setFile(QAD::userPath(QAD::ltConfig, "session_mapviewer"));
|
||||
session.addEntry(this);
|
||||
session.load();
|
||||
/*QVector<QPointF> g = {QPointF(55.583055, 37.580008), QPointF(55.583055, 37.590008), QPointF(55.593055, 37.580008)};
|
||||
QVector<QPointF> p = {QPointF(0, 0), QPointF(200, 0), QPointF(0, 100)};
|
||||
MapItemPolygon * pol = new MapItemPolygon(QPolygonF(p));
|
||||
MapItemGeoPolyline * gpol = new MapItemGeoPolyline(QPolygonF(g));
|
||||
MapItemEllipse * ell = new MapItemEllipse(QPointF(), 50, 50);
|
||||
MapItemImage * im = new MapItemImage(QPixmap(":/icons/maps.png"));
|
||||
MapItemText * it = new MapItemText(QString::fromUtf8("Это Ваня!"));
|
||||
im->setPosition({55.583055, 37.580008});
|
||||
im->setScale(0.2, 0.5);
|
||||
im->setAlignment(Qt::AlignRight | Qt::AlignTop);
|
||||
im->setCursor(Qt::PointingHandCursor);
|
||||
im->setInteracive(true);
|
||||
it->setPosition({55.583055, 37.580008});
|
||||
it->setBrush(QColor(127, 0, 0, 127));
|
||||
it->setPen(QColor(64, 255, 64));
|
||||
it->setFont(QFont("times", 18));
|
||||
it->setCursor(Qt::OpenHandCursor);
|
||||
it->setInteracive(true);
|
||||
pol->setPosition({55.583055, 37.580008});
|
||||
pol->setUnits(MapItemNonGeoGeometryBase::Pixels);
|
||||
gpol->setBrush(QColor(0, 0, 255, 64));
|
||||
gpol->setPen(QPen(QColor(64, 64, 255), 3));
|
||||
ell->setPosition({55.583055, 37.580008});
|
||||
ell->setStartAngle(-20);
|
||||
ell->setEndAngle(20);
|
||||
ell->setEllipse(QPointF(100, 0), 50, 50);
|
||||
ell->setInteracive(true);
|
||||
QTimer t;
|
||||
QObject::connect(&w, &MapView::itemClicked, [](MapItemBase * item) { qDebug() << "click" << item; });
|
||||
QObject::connect(&w, &MapView::itemEntered, [](MapItemBase * item) { qDebug() << "enter" << item; });
|
||||
QObject::connect(&w, &MapView::itemLeaved, [](MapItemBase * item) { qDebug() << "leave" << item; });
|
||||
|
||||
QObject::connect(&t, &QTimer::timeout, [im, it, pol, ell]() {
|
||||
im->rotate(1);
|
||||
it->rotate(-0.1);
|
||||
// pol->rotate(0.2);
|
||||
ell->rotate(-0.2);
|
||||
static double t = 0.;
|
||||
t += 0.025;
|
||||
ell->setScale((sin(t) / 2. + 1.));
|
||||
});
|
||||
t.start(100);
|
||||
map->addItem(im);
|
||||
map->addItem(gpol);
|
||||
map->addItem(pol);
|
||||
map->addItem(it);
|
||||
map->addItem(ell);
|
||||
map->centerTo({55.583055, 37.580008});
|
||||
map->zoomTo(2);
|
||||
*/
|
||||
}
|
||||
|
||||
|
||||
MainWindow::~MainWindow() {
|
||||
session.save();
|
||||
session.clear(true);
|
||||
}
|
||||
|
||||
|
||||
void MainWindow::changeEvent(QEvent * e) {
|
||||
QMainWindow::changeEvent(e);
|
||||
switch (e->type()) {
|
||||
case QEvent::LanguageChange: retranslateUi(this); break;
|
||||
default: break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void MainWindow::loadingSession(QPIConfig & conf) {
|
||||
map->setCenter(conf.getValue("center", map->center()).toPointF());
|
||||
map->setZoom(conf.getValue("zoom", map->getZoom()).toDouble());
|
||||
}
|
||||
|
||||
|
||||
void MainWindow::savingSession(QPIConfig & conf) {
|
||||
conf.setValue("center", map->center());
|
||||
conf.setValue("zoom", map->getZoom());
|
||||
}
|
||||
|
||||
|
||||
void MainWindow::on_map_mapClicked(QPointF c) {
|
||||
connect(OSMGeocoding::queue(c), &OSMGeocodingResult::ready, [this](OSMGeocodingResult * res) {
|
||||
labelLocation->setText(res->displayName().trimmed());
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
void MainWindow::on_buttonDownload_clicked() {
|
||||
static QString dir; // = map->cachePath();
|
||||
auto d = QFileDialog::getExistingDirectory(nullptr, tr("Select directory"), dir);
|
||||
if (d.isEmpty()) return;
|
||||
dir = d;
|
||||
bool ok = false;
|
||||
int maxzl = map->getMaximumZoomLevel();
|
||||
int curzl = map->getCurrentZoomLevel();
|
||||
int tzl = QInputDialog::getInt(nullptr,
|
||||
windowTitle(),
|
||||
tr("Select maximum zoom level:"),
|
||||
qMin(maxzl, curzl + 3),
|
||||
qMin(maxzl, curzl + 1),
|
||||
maxzl,
|
||||
1,
|
||||
&ok);
|
||||
if (!ok) return;
|
||||
auto prevcd = map->cachePath();
|
||||
map->setCachePath(dir);
|
||||
map->downloadCurrentView(tzl);
|
||||
map->setCachePath(prevcd);
|
||||
}
|
||||
Reference in New Issue
Block a user