Page : appli00a1.htm |
Projet SIG_2004
|
Les données globales retenues sont :
FichierDept est un fichier texte
NumRegionEtudiee est un entier
XminDep, XmaxDep, YminDep, YmaxDep sont réels
LargeurImg, HauteurImg sont entiers
OrigineAbscisse, OrigineOrdonnee sont entiers
Echelle est un réel
InversionAbscisse, InversionOrdonnee sont booléensprocedure TrouverDepartement
procedure TrouverDepartement (E: NumRegion est un entier
S: NbZones est un entier)
donnée
Ligne est une chaine de car
début
Se placer sur la première ligne du fichier FichierDept
répéter
lire depuis FichierDept dans Ligne
si (Ligne contient le mot REGION) alors
NumRegion <- NumRegion - 1
fin si
jusquà (NumRegion = 0)
Mettre à jour NbZones avec le nombre contenu à la fin de Ligne
finCet algorithme ne tient pas compte des mauvaises valeurs que peut prendre NumRegion :
- valeur négative ou nulle ;
- valeur supérieure au nombre de régions contenues dans le fichier.
Pour ces deux cas, on doit fixer une valeur pour NbZones qui indiquera une erreur concernant le paramètre dentrée (par exemple 1)
procedure TrouverDepartement (E: NumRegion est un entier
S: NbZones est un entier)
donnée
Ligne est une chaine de car
début
si (NumRegion < 1) alors
NbZones <- -1
sinon
Se placer sur la première ligne du fichier FichierDept
répéter
lire depuis FichierDept dans Ligne
si (Ligne contient le mot REGION) alors
NumRegion <- NumRegion - 1
fin si
jusquà (NumRegion = 0) OU FinFichier (FichierDept)
si (NumRegion = 0) alors
Mettre à jour NbZones avec le nombre contenu à la fin de Ligne
sinon
NbZones <- -1
fin si
fin si
finprocédure ExtraireCoordonnees
procédure ExtraireCoordonnees (E : Ligne est une chaine de car
S : ValeurX, ValeurY sont réels)
donnée
ValeurCh est une chaine de car
IndexCar, IndexCar2 sont des entiers
début
ValeurCh <- VIDE
IndexCar <- 1
répéter
ValeurCh <- ValeurCh + Ligne[IndexCar]
IndexCar <- IndexCar + 1
jusquà (Ligne[IndexCar] = " ")
ValeurX <- ConversionChaineVersReel (ValeurCh)
ValeurCh <- VIDE
pour IndexCar2 <- (IndexCar + 1) à longueur (Ligne) faire
ValeurCh <- ValeurCh + Ligne[IndexCar2]
fin pour
ValeurY <- ConversionChaineVersReel (ValeurCh)
finprocédure TrouverCoordonneesExtremes
Pour cette procédure, compte tenu des paramètres dentrée, il faut connaître le nombre de zones décrites dans le fichier MIF et il faut également pourvoir se placer dans le fichier MIF au début de la région à étudier : la donnée NumRegionEtudiee correspond à cette information
procédure TrouverCoordonneesExtremes (S : Xmin, Xmax, Ymin, Ymax sont réels)
données
NbZones, NbSegments,
IndexZone, IndexSegment sont entiers
Ligne est une chaine de car
ValeurX, ValeurY sont réels
début
TrouverDepartement (NumRegionEtudiee, NbZones)
pour IndexZone <- 1 à NbZones faire
lire depuis FichierDept dans NbSegments
pour IndexSegment <- 1 à NbSegments
lire depuis FichierDept dans Ligne
ExtraireCoordonnees (Ligne, ValeurX, ValeurY)
si (IndexZone = 1) ET (IndexSegment = 1) alors
Xmin <- ValeurX
Xmax <- ValeurX
Ymin <- ValeurY
Ymax <- ValeurY
sinon
Xmin <- min (ValeurX, Xmin)
Xmax <- max (ValeurX, Xmax)
Ymin <- min (ValeurY, Ymin)
Ymax <- max (ValeurY, Ymax)
fin si
fin pour
fin pour
finfonction CalculerEchelle
fonction CalculerEchelle (E : Xmin, Xmax, Ymin, Ymax sont réels
Largeur, Hauteur sont entiers) retourne un réel
données : EchelleX, EchelleY sont réels
début
EchelleX <- (Xmax Xmin) / Largeur
EchelleY <- (Ymax Ymin) / Hauteur
retourner max (EchelleX, EchelleY)
finprocédure CalculerPositionPoint
Dans un premier temps, supposons que le repère de tracé est dans le même sens que le repère utilisé dans le fichier MIF
procédure CalculerPositionPoint (E : PositionX, PositionY sont réels
S : Abscisse, Ordonnee sont entiers)
début
Abscisse <- (PositionX XminDep)/Echelle + OrigineAbscisse
Ordonnee <- (PositionY YminDep)/Echelle + OrigineOrdonnee
finSi laxe des ordonnées (axe vertical) est inversé, il faut donc adapter le calcul de la coordonnée verticale pour que le tracé reste correct :
Ordonnee <- (HauteurImg - (PositionY YminDep)/Echelle) + OrigineOrdonneeLes données globales InversionAbscisse et InversionOrdonnee indiquent si lun ou lautre des axes est inversé :
procédure CalculerPositionPoint (E : PositionX, PositionY sont réels
S : Abscisse, Ordonnee sont entiers)
début
si InversionAbscisse alors
Abscisse <- (LargeurImg - (PositionX XminDep)/Echelle) + OrigineAbscisse
sinon
Abscisse <- (PositionX XminDep)/Echelle + OrigineAbscisse
fin si
si InversionOrdonnee alors
Ordonnee <- (HauteurImg - (PositionY YminDep)/Echelle) + OrigineOrdonnee
sinon
Ordonnee <- (PositionY YminDep)/Echelle + OrigineOrdonnee
fin si
fin