Nous utilisons des cookies pour vous garantir la meilleure expérience sur notre site. Si vous continuez à utiliser ce dernier, nous considèrerons que vous acceptez l'utilisation des cookies. J'ai compris ! ou En savoir plus !.
banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

#1 Wed 24 March 2021 15:01

conejo
Membre
Lieu: Lunel
Date d'inscription: 2 Dec 2005
Messages: 866

QGIS: Jointure spatiale pour chaque entite

Bonjour,

J'ai une couche de tronçons de lignes électriques et une couche fusionnée de 14 couches (dont celle des communes). J'ai utilisé la jointure spatiale pour rapatrier les données de la couche fusionnée sur celle des tronçons de lignes électriques.
La couche de tronçons de lignes a au départ 29 entités. La jointure spatiale crée une nouvelle entité à chaque intersection spatiale. Après la jointure spatiale avec la couche issue de la fusion de 14 autres couches, la nouvelle couche contient 361 entités. Le champ issu de l'intersection avec les communes représente 52 entités, le reste étant vide. Je voudrais que tout le champ des communes soit rempli avec un nom de commune. est-ce possible?

Merci.

Hors ligne

 

#2 Wed 24 March 2021 15:45

GlaDal
Membre
Date d'inscription: 30 Aug 2013
Messages: 601

Re: QGIS: Jointure spatiale pour chaque entite

Bonjour,

Pourquoi ne pas passer par une expression qui fera le job sur votre champ correspondant au nom de votre commune ? Du style :

Code:

aggregate(
 layer:= 'COMMUNE',
 aggregate:='max',
 expression:="NOM",
 filter:=intersects($geometry, geometry(@parent))
 )

Hors ligne

 

#3 Wed 24 March 2021 16:45

conejo
Membre
Lieu: Lunel
Date d'inscription: 2 Dec 2005
Messages: 866

Re: QGIS: Jointure spatiale pour chaque entite

Merci, mais que ce soit avec aggregate:='max' ou aggregate:='min', le report du nom des communes n'est pas fiable à 100%.
D'ailleurs quel est la fonction de max ou min dans cette expression?

Hors ligne

 

#4 Thu 25 March 2021 09:12

conejo
Membre
Lieu: Lunel
Date d'inscription: 2 Dec 2005
Messages: 866

Re: QGIS: Jointure spatiale pour chaque entite

En fait ce qui se passe : lorsque j'ai fait la jointure spatiale, cela m'a rapatrié, entre les 14 couches qui ont été fusionnées, les parcelles. Lorsque j'entre l'expression pour les communes, certaines parcelles n'ont pas la commune appropriée.
Où peut se situer l'erreur?

Hors ligne

 

#5 Tue 30 March 2021 16:18

conejo
Membre
Lieu: Lunel
Date d'inscription: 2 Dec 2005
Messages: 866

Re: QGIS: Jointure spatiale pour chaque entite

Bonjour,

Je reprends le post. Pour pallier aux erreurs de correspondance entre ma couche de ligne électrique et celle des communes (couche 'Communes_trace'), j'ai découpé mes tronçons de ligne non seulement entre chaque commune, mais aussi calé la ligne électrique sur les limites communales, lorsque la ligne électrique passe le long d'une limite entre deux communes.
Je fais "joindre les attributs par localisation" pour joindre les autres couches, sauf celles des communes.
Je crée un champ NOM_COM_M dans cette couche issue de la jointure spatiale et j'y joins par aggrégation, la commune avec l'expression de Gladal:
aggregate(
layer:= 'Communes_trace',
aggregate:='min',
expression:="NOM_COM_M",
filter:=intersects($geometry, geometry(@parent))
)

Mais vous vous en doutez bien ce n'est pas satisfaisant si je vous écris
Je joins une capture d'écran pour montrer un exemple.
Le tronçon en jaune fluo doit avoir pour communes jointes Solesmes et Briastre : il n'y a que Briastre avec aggregate:='min'
il n'y a que Viesly avec aggregate:='max'

Merci pour vos retours.


Fichier(s) joint(s) :
Pour accéder aux fichiers vous devez vous inscrire.

Hors ligne

 

#6 Tue 30 March 2021 17:07

conejo
Membre
Lieu: Lunel
Date d'inscription: 2 Dec 2005
Messages: 866

Re: QGIS: Jointure spatiale pour chaque entite

Peut-être que la fonction aggregate n'est pas l'appropriée?

Hors ligne

 

#7 Wed 31 March 2021 10:10

conejo
Membre
Lieu: Lunel
Date d'inscription: 2 Dec 2005
Messages: 866

Re: QGIS: Jointure spatiale pour chaque entite

En fait, d'après ce que j'ai pu comprendre, dans l'expression, "min" signifie qu'il va récupérer les communes intersectées en début de ligne, et "max",  les communes intersectées en fin de ligne. Ne peut-on pas remplacer "min" ou "max", par le centre de la ligne?

Hors ligne

 

#8 Wed 31 March 2021 11:22

SANTANNA
Moderateur
Lieu: Angers
Date d'inscription: 18 Jan 2008
Messages: 2811

Re: QGIS: Jointure spatiale pour chaque entite

Bonjour,

Ne peut-on pas remplacer "min" ou "max", par le centre de la ligne


Je ne suis pas sûr de comprendre votre suggestion (le lien entre min/max et la géométrie) mais je vous invite à regarder les différents paramètres d'agrégats de la fonction aggregate, sachant que quasiment chacune de ces valeurs possibles fait l'objet d'une fonction particulière (plus bas dans la page). Il y a certainement quelque chose qui correspondrait à votre situation.

Hors ligne

 

#9 Wed 31 March 2021 12:06

conejo
Membre
Lieu: Lunel
Date d'inscription: 2 Dec 2005
Messages: 866

Re: QGIS: Jointure spatiale pour chaque entite

Je ne suis pas sûr de comprendre votre suggestion (le lien entre min/max et la géométrie)


Comme dans l'exemple en PJ, avec min (côté extrême droit de la ligne) il ne va sélectionner ni la commune de Briastre ni celle de Solesmes. Avec max (côté extrême gauche de la ligne=), il va sélectionner la commune de Viesly.
Or ce que je veux c'est qu'il rapatrie les communes de Solesmes et Briastre, les communes limitrophes de cette ligne.

Hors ligne

 

#10 Wed 31 March 2021 14:42

conejo
Membre
Lieu: Lunel
Date d'inscription: 2 Dec 2005
Messages: 866

Re: QGIS: Jointure spatiale pour chaque entite

C'est pour cela qu'en mettant le centre de la ligne et non "min" pour le côté droit et "max" pour le côté gauche, il rapatrierait sûrement les communes espérées.

Hors ligne

 

#11 Wed 31 March 2021 20:31

conejo
Membre
Lieu: Lunel
Date d'inscription: 2 Dec 2005
Messages: 866

Re: QGIS: Jointure spatiale pour chaque entite

je vous envoie deux couches simples, une polygonale et une ligne. La couche polygonale a quatre entités : A, B, C et D. La ligne comporte deux entités qui sont superposées et à la limite de l'entité A et B de la couche polygonale. Je voudrais avec l'expression "aggregate" (ou autre!) que soient donc joints les entités A et B à la couche ligne et non C ou D. si qqn pourrait faire le test et donner son avis. Merci.
les fichiers sont en pièce jointe.


Fichier(s) joint(s) :
Pour accéder aux fichiers vous devez vous inscrire.

Hors ligne

 

#12 Thu 01 April 2021 09:51

GlaDal
Membre
Date d'inscription: 30 Aug 2013
Messages: 601

Re: QGIS: Jointure spatiale pour chaque entite

Avec l'exemple, c'est plus clair. Je regarde.

Hors ligne

 

#13 Sat 03 April 2021 14:51

conejo
Membre
Lieu: Lunel
Date d'inscription: 2 Dec 2005
Messages: 866

Re: QGIS: Jointure spatiale pour chaque entite

Je pense avoir trouvé la réponse. En fait, il ne faut pas faire "joindre les attributs par localisation" ou l'expression "aggregate", aux résultats trop aléatoires. Ce que j'ai fait :
- découpé la couche de lignes par les limites communales (29 tronçons)
- calé les limites communales sur celles de la couche de lignes
- crée un nouveau champ dans la couche des lignes, et saisi quelles sont les communes qui touchent les tronçons
- si un tronçon suit une limite entre deux communes, je saisis une des deux communes, je duplique ce tronçon et y saisis l'autre commune, ce qui génère à la fin une couche de lignes de 82 tronçons.
- Ensuite je peux joindre les attributs par localisation des autres couches.

Hors ligne

 

#14 Wed 07 April 2021 07:30

SANTANNA
Moderateur
Lieu: Angers
Date d'inscription: 18 Jan 2008
Messages: 2811

Re: QGIS: Jointure spatiale pour chaque entite

Bonjour,

En fait, il ne faut pas faire "joindre les attributs par localisation" ou l'expression "aggregate", aux résultats trop aléatoires.


Je ne suis pas du tout d'accord. Les fonctions renvoient ce qu'on leur demande (il n'y a rien d'aléatoire, là-dedans) pourvu qu'on prenne le temps de comprendre la fonction, la formule et d'identifier les bons paramètres pour le besoin.
Votre méthode manuelle pour juste rapatrier des noms de communes sur du linéaire me semble chronophage, sujette à erreurs (un segment oublié, une commune mal rentrée) et génère un certain nombre de (pseudo-)doublons (on passe de 29 à 82, je crois) alors que la fonction aggregate, utilisée avec concatenate ou concatenate_unique devrait faire le boulot, comme indiqué dans la doc précédemment suggérée.
PS: min et max ne renvoient pas les communes à gauche ou à droite mais le premier et dernier (par ordre alphabétique) des communes traversées/touchées par le tronçon linéaire.

Hors ligne

 

#15 Wed 07 April 2021 09:41

conejo
Membre
Lieu: Lunel
Date d'inscription: 2 Dec 2005
Messages: 866

Re: QGIS: Jointure spatiale pour chaque entite

Bonjour,

Merci pour votre réponse mais j'y vois deux inconvénients :
- la fonction concatenete ou concatenate_unique renvoie les communes jointes sur une seule ligne, alors que mon souhait est d'avoir une seule commune par ligne
- le résultat n'est pas précis car comme le montre mon exemple joint, il renvoie trois communes (Verchain-Maugré, Sommaing et Querenaing) au lieu de deux communes qu'il devrait (Verchain-Maugré et Sommaing).


Fichier(s) joint(s) :
Pour accéder aux fichiers vous devez vous inscrire.

Hors ligne

 

Pied de page des forums

Powered by FluxBB

Partagez  |