void tst_QGeoRouteSegment::copy_constructor() { QGeoRouteSegment *qgeoroutesegmentcopy = new QGeoRouteSegment (*qgeoroutesegment); QCOMPARE(*qgeoroutesegment,*qgeoroutesegmentcopy); QCOMPARE(qgeoroutesegmentcopy->distance(), qreal(0.0)); QCOMPARE(qgeoroutesegmentcopy->maneuver(),*qgeomaneuver); QCOMPARE(qgeoroutesegmentcopy->travelTime(),0); delete qgeoroutesegmentcopy; }
bool QGeoRouteXmlParser::postProcessRoute(QGeoRoute *route) { QList<QGeoRouteSegment> routeSegments; int maneuverIndex = 0; for (int i = 0; i < segments.count(); ++i) { while ((maneuverIndex < maneuvers.size()) && maneuvers.at(maneuverIndex).toId.isEmpty()) { QGeoRouteSegment segment; segment.setManeuver(maneuvers.at(maneuverIndex).maneuver); QList<QGeoCoordinate> path; // use instruction position as one point segment path path.append(maneuvers.at(maneuverIndex).maneuver.position()); segment.setPath(path); routeSegments.append(segment); ++maneuverIndex; } QGeoRouteSegment segment = segments.at(i).segment; if ((maneuverIndex < maneuvers.size()) && segments.at(i).id == maneuvers.at(maneuverIndex).toId) { segment.setManeuver(maneuvers.at(maneuverIndex).maneuver); ++maneuverIndex; } routeSegments.append(segment); } QList<QGeoRouteSegment> compactedRouteSegments; compactedRouteSegments.append(routeSegments.first()); routeSegments.removeFirst(); while (routeSegments.size() > 0) { QGeoRouteSegment segment = routeSegments.first(); routeSegments.removeFirst(); QGeoRouteSegment lastSegment = compactedRouteSegments.last(); if (lastSegment.maneuver().isValid()) compactedRouteSegments.append(segment); else { compactedRouteSegments.removeLast(); lastSegment.setDistance(lastSegment.distance() + segment.distance()); lastSegment.setTravelTime(lastSegment.travelTime() + segment.travelTime()); QList<QGeoCoordinate> path = lastSegment.path(); path.append(segment.path()); lastSegment.setPath(path); lastSegment.setManeuver(segment.maneuver()); compactedRouteSegments.append(lastSegment); } } // //Add the first instruction as starting point // if (maneuvers.count() > 0) { // QGeoRouteSegment segment; // segment.setManeuver(maneuvers[0].maneuver); // QList<QGeoCoordinate> path; // use instruction position as one point segment path // path.append(maneuvers[0].maneuver.position()); // segment.setPath(path); // routesegments.append(segment); // maneuvers.removeAt(0); // } // for (int i = 0; i < segments.count(); ++i) { // if (segments[i].maneuverId.isEmpty()) { // routesegments.append(segments[i].segment); // } else { // for (int j = 0; j < maneuvers.count(); ++j) { // if (maneuvers[j].id == segments[i].maneuverId // && segments[i].segment.maneuver().instructionText().isEmpty()) { // segments[i].segment.setManeuver(maneuvers[j].maneuver); // routesegments.append(segments[i].segment); // maneuvers.removeAt(j); // break; // } else { // //Add orphan instruction into new empty segment // QGeoRouteSegment segment; // segment.setManeuver(maneuvers[j].maneuver); // QList<QGeoCoordinate> path; // use instruction position as one point segment path // path.append(maneuvers[j].maneuver.position()); // segment.setPath(path); // routesegments.append(segment); // maneuvers.removeAt(j); // --j; // } // } // } // } if (compactedRouteSegments.size() > 0) { route->setFirstRouteSegment(compactedRouteSegments.at(0)); for (int i = 0; i < compactedRouteSegments.size() - 1; ++i) compactedRouteSegments[i].setNextRouteSegment(compactedRouteSegments.at(i + 1)); } maneuvers.clear(); segments.clear(); return true; }
void RoutePresenter::showRouteSegment(QTreeWidgetItem* routeItem, const QGeoRouteSegment &segment) { QTreeWidgetItem* segmentItem = new QTreeWidgetItem(routeItem); segmentItem->setText(0, "segment"); QTreeWidgetItem* durationItem = new QTreeWidgetItem(segmentItem); durationItem->setText(0, "duration"); durationItem->setText(1, QString().setNum(segment.travelTime())); QTreeWidgetItem* distanceItem = new QTreeWidgetItem(segmentItem); distanceItem->setText(0, "distance"); distanceItem->setText(1, QString().setNum(segment.distance())); // add back in when more qgeoinstruction classes are made available /* QString s = segment->turn(); if (!s.isEmpty()) { propItem = new QTreeWidgetItem(maneuverItem); propItem->setText(0, "turn"); propItem->setText(1, s); } s = segment->streetName(); if (!s.isEmpty()) { propItem = new QTreeWidgetItem(maneuverItem); propItem->setText(0, "street name"); propItem->setText(1, s); } s = segment->routeName(); if (!s.isEmpty()) { propItem = new QTreeWidgetItem(maneuverItem); propItem->setText(0, "route name"); propItem->setText(1, s); } s = segment->nextStreetName(); if (!s.isEmpty()) { propItem = new QTreeWidgetItem(maneuverItem); propItem->setText(0, "next street name"); propItem->setText(1, s); } s = segment->signPost(); if (!s.isEmpty()) { propItem = new QTreeWidgetItem(maneuverItem); propItem->setText(0, "sign post"); propItem->setText(1, s); } propItem = new QTreeWidgetItem(maneuverItem); propItem->setText(0, "traffic direction"); propItem->setText(1, QString().setNum(segment->trafficDirection())); */ QTreeWidgetItem* pathItem = new QTreeWidgetItem(segmentItem); pathItem->setText(0, "path"); showPoints(pathItem, segment.path()); if (!segment.maneuver().instructionText().isEmpty()) { QTreeWidgetItem* instructionItem = new QTreeWidgetItem(segmentItem); instructionItem->setText(0, "instruction"); QTreeWidgetItem* positionItem = new QTreeWidgetItem(instructionItem); positionItem->setText(0, "position"); QList<QGeoCoordinate> points; points.append(segment.maneuver().position()); showPoints(positionItem, points); QTreeWidgetItem* instructionTextItem = new QTreeWidgetItem(instructionItem); instructionTextItem->setText(0, "text"); instructionTextItem->setText(1, segment.maneuver().instructionText()); } }