Page : appli00a2.htm
Auteur : Jean HENRI
Création : 18 nov 2003
Mise à jour : 17 mars 2004

Projet SIG_2004
Système d'Information Géographique
Application(s) 0 : Étude des informations vectorielles

Application 0.1 : Algorithmes complémentaires et programme Appli0

Les données globales supplémentaires sont :

donnee
  NbDepts est un entier constant qui vaut 100

type
  T_Tab_Dept est un tableau [1 à NbDepts] de chaines de caractères

donnee
  Tbl_Dept est un T_Tab_Dept
  NomFichierMID,
  NomFichierMIF sont des chaines de caractères

Programme principal Appli00

Programme Appli00
début
  Initialiser

  ChoisirDepartement (DeptChoisi)
  NumRegionEtudiee <-- ChercherDepartement (DeptChoisi)
  si (NumRegionEtudiee <> -1) alors
    DessinerDepartement
  fin si
  Terminer
fin

procedure Initialiser

procedure Initialiser
début
  NomFichierMID <-- "dep_france_dom.mid"
  NomFichierMIF <-- "dep_france_dom.mif"

  
ChargerDepartements (NomFichierMID)
  Initialiser FichierDept avec NomFichierMIF
  ouvrir FichierDept en lecture

  
InversionAbscisse <-- FAUX
  InversionOrdonnee <-- VRAI

  
OrigineAbscisse <-- 5
  OrigineOrdonnee <-- 5

  LargeurImg <-- Largeur de la zone image - 10
  HauteurImg <-- Hauteur de la zone image - 10
fin

procedure Terminer

procedure Terminer
début
  Fermer FichierDept
fin

procedure ChargerDepartements

procedure ChargerDepartements (E : NomFichier est une chaine de caractères)
donnee
  FichierNomDept est un fichier texte
  Ligne est une chaine de caractères
  NomDept,
  CodeDept sont des chaines de caractères
  IndexDept est un entier

début
  Initialiser FichierNomDept avec NomFichier
  ouvrir FichierNomDept en lecture

  pour IndexDept <-- 1 à NbDepts faire
    Lire depuis FichierNomDept dans Ligne

    
NomDept <-- ExtraireChamp (Ligne, 8)

    
CodeDept <-- ExtraireChamp (Ligne, 11)
    si ((CodeDept = "2A") OU (CodeDept = "2B")) alors
      CodeDept <-- "20"+CodeDept[2]
    sinon
      si (longueur (CodeDept) = 2) alors
        CodeDept <-- CodeDept + " "
      fin si
    fin si

    
Tbl_Dept [IndexDept] <-- CodeDept + " - " + NomDept
  fin pour

  fermer FichierNomDept
fin

fonction ExtraireChamp

fonction ExtraireChamp (E : Ligne est une chaine de caractères
                            NumChamp est un entier) retourne une chaine de caractères
donnée
  IndexChamp,
  IndexDebut,
  IndexFin,
  IndexCar sont entiers
  Champ est une chaine de caractères

début
  IndexDebut <-- 0
  pour IndexChamp <-- 1 à NumChamp-1 faire
    repeter
      IndexDebut <-- IndexDebut + 1
    jusqu'à (Ligne [IndexDebut] = ',')
  fin pour

    
IndexFin <-- IndexDebut
    tant que ((IndexFin < longueur (Ligne)) ET (Ligne[IndexFin+1] <> ",")) faire
      IndexFin <-- IndexFin + 1
    fin tant que

  
Champ <-- ""
  pour IndexCar <-- IndexDebut+1 jusqu'à IndexFin faire
    Champ <-- Champ + Ligne [IndexCar]
  fin pour

  
retourner Champ
fin

fonction ChercherDepartement

fonction ChercherDepartement (E : CodeDept est une chaine de caractère) retourne un entier
donnee
  IndexDept est un entier

début
  IndexDept <-- 0
  repeter
    IndexDept <-- IndexDept + 1
  jusqu'à ((IndexDept = NbDepts) OU (Tbl_Dept [IndexDept] commence par CodeDept))

  
si (Tbl_Dept [IndexDept] commence par CodeDept) alors
    retourner IndexDept
  sinon
    retourner -1
  fin si
fin

procedure DessinerDepartement

procedure DessinerDepartement
donnee
  NbMorceaux,
  NbSegments sont entiers
  IndexMorceau,
  IndexSegment sont entiers
  Ligne est une chaine de caractères
  ValeurX, ValeurY sont réels
  abscisse, ordonnee sont entiers

début
  Effacer le tracé précédent éventuel

  
TrouverCoordonneesExtreme (XminDep, XmaxDep, YminDep, YmaxDep)
  Echelle <-- CalculerEchelle (XminDep, XmaxDep, YminDep, YmaxDep, LargeurImg, HauteurImg)

  
TrouverDepartement (NumRegionEtudiee, NbMorceaux)
  pour IndexMorceau <-- 1 à NbMorceaux faire
    lire depuis FichierDept dans NbSegments

    
pour indexSegment <-- 1 à NbSegments faire
      lire depuis FichierDept dans Ligne
      extraireCoordonnees (Ligne, ValeurX, ValeurY)

      
CalculerPosition (ValeurX, ValeurY, abscisse, ordonnee)

      
si (indexSegment = 1) alors
        placerPoint (abscisse, ordonnee)
      sinon
        tracerTrait (abscisse, ordonnee)
      fin si
    fin pour
  fin pour
fin


fin de la page appli00a2.htm