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é ?

Annonce

Rencontres QGIS 2025

L'appel à participation est ouvert jusqu'au 19 janvier 2025!

#1 Mon 01 February 2010 17:38

SanLas
Juste Inscrit !
Date d'inscription: 1 Feb 2010
Messages: 5

recoupement de plusieurs polygones

Bonjour,

Je cherche à mettre à jour une table "polygone 1" en utilisant une autre couche "polygone 2", ces 2 tables se recoupent dans l'espace.

Pour cela, j'utilise la fonction "mettre à jour colonne".

Mon problème est le suivant:
un polygone de ma table "polygone 1" peut recouper un ou plusieurs polygones de la table "polygone 2".
Dans le cas où mon polygone 1 recoupe plusieurs polygones de ma seconde table, je souhaite affecter à la table à mettre à jour, la valeur du polygone qui recoupe le plus mon polygone 1. Hors mapinfo m'indique aléatoirement soit la valeur de la surface la plus représentée, soit celle de la moins représentée.

Comment faire pour renseigner la valeur du polygone le plus recoupé??

Merci d'avance.

Hors ligne

 

#2 Wed 03 February 2010 18:17

SanLas
Juste Inscrit !
Date d'inscription: 1 Feb 2010
Messages: 5

Re: recoupement de plusieurs polygones

Bonjour,

Personne n'aurait une petite idée????

Merci

Hors ligne

 

#3 Wed 03 February 2010 18:47

Daniel
Membre
Lieu: Victoriaville, Québec
Date d'inscription: 6 Sep 2005
Messages: 2028

Re: recoupement de plusieurs polygones

Bonjour

Bon, tentons une réponse.  Probablement que d'autres réponses se grefferons à la mienne!!!  Mais c'est ce qui me vient à l'esprit en ce moment...

Il est possible de savoir quel polygone coupe tel autre polygone, dans deux couches différentes.
Il suffit de faire un areaoverlap dans une requête SQL.
COLONNE: Polygone_1_ID, Polygone_2_ID, sum(oreaolverlap (polygone_1.obj, polygone_2.obj))
TABLE: polygone_1, Polygone_2
WHERE: polygone_1.obj intersect polygone_2.obj
Group by: Polygone_1_ID, Polygone_2_ID

On peut faire aussi un sort pour mettre en ordre selon les polygone_1_ID et polygone_2_ID

Le résultat va vous donner l'intersection entre les deux tables en indiquand le nom du polygone et sa superficie.  Donc, la plus grande superficie entre deux polygone apparîtra.

Maintenant, il reste à assigner cette valeur!!!

Daniel


De retour à la géomatique

Hors ligne

 

#4 Mon 08 February 2010 16:03

SanLas
Juste Inscrit !
Date d'inscription: 1 Feb 2010
Messages: 5

Re: recoupement de plusieurs polygones

Merci pour votre réponse.
Malheureusement l'overlap ne me permet pas de résoudre mon pb.

Hors ligne

 

#5 Mon 08 February 2010 17:26

Maurice
Membre
Lieu: Montpellier
Date d'inscription: 5 Sep 2005
Messages: 5331

Re: recoupement de plusieurs polygones

Bonjour
La solution de Daniel est pourtant la bonne: une fois que vous avez par requête la proportion de chaque intersection vous pouvez  obtenir le recouvrement majoritaire et faire porter la mise à jour sur une sélection des ces polygones
Si j'ai le temps je vous détaille ça un peu plus ....bientôt

Hors ligne

 

#6 Mon 08 February 2010 22:13

Maurice
Membre
Lieu: Montpellier
Date d'inscription: 5 Sep 2005
Messages: 5331

Re: recoupement de plusieurs polygones

Une petite séquence de SQL en nocturne...et en syntaxe FMB
Soient vos tables poly1 (avec un NOM, un ID et une SURF) et poly2, cette dernière portant des valeurs CODE2 .
Première requête pour déterminer la proportion de surface de chaque CODE2 contenue dans les poly1 intersectés

Code:

Select poly1.NOM, poly1.ID, poly2.CODE2, sum(areaoverlap(poly1.obj, poly2.obj)*100/poly1.SURF) "test" from poly1, poly2 where poly1.Obj intersects poly2.Obj group by poly1.NOM, poly2.CODE2 order by poly1.NOM, test desc into sel1

Une deuxième pour sélectionner les maximums du premier résultat

Code:

Select ID, Code2,  Max(test) "CODE2_max" from sel1 group by ID order by ID into Sel2

Enfin, après avoir ajouté une colonne CODE2_max à poly1, on met à jour cette nouvelle colonne avec les valeurs de CODE2_max de sel2 sur le critère poly1.ID=sel2.ID. Autrement dit:

Code:

Add Column "poly1" (CODE2_max) From Sel2 Set To Code2 Where poly1.ID = Sel2.ID

Hors ligne

 

#7 Tue 09 February 2010 15:58

SanLas
Juste Inscrit !
Date d'inscription: 1 Feb 2010
Messages: 5

Re: recoupement de plusieurs polygones

Merci beaucoup. Problème résolu.

Hors ligne

 

#8 Thu 11 February 2010 14:56

michelbgy
Participant actif
Date d'inscription: 9 Feb 2010
Messages: 77

Re: recoupement de plusieurs polygones

Il existe une solution sans taper de code SQL: sachant que lorsqu'on demande à Mapinfo de grouper par colonne dans la boîte de dialogue "sélection SQL" il retient systématiquement les données de la première ligne rencontrée, il suffit donc de trier préalablement la table en ordre décroissant de la surface (ou tout autre critère)


Procédure pas à pas(à chaque étape enregistrer le résultat sous un nouveau nom de table):

-attention dans le cas ou des polygones "2" recouperaient plusieurs polygones "1": il faut les découper (objets"2"=cible à découper par objets"1")
-rajouter et mettre à jour 2 colonnes dans la table "2": surface objet et inverse de cette surface
-sélection SQL objets "1" contain objets "2", trier par inverse surface
-sélection SQL, grouper par l'identifiant des objets "1"
-la table attributaire obtenue permets de renseigner la table "1"originelle; la surface mais aussi toutes les autres données récupérées de la table"2" correspondent à celles du plus gros objet  contenu.

Hors ligne

 

#9 Thu 11 February 2010 18:09

Maurice
Membre
Lieu: Montpellier
Date d'inscription: 5 Sep 2005
Messages: 5331

Re: recoupement de plusieurs polygones

michelbgy a écrit:

Il existe une solution sans taper de code SQL...


Bon, il n'y a pas de SQL...mais si on fait un concours de vitesse, je suis sur de gagner big_smile
Faire du MI sans utiliser SQL... c'est courir avec les jambes attachées !

Hors ligne

 

Pied de page des forums

Powered by FluxBB