bool QgsGPXFeatureIterator::fetchFeature( QgsFeature& feature ) { feature.setValid( false ); if ( mClosed ) return false; if ( mRequest.filterType() == QgsFeatureRequest::FilterFid ) { bool res = readFid( feature ); close(); return res; } if ( mSource->mFeatureType == QgsGPXProvider::WaypointType ) { // go through the list of waypoints and return the first one that is in // the bounds rectangle for ( ; mWptIter != mSource->data->waypointsEnd(); ++mWptIter ) { if ( readWaypoint( *mWptIter, feature ) ) { ++mWptIter; return true; } } } else if ( mSource->mFeatureType == QgsGPXProvider::RouteType ) { // go through the routes and return the first one that is in the bounds // rectangle for ( ; mRteIter != mSource->data->routesEnd(); ++mRteIter ) { if ( readRoute( *mRteIter, feature ) ) { ++mRteIter; return true; } } } else if ( mSource->mFeatureType == QgsGPXProvider::TrackType ) { // go through the tracks and return the first one that is in the bounds // rectangle for ( ; mTrkIter != mSource->data->tracksEnd(); ++mTrkIter ) { if ( readTrack( *mTrkIter, feature ) ) { ++mTrkIter; return true; } } } close(); return false; }
bool QgsGPXFeatureIterator::readFid( QgsFeature& feature ) { if ( mFetchedFid ) return false; mFetchedFid = true; QgsFeatureId fid = mRequest.filterFid(); if ( mSource->mFeatureType == QgsGPXProvider::WaypointType ) { for ( QgsGPSData::WaypointIterator it = mSource->data->waypointsBegin() ; it != mSource->data->waypointsEnd(); ++it ) { if ( it->id == fid ) { readWaypoint( *it, feature ); return true; } } } else if ( mSource->mFeatureType == QgsGPXProvider::RouteType ) { for ( QgsGPSData::RouteIterator it = mSource->data->routesBegin() ; it != mSource->data->routesEnd(); ++it ) { if ( it->id == fid ) { readRoute( *it, feature ); return true; } } } else if ( mSource->mFeatureType == QgsGPXProvider::TrackType ) { for ( QgsGPSData::TrackIterator it = mSource->data->tracksBegin() ; it != mSource->data->tracksEnd(); ++it ) { if ( it->id == fid ) { readTrack( *it, feature ); return true; } } } return false; }
/** *This function write route to .xml file. */ void GPSData::writeRouteXml(QIODevice *device, int round) { xmlwriter.setDevice(device); //Write temp xml (routetemp.xml). if ( round == 0 ) { xmlwriter.writeStartElement("Point"); xmlwriter.writeAttribute("Latitude", QString::number(latitude)); xmlwriter.writeAttribute("Longitude", QString::number(longitude)); xmlwriter.writeAttribute("Altitude", QString::number(altitude)); xmlwriter.writeAttribute("Speed", QString::number(speed)); xmlwriter.writeEndElement();//Point } //Write final xml (route.xml). else if ( round == 1 ) { xmlwriter.writeStartDocument(); xmlwriter.writeStartElement("Route"); xmlwriter.writeAttribute("Start-time", routeStartTime); xmlwriter.writeAttribute("Stop-time", routeStopTime); xmlwriter.writeAttribute("Points", QString::number(roundCounter)); //Open temp xml and read points QFile tempFile("routetemp.xml"); if (!tempFile.open(QIODevice::ReadOnly | QIODevice::Text)) return; QTextStream readRoute(&tempFile); QTextStream writeRoute(device); writeRoute << readRoute.readLine(); tempFile.close();//Close temp xml xmlwriter.writeEndElement();//Route xmlwriter.writeEndDocument(); } }
bool QLandmarkFileHandlerGpx::readGpx() { /* <xsd:complexType name="gpxType"> <xsd:sequence> <xsd:element name="metadata" type="metadataType" minOccurs="0" /> <xsd:element name="wpt" type="wptType" minOccurs="0" maxOccurs="unbounded" /> <xsd:element name="rte" type="rteType" minOccurs="0" maxOccurs="unbounded" /> <xsd:element name="trk" type="trkType" minOccurs="0" maxOccurs="unbounded" /> <xsd:element name="extensions" type="extensionsType" minOccurs="0" /> </xsd:sequence> <xsd:attribute name="version" type="xsd:string" use="required" fixed="1.1" /> <xsd:attribute name="creator" type="xsd:string" use="required" /> </xsd:complexType> */ if (!m_reader->readNextStartElement()) { m_reader->raiseError("Expected a root element named \"gpx\" (no root element found)."); return false; } if (m_reader->name() != "gpx") { m_reader->raiseError(QString("The root element is expected to have the name \"gpx\" (root element was named \"%1\").").arg(m_reader->name().toString())); return false; } if (m_reader->attributes().hasAttribute("version")) { QString version = m_reader->attributes().value("version").toString(); if (version != "1.1") { m_reader->raiseError(QString("Only version 1.1. of the GPX schema is supported (version found was \"%1\").").arg(version)); return false; } } else { m_reader->raiseError("The element \"gpx\" did not have the required attribute \"version\"."); return false; } if (m_reader->attributes().hasAttribute("creator")) { // Not used outside of schema compliance check } else { m_reader->raiseError("The element \"gpx\" did not have the required attribute \"creator\"."); return false; } if (!m_reader->readNextStartElement()) { m_reader->skipCurrentElement(); return true; } if (m_reader->name() == "metadata") { // Not used outside of schema compliance check m_reader->skipCurrentElement(); if (!m_reader->readNextStartElement()) { m_reader->skipCurrentElement(); return true; } } while (m_reader->name() == "wpt") { if (m_cancel && (*m_cancel==true)) { m_errorCode = QLandmarkManager::CancelError; m_errorString = "Import of gpx file was canceled"; return false; } QLandmark landmark; if (!readWaypoint(landmark, "wpt")) { return false; } m_waypoints.append(landmark); if(!m_reader->readNextStartElement()) { m_reader->skipCurrentElement(); return true; } } while (m_reader->name() == "rte") { if (m_cancel && (*m_cancel==true)) { m_errorCode = QLandmarkManager::CancelError; m_errorString = "Import of gpx file was canceled"; return false; } QList<QLandmark> route; if (!readRoute(route)) return false; m_routes.append(route); if(!m_reader->readNextStartElement()) { m_reader->skipCurrentElement(); return true; } } while (m_reader->name() == "trk") { if (m_cancel && (*m_cancel==true)) { m_errorCode = QLandmarkManager::CancelError; m_errorString = "Import of gpx file was canceled"; return false; } QList<QLandmark> track; if (!readTrack(track)) return false; m_tracks.append(track); if(!m_reader->readNextStartElement()) { m_reader->skipCurrentElement(); return true; } } if (m_reader->name() == "extensions") { // Not used outside of schema compliance check m_reader->skipCurrentElement(); if (!m_reader->readNextStartElement()) { m_reader->skipCurrentElement(); return true; } } m_reader->raiseError(QString("The element \"gpx\" did not expect a child element named \"%1\" at this point (unknown child element or child element out of order).").arg(m_reader->name().toString())); return false; }
int main (int argc, char **argv) { struct LinkList ll; struct SetCliques scl; struct LinProg lp; struct Problem prob; int effort; if (argc < 8 || argc > 13) { printf ("Usage: %s <link file> <effort> <output format> <output filename> <random seed> <obj type> <lambda> (<clique input file> <lossFile> <epsilon> <routeFile> <flow LB file>)\n", argv[0]); exit(-1); } // read in problem: i.e. single/multipath and list of sources and destinations readInfo(argv[1], &ll, &prob); // how much effort; effort = atoi(argv[2]); // what output format lp.opform = atoi(argv[3]); // Lili added: by default, no constant variables lp.const_var = 0; // Lili added: by default, no variable lower bounds lp.var_LBs = 0; //Modeified by Yi Li to be consistent with lowerbound //if ((prob.multipath == 0) && (lp.opform != OPFORM_LPSOLVE)) { if ((prob.multipath == 0) && ((lp.opform == OPFORM_MATLAB_SPARSE)||(lp.opform == OPFORM_MATLAB))) { printf ("matlab can not solve single path problem\n"); exit(-1); } if (ll.ifmodel != IFMODEL_PROTO) { printf ("upper bound for physical model not implemented yet\n"); exit(1); } srand(atoi(argv[5])); if (strcmp(argv[8], "NULL") == 0) { // find cliques, making a certain number of attempts findCliques (ll, &scl, effort); prob.clique_const_type = CLIQUE_OPT_SCHEDULE; } else { // read cliques from input file argv[7] readCliques(argv[8], ll, &scl); prob.clique_const_type = CLIQUE_802_11; } //printCliques (scl); // open the files needed for output OpenFiles (&(lp.fp), lp.opform, argv[4]); // generate the linear program prob.obj_type = atoi(argv[6]); prob.lambda = atof(argv[7]); if (argc >= 10) readLoss(argv[9], &ll); if (argc >= 11) prob.epsilon = atof(argv[10]); if (argc >= 12) readRoute(argv[11], prob, ll, &lp); if (argc == 13) readFlowLowerBound(argv[12], prob, ll, &lp); genUpperBoundLinProg (ll, scl, prob, &lp); // close output files CloseFiles (&(lp.fp), lp.opform); return 0; }