{"id":140,"date":"2018-08-02T16:29:05","date_gmt":"2018-08-02T14:29:05","guid":{"rendered":"http:\/\/sigeodev.cerege.fr\/?p=140"},"modified":"2020-02-07T16:47:38","modified_gmt":"2020-02-07T15:47:38","slug":"conversion-ascii-xyz-en-mnt","status":"publish","type":"post","link":"https:\/\/sigeo.cerege.fr\/?p=140","title":{"rendered":"Conversion ASCII XYZ en MNT"},"content":{"rendered":"<p>On suppose dans cette proc\u00e9dure que nos donn\u00e9es constituent un maillage r\u00e9gulier et qu\u2019il n\u2019est pas n\u00e9cessaire de faire d\u2019interpolation. Le fichier ASCII XYZ est compos\u00e9 de trois colonnes X, Y et Z, ex.<\/p>\n<table class=\"spip\">\n<tbody>\n<tr class=\"row_even\">\n<td class=\"numeric \">880000<\/td>\n<td class=\"numeric \">6340000<\/td>\n<td class=\"numeric \">828<\/td>\n<\/tr>\n<tr class=\"row_odd\">\n<td class=\"numeric \">880025<\/td>\n<td class=\"numeric \">6340000<\/td>\n<td class=\"numeric \">831<\/td>\n<\/tr>\n<tr class=\"row_even\">\n<td class=\"numeric \">880050<\/td>\n<td class=\"numeric \">6340000<\/td>\n<td class=\"numeric \">833<\/td>\n<\/tr>\n<tr class=\"row_odd\">\n<td class=\"numeric \">880075<\/td>\n<td class=\"numeric \">6340000<\/td>\n<td class=\"numeric \">835<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3 class=\"spip\">Proc\u00e9dure avec ArcGIS<\/h3>\n<p>1-Changer l\u2019extension du fichier en .txt ou .csv<\/p>\n<p>2- Modifier le fichier schema.ini<\/p>\n<p>Plus d\u2019infos sur ce fichier schema.ini \u00e0\u00a0<a class=\"spip_url spip_out\" href=\"http:\/\/www.tectonics.caltech.edu\/gis\/reference\/tables.html\" rel=\"nofollow external\">http:\/\/www.tectonics.caltech.edu\/gi&#8230;<\/a><\/p>\n<p>Ex. de fichier schema.ini correspondant au fichier input.csv ci-dessus\u00a0: [input.csv]<\/p>\n<div class=\"spip_code\" dir=\"ltr\"><code>ColNameHeader=False<br \/>\nFormat=Delimited( )<br \/>\nCol1=X Double<br \/>\nCol2=Y Double<br \/>\nCol3=Z Double<\/code><\/div>\n<ul class=\"spip\">\n<li>si le fichier contient une ligne d\u2019ent\u00eate, on aura ColNameHeader=True<\/li>\n<li>si le s\u00e9parateur est la virgule on aura Format=CSVDelimited<\/li>\n<li>si le s\u00e9parateur est la tabulation on aura Format=TabDelimited<\/li>\n<li>si le s\u00e9parateur est l\u2019espace on aura Format=Delimited( )<\/li>\n<li>si le s\u00e9parateur est | on aura Format=Delimited(|)<\/li>\n<li>\u2026 etc avec d\u2019autres s\u00e9parateurs<\/li>\n<\/ul>\n<p>Si le fichier n\u2019est pas bien reconnu par ArcCatalog, il est possible que ce soit un probl\u00e8me de codage des caract\u00e8res. On pourra le modifier en ajoutant la ligne suivante dans schema.ini\u00a0:<\/p>\n<p><code class=\"spip_code\" dir=\"ltr\">CharacterSet=UNICODE<\/code><\/p>\n<p>Changer UNICODE par le codage correct (ANSI, autre \u2026)<\/p>\n<p>3- V\u00e9rifier la reconnaissance du fichier par ArcCatalog<\/p>\n<ul class=\"spip\">\n<li>V\u00e9rifier dans ArcCatalog que votre fichier est bien reconnu. Pour cela votre fichier doit s\u2019afficher dans l\u2019onglet Aper\u00e7u.<\/li>\n<li>V\u00e9rifier aussi que le type des champs est correct. Pour cela faire un clic droit sur le fichier et v\u00e9rifier l\u2019onglet Champs<\/li>\n<\/ul>\n<p>4- Cr\u00e9er le shapefile de points<\/p>\n<ul class=\"spip\">\n<li>Pour cr\u00e9er les points, utiliser la fonction d\u2019Arctoolbox \u00ab\u00a0Outils 3D Analyst Depuis un fichier &#8211; ASCII 3D vers classe d\u2019entit\u00e9s\u00a0\u00bb<\/li>\n<\/ul>\n<p>5-Convertir le shapefile de points en raster<\/p>\n<ul class=\"spip\">\n<li>Utiliser la fonction d\u2019ArcToolbox \u00ab\u00a0Outils de conversion \u2013 Vers raster &#8211; Entit\u00e9 vers raster\u00a0\u00bb<\/li>\n<li>Prendre le champ Shape.Z ou le champ Z comme valeur de raster<\/li>\n<li>D\u00e9finir la taille de cellule selon l\u2019espacement des points en entr\u00e9e.<\/li>\n<\/ul>\n<h3 class=\"spip\">Proc\u00e9dure avec Linux et GDAL<\/h3>\n<p>ex. conversion d\u2019un fichier XYZ ASCII en TIF et assignation de la r\u00e9f\u00e9rence spatiale RGF93-Lambert93 (Code EPSG 2154)<\/p>\n<p><code class=\"spip_code\" dir=\"ltr\">gdal_translate -a_srs EPSG:2154 input.XYZ output.tif<\/code><\/p>\n<p>en batch on pourra faire un script du type\u00a0:<\/p>\n<div class=\"spip_code\" dir=\"ltr\"><code><code>#!\/bin\/bash<br \/>\n#Ce script assigne le code EPSG saisi en param\u00e8tre aux images en sortie<br \/>\n# Jules Fleury, SIGeo\/CEREGE, mars 2011<\/code><\/code><\/p>\n<p># saisir le code epsg en parametre<\/p>\n<p># Assign_SRS_to_TIF.sh<\/p>\n<p>echo &#8220;Input spatial reference EPSG (exemple: for WGS84 enter 4326) : &#8221;<br \/>\nread c_EPSG<\/p>\n<p><code><br \/>\n<\/code><code>for FILE in *.XYZ # modifier ici en cas d'autre format<br \/>\ndo<br \/>\nBASE=`basename $FILE .XYZ` # modifier ici en cas d'autre format<br \/>\nNEWFILE=${BASE}_c.tif<br \/>\ngdal_translate -a_srs EPSG:$c_EPSG $FILE $NEWFILE<br \/>\ndone<\/code><\/p>\n<h3 class=\"spip\">Avec Linux et GDAL : cas ou les donn\u00e9es en entr\u00e9e ne sont pas bien tri\u00e9es en X ou Y<\/h3>\n<p>solution prise ici : <a href=\"http:\/\/osgeo-org.1560.x6.nabble.com\/gdal-dev-Opening-gridded-xyz-data-that-is-out-of-order-td5334341.html\">http:\/\/osgeo-org.1560.x6.nabble.com\/gdal-dev-Opening-gridded-xyz-data-that-is-out-of-order-td5334341.html<\/a><\/p>\n<p>if we obtain this kink of error:<\/p>\n<p>&gt; ERROR 1: Ungridded dataset: At line 4125001, change of Y direction<\/p>\n<p>&gt; gdalinfo failed &#8211; unable to open &#8216;DTM_swissALTI3D_XYZ.txt&#8217;.<\/p>\n<p>You must sort the data beforehand<\/p>\n<div>&#8211; the y position must be sorted properly (ASC or DESC)<\/div>\n<div><\/div>\n<div>Standard linux sort program:<\/div>\n<div><\/div>\n<div><code>sort -k2 -n -k1 input.xyz -o output_sort.xyz<\/code><\/div>\n<div>(2nd column (y) as numeric, then first column (x) -o = output file<\/div>\n<\/div>\n<div><\/div>\n<div>puis on relance gdal_translate<\/div>\n<div><code>gdal_translate input.xyz output.tif -a_nodata -9999<\/code><\/div>\n<div>Remplacer par la bonne valeur pour nodata<\/div>\n<div><\/div>\n<div>Si cette m\u00e9thode ne fonctionne pas, on fera une interpolation comme ci-dessous<\/div>\n<h3 class=\"spip\">Avec Linux et GDAL\u00a0: cas ou les donn\u00e9es ne couvrent pas une dalle enti\u00e8re<\/h3>\n<p>On utilise la fonction d\u2019interpolation de GDAL\u00a0<a class=\"spip_out\" href=\"http:\/\/www.gdal.org\/gdal_grid.html\" rel=\"external\">gdal_grid<\/a>\u00a0pour ne prendre pour chaque pixel qu\u2019un seul point en entr\u00e9e. La m\u00e9thode consiste \u00e0 premi\u00e8rement cr\u00e9er un CSV, puis un VRT et utiliser ce fichier comme source de gdal_grid.<\/p>\n<p>ex.\u00a0<code class=\"spip_code\" dir=\"ltr\">gdal_grid -a nearest:radius1=1:radius2=1:nodata=-9999.0 -ot Float32 -a_srs EPSG:2154 -txe 1074000 1079000 -tye 6325000 6330000 -outsize 1000 1000 -l grid grid.vrt grid_out.tif<\/code><\/p>\n<p><strong>traitement en batch<\/strong><\/p>\n<p><strong>1\u00e8re \u00e9tape<\/strong>\u00a0: conversion des XYZ en CSV avec cr\u00e9ation de VRT associ\u00e9<\/p>\n<p>ex. de script<\/p>\n<div class=\"spip_code\" dir=\"ltr\"><code><code>#!\/bin\/bash<\/code><\/code><\/p>\n<p><code><code><\/code><\/code>#Lecture de la r\u00e9f\u00e9rence spatiale<br \/>\necho &#8220;Input spatial reference EPSG (exemple: for WGS84 enter 4326, for Lambert93 2154, for L2E 27572) : &#8221;<br \/>\nread c_EPSG<\/p>\n<p><code><code><\/code><\/code>#traitement des fichier en batch<br \/>\nfor IFile in *.xyz # modifier ici en cas d&#8217;autre format<br \/>\ndo<br \/>\nBASE=`basename $IFile .xyz`<br \/>\nOFile=${BASE}.csv<\/p>\n<p><code><code><\/code><\/code>#ajout d&#8217;une ligne d&#8217;ent\u00eate &#8220;X Y Z&#8221;<br \/>\nsed &#8216;1i\\X Y Z&#8217; $IFile &gt; $OFile<\/p>\n<p><code><code><\/code><\/code>#remplacement du caract\u00e8re espace par une tabulation<br \/>\nTFile=&#8221;Temp&#8221;<br \/>\ntr &#8216; &#8216; &#8216;\\t&#8217; &lt; $OFile &gt; $TFile<br \/>\nmv $TFile $OFile<\/p>\n<p><code><br \/>\n<\/code><code>#cr\u00e9ation du fichier VRT<br \/>\nOFileVRT=${BASE}.vrt<br \/>\necho \"&lt;OGRVRTDataSource&gt;\" &gt; $OFileVRT<br \/>\necho \" \u00a0 \u00a0&lt;OGRVRTLayer name=\\\"$BASE\\\"&gt;\" &gt;&gt; $OFileVRT<br \/>\necho \" \u00a0 \u00a0 \u00a0 \u00a0&lt;SrcDataSource&gt;$OFile&lt;\/SrcDataSource&gt;\" &gt;&gt; $OFileVRT<br \/>\necho \" \u00a0 \u00a0 \u00a0 \u00a0&lt;GeometryType&gt;wkbPoint&lt;\/GeometryType&gt;\" &gt;&gt; $OFileVRT<br \/>\necho \" \u00a0 \u00a0 \u00a0 \u00a0&lt;LayerSRS&gt;EPSG:$c_EPSG&lt;\/LayerSRS&gt;\" &gt;&gt; $OFileVRT<br \/>\necho \" \u00a0 \u00a0 \u00a0 \u00a0&lt;GeometryField encoding=\\\"PointFromColumns\\\" x=\\\"X\\\" y=\\\"Y\\\" z=\\\"Z\\\"\/&gt;\" &gt;&gt; $OFileVRT<br \/>\necho \" \u00a0 \u00a0&lt;\/OGRVRTLayer&gt;\" &gt;&gt; $OFileVRT<br \/>\necho \"&lt;\/OGRVRTDataSource&gt;\" &gt;&gt; $OFileVRT<br \/>\ndone<\/code><\/p>\n<\/div>\n<p><strong>2\u00e8me \u00e9tape<\/strong>\u00a0: conversion des VRT (avec leur CSV) en TIF<\/p>\n<p>on utilise gdal_grid,ex. de script<\/p>\n<div class=\"spip_code\" dir=\"ltr\"><code><code>#!\/bin\/bash<\/code><\/code><\/p>\n<p><code><code><\/code><\/code>#Programme pour interpoler des fichiers de points XYZ stock\u00e9s en CSV\/VRT<br \/>\n#selon diff\u00e9rents algorithmes et param\u00e8tres.<br \/>\n#le fichier grid en sortie est stock\u00e9 en TIF<br \/>\n#puis r\u00e9\u00e9chantillon\u00e9 selon la r\u00e9solution voulue.<\/p>\n<p><code><code><\/code><\/code>#Jules Fleury &#8211; SIG\u00e9o\/CEREGE<br \/>\n#avril 2013<\/p>\n<p><code><code><\/code><\/code>#Lecture de la r\u00e9f\u00e9rence spatiale<br \/>\necho &#8220;Input spatial reference EPSG (exemple: for WGS84 enter 4326, for Lambert93 2154, for L2E 27572) :&#8221;<br \/>\nread c_EPSG<\/p>\n<p><code><code><\/code><\/code>#Traitement des fichiers en batch<br \/>\nfor IFile in *.vrt # modifier ici en cas d&#8217;autre format<br \/>\ndo<br \/>\necho &#8220;Processing $IFile&#8221;<br \/>\nBASE=`basename $IFile .vrt`<br \/>\nOFile=${BASE}.tif<br \/>\nval_nodata=-9999 #valeur pour nodata<\/p>\n<p><code><code><\/code><\/code>#Traitement du fichier en utilisant l&#8217;algorithme Nearest<br \/>\ngdal_grid -a nearest:radius1=0.5:radius2=0.5:nodata=$val_nodata -ot Float32 -a_srs EPSG:$c_EPSG \u00a0-l $BASE $IFile $OFile<\/p>\n<p><code><br \/>\n<\/code><code>#r\u00e9-\u00e9chantillonage du fichier en sortie<br \/>\nressize=10 #valeur de r\u00e9-\u00e9chantillonage<br \/>\nOFileRes=${BASE}_$ressize.tif #fichier r\u00e9-\u00e9chantillon\u00e9 en sortie<br \/>\ngdalwarp -tr $ressize $ressize -r cubic $OFile $OFileRes<br \/>\necho \"Done\"<br \/>\ndone<\/code><\/p>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>On suppose dans cette proc\u00e9dure que nos donn\u00e9es constituent un maillage r\u00e9gulier et qu\u2019il n\u2019est pas n\u00e9cessaire de faire d\u2019interpolation. Le fichier ASCII XYZ est compos\u00e9 de trois colonnes X, Y et Z, ex. 880000 6340000 828 880025 6340000 831 880050 6340000 833 880075 6340000 835 Proc\u00e9dure avec ArcGIS 1-Changer l\u2019extension du fichier en .txt &hellip; <a href=\"https:\/\/sigeo.cerege.fr\/?p=140\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &#8220;Conversion ASCII XYZ en MNT&#8221;<\/span><\/a><\/p>\n","protected":false},"author":3,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[17,12,7,10],"tags":[],"class_list":["post-140","post","type-post","status-publish","format-standard","hentry","category-arcgis","category-gdal-ogr","category-geo-traitements","category-sig"],"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/sigeo.cerege.fr\/index.php?rest_route=\/wp\/v2\/posts\/140","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/sigeo.cerege.fr\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/sigeo.cerege.fr\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/sigeo.cerege.fr\/index.php?rest_route=\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/sigeo.cerege.fr\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=140"}],"version-history":[{"count":5,"href":"https:\/\/sigeo.cerege.fr\/index.php?rest_route=\/wp\/v2\/posts\/140\/revisions"}],"predecessor-version":[{"id":333,"href":"https:\/\/sigeo.cerege.fr\/index.php?rest_route=\/wp\/v2\/posts\/140\/revisions\/333"}],"wp:attachment":[{"href":"https:\/\/sigeo.cerege.fr\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=140"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/sigeo.cerege.fr\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=140"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sigeo.cerege.fr\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=140"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}