# Le traçage automatique de cartes d'isovaleurs. Adaptation du programme MAP (Davaud, 1975)

Frédéric Lardeux

► To cite this version:

Frédéric Lardeux. Le traçage automatique de cartes d'isovaleurs. Adaptation du programme MAP (Davaud, 1975). Rapport IRTMLM n° ITRM/11/90/ITRM/Doc-Ent., Institut Louis Malardé, Tahiti, French Polynesia. 1990, pp.1-32. hal-04753809

HAL Id: hal-04753809

https://hal.science/hal-04753809v1

Submitted on 25 Oct 2024

HAL is a multi-disciplinary open access
archive for the deposit and dissemination of sci-
entific research documents, whether they are pub-
lished or not. The documents may come from
teaching and research institutions in France or
abroad, or from public or private research centers.

L'archive ouverte pluridisciplinaire HAL, est
destinée au dépôt et à la diffusion de documents
scientifiques de niveau recherche, publiés ou non,
émanant des établissements d'enseignement et de
recherche français ou étrangers, des laboratoires
publics ou privés.

<figure><img src="image_1.png" /></figure>

Distributed under a Creative Commons Attribution 4.0 International License
LE TRACAGE AUTOMATIQUE DE CARTES D'ISOVALEURS
ADAPTATION DU PROGRAMME MAP (DAVAUD, 1975)

F.LARDEUX

Février 1990
# SOMMAIRE

## INTRODUCTION

1 - L'ALGORITHME

2 - EXEMPLES

3 - LE PROGRAMME INFORMATIQUE

2.1 - Description générale

2.2 - Mise en route

2.3 - Saisie des données - création de fichier

2.4 - Corrections dans un fichier

2.5 - Listage d'un fichier

2.6 - Traçage des cartes d'isovaleurs

2.7 - Le fichier des paramètres (MAP.PAR)

## CONCLUSION

## BIBLIOGRAPHIE

Annexe : Listing du programme MAP
# INTRODUCTION

Le programme décrit ici est une adaptation de l'algorithme publié par Davaud (1975) et permet le traçage automatique de cartes d'isovaleurs.

Le traçage de cartes d'isovaleurs est couramment effectué en géologie ou en géographie: les cartes topographiques où apparaissent les lignes de niveau (altitude) sont des exemples les plus populaires.

Le traçage automatique (à l'aide d'un ordinateur), permet de s'affranchir de la part de subjectivité du traçage manuel, où l'interpolation entre deux points de mesures est parfois délicate. De plus, le gain de temps est non négligeable. En un mot, la rapidité et l'objectivité de la cartographie automatique rendent la méthode supérieure à la cartographie manuelle.

L'application de la méthode à d'autres domaines, comme celui de l'entomologie, est possible (et souhaitable), dès que l'on désire rendre compte de structures spatiales : cartographie d'un gîte larvaire de ceratopogonidae, dont les larves sont enfouies dans le sable, cartographie des densités de moustiques dans une zone donnée etc ...

Bien qu'actuellement des méthodes plus sophistiquées existent pour rendre compte de telles structures (kriegeage, par exemple (Matheron, 1965)), la méthode présentée ici a l'avantage de rester simple et de ne pas demander d'hypothèses de travail sur la structure des données. Le résultat reste descriptif (on obtient simplement une carte) et lié à la qualité des données disponibles.

Le programme présenté ici est adapté de l'algorithme de Davaud (1975) qui a publié une version succinte en FORTRAN IV. Notre version a été écrite en QUICK-BASIC (Microsoft). Une version compilée (programme .EXE) est disponible sur demande pour ceux qui ne disposent pas du compilateur Quick-Basic.

## 1 - L'ALGORITHM

Comme le souligne Davaud (1975), pour qu'un programme ait un caractère général, le traçage doit pouvoir s'effectuer à partir d'un nombre restreint de mesures, dont la répartition et la densité spatiale sont quelconques. La surface obtenue doit respecter tous les points de mesure et ne pas présenter de discontinuités.

De nombreux algorithmes satisfaisant à ces conditions ont été publiés (cf. la revue faite par Davaud, 1975). Davaud s'est d'ailleurs inspiré de l'ensemble de ces travaux pour mettre au point un algorithme qui repose sur la création successive de grilles de valeurs interpolées dont la maille devient de plus en plus fine. La méthode d'interpolation est fondée sur l'ajustement de polynômes locaux du premier degré avec sélection isotropique des points de mesure.

L'algorithme peut être décrit de la manière suivante (recopié de Davaud, 1975) :

A partir de mesures situées dans un système de coordonnées orthogonales (géographiques ou arbitraires), l'algorithme génère itérativement une succession de grilles de valeurs interpolées dont chaque maille rectangulaire diminue de moitié à chaque itération. Chaque nouvelle grille est calculée à l'aide des valeurs interpolées, obtenues lors des itérations précédentes, et des données initiales, qui ne sont jamais modifiées. Les points communs à plusieurs grilles sont recalculés à chaque itération, mais les points interpolés au
cours d'une itération ne viennent s'ajouter aux données existantes - initiales ou calculées - qu'au début de l'itération suivante. La procédure s'interrompt lorsque les dimensions de la maille equivalent aux dimensions des caractères typographiques de l'imprimante de l'ordinateur. La maille initiale doit donc être une puissance de deux de la maille finale. Cette succession de grilles d'interpolations permet de créer progressivement des mesures complémentaires dans les zones où la densité des points de mesure initiaux est faible ou nulle. La procédure d'interpolation proprement dite s'effectue en trois temps, pour chaque point d'intersection des grilles successives:

- On recherche tout d'abord les données - primitives ou caculées lors des itérations précédentes - situées dans un cercle centré sur le point à interpoler, dont le rayon est un multiple des dimensions de la maille.

- Les données ainsi selectionnées sont alors pondérées en fonction de l'inverse du carré de la distance qui les sépare du point à interpoler. Cette pondération peut être sélectivement intensifiée de manière à accorder une importance plus grande aux mesures initiales.

- Finalement, on ajuste à ces données triées et transformées un polunôme du premier degré en x et y dont les paramètres permettent de calculer une valeur interpolée pour le point de la grille considéré. Lorsque le nombre de mesures rencontrées au voisinage de ce point n'est pas suffisamment élevé, l'interpolation est localement abandonnée.

Cette procédure se répète pour chaque point d'intersection des différentes grilles successives.

Une fois la dernière grille calculée, le traçage de la surface s'effectue sur l'imprimante de l'ordinateur en remplaçant les valeurs mémorisées par des symboles typographiques.

## 2 - EXEMPLES

Le programme a été testé sur les exemples fournis par Davaud (1975). A titre d'illustration, la figure 1 représente un de ceux-ci (exemple 2 de Davaud). Il s'agit de côtes de niveau repère de l'Ordovicien, à partir de données provenant de 41 sondages régulièrement espacés (programme : 6 itérations, pondération : 75).

La figure 2 est plus spécifiquement adaptée à l'entomologie. Il s'agit d'une carte de densité de moustiques *Aedes polynesiensis* sur un îlot d'un atoll. Les données sont le nombre de moustiques capturés sur appât vivant durant une période de 10 mn, à un endroit déterminé (coordonnées x,y). Les données sont ici obtenues sur une maille d'échantillonnage non régulière.

La répartition des insectes apparaît clairement en taches, que l'on peut relier à la densité de la végétation (par exemple, Lardeux et al., 1988)
<figure><img src="image_2.png" /></figure>

<figure><img src="image_3.png" /><figcaption>Figure 1 : Côtes de niveau repère de l'Ordovicien.</figcaption></figure>

a - Echantillons

b - Carte d'isvaleurs : 6 itérations, pondération 75
<figure><img src="image_4.png" /></figure>

<table><tr><td>SYMBOL</td><td>:</td><td>LIMITE SUPERIEURE</td><td>:</td><td>10</td></tr><tr><td>SYMBOL</td><td>:</td><td>LIMITE SUPERIEURE</td><td>:</td><td>20</td></tr><tr><td>SYMBOL</td><td>:</td><td>LIMITE SUPERIEURE</td><td>:</td><td>40</td></tr><tr><td>SYMBOL</td><td>:</td><td>LIMITE SUPERIEURE</td><td>:</td><td>60</td></tr><tr><td>SYMBOL</td><td>:</td><td>LIMITE SUPERIEURE</td><td>:</td><td>80</td></tr><tr><td>SYMBOL</td><td>:</td><td>LIMITE SUPERIEURE</td><td>:</td><td>100</td></tr><tr><td>SYMBOL</td><td>:</td><td>LIMITE SUPERIEURE</td><td>:</td><td>120</td></tr><tr><td>SYMBOL</td><td>:</td><td>LIMITE SUPERIEURE</td><td>:</td><td>140</td></tr><tr><td>SYMBOL</td><td>:</td><td>LIMITE SUPERIEURE</td><td>:</td><td>160</td></tr><tr><td>SYMBOL</td><td>:</td><td>LIMITE SUPERIEURE</td><td>:</td><td>180</td></tr><tr><td>SYMBOL</td><td>:</td><td>LIMITE SUPERIEURE</td><td>:</td><td>200</td></tr></table>

<table><caption>Figure 2 : Zones d'isvaleurs des captures de moustiques *Aedes polynesiensis* sur un îlot d'atoll.</caption><thead><tr><th>Point</th><th>Abscisse</th><th>Ordonnee</th><th>Valcur</th><th>Colonne</th><th>Ligne</th></tr></thead><tbody><tr><td>1</td><td>105</td><td>56</td><td>4</td><td>87</td><td>60</td></tr><tr><td>2</td><td>102</td><td>32</td><td>54</td><td>84</td><td>72</td></tr><tr><td>3</td><td>85</td><td>35</td><td>139</td><td>70</td><td>71</td></tr><tr><td>4</td><td>65</td><td>42</td><td>88</td><td>53</td><td>67</td></tr><tr><td>5</td><td>72</td><td>5</td><td>89</td><td>59</td><td>86</td></tr><tr><td>6</td><td>43</td><td>1</td><td>13</td><td>35</td><td>87</td></tr><tr><td>7</td><td>49</td><td>52</td><td>112</td><td>40</td><td>62</td></tr><tr><td>8</td><td>77</td><td>73</td><td>54</td><td>63</td><td>52</td></tr><tr><td>9</td><td>97</td><td>74</td><td>90</td><td>80</td><td>51</td></tr><tr><td>10</td><td>94</td><td>93</td><td>54</td><td>78</td><td>42</td></tr><tr><td>11</td><td>118</td><td>95</td><td>51</td><td>97</td><td>41</td></tr><tr><td>12</td><td>133</td><td>94</td><td>70</td><td>110</td><td>41</td></tr><tr><td>13</td><td>151</td><td>91</td><td>10</td><td>125</td><td>43</td></tr><tr><td>14</td><td>151</td><td>123</td><td>4</td><td>125</td><td>27</td></tr><tr><td>15</td><td>131</td><td>176</td><td>15</td><td>108</td><td>25</td></tr><tr><td>16</td><td>107</td><td>127</td><td>18</td><td>88</td><td>25</td></tr><tr><td>17</td><td>82</td><td>119</td><td>54</td><td>68</td><td>29</td></tr><tr><td>18</td><td>43</td><td>126</td><td>105</td><td>38</td><td>25</td></tr><tr><td>19</td><td>78</td><td>129</td><td>75</td><td>23</td><td>24</td></tr><tr><td>20</td><td>140</td><td>155</td><td>34</td><td>116</td><td>11</td></tr><tr><td>21</td><td>111</td><td>154</td><td>48</td><td>92</td><td>11</td></tr><tr><td>22</td><td>88</td><td>175</td><td>88</td><td>73</td><td>1</td></tr><tr><td>23</td><td>65</td><td>175</td><td>174</td><td>53</td><td>1</td></tr><tr><td>24</td><td>24</td><td>160</td><td>194</td><td>19</td><td>8</td></tr><tr><td>25</td><td>1</td><td>153</td><td>95</td><td>1</td><td>12</td></tr><tr><td>26</td><td>1</td><td>40</td><td>92</td><td>12</td><td>68</td></tr></tbody></table>
# 3 - LE PROGRAMME INFORMATIQUE

## 2.1 - Description générale

Le programme proposé ici a été écrit en Quick-Basic (Microsoft) sur un compatible IBM.PC.

Il effectue les tâches suivantes :

- Création de fichiers de données spécifiques pour le programme (Saisie des données).

- Corrections d'erreurs de saisie dans un fichier de données.

- Listage (à l'écran ou à l'imprimante) des données.

- Modifications du fichier des paramètres (qui gère un certain nombre de valeurs : symboles typographiques, taille maximale du graphique etc...).

- Traçage de la carte.

Le programme a été conçu dans l'optique d'une utilisation la plus conviviale possible. L'utilisateur n'a pas besoin de connaissances en programmation : il doit simplement répondre aux questions posées en clair par le programme.

On peut déjà signaler qu'un certain nombre de paramètres sont laissés à l'appréciation des utilisateurs à chaque déroulement du programme. ce sont :

- Les dimensions du dessin

- Le nombre d'itérations (grilles d'interpolation)

- Le nombre de zones d'isovaleurs

- Les limites des zones d'isovaleurs

- L'intensité de la pondération initiale

On reviendra sur ces paramètres ultérieurement.

## 2.2 - Mise en route

Le programme porte le nom de MAP. Il fait appel à un fichier ASCII de paramètres nommé MAP.PAR, fourni avec MAP (cf. paragraphe 2.7). Le programme MAP et son fichier de paramètres MAP.PAR doivent se trouver dans le même répertoire pour un bon fonctionnement.

Le programme source est MAP.BAS, le programme compilé est MAP.EXE.

Si on désire faire fonctionner le programme source, il faut tout d'abord charger Quick-Basic, puis MAP.BAS et choisir l'option EXECUTION - DEMARRER.

Si on désire faire fonctionner la version compilée, il suffit de se positionner dans le répertoire où se trouve MAP.EXE, de taper MAP, puis de faire un 'Retour-chariot'

Une fois le programme lancé, il suffit de suivre les indications portées à l'écran.

Un premier écran apparaît (fig. 3), indiquant le titre du programme, la publication source, le nom et l'adresse du programmeur ainsi que la date de création (éventuellement la ou
TRACAGE AUTOMATIQUE DE CARTES D'ISOVALEURS

Source : DAVAUD E. - 1975 - Le traçage automatique de cartes d'isovaleurs : un algorithme simple en FORTRAN IV

Can. J. Earth Sci., 12 : 1069 - 1077

Adaptation F. lardeux - Centre ORSTOM de Tahiti. B.P. 529 Papeete

Version Février 1990

Faites un 'retour-chariot pour continuer ...

Figure 3 : Premier écran : présentation du programme.

MENU GENERAL

<table><tr><td>Modification du fichier des paramètres</td><td>1</td></tr><tr><td>Saisie des données</td><td>2</td></tr><tr><td>Correction dans un fichier de données</td><td>3</td></tr><tr><td>Listage d'un fichier de données</td><td>4</td></tr><tr><td>Traçage automatique de la carte</td><td>5</td></tr><tr><td>Fin de la session</td><td>6</td></tr></table>

Votre choix (numéro) :

Figure 4 : Second écran : Menu général du programme MAP.
les dates de mise à jour). Il suffit de faire un 'Retour-chariot' pour passer à l'écran suivant.

Ce second écran (fig.4), est le MENU GENERAL du programme. Il permet de choisir entre les diverses grandes options (saisie des données, correction dans un fichier, listage des données, traçage, modification du fichier MAP.PAR) ou de terminer la session.

Les options proposées sont choisie en indiquant simplement le numéro voulu et en faisant un 'Retour-chariot'.

Les paragraphes suivants analysent en détail ces différentes options.

**Remarque 1 :** A la fin d'exécution de chaque option, le programme revient automatiquement au MENU GENERAL (sauf si l'option "Fin de la session" est choisie, bien évidemment). Lorqu'une nouvelle option est choisie, le programme vous demande de confirmer que vous travaillez bien avec le même fichier (fig. 5), sauf, évidemment, pour l'option "Saisie des données" (= création de fichier). Si vous désirez changer de fichier, il suffit de l'indiquer au programme. Lors du premier choix, la question est, bien sur, "Nom du fichier des données" (fig. 6). Il faut, dans chaque cas (premier "run" ou "run" ultérieurs), préciser le nom du fichier avec son chemin d'accès complet. Par exemple, si votre fichier est sur une disquette dans le lecteur A, il faut écrire A:\Nom-du-fichier. Si votre fichier est sur le disque dur C, dans un répertoire DATA par exemple, il faut écrire C:\DATA\Nom-du-fichier.

**Remarque 2 :** Lors de la création d'un fichier de données, le programme ajoute automatiquement l'extension .MAP au nom indiqué. Ceci permet de repérer plus facilement les fichiers créés et utilisables par ce programme. Le programme n'accepte pas des fichiers sans l'extension .MAP. Par contre, lorsque le programme demande le nom d'un fichier, il ne faut pas donner l'extension .MAP.

## 2.3 - Saisie des données - création de fichier

Cette option permet de créer des fichiers spécifiques à l'utilisation du programme MAP. Ces fichiers sont de format ASCII, séquentiels, dans lesquels les données sont stockées de la façon suivante :

Abscisse du point 1, Ordonnée du point 1, Valeur au point 1, Abscisse du point 2, Ordonnée du point 2, etc...

La saisie des données se fait en entrant chaque valeur indiquée dans le 'tableau de saisie' (fig.7) et en faisant un 'retour-chariot' pour la valider.

Pour terminer le processus de saisie, il suffit de rentrer une valeur négative quelconque dans la colonne des abscisses et de faire des 'retour-chariot' pour les deux autres colonnes. Cette ligne ne sera pas prise en compte dans le fichier des valeurs.

Le programme demande alors de lui indiquer le nom du fichier pour ces données, en lui indiquant le chemin d'accès complet. Par exemple, C:\DATA\TYPO, si le fichier doit s'appeler TYPO et est stocké dans le disque dur C, dans un répertoire DATA.(fig.8)

Une fois la saisie terminée, le programme retourne au MENU GENERAL.
Le fichier de travail actuel est : c:\typo

Voulez vous le changer ? (o/n) :

Figure 5 : Demande de confirmation du fichier de travail en cours.

Nom du fichier des données (avec son chemin d'accès complet) :

Figure 6 : Demande du nom du fichier des données à traiter.

Pour finir la saisie, entrez une valeur négative en abscisse. Ce point ne sera pas pris en compte

POINT N°      ABSCISSE (X)      ORDONNEE (Y)      VALEUR

1

Figure 7 : Tableau de saisie des données : couples (x,y) et valeur (z) aux coordonnées (x,y)
Pour finir la saisie, entrez une valeur négative en abscisse. Ce point ne sera pas pris en compte

<table><thead><tr><th>POINT N°</th><th>ABSCISSE (X)</th><th>ORDONNEE (Y)</th><th>VALEUR</th></tr></thead><tbody><tr><td>1</td><td>20</td><td>40</td><td>125</td></tr><tr><td>2</td><td>25</td><td>36</td><td>150</td></tr><tr><td>3</td><td>15</td><td>47</td><td>250</td></tr><tr><td>4</td><td>12</td><td>25</td><td>251</td></tr><tr><td>5</td><td>25</td><td>62</td><td>136</td></tr><tr><td>6</td><td>56</td><td>12</td><td>99</td></tr><tr><td>7</td><td>-6</td><td></td><td></td></tr></tbody></table>

Nom du fichier avec son chemin d'accès complet : c:\data\typo

<caption>Figure 8 : Exemple de données fictives saisies et stockées dans le fichier TYPO (dans le disque dur C, sous le répertoire DATA)</caption>

Corrections dans le fichier : c:\typo

<table><thead><tr><th>POINT N°</th><th>ABSCISSE (X)</th><th>ORDONNEE (Y)</th><th>VALEUR</th></tr></thead><tbody><tr><td>1</td><td>20</td><td>40</td><td>125</td></tr><tr><td>2</td><td>25</td><td>36</td><td>150</td></tr><tr><td>3</td><td>15</td><td>47</td><td>250</td></tr><tr><td>4</td><td>12</td><td>25</td><td>251</td></tr><tr><td>5</td><td>25</td><td>62</td><td>136</td></tr><tr><td>6</td><td>56</td><td>12</td><td>99</td></tr></tbody></table>

Voulez vous corriger ces données (o/n) :

<caption>Figure 9 : Exemple d'écran permettant la correction des données.</caption>
Corrections dans le fichier : c:\typo

<table><thead><tr><th>POINT N°</th><th>ABSCISSE (X)</th><th>ORDONNEE (Y)</th><th>VALEUR</th></tr></thead><tbody><tr><td>1</td><td>20</td><td>40</td><td>125</td></tr><tr><td>2</td><td>25</td><td>36</td><td>150</td></tr><tr><td>3</td><td>15</td><td>47</td><td>250</td></tr><tr><td>4</td><td>12</td><td>25</td><td>251</td></tr><tr><td>5</td><td>25</td><td>62</td><td>136</td></tr><tr><td>6</td><td>56</td><td>12</td><td>99</td></tr></tbody></table>

Voulez vous corriger ces données (o/n) : o

Numéro du point à corriger : 4

Son abscisse est : 12 Nouvelle abscisse : 12

Son ordonnée est : 25 Nouvelle ordonnée : 25

Sa valeur est : 251 Nouvelle valeur : 287

<caption>Figure 10 : Exemple de correction de la donnée z (=valeur du point de coordonnées x, y)</caption>

Corrections dans le fichier : C:\TYPO

<table><thead><tr><th>POINT N°</th><th>ABSCISSE (X)</th><th>ORDONNEE (Y)</th><th>VALEUR</th></tr></thead><tbody><tr><td>1</td><td>20</td><td>40</td><td>125</td></tr><tr><td>2</td><td>25</td><td>36</td><td>150</td></tr><tr><td>3</td><td>15</td><td>47</td><td>250</td></tr><tr><td>4</td><td>12</td><td>25</td><td>287</td></tr><tr><td>5</td><td>25</td><td>62</td><td>136</td></tr><tr><td>6</td><td>56</td><td>12</td><td>99</td></tr></tbody></table>

Voulez vous corriger ces données (o/n) :

<caption>Figure 11 : Exemple de réaffichage de la partie du fichier corrigé.</caption>
FICHIER : C:\TYPO

<table><thead><tr><th>POINT N°</th><th>ABSCISSE (X)</th><th>ORDONNEE (Y)</th><th>VALEUR</th></tr></thead><tbody><tr><td>1</td><td>20</td><td>40</td><td>125</td></tr><tr><td>2</td><td>25</td><td>36</td><td>150</td></tr><tr><td>3</td><td>15</td><td>47</td><td>250</td></tr><tr><td>4</td><td>12</td><td>25</td><td>287</td></tr><tr><td>5</td><td>25</td><td>62</td><td>136</td></tr><tr><td>6</td><td>56</td><td>12</td><td>99</td></tr></tbody></table>

Appuyez sur une touche pour continuer ....

Voulez vous l'impression sur imprimante (o/n) :

<caption>Figure 12 : Listage, à l'écran, du fichier des données.</caption>

FICHIER : C:\TYPO

<table><caption>Figure 13 : Listage, à l'imprimante, du fichier des données.</caption><thead><tr><th>POINT N°</th><th>ABSCISSE (X)</th><th>ORDONNEE (Y)</th><th>VALEUR</th></tr></thead><tbody><tr><td>1</td><td>20</td><td>40</td><td>125</td></tr><tr><td>2</td><td>25</td><td>36</td><td>150</td></tr><tr><td>3</td><td>15</td><td>47</td><td>250</td></tr><tr><td>4</td><td>12</td><td>25</td><td>287</td></tr><tr><td>5</td><td>25</td><td>62</td><td>136</td></tr><tr><td>6</td><td>56</td><td>12</td><td>99</td></tr></tbody></table>
Dans cette rubrique, il n'y a pas de possibilités de corriger une valeur mal saisie. Au cas où une erreur dans la saisie se produirait, il faut tout de même finir de rentrer les autres données, comme si tout était correct et, lorsque le fichier est créé, passer à l'option de "CORRECTION" du MENU GENERAL (cf. paragraphe suivant).

## 2.4 - Corrections dans un fichier

L'option de correction permet de modifier des données déjà stockées dans un fichier.

Après avoir répondu à la question "Nom du fichier", le programme liste celui-çi à l'écran. Pour chaque écran affiché (c'est à dire pour chaque partie de fichier listée), le programme vous demande si des corrections sont à faire (fig.9).

Si la réponse est n (=non), le programme passe à un écran suivant en affichant la suite des données. Dans le cas contraire, le programme demande le numéro du point à corriger. Le programme donne alors la valeur de l'abscisse de ce point et demande la nouvelle valeur. Si l'abscisse n'est pas à corriger, on doit retaper tout de même la valeur. Le programme repète ce processus pour l'ordonnée et la "valeur" du point (fig.10). Une fois l'erreur (ou les erreurs) corrigée, le programme réaffiche l'écran corrigé et redemande si d'autres corrections sont à faire (fig.11). Le processus est répété jusqu'à ce qu'il n'y ait plus aucune correction à faire (répondre "n" à la question "Voulez vous corriger ces données (o/n) : ").

Le programme affiche alors la suite des données et réitère sa demande de correction. Ce processus est répété jusqu'à ce que tout le fichier ait été passé en revue.

Le programme sauvegarde alors les corrections dans un fichier de même nom (l'ancien fichier est détruit et remplacé par le fichier corrigé). Le programme retourne ensuite au MENU GENERAL.

## 2.5 - Listage d'un fichier

Cette option permet de lister un fichier à l'écran ou sur l'imprimante. Après avoir donné le nom du fichier à lister, le programme liste celui-çi à l'écran. En fin de fichier, le programme demande si le listage doit être reproduit sur l'imprimante (fig.12). En cas de réponse affirmative (o = oui), la sortie sur imprimante se fait comme à la figure 13.

## 2.6 - Traçage des cartes d'isovaleurs

Après avoir répondu à la question du "nom du fichier à traiter", le programme pose un certain nombre de questions préalables aux calculs (fig.14)

- 1 - "Nombre de zones d'isovaleurs : "

C'est le nombre de zones d'isovaleurs souhaitées, selon lesquelles sera dessinée la carte. Le maximum possible est de 19.

- 2 - "Dimension horizontale du dessin : "

Elle est exprimée par le nombre de colonnes requises. Les limites de Quick-Basic imposent un maximum de 125 (au-delà, il y a un dépassement de la capacité mémoire en raison des
déclarations de variables qui dépendent de cette valeur). Ce nombre de colonnes est aussi limité par le fichier MAP.PAR (cf paragraphe 2.7 suivant), dans lequel les dimensions de l'imprimante sont demandées (80 colonnes, 132 colonnes ...). Si l'imprimante disponible est de 80 colonnes, la taille maximale pour la dimension horizontale du dessin tombe à 76 colonnes.

La précision de la carte est d'autant plus grande que sa dimension est élevée. La durée des calculs est cependant d'autant plus longue que cette dimension est élevée.

La qualité de la résolution est limitée par l'utilisation de l'imprimante. Elle pourrait être améliorée par l'utilisation d'un traceur de courbes ou en subdivisant le problème étudié en aires distinctes, juxtaposées, et en soumettant séparément chaque groupe de données.

### - 3 - "Nombre de grilles d'interpolation successives : "

Ce paramètre permet de fixer indirectement les dimensions de la première grille d'interpolation. Le programme affiche d'ailleurs la taille de la maille initiale (en nombre de colonnes), compte tenu de la réponse fournie à la question. Si cette maille convient, il suffit de répondre o (= oui). Dans le cas contraire (n = non), le programme repose la question "Nombre de grilles d'interpolation ...".

Par exemple, si le nombre de grilles est de 6, la maille initiale aura $2^{(6-1)} = 32$ colonnes de côté.

### - 4 - "Intensité de la pondération des points de mesure : "

Si la valeur attribuée à ce paramètre est élevée, la surface tend à passer par tous les points de mesure. Par contre, lorsque cette valeur décroît, la surface devient plus émoussée. L'émoussage est maximum pour une valeur de 1.

### - 5 - "Limites de classes de valeurs : "

On doit entrer ces limites (supérieures), dans l'ordre croissant, de la plus petite à la plus grande.

Le programme procède alors aux calculs et affiche les numéros des grilles sur lesquelles il procède : "Je fais les calculs sur la grille n° ...".

A la fin des calculs, la carte est automatiquement reproduite sur l'imprimante. Donc, **NE PAS OUBLIER D'ALLUMER L'IMPRIMANTE !**

Comme le souligne Davaud, l'algorithme MAP peut, sans autre modification, servir soit à la cartographie automatique, soit à l'analyse de tendance. En faisant varier l'intensité de pondération, l'utilisateur peut contrôler le degré d'émoussage de la surface. En jouant sur le nombre d'itérations, il peut encore limiter l'interpolation aux zones où la densité de points de mesure est suffisamment élevée ou au contraire faire en sorte que la surface occupe entièrement l'espace délimité par les points de mesures extrèmes.

## 2.7 - Le fichier des paramètres (MAP.PAR)

Ce fichier contient un certain nombre de paramètres indispensables au bon déroulement du programme. Il sont fixés
<figure><img src="image_5.png" /><figcaption>Figure 14 : Questions posées par le programme à chaque lancement de MAP.</figcaption></figure>

<figure><img src="image_6.png" /><figcaption>Figure 15 : Exemple de symboles typographiques, avec la possibilité de modifications.</figcaption></figure>
selon les désirs des utilisateurs, mais, pour un même type d'installation, ces paramètres n'ont pas à être changés à chaque démarrage de MAP... d'où leur présence sur un fichier à part.

Toutefois, ces paramètres peuvent être modifiés (option 1 du MENU GENERAL). Dans ce cas, le programme demande les questions suivantes :

- 1 - "Nombre de colonnes de l'imprimante : "

- 2 - "Definition des échelles horizontales et verticales"

- 3 - "Symboles graphiques"

A chaque question, le programme affiche la (ou les) valeur par défaut et demande si on désire la modifier. En cas de réponse négative, le programme passe à la question suivante. Si la valeur doit être modifiée, le programme demande la nouvelle valeur et réaffiche la correction.

Par exemple, dans le cas des symboles typographiques pour la cartographie, un premier écran apparaît (fig.15) où l'ensemble des valeurs par défaut est affiché, avec la question "Voulez vous modifier ces symboles (o/n) : ". Si la réponse est o (oui), le programme demande le "Numéro du symbole à corriger : ". Il affiche ensuite le symbole correspondant et demande le nouveau symbole désiré (fig. 16). Le programme réaffiche alors les symboles, en tenant compte de la correction (fig. 17). Les corrections prennent fin si on répond n (non) à la question "Voulez vous modifier ces symboles (o/n) : ".

**Remarque** : Dans le fichier MAP.PAR originel, la configuration de l'imprimante est fixée, par défaut, à 132 colonnes. De même, la définition des échelles horizontales et verticales suppose que 3 lignes représentent la même distance que 5 colonnes, en raison de la configuration des caractères de l'imprimante utilisée pour la mise au point du programme (ici, une Mannesman Tally 290). Pour la plupart des imprimantes matricielles du marché, ces paramètres sont en général identiques à ceux de MAP.PAR.

Les symboles peuvent être modifiés à souhait, en prennant par exemple ceux des caractères ASCII. Seul le caractère blanc n'est pas autorisé.

## CONCLUSION

Le programme présenté ici est relativement souple d'emploi et modulable en fonction des besoins. Il peut répondre simplement à la plupart des problèmes de cartographie automatique de zones d'isovaleurs. Les représentations graphiques obtenues sont satisfaisantes, quelle que soit la complexité de la surface et quelles que soient la distribution et la densité des points de mesure.

Le programme peut être obtenu sur disquette, ainsi qu'une version compilée pour ceux qui ne possèdent pas Quick-Basic.
MODIFICATIONS DU FICHIER DES PARAMETRES (MAP.PAR)

Symboles utilisés pour le traçage :

<table><thead><tr><th>n°</th><th>Symbole</th><th>n°</th><th>Symbole</th><th>n°</th><th>Symbole</th><th>n°</th><th>Symbole</th></tr></thead><tbody><tr><td>1</td><td>1</td><td>2</td><td>.</td><td>3</td><td>*</td><td>4</td><td>.</td></tr><tr><td>5</td><td>I</td><td>6</td><td>.</td><td>7</td><td>X</td><td>8</td><td>.</td></tr><tr><td>9</td><td>0</td><td>10</td><td>.</td><td>11</td><td>W</td><td>12</td><td>.</td></tr><tr><td>13</td><td>$</td><td>14</td><td>.</td><td>15</td><td>5</td><td>16</td><td>6</td></tr><tr><td>17</td><td>7</td><td>18</td><td>8</td><td>19</td><td>9</td><td>20</td><td>$</td></tr></tbody></table>

Numéro du symbole à corriger : 15

Ce symbole est : 5

Nouveau symbole : !

<figure><img src="image_7.png" /><figcaption>Figure 16 : Exemple de modification d'un symbole.</figcaption></figure>

MODIFICATIONS DU FICHIER DES PARAMETRES (MAP.PAR)

Symboles utilisés pour le traçage :

<table><thead><tr><th>n°</th><th>Symbole</th><th>n°</th><th>Symbole</th><th>n°</th><th>Symbole</th><th>n°</th><th>Symbole</th></tr></thead><tbody><tr><td>1</td><td>1</td><td>2</td><td>.</td><td>3</td><td>*</td><td>4</td><td>.</td></tr><tr><td>5</td><td>I</td><td>6</td><td>.</td><td>7</td><td>X</td><td>8</td><td>.</td></tr><tr><td>9</td><td>0</td><td>10</td><td>.</td><td>11</td><td>W</td><td>12</td><td>.</td></tr><tr><td>13</td><td>$</td><td>14</td><td>.</td><td>15</td><td>!</td><td>16</td><td>6</td></tr><tr><td>17</td><td>7</td><td>18</td><td>8</td><td>19</td><td>9</td><td>20</td><td>$</td></tr></tbody></table>

Voulez vous modifier ces symboles (o/n) :

<caption>Figure 17 : Réaffichage des symboles modifiés.</caption>
BIBLIOGRAPHIE

Davaud, E. - 1975 - Le traçage automatique de cartes d'isovaleurs: un algorithme simple en FORTRAN IV. Can. J. Earth Sci., 12 : 1069 - 1077.

Lardeux, F., Séchan, Y., Faaruia, M., Tuhiti, P., - 1988 - Lutte biologique contre *Aedes polynesiensis* avec le copépode *Mesocyclops aspericornis*. Expérimentation à Rangiroa. III - Evaluation six mois après traitement. Rapport ITRMLM 15/88/ITRM/Doc-Ent: 45 p.

Matheron, - 1965 - *Les variables régionalisées et leur estimation.* Masson et Cie (Eds), Paris.
Annexe : Listing du programme MAP
print
NWEIGHT = 0
while NWEIGHT < 1
input "Intensité de la pondération des points de mesure : ", NWEIGHT
wend

PRINT
print "Limites des classes de valeur :"
print "De la plus petite à la plus grande, dans l'ordre croissant ...."
print
for K = 1 to NCLAS
WHILE LIM!(K-1) >= LIM!(K)
print "Limite supérieure de la ";K;" ème classe : ";
input "",LIM!(K)
wend
next K
print : print

'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+'+
'+'+'+'+''+ sous programme de calcul et traçage
'+'+'+'+
XMIN = 1E30
YMIN = XMIN
ZMIN = XMIN

XMAX = -1E30
YMAX = XMAX
ZMAX = XMAX

gosub lecdon

DZ = ZMAX - ZMIN
for I = 1 to nc+1
    for J = 1 to nc+1
        A(I,J) = 0
    next J
next I

'''**CALCUL DES DIMENSIONS DE LA MAILLE D'INTERPOLATION'''**
DX = (XMAX - XMIN) / NC
DY = KC * DX / KL
NL = ((YMAX - YMIN) / DY + 1)
for I = 1 to NU
    IX = ((U(I) - XMIN) / DX)
    lig(i) = INT(ix)
    if lig(i) = 0 then lig(i) = 1
    IY = ((V(I) - YMIN) / DY)
    co(i) = INT(iy)
    if co(i) = 0 then co(i) = 1
    A(NL-IY,IX+1) = W(I) + DZ * 2
next I
NC = NC + 1
## CREATION SUCCESSIVES DE GRILLES D'INTERPOLATION

for KPA = 1 to ITERA
  print "Je fais les calculs sur la grille n° ";kpa
  JMP = 2^(ITERA-KPA)
  DIST = (KL * DY * JMP) ^2
  NW = 0
  open "D",#1,"TEMPO.MAP"
  for ILIG = 1 to NL step JMP
    NDY = ILIG - KL * JMP
    NEY = ILIG + KL * JMP
    if NDY < 1 then NDY = 1
    if NEY > NL then NEY = NL
    for ICOL = 1 to NC step JMP
      if ((A(ILIG, ICOL) > ZMAX + DZ) and (KPA > 1)) then goto 75
      NOX = ICOL - KC * JMP
      NEX = ICOL + KC * JMP
      if NEX > NC then NEX = NC
      if NOX < 1 then NOX = 1
      NPOIN = 0
      for L = NDY to NEY
        for K = NOX to NEX
          if A(L,K) = 0 then goto 77
          D = ((ICOL - K) * DX)^2 + ((ILIG - L) * DY)^2
          if D > DIST then goto 77
          NPOIN = NPOIN + 1
          U(NPOIN) = K * DX
          V(NPOIN) = L * DY
          W(NPOIN) = A(L,K)
          ME = SECTEUR - (SECTEUR * D / DIST) + 1
          F(NPOIN) = ME * ME
          if A(L,K) <= ZMAX then goto 77
          W(NPOIN) = A(L,K) - 2 * DZ
          F(NPOIN) = F(NPOIN) * NWEIGHT
        next K
        next L
        if NPOIN < 4 goto 75
        NW = NW + 1
      end
    end
  end
end

## CALCUL DES COEFFICIENTS DU POLYNOME

SX = 0
SY = 0
SZ = 0
SXY = 0
SXZ = 0
SYZ = 0
SXX = 0
SYY = 0
NP# = 0

for K = 1 to NPOIN
  NP# = NP# + F(K)
  SX = SX + F(K) * U(K)
  SY = SY + F(K) * V(K)
  SZ = SZ + F(K) * W(K)
next K

XM = SX / NP#

YM = SY / NP#

ZM = SZ / NP#

for K = 1 to NPOIN

SXX = SXX + (F(K) * (U(K) - XM))^2

SYY = SYY + (F(K) * (V(K) - YM))^2

SXY = SXY + F(K) * (U(K) - XM) * (V(K) - YM)

SXZ = SXZ + F(K) * (U(K) - XM) * (W(K) - ZM)

SYZ = SYZ + F(K) * (V(K) - YM) * (W(K) - ZM)

next K

SKK = SXX * SYY - SXY^2

if SKK = 0 then goto 87

B1 = (SXZ * SYY - SYZ * SXY) / SKK

B2 = (SYZ * SXX - SXZ * SXY) / SKK

B0 = ZM - B1 * XM - B2 * YM

X0 = ICOL * DX

Y0 = ILIG * DY

Z = B0 + B1 * X0 + B2 * Y0

print #1, ICOL, ILIG, Z

goto 75

87      print #1, ICOL, ILIG, ZM

75      next ICOL

next ILIG

close #1

’********* ATTRIBUTION DES SYMBOLES E1 IMPRESSION DE LA SURFACE *********

open "I", #1, "TEMPO.MAP"

for I = 1 to NW

input #1, K, L, B

A(L, K) = B

next I

close #1

next KPA

WIDTH "LPT1:", nbcol

LPRINT

lprint "Fichier traité : "; fichier$

lprint

lprint "Nombre de zones d'isovaleurs : "; nclas

lprint "Nombre de points en entrée : "; NU

lprint "Pondération des points de mesure : "; nweight

lprint "Nombre d'itérations : "; itera

lprint: lprint

Z$ = "123456789 "

FOR I = 1 TO int nc/10)

lprint Z$;

next i

lprint

for L = 1 to NL

for K = 1 to NC

if A(L, K) > ZMAX + DZ then A(L, K) = A(L, K) - 2 * DZ
for J = 1 to NCLAS
    if A(L,K) > LIM!(J) then goto 86
    A(L,K) = ASC(sym$(J))
    goto 84
86    if j = nclas then A(1,k) = ASC(sym$(nclas+1))
        next J
84    next K
    for K = 1 to NC
        lprint CHR$(A(L,K));
    next K
    lprint USING "###"; L
next L

'impression de la légende
lprint: lprint
for i = 1 to nclas
    lprint "SYMBOLE : ";SYM$(i);
    lprint " LIMITE SUPÉRIEURE : ";LIM!(i)
next i
lprint "SYMBOLE : ";sym$(nclas+1);
lprint " VALEURS SUP A : ";LIM!(nclas)
lprint
lprint "------------------------------------------------------------------"
lprint
lprint " Point Abscisse Ordonnée Valeur Colonne Ligne"
gosub lecdon
for i = 1 to nu
    lprint tab(3) i;
    lprint tab(18) U(i);
    lprint tab(31) V(i);
    lprint tab(43) W(i);
    lprint tab(54) lig(i);
    lprint tab(65) NL - co(i)
next i

KILL "TEMPO.MAP"

end

fin de trace
'+'+'+'+'+'+'+'+'+'+'+'+'+
'+'+'+'+
'++++' sous programme de lecture des données sur fichier
'+'+
lecdon:
open "I",#1, fichier$ + ".map"
NU = 1
while not EOF(1)
    input #1,U(NU), V(NU), W(NU)
    if U(NU) > XMAX then XMAX = U(NU)
    if U(NU) < XMIN then XMIN = U(NU)
    if V(NU) > YMAX then YMAX = V(NU)
    if V(NU) < YMIN then YMIN = V(NU)
    if W(NU) > ZMAX then ZMAX = W(NU)
    if W(NU) < ZMIN then ZMIN = W(NU)
```pascal
cls
print : print
print tab(15) "MODIFICATIONS DU FICHIER DES PARAMETRES (MAP.PAR)
print : print
view print 6 to 24
```

```pascal
areter = 1
while areter
  cls
  print "Le nombre de colonnes de l'imprimante est : ";nbcol
  print
  y$ = ""
  while (y$ <>"0" and y$ <>"0" and y$ <> "N" and y$ <> "n")
    input "Voulez vous corriger cette valeur (o/n) : ",y$
wend
```

```pascal
if y$="0" or y$ = "0" then
  print
  input "Nombre de colonnes de l'imprimante : ",nbcol
else areter = 0
end if
wend
```

```pascal
areter = 1
while areter
  cls
  print
  print "Définition des échelles horizontales et verticales :"
  print
  print "Actuellement, ";KL;" lignes représentent la même distance que "
  print " ";KC;" colonnes."
  print
  y$ = ""
  while (y$ <>"0" and y$ <>"0" and y$ <> "N" and y$ <> "n")
    input "Voulez vous corriger ces valeurs (o/n) : ",y$
wend
```

```pascal
if y$="0" or y$ = "0" then
  print
  input "Nombre de lignes : ",KL
  input "Nombre de colonnes : ",KC
  print
  print "Maintenant, ";KL;" lignes représentent la même distance que "
  print " ";KC;" colonnes."
else areter = 0
end if
wend
```

```pascal
areter = 1
while areter
  cls
  print "Valeur du paramètre 'secteur' : ";secteur
  print
  y$ = ""
  while (y$ <>"0" and y$ <>"0" and y$ <> "N" and y$ <> "n")
    input "Voulez vous modifier cette valeur (o/n) : ",y$
wend
```
wend
if y$="o" or y$ = "0" then
  print
  input "Secteur : ", secteur
else areter = 0
end if
wend

areter = 1
while areter
  view print 6 to 24
  cls
  print "Symboles utilisés pour le traçage :"
  print
  print " n° Symbole n° Symbole n° Symbole n° Symbol
  for i = 1 to 17 step 4
    locate , 1 : print i; : locate , 9 : print sym$(i);
    locate , 21 : print i+1; : locate , 29 : print sym$(i+1);
    locate , 41 : print i+2; : locate , 49 : print sym$(i+2);
    locate , 58 : print i+3; : locate , 66 : print sym$(i+3)
    print
  next i
  view print 20 to 24
  y$ = ""
  while (y$ <> "0" and y$ <> "o" and y$ <> "N" and y$ <> "n")
    input "Voulez vous modifier ces symboles (o/n) : ", y$
  wend
  if y$="o" or y$ = "0" then
    print
    ns = 0
    while ns<1 or ns>20
      cls
      input "Numéro du symbole à corriger : ", ns
      ancien$ = sym$(ns)
      print "Ce symbole est : "; sym$(ns)
      input "Nouveau symbole : ", sym$(ns)
      if sym$(ns) = "" then
        sym$(ns) = ancien$
        print "ATTENTION : ce symbole n'est pas valide !"
        input "Appuyez sur une touche pour continuer ...", a$
        ns = 0
      end if
    wend
    else areter=0
    end if
end
'******************* écriture des paramètres de dimensionnement par défaut
open "o", #1, "MAP.PAR"
print #1, nbcol, kl, kc, secteur
for i = 1 to 20