#1 Fri 19 October 2007 20:11
- nathM
- Participant occasionnel
- Date d'inscription: 13 Oct 2005
- Messages: 10
Union de deux tables
Bonjour,
Je travaille habituellement avec Arcgis mais doit effectuer une analyse sur Mapinfo 7.5. Il me faudrait l'équivalent de la fonction "union" pour croiser deux tables. J'ai bien trouvé le mbx overlay qui effectue l'équivalent d'"intersect" mais rien qui se rapproche de la fonction union.
Quelqu'un peut-il m'aider ?
Merci d'avance.
Hors ligne
#2 Sat 20 October 2007 00:37
- Maurice
- Membre
- Lieu: Montpellier
- Date d'inscription: 5 Sep 2005
- Messages: 5331
Re: Union de deux tables
Bonjour
Vous trouverez ici même un outil qui fait l'union ou l'intersection de tables et que j'avais mis à disposition de Georezo
Bons tests ...et n'hésitez pas à faire éventuellement des remarques
Hors ligne
#3 Tue 10 June 2008 16:46
- Laaris
- Participant occasionnel
- Date d'inscription: 30 Apr 2008
- Messages: 12
Re: Union de deux tables
Bonjour,
Je voudrais fusionner six tables ayant exactement la même structure. Chaque table correspondant aux données d'un département, je voudrais obtenir une table regroupant toutes les données de la région.
J'ai voulu utiliser l'outil décrit ci-dessus, mais il m'affiche qu'elles sont toutes non-traitables.
L'aide indique que certains types de tables ne sont pas traitées. J'imagine que les miennes en font malheureusement partie (bien que je sois incapable de dire de quel type sont mes tables).
En SQL une série d'instructions UNION suffiraient, n'y a-t-il pas un moyen de le faire sous MapInfo?
Merci d'avance.
Hors ligne
#4 Tue 10 June 2008 17:01
- Nicolas Szlapka
- Participant actif
- Lieu: NPDC
- Date d'inscription: 20 Dec 2006
- Messages: 107
Re: Union de deux tables
Bonjour.
Ce que je fais pour assembler des Tables de même structure, c'est un léger bidouillage :
1) Enregistrer une Table sous un autre nom (ex: ZoneGlobale)
Vous pouvez prendre la Table correspondant au premier département dans l'ordre croissant.
2) Ouvrir cette nouvelle Table dans MapInfo
3) Menu Ajouter --> Table
Ajoutez la 2e Table (2e département dans l'ordre croissant) à la Table ZoneGlobale
4) Idem pour les départements suivants
5) Enregistrer la Table ZoneGlobale (cliquer sur l'icone de la "Disquette jaune")
RAPPEL : à faire si toutes les Tables ont bien la même structure
Nicolas
Hors ligne
#5 Tue 10 June 2008 17:02
- Marc-André
- Participant assidu
- Lieu: Montréal
- Date d'inscription: 30 Sep 2005
- Messages: 688
Re: Union de deux tables
Bonjour,
Essayez cet autre outil: «Combine tables» disponible ici:
http://geomatique-nt.unige.ch/gumi/outils.htm#ta
Hors ligne
#6 Tue 10 June 2008 17:08
- Laaris
- Participant occasionnel
- Date d'inscription: 30 Apr 2008
- Messages: 12
Re: Union de deux tables
Merci de votre réponse.
J'ai enregistré la table du premier département sous un autre nom, mais ensuite la fonction Ajouter du menu Table n'est pas disponible.
J'imagine que cela vient aussi du type de mes tables mais je ne suis toujours pas capable de dire quel est ce type. Tout ce que je sais (et qui m'intrigue même si on m'a dit que c'était normal et qui donc me fait dire que c'est peut-être de là que vient le problème) c'est qu'elles permettent d'afficher des points, mais que les coordonnées de ces points ne sont pas dans les tables.
EDIT: je n'avais pas lu le second message, je vais essayer cet outil, merci
Dernière modification par Laaris (Tue 10 June 2008 17:10)
Hors ligne
#7 Tue 10 June 2008 17:10
- Nicolas Szlapka
- Participant actif
- Lieu: NPDC
- Date d'inscription: 20 Dec 2006
- Messages: 107
Re: Union de deux tables
Bon, et bien je suis passé une minute trop tôt...
J'ai l'air de quoi maintenant, face à cet outil ?
Vous pouvez l'utiliser Laaris, ça fonctionne bien.
Merci Marc-André !
modif' pour le message #6 :
si Ajouter est grisé, peut-être que vous n'avez qu'une seule Table ouverte...
si les autres Tables (pour chaque département) sont ouvertes, je ne vois pas trop d'où viendrait le problème.
Dernière modification par Nicolas Szlapka (Tue 10 June 2008 17:14)
Nicolas
Hors ligne
#8 Tue 10 June 2008 17:10
- Maurice
- Membre
- Lieu: Montpellier
- Date d'inscription: 5 Sep 2005
- Messages: 5331
Re: Union de deux tables
'ai voulu utiliser l'outil décrit ci-dessus, mais il m'affiche qu'elles sont toutes non-traitables.
L'outil concerne des tables de polygones
Ca ne doit pas être votre cas
De toute façon votre problématique est l'ajout de table, pas la détermination de leur intersection/union (les départements - normalement - ne se chevauchent pas )
Hors ligne
#9 Tue 10 June 2008 17:19
- Laaris
- Participant occasionnel
- Date d'inscription: 30 Apr 2008
- Messages: 12
Re: Union de deux tables
L'outil de Marc-André fonctionne parfaitement. Merci à tous.
Hors ligne
#11 Wed 11 June 2008 09:54
- Fabius
- Participant actif
- Date d'inscription: 19 Mar 2008
- Messages: 130
Re: Union de deux tables
Bonjour
Vous trouverez ici même un outil qui fait l'union ou l'intersection de tables et que j'avais mis à disposition de Georezo
Bons tests ...et n'hésitez pas à faire éventuellement des remarques
Bonjour j'ai tetser ce programme il est tres pratique malgres le fait que je trouve que la navigation (le fait de clicker sur stop est peu intuitif). J'aurais une question plus axé programmation que éfficacité sur le sujet au risque d'etre un peu HS. Comment faire pour pouvoir activer une ouverture de table dans le popupmenu?
Bonne journée a tous
Hors ligne
#12 Wed 11 June 2008 11:33
- Maurice
- Membre
- Lieu: Montpellier
- Date d'inscription: 5 Sep 2005
- Messages: 5331
Re: Union de deux tables
...le fait de clicker sur stop est peu intuitif
D'où les explications en tête de la boite de dialogue . Mais on peut faire mieux !!
Comment...activer une ouverture de table dans le popupmenu?
Dans un programme MB ? Prévoir une sous procédure (un "handler", appelé par un calling pop-handler) qui lit le choix fait dans le PopupMenu (par un ReadControlValue) et ouvre la table (Open Table...)
Hors ligne
#13 Wed 11 June 2008 12:22
- Fabius
- Participant actif
- Date d'inscription: 19 Mar 2008
- Messages: 130
Re: Union de deux tables
oui c'est vrai, mais je pense que le seul défaut (il faut bien en trouver) de ce programme c'est la navigation qui en découle.
Pour la question que je posais oui c'est bien pour un programme MB, ca m'interesserait de pouvoir utiliser ceci dans un ou plusieurs de mes programmes. L'explication me parle globalement je vais m'y essayer
Hors ligne
#14 Thu 12 June 2008 10:18
- Fabius
- Participant actif
- Date d'inscription: 19 Mar 2008
- Messages: 130
Re: Union de deux tables
Bonjour, je reviens vers vous puisque je bloque dans ma tache, auriez vous un bout de code a me re transmettre que je pourrais ensuite adpater?
Merci
Hors ligne
#15 Thu 12 June 2008 11:28
- Maurice
- Membre
- Lieu: Montpellier
- Date d'inscription: 5 Sep 2005
- Messages: 5331
Re: Union de deux tables
Dialog
...
Control PopupMenu
title (table1;table2;table3)
calling Popup_handler
ID 1
...
Control OKButton
ID 6
Control CancelButton
ID 7
'---------------------------------------
Sub Popup_handler
dim z as string
z=readcontrolvalue(1)
If z = "table1" then
Open Table "C:\temp\table1.tab"
ElseIf z = "table2" then
Open Table "D:\machin\truc\table2.tab"
Else
Open Table "Z:\bidule\table3.tab"
End If
End sub
ps:
...que je pourrais ensuite adpater?
L'expression exacte est "ad patres"
Hors ligne
#16 Thu 12 June 2008 11:56
- Fabius
- Participant actif
- Date d'inscription: 19 Mar 2008
- Messages: 130
Re: Union de deux tables
Oui vous avez raison mais pour moi le latin c'est un peu du chinois quand meme
Merci pour votre code, cependant je voulais l'adapter au mien. Le pop menu de mon code trouve ses titres dans le nom des tables ouvertes:
Control PopUpMenu Position 110,10 width 90 Height 10 id 31 Title from Variable NomTable Value A calling actiondbl
Sub Actiondbl
nb = NumTables()
ReDim NomTable(nb)
For i =1 to nb
NomTable(i) = TableInfo(i,Tab_Info_Name)
Next
End Sub
J'aurais aimé rajouter la possibilité d'ouvrir une table si jamais l'utilisateur ne l'a pas ouverte
Hors ligne
#17 Thu 12 June 2008 12:40
- Maurice
- Membre
- Lieu: Montpellier
- Date d'inscription: 5 Sep 2005
- Messages: 5331
Re: Union de deux tables
L'organisation ne va pas...
Le contenu de NomTable() doit être défini (et pas besoin d'une procédure pour ça) avant le Dialog qui comprend le PopupMenu et celui-ci doit appeler (par calling) une sous procédure pour ouvrir les tables choisies
Pour le dernier point, il suffit de prévoir un premiet item dans NomTable() qui es "table non ouverte" et dans la sous procédure pour ouvrir les tables, le choix de ce premier item provoque l'ouverture d'un FileOpenDlg pour la choisir puis d'un Open table...pour l'ouvrir
Hors ligne
#18 Thu 12 June 2008 14:47
- Fabius
- Participant actif
- Date d'inscription: 19 Mar 2008
- Messages: 130
Re: Union de deux tables
Je ne suis pas convaincu, mon programme me permet de voir apparaitre dans le popupmenu TOUTES les tables ouvertes et donc permet facillement de choisir la table qui nous interesse, celles ci varient a chaque utilisation du programme donc impossible de les definir avant.
La fin de votre explication me parrait logique, il suffirait d'ajouter un choix qui serait "ouvrir une autre table", pour l'ouvertur du file opendlg pas de pb.
Le probleme résidepour moi en deux points :
-comment garder l'affichage des tables ouvertes ?
-comment rajouter un choix a la liste?
Hors ligne
#19 Thu 12 June 2008 22:31
- Maurice
- Membre
- Lieu: Montpellier
- Date d'inscription: 5 Sep 2005
- Messages: 5331
Re: Union de deux tables
On s'est mal compris...
Je suppose que vous remplissez NomTable() dans le programme mais avant le PopupMenu (c'est peut être ça votre value A ??)
Sinon ce PopupMenu s'ouvrira vide...
Ma suggestion d'organisation et de code serait:
Sub mon_dialogue
Dim nb,i As Integer
nb = NumTables()
ReDim NomTable(nb+1)
y=0
NomTable(1)="table non ouverte"
For i =2 to nb+1
NomTable(i) = TableInfo(i-1,1)
Next
Dialog
Control PopupMenu
title from variable NomTable
calling Popup_handler
Into ma_variable
ID 1
Control OKButton
ID 6
Control CancelButton
ID 7
End sub
'---------------------------------------
Sub Popup_handler
dim e_filename as string
dim z as integer
z=readcontrolvalue(1)
If z = 1 then
e_filename=FileOpenDlg( "C:\Temp\", "", "TAB", "nouvelle table" )
open table e_filename
redim NomTable(ubound(NomTable)+1)
y=ubound(NomTable)
NomTable(y)=TableInfo(PathToTableName$(e_filename),1)
Alter control 1 title from variable NomTable
note "à partir de là, faire ce que je veux...un call ma_procedure par exemple"
Else
note "à partir de là, faire ce que je veux...un call ma_procedure par exemple"
End If
End sub
nb: si z doit être réutilisé plus loin, le définir au niveau supérieur (avant le Sub Main)
Sinon on ne pourra utiliser que ma_variable (définie aussi avant le Main) après un OK dans le dialogue
Hors ligne