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 Tue 18 December 2007 09:27

rastamath69
Juste Inscrit !
Lieu: Lyon
Date d'inscription: 18 Dec 2007
Messages: 8

[MapBasic] Fusionner deux table mapInfo

Bonjour,

je débute sur MapInfo (version 7.8), et j'aurais souhaité faire fusionner deux tables.

Je m'explique, ces deux table ont la même structure toutes les deux (les mêmes colonnes), elles ont certaines données en commun, et chacune d'elle a des données en plus que l'autre n'a pas.
Mon but: faire une seule table sans faire de redondance d'informations.

J'ai bien vu une commande "create object as union", mais je ne suis pas sur qu'elle réponde à mon besoin.

Merci d'avance!

Bonne journée.

MATH

Hors ligne

 

#2 Tue 18 December 2007 09:36

Maurice
Membre
Lieu: Montpellier
Date d'inscription: 5 Sep 2005
Messages: 5331

Re: [MapBasic] Fusionner deux table mapInfo

Bonjour
S'il s'agit d'ajouter des données attributaires, une suite de sélections et de mise à jour de celles-ci suffira
S'il s'agit des objets graphiques, le plus simple est de passer par la sélection des objets communs (dans n'importe quelle table) puis d'inverser la sélection et enfin d'ajouter (menu TAble-> Ajouter) cette sélection à l'autre table
Si c'est un mélange des deux il faut faire ces deux manip' l'une après l'autre

Hors ligne

 

#3 Tue 18 December 2007 10:09

rastamath69
Juste Inscrit !
Lieu: Lyon
Date d'inscription: 18 Dec 2007
Messages: 8

Re: [MapBasic] Fusionner deux table mapInfo

Merci pour ta réponse très rapide!! :-)

je ne comprend pas très bien la différence entre des objets graphiques et non graphiques? Je veux dire que mes tables me permettent d'avoir un graphique (menu fenêtre -> Carte) mais également des tableaux concrets de données (menu fenêtre -> Données). cela fait-il une différence dans les requêtes que je dois exécuter??

Sinon pour faire une sélection des données communes que ces deux tables ont, je pense pouvoir me débrouiller avec un "intersects", mais par contre je ne sais pas faire la sélection inversée (pour sélectionner dans chaque table les données qui ne sont pas dans l'intersection), ce qui effectivement me simplifierai grandement la vie...

MATH

Hors ligne

 

#4 Tue 18 December 2007 10:49

Maurice
Membre
Lieu: Montpellier
Date d'inscription: 5 Sep 2005
Messages: 5331

Re: [MapBasic] Fusionner deux table mapInfo

La différence est bien celle que tu dis. Là il s'agit de tables "complètes" (graphique+données, avec une ligne de données par graphique). Mais quand tu parles de "données en commun", parles tu d'objets graphiques communs ou  de données attributaires communes ??
S'il s'agit de graohiques (formes) communs et que ce sont des polygones, le critère à utiliser est 'entirely within' et pas 'intersects' et pour être sûr que les objets sont vraiment les mêmes il faudrait ajouter ET surfaces égales ET mêmes périmètres...
L'inversion de la sélection est accessible par le menu Selection

ps: l'autre cas de figure ce sont des objets identiques dans les deux tables mais des attributs (données) différents (une moitié remplis dans une table et l'autre moitié remplis dans l'autre table, par exemple)

Hors ligne

 

#5 Tue 18 December 2007 15:17

rastamath69
Juste Inscrit !
Lieu: Lyon
Date d'inscription: 18 Dec 2007
Messages: 8

Re: [MapBasic] Fusionner deux table mapInfo

Je suis bien dans l'autre cas de figure, j'ai des objets identiques mais pas les mêmes attributs...

J'ai fini par comprendre que visiblement les opérateurs tels que Intersects ou Contains ne s'appliquaient qu'à des types d'objet graphique (ils s'appuyent sur des coordonnées pour inclurent ou exclurent les données à sortir)

Donc effectivement ce n'est pas de ça dont j'ai besoin, il faudrait que j'arrive à construire des requêtes mapBasic qui me permettent d'isoler des ensembles de données (par exemple construire une table contenant uniquement les données communes à mes deux tables de départ),
et là, je bloque...

MATH

Hors ligne

 

#6 Tue 18 December 2007 16:28

Maurice
Membre
Lieu: Montpellier
Date d'inscription: 5 Sep 2005
Messages: 5331

Re: [MapBasic] Fusionner deux table mapInfo

Il s'agit de requête SQL (pas MapBasic...)
Ce sra plus ou moins facile suivant s'il y a, dans chacune des tables, une colonne servant d'identifiant unique...ou pas.!
Est-ce le cas ??

Hors ligne

 

#7 Tue 18 December 2007 17:23

rastamath69
Juste Inscrit !
Lieu: Lyon
Date d'inscription: 18 Dec 2007
Messages: 8

Re: [MapBasic] Fusionner deux table mapInfo

Normalement il y a un identifiant unique mais là, cet identifiant pourra être dédoublé...

Pour être plus clair, je travaille avec des tables contenant des communes.

Les deux tables dont je parle sont:

1) celle que mes utilisateurs peuvent modifier (par exemple ils peuvent couper une commune en deux: CHAMBERY devient CHAMBERY_NORD et CHAMBERY_SUD) C'est dans ce cas où mon identifiant unique de commune se dédouble.

2) et celle qui peut m'être fournie afin de faire une mise à jour (elle peut donc contenir des nouvelles communes que je n'avais pas avant).

Mon but est donc de faire fusionner ces deux tables de sorte à avoir les communes non changées, les nouvelles et d'intégrer les moficiations faites par mes utilisateurs.

Là je viens de passer l'après-midi à essayer diverses requêtes de type SQL pour isoler par exemple tous mes identifiants qui ne seraient plus unique mais MapBasic ne semble pas accepter toutes les formes de requêtes SQL...

MATH

Hors ligne

 

#8 Tue 18 December 2007 17:40

Maurice
Membre
Lieu: Montpellier
Date d'inscription: 5 Sep 2005
Messages: 5331

Re: [MapBasic] Fusionner deux table mapInfo

Aïe...ça se complique !!
Il est tard et je vais prendre le temps de réfléchir smile
Quand même, pour l'identifiant unique (le code INSEE qui risque d'être deux fois le même dans l'exemple cité) on peut utiliser

Code:

Select INSEE, Count(*) "nombre" from COMMUNE group by INSEE order by COL2 Desc into occurence

Le tableau obtenu permet d'identifier en haut de liste les INSEE dédoublés...ou pire !

Hors ligne

 

#9 Tue 18 December 2007 23:31

Maurice
Membre
Lieu: Montpellier
Date d'inscription: 5 Sep 2005
Messages: 5331

Re: [MapBasic] Fusionner deux table mapInfo

Bon, dans l'ordre et en utilisant la fenêtre MapBasic=FMB (voir ici la rubrique "documents spécifiques"):
Je suppose que le code INSEE est en COL1 et que toutes les colonnes suivantes, de 2 à n, sont à mettre à jour
Je suppose aussi qu'on remplit des cellules vides de table_utilisateur par les infos correspondantes de table_fournisseur (et pas qu'on met à jour - change - leur contenu existant)
1- sélection des communes de la table utilisateur qui figurent aussi dans la table fournisseur ET qui ont une COL2 vide (ou nulle si c'est du nombre), puis mise à jour de COL2 de la sélection par les valeurs de COL2 de table_fournisseur (ici par la FMB, sinon menu Table->Mettre à jour colonne)

Code:

select * from table_utilisateur,table_fournisseur where table_utilisateur.INSEE=table_fournisseur.INSEE And table_utilisateur.COL2="" into sel1
Add Column "sel1" (COL2) From table_fournisseur Set To COL2 Where COL1 = COL1

2- mise à jour des n autres colonnes une par une
mêmes commandes en passant sur les deux lignes de COL2 à COL3, COL4, ...COLn
3- enregistrer table_utilisateur
On a maintenant dans table_utilisateur toutes les infos qui y étaient déjà, plus les infos de table_fournisseur qui ont le même INSEE
4- sélectionner les éléments de table_fournisseur qui ne sont pas dans table_utilisateur

Code:

select * from table_fournisseur where NOT INSEE=any (select INSEE from table_utilisateur) into sel2

5- ajouter sel2 à table_utilisateur (menu Table->Ajouter)
6- enregistrer table_utilisateur
7- traiter "à la main" le cas des communes dédoublées (sélection par la requête donnée dans le post précédent): pour l'instant elles ont le même identifiant et les mêmes données là où leurs colonnes étaient vides (en particulier, leur donner un identifiant unique)
La table_utilisateur a maintenant toutes les informations disponibles (et peut être copiée en table_fournisseur pour retour)... ouf !!!

ps: dans la FMB on sélectionne plusieurs lignes de commande puis 'enter'...et tout s'exécute !! Une fois la manip' au point, il serait prudent de copier le contenu des lignes de la FMB: il suffira la fois suivante de coller toutes ces lignes et tout sera 'rejoué' en un seul 'enter' smile

Hors ligne

 

#10 Wed 19 December 2007 09:27

rastamath69
Juste Inscrit !
Lieu: Lyon
Date d'inscription: 18 Dec 2007
Messages: 8

Re: [MapBasic] Fusionner deux table mapInfo

Merci beaucoup pour le temps que tu as consacré à mon problème!!

j'ai persévéré hier soir, mais pas jusqu'à 23h30 tongue, et j'étais arrivé à me dépêtrer en faisant des tours de passe-passe à travers plusieurs tables afin d'isoler les données dont j'avais besoin, mais avec les requêtes que tu viens de me créer, je pense que je vais pouvoir faire quelque chose de plus propre!!!

Merci encore pour ton aide précieuse!

MATH

PS: ceci n'etait qu'une partie des traitements que j'ai à mener, je serais peut-être amené à repasser dans le coin si j'avais besoin d'aide! smile

Hors ligne

 

Pied de page des forums

Powered by FluxBB