Partage
  • Partager sur Facebook
  • Partager sur Twitter

Sélection et parcours de feature d'une layer QGIS

Impossibilité de parcourir ou de sélectionner les feature d'une layer

Sujet résolu
    27 octobre 2016 à 17:22:46

    Bonjour à tous,

    J'ai ici un code C++ utilisant l'API QGIS et qui compile parfaitement. Cependant il ne fait pas ce que je voudrais.

    Je souhaiterai que ma fonction duplique simplement ma couche QGIS en entrée. Mais j'ai l'impression qu'il ne rentre pas dans la boucle "for" :

    for(QgsFeature feature : layer_init->selectedFeatures()){...}

     Si quelqu'un aurait une solution, merci d'avance.

    Voici ci-dessous le code en question :

    Fonction qui prend en entrée une couche QGIS et qui la duplique :

    void dupli_timer(QgsVectorLayer *layer_init){
      QgsVectorLayer *layer_dupli = new QgsVectorLayer("point?crs=epsg:4326&field=id:integer", "Point dupliqués",  "memory");
      // Registers the layer
      QgsMapLayerRegistry::instance()->addMapLayer(layer_dupli);
      // Creation de la nouvelle liste
      QgsFeatureList FeatureList2;
      QgsVectorDataProvider *pr2 = layer_dupli->dataProvider();
      long int cont=1; // conteur des points de la couche
      for(QgsFeature feature : layer_init->selectedFeatures()){ // PROBLEME !!!
          // ajout de la feature a la liste 2
          FeatureList2.append(feature);
          QString QS_cont = QString::number(cont);
          QgsMessageLog::instance()->logMessage("Création du point "+QS_cont);
          cont++;
          // AJOUT de la feature list 2 dans la couche
          pr2->addFeatures(FeatureList2);
       }
    }

    Création en dur de la couche à dupliquer et appel à la fonction écrite plus haut :

    // CREATION de la couche initiale qui devra etre rentree en parametre ***************************************************
    
    QgsVectorLayer *layer_init = new QgsVectorLayer("point?crs=epsg:4326&field=id:integer", "Points à dupliquer",  "memory");
    
    // Registers the layer
    QgsMapLayerRegistry::instance()->addMapLayer(layer_init);
    
    QgsFeatureList FeatureList1; // creation de la liste 1 des feature
    QgsMessageLog::instance()->logMessage("Création de la FeatureList1 !\n");
    QgsVectorDataProvider *pr1 = layer_init->dataProvider(); // Creation du DataProvider 1
    
    // REMPLISSAGE de la couche initiale
    
    for(int i=0; i<3; i++){
       for(int j=0; j<3; j++){
          QgsPoint point=QgsPoint(i,j); // creation des points
          QgsGeometry *qpoint = QgsGeometry::fromPoint(point); // creation de la geometrie du point
          QgsFeature Feature_init; // creation de la feature
          Feature_init.setGeometry(qpoint); // ajout du point dans le geometrie de la feature
          FeatureList1.append(Feature_init); // ajout de la feature a la liste 1
       }
    }
    
    pr1->addFeatures(FeatureList1);
    
    //******************************************************************************************************
    dupli_timer(layer_init); // fonction qui duplique la couche avec un timer pour afficher point par point*
    //******************************************************************************************************


    PS: Information de dernière minute, il paraîtrait qu'en fait dans ma boucle "for", je fasse appel à une sélection mais qu'elle n'existe pas encore ou qu'elle soit vide ! Est-ce que c'est exact et dans ce cas comment sélectionner toutes les feature si ce n'est pas déjà fait ? Encore merci.

    • Partager sur Facebook
    • Partager sur Twitter
      27 octobre 2016 à 22:12:10

      C'est une problematique tres specifique a cette lib, il est probable que tu n'as pas beaucoup de reponse a ta question. Essaie peut etre sur les forums anglais
      • Partager sur Facebook
      • Partager sur Twitter
        28 octobre 2016 à 9:19:17

        Merci quand même.

        Voici pour ceux que cela intéresse... Il suffit tout simplement de rajouter cette ligne avant la boucle "for" :

        layer_init->selectAll(); // selectionne toutes les feature la couche d entree

         Voilà, tout simplement.

        • Partager sur Facebook
        • Partager sur Twitter

        Sélection et parcours de feature d'une layer QGIS

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown