#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
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
Faire du MI sans utiliser SQL... c'est courir avec les jambes attachées !
Hors ligne