void BBCItemGetter::work() { if ( m_items.isEmpty() ) { sleep( 1 ); return; } m_scheduleMutex.lock(); GeoDataLatLonAltBox box = m_scheduledBox; qint32 number = m_scheduledNumber; m_scheduledBox = GeoDataLatLonAltBox(); m_scheduledNumber = 0; m_scheduleMutex.unlock(); qint32 fetched = 0; QList<BBCStation>::ConstIterator it = m_items.constBegin(); QList<BBCStation>::ConstIterator end = m_items.constEnd(); while ( fetched < number && it != end ) { if ( box.contains( it->coordinate() ) ) { emit foundStation( (*it) ); fetched++; } ++it; } }
void LocalDatabaseRunner::search( const QString &searchTerm, const GeoDataLatLonAltBox &preferred ) { QVector<GeoDataPlacemark*> vector; if (model()) { const QAbstractItemModel * placemarkModel = model()->placemarkModel(); if (placemarkModel) { QModelIndexList resultList; QModelIndex firstIndex = placemarkModel->index( 0, 0 ); resultList = placemarkModel->match( firstIndex, Qt::DisplayRole, searchTerm, -1, Qt::MatchStartsWith ); foreach ( const QModelIndex& index, resultList ) { if( !index.isValid() ) { mDebug() << "invalid index!!!"; continue; } GeoDataPlacemark *placemark = dynamic_cast<GeoDataPlacemark*>(qvariant_cast<GeoDataObject*>( index.data( MarblePlacemarkModel::ObjectPointerRole ))); if ( placemark && ( preferred.isEmpty() || preferred.contains( placemark->coordinate() ) ) ) { vector.append( new GeoDataPlacemark( *placemark )); } } } } emit searchFinished( vector ); }
void TestGeoDataLatLonAltBox::testContains() { GeoDataLatLonAltBox const largeBox = GeoDataLatLonAltBox::fromLineString( GeoDataLineString() << GeoDataCoordinates( -20.0, +10.0, 15.0, GeoDataCoordinates::Degree ) << GeoDataCoordinates( +20.0, -10.0, 25.0, GeoDataCoordinates::Degree ) ); GeoDataLatLonAltBox const smallBox = GeoDataLatLonAltBox::fromLineString( GeoDataLineString() << GeoDataCoordinates( -2.0, +1.0, 18.0, GeoDataCoordinates::Degree ) << GeoDataCoordinates( +2.0, -1.0, 22.0, GeoDataCoordinates::Degree ) ); QVERIFY( largeBox.contains( GeoDataCoordinates( 5.0, 5.0, 20.0, GeoDataCoordinates::Degree ) ) ); QVERIFY( largeBox.contains( smallBox ) ); QVERIFY( largeBox.contains( largeBox ) ); QVERIFY( !smallBox.contains( largeBox ) ); QVERIFY( smallBox.contains( GeoDataCoordinates( 0.0, 0.0, 20.0, GeoDataCoordinates::Degree ) ) ); QVERIFY( !largeBox.contains( GeoDataCoordinates( 5.0, 5.0, 30.0, GeoDataCoordinates::Degree ) ) ); QVERIFY( !largeBox.contains( GeoDataCoordinates( 5.0, 5.0, 10.0, GeoDataCoordinates::Degree ) ) ); QVERIFY( !largeBox.contains( GeoDataCoordinates( 35.0, 5.0, 20.0, GeoDataCoordinates::Degree ) ) ); QVERIFY( !largeBox.contains( GeoDataCoordinates( -35.0, 5.0, 20.0, GeoDataCoordinates::Degree ) ) ); QVERIFY( !largeBox.contains( GeoDataCoordinates( 5.0, 35.0, 20.0, GeoDataCoordinates::Degree ) ) ); QVERIFY( !largeBox.contains( GeoDataCoordinates( 5.0, -35.0, 20.0, GeoDataCoordinates::Degree ) ) ); }