Pages: 1
- Sujet précédent - QGIS 2.14.1: Numérotation automatique de polygones d'ouest en est - Sujet suivant
#1 Tue 07 June 2016 10:23
- GeoffreyD
- Participant occasionnel
- Date d'inscription: 6 Jun 2016
- Messages: 10
QGIS 2.14.1: Numérotation automatique de polygones d'ouest en est
Bonjour à tous,
J'ai à ma disposition une couche vecteur de polygones. Dans un premier temps, j'ai créé un ID pour chaque polygone après la formule row_number. Cependant, en fonction de l'ordre de création des polygones par OSM (d'où j'ai tiré mes objets) les ID ne respectent aucun ordre logique.
Est-ce que qu'un connait une méthode pour obtenir un ID en fonction de la position d'un polygone ? Pour ma part, je souhaite que les ID soient créés en partant de l'objet le plus à l'ouest à l'objet le plus à l'est.
Je vous remercie. Cordialement,
GeoffreyD
Hors ligne
#2 Tue 07 June 2016 10:46
- Lucien
- Participant actif
- Date d'inscription: 8 Mar 2016
- Messages: 104
Re: QGIS 2.14.1: Numérotation automatique de polygones d'ouest en est
Bonjour,
En créant l'identifiant à partir de la coordonnée X du centroïde du polygone on peut surement faire ce que vous souhaitez
Hors ligne
#3 Tue 07 June 2016 11:01
- GeoffreyD
- Participant occasionnel
- Date d'inscription: 6 Jun 2016
- Messages: 10
Re: QGIS 2.14.1: Numérotation automatique de polygones d'ouest en est
D'accord, mais déjà je n'arrive pas à obtenir le x du centroide de mes polygones : dans la formule dans la calculatrice de champ, il me demande : x() mais je ne sais pas quoi mettre entre parenthèses.
Dans ce cas il faudrait peut-être que je créé une nouvelle couche vecteur correspondant aux centroides de mes polygones.
Mais après comment créer un classement ?
Dernière modification par GeoffreyD (Tue 07 June 2016 11:08)
Hors ligne
#4 Tue 07 June 2016 11:13
- Lucien
- Participant actif
- Date d'inscription: 8 Mar 2016
- Messages: 104
Re: QGIS 2.14.1: Numérotation automatique de polygones d'ouest en est
Quel est la version de qgis?
On peut obtenir la coordonnée X du polygone avec x($geometry)
Certains de vos polygones auront peut-être le même X ?
Dernière modification par Lucien (Tue 07 June 2016 11:13)
Hors ligne
#5 Tue 07 June 2016 11:21
- GeoffreyD
- Participant occasionnel
- Date d'inscription: 6 Jun 2016
- Messages: 10
Re: QGIS 2.14.1: Numérotation automatique de polygones d'ouest en est
La version de QGIS que j'utilise est noté en titre de ce sujet ^^ il s'agit de la 2.14.1 sous windows 7.
Je ne connaissais pas $geometry, ce que j'ai fais du coup c'est créer une couche de centroides pour l'essai.
Du coup, j'ai sortie le x à la 10e décimale près pour éviter l'apparition de plusieurs X, ça serait pas de bol que ça arrive.
J'ai une idée pour la formule à utiliser dans la calculatrice de champ : existe il une fonction "boucle" dans QGIS (comme la fonction WHILE ou TANT QUE) ? Avec une telle formule il serait possible de réaliser une répétition de la formule : if (X mon objet) < (X autre objet) alors +1 ou +0, et ce pour tous mes objets...
Je ne sais pas utiliser l'éditeur de fonction de QGIS...
Dernière modification par GeoffreyD (Tue 07 June 2016 11:24)
Hors ligne
#6 Tue 07 June 2016 11:33
- Lucien
- Participant actif
- Date d'inscription: 8 Mar 2016
- Messages: 104
Re: QGIS 2.14.1: Numérotation automatique de polygones d'ouest en est
La version de QGIS que j'utilise est noté en titre de ce sujet ^^ il s'agit de la 2.14.1 sous windows 7.
Autant pour moi
Le plus simple (selon moi) est d'utiliser l'extension spatialite. Vous pourrez faire une requête SQL, sélectionner vos X en les triant par X, et créer une nouvelle table qui vous mettra automatiquement un id.
(Par contre, si vous pensez que chaque X est unique pourquoi ne pas le garder comme identifiant unique ?)
Hors ligne
#7 Tue 07 June 2016 11:43
- GeoffreyD
- Participant occasionnel
- Date d'inscription: 6 Jun 2016
- Messages: 10
Re: QGIS 2.14.1: Numérotation automatique de polygones d'ouest en est
... je ne sais pas utiliser le SpatiaLite.
Pouvez-vous m'expliquer la méthode ? Ou pouvez-vous me rediriger vers un tutoriel ?
Hors ligne
#8 Tue 07 June 2016 12:10
- GeoffreyD
- Participant occasionnel
- Date d'inscription: 6 Jun 2016
- Messages: 10
Re: QGIS 2.14.1: Numérotation automatique de polygones d'ouest en est
Après m'être renseigné sur Spatialite, je préfère rester sur des couches de type vecteur, plus simple et plus utile pour moi. Il doit bien exister un moyen de faire cette numérotation avec des vecteurs...
Hors ligne
#9 Tue 07 June 2016 12:17
- SANTANNA
- Moderateur
- Lieu: Angers
- Date d'inscription: 18 Jan 2008
- Messages: 3945
Re: QGIS 2.14.1: Numérotation automatique de polygones d'ouest en est
Bonjour
J'ai une idée pour la formule à utiliser dans la calculatrice de champ : existe il une fonction "boucle" dans QGIS (comme la fonction WHILE ou TANT QUE) ? Avec une telle formule il serait possible de réaliser une répétition de la formule : if (X mon objet) < (X autre objet) alors +1 ou +0, et ce pour tous mes objets..
Tu peux aussi copier la table attributaire dans un tableur classique, trier sur le champ X et numéroter puis refaire une jointure dans QGIS (éventuellement attribuer ce classement à un champ propre au shapefile, si tu ne veux pas conserver la jointure).
Hors ligne
#10 Tue 07 June 2016 13:05
Re: QGIS 2.14.1: Numérotation automatique de polygones d'ouest en est
Pourquoi ne pas créer l'id en concaténant X et Y du centroïde ? Son unicité serait assurée même sans décimales.
Dernière modification par jmarsac (Tue 07 June 2016 13:07)
Jean-Marie
Azimut
Hors ligne
#11 Tue 07 June 2016 14:25
- GeoffreyD
- Participant occasionnel
- Date d'inscription: 6 Jun 2016
- Messages: 10
Re: QGIS 2.14.1: Numérotation automatique de polygones d'ouest en est
Pourquoi ne pas créer l'id en concaténant X et Y du centroïde ? Son unicité serait assurée même sans décimales.
je ne vois pas l'intérêt d'une telle concaténation, ce que je souhaite c'est d'avoir mes polygones avec un ID allant de 1 pour le polygone plus à gauche à X pour celui le plus à droite. Après je n'ai peut-être pas compris jusqu'où tu voulais en venir...
Bonjour
J'ai une idée pour la formule à utiliser dans la calculatrice de champ : existe il une fonction "boucle" dans QGIS (comme la fonction WHILE ou TANT QUE) ? Avec une telle formule il serait possible de réaliser une répétition de la formule : if (X mon objet) < (X autre objet) alors +1 ou +0, et ce pour tous mes objets..
Tu peux aussi copier la table attributaire dans un tableur classique, trier sur le champ X et numéroter puis refaire une jointure dans QGIS (éventuellement attribuer ce classement à un champ propre au shapefile, si tu ne veux pas conserver la jointure).
Je me suis inspiré de ta réponse, voilà donc ce que j'ai fais :
1) Dans ma couche vecteur de polygones, j'ai créé 4 colonnes :
1. ID_ligne avec row_number
2. X avec x($geometry)
3. Y avec y($geometry)
4. ID_final qui est vide
2) J'ai enregistré ma couche, puis j'ai glissé le .dbf de cet couche dans excel. Les polygones sont dès lors triés par la colonne ID_ligne
3) Sur excel, j'ai fais ceci :
1. J'ai trié mon tableur par rapport à la colonne X du plus petit au plus grand
2. J'ai rempli la colonne ID_final par incrémentation automatique de 1 à X
3. J'ai trié mon tableur par rapport à la colonne ID_ligne du plus petit au plus grand
4. J'ai enregistré mon tableur au format .csv avec séparation point-virgule
4) Sur QGIS, j'ai ajouter mon fichier .csv en une couche de texte délimité, le X et le X du .csv permette de créer des vecteurs points. J'ai appelé cette couche TABLEUR
5) J'ai joint les attributs de TABLEUR sur ma couche de polygones par localisation. Dans ma couche polygones, j'ai maintenant ID_final_2
LE TOUR EST JOUé !
Maintenant, mes polygones ont un ID par rapport à leur position sur l'abscisse X ! de 1 à X.
Dans l'image que j'ai joint à ma réponse, par un affichage de ID_final_2 en étiquette sur mes polygones j'ai vérifier l'ID et la position du polygone.
PS : sur l'image, le polygone n°5 n'apparaît pas car il est plus au sud que le groupe de bâtiment que j'ai capturé.
Dernière modification par GeoffreyD (Tue 07 June 2016 14:28)
Hors ligne
#12 Tue 07 June 2016 15:25
- Lucien
- Participant actif
- Date d'inscription: 8 Mar 2016
- Messages: 104
Re: QGIS 2.14.1: Numérotation automatique de polygones d'ouest en est
je ne vois pas l'intérêt d'une telle concaténation, ce que je souhaite c'est d'avoir mes polygones avec un ID allant de 1 pour le polygone plus à gauche à X pour celui le plus à droite. Après je n'ai peut-être pas compris jusqu'où tu voulais en venir...
L'intérêt d'un identifiant unique, c'est qu'il soit unique. Peut importe qu'il commence par 1 ou non. Avec sa méthode de concaténation du X et du Y, le tri par ordre croissant sur l'id permet de trier tes polygones depuis celui qui a le plus petit X (soit celui le plus à gauche) jusqu'à celui qui a le plus grand X.
La concaténation avec le Y permet d'avoir moins de risque d'avoir des doublons sur ton identifiant.
Hors ligne
#13 Tue 07 June 2016 15:42
- GeoffreyD
- Participant occasionnel
- Date d'inscription: 6 Jun 2016
- Messages: 10
Re: QGIS 2.14.1: Numérotation automatique de polygones d'ouest en est
je ne vois pas l'intérêt d'une telle concaténation, ce que je souhaite c'est d'avoir mes polygones avec un ID allant de 1 pour le polygone plus à gauche à X pour celui le plus à droite. Après je n'ai peut-être pas compris jusqu'où tu voulais en venir...
L'intérêt d'un identifiant unique, c'est qu'il soit unique. Peut importe qu'il commence par 1 ou non. Avec sa méthode de concaténation du X et du Y, le tri par ordre croissant sur l'id permet de trier tes polygones depuis celui qui a le plus petit X (soit celui le plus à gauche) jusqu'à celui qui a le plus grand X.
La concaténation avec le Y permet d'avoir moins de risque d'avoir des doublons sur ton identifiant.
Mouais, c'est une des 1000 façons d'avoir un ID unique, autant utiliser row_number ^^
Dans le cas de mes polygones, qui sont en réalité des habitations, le risque que le centroide de 2 bâtiments sur la zone considérée de mon projet est la même abscisse à la 10e décimale est nulle ! Et même si cela arrivait (j'aurais également gagné le jackpot à l'euromillion), au moment du tri les 2 bâtiments se suivraient, l'un étant 56 et l'autre 57, donc pas de soucis...
Bref, on s'est quelque peu éloigné du vrai sujet ^^
Hors ligne
#14 Tue 07 June 2016 15:52
- Lucien
- Participant actif
- Date d'inscription: 8 Mar 2016
- Messages: 104
Re: QGIS 2.14.1: Numérotation automatique de polygones d'ouest en est
On ne s'est pas vraiment éloigné du sujet puis-ce-que à priori la façon la plus simple d'avoir un identifiant unique qui part du polygone le plus à l'ouest pour aller à l'est (ce qu'était la demande?) -> C'est le X.
Row_number donne juste un numéro en commençant par 0.
Sur ce, bonne fin de journée ^^
Hors ligne
#15 Tue 07 June 2016 17:21
- SANTANNA
- Moderateur
- Lieu: Angers
- Date d'inscription: 18 Jan 2008
- Messages: 3945
Re: QGIS 2.14.1: Numérotation automatique de polygones d'ouest en est
@GeoffreyD, tu t'es bien compliqué la vie à vouloir créer un fichier csv graphique
Création du champ x dans la couche graphique
Sélection de toutes les entités de la table attributaire, copie, collage dans Excel
Suppression des champs inutiles, Tri sur le champ X et remplissage par incrémentation d'un nouveau champ X_trie
Enregistrer en csv (pour faire simple)
ouvrir directement le csv dans QGIS, en simple table
faire la jointure sur la base de X (et recopier le contenu de X_trie dans ID_ligne ou ID_final tout autre nom que tu voudras)
On ne s'est pas vraiment éloigné du sujet puis-ce-que à priori la façon la plus simple d'avoir un identifiant unique qui part du polygone le plus à l'ouest pour aller à l'est (ce qu'était la demande?) -> C'est le X.
Row_number donne juste un numéro en commençant par 0.
Effectivement (j'y mets mon grain de sel ), nulle part dans le processus row_number n'est requis. La jointure peut certes se faire par row_number mais aussi bien par X donc à quoi bon s'embêter à créer un champ peu utile?
Hors ligne
#16 Tue 07 June 2016 17:30
- GeoffreyD
- Participant occasionnel
- Date d'inscription: 6 Jun 2016
- Messages: 10
Re: QGIS 2.14.1: Numérotation automatique de polygones d'ouest en est
ça à l'air effectivement bien plus simple comme ça. Juste une dernière question bête : comment fait-on une jointure entre la table et ma couche vecteur ? Merci
Hors ligne
#18 Wed 08 June 2016 09:06
- GeoffreyD
- Participant occasionnel
- Date d'inscription: 6 Jun 2016
- Messages: 10
Re: QGIS 2.14.1: Numérotation automatique de polygones d'ouest en est
Je te remercie SANTANNA, la méthode marche c'est génial :-D
Par contre, plutôt que de faire un vulgaire copier/coller des attributs, je préfère encore glisser le .dbf de ma couche dans Excel, au moins on est sûr de rien oublier.
Enfin il vaut mieux utiliser, pour en revenir au débat plus haut, en ID unique un entier plutôt qu'un réel. Le fait est que Excel a tendance à supprimer les 0 de droite. De plus, en fonction des paramétrages d'Excel, les décimales sont soit en "." soit en "," donc il faut également faire attention à bien garder le même format que dans le projet QGIS.
C'est pourquoi pour la jointure j'ai finalement dû ré-utiliser la fonction row_number pour avoir un ID entier unique...
Encore merci à tous pour cette précieuse aide.
Hors ligne
#19 Tue 14 June 2016 10:24
- khalid90
- Juste Inscrit !
- Date d'inscription: 13 Jun 2016
- Messages: 1
Re: QGIS 2.14.1: Numérotation automatique de polygones d'ouest en est
il est impossible d’avoir des identifient logique supposons en 'na deux polygone son Centroid A(x=3,y=2) et B(x=3,y=3) donc B il doit avoir id=1
et A=2
mais vous méthode (ca vas pas matchée )
Hors ligne
Pages: 1
- Sujet précédent - QGIS 2.14.1: Numérotation automatique de polygones d'ouest en est - Sujet suivant