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

GEODATA DAYS 2024

#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 smile

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

depdep a écrit:

...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


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

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 sad
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 (tongue), ci joint un exemple de l'outil à utiliser dans Excel:
menu Données-> Rapport de Tableau Croisé Dynamique   (un des "musts" d'Excel...)


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

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 smile

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 smile

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

 

Pied de page des forums

Powered by FluxBB