diff --git a/docs/Doxyfile.local b/docs/Doxyfile.local index 8228606..68314a0 100644 --- a/docs/Doxyfile.local +++ b/docs/Doxyfile.local @@ -1,4 +1,4 @@ -EXCLUDE_PATTERNS += */lib/backends/* */graphql/* */quick/* */qmlplugin/* */tools/* +EXCLUDE_PATTERNS += */lib/backends/* */graphql/* */quick/* */qmlplugin/* */tools/* */lib/gtfs/* PREDEFINED += \ KPUBLICTRANSPORT_EXPORT="" \ KPUBLICTRANSPORT_PROPERTY(type,name,setter)="Q_PROPERTY(type name READ name WRITE setter)" diff --git a/src/lib/CMakeLists.txt b/src/lib/CMakeLists.txt index 8a4c8b1..fe9225d 100644 --- a/src/lib/CMakeLists.txt +++ b/src/lib/CMakeLists.txt @@ -1,148 +1,150 @@ set(kpublictransport_srcs departurereply.cpp departurerequest.cpp journeyreply.cpp journeyrequest.cpp locationreply.cpp locationrequest.cpp manager.cpp reply.cpp requestcontext.cpp vehiclelayoutreply.cpp vehiclelayoutrequest.cpp backends/abstractbackend.cpp backends/cache.cpp backends/deutschebahnbackend.cpp backends/deutschebahnvehiclelayoutparser.cpp backends/efabackend.cpp backends/efaparser.cpp backends/efacompactparser.cpp backends/efaxmlparser.cpp backends/hafasbackend.cpp backends/hafasparser.cpp backends/hafasmgatebackend.cpp backends/hafasmgateparser.cpp backends/hafasquerybackend.cpp backends/hafasqueryparser.cpp backends/navitiabackend.cpp backends/navitiaparser.cpp backends/opentripplannerbackend.cpp backends/otp/otp.qrc backends/scopedxmlstreamreader.cpp datatypes/attribution.cpp datatypes/attributionutil.cpp datatypes/backend.cpp datatypes/departure.cpp datatypes/departureutil.cpp datatypes/disruption.cpp datatypes/journey.cpp datatypes/journeyutil.cpp datatypes/json.cpp datatypes/line.cpp datatypes/location.cpp datatypes/locationutil.cpp datatypes/mergeutil.cpp datatypes/notesutil.cpp datatypes/platform.cpp datatypes/platformutils.cpp datatypes/vehicle.cpp + gtfs/hvt.cpp + models/abstractquerymodel.cpp models/backendmodel.cpp models/departurequerymodel.cpp models/journeyquerymodel.cpp models/locationquerymodel.cpp models/vehiclelayoutquerymodel.cpp networks/networks.qrc ) ecm_qt_declare_logging_category(kpublictransport_srcs HEADER logging.h IDENTIFIER KPublicTransport::Log CATEGORY_NAME org.kde.kpublictransport) add_library(KPublicTransport ${kpublictransport_srcs}) generate_export_header(KPublicTransport BASE_NAME KPublicTransport) set_target_properties(KPublicTransport PROPERTIES VERSION ${KPUBLICTRANSPORT_VERSION_STRING} SOVERSION ${KPUBLICTRANSPORT_SOVERSION} EXPORT_NAME KPublicTransport ) target_include_directories(KPublicTransport PUBLIC "$") target_link_libraries(KPublicTransport PUBLIC Qt5::Gui PRIVATE KGraphQL Qt5::Network ZLIB::ZLIB ) ecm_generate_headers(KPublicTransport_FORWARDING_HEADERS HEADER_NAMES DepartureReply DepartureRequest JourneyReply JourneyRequest LocationReply LocationRequest Manager Reply VehicleLayoutReply VehicleLayoutRequest PREFIX KPublicTransport REQUIRED_HEADERS KPublicTransport_HEADERS ) # # ### for testing only ecm_generate_headers(KPublicTransport_Backends_FORWARDING_HEADERS HEADER_NAMES Cache HafasMgateParser NavitiaParser PREFIX KPublicTransport REQUIRED_HEADERS KPublicTransport_Backends_HEADERS RELATIVE backends ) ecm_generate_headers(KPublicTransport_Datatypes_FORWARDING_HEADERS HEADER_NAMES Attribution Backend Datatypes Departure Disruption Journey Line Location Platform Vehicle PREFIX KPublicTransport REQUIRED_HEADERS KPublicTransport_Datatypes_HEADERS RELATIVE datatypes ) ecm_generate_headers(KPublicTransport_Models_FORWARDING_HEADERS HEADER_NAMES AbstractQueryModel BackendModel DepartureQueryModel JourneyQueryModel LocationQueryModel VehicleLayoutQueryModel PREFIX KPublicTransport REQUIRED_HEADERS KPublicTransport_Models_HEADERS RELATIVE models ) install(TARGETS KPublicTransport EXPORT KPublicTransportTargets ${INSTALL_TARGETS_DEFAULT_ARGS}) install(FILES org_kde_kpublictransport.categories DESTINATION ${KDE_INSTALL_LOGGINGCATEGORIESDIR}) install(FILES ${KPublicTransport_FORWARDING_HEADERS} ${KPublicTransport_Datatypes_FORWARDING_HEADERS} ${KPublicTransport_Models_FORWARDING_HEADERS} DESTINATION ${KDE_INSTALL_INCLUDEDIR}/KPublicTransport ) install(FILES ${KPublicTransport_HEADERS} ${KPublicTransport_Datatypes_HEADERS} ${KPublicTransport_Models_HEADERS} ${CMAKE_CURRENT_BINARY_DIR}/kpublictransport_export.h DESTINATION ${KDE_INSTALL_INCLUDEDIR}/kpublictransport ) diff --git a/src/lib/gtfs/hvt.cpp b/src/lib/gtfs/hvt.cpp new file mode 100644 index 0000000..d575f0a --- /dev/null +++ b/src/lib/gtfs/hvt.cpp @@ -0,0 +1,101 @@ +/* + Copyright (C) 2020 Volker Krause + + This program is free software; you can redistribute it and/or modify it + under the terms of the GNU Library General Public License as published by + the Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + This program is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public + License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ + +#include "hvt.h" + +#include + +using namespace KPublicTransport; + +Line::Mode Gtfs::Hvt::typeToMode(int hvt) +{ + // individually handled cases - https://developers.google.com/transit/gtfs/reference/extended-route-types + switch (hvt) { + case 101: + case 102: + return Line::LongDistanceTrain; + case 106: + return Line::LocalTrain; + case 109: + return Line::RapidTransit; + case 401: + case 402: + return Line::Metro; + case 403: + return Line::RapidTransit; + case 717: + return Line::Taxi; + case 1502: + return Line::Boat; + } + + // coarse top-level types - https://developers.google.com/transit/gtfs/reference/#routestxt + switch (hvt) { + case 0: + case 5: // cable car + case 6: // TODO gondola + return Line::Tramway; + case 1: + return Line::Metro; + case 2: + return Line::Train; + case 3: + return Line::Bus; + case 4: + return Line::Ferry; + case 7: + return Line::Funicular; + } + + // type ranges - https://developers.google.com/transit/gtfs/reference/extended-route-types + if (hvt >= 100 && hvt < 199) { + return Line::Train; + } + if (hvt >= 200 && hvt < 299) { + return Line::Coach; + } + if (hvt >= 400 && hvt < 499) { + return Line::RapidTransit; + } + if (hvt >= 700 && hvt < 899) { + return Line::Bus; + } + if (hvt >= 900 && hvt < 999) { + return Line::Tramway; + } + if (hvt >= 1000 && hvt < 1099) { + return Line::Boat; + } + if (hvt >= 1100 && hvt < 1199) { + return Line::Air; + } + if (hvt >= 1200 && hvt < 1299) { + return Line::Ferry; + } + if (hvt >= 1300 && hvt < 1399) { + return Line::Tramway; // TODO gondola/aerial lift + } + if (hvt >= 1400 && hvt < 1499) { + return Line::Funicular; + } + if (hvt >= 1500 && hvt < 1599) { + return Line::Taxi; + } + + qDebug() << "encountered unknown GTFS (extended) route type:" << hvt; + return Line::Unknown; +} diff --git a/src/lib/gtfs/hvt.h b/src/lib/gtfs/hvt.h new file mode 100644 index 0000000..97d5325 --- /dev/null +++ b/src/lib/gtfs/hvt.h @@ -0,0 +1,40 @@ +/* + Copyright (C) 2020 Volker Krause + + This program is free software; you can redistribute it and/or modify it + under the terms of the GNU Library General Public License as published by + the Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + This program is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public + License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ + +#ifndef KPUBLICTRANSPORT_GTFS_HVT_H +#define KPUBLICTRANSPORT_GTFS_HVT_H + +#include + +namespace KPublicTransport { +/** GTFS utilities. */ +namespace Gtfs { + +/** Hierarchical vehicle type (HVT) mapping. + * @see https://developers.google.com/transit/gtfs/reference/#routestxt + * @see https://developers.google.com/transit/gtfs/reference/extended-route-types + */ +namespace Hvt +{ + /** Maps the numerical HVT value to a Line::Mode mode. */ + Line::Mode typeToMode(int hvt); +} + +} +} + +#endif // KPUBLICTRANSPORT_GTFS_HVT_H