Convertir un MNT au format DXF

Importer dans OSM, contrôler, suivre et surveiller (osmose, keepright, ...)
Répondre
Avatar de l’utilisateur
Vincent
Messages : 59
Inscription : sam. août 08, 2015 3:57 pm
Localisation : Massif de l'Esterel

Convertir un MNT au format DXF

Message par Vincent » lun. oct. 02, 2017 11:16 pm

Hello,

Le portail open data de Montpellier fournit un Modèle Numérique de Terrain (MNT): http://data.montpellier3m.fr/dataset/mo ... ontpellier.

Comme ils fournissent également un Modèle Numérique de Surface (MNS) ça veut dire que je devrais pouvoir importer la hauteur des immeubles dans OSM comme je l'ai fais récemment pour Nice.

Mon problème est que le MNT est au format DXF, quelqu'un saurait comment faire pour le rasteriser avec des logiciels libres ?

J'ai pas l'impression que ça soit possible avec GDAL/OGR mais ça l'est sûrement avec GRASS (que je n'ai jamais utilisé) ?

Merci, Vincent.
Dernière édition par Vincent le mar. oct. 03, 2017 5:47 pm, édité 1 fois.

ades222
Messages : 13
Inscription : dim. févr. 21, 2010 9:06 am

Re: Convertir un MNT en DXF

Message par ades222 » mar. oct. 03, 2017 12:57 pm

je ne comprend pas pourquoi rasteriser un DXF, c'est un format vectoriel l'altitude ou la hauteur est associé à chaque entité. Qgis et aussi JOSM ouvrent parfaitement ces fichiers (pour josm avec un doute…)

Avatar de l’utilisateur
cquest
Messages : 1678
Inscription : ven. avr. 16, 2010 12:22 am
Localisation : Val de Marne
Contact :

Re: Convertir un MNT en DXF

Message par cquest » mar. oct. 03, 2017 1:38 pm

gdal/ogr doit pouvoir faire ça.

DXF = format vectoriel (donc OGR) et pour passer en raster tu as http://www.gdal.org/gdal_rasterize.html

J'ai récupéré les fichiers et ouvert ça avec QGis. On a des triangles mais les données altimétriques ne sont pas sur les polygones, sûrement sur les sommets...

Le DXF est un format textuel... donc on peut regarde facilement ce qu'il contient, et ce qui nous intéresse ressemble à:

Code : Tout sélectionner

AcDbEntity
  8
MNT
100
AcDbFace
 10
770725.0939322207
 20
6280220.736884124
 30
27.59995394653646
 11
770729.450410836
 21
6280223.184902887
 31
27.76816119668576
 12
770726.5379999999
 22
6280222.528
 32
27.75
 13
770726.5379999999
 23
6280222.528
 33
27.75
  0
3DFACE
  5
1AFFC7
330
1F
100
ce qui doit correspondre à 3 sommets:
770725.0939322207 6280220.736884124 27.59995394653646
770729.450410836 6280223.184902887 27.76816119668576
770726.5379999999 6280222.528 27.75

Donc un petit script doit permettre de facilement extraire ces triplets pour en faire un fichier xyz texte plus classique pour les MNT/MNS.

Voilà un bon gros oneliner qui abuse de sed/grep pour sortir les triplets:

cat Centre_MNT_2016.dxf | sed '/^AcDbFace/ {N;N;N;N;N;N;N;N;N;N;N;N;N;N;N;N;N;N; s/\n/,/g; s/\r//g}' | grep AcDbFace | sed -e 's/^AcDbFace,//;s/ 11,/\n 11,/;s/ 12,/\n 12,/; s/ [123][0123],//g' | sed 's/,$//' | sort -u

Explication (en remettant sur plusieurs lignes):

# c'est le fichier qu'on va traiter en le pipant sur le reste de la ligne de commande...
cat Centre_MNT_2016.dxf

# on cherche les lignes en AcDbFace et on accole les 18 lignes suivantes en remplaçant les sauts de lignes par des virgules et en supprimant les LF
sed '/^AcDbFace/ {N;N;N;N;N;N;N;N;N;N;N;N;N;N;N;N;N;N; s/\n/,/g; s/\r//g}'

# on ne garde que les lignes qui nous intéressent (commençant par AcDbFace)
grep AcDbFace

# on retire le AcDbFace au début
# on passe à la ligne sur les 2ème et troisièmes triplets de coordonnées (commençant par 11 et 21)
# on supprimer les identifiants de coordonnées 'espace suivi de 10,20,30 11,21,31 et 12,22,32)
sed -e 's/^AcDbFace,//;s/ 11,/\n 11,/;s/ 12,/\n 12,/; s/ [123][0123],//g'

# suppression des virgules qui trainent en fin de ligne
sed 's/,$//'

# dédoublonnage des coordonnées, car chaque sommet est utilisé par jusqu'à 8 faces 3D et figure donc plusieurs fois dans le fichier)
sort -u

Au final on a un fichier typique XYZ (en coordonnées Lambert93) du genre:

769010.0297380375,6278953.452264243,61.9802949160305
769010.4875366573,6278954.188334656,62.00993982838703
769010.8164739584,6278954.717215706,60.30976662051114
769010.9133666955,6278855.888144229,58.51275216401035
769011.9462115972,6278952.541118461,61.88758273830088
769012.5020936694,6278858.41908948,58.58128684842702
769013.1153141774,6278849.08829744,58.17164730498068
769013.2011498256,6278953.347388237,60.2670920596947
769013.272996311,6278952.583756582,61.81472130967984
769013.4941271236,6278956.835082996,60.0386848494818

Je te met ça au propre ?

Avatar de l’utilisateur
Vincent
Messages : 59
Inscription : sam. août 08, 2015 3:57 pm
Localisation : Massif de l'Esterel

Re: Convertir un MNT en DXF

Message par Vincent » mar. oct. 03, 2017 3:15 pm

Je ne suis pas contre que tu mettes ça au propre mais un grand merci car tu m'as déjà donné beaucoup d'infos et je devrais pouvoir me débrouiller avec tes commandes Unix...

Après il n'est pas impossible que ça puisse se faire aussi avec gdal_rasterize puisque OGR est censé supporter le format DXF.

@ades222: effectivement on peut l'ouvrir avec QGIS mais je voyais pas trop comment l'exporter après (je ne maîtrise pas du tout le logiciel). En plus je crois qu'il avait du mal à trouver l'info de hauteur/altitude, peut-être parce qu'elle n'est visiblement pas associée aux triangles mais aux sommets comme l'a remarqué Christian...

En fait mon script d'import dans sa version actuelle a besoin d'avoir un MNT et un MNS qui sont soit dans fichier en format raster (et donc lisible facilement car mon script a un binding avec GDAL) soit en vectoriel mais directement dans PostGIS. Donc une fois le MNT transformé en fichier XYZ je pourrais facilement le charger dans PostGIS (voir le rasterizer en GeoTIFF pour le lire ensuite avec GDAL, dans les 2 cas l'accès sera très rapide).

Avatar de l’utilisateur
cquest
Messages : 1678
Inscription : ven. avr. 16, 2010 12:22 am
Localisation : Val de Marne
Contact :

Re: Convertir un MNT au format DXF

Message par cquest » mar. oct. 03, 2017 6:46 pm

Bon, j'ai recreusé avec gdal/ogr...

gdal_grid fait le job directement depuis le DXF et on obtient la même chose qu'en passant par mon bricolage.

gdal_grid MNT_2026/Centre_MNT_2016.dxf out.tiff -outsize 1024 1024

Par défaut le TIFF de sortie est de 256x256 pixels d'où l'ajout du outsize

Par contre, dans les deux cas, le MNT n'est pas franchement lissé et les sommets font de petits pics... défaut de gdal_grid ?

Avatar de l’utilisateur
Vincent
Messages : 59
Inscription : sam. août 08, 2015 3:57 pm
Localisation : Massif de l'Esterel

Re: Convertir un MNT au format DXF

Message par Vincent » mer. oct. 04, 2017 10:16 pm

Merci beaucoup Christian.

Effectivement c'est étrange tous ces pics régulièrement espacés qui forment un peu des grilles.. on peut dire que gdal_grid porte bien son nom ! :D

Avec ton bricolage j'ai pu charger le xyz dans PostGIS et effectivement on retrouve les mêmes problèmes qu'avec le TIFF sorti par gdal_grid. Du coup ça laisse plutôt penser que le problème vient des données en elles mêmes...

Avatar de l’utilisateur
cquest
Messages : 1678
Inscription : ven. avr. 16, 2010 12:22 am
Localisation : Val de Marne
Contact :

Re: Convertir un MNT au format DXF

Message par cquest » jeu. oct. 05, 2017 12:14 am

J'ai pas l'impression justement, mais gdal_grid a différents algorithmes d'interpolation.

Voilà qui donne un résultat plus cohérent:

gdal_grid Centre_MNT_2016.dxf Centre_MNT_2016.tiff -a_srs EPSG:2154 -outsize 1024 1024 -a nearest:nodata=-9999

Avatar de l’utilisateur
Vincent
Messages : 59
Inscription : sam. août 08, 2015 3:57 pm
Localisation : Massif de l'Esterel

Re: Convertir un MNT au format DXF

Message par Vincent » jeu. oct. 05, 2017 9:50 am

Cool, je regarderai ça ce soir :)

Avatar de l’utilisateur
Vincent
Messages : 59
Inscription : sam. août 08, 2015 3:57 pm
Localisation : Massif de l'Esterel

Re: Convertir un MNT au format DXF

Message par Vincent » ven. oct. 06, 2017 11:29 pm

Ah mais c'est 1000 fois mieux là ! :P
QGIS.png
QGIS.png (560.52 Kio) Consulté 880 fois
Je dirais même que ça sent l'import à plein nez...

Un grand merci Christian !

Avatar de l’utilisateur
Vincent
Messages : 59
Inscription : sam. août 08, 2015 3:57 pm
Localisation : Massif de l'Esterel

Re: Convertir un MNT au format DXF

Message par Vincent » lun. oct. 16, 2017 10:59 pm

Christian c'est très étrange car à y regarder de plus près gdal_grid ne fait du bon boulot que vers le centre de l'image. Sur la majeure partie de l'image c'est nickel mais en se rapprochant des bords ça commence à partir en vrille et on peut même le voir visuellement avec des formes géométriques pas du tout naturelles.. et surtout complètement fausses !!

C'est le cas avec l'ensemble des 7 fichiers MNT donc problème avec gdal_grid à priori... t'aurais une idée ?

Avatar de l’utilisateur
cquest
Messages : 1678
Inscription : ven. avr. 16, 2010 12:22 am
Localisation : Val de Marne
Contact :

Re: Convertir un MNT au format DXF

Message par cquest » lun. oct. 16, 2017 11:22 pm

Des interpolations qui ne se font pas ?

Pas vraiment d'idée, je ne connais pas ça assez...

Avatar de l’utilisateur
Vincent
Messages : 59
Inscription : sam. août 08, 2015 3:57 pm
Localisation : Massif de l'Esterel

Re: Convertir un MNT au format DXF

Message par Vincent » mar. oct. 17, 2017 12:01 am

Ok merci quand même pour ton aide, je vais essayer de les recontacter au cas ils seraient disposés à fournir un MNT directement rasterisé mais c'est pas gagné...

Avatar de l’utilisateur
Vincent
Messages : 59
Inscription : sam. août 08, 2015 3:57 pm
Localisation : Massif de l'Esterel

Re: Convertir un MNT au format DXF

Message par Vincent » jeu. oct. 19, 2017 10:13 am

Bon finalement je crois que j'ai réussi à m'en sortir: j'ai d'abord fusionné l'ensemble des fichiers DXF en un unique fichier SHP grâce à ogr2ogr avant de transformer le tout en DEM avec gdal_grid.

Le MNT global a une bien meilleure allure car seuls les bords qui sont à l'extérieur de la commune de Montpellier sont foireux. Tout ce qui est à l'intérieur de la commune semble nickel, je vais donc clipper ça avec les coordonnées de la commune pour avoir nodata pour tout ce qui est à l'extérieur...
Dernière édition par Vincent le ven. oct. 20, 2017 9:45 pm, édité 1 fois.

Avatar de l’utilisateur
Vincent
Messages : 59
Inscription : sam. août 08, 2015 3:57 pm
Localisation : Massif de l'Esterel

Re: Convertir un MNT au format DXF

Message par Vincent » ven. oct. 20, 2017 9:32 pm

En image ça sera plus parlant:
QGIS-02.png
QGIS-02.png (802.13 Kio) Consulté 449 fois
Une fois découpé avec les limites de la commune (ogr2ogr.exe -where nom="'Montpellier'" CommuneMontpellier.shp communes-20170112.shp)
QGIS-03.jpg
QGIS-03.jpg (436.54 Kio) Consulté 321 fois
Dernière édition par Vincent le sam. nov. 04, 2017 10:27 pm, édité 1 fois.

Avatar de l’utilisateur
cquest
Messages : 1678
Inscription : ven. avr. 16, 2010 12:22 am
Localisation : Val de Marne
Contact :

Re: Convertir un MNT au format DXF

Message par cquest » lun. oct. 23, 2017 5:47 pm

Tu partage tes scripts de transformation ?

Avatar de l’utilisateur
Vincent
Messages : 59
Inscription : sam. août 08, 2015 3:57 pm
Localisation : Massif de l'Esterel

Re: Convertir un MNT au format DXF

Message par Vincent » mar. oct. 24, 2017 10:22 am

En fait j'ai rien mis de spécial au niveau des options, j'ai juste fait un merge normal des fichiers DXF avec ogr2ogr:
ogr2ogr -skipfailures ALL-DTM.shp Centre_MNT_2016.dxf
ogr2ogr -update -append -skipfailures ALL-DTM.shp Cevennes_MNT_2016.dxf
ogr2ogr -update -append -skipfailures ALL-DTM.shp Croix_d_Argent_MNT_2016.dxf
...
Jusqu'à avoir donc un gros et unique fichier SHP.

J'ai ensuite transformé ce gros fichier SHP en un DEM avec gdal_grid, toujours avec nearest comme algorithme d'interpolation.

Et enfin j'ai découpé avec la limite de la commune de Montpellier (récupéré depuis le découpage des communes d'OSM):
gdalwarp -cutline CommuneMontpellier.shp ALL-DTM-full.tiff ALL-DTM.tiff

Répondre

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 2 invités