void MainWindow::routeCalculated(const Graph::Route& route, double duration) { uint32_t distance = route.distance/1000; uint32_t travelMinutes = route.time/60; uint32_t travelSeconds = ((uint32_t)route.time)%60; uint32_t calcTime = duration; m_statsLabel->setText(QString("Distance: %1m\nTraveltime: %2m %3s\nCalculationtime: %4ms").arg(distance).arg(travelMinutes).arg(travelSeconds).arg(calcTime)); emit routeCalculated(route); }
void GosmoreRunner::retrieveRoute( const RouteRequest *route ) { if ( !d->m_gosmoreMapFile.exists() ) { emit routeCalculated( nullptr ); return; } GeoDataLineString* wayPoints = new GeoDataLineString; QByteArray completeOutput; for( int i=0; i<route->size()-1; ++i ) { QString queryString = "flat=%1&flon=%2&tlat=%3&tlon=%4&fastest=1&v=motorcar"; GeoDataCoordinates source = route->at(i); double fLon = source.longitude( GeoDataCoordinates::Degree ); double fLat = source.latitude( GeoDataCoordinates::Degree ); queryString = queryString.arg(fLat, 0, 'f', 8).arg(fLon, 0, 'f', 8); GeoDataCoordinates destination = route->at(i+1); double tLon = destination.longitude( GeoDataCoordinates::Degree ); double tLat = destination.latitude( GeoDataCoordinates::Degree ); queryString = queryString.arg(tLat, 0, 'f', 8).arg(tLon, 0, 'f', 8); QByteArray output; if ( d->m_partialRoutes.contains( queryString ) ) { output = d->m_partialRoutes[queryString]; } else { output = d->retrieveWaypoints( queryString ); } GeoDataLineString points = d->parseGosmoreOutput( output ); d->merge( wayPoints, points ); completeOutput.append( output ); } QVector<GeoDataPlacemark*> instructions = d->parseGosmoreInstructions( completeOutput ); GeoDataDocument* result = d->createDocument( wayPoints, instructions ); emit routeCalculated( result ); }
void MapQuestRunner::retrieveData( QNetworkReply *reply ) { if ( reply->isFinished() ) { QByteArray data = reply->readAll(); reply->deleteLater(); //mDebug() << "Download completed: " << data; GeoDataDocument* document = parse( data ); if ( !document ) { mDebug() << "Failed to parse the downloaded route data" << data; } emit routeCalculated( document ); } }
void YoursRunner::retrieveData( QNetworkReply *reply ) { if ( reply->isFinished() ) { QByteArray data = reply->readAll(); reply->deleteLater(); //mDebug() << "Download completed: " << data; GeoDataDocument* result = parse( data ); if ( result ) { QString name = "%1 %2 (Yours)"; QString unit = "m"; qreal length = distance( result ); if ( length == 0.0 ) { delete result; emit routeCalculated( 0 ); return; } else if ( length >= 1000 ) { length /= 1000.0; unit = "km"; } result->setName( name.arg( length, 0, 'f', 1 ).arg( unit ) ); } emit routeCalculated( result ); } }
void MarbleAbstractRunner::retrieveRoute( const RouteRequest* ) { // dummy implementation emit routeCalculated( 0 ); }
void YoursRunner::handleError( QNetworkReply::NetworkError error ) { mDebug() << " Error when retrieving yournavigation.org route: " << error; emit routeCalculated( 0 ); }
MainWindow::MainWindow(const StatePtr & state ): QMainWindow(), m_state(state), m_br(this, state) { m_map = new MarbleMap(this, m_state); m_map->setMapThemeId("earth/openstreetmap/openstreetmap.dgml"); m_nodesTableModel = new GraphNodesTableModel(this, m_state); m_edgesTableModel = new GraphEdgesTableModel(this, m_state); m_nodesTableView = new QTableView(this); m_nodesTableView->setModel(m_nodesTableModel); m_edgesTableView = new QTableView(this); m_edgesTableView->setModel(m_edgesTableModel); m_nodesTableView->horizontalHeader()->setResizeMode(QHeaderView::ResizeMode::Stretch); m_edgesTableView->horizontalHeader()->setResizeMode(QHeaderView::ResizeMode::Stretch); QHBoxLayout * cfgLayout = new QHBoxLayout(this); m_routerSelection = new QComboBox(this); m_routerSelection->addItem("Hop distance", QVariant(Router::HOP_DISTANCE)); m_routerSelection->addItem("Dijkstra std::set distance", QVariant(Router::DIJKSTRA_SET_DISTANCE)); m_routerSelection->addItem("Dijkstra std::set time", QVariant(Router::DIJKSTRA_SET_TIME)); m_routerSelection->addItem("Dijkstra std::priority_queue distance", QVariant(Router::DIJKSTRA_PRIO_QUEUE_DISTANCE)); m_routerSelection->addItem("Dijkstra std::priority_queue time", QVariant(Router::DIJKSTRA_PRIO_QUEUE_TIME)); m_accessType = new QComboBox(this); m_accessType->addItem("Foot", Graph::Edge::AT_FOOT); m_accessType->addItem("Bike", Graph::Edge::AT_BIKE); m_accessType->addItem("Car", Graph::Edge::AT_CAR); cfgLayout->addWidget(m_routerSelection); cfgLayout->addWidget(m_accessType); QWidget * cfgWidget = new QWidget(this); cfgWidget->setLayout(cfgLayout); m_statsLabel = new QLabel(this); QHBoxLayout * cfgStatsLayout = new QHBoxLayout(this); cfgStatsLayout->addWidget(cfgWidget); cfgStatsLayout->addWidget(m_statsLabel); QWidget * cfgStatsWidget = new QWidget(this); cfgStatsWidget->setLayout(cfgStatsLayout); QVBoxLayout * leftLayout = new QVBoxLayout(this); leftLayout->addWidget(m_nodesTableView, 5); leftLayout->addWidget(m_edgesTableView, 5); leftLayout->addWidget(cfgStatsWidget, 1); QWidget * leftLayoutWidget = new QWidget(this); leftLayoutWidget->setLayout(leftLayout); QHBoxLayout * mainLayout = new QHBoxLayout(this); mainLayout->addWidget(leftLayoutWidget, 2); mainLayout->addWidget(m_map, 3); connect(m_nodesTableView, SIGNAL(doubleClicked(QModelIndex)), m_nodesTableModel, SLOT(doubleClicked(QModelIndex))); connect(m_nodesTableView->horizontalHeader(), SIGNAL(sectionClicked(int)), m_nodesTableModel, SLOT(headerClicked(int))); connect(m_edgesTableView, SIGNAL(doubleClicked(QModelIndex)), m_edgesTableModel, SLOT(doubleClicked(QModelIndex))); connect(m_edgesTableView->horizontalHeader(), SIGNAL(sectionClicked(int)), m_edgesTableModel, SLOT(headerClicked(int))); connect(m_nodesTableModel, SIGNAL(startEdgeClicked(uint32_t)), this, SLOT(scrollToNodeEdges(uint32_t))); connect(m_nodesTableModel, SIGNAL(toggleNodeClicked(uint32_t)), this, SLOT(toggleNode(uint32_t))); connect(m_nodesTableModel, SIGNAL(clearShownNodesClicked()), this, SLOT(clearShownNodes())); connect(m_nodesTableModel, SIGNAL(nodeCoordinateClicked(uint32_t)), m_map, SLOT(zoomToNode(uint32_t))); connect(this, SIGNAL(shownNodesChanged()), m_nodesTableModel, SLOT(resetData())); connect(m_edgesTableModel, SIGNAL(sourceNodeClicked(uint32_t)), this, SLOT(scrollToNode(uint32_t))); connect(m_edgesTableModel, SIGNAL(targetNodeClicked(uint32_t)), this, SLOT(scrollToNode(uint32_t))); connect(m_edgesTableModel, SIGNAL(toggleEdgeClicked(uint32_t)), this, SLOT(toggleEdge(uint32_t))); connect(m_edgesTableModel, SIGNAL(clearShownEdgesClicked()), this, SLOT(clearShownEdges())); connect(this, SIGNAL(shownEdgesChanged()), m_edgesTableModel, SLOT(resetData())); connect(m_routerSelection, SIGNAL(currentIndexChanged(int)), this, SLOT(routerConfigChanged())); connect(m_accessType, SIGNAL(currentIndexChanged(int)), this, SLOT(routerConfigChanged())); //connect background router connect(&m_br, SIGNAL(routeCalculated(Graph::Route,double)), this, SLOT(routeCalculated(Graph::Route,double))); //connect marble map connect(m_map, SIGNAL(calculateRoute(double,double,double,double)), this, SLOT(calculateRoute(double,double,double,double))); connect(this, SIGNAL(routeCalculated(Graph::Route)), m_map, SLOT(displayRoute(Graph::Route))); connect(this, SIGNAL(shownEdgesChanged()), m_map, SLOT(shownEdgesChanged())); connect(this, SIGNAL(shownNodesChanged()), m_map, SLOT(shownNodesChanged())); //set the router, will also correctly initalize it m_routerSelection->setCurrentIndex(0); m_accessType->setCurrentIndex(0); routerConfigChanged(); QWidget * centralWidget = new QWidget(this); centralWidget->setLayout(mainLayout); setCentralWidget(centralWidget); }