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 Tue 10 May 2011 16:35

Antoine Besnard
Participant occasionnel
Date d'inscription: 20 Feb 2011
Messages: 11

Problème de requête ou de jointure?

Bonjour,

Voici mon problème; sous arcgis, je possède d'un coté un fichier de 2073 points ayant un "code bâtiment" et de l'autre une table excel comprenant une colonne avec les activités qui y sont pratiquées ainsi qu'une colonne avec le "code bâtiment" associé.

Le hic c'est que plusieurs activités peuvent être pratiquées dans ces bâtiments, un même "code bâtiment" existe en plusieurs exemplaire dans la table excel car il peu être associé à une activité A B C... et donc lors de la jointure entre le shape et la table grâce au "code bâtiment", un seul type d'activité est retenu et associé à chaque points (ce qui est Logique mais pose problème!!).

Je voudrais donc savoir comment faire à partir de ces données pour pouvoir en fait réaliser des requêtes tel que :
-"sélectionner les bâtiments ou sont pratiqué A et B et C..."
-"sélectionner les bâtiments ou sont pratiqué A ou B ou C..."
- etc...

C'est peu être tellement simple que ça ne me viens pas à l'esprit, mais si quelqu'un a une idée sur le problème ça m'aiderait énormément dans mon travail.

Merci.

Hors ligne

 

#2 Tue 10 May 2011 17:59

dominique.lys
Participant assidu
Date d'inscription: 5 Oct 2006
Messages: 473
Site web

Re: Problème de requête ou de jointure?

Tu peux utiliser les relations plutôt que les jointures:
-clic droit sur la couche des bâtiments / Join an relates / Relates... puis configurer la relation avec la table Excel sur le code bâtiment
-ouvrir la table Excel (on reste dans ds ArcMap) sélectionner la ou les activités qui interessent puis cliquer sur le bouton option en bas puis Related tables et choisir la table liée. La table des bâtiments s'ouvre et tous les bâtiments concernés par les activités choisies sont sélectionnés

J'en conviens c'est pas pratique et très limité mais c'est une première solution simple. Il y a peut être mieux mais l'idéal pour traiter ce genre de cas est je pense d'utiliser un vrai SGBD avec du vrai SQL dedans.

Hors ligne

 

#3 Tue 10 May 2011 20:50

Spacejo
Membre
Lieu: Nancy
Date d'inscription: 17 Aug 2008
Messages: 2511

Re: Problème de requête ou de jointure?

Salut,

Peut être en concaténant tes activités par batiment.
Pour celà dupliquer les points représentant le même batiment pour plusieurs activité.
A essayer wink
A+
Joël

Hors ligne

 

#4 Wed 11 May 2011 09:02

Antoine Besnard
Participant occasionnel
Date d'inscription: 20 Feb 2011
Messages: 11

Re: Problème de requête ou de jointure?

Ok, je vais regarder tout ça. Je ne connais pas l'outil de concaténation mais je pense que cela pourrait être la solution à mon problème sous arcgis, sinon et bien je vais me lancer dans l'inconnu avec QGIS et PostGIS-Postgre pour le SQL...!
En tout cas merci beaucoup pour ces renseignements, ça m'aide déjà bien à avancer.

Dernière modification par Antoine Besnard (Wed 11 May 2011 09:07)

Hors ligne

 

#5 Wed 11 May 2011 16:18

Antoine Besnard
Participant occasionnel
Date d'inscription: 20 Feb 2011
Messages: 11

Re: Problème de requête ou de jointure?

Rebonjour! alors je pense toucher au but avec "jointure et relations" mais après avoir créer la relation, une fois les activités choisies la case "tables reliées" apparait mais n'est pas fonctionnelle...(voir image jointe) Quelle mauvaise manip ais-je pu faire?

Sinon la concaténation peu être aussi une solution mais je ne vois pas comment procéder pour ce traitement, ne serais-ce que pour dupliquer mes points ayant plusieurs activité, car les activités ne sont renseignées que dans la table excel et les points du shape représentent en fait les bâtiments uniques sans "doublons d'activités".

J'y suis presque mais j'ai 'cor besoin d'un petit coup de pouce!

Merci de votre aide

Dernière modification par Antoine Besnard (Wed 11 May 2011 16:24)


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

Hors ligne

 

#6 Wed 11 May 2011 17:41

dominique.lys
Participant assidu
Date d'inscription: 5 Oct 2006
Messages: 473
Site web

Re: Problème de requête ou de jointure?

Bizarre que ta table reliée soit grisée, je ne comprend pas

Ici il y a une demande similaire, la solution passe par Access + code VBA.

Personnellement je ferai ça avec QGIS + Spatialite, c'est très pratique pour des besoins SQL spécifique. Pour faire simple, tu peux utiliser Spatialite GUI dispo Ici, c'est un petit utilitaire pour manager les bases Spatialite, pas besoin d'install ni de QGIS.

-Lance l'outil puis Files / Create new DB
-File / Advanced / Load DBF (si besoin exporte ta table Excel en DBF avec ArcGIS)
-Ensuite tape une requête de ce type

Code:

SELECT code_bat, count() as nbAct, group_concat(activite,';') as activite FROM "table_activite" GROUP BY code_bat

si le résultat te conviens tape CREATE TABLE result as SELECT code_bat ...... , rafraichi l'arbre des tables puis clic droit sur ton résultat puis export vers CSV, tu pourra ensuite réimporter le fichier CSV ds Excel ou ArcGIS.

ça parait lourd comme ça mais c'est rapide et efficace, sous arcGIS à part un développement spécifique je vois pas de solution simple (dites moi si je me trompe), avec Excel peut être qu'il y a une bidouille qui marche bien

Hors ligne

 

#7 Fri 13 May 2011 09:04

Antoine Besnard
Participant occasionnel
Date d'inscription: 20 Feb 2011
Messages: 11

Re: Problème de requête ou de jointure?

Ralala, il n'y pas Access disponible sur le lieu de mon stage et la méthode ci-dessus pose problème avec les feuilles excel car si je passe en dbf il y a énormément de de texte important qui dégage dans mes champs vu que les caractères sont limités quand on passe de excel à dbf...Bref je vais donc devoir bidouiller en superposant les shapes des bâtiments associés à chaque activités séparément...105 activités donc 105 shapes de batiments...
En sachant qu'il y a rarement plus de 5 activité par bâtimen! ça sera un peu galère pour superposer des symboles mais bon... Je vois pas d'autres solution.

Je reste ouvert à vos propositions, l'idée du "Join an relates" semble pourtant bonne mais je ne comprend vraiment pas pourquoi la table reliée reste grisée...

Sinon je prendrai du temps chez moi pour me lancer sur Qgis et postgres-postgis je pense que  y'a moyen de faire de bon trucs avec ça...!

Dernière modification par Antoine Besnard (Fri 13 May 2011 09:06)

Hors ligne

 

#8 Fri 13 May 2011 12:42

dominique.lys
Participant assidu
Date d'inscription: 5 Oct 2006
Messages: 473
Site web

Re: Problème de requête ou de jointure?

En fait la table DBF dont tu a besoin ne nécessite que 2 champs : code activité et code bâtiment. Une fois que tu auras fait le group by il suffit de joindre le résultat à la couche des bâtiments pour rapatrier la concaténation des codes activité. Préparer une DBF temporaire avec ces 2 champs devrait suffire pr le calcul, non?

Hors ligne

 

#9 Mon 16 May 2011 14:17

Antoine Besnard
Participant occasionnel
Date d'inscription: 20 Feb 2011
Messages: 11

Re: Problème de requête ou de jointure?

D'accord, je vais essayer ça quand je serais sur le poste. Donc si j'ai bien compris, cette manip sous Spatialite GUI va me permettre de regrouper les infos activités par "code bâtiment" et de les relier aux entités ponctuelles correspondantes?

Cela va-t-il poser problème pour faire suivre les infos des autres champs? Car en fait la grande idée est en effet de regrouper les activité par bâtiments (car elles sont la source des "doublons") mais il y a de nombreux champs associés... c'est là le problème!

exemple de table pour un batiment:

code bat       activité          revêtement      ...etc...      lumière      gradins
200              basket           parquet                            oui            oui
200              handball        synthétique                       oui            non


Mon souci est donc en fait de pouvoir rassembler les infos associées à l'entité ponctuelle 200. Afin plus tard de réaliser des requêtes complexes par attributs.. Outils dispo : Arcgis, Excel... et tapage de doigts si j'installe quelque chose sans l'accord du responsable informatique!

Merci pour vos réponses!

Hors ligne

 

#10 Mon 16 May 2011 15:57

dominique.lys
Participant assidu
Date d'inscription: 5 Oct 2006
Messages: 473
Site web

Re: Problème de requête ou de jointure?

La requête que je t'ai proposé te permettra d'obtenir ceci:

code_bat    nbAct        activite
200            2                basket;handball

tu pourras l'étendre à autant de champs que tu le désire:

code_bat    nbAct        activite                        revêtement                        lumière
200            2                basket;handball            parquet;synthétique            oui;oui


Mais qu'on soit bien d'accord, le seul et unique intérêt de faire ça est de compiler toutes les infos dans une table géo (sans doublons) pour faciliter sa consultation "visuel" ds Arcmap, maintenant je te laisse imaginer la galère pour faire des requêtes sur ces champs concaténés, ponctuellement pourquoi pas (opérateur LIKE) mais pour un traitement sérieux non je m'y risquerai pas...

Dis-toi que si ces tables sont séparées c'est pour une raison, c'est la modélisation de la BD qui exige cela et si tu veux écrire des requêtes élaborées et propres il te faut absolument conserver ce modèle.

Je pense qu'un vrai SGBD est indispensable pour pouvoir travailler correctement avec des relations, mais tout dépends de tes objectifs souvent quelques bidouilles sont largement suffisantes. Quelles est le but final de toutes ces requêtes compliquées ?

Voilà un peu lecture sur les relations 1-n avec ArcGIS:
http://georezo.net/forum/viewtopic.php?id=60077
http://www.forumsig.org/showthread.php?t=20643

Dernière modification par dominique.lys (Mon 16 May 2011 15:58)

Hors ligne

 

#11 Mon 16 May 2011 17:00

Antoine Besnard
Participant occasionnel
Date d'inscription: 20 Feb 2011
Messages: 11

Re: Problème de requête ou de jointure?

Très bien, je vois le truc! En fait l'idée c'est de pouvoir faire apparaitre sur demande différent points répondant à un ou divers critères. par exemple - selectionner les bâtiments pouvant accueillir une activité de hand, de basket et qui possède un gradin
- selectionner tout les bâtiments accueillant du basket et chaufés l'hiver
... etc

La difficulté est en fait liée à ce que j'ai à disposition comme outils... Je pense donc que je vais continuer ce que j’ai commencé avec les outils que j'ai, c'est à dire crée autant de shape ponctuels que d'activités afin de pouvoir faire les requêtes au seins des types d'activités sans le problème de doublons. Pour ensuite recouper les infos en superposant par exemple les bat de basket chaufé avec un rond et ceux de hand avec une croix et de la couleurs pour d'autres critères ainsi je pourais afficher pas mal de choses déja.

Sinon je vais m'autoformer sur postgis et Qgis chez moi et voir si j'ai le temps de proposer quelque chose de mieux!

En tout cas merci!

Hors ligne

 

#12 Mon 16 May 2011 17:31

dominique.lys
Participant assidu
Date d'inscription: 5 Oct 2006
Messages: 473
Site web

Re: Problème de requête ou de jointure?

ok, j'ai une idée + simple. pourquoi ne pas structurer ta table Excel de cette façon :

code bat    act            gradins      basket    hand         gradins
200           basket       oui            1              0           1
200           handball     non          0               1           0

tu créé autant de champs qu'il a d'infos qui t’intéressent avec à chaque fois 0 ou 1 pour l'équivalent de non/oui. Tu peux très facilement faire cela ds Excel avec des formule du genre : =SI(B2="basket";1;0)

Ensuite charge ta table ds ArcMap, tu l'ouvres tu fait un clic droit sur le champs code_bat et tu choisie summarize (regrouper je crois en français). Cela te permet de calculer des stats en agrégeant les données selon le code_bat commun. Tu choisie simplement les champs que tu souhaite obtenir (ici basket, hand, gradins) et la statistique à calculer. Si tu choisis max tu obtiendras :

code bat        basket       hand      gradins
200               1              1           1


Bon ça reste qu'une approche mais je pense que tu peux peaufiner l'idée et arriver à tes fins. Avec une tables structurée de la sorte il sera facile d'écrire le type de requête qui t’intéressent.

Hors ligne

 

#13 Tue 17 May 2011 09:29

Antoine Besnard
Participant occasionnel
Date d'inscription: 20 Feb 2011
Messages: 11

Re: Problème de requête ou de jointure?

Oui, j'y ais pensé aussi, j'ai plus de 2000 batiments du coup j'avais abandonner l'idée pour 3 choses; je ne connaissais pas de méthode pour affecter automatiquement des codes (formules du genre =SI(B2="basket";1;0)), excel 2003 n'accepte pas plus de 256 colonnes. Et aussi car arcgis ne charge pas toute ma table excel qui fesait déja à l'origine 3411 lignes(batiments, doublons compris) et 251 colonnes (critères affectés aux batiment)..!!!

Donc je vais quand même essayer cette méthode en épurant les critères inutiles de la table d'origine et en remplaçant LE champs 'activité' par DES champs 'basket' , 'hand' etc... en espérant que ça passe! il y a 105 activités!

Cela me permettrait effectivement de fusionner tout les bâtiments qui ont plusieurs activités et donc avoir une symbologie propre pour cela. Il ne restera plus qu'un souci, les infos associées du genre 'dimension_terrain' car si le bat 200 fait hand et basket, il y aura 2 dimensions de terrains et la fusion ne pourra se faire.
C'est là que je peu utiliser mes 105 shapes par activités qui n'ont pas de doublons pour ajouter de l'info.

Bref je vois ça quand j'ai le poste avec arcgis dispo en milieu de semaine.

Merci pour les infos!

Hors ligne

 

Pied de page des forums

Powered by FluxBB