Example #1
0
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);
}
Example #2
0
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 );
}
Example #3
0
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 );
    }
}
Example #4
0
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 );
}
Example #6
0
void YoursRunner::handleError( QNetworkReply::NetworkError error )
{
    mDebug() << " Error when retrieving yournavigation.org route: " << error;
    emit routeCalculated( 0 );
}
Example #7
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);
	
}