Import fichier DEM
OverdOzed
Inscrit:
24/07/2008 00:45
De Paris
Post(s): 3447
Bonjour à tous !

On m'a demandé il y a peu un moyen d'ouvrir les fichiers DEM présents sur un CD VistaPro.
Le format DEM, pour Digital Elevation Model est un format décrivant le relief d'une portion de terrain.
En gros, c'est une heightmap mais elle n'est pas compresser de la même façon qu'une image donc je n'ai pas trouvé de moyen simple de l'ouvrir.
Avec l'aide de ce site, j'ai fait un petit script permettant d'ouvrir ces fichiers. Je n'ai testé le script que sur les fichiers du cd que j'avais mais je sais que le format DEM a été utilisé par l'USGS, United States Geological Survey, donc ça peut peut-être servir à d'autres.

En ce qui concerne l'utilisation du script, il faut indiquer dans rep le chemin du fichier à ouvrir et la variable pos permet de gérer le décalage. Par exemple, si on charge deux fichiers représentant des zones contiguës selon l'axe X, on charge le premier fichier avec pos = (0,0) et le second avec pos = (1,0). Ça évite de déplacer les blocs à la main si on veut en charger beaucoup.

Un petit rendu d'un terrain chargé avec ce script (région des Alpes italiennes) :


Voici donc le petit script d'import : profitez-en, c'est libre d'être réutilisé sans conditions de ma part.
import io
from struct import unpack, calcsize
import bpy

## Paramètres ##
    # Fichier
rep = "/media/DEM_ALPES/Alps/ALPS75/DEMS0303/ALPSAR19.DEM"
    # Position du bloc.
# Aide : Si pour le fichier ALPSaa11, pos = (i, j)
#  si aa augmente, augmenter i
#  si 11 augmente, augmenter j
pos = (0, 0)
scale = .1
scalez = 1./500.
## ##

def main(rep, pos, scale) :
    offx = pos[1] * 256 * scale
    offy = pos[0] * 256 * scale
    
    ## Ouverture du fichier
    file = io.FileIO(rep)
    raw = file.read()
    
    f = 'B'           # Format : unsigned char
    s = calcsize(f)   # Taille en bytes d'un élément de données
    off = 2048        # Offset (2048 bytes d'en-tete)
    
    wx = 258
    width = 258
    
    ## Analyse des données
    verts = []
    faces = []
    
    print("-----------------")
    def read(off) :
        if off+s > len(raw) :
            print("erreur")
        (a,) = unpack(f, raw[off:off+s])
        return a, off + s
    
    x = 0
    while x < wx :
        # longueur de la ligne
        long, off = read(off)
        a, off = read(off)
        long = long * 256 + a
        
        # Décompression
        k = off
        data = []
        while off - k < long :
            c, off = read(off)
            if c >= 128 :
                r = 257 - c # Nombre de répétitions
                oct, off = read(off)
                data.extend([oct]*r)
            else :
                for i in range(c + 1) :
                    oct, off = read(off)
                    data.append(oct)
        
        
        # Altitude absolue
        alt = data[0] * 256 + data[1]
        point = [alt]
        k = 2
        while k < len(data) :
            c = data[k]
            if c == 128 and k + 2 < len(data) :
                point.append(256 * data[k+1] + data[k+2])
                k += 3
            elif c < 128 :
                point.append(point[-1]+c)
                k += 1
            else :
                point.append(point[-1]-256+c)
                k += 1
        
        
        # Construction du maillage
        for y in range(min(width,len(point))) :
            hgt = point[y]
            
            verts.append((offy + y*scale, offx + x*scale, hgt*scalez))
            
            if x > 0 and y > 0 :
                faces.append(((x-1)*width + y, (x-1)*width + y - 1, x*width + y - 1, x*width + y))
            
        x += 1
    
    ## Construction de l'objet
    mesh = bpy.data.meshes.new("dem_mesh")
    mesh.from_pydata(verts, [], faces)
    mesh.update()
    
    obj = bpy.data.objects.new("dem", mesh)
    scene = bpy.context.scene
    scene.objects.link(obj)



main(rep, pos, scale)

Contribution le : 17/02/2013 17:30
_________________
Tuto MaPZone
Créer un fichier PDF de la contribution Imprimer


Re: Import fichier DEM
Clan Afficionado
Inscrit:
04/08/2009 13:33
De Lille
Post(s): 52
Bonjour Bobibou,

Connais-tu cet add-on?
ESRI shapefile I/O
Si tu veux, je pourrais faire de ton code, un add-on....
Ciao.
Spirou4D

Contribution le : 18/02/2013 09:02
Créer un fichier PDF de la contribution Imprimer


Re: Import fichier DEM
OverdOzed
Inscrit:
24/07/2008 00:45
De Paris
Post(s): 3447
Ah non je connaissais pas cet add-on merci

Tu peux faire un add-on si ça te fais plaisir, je ne compte pas approfondir ce script, faute de temps, je postais juste pour partager, même si visiblement d'autres l'on déjà fait.

Mais tu me fais pensé que j'ai pas parlé de la licence du code : c'est tout libre

Contribution le : 18/02/2013 21:17
_________________
Tuto MaPZone
Créer un fichier PDF de la contribution Imprimer



 Haut   Précédent   Suivant




Enregistrer votre réponse
Compte*
Nom   Mot de passe   Authentification
Message:*



[Recherche avancée]



Sujets récemment répondus
Forums Sujets Réponses Lus Dernières contributions
Questions & Réponses blender 2.90 export stl de plusieurs objets d une scene 1 74 Aujourd'hui 13:32:56
viralata 
Le coin des geeks Probleme ordinateur ram ou carte mère 8 64 Aujourd'hui 12:11:38
lucky 
Moteur de jeu GameBlender et alternatives [non résolu] Cs (vaisseau)    [1][2][3]...[54] 530 152236 Aujourd'hui 11:13:14
Redstar 
Questions & Réponses [résolu] Changer le "World" du 3D Viewport avec 2.91 2 33 Hier 19:41:40
Horemheb 
Hors Sujet !! création d'une vidéo pour pyramide holographique 1 96 Hier 13:36:31
meltingman 
Questions & Réponses Réduire des faces individuellement dans une seule ou deux directions ? 5 553 Hier 13:09:11
yawdpwal 
Questions & Réponses [non résolu] Make Parent / Assemblage et mécanisme complexe 6 1055 Hier 07:53:14
Sphere3d 
Questions & Réponses aspect de ma courbe de Bézier 3 59 01/03 18:38:47
Littlespoon 
Questions & Réponses Optimisation topologie 1 51 01/03 17:19:01
yawdpwal 
The Blender Clan 'tchat Blender 2.8x : Actus, tests, feedback..    [1][2][3]...[8] 73 42124 01/03 11:35:54
Guiu 
Questions & Réponses UV mapping supprimer une projection 5 155 01/03 08:34:39
debutant 
Questions & Réponses existe il un moyen de savoir si un modele 3D tient debout    [1][2] 13 708 28/02 19:54:23
manie 
Questions & Réponses [non résolu] Shader de corde procedural 3 82 28/02 18:56:01
Rimpotche 
Questions & Réponses Couleur sur mesh après les avoir joint 2 67 27/02 17:05:25
thomas56 
Questions & Réponses [résolu] Impossible de rendre ma vidéo. 5 96 27/02 15:07:49
thomas56 
[WIP] et travaux terminés [WIP] La gabarre '' Le Gros Ventre''    [1][2][3]...[6] 58 6070 27/02 12:08:19
Guiu 
Questions & Réponses Bouger un objet lié à une armature via un empty 5 108 27/02 09:06:21
Lylo 
Le coin des geeks Amd vs Nvidia    [1][2][3]...[5] 46 2894 26/02 22:51:01
Lylo 
[WIP] et travaux terminés [WIP] La cabane de Tarzan    [1][2][3]...[10] 98 28407 26/02 19:10:05
BlendX 
[WIP] et travaux terminés [WIP & tests] Fluides/ Molecular addon    [1][2] 13 442 26/02 18:54:44
lucky 

Qui est en ligne
102 utilisateur(s) en ligne (dont 62 sur Forums)

Membre(s): 0
Invité(s): 102


plus...
Nouveaux membres
KatjaWerfe 3/3/2021
JinaWilhit 3/3/2021
AidanMedlo 3/3/2021
ZIICatheri 3/3/2021
JacelynL19 3/3/2021
Launa33Q0 3/3/2021
WilbertHau 3/3/2021
HiltonD300 3/3/2021
Rene331202 3/3/2021
ModestoDyk 3/3/2021
Dernier Ajout
2020-09-24.jpg

Evènements à venir
Mar 14
Anniversaire de AMV12
Mar 16
Anniversaire de galba
Mar 29
GeeWee's B-Day
plus 259 plus d'élément(s)
 Par Mickaël Guédon [ebrain] © 2003-2021 The Blender Clan - hébergé par TuxFamily - Site déclaré à la CNIL sous le numéro 1155445