Suite

Vous cherchez un outil pour générer du maillage à partir du DTM ?


Existe-t-il des outils qui peuvent prendre un DTM, au format asc ou geotiff et générer un maillage à partir de celui-ci qui peut être utilisé dans meshlab ou un logiciel similaire.

J'ai un fichier asc DTM que j'ai besoin de convertir en fichier de maillage pli. Est-ce possible?

En réponse au commentaire. Alors ces fichiers asc DTM ne sont pas ceux que comprend meshlab.

Les fichiers commencent par :

ncols 6250 nrows 6250 xllcorner 630000.000000000000 yllcorner 6070000.000000000000 cellsize 1.6000000000000 NODATA_value -9999

Un raster DTM peut être représenté par des maillages triangulaires en trouvant un ensemble de triangles non superposés qui couvre l'ensemble du maillage et se rapproche du champ d'élévation. Il existe deux types différents de maillages triangulaires qui peuvent être utilisés à cette fin :

  • un réseau régulier triangulé (TRN), dans lequel chaque pixel du raster est représenté par un sommet et tous les triangles ont la même taille et la même forme. Toutes les informations d'origine du raster DTM sont présentes dans le TRN, mais la mémoire requise pour stocker le maillage est généralement assez élevée.
  • un réseau irrégulier triangulé (ÉTAIN), dans lequel il y a moins de sommets que de pixels raster et les triangles ont des formes et des tailles différentes. Les sommets et la triangulation sont choisis de telle sorte que la surface résultante se rapproche du raster DTM d'origine jusqu'à une erreur spécifiée. Cela se traduit généralement par des fichiers beaucoup plus petits, car les zones planes ou presque planes peuvent être représentées en utilisant seulement quelques sommets.

Dans la plupart des applications, si vous devez gérer des maillages d'altitude, vous utiliserez un TIN, car le fait de rejeter des informations redondantes ou presque redondantes permet des calculs plus efficaces. Cependant, la création de TIN à partir de rasters n'est pas simple, car il existe de nombreuses triangulations différentes qui se rapprochent d'une grille avec la même erreur, mais en utilisant des ensembles de sommets différents.

Logiciel de création de TIN

  • Le logiciel Terra de Michael Garland.
  • ArcGIS : Raster vers TIN fonction de la boîte à outils 3D Analyst.
  • SIG SAGA :Grille vers TIN (Points spécifiques à la surface)fonction, suivi deExporter le TIN vers un fichier de lithographie stéréo (STL)fonction pour exporter le TIN dans un format de maillage lisible par Meshlab.

Logiciel de création de TRN

  • VTBuilder, qui fait partie du projet de terrain virtuel : chargez le raster DTM à l'aide de « Couche | Importer une couche », puis convertissez-le en un TRN à l'aide de « Élévation | Convertir la grille en TIN ». Ensuite, vous sélectionnez la couche nouvellement générée dans la vue d'ensemble des couches et sélectionnez "Altitude | Exporter vers… ". VTBuilder peut lire tous les formats raster pris en charge par GDAL et exporte le TRN aux formats OBJ, PLY, GMS, DXF, DAE ou WRL.
  • SIG SAGA :Grille vers TINune fonction.
  • Lancez votre propre solution : la mettre en œuvre n'est pas particulièrement difficile. Voici un script Python qui utilise la bibliothèque GDAL pour lire un DTM raster, puis écrit un maillage PLY binaire.

    Enregistrez le script sousgdal_rastertotrn.py, puis appelez-le en utilisantpython gdal_rastertotrn.py .

    Voici un exemple. Conversion d'un DTM raster de Crater Lake appelélac_crater.tif

    … en appelantpython gdal_rastertotrn.py crater_lake.tif crater_lake.ply, et en ouvrant le résultatcrater_lake.plydans Meshlab :

    Voici le script (non poli). Comme il utilise la bibliothèque GDAL, il peut convertir tous les types de raster pris en charge par GDAL. Il écrit uniquement les fichiers PLY.

    #!/usr/bin/python import sys import numpy as np from osgeo import gdal def write_ply(nom de fichier, coordonnées, triangles, binaire=True): template = "ply
    " si binaire: template += "format binary_" + sys.byteorder + "_endian 1.0
    " else: template += "format ascii 1.0
    " template += """ élément vertex {nvertices:n} propriété float x propriété float y propriété float z élément face {nfaces:n } liste de propriétés int int vertex_index end_header """ context = { "nvertices": len(coordinates), "nfaces": len(triangles) } if binary: with open(filename,'wb') as outfile: outfile.write( template.format(**context)) coordonnées = np.array(coordinates, dtype="float32") coordinates.tofile(outfile) triangles = np.hstack((np.ones([len(triangles),1], dtype ="int") * 3, triangles)) triangles = np.array(triangles, dtype="int32") triangles.tofile(outfile) else : avec open(filename,'w') comme outfile : outfile.write(template .format(**context)) np.savetxt(outfile, coordonnées, fmt="%.3f") np.savetxt(outfile, triangles, fmt="3 %i % i %i") def readraster(filename): raster = gdal.Open(filename) return raster def createvertexarray(raster): transform = raster.GetGeoTransform() width = raster.RasterXSize height = raster.RasterYSize x = np.arange( 0, largeur) * transform[1] + transform[0] y = np.arange(0, hauteur) * transform[5] + transform[3] xx, yy = np.meshgrid(x, y) zz = raster. ReadAsArray() vertices = np.vstack((xx,yy,zz)).reshape([3, -1]).transpose() return verteices def createindexarray(raster): width = raster.RasterXSize height = raster.RasterYSize ai = np.arange(0, largeur - 1) aj = np.arange(0, hauteur - 1) aii, ajj = np.meshgrid(ai, aj) a = aii + ajj * largeur a = a.flatten() tria = np.vstack((a, a + largeur, a + largeur + 1, a, a + largeur + 1, a + 1)) tria = np.transpose(tria).reshape([-1, 3]) retour tria def main(argv): inputfile = argv[0] outputfile = argv[1] raster = readraster(inputfile) vertices = createvertexarray(raster) triangles = createindexarray(raster) write_ply(outputfile, sommets, triangles, binary=True) if __name__ == "__main__": main(sys.argv[1:])

Nous venons de créer un projet open source qui vous aidera à faire exactement ce que vous voulez. Tin-Terrain est un outil de ligne de commande simple qui générera un maillage à partir de fichiers DEM sous forme de TIN ou de TRN.

La sortie peut être enregistrée en tant que fichier .obj, et peut donc être directement glissée-déposée dans meshlab. Il prendra également en charge la mosaïque avec des niveaux de zoom au format de maillage quantifié.