Pages: 1
- Sujet précédent - superposition d'objets et récupération de données attributaires - Sujet suivant
#1 Sun 09 March 2008 18:06
- depdep
- Participant actif
- Date d'inscription: 24 Sep 2006
- Messages: 74
superposition d'objets et récupération de données attributaires
Bonjour,
Voici mon problème :
j'ai une table d'objets de type points, ainsi qu'une table de polygones. Ces derniers sont caractérisés par un identifiant unique.
Je souhaite attribuer à un objet ponctuel se trouvant dans un polygone, l'identifiant de ce polygone.
Mon principal souci est qu'un objet ponctuel peut se trouver dans deux voire trois polygones en même temps, et que j'ai besoin de rattacher à cet objet tous les identifiants polygones concernés.
Quelle requête puis-je utiliser ?
Je pense structurer ma table d'objets ponctuels avec plusieurs champs : "ID_polygone1", "ID_polygone2"..., afin de pouvoir accueillir tous les identifiants à rattacher à chaque objet ponctuel.
Pensez-vous qu'il s'agit d'une bonne solution ?
En vous remerciant.
Gaëlle
Hors ligne
#2 Sun 09 March 2008 18:35
- Maurice
- Membre
- Lieu: Montpellier
- Date d'inscription: 5 Sep 2005
- Messages: 5331
Re: superposition d'objets et récupération de données attributaires
Bonjour
Bonne solution. Il faudra travailler sur une copie de la table polygone car après la première affectation il faudra détruire les polygones affectés (ceux qui ont un identifiant identique à ID_polygone1) puis faire la seconde affectation sur une sélection des points (ceux qui ont ID_polygone2 à zéro) etc...
Donc:
- mise à jour de ID_polygone1 sur le critère "point dans polygone"
- sélection puis destruction des polygones affectés: select * from polys,points where polys_ID=points.ID_polygone1
- mise à jour de ID_polygone2 sur le critère "point dans polygone"
- sélection puis destruction des polygones affectés: select * from polys,points where polys_ID=points.ID_polygone2
- mise à jour de ID_polygone3 sur le critère "point "ans polygone" ...et ça devrait suffire
On peut normalement "reconstituer" la table polys (par menu Fichiers->Annuler changements) mais autant travailler sur une copie
Hors ligne
#3 Sun 09 March 2008 21:00
- depdep
- Participant actif
- Date d'inscription: 24 Sep 2006
- Messages: 74
Re: superposition d'objets et récupération de données attributaires
Bonsoir Maurice,
Merci de votre réponse. C'est pas bête du tout comme idée !!!
Par contre, pensez-vous qu'il y ait moyen de créer quelque chose dans MapBasic ou autre qui permettre d'automatiser cette tache ?
En tous cas, encore merci !
Gaëlle
Hors ligne
#4 Sun 09 March 2008 23:09
- Maurice
- Membre
- Lieu: Montpellier
- Date d'inscription: 5 Sep 2005
- Messages: 5331
Re: superposition d'objets et récupération de données attributaires
...pensez-vous qu'il y ait moyen de créer quelque chose dans MapBasic ou autre qui permettre d'automatiser cette tache ...
Bien sûr.. En gros tout ce qu'on fait dans MI peut être reproduit dans MB !!
ps: est-ce "raisonnable" d'avoir des recouvrements dans une table polygone?? Ne vaut-il pas mieux la scinder en 3 tables sans recouvrement ?
Hors ligne
#5 Mon 10 March 2008 08:09
- depdep
- Participant actif
- Date d'inscription: 24 Sep 2006
- Messages: 74
Re: superposition d'objets et récupération de données attributaires
Bonjour Maurice,
Si je supprime le recouvrement entre les polygones (qui représentent des voies selon leur largeur), il ne me sera plus possible d'affecter les différents identifiants de ces voies à mes objets ponctuels..., car ces derniers se trouvent dans la zone en chevauchement.
Cordialement,
Gaëlle
Hors ligne
#6 Tue 11 March 2008 15:05
- depdep
- Participant actif
- Date d'inscription: 24 Sep 2006
- Messages: 74
Re: superposition d'objets et récupération de données attributaires
Bonjour,
la méthode que m'a proposé Maurice ne fonctionne pas dans tous les cas de figure...
"Il faudra travailler sur une copie de la table polygone car après la première affectation il faudra détruire les polygones affectés (ceux qui ont un identifiant identique à ID_polygone1) puis faire la seconde affectation sur une sélection des points (ceux qui ont ID_polygone2 à zéro) etc...
Donc:
- mise à jour de ID_polygone1 sur le critère "point dans polygone"
- sélection puis destruction des polygones affectés: select * from polys,points where polys_ID=points.ID_polygone1
- mise à jour de ID_polygone2 sur le critère "point dans polygone"
- sélection puis destruction des polygones affectés: select * from polys,points where polys_ID=points.ID_polygone2
- mise à jour de ID_polygone3 sur le critère "point "ans polygone" ...et ça devrait suffire"
En effet, selon cette logique, dès qu'un identifiant polygone est affecté à un point, le polygone en question doit être supprimé. Pourtant, ce polygone peut aussi concerner d'autres objets points, auxquels n'a pas encore été affecté l'identifiant de ce polygone.
Pour rendre tout cela plus clair, je mets un petit schéma en pièce jointe.
Avez-vous d'autres idées ???
D'avance merci !
Gaëlle
Hors ligne
#7 Tue 11 March 2008 15:56
- Maestro de la salsa
- Participant actif
- Date d'inscription: 7 Jun 2006
- Messages: 133
Re: superposition d'objets et récupération de données attributaires
Bonjour,
Pourquoi ne pas faire le cas classique. Requete SQL avec les tables point et polygone sous la condition point within polygone.
Tu te retrouve avec une table comme ceci:
Code_point1 Code_poly1
Code_point1 Code_poly2
Code_point2 Code_poly1
L'objectif final étant:
Code_point1 Code_poly1 Code_poly2
Code_point2 Code_poly1
Perso pour atteindre cet objectif, j'exporterai les données, je les traite sous Excel (automatisation possible moyennant un petit code VBA) et je les réimporte sous mapinfo. Une simple jointure avec la table des points dans MApinfo fera l'affaire.
Je ne sais pas si je me suis fait comprendre...
Maestro
Hors ligne
#8 Tue 11 March 2008 16:29
- Maestro de la salsa
- Participant actif
- Date d'inscription: 7 Jun 2006
- Messages: 133
Re: superposition d'objets et récupération de données attributaires
Pensez-vous qu'il s'agit d'une bonne solution ?
Perso ça depend de la finalité de ta base...Vu que j'ai deux tables seulement, j'appliquerai tout simplement un passage modèle conceptuel à modèle d'implantation. A savoir un point peut être dans 1,n polygones et un polygone peut contenir 1,n points (relation n,n); donc créer une table intermediaire ayant pour clé la concatenation des deux champs clés. C'est la reponse de la requete que je t'ai proposée avant. Il suffit d'une jointure simple entre les trois tables pour avoir les infos que tu souhaite...
Mais bon étant "administrateur de tes données" tu peux decider de les stocker autrement.
Maestro
Hors ligne
#9 Tue 11 March 2008 16:30
- depdep
- Participant actif
- Date d'inscription: 24 Sep 2006
- Messages: 74
Re: superposition d'objets et récupération de données attributaires
Bonjour Maestro,
Pas de souci, je vous ai très bien compris.
Je pensais qu'il y avait peut-être moyen de faire quelque chose sans faire de va-et-viens MapInfo/ Excel.
Je pense appliquer votre méthode.
Merci !
Gaëlle
Hors ligne
#10 Tue 11 March 2008 16:35
- Maurice
- Membre
- Lieu: Montpellier
- Date d'inscription: 5 Sep 2005
- Messages: 5331
Re: superposition d'objets et récupération de données attributaires
Bien joué Maestro....laissons à Excel ce pour quoi... il excelle
Je reconnais mon erreur méthodologique
Mais pour passer en mbx, il faut une méthode qui marche sous MI (sans Excel)...j'y retourne immédiatement !!
Hors ligne
#11 Tue 11 March 2008 17:03
- depdep
- Participant actif
- Date d'inscription: 24 Sep 2006
- Messages: 74
Re: superposition d'objets et récupération de données attributaires
Re-bonjour Maestro,
au risque de passer pour je ne sais quoi (je n'y connais pas grand chose sous excel), quel tour de passe-passe puis-je employer pou mettre en forme mes données comme vous l'avez évoqué ? Je suis sûre qu'il existe une méthode très simple pour ne pas tout faire "manuellement".
En vous remerciant.
Gaëlle
Hors ligne
#12 Tue 11 March 2008 21:22
- Maurice
- Membre
- Lieu: Montpellier
- Date d'inscription: 5 Sep 2005
- Messages: 5331
Re: superposition d'objets et récupération de données attributaires
Pour me faire pardonner (), ci joint un exemple de l'outil à utiliser dans Excel:
menu Données-> Rapport de Tableau Croisé Dynamique (un des "musts" d'Excel...)
Hors ligne
#13 Wed 12 March 2008 08:43
- depdep
- Participant actif
- Date d'inscription: 24 Sep 2006
- Messages: 74
Re: superposition d'objets et récupération de données attributaires
Bonjour Maurice,
Merci de votre réponse. En fait, ce que j'aimerais automatiser, c'est la mise en forme de mes données dans Excel.
Dans un premier temps, j'ai ça :
ID_poteau l ID_voie l
-------------l-----------l
Pi1 l V8 l
-------------l-----------l
Pi2 l V9 l
-------------l-----------l
Pi2 l V5 l
-------------l-----------l
Pi3 l V6 l
-------------l-----------l
Pi3 l V7 l
-------------l-----------l
Pi3 l V2 l
Ce que j'aimerais, c'est parvenir à ce résultat (un seul enregistrement par poteau, caractérisé par au moins un identifiant voie) :
ID_poteau l ID_voie_1 l ID_voie2 l ID_voie_3 ...
-------------l--------------l------------l----------------
Pi1 l V8 l l
-------------l--------------l------------l----------------
Pi2 l V9 l V5 l
-------------l--------------l------------l----------------
Pi3 l V6 l V7 l V2
Je vous prie de m'excuser si je me sus mal exprimée...
Bonne journée !
Gaëlle
Hors ligne
#14 Wed 12 March 2008 13:06
- Maurice
- Membre
- Lieu: Montpellier
- Date d'inscription: 5 Sep 2005
- Messages: 5331
Re: superposition d'objets et récupération de données attributaires
J'y reviens...sans Excel !!
La démarche pourrait se faire en 3 étapes (sélection dans la forme FMB, tables PI et VOIES)
Select PI.ID_poteau, VOIES.ID_voie from PI, VOIES where PI.Obj Within VOIES.Obj into Sel1
+ mise à jour de la colonne ID_voie_1 de PI par ID_voie de Sel1 où ID_poteau de PI = ID_poteau de Sel1
Select PI.ID_poteau, VOIES.ID_voie from PI, VOIES where PI.Obj Within VOIES.Obj And PI.ID_voie_1<>VOIES.ID_voie into Sel2
+ mise à jour de la colonne ID_voie_2 de PI par ID_voie de Sel2 où ID_poteau de PI = ID_poteau de Sel2
Select PI.ID_poteau, VOIES.ID_voie from PI, VOIES where PI.Obj Within VOIES.Obj And PI.ID_voie_1<>VOIES.ID_voie And PI.ID_voie_2<>VOIES.ID_voie into Sel3
+ mise à jour de la colonne ID_voie_3 de PI par ID_voie de Sel3 où ID_poteau de PI = ID_poteau de Sel3
J'ai bon ... ??
Hors ligne
#15 Wed 12 March 2008 17:29
- Maestro de la salsa
- Participant actif
- Date d'inscription: 7 Jun 2006
- Messages: 133
Re: superposition d'objets et récupération de données attributaires
Bonjour,
Maurice je n'ai pa eu le temps de verifier...
Depdep je dois pouvoir te réaliser un petit code pour ça...mais demain si ce n'est pas trop tard...
L'idée est de parcourir la première colonne et tant qu'une ligne est égale à la suivante (Pi2 sur la 2ème et la 3ème ligne ou cellule par exemple) on recupère la valeur de la deuxième colonne correspondante...je regarderai et je le mettrai sur le forum...
Maestro
Hors ligne
#16 Wed 12 March 2008 18:02
- depdep
- Participant actif
- Date d'inscription: 24 Sep 2006
- Messages: 74
Re: superposition d'objets et récupération de données attributaires
Bravo et merci Maurice !
Ca marche super bien, et c'est bien moins compliqué que de faire de la mise en forme dans Excel !
Il faut quand même avoir l'habitude des requêtes sql...
En tous cas, j'ai bien compris la manip.
Encore merci !
Gaëlle
Hors ligne
#17 Thu 13 March 2008 09:54
- Maestro de la salsa
- Participant actif
- Date d'inscription: 7 Jun 2006
- Messages: 133
Re: superposition d'objets et récupération de données attributaires
Bonjour,
Eh non Maurice ça ne marche pas...
Exemple:
Table Poteau:
ID_poteau l
-------------l
Pi1 l
-------------l
Pi2 l
-------------l
Pi3 l
-------------l
Pi4 l
-------------l
Table voie:
ID_voie l
-------------l
v1 l
-------------l
v2 l
-------------l
v3 l
-------------l
v4 l
-------------l
Pi1 est dans v1,v2,v3 et v4 ----- Pi2 est dans v1 ----- Pi3 est dans v1 et Pi4 est dans v3.
Resultat selection 1:
ID_poteau l ID_voie l
-------------l-----------l
Pi1 l V1 l
-------------l-----------l
Pi1 l V2 l
-------------l-----------l
Pi1 l V3 l
-------------l-----------l
Pi1 l V4 l
-------------l-----------l
Pi2 l V1 l
-------------l-----------l
Pi3 l V1 l
-------------l-----------l
Pi4 l V3 l
Resultat selection 2 après mise à jour 1 (on ne prend pas en compte les ID_voie de valeur v1 et v3):
ID_poteau l ID_voie l
-------------l-----------l
Pi1 l V2 l
-------------l-----------l
Pi1 l V4 l
Resultat selection 3:
ID_poteau l ID_voie l
-------------l-----------l
Pi1 l V4 l
-------------l-----------l
Resultat final après mises à jour:
ID_poteau l ID_voie1l ID_voie2 l ID_voie3l
-------------l-----------l-------------l-----------l
Pi1 l V1 l V2 l V4 l
-------------l-----------l-------------l-----------l
Pi2 l V1 l l l
-------------l-----------l-------------l-----------l
Pi3 l V1 l l l
-------------l-----------l-------------l-----------l
Pi4 l V3 l l l
-------------l-----------l-------------l-----------l
Il manque V3 car Pi1 est dans V3...
Le problème: Pi1 et Pi4 sont dans V3. Dès la première mise à jour, Pi4 aura V3 comme valeur du champ ID_voie1. Et comme tu fais les autres mises à jour avec pour conditions supplémentaires les différences de valeurs sur les champs "ID_voie" remplis au fur et à mesure, Pi1 n'aura jamais la valeur V3. Aussi ces requêtes supposent qu'on connait le nombre maximal "d'inclusion".
Si ça t'interesse toujours Gaëlle je peux me pencher sur le code Excel...
Maestro
Hors ligne
#18 Thu 13 March 2008 10:08
- depdep
- Participant actif
- Date d'inscription: 24 Sep 2006
- Messages: 74
Re: superposition d'objets et récupération de données attributaires
Oui oui, Maestro, je suis toujours intéressée...
Gaëlle
Hors ligne
#19 Thu 13 March 2008 13:32
- Maurice
- Membre
- Lieu: Montpellier
- Date d'inscription: 5 Sep 2005
- Messages: 5331
Re: superposition d'objets et récupération de données attributaires
Désolé Maestro mais ça marche très bien !! Simplement tu ne fais que 3 itérations alors qu'il y a 4 inclusions...
...il faut effectivement faire un nombre d'itérations (dans ton cas 4) = nombre maximal "d'inclusion"
Nombre que l'on obtient par:
Select PI.ID_poteau, Count(*) "inclusions" from PI, VOIES where PI.Obj Within VOIES.Obj group by PI.ID_poteau order by inclusions Desc
Et l'avantage c'est que cette tâche purement MI peut, elle, être passée en mbx
Hors ligne
#20 Thu 13 March 2008 14:08
- depdep
- Participant actif
- Date d'inscription: 24 Sep 2006
- Messages: 74
Re: superposition d'objets et récupération de données attributaires
Re-bonjour !
Je suis entièrement d'accord avec Maurice, sa méthode fonctionne parfaitement !
Gaëlle
Hors ligne
#21 Thu 13 March 2008 15:24
- Maestro de la salsa
- Participant actif
- Date d'inscription: 7 Jun 2006
- Messages: 133
Re: superposition d'objets et récupération de données attributaires
Ouh là Maurice...bravo j'ai verifié ça marche. Mais il ya quelque chose qui cloche là...
La deuxième requete est bien:
Select PI.ID_poteau, VOIES.ID_voie from PI, VOIES where PI.Obj Within VOIES.Obj And PI.ID_voie_1<>VOIES.ID_voie into Sel2
Dans mon cas le resultat de la première requete + la mise à jour donne:
ID_poteau l ID_voie1l ID_voie2 l ID_voie3l
-------------l-----------l-------------l-----------l
Pi1 l V1 l l l
-------------l-----------l-------------l-----------l
Pi2 l V1 l l l
-------------l-----------l-------------l-----------l
Pi3 l V1 l l l
-------------l-----------l-------------l-----------l
Pi4 l V3 l l l
-------------l-----------l-------------l-----------l
Dans la deuxième requete tu as deux conditions à remplir: obj de poteau dans obj de voie ET Id_voie1 DIFFERENT de Id_voie.
Le resultat me fait sortir Pi1 et V3. Je vais revoir mes cours de SQL particulièrement les jointure: Pi1 est dans V3 mais V3 fait déja partie de ID_voie1....
Tu peux m'éclairer un peu Maurice????
Hors ligne
#22 Thu 13 March 2008 16:03
- Maurice
- Membre
- Lieu: Montpellier
- Date d'inscription: 5 Sep 2005
- Messages: 5331
Re: superposition d'objets et récupération de données attributaires
C'est bien la bonne requête n° 2 ...et le résultat est correct
Les requêtes n° 3 et 4 donneront, dans un ordre inconnu, Pi1 et V2 puis Pi1 et V4...et le tableau final sera bon
L'ordre d'apparition des inclusions dépend de l'ordre interne des objets de la couche VOIES, mais après n itérations (n = nombre maximal "d'inclusion ") on a toujours bon
Hors ligne
#23 Thu 13 March 2008 16:14
- Maestro de la salsa
- Participant actif
- Date d'inscription: 7 Jun 2006
- Messages: 133
Re: superposition d'objets et récupération de données attributaires
Oui ça j'ai bien compris et au final le resultat est bon...
Mais en terme de logique comment tu m'explique le fait que j'ai V3 après la première MAJ dans ce tableau:
ID_poteau l ID_voie1l ID_voie2 l ID_voie3l
-------------l-----------l-------------l-----------l
Pi1 l V1 l l l
-------------l-----------l-------------l-----------l
Pi2 l V1 l l l
-------------l-----------l-------------l-----------l
Pi3 l V1 l l l
-------------l-----------l-------------l-----------l
Pi4 l V3 l l l
-------------l-----------l-------------l-----------l
Et que par la suite tu spécifie deux conditions de jointures (Obj de Poteau dans obj de Voie ET ID_Voie1<>Id_Voie) et il prend en compte V3 qui logiquement (enfin pour moi) ne satisfait pas à l'une des conditions car faisant partie de ID_Voie1. Tu me comprends Maurice?
Hors ligne
#24 Thu 13 March 2008 16:24
- Maurice
- Membre
- Lieu: Montpellier
- Date d'inscription: 5 Sep 2005
- Messages: 5331
Re: superposition d'objets et récupération de données attributaires
Parce que c'est objet par objet (ligne à ligne) que se fait la sélection
Il y a V3 pour Pi4 (pour lui c'est fini, il n'est que là) mais il y a, après la condition spatiale, V1, V2, V3 et V4 pour Pi1 ...et la seconde condition fera que c'est l'un des 3 qui sera sélectionné, sauf V1 déjà présent dans ID_voie1, celui des 3 qui se présente le premier et qui satisfait aux 2 conditions ...
Plus clair ??
Hors ligne
#25 Thu 13 March 2008 16:59
- Maestro de la salsa
- Participant actif
- Date d'inscription: 7 Jun 2006
- Messages: 133
Re: superposition d'objets et récupération de données attributaires
Non c'est bon...ligne par ligne ok
Merci et du coup plus besoin du code Excel...
Hors ligne
#26 Fri 14 March 2008 09:58
- depdep
- Participant actif
- Date d'inscription: 24 Sep 2006
- Messages: 74
Re: superposition d'objets et récupération de données attributaires
Merci à tous les deux !
Gaëlle
Hors ligne
Pages: 1
- Sujet précédent - superposition d'objets et récupération de données attributaires - Sujet suivant