#1 Thu 05 June 2014 10:05
- joel cyrille
- Participant occasionnel
- Lieu: Douala Cameroun
- Date d'inscription: 5 Jun 2014
- Messages: 35
creer des lignes entre des points
Salut à tous
Je suis nouveau dans la programmation sur Mapbasic et j'aimerais creer des lignes entre les points de ma table qui a la structure suivante : (nom1, nom1, distance, long1, lat1, long1, lat1)
En parcourant le forum j'ai vu des solutions du genre utilisation de la fonction createline dans la FMB (Fenêtre MapBasic, donc je ne sais où ca se trouve). J'ai donc écris un programme Mapbasic comme suit :
INCLUDE "C:\Program Files (x86)\MapInfo\MapBasic\MAPBASIC.DEF"
Declare Sub Main
Sub Main
open table "C:\Users\JOEL CYRILLE\Documents\fichier BD excel\new_ligne\9508MPR.TAB" as exercice
dim i as integer
Set CoordSys Table exercice
i=1
Fetch Rec i From exercice
Insert Into exercice (obj) Values (CreateLine(exercice.long1, exercice.lat1, exercice.long2, exercice.lat2))
i=i+1
print i
end sub
cela me créer le fichier MBX et quand j'exécute ce dernier dans MapInfo j'obtiens ce message d'erreurs : (ligne.mb:13) Table exercice is read-only.
là je ne sais pas quoi faire. J'ai besoin de votre aide.
Dernière modification par joel cyrille (Thu 05 June 2014 10:10)
Hors ligne
#2 Thu 05 June 2014 10:57
- Nicolas Szlapka
- Participant actif
- Lieu: NPDC
- Date d'inscription: 20 Dec 2006
- Messages: 107
Re: creer des lignes entre des points
Salut.
La Table serait en lecture seule...
La manip' modifierait donc la Table.
Peut-être qu'il faut essayer avec une copie de cette Table (pour qu'elle soit modifiable).
Je dis ça en passant, ce n'est peut-être pas la solution...
Nicolas
Hors ligne
#3 Thu 05 June 2014 11:46
- joel cyrille
- Participant occasionnel
- Lieu: Douala Cameroun
- Date d'inscription: 5 Jun 2014
- Messages: 35
Re: creer des lignes entre des points
Salut Nicolas
Sinon j'ai copié la table dans un autre repertoire et on m'affiche ce message d'erreurs : (ligne.mb:6) Unable to open table exercice.
Merci d'avance
Hors ligne
#4 Thu 05 June 2014 12:06
- Nicolas Szlapka
- Participant actif
- Lieu: NPDC
- Date d'inscription: 20 Dec 2006
- Messages: 107
Re: creer des lignes entre des points
Dans la ligne 6 "open table "C:\Users\...", le chemin qui mène à la nouvelle Table a-t-il été modifié ?
Mais aussi, la Table a-t-elle été correctement copiée ? La meilleure solution pour la "copier" est d'ouvrir la Table initiale dans MI, faire Enregistrer Table sous, et choisir le répertoire.
Je dis ça car il ne suffit pas de copier/coller le fichier .tab si on fait ça dans l'explorateur Windows...
Nicolas
Hors ligne
#5 Thu 05 June 2014 12:23
- joel cyrille
- Participant occasionnel
- Lieu: Douala Cameroun
- Date d'inscription: 5 Jun 2014
- Messages: 35
Re: creer des lignes entre des points
oui j'ai modifié le chemin de la table toujours rien;
J'ai essayé d'enregistrer la table à nouveau mais la barre enregistrer table du menu fichier est désactivé donc je ne peux pas l'enregistrer à nouveau dépuis Map info ?
Vraiment je suis dépassé ????
Hors ligne
#6 Thu 05 June 2014 12:44
- Spacejo
- Membre
- Lieu: Nancy
- Date d'inscription: 17 Aug 2008
- Messages: 2511
Re: creer des lignes entre des points
Salut,
Une table importée dans Mapinfo et issue d'un fichier Excel est systématiquement en Read Only.
Pour résoudre le problème il suffit généralement de faire un "enregistrer sous" cette nouvelle table passe alors en interractive.
Code:
Sinon j'ai copié la table dans un autre repertoire
Pour copier une table, as tu copié tous les fichiers? --> le .TAB, le .IND, le. DAT, le .ID et si tu as une carte le .MAP.
oui j'ai modifié le chemin de la table toujours rien
As tu déplacé les 5 fichiers?
Ceci expliquerait celà -->
J'ai essayé d'enregistrer la table à nouveau mais la barre enregistrer table du menu fichier est désactivé donc je ne peux pas l'enregistrer à nouveau dépuis Map info ?
Une alternative pour ton code:
Code:
open table "C:\Users\JOEL CYRILLE\Documents\fichier BD excel\new_ligne\9508MPR.TAB" as 9508MPR Set CoordSys Table 9508MPR Fetch First From 9508MPR Do While Not EOT(9508MPR) Insert Into 9508MPR (obj) Values (CreateLine(long1,lat1,long2,lat2)) Fetch Next From 9508MPR Loop
A+
Joël
Dernière modification par Spacejo (Thu 05 June 2014 13:33)
Hors ligne
#7 Thu 05 June 2014 13:00
- joel cyrille
- Participant occasionnel
- Lieu: Douala Cameroun
- Date d'inscription: 5 Jun 2014
- Messages: 35
Re: creer des lignes entre des points
Salut Joël
oui c'est vrai que ma table a été importée dépuis un fichier excel. Après l'importation dans Mapinfo, j'ai obtenu trois fichiers -> un de type .TAB, l'autre de type "Linker Address Map" et un dernier de type "MapInfo Table File" et j'ai copié ces trois dans un nouveau répertoire.
Maintenant je n'arrive plus à ouvrir cette table dans ce nouveau répertoire (j'obtiens le message Unable to open table 9508MPR)
Que faire ?
Hors ligne
#8 Thu 05 June 2014 13:06
- Spacejo
- Membre
- Lieu: Nancy
- Date d'inscription: 17 Aug 2008
- Messages: 2511
Re: creer des lignes entre des points
Essaye de faire -> Fichier -> "Tout fermer" dans Mapinfo.
Importe à nouveau ton fichier Excel puis un "enregistrer Table sous" tu choisis le chemin que tu as dans ton code:
C:\Users\JOEL CYRILLE\Documents\fichier BD excel\new_ligne"
Qu'est ce celà donne?
Dernière modification par Spacejo (Thu 05 June 2014 13:08)
Hors ligne
#9 Thu 05 June 2014 13:24
- Spacejo
- Membre
- Lieu: Nancy
- Date d'inscription: 17 Aug 2008
- Messages: 2511
Re: creer des lignes entre des points
Une vérification possible:
Tu fais -> Fichier -> Enregistrer un document.
Tu ouvres le .WOR généré avec le bloc note et tu vérifies que tu as la ligne:
open table "C:\Users\JOEL CYRILLE\Documents\fichier BD excel\new_ligne\9508MPR.TAB" as 9508MPR Interactive
Dernière modification par Spacejo (Thu 05 June 2014 13:36)
Hors ligne
#10 Thu 05 June 2014 13:38
- joel cyrille
- Participant occasionnel
- Lieu: Douala Cameroun
- Date d'inscription: 5 Jun 2014
- Messages: 35
Re: creer des lignes entre des points
Oui Joël je viens de suivre ces étapes
et en exécutant le code mapbasic j'obtiens ce message d'erreur : (ligne.mb:12) Could not convert data. CreateLine: argument 1 has invalid type.
voici le code :
INCLUDE "C:\Program Files (x86)\MapInfo\MapBasic\MAPBASIC.DEF"
Declare Sub Main
Sub Main
open table "C:\Users\JOEL CYRILLE\Documents\ND1\9508MPR.TAB" as exercice
dim i as integer
Set CoordSys Table exercice
i=1
Fetch Rec i From exercice
Insert Into exercice (obj) Values (CreateLine(exercice.long1, exercice.lat1, exercice.long2, exercice.lat2))
i=i+1
print i
end sub
ici ND1 est le nouveau répertoire
Dernière modification par joel cyrille (Thu 05 June 2014 13:40)
Hors ligne
#11 Thu 05 June 2014 13:42
- Spacejo
- Membre
- Lieu: Nancy
- Date d'inscription: 17 Aug 2008
- Messages: 2511
Re: creer des lignes entre des points
De quelle nature sont tes champs long et lat?
Hors ligne
#12 Thu 05 June 2014 13:46
- joel cyrille
- Participant occasionnel
- Lieu: Douala Cameroun
- Date d'inscription: 5 Jun 2014
- Messages: 35
Re: creer des lignes entre des points
Lors de l'importation j'ai pris comme type "caractère" mais en réalité ce sont des nombres réels?
Je prends quel type ?
Le problème c'est qu'en prenant pour type float ou décimal, MapInfo converti mes coordonnées en nombres entiers naturels!!!
En changeant de type par en choisissant le type float j'obtiens le message : One or more fields have been shortened or field type(s) have been changed. Data may be truncated.
Dernière modification par joel cyrille (Thu 05 June 2014 14:03)
Hors ligne
#13 Thu 05 June 2014 15:00
- joel cyrille
- Participant occasionnel
- Lieu: Douala Cameroun
- Date d'inscription: 5 Jun 2014
- Messages: 35
Re: creer des lignes entre des points
Vraiment merci Joël pour ton aide.
J'arrive enfin à exécuter le programme mapbasic, j'ai changé le type des champs long et lat en mettant en décimal. mais je n'obtient pas le résultat visuelle (graphique), j'obtiens une boite de dialogue message avec à l'intérieur la valeur 2 mais pas de map.
j'ai même ajouté ceci : "map from exercice" mais rien;
Hors ligne
#14 Thu 05 June 2014 15:21
- Nicolas Szlapka
- Participant actif
- Lieu: NPDC
- Date d'inscription: 20 Dec 2006
- Messages: 107
Re: creer des lignes entre des points
Projection ?
Et en faisant clic droit dans la Fenêtre Carte / Afficher toute la couche / choisir la couche dans la liste ?
Nicolas
Hors ligne
#15 Thu 05 June 2014 15:39
- joel cyrille
- Participant occasionnel
- Lieu: Douala Cameroun
- Date d'inscription: 5 Jun 2014
- Messages: 35
Re: creer des lignes entre des points
Ma projection est Longitude/Latitude
J'obtiens la fenêtre de la map (exercice Map) sans segment de droite à l'intérieur. Elle est toute blanche.
J'obtiens également une petite fenêtre avec avec pour titre message et à elle possède la valeur 2.
HELP !!!!
*******
Joel
Dernière modification par joel cyrille (Thu 05 June 2014 18:32)
Hors ligne
#16 Thu 05 June 2014 20:26
- Spacejo
- Membre
- Lieu: Nancy
- Date d'inscription: 17 Aug 2008
- Messages: 2511
Re: creer des lignes entre des points
Une solution serait de passer par la FMB (Fenêtre MapBasic) -> Options -> afficher Fenêtre MapBasic.
Tu génères une ligne pour voir si celà fonctionne.
Dans la FMB:
Code:
Set CoordSys Table exercice update exercice set obj= CreateLine(TaPremiereValeurlong1, TaPremiereValeurlat1, TaPremiereValeurlong2, TaPremiereValeurlat2)
Ne pas oublier de sélectionner les 2 lignes dans la FMB avant de valider sinon elle ne prendra en compte que la dernière ligne de code.
Celà te permettra de voir qui est fautif -> les données ou le code
Ta fenêtre avec le "2" vient de ta ligne ---> print i
Ton code ne boucle pas --> il te manque le "next"
Avec une petite recherche ton code ne viendrait pas de ce post?
--> http://georezo.net/forum/viewtopic.php? … createline
Ce code était pour la FMB et il faut lire la fin du message:
Code:
On sélectionne tout une fois, puis seulement les 4 dernières lignes ensuite et on garde 'enter' appuyé jusqu'à ce que i prenne la valeur du nombre de lignes du tableau...
Si tu veux boucler, je t'avais cité ci dessus cette procédure:
Code:
Fetch First From exercice Do While Not EOT(exercice) Insert Into exercice (obj) Values (CreateLine(long1,lat1,long2,lat2)) Fetch Next From exercice Loop
Tu peux aussi utiliser ceci:
Code:
For i=0 to EOT(exercice) Insert Into exercice (obj) Values (CreateLine(exercice.long1, exercice.lat1, exercice.long2, exercice.lat2)) i=i+1 Next
A+
Joël
Dernière modification par Spacejo (Fri 06 June 2014 07:51)
Hors ligne
#17 Fri 06 June 2014 10:42
- joel cyrille
- Participant occasionnel
- Lieu: Douala Cameroun
- Date d'inscription: 5 Jun 2014
- Messages: 35
Re: creer des lignes entre des points
Oui oui Joel c'est dans ce post que j'ai pris mon code et vraiment merci pour la remarque
Ne pas oublier de sélectionner les 2 lignes dans la FMB avant de valider sinon elle ne prendra en compte que la dernière ligne de code.
Celà te permettra de voir qui est fautif -> les données ou le code
Sélectionner les deux lignes comment ? j'ai ouvert la FMB et j'y ai collé les 2 lignes du code que tu m'as donné à l'intérieur mais là je ne sais pas comment on exécute celà?
Vraiment je vous remercie pour votre aide.
Hors ligne
#18 Fri 06 June 2014 10:53
- Spacejo
- Membre
- Lieu: Nancy
- Date d'inscription: 17 Aug 2008
- Messages: 2511
Re: creer des lignes entre des points
Sélectionner les deux lignes comment ?
Dés que tu as collé les lignes, tu sélectionnes (comme si tu voulais faire un copier/coller) clic gauche et tu sélectionnes puis "execute"
Hors ligne
#19 Fri 06 June 2014 11:07
- joel cyrille
- Participant occasionnel
- Lieu: Douala Cameroun
- Date d'inscription: 5 Jun 2014
- Messages: 35
Re: creer des lignes entre des points
j'ai sélectionné les 2 lignes dans la FMB mais je ne vois pas de bouton "execute"? Quand je fais un clic droit il apparait juste (annuler, couper, copier, coller).
Hors ligne
#20 Fri 06 June 2014 11:09
- Spacejo
- Membre
- Lieu: Nancy
- Date d'inscription: 17 Aug 2008
- Messages: 2511
Re: creer des lignes entre des points
Sur ton clavier
"Entrée" si tu préfères
Dernière modification par Spacejo (Fri 06 June 2014 11:10)
Hors ligne
#21 Fri 06 June 2014 11:32
- joel cyrille
- Participant occasionnel
- Lieu: Douala Cameroun
- Date d'inscription: 5 Jun 2014
- Messages: 35
Re: creer des lignes entre des points
je sélectionne ce code dans la FMB et je l'exécute
Code:
Set CoordSys Table exercice update exercice set obj= CreateLine(9.696744, 4.029381, 9.698639, 4.052722)
Mais toujours rien (pas d'apparition de segment) dans la fenêtre exercice map
Dernière modification par joel cyrille (Fri 06 June 2014 11:33)
Hors ligne
#22 Fri 06 June 2014 20:27
- Spacejo
- Membre
- Lieu: Nancy
- Date d'inscription: 17 Aug 2008
- Messages: 2511
Re: creer des lignes entre des points
Après essais celà fonctionne.
Je suis parti comme toi d'un fichier Excel, lorsque tu importes ton fichier Excel -> tu as une boite de dialogue -> indique que la première ligne contient les noms de tes champs (Use Row selected Range for columns titles)
Dans cette boite de dialogue tu as une liste déroulante -> choisis "other" et tu indiques la dernière cellule de ta table (exercice!A2:J35377) celà éviteras de traiter des lignes vides et que Mapinfo patauge dans la semoule
Voilà un code qui fonctionne (testé) :
Code:
INCLUDE "C:\Program Files (x86)\MapInfo\MapBasic\MAPBASIC.DEF" Declare Sub Main Sub Main open table "C:\Users\JOEL CYRILLE\Documents\ND1\9508MPR.TAB" as exercice Set CoordSys Table exercice Fetch First From exercice Do While Not EOT(exercice) update exercice set obj=CreateLine(long1,lat1,long2,lat2) Fetch Next From exercice Loop end sub
PS: Si tu veux passer par la FMB sans passer par un outil .mbx comme ci dessus.
Voilà le code:
Code:
Set CoordSys Table exercice update exercice set obj=CreateLine(long1,lat1,long2,lat2)
Pour conclure, je pense que tu as un problème de projection.
Tu indiques que tu as une projection Lat long mais il y en a beaucoup laquelle est ce ?
A+
Bon week end
Joël
Dernière modification par Spacejo (Fri 06 June 2014 20:46)
Hors ligne
#23 Mon 09 June 2014 11:06
- joel cyrille
- Participant occasionnel
- Lieu: Douala Cameroun
- Date d'inscription: 5 Jun 2014
- Messages: 35
Re: creer des lignes entre des points
Merci Joël
J'ai pris la projection par défaut c'est à dire Longitude/Latitude.
Hors ligne
#24 Mon 09 June 2014 11:41
- joel cyrille
- Participant occasionnel
- Lieu: Douala Cameroun
- Date d'inscription: 5 Jun 2014
- Messages: 35
Re: creer des lignes entre des points
Pour que vous me suiviez mieux pour mieux m'aider je vais vous expliquer pas à pas la procédure que j'exécute.
D'abord j'importe mon fichier excel en choisissant comme entête l'entête de mon fichier excel et je spécifie les cellules utilises.
Ensuite j'obtiens une boite de dialogue où par défaut les types des colonnes sont donnés par MapInfo. Je change juste les noms des longitudes et latitudes (en mettant long1, lat1, long2 et lat2).
De là j'ai ma table qui s'affiche. Je fais une copie de cette dernière en faisant file -> Save copy as, j'enregistre cette nouvelle table dans un dossier nommé ND1
Dans MapInfo je ferme toutes les tables actives et j'ouvre celle que je viens d'enregistrer dans le fichier ND1. Je change sa structure en faisant table -> maintenance -> table structure de là je coche le bouton table is mappable et dans la projection Category je prends Longitude / Latitude et dans catégory member je prends aussi Longitude / Latitude. Je valide ensuite.
Après celà je ferme toute les fenêtres et j'exécute le MBX venant du mb suivant :
Code:
INCLUDE "C:\Program Files (x86)\MapInfo\MapBasic\MAPBASIC.DEF" Declare Sub Main Sub Main open table "C:\Users\JOEL CYRILLE\Documents\ND1\eclipse.TAB" as exercice dim i as integer Set CoordSys Table exercice For i=0 to EOT(exercice) Insert Into exercice (obj) Values (CreateLine(exercice.long1, exercice.lat1, exercice.long2, exercice.lat2)) i=i+1 Next map from exercice end sub
et là une fenêtre exercice Map s'affiche mais rien à l'intérieur (aucun segment).
Hors ligne
#25 Mon 09 June 2014 11:46
- joel cyrille
- Participant occasionnel
- Lieu: Douala Cameroun
- Date d'inscription: 5 Jun 2014
- Messages: 35
Re: creer des lignes entre des points
Merciiiiiiii Joël j'ai utilisé ton code et cela fonctionne mais comment changé la couleur et l'épaisseur des lignes à partir du code Mapbasic
Encore mille fois merci!!!
Hors ligne