#1 Thu 24 February 2022 13:48
- nico-29
- Participant assidu
- Lieu: Brest
- Date d'inscription: 2 Jun 2006
- Messages: 185
[GDAL] Merge de 2 rasters
Bonjour,
J'essaye de merger 2 rasters avec GDAL. J'ai un premier raster (carte marine) sur lequel je superpose un chenal (cf. point 1 de l'image en pièce jointe). Sur le raster du chenal, toutes les valeurs en dehors du tracé du chenal sont définies avec une valeur nodata égale à -9999
1er cas :
Code:
gdal_merge.py -n -9999 -ot Float32 -of GTiff -co COMPRESS=DEFLATE -co PREDICTOR=2 -co ZLEVEL=9 raster_carte.tif raster_chenal.tif -o merge1.tif
ça fait une image noir et blanc ... (cf. point 2 de l'image en pièce jointe)
2ème cas : je met l'option -separate
Code:
gdal_merge.py -n -9999 -separate -ot Float32 -of GTiff -co COMPRESS=DEFLATE -co PREDICTOR=2 -co ZLEVEL=9 raster_carte.tif raster_chenal.tif -o merge1.tif
ça crée un raster à 2 bandes, mais ça modifie les couleurs du chenal, et au niveau des intersections entre les 2 rasters (cf. point 3 de l'image en pièce jointe).
Comment faire pour merger les 2 rasters et avoir un rendu comme au point 1 de l'image jointe ?
Merci,
Nico
Hors ligne
#2 Thu 24 February 2022 17:02
- tumasgiu
- Membre
- Lieu: Ajaccio
- Date d'inscription: 5 Jul 2010
- Messages: 1159
Re: [GDAL] Merge de 2 rasters
Salut,
est ce que gdal_merge est le bon outil pour ce que vous cherchez à faire ?
La documentation dit qu'il sert à créér des mosaïque d'images.
Est ce que gdal_calc ne serait pas plus adapté ? Ca donnerait un truc comme çà (pas testé) :
Code:
gdal_calc.py -A raster_carte.tif -B raster_chenal.tif \ --outfile=superposition.tif --calc="B*(B>9999)+A*(B=9999)"
https://gdal.org/programs/gdal_calc.html
Dernière modification par tumasgiu (Thu 24 February 2022 17:24)
Hors ligne
#3 Fri 25 February 2022 07:46
- nico-29
- Participant assidu
- Lieu: Brest
- Date d'inscription: 2 Jun 2006
- Messages: 185
Re: [GDAL] Merge de 2 rasters
Le problème avec gdal_calc, c'est que les 2 rasters doivent avoir la même taille.
Donc il faut d'abord retailler le raster chenal pour qu'il ait la même taille que le raster carte.
(cf. PJ)
Comment faire ça ?
EDIT : Apparement, la version 3.3 implémente une option --extent qui permet de remédier à cela :
https://gdal.org/programs/gdal_calc.htm … ion-extent
Je vais creuser un peu
Merci,
Nico
Dernière modification par nico-29 (Fri 25 February 2022 10:29)
Hors ligne
#4 Fri 25 February 2022 10:29
- tumasgiu
- Membre
- Lieu: Ajaccio
- Date d'inscription: 5 Jul 2010
- Messages: 1159
Re: [GDAL] Merge de 2 rasters
Je pense que c'est typiquement pour ce genre de choses qu'on peut utiliser gdal_merge.
A ce propos, j'avais lu en travers la documentation de gdal_merge, et votre premiere commande devrait fonctionner.
Pourquoi utilisez vous -ot Float32 ? Quel sont les types de vos deux rasters d'entrée ? Que donne la commande sans les option de création de raster
(-ot Float32 -of GTiff -co COMPRESS=DEFLATE -co PREDICTOR=2 -co ZLEVEL=9) ?
Hors ligne
#5 Fri 25 February 2022 11:11
- nico-29
- Participant assidu
- Lieu: Brest
- Date d'inscription: 2 Jun 2006
- Messages: 185
Re: [GDAL] Merge de 2 rasters
Les 2 raster de départ sont des GeoTiff.
Code:
> gdalinfo raster_carte.tif Driver: GTiff/GeoTIFF Files: raster_carte.tif Size is 13819, 9922 Coordinate System is: PROJCS["unnamed", GEOGCS["WGS 84", DATUM["WGS_1984", SPHEROID["WGS 84",6378137,298.257223563, AUTHORITY["EPSG","7030"]], AUTHORITY["EPSG","6326"]], PRIMEM["Greenwich",0], UNIT["degree",0.0174532925199433], AUTHORITY["EPSG","4326"]], PROJECTION["Mercator_1SP"], PARAMETER["central_meridian",0], PARAMETER["scale_factor",1], PARAMETER["false_easting",0], PARAMETER["false_northing",0], UNIT["metre",1, AUTHORITY["EPSG","9001"]], AUTHORITY["EPSG","3395"]] Origin = (-588366.981447381083854,6139031.895817051641643) Pixel Size = (6.253350730160000,-6.253350730160000) Metadata: AREA_OR_POINT=Area TIFFTAG_COPYRIGHT=XXXXX TIFFTAG_RESOLUTIONUNIT=2 (pixels/inch) TIFFTAG_XRESOLUTION=300 TIFFTAG_YRESOLUTION=300 Image Structure Metadata: COMPRESSION=PACKBITS INTERLEAVE=BAND Corner Coordinates: Upper Left ( -588366.981, 6139031.896) ( 5d17' 7.41"W, 48d23' 2.72"N) Lower Left ( -588366.981, 6076986.150) ( 5d17' 7.41"W, 48d 0'41.26"N) Upper Right ( -501951.928, 6139031.896) ( 4d30'32.80"W, 48d23' 2.72"N) Lower Right ( -501951.928, 6076986.150) ( 4d30'32.80"W, 48d 0'41.26"N) Center ( -545159.455, 6108009.023) ( 4d53'50.10"W, 48d11'53.22"N) Band 1 Block=13819x128 Type=Byte, ColorInterp=Palette Color Table (RGB with 256 entries) 0: 255,255,255,255 1: 242,248,253,255 ... 255: 255,0,0,255
Code:
> gdalinfo raster_chenal.tif Driver: GTiff/GeoTIFF Files: raster_chenal.tif Size is 28365, 20382 Coordinate System is: LOCAL_CS["WGS 84 / World Mercator", GEOGCS["WGS 84", DATUM["unknown", SPHEROID["unretrievable - using WGS84",6378137,298.257223563]], PRIMEM["Greenwich",0], UNIT["degree",0.0174532925199433]], AUTHORITY["EPSG","3395"], UNIT["metre",1, AUTHORITY["EPSG","9001"]]] Origin = (-590731.593769815750420,6138305.447809762321413) Pixel Size = (3.126674354844256,-3.126674354844256) Metadata: AREA_OR_POINT=Area TIFFTAG_DATETIME=2022:02:23 11:25:58 TIFFTAG_RESOLUTIONUNIT=2 (pixels/inch) TIFFTAG_SOFTWARE=CARIS++, v4.2.0 TIFFTAG_XRESOLUTION=600 TIFFTAG_YRESOLUTION=600 Image Structure Metadata: COMPRESSION=DEFLATE INTERLEAVE=BAND Corner Coordinates: Upper Left ( -590731.594, 6138305.448) Lower Left ( -590731.594, 6074577.571) Upper Right ( -502043.476, 6138305.448) Lower Right ( -502043.476, 6074577.571) Center ( -546387.535, 6106441.509) Band 1 Block=28365x1 Type=Float32, ColorInterp=Red NoData Value=-9999
Les options -co COMPRESS=DEFLATE -co PREDICTOR=2 -co ZLEVEL=9 permettent de compresser le fichier de sortie (11 Mo avec les options, 143 Mo sans les options), mais le fichier est pareil dans les 2 cas (image noir et blanc, cf. point 2 de l'image jointe au message de départ)
Nico
Dernière modification par nico-29 (Fri 25 February 2022 11:18)
Hors ligne
#6 Fri 25 February 2022 14:59
- tumasgiu
- Membre
- Lieu: Ajaccio
- Date d'inscription: 5 Jul 2010
- Messages: 1159
Re: [GDAL] Merge de 2 rasters
Vos 2 raster ont des types de bande différents (color table pour la carte et flottant pour le chenal),
je pense que le souçi vient de là.
Il faudrait harmoniser les bandes de vos 2 rasters. Utiliser des couleurs indéxées (color table) implique d'utiliser la même color table dans vos 2 rasters.
Un autre ecueil est la présence de pixel nodata dans votre raster chenal. Il faudrait peut-être passer par un nodata mask plutot que d'utiliser une valeur de bande comme nodata.
Hors ligne