MapInfo
Evolution logicielle
MapBasic
MapBasic est un langage de programmation utilisé pour la création d'outils et de fonctionnalités pour la suite logicielle (SIG) MapInfo. MapBasic est basé sur la famille de langages de programmation BASIC.
Map Basic offre un environnement de développement comprenant un éditeur de texte, pour saisir les programmes, uncompilateur pour créer une application exécutable, un éditeur de lien pour créer une application complexe en ladécomposant en différents modules «objets», et, enfin une aide en ligne.Les programmes exécutables produits par Map Basic ne peuvent que s’exécuter que sur les ordinateurs disposantd’un moteur Map Info. Il existe des relations très fortes entre les versions de MapInfo et les versions de MapBasicutilisées.
Pour télécharger l'ide pour MapBasic.
Les huit principes de conception du BASIC étaient :
-
Être facile d'utilisation pour les débutants
-
Être un langage généraliste
-
Autoriser l'ajout de fonctionnalités pour les experts (tout en gardant le langage simple pour les débutants)
-
Fournir des messages d'erreur clairs et conviviaux
-
Avoir un délai de réaction faible pour les petits programmes
-
Ne pas nécessiter la compréhension du matériel de l'ordinateur
-
Isoler l'utilisateur du système d'exploitation
Un exemple de programme en MapBasic que j'ai réalisé.
Les bases du langage
Avec MapBasic, développer rapidement et facilement des applications personnalisées qui peuvent être aussi simples que d'ajouter un élément de menu à MapInfo Professional, ou aussi complexes que la refonte entière de l'interface utilisateur et l'extension des fonctionnalités de MapInfo Professional. MapBasic permet rapidement et facilement :
-
d'étendre les fonctionnalités géographiques de MapInfo,
-
d'automatiser des opérations répétitives
-
d'intégrer MapInfo Professional avec d'autres applications.
Les boucles
La boucle bornée
For Variable = Borne Initiale to Borne Finale [Step valeur d’incrément]
liste d’instruction....
Next
On peut sortir d’une boucle bornée quelle que soit la valeur de la variable de contrôle avec l’instruction ExitFor
La boucle tant que
While Condition
liste d’instruction....
Wend
La boucle Tant que n’est exécutée que si la condition initiale est vraie.
On peut sortir d’une boucle Tant que, quelle que soit l’état de la condition de contrôle avec l’instruction Goto label
La boucle jusqu’à ce que
Do
liste d’instruction....
Loop Until Condition
La boucle Jusqu’à ce que est toujours exécutée au moins une fois même si la condition initiale est fausse.
La boucle infinie
Do
liste d’instruction....
Loop
La boucle Infinie n’est interrompue que grâce à un débranchement provoqué par un Goto ou un ExitDo
Le test
If Condition1 Then
liste d’instruction....
[Elseif Condition2 Then
liste d’instruction.... ]
[Elseif Conditionx Then
liste d’instruction.... ]
[Else Condition
liste d’instruction.... ]
End If
Le test à choix multiple (CASE)
Do Case Expression
Case Valeur [,Valeur]
liste d’instruction....
[Case...]
[Case Else
liste d’instruction.... ]
End Case
Manipuler les tables
Ouvrir une table existante
Open Table nom du fichier [As Nom de la table ] [Hide] [Readonly] [Interactive]
Fermer une table existante
Close Table Nom de la table [Interactive]
Créer une nouvelle table
Lors de la création d’une table, on précise les noms des champs. Ceux ci doivent faire moins de 32 caractères. Ilspeuvent comporter des lettres des nombres et des underscore[_]. Un nom de champ ne peut pas commencer par unnombre
Create Table Nom de la table (colonne type_de_la_colonne[, ...])
[File TableSpec ] [{Type Native/Type DBF[Charset Set de Caractères]}]
[Version Version]
Modifier une table existante
Alter Table Nom de la table (
[Add Nom_de_la_colonne type_de_la_colonne[, ...]
[Modify Nom_de_la_colonne type_de_la_colonne[, ...]
[Drop Nom_de_la_colonne [, ...]]
[Rename Ancien_Nom_de_la_colonne Nouveau_Nom_de_la_colonne[, ...]]
[Order Nom_de_la_colonne, Nom_de_la_colonne[, ...]])
Créer et mettre à jour une colonne d’une table existante à partir d’une autre table
Add Column Nom de la table (colonne[Type de la colonne])
{Values const[,const]/ From Table_Source
Set to expression
[where {colonne de destination= colonne source/whithin/Contains/Intersects}]
[dynamic]}
Créer un index sur une table existante
Create Index On Nom de la table (colonne)
Détruire un index sur une table existante
Delete Index Nom de la table (colonne)
Rendre une table existante cartographiable
Create Map For Nom de la table (colonne) [CoordSys...]
Si on omet de préciser la clause Coordsys, la table créée sera dans le système terrestre Latitude / longitude. Dans cecas le Bound aussi est fixé par défaut. Il est assez étendu pour couvrir la terre entière. Dans ce cas les coordonnéessont précises au millionième de degré, soit à peu prés 10 centimètres.
Insérer de nouvelles lignes dans une table
Insert into Nom de la table [(liste colonnes)] {Values(liste valeurs)]/ Select liste colonnes From Table}
Modifier des lignes dans une table
Update Nom de la table Set colonne = expression[,colonne = expression ]
[Where RowId = Rang de la ligne]
Compacter une table
Pack Table Nom de la table [Graphic/Data]
!Pack détruit physiquement les enregistrements qui sont préalablement détruits logiquement par un Delete. Ilfaut faire suivre Pack de Graphic ou Data (ou les deux). Par défaut Pack ne tasse rien et ne produit pas d’erreurd’exécution. Pour tasser une table elle doit préalablement avoir été sauvegardée par un Commit
Sauvegarder une table sur le disque
Commit Table Nom de la table [As FileSpec ] [{Type Native/Type DBF[Charset Set de Caractères]}]
[CoordSys ... ] [Version Version]
Annuler les changements intervenus sur une table depuis la dernière sauvegarde sur disque
RollBack Table Nom de la table
Détruire tout le contenu d’une table existante ( la table subsiste mais vide)
Delete From Nom de la table
Cette instruction permet aussi de vider uniquement une colonne et peut être contrainte par une clausewhere. Exemple : Delete Obj from Tron_Route where Rowid = 10, détruit la géométrie de l’objet de latable Tron_route qui est au rang 10
Détruire une table
Drop Table Nom de la table !! très puissant à utiliser avec beaucoup de précautions!!