Nous utilisons des cookies pour vous garantir la meilleure expérience sur notre site. Si vous continuez à utiliser ce dernier, nous considèrerons que vous acceptez l'utilisation des cookies. J'ai compris ! ou En savoir plus !.
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 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... smile


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


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 wink
"Entrée" si tu préfères smile

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

 

Pied de page des forums

Powered by FluxBB