void MapBox::addFakeRoute(const QList<QGeoCoordinate> &waypoints, int segments) { QGeoRoute route; int index = 0; QGeoRouteSegment lastSegment; for (int i = 0; i < segments; ++i) { QGeoRouteSegment segment; QList<QGeoCoordinate> path; int limit = (waypoints.size() * (i + 1)) / segments; for (; index < limit; ++index) path.append(waypoints.at(index)); segment.setPath(path); if (i == 0) route.setFirstRouteSegment(segment); else lastSegment.setNextRouteSegment(segment); lastSegment = segment; } QPen pen(QColor(0, 0, 255, 127)); // blue, semi-transparent pen.setWidth(7); //pen.setCosmetic(true); pen.setCapStyle(Qt::RoundCap); QGeoMapRouteObject * routeObject = new QGeoMapRouteObject(route); routeObject->setPen(pen); m_mapWidget->addMapObject(routeObject); }
void QDeclarativeGeoRoute::init() { QGeoRouteSegment segment = route_.firstRouteSegment(); while (segment.isValid()) { segments_.append(new QDeclarativeGeoRouteSegment(segment, this)); segment = segment.nextRouteSegment(); } }
void QDeclarativeGeoRoute::init() { QGeoRouteSegment segment = route_.firstRouteSegment(); while (segment.isValid()) { QDeclarativeGeoRouteSegment *routeSegment = new QDeclarativeGeoRouteSegment(segment, this); QQmlEngine::setContextForObject(routeSegment, QQmlEngine::contextForObject(this)); segments_.append(routeSegment); segment = segment.nextRouteSegment(); } }
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; }
void tst_QGeoRouteSegment::nextroutesegment() { QGeoRouteSegment *qgeoroutesegmentcopy = new QGeoRouteSegment(); qgeoroutesegmentcopy->setDistance(45.34); qgeoroutesegment->setNextRouteSegment(*qgeoroutesegmentcopy); QCOMPARE(qgeoroutesegment->nextRouteSegment(),*qgeoroutesegmentcopy); QCOMPARE((qgeoroutesegment->nextRouteSegment()).distance(),qgeoroutesegmentcopy->distance()); delete qgeoroutesegmentcopy; }
QDeclarativeGeoRoute::QDeclarativeGeoRoute(const QGeoRoute &route, QObject *parent) : QObject(parent), route_(route) { bounds_ = new QDeclarativeGeoBoundingBox(route.bounds(), this); for (int i = 0; i < route_.path().size(); ++i) path_.append(new QDeclarativeCoordinate(route_.path().at(i), this)); QGeoRouteSegment segment = route_.firstRouteSegment(); while (segment.isValid()) { segments_.append(new QDeclarativeGeoRouteSegment(segment, this)); segment = segment.nextRouteSegment(); } }
void RoutePresenter::showRoute(QTreeWidgetItem* top, const QGeoRoute& route) { QTreeWidgetItem* routeItem = new QTreeWidgetItem(top); routeItem->setText(0, "route"); QTreeWidgetItem* idItem = 0; if (!route.routeId().isEmpty()) { idItem = new QTreeWidgetItem(routeItem); idItem->setText(0, "id"); idItem->setText(1, route.routeId()); } QTreeWidgetItem* modeItem = new QTreeWidgetItem(routeItem); modeItem->setText(0, "mode"); showModes(modeItem, route.request(), route.travelMode()); QTreeWidgetItem* distanceItem = new QTreeWidgetItem(routeItem); distanceItem->setText(0, "distance"); distanceItem->setText(1, QString().setNum(route.distance())); showBoundingBox(routeItem, route.bounds()); QTreeWidgetItem* wayPointsItem = new QTreeWidgetItem(routeItem); QString overviewLabel = "overview"; if (route.path().count() > 100) overviewLabel += "(100)"; wayPointsItem->setText(0, overviewLabel); showPoints(wayPointsItem, route.path()); QList<QGeoRouteSegment> segments; QGeoRouteSegment segment = route.firstRouteSegment(); while (segment.isValid()) { segments << segment; segment = segment.nextRouteSegment(); } QTreeWidgetItem* segmentsItem = new QTreeWidgetItem(routeItem); QString segmentsLabel = "segments"; if (segments.length() > 100) segmentsLabel += "(100)"; segmentsItem->setText(0, segmentsLabel); segmentsItem->setText(1, QString().setNum(segments.length())); for (int i = 0; i < segments.length() && i < 100; ++i) { showRouteSegment(segmentsItem, segments[i]); } }
bool QGeoRouteXmlParser::postProcessRoute(QGeoRoute *route) { QList<QGeoRouteSegment> routesegments; //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 (routesegments.size() > 0) { route->setFirstRouteSegment(routesegments.at(0)); for (int i = 0; i < routesegments.size() - 1; ++i) routesegments[i].setNextRouteSegment(routesegments.at(i + 1)); } maneuvers.clear(); segments.clear(); return true; }
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()); } }