#1 Mon 07 March 2011 17:58
- Daniel
- Membre
- Lieu: Victoriaville, Québec
- Date d'inscription: 6 Sep 2005
- Messages: 2028
Intersection entre 2 tables de lignes
Bonjour
Je suis un peu perdu et/ou bien mélangé.
J'ai une grille (polyligne) et une table de courbes de niveau. Ma grille a comme ID, des lettres de A à T en X et de 1 à 15 en Y.
Je voudrais connaître, par exemple, le nombre de fois que la A croise la couche topo. Il est important de spécifier que la ligne A peut croiser plus d'une fois la même courbe topo.
Je voudrais donc, pour toutes mes lignes de ma grille, combien de fois elles croisent les lignes topo.
Je sais qu'il faut un COUNT en quelque part par je ne sais pas où!!!!
J'ai fait :
Colonne : Grille.Nom, Count(*)
Table : Grille, Topo
Critères : Grille.Obj Intersect Topo.OBJ
Grouper : Grille.NOM
Par exemple, la ligne C de ma grille donne 16 intersection mais elle croise 2 fois, trois courbes topo. Donc, le résultat devrait donner 19. C'est ce chiffre que je veux (19).....
Je cherche où je fais mon erreur....
Merci
Daniel
De retour à la géomatique
Hors ligne
#2 Mon 07 March 2011 19:32
- jean94
- Participant assidu
- Date d'inscription: 13 Aug 2009
- Messages: 436
Re: Intersection entre 2 tables de lignes
Bonjour Daniel,
Je te conseil de faire un "Object --> Split" pour segmenter tes courbes de niveau et créer plusieurs objets. Le cas échéant, je ne sais pas si tu aurais plus de 19 intersections c'est à dire 2 objet par intersection? Mais pour y remédier tu pourrais faire un group by ou diviser ton total par 2?
JF
Dernière modification par jean94 (Mon 07 March 2011 19:32)
Hors ligne
#3 Mon 07 March 2011 19:43
- Daniel
- Membre
- Lieu: Victoriaville, Québec
- Date d'inscription: 6 Sep 2005
- Messages: 2028
Re: Intersection entre 2 tables de lignes
Salut JF
Je vais essayer ta manipulation. J'y avais pensé mais je me suis dit qu'il y aurait une autre solution. Mais je vais la faire plus tard, le temps oblige à me presser. J'ai donc fait le décompte manuellement.....
Je reviens avec avec le résultat plus tard avec ta méthode.
Daniel
De retour à la géomatique
Hors ligne
#4 Wed 09 March 2011 14:02
- Daniel
- Membre
- Lieu: Victoriaville, Québec
- Date d'inscription: 6 Sep 2005
- Messages: 2028
Re: Intersection entre 2 tables de lignes
Salut
Ce matin en me levant, j'ai eu un flash pour résoudre mon problème. C'est un peu avec l'idée de jean94 qui m'est venue cette idée. Bon, cette solution peut probablement être "rafinée" mais elle fonctionne. C'est ça l'important!!! Et ça me fait économiser du temps... Et comme tout le monde le sais, le temps c'est de l'argent!!!
Le principe est de connaître combien de fois chaque élément d'une grille, croise des lignes topos, et ce, à l'intérieur d'un bassin versant.
Cette méthode ne s'applique que si vous avez des versions de Mapinfo avec MapCad. Peut-être existe-t-il des MBX pour faire ce travaille.
Je recommence:
J'ai une grille faites à partir de Gridmaker, une couche de courbes topographiques et un bassin versant.
La grille doit-être faites en polyligne et je nomme chaque ligne en y allant dans l'ordre de création, c'est-à-dire de gauche à droite et de bas en haut. Traitement à faire sur la grille : Lorsque l'on fait une grille avec Gridmaker, le MBX met des points à chaque intersection entre les lignes verticales et horizontales. Je sélectionne donc chaque ligne, une à une, et j'enlève tous les points en ne gardant que les points de départ et d'arrivée. Chaque ligne a donc seulement 2 points.
Je coupe toutes les lignes de la grille pour avoir seulement l'intérieur de mon bassin.
Je définie comme cible, ma grille. Je sélectionne toutes mes lignes topos et j'utilise la fonction de MapCad Ajouter Noeuds. J'exporte en MIF/MID ma grille. Au début de chaque pline dans le MIF, il y a le nombre de points que contient la polyligne. Je prends donc cette valeur, et je soustrais 2, les points de départ et d'arrivée, ce qui donne le nombre de croisement de chaque ligne avec les courbes topos.
ATTENTION : Comme un bassin versant (dans mon cas par exemple), n'est pas un polygone parfait, il se peut qu'une polyligne de ma grille soit faites de 2 ou plusieurs bout de ligne. Il faut donc soustraire 2 à chaque bout de ligne. Le MIF indique combient la polyligne est composée de segments.
Ce n'est pas idéal mais ça m'a prix 20 minutes à faire ces opérations au lieu de 2h30 heures à le faire manuellement....
Daniel
De retour à la géomatique
Hors ligne
#5 Thu 10 March 2011 15:25
- nicoboud
- Membre
- Lieu: Nantes
- Date d'inscription: 12 Oct 2007
- Messages: 860
Re: Intersection entre 2 tables de lignes
Voici quelques améliorations (à mon sens !) de la méthode de Daniel pour atteindre l'objectif en moins de 20 min (allez, disons 10 minutes !) :
1- Création de la grille de polylignes avec Gridmaker (lissage à 0 pour ne pas avoir de noeuds superflus)
2- suppression des noeuds créés aux intersections entre les polylignes : sélectionner tous les polylignes X (lignes verticales) de la grille puis utiliser Objects>Fusion/simplification en activant la simplification/Généralisation (mettre au moins la valeur 1 à la déviation colinéaire et à l'intervalle entre les noeuds pour que ça fonctionne).
Refaire l'opération avec les polylignes Y (lignes horizontales).
On a donc obtenu des polylignes à un seul segment (en 2 étapes car je n'ai pas réussi à le faire fonctionner en une seule ^^).
3- affecter un ID à chaque ligne de la grille (lettres en X et chiffres en Y comme indiqué par Daniel par exemple).
4- sélectionner toutes les lignes de la grille puis les définir en cible.
5- sélectionner les objets de la couche dont on veux connaitre le nombre d'intersection avec la grille (ici les courbes de niveau), puis Objets>Ajouter noeuds...
6- utiliser l'outil segments.mbx sur les objets de la grille.
Outil mbx dispo ici :http://georezo.net/forum/viewtopic.php?id=66942 (post #4 de maurice)
Chaque ligne de la grille est segmentée en tronçons suivant les noeuds créés au point 5.
7- faire une sélection SQL sur la grille:
Code:
Select Degrees, count(*) from Grille group by Degrees into Selection
Degrees étant le 1er champ créé par Gridmaker où j'ai saisi les ID Grille (A,B,C, ...,1,2,3,...)
8 - on obtient alors un tableau avec pour chaque ID grille, le nombre de segments correspondants.
A ce nombre il faut retrancher 1 pour obtenir le nombre d'intersections (7 intersections pour 8 segments, 12 intersections pour 13 segments, etc.)
Nicolas.
Dernière modification par Nicolas Boudesseul (Thu 10 March 2011 15:37)
Co-modérateur du forum Mapinfo
Utilisateur Mapinfo et QGIS
Hors ligne
#6 Thu 10 March 2011 17:48
- Daniel
- Membre
- Lieu: Victoriaville, Québec
- Date d'inscription: 6 Sep 2005
- Messages: 2028
Re: Intersection entre 2 tables de lignes
Salut
Merci Nicolas pour cette méthode.
Non pas pour faire un concour de vitesse mais nous avons FME et avec l'aide d'un collègue, j'ai monté une procédure (workbench). Cette méthode compte le nombre de croisements entre deux tables de lignes (un peu comme notre exemple). J'ai donc le "vrai résultat" sans soustraire une valeur. Dans le cas des études à quoi sert cette démarche, ça va aller beaucoup plus vite. Tout ce que j'ai à faire, c'est de standardiser mes couches (grille et topo) pour avoir les même noms à chaque fois. Ce qui ne sera pas très difficile.
Mais merci pour tout. Et j'avoue que lorsque l'on connait assez bien FME, je crois que c'est un logiciel que toutes les entreprises, ministère, etc, devrait avoir. Je ne suis même pas capable de voir la limite de ce logiciel!!!!! C'est un très bon à côté de tous logiciels SIG.
C'est mon opinion, et comme on dit chez nous, je la partage!!!
Daniel
De retour à la géomatique
Hors ligne