예제 #1
0
void QXmppStreamFeatures::parse(const QDomElement &element)
{
    m_bindMode = readFeature(element, "bind", ns_bind);
    m_sessionMode = readFeature(element, "session", ns_session);
    m_nonSaslAuthMode = readFeature(element, "auth", ns_authFeature);
    m_tlsMode = readFeature(element, "starttls", ns_tls);
    m_streamManagementMode = readFeature(element, "sm", ns_stream_management);

    // parse advertised compression methods
    QDomElement compression = element.firstChildElement("compression");
    if (compression.namespaceURI() == ns_compressFeature)
    {
        QDomElement subElement = compression.firstChildElement("method");
        while(!subElement.isNull())
        {
            m_compressionMethods << subElement.text();
            subElement = subElement.nextSiblingElement("method");
        }
    }

    // parse advertised SASL Authentication mechanisms
    QDomElement mechs = element.firstChildElement("mechanisms");
    if (mechs.namespaceURI() == ns_sasl)
    {
        QDomElement subElement = mechs.firstChildElement("mechanism");
        while(!subElement.isNull()) {
            m_authMechanisms << subElement.text();
            subElement = subElement.nextSiblingElement("mechanism");
        }
    }
}
예제 #2
0
    osg::Group* readLayer(OGRLayer* ogrLayer, const std::string& name, bool useRandomColorByFeature, bool addGroupPerFeature) const
    {
        if (!ogrLayer)
            return 0;

        osg::Group* layer = new osg::Group;
        layer->setName(ogrLayer->GetLayerDefn()->GetName());
        ogrLayer->ResetReading();

        OGRFeature* ogrFeature = NULL;
        while ((ogrFeature = ogrLayer->GetNextFeature()) != NULL)
        {
            osg::Geode* feature = readFeature(ogrFeature, useRandomColorByFeature);
            if (feature)
            {
                if (addGroupPerFeature)
                {
                    osg::Group* featureGroup = new osg::Group;
                    featureGroup->addChild(feature);
                    layer->addChild(featureGroup);
                }
                else
                {
                    layer->addChild(feature);
                }
            }
            OGRFeature::DestroyFeature( ogrFeature );
        }
        return layer;
    }
예제 #3
0
void readFeature(const char *name, std::vector<float> &feature ){
  std::vector< std::vector<float> > features;
  readFeature( name, features );
  if( features.size() != 1 )
    std::cerr << "Warning in readFeature(): the number of features in " << name << " is not 1. (" << features.size() << ")" << std::endl;  
  feature = features[0];
}
예제 #4
0
bool QgsOgrFeatureIterator::fetchFeature( QgsFeature& feature )
{
  feature.setValid( false );

  if ( mClosed )
    return false;

  if ( !P->mRelevantFieldsForNextFeature )
    ensureRelevantFields();

  if ( mRequest.filterType() == QgsFeatureRequest::FilterFid )
  {
    OGRFeatureH fet = OGR_L_GetFeature( ogrLayer, FID_TO_NUMBER( mRequest.filterFid() ) );
    if ( !fet )
    {
      close();
      return false;
    }

    if ( readFeature( fet, feature ) )
      OGR_F_Destroy( fet );

    feature.setValid( true );
    close(); // the feature has been read: we have finished here
    return true;
  }

  OGRFeatureH fet;

  while (( fet = OGR_L_GetNextFeature( ogrLayer ) ) )
  {
    if ( !readFeature( fet, feature ) )
      continue;

    // we have a feature, end this cycle
    feature.setValid( true );
    OGR_F_Destroy( fet );
    return true;

  } // while

  QgsDebugMsg( "Feature is null" );

  close();
  return false;
}
예제 #5
0
bool QgsOgrFeatureIterator::fetchFeatureWithId( QgsFeatureId id, QgsFeature &feature ) const
{
  feature.setValid( false );
  gdal::ogr_feature_unique_ptr fet;

#if GDAL_VERSION_NUM >= GDAL_COMPUTE_VERSION(2,2,0)
  if ( !QgsOgrProviderUtils::canDriverShareSameDatasetAmongLayers( mSource->mDriverName ) )
  {
    OGRLayerH nextFeatureBelongingLayer;
    bool found = false;
    // First pass: try to read from the last feature, in the hope the dataset
    // returns them in increasing feature id number (and as we use a std::set
    // for mFilterFids, we get them in increasing number by the iterator)
    // Second pass: reset before reading
    for ( int passNumber = 0; passNumber < 2; passNumber++ )
    {
      while ( fet.reset( GDALDatasetGetNextFeature(
                           mConn->ds, &nextFeatureBelongingLayer, nullptr, nullptr, nullptr ) ), fet )
      {
        if ( nextFeatureBelongingLayer == mOgrLayer )
        {
          if ( OGR_F_GetFID( fet.get() ) == FID_TO_NUMBER( id ) )
          {
            found = true;
            break;
          }
        }
      }
      if ( found || passNumber == 1 )
      {
        break;
      }
      GDALDatasetResetReading( mConn->ds );
    }

    if ( !found )
    {
      return false;
    }
  }
  else
#endif
  {
    fet.reset( OGR_L_GetFeature( mOgrLayer, FID_TO_NUMBER( id ) ) );
  }

  if ( !fet )
  {
    return false;
  }

  if ( !readFeature( std::move( fet ), feature ) )
    return false;

  feature.setValid( true );
  geometryToDestinationCrs( feature, mTransform );
  return true;
}
예제 #6
0
bool QgsOgrFeatureIterator::fetchFeature( QgsFeature& feature )
{
  feature.setValid( false );

  if ( mClosed )
    return false;

  if ( mRequest.filterType() == QgsFeatureRequest::FilterFid )
  {
    OGRFeatureH fet = OGR_L_GetFeature( ogrLayer, FID_TO_NUMBER( mRequest.filterFid() ) );
    if ( !fet )
    {
      close();
      return false;
    }

    if ( readFeature( fet, feature ) )
      OGR_F_Destroy( fet );

    feature.setValid( true );
    close(); // the feature has been read: we have finished here
    return true;
  }

  OGRFeatureH fet;

  while (( fet = OGR_L_GetNextFeature( ogrLayer ) ) )
  {
    if ( !readFeature( fet, feature ) )
      continue;

    if ( !mRequest.filterRect().isNull() && !feature.constGeometry() )
      continue;

    // we have a feature, end this cycle
    feature.setValid( true );
    OGR_F_Destroy( fet );
    return true;

  } // while

  close();
  return false;
}
void QXmppStreamFeatures::parse(const QDomElement &element)
{
    m_bindMode = readFeature(element, "bind", ns_bind);
    m_sessionMode = readFeature(element, "session", ns_session);
    m_nonSaslAuthMode = readFeature(element, "auth", ns_authFeature);
    m_tlsMode = readFeature(element, "starttls", ns_tls);

    // parse advertised compression methods
    QDomElement compression = element.firstChildElement("compression");
    if (compression.namespaceURI() == ns_compressFeature)
    {
        QDomElement subElement = compression.firstChildElement("method");
        while(!subElement.isNull())
        {
            if (subElement.text() == QLatin1String("zlib"))
                m_compressionMethods << QXmppConfiguration::ZlibCompression;
            subElement = subElement.nextSiblingElement("method");
        }
    }

    // parse advertised SASL Authentication mechanisms
    QDomElement mechs = element.firstChildElement("mechanisms");
    if (mechs.namespaceURI() == ns_sasl)
    {
        QDomElement subElement = mechs.firstChildElement("mechanism");
        while(!subElement.isNull())
        {
            if (subElement.text() == QLatin1String("PLAIN"))
                m_authMechanisms << QXmppConfiguration::SASLPlain;
            else if (subElement.text() == QLatin1String("DIGEST-MD5"))
                m_authMechanisms << QXmppConfiguration::SASLDigestMD5;
            else if (subElement.text() == QLatin1String("ANONYMOUS"))
                m_authMechanisms << QXmppConfiguration::SASLAnonymous;
            else if (subElement.text() == QLatin1String("X-FACEBOOK-PLATFORM"))
                m_authMechanisms << QXmppConfiguration::SASLXFacebookPlatform;
            subElement = subElement.nextSiblingElement("mechanism");
        }
    }
}
예제 #8
0
bool QgsOgrFeatureIterator::checkFeature( gdal::ogr_feature_unique_ptr &fet, QgsFeature &feature )
{
  if ( !readFeature( std::move( fet ), feature ) )
    return false;

  if ( !mFilterRect.isNull() && ( !feature.hasGeometry() || feature.geometry().isEmpty() ) )
    return false;

  // we have a feature, end this cycle
  feature.setValid( true );
  geometryToDestinationCrs( feature, mTransform );
  return true;
}
예제 #9
0
bool QgsOgrFeatureIterator::fetchFeatureWithId( QgsFeatureId id, QgsFeature& feature ) const
{
  feature.setValid( false );
  OGRFeatureH fet = OGR_L_GetFeature( ogrLayer, FID_TO_NUMBER( id ) );
  if ( !fet )
  {
    return false;
  }

  if ( readFeature( fet, feature ) )
    OGR_F_Destroy( fet );

  feature.setValid( true );
  return true;
}
예제 #10
0
bool QgsOgrFeatureIterator::fetchFeature( QgsFeature& feature )
{
  feature.setValid( false );

  if ( mClosed || !ogrLayer )
    return false;

  if ( mRequest.filterType() == QgsFeatureRequest::FilterFid )
  {
    bool result = fetchFeatureWithId( mRequest.filterFid(), feature );
    close(); // the feature has been read or was not found: we have finished here
    return result;
  }
  else if ( mRequest.filterType() == QgsFeatureRequest::FilterFids )
  {
    while ( mFilterFidsIt != mFilterFids.constEnd() )
    {
      QgsFeatureId nextId = *mFilterFidsIt;
      mFilterFidsIt++;

      if ( fetchFeatureWithId( nextId, feature ) )
        return true;
    }
    close();
    return false;
  }

  OGRFeatureH fet;

  while (( fet = OGR_L_GetNextFeature( ogrLayer ) ) )
  {
    if ( !readFeature( fet, feature ) )
      continue;
    else
      OGR_F_Destroy( fet );

    if ( !mRequest.filterRect().isNull() && !feature.hasGeometry() )
      continue;

    // we have a feature, end this cycle
    feature.setValid( true );
    return true;

  } // while

  close();
  return false;
}
예제 #11
0
bool QgsOgrFeatureIterator::nextFeature( QgsFeature& feature )
{
  feature.setValid( false );

  if ( mClosed )
    return false;

  if ( !P->mRelevantFieldsForNextFeature )
    ensureRelevantFields();

  if ( mRequest.filterType() == QgsFeatureRequest::FilterFid )
  {
    OGRFeatureH fet = OGR_L_GetFeature( P->ogrLayer, FID_TO_NUMBER( mRequest.filterFid() ) );
    if ( !fet )
    {
      close();
      return false;
    }

    // skip features without geometry
    if ( !OGR_F_GetGeometryRef( fet ) && !P->mFetchFeaturesWithoutGeom )
    {
      OGR_F_Destroy( fet );
      close();
      return false;
    }

    readFeature( fet, feature );
    feature.setValid( true );
    close(); // the feature has been read: we have finished here
    return true;
  }

  OGRFeatureH fet;
  QgsRectangle selectionRect;

  while (( fet = OGR_L_GetNextFeature( P->ogrLayer ) ) )
  {
    // skip features without geometry
    if ( !P->mFetchFeaturesWithoutGeom && !OGR_F_GetGeometryRef( fet ) )
    {
      OGR_F_Destroy( fet );
      continue;
    }

    readFeature( fet, feature );

    if ( mRequest.flags() & QgsFeatureRequest::ExactIntersect )
    {
      //precise test for intersection with search rectangle
      //first make QgsRectangle from OGRPolygon
      OGREnvelope env;
      memset( &env, 0, sizeof( env ) );
      if ( mSelectionRectangle )
        OGR_G_GetEnvelope( mSelectionRectangle, &env );
      if ( env.MinX != 0 || env.MinY != 0 || env.MaxX != 0 || env.MaxY != 0 ) //if envelope is invalid, skip the precise intersection test
      {
        selectionRect.set( env.MinX, env.MinY, env.MaxX, env.MaxY );
        if ( !feature.geometry() || !feature.geometry()->intersects( selectionRect ) )
        {
          OGR_F_Destroy( fet );
          continue;
        }
      }
    }

    // we have a feature, end this cycle
    feature.setValid( true );
    OGR_F_Destroy( fet );
    return true;

  } // while

  QgsDebugMsg( "Feature is null" );

  close();
  return false;
}
예제 #12
0
int main(int argc, char** argv){
  if( argc != 3 ){
    std::cerr << "usage: " << argv[0] << " [path] <registration_num>" << std::endl;
    exit( EXIT_FAILURE );
  }
  const int file_num = atoi( argv[2] );
  char tmpname[ 1000 ];
  
  PCA pca( false );
  std::vector< std::vector<float> > feature;
  for( int i=0; i<file_num; i++ ){
    sprintf( tmpname, "%s/scene/Features/%05d.pcd", argv[1], i );
    readFeature( tmpname, feature );
    const int hist_num = feature.size();

    for( int h=0; h<hist_num; h++ ){
      //if( !if_zero_vec( feature[ h ] ) ){ 
      pca.addData( feature[ h ] );

      // std::vector<float> feature_rotate;
      // std::vector<float> feature_rotate_pre = feature[ h ];
      // std::vector<float> feature_rotate_pre2;
      
      // for(int t=0;t<3;t++){
      //   rotateFeature90( feature_rotate,feature_rotate_pre,R_MODE_2);
      //   pca.addData( feature_rotate );
      //   feature_rotate_pre = feature_rotate;
      // }
      
      // rotateFeature90( feature_rotate,feature[ h ],R_MODE_3);
      // pca.addData( feature_rotate );
      // feature_rotate_pre  = feature_rotate;
      // feature_rotate_pre2 = feature_rotate;
	
      // for(int t=0;t<3;t++){
      //   rotateFeature90( feature_rotate,feature_rotate_pre,R_MODE_2);
      // pca.addData( feature_rotate );
      // feature_rotate_pre = feature_rotate;
      // }
	
      // rotateFeature90( feature_rotate,feature_rotate_pre2,R_MODE_3);
      // pca.addData( feature_rotate );
      // feature_rotate_pre = feature_rotate;
      // feature_rotate_pre2 = feature_rotate;
	
      // for(int t=0;t<3;t++){
      //   rotateFeature90( feature_rotate,feature_rotate_pre,R_MODE_2);
      //   pca.addData( feature_rotate );
      //   feature_rotate_pre = feature_rotate;
      // }
	
      // rotateFeature90( feature_rotate,feature_rotate_pre2,R_MODE_3);
      // pca.addData( feature_rotate );
      // feature_rotate_pre = feature_rotate;
	
      // for(int t=0;t<3;t++){
      //   rotateFeature90( feature_rotate,feature_rotate_pre,R_MODE_2);
      //   pca.addData( feature_rotate );
      //   feature_rotate_pre = feature_rotate;
      // }
	
      // rotateFeature90( feature_rotate,feature[ h ],R_MODE_1);
      // pca.addData( feature_rotate );
      // feature_rotate_pre = feature_rotate;
	
      // for(int t=0;t<3;t++){
      //   rotateFeature90( feature_rotate,feature_rotate_pre,R_MODE_2);
      //   pca.addData( feature_rotate );
      //   feature_rotate_pre = feature_rotate;
      // }
	
      // rotateFeature90( feature_rotate,feature[ h ],R_MODE_4);
      // pca.addData( feature_rotate );
      // feature_rotate_pre = feature_rotate;
	
      // for(int t=0;t<3;t++){
      //   rotateFeature90( feature_rotate,feature_rotate_pre,R_MODE_2);
      //   pca.addData( feature_rotate );
      //   feature_rotate_pre = feature_rotate;
      // }
      //}
    }
  }

  //* solve PCA and write results
  pca.solve();
  sprintf( tmpname, "%s/scene/pca_result", argv[1] );
  pca.write( tmpname, ASCII_MODE_P );

  return 0;
}