File indexing completed on 2024-04-28 03:50:35

0001 // SPDX-License-Identifier: LGPL-2.1-or-later
0002 //
0003 // SPDX-FileCopyrightText: 2012 Dennis Nienhüser <nienhueser@kde.org>
0004 //
0005 
0006 
0007 #ifndef MARBLE_OSMOSRMRUNNER_H
0008 #define MARBLE_OSMOSRMRUNNER_H
0009 
0010 #include "RoutingRunner.h"
0011 #include "GeoDataCoordinates.h"
0012 #include "routing/instructions/RoutingInstruction.h"
0013 
0014 #include <QString>
0015 #include <QNetworkAccessManager>
0016 #include <QNetworkReply>
0017 
0018 namespace Marble
0019 {
0020 
0021 class GeoDataLineString;
0022 
0023 class OSRMRunner : public RoutingRunner
0024 {
0025     Q_OBJECT
0026 
0027 public:
0028     explicit OSRMRunner(QObject *parent = nullptr);
0029 
0030     ~OSRMRunner() override;
0031 
0032     // Overriding MarbleAbstractRunner
0033     void retrieveRoute( const RouteRequest *request ) override;
0034 
0035 private Q_SLOTS:
0036     /** Route data was retrieved via http */
0037     void retrieveData( QNetworkReply *reply );
0038 
0039     /** A network error occurred */
0040     void handleError( QNetworkReply::NetworkError );
0041 
0042     void get();
0043 
0044 private:
0045     static void append( QString* input, const QString &key, const QString &value );
0046 
0047     static GeoDataLineString* decodePolyline( const QString &geometry );
0048 
0049     static RoutingInstruction::TurnType parseTurnType( const QString &instruction );
0050 
0051     GeoDataDocument* parse( const QByteArray &input ) const;
0052 
0053     QNetworkAccessManager m_networkAccessManager;
0054 
0055     QNetworkRequest m_request;
0056 };
0057 
0058 }
0059 
0060 #endif