" />
L’objectif de cette page est de vous expliquer comment décoder les fichiers ".dem" tels qu’on peut les trouver dans Visual DEM France.
L’objectif de cette page est de vous expliquer comment décoder les fichiers ".dem" tels qu’on peut les trouver dans Visual DEM France.
Chaque fichier représente une zone de 258x258 points. On trouve dans les fichiers .ctp toutes informations nécessaires pour caler ces fichiers par rapport au système géodésique utilisé. Par exemple, les fichiers Visual DEM France sont basés sur la projection Lambert II étendue avec un pas de 75 m. On peut alors calculer la taille d’un fichier en mètre. Il faut prendre en compte un recouvrement entre fichier voisin d’une ligne ou d’une colonne suivant la direction, ce qui nous donne des dimensions effectives de 256x256 points, soit 19,2x19,2 km².
Par exemple, si on veut savoir dans quelle dalle se trouve Paris. Les coordonnées des Paris sont :
X : 600 000
Y : 2 430 000
Dans le fichier france.ctp, on a :
[Calculations]
BigBotX=40000
BigBotY=1690000
En X, ça donne :
(600000 - 40000)/75/256 = 29 : colonne 29 qui s’appelle BD
En Y, nous avons :
(2430000 - 1690000)/75/256 = 38 : ligne 38 qui s’appelle 39
Le fichier couvrant Paris est nommé : franbd39.dem.
Un fichier commence par un en-tête de $800 octets. Vous pouvez l’ignorer. Ensuite vient un codage ligne par ligne du sud au nord, chaque ligne étant balayée d’ouest en est.
Le principe :
Au début d’une ligne, l’altitude de départ est fournie sur deux octets. Ensuite, on passe à l’octet suivant en codant la variation d’altitude sur un octet sauf quand la variation est trop brusque, auquel cas on recommence avec une altitude absolue sur deux octets. Et ainsi de suite jusqu’à la fin de la ligne. A ceci s’ajoute une compression des zones d’altitude constante. Cette compression s’apparente à du RLE, à savoir qu’un octet indique soit le nombre de répétition, soit le nombre de codage normal avant la prochaine répétition.
La pratique :
Pour simplifier le travail, nous allons procéder au décodage en deux étapes. La première consiste à remplacer les compression par leurs répétitions d’origine. La seconde remontera aux altitudes absolues en fonctions des altitudes relatives.
Les deux premiers octets de la ligne contiennent la longueur de la ligne (compressée) dans le fichier.
* Décompression
En commençant au début de la ligne (après les 2 octets indiquant la longueur), on prend le premier octet. Soit C sa valeur. Si C est supérieur ou égal à 128, il s’agit d’une répétition de 257-C fois l’octet suivant. Si C est inférieur à 128 alors il n’y a pas de répétitions dans les C+1 octets suivants. Il suffit de les prendre tel quel. Quand on arrive à la fin d’une des deux séquences définies ci-dessus (répétition ou codage normal), on recommence en prenant le premier octet après la séquence et en le comparant de nouveau à 128. On reconstitue ainsi petit à petit la ligne décompressée. Lorsque vous avez épuisé la ligne compressée, vous disposer d’une ligne décompressée.
* Variation d’altitude
On travaille maintenant sur la ligne décompressée. Les deux premiers octets fournissent l’altitude absolue (premier*256+second) du début de la ligne. Ensuite, la valeur de l’octet que vous rencontrez vous indique comment calculer l’altitude du point suivant :
C=128 : altitude absolue calculée d’après les deux octets suivants.
C<128 : l’altitude augmente de C par rapport au point précédent.
C>129 : l’altitude diminue de 256-C par rapport au point précédent (ou elle augmente aussi de C si C est un shortInt).
Quand vous avez 258 altitudes successives, vous avez terminé.
Voilà.
En prime, un projet Delphi 6 qui convertit un fichier DEM en TXT.