<div dir="ltr"><br><span style="font-size:12.8px">Hi,</span><div style="font-size:12.8px">i'm trying to perfom a pansharpening process using the gdal_pansharpen tool.</div><div style="font-size:12.8px">I used the following code:</div><div style="font-size:12.8px"><br></div><div style="font-size:12.8px"><pre style="white-space:pre-wrap;color:rgb(0,0,0);font-family:'Courier New'"><span style="color:rgb(128,128,128);font-style:italic">#!/usr/bin/env python<br></span><span style="color:rgb(128,128,128);font-style:italic"># -*- coding: utf-8 -*-<br></span><span style="color:rgb(128,128,128);font-style:italic"><br></span><span style="color:rgb(128,128,128);font-style:italic"><br></span><span style="color:rgb(0,0,128);font-weight:bold">import </span>sys, os<br><span style="color:rgb(0,0,128);font-weight:bold">from </span>osgeo <span style="color:rgb(0,0,128);font-weight:bold">import </span>gdal<br><br><span style="color:rgb(0,0,128);font-weight:bold">def </span>Usage():<br>    <span style="color:rgb(0,0,128)">print</span>(<span style="color:rgb(0,128,128);font-weight:bold">'Usage: gdal_pansharpen [--help-general] pan_dataset {spectral_dataset[,band=num]}+ out_dataset'</span>)<br>    <span style="color:rgb(0,0,128)">print</span>(<span style="color:rgb(0,128,128);font-weight:bold">'                       [-of format] [-b band]* [-w weight]*'</span>)<br>    <span style="color:rgb(0,0,128)">print</span>(<span style="color:rgb(0,128,128);font-weight:bold">'                       [-r {nearest,bilinear,cubic,cubicspline,lanczos,average}]'</span>)<br>    <span style="color:rgb(0,0,128)">print</span>(<span style="color:rgb(0,128,128);font-weight:bold">'                       [-threads {ALL_CPUS|number}] [-bitdepth val] [-nodata val]'</span>)<br>    <span style="color:rgb(0,0,128)">print</span>(<span style="color:rgb(0,128,128);font-weight:bold">'                       [-spat_adjust {union,intersection,none,nonewithoutwarning}]'</span>)<br>    <span style="color:rgb(0,0,128)">print</span>(<span style="color:rgb(0,128,128);font-weight:bold">'                       [-verbose_vrt] [-co NAME=VALUE]* [-q]'</span>)<br>    <span style="color:rgb(0,0,128)">print</span>(<span style="color:rgb(0,128,128);font-weight:bold">''</span>)<br>    <span style="color:rgb(0,0,128)">print</span>(<span style="color:rgb(0,128,128);font-weight:bold">'Create a dataset resulting from a pansharpening operation.'</span>)<br>    <span style="color:rgb(0,0,128);font-weight:bold">return </span>-<span style="color:rgb(0,0,255)">1<br></span><span style="color:rgb(0,0,255)"><br></span><span style="color:rgb(0,0,255)"><br></span><span style="color:rgb(0,0,128);font-weight:bold">def </span>gdal_pansharpen(argv):<br><br>    argv = gdal.GeneralCmdLineProcessor( argv )<br>    <span style="color:rgb(0,0,128);font-weight:bold">if </span>argv <span style="color:rgb(0,0,128);font-weight:bold">is None</span>:<br>        <span style="color:rgb(0,0,128);font-weight:bold">return </span>-<span style="color:rgb(0,0,255)">1<br></span><span style="color:rgb(0,0,255)"><br></span><span style="color:rgb(0,0,255)">    </span>pan_name = <span style="color:rgb(0,0,128);font-weight:bold">None<br></span><span style="color:rgb(0,0,128);font-weight:bold">    </span>last_name = <span style="color:rgb(0,0,128);font-weight:bold">None<br></span><span style="color:rgb(0,0,128);font-weight:bold">    </span>spectral_ds = []<br>    spectral_bands = []<br>    <span style="color:rgb(128,128,128)">out_name </span>= <span style="color:rgb(0,0,128);font-weight:bold">None<br></span><span style="color:rgb(0,0,128);font-weight:bold">    </span>bands = []<br>    weights = []<br>    format = <span style="color:rgb(0,128,128);font-weight:bold">'VRT'<br></span><span style="color:rgb(0,128,128);font-weight:bold">    </span>creation_options = []<br>    callback = gdal.TermProgress<br>    resampling = <span style="color:rgb(0,0,128);font-weight:bold">None<br></span><span style="color:rgb(0,0,128);font-weight:bold">    </span>spat_adjust = <span style="color:rgb(0,0,128);font-weight:bold">None<br></span><span style="color:rgb(0,0,128);font-weight:bold">    </span>verbose_vrt = <span style="color:rgb(0,0,128);font-weight:bold">False<br></span><span style="color:rgb(0,0,128);font-weight:bold">    </span>num_threads = <span style="color:rgb(0,0,128);font-weight:bold">None<br></span><span style="color:rgb(0,0,128);font-weight:bold">    </span>bitdepth = <span style="color:rgb(0,0,128);font-weight:bold">None<br></span><span style="color:rgb(0,0,128);font-weight:bold">    </span>nodata = <span style="color:rgb(0,0,128);font-weight:bold">None<br></span><span style="color:rgb(0,0,128);font-weight:bold"><br></span><span style="color:rgb(0,0,128);font-weight:bold">    </span>i = <span style="color:rgb(0,0,255)">1<br></span><span style="color:rgb(0,0,255)">    </span>argc = <span style="color:rgb(0,0,128)">len</span>(argv)<br>    <span style="color:rgb(0,0,128);font-weight:bold">while </span>i < argc:<br>        <span style="color:rgb(0,0,128);font-weight:bold">if </span>argv[i] == <span style="color:rgb(0,128,128);font-weight:bold">'-of' </span><span style="color:rgb(0,0,128);font-weight:bold">and </span>i < <span style="color:rgb(0,0,128)">len</span>(argv)-<span style="color:rgb(0,0,255)">1</span>:<br>            format = argv[i+<span style="color:rgb(0,0,255)">1</span>]<br>            <span style="color:rgb(0,0,128)">print</span>(<span style="color:rgb(0,128,128);font-weight:bold">"format " </span>+ format)<br>            i = i + <span style="color:rgb(0,0,255)">1<br></span><span style="color:rgb(0,0,255)">        </span><span style="color:rgb(0,0,128);font-weight:bold">elif </span>argv[i] == <span style="color:rgb(0,128,128);font-weight:bold">'-r' </span><span style="color:rgb(0,0,128);font-weight:bold">and </span>i < <span style="color:rgb(0,0,128)">len</span>(argv)-<span style="color:rgb(0,0,255)">1</span>:<br>            resampling = argv[i+<span style="color:rgb(0,0,255)">1</span>]<br>            <span style="color:rgb(0,0,128)">print</span>(<span style="color:rgb(0,128,128);font-weight:bold">"resampling " </span>+ resampling)<br>            i = i + <span style="color:rgb(0,0,255)">1<br></span><span style="color:rgb(0,0,255)">        </span><span style="color:rgb(0,0,128);font-weight:bold">elif </span>argv[i] == <span style="color:rgb(0,128,128);font-weight:bold">'-spat_adjust' </span><span style="color:rgb(0,0,128);font-weight:bold">and </span>i < <span style="color:rgb(0,0,128)">len</span>(argv)-<span style="color:rgb(0,0,255)">1</span>:<br>            spat_adjust = argv[i+<span style="color:rgb(0,0,255)">1</span>]<br>            i = i + <span style="color:rgb(0,0,255)">1<br></span><span style="color:rgb(0,0,255)">        </span><span style="color:rgb(0,0,128);font-weight:bold">elif </span>argv[i] == <span style="color:rgb(0,128,128);font-weight:bold">'-b' </span><span style="color:rgb(0,0,128);font-weight:bold">and </span>i < <span style="color:rgb(0,0,128)">len</span>(argv)-<span style="color:rgb(0,0,255)">1</span>:<br>            bands.append(<span style="color:rgb(0,0,128)">int</span>(argv[i+<span style="color:rgb(0,0,255)">1</span>]))<br>            i = i + <span style="color:rgb(0,0,255)">1<br></span><span style="color:rgb(0,0,255)">        </span><span style="color:rgb(0,0,128);font-weight:bold">elif </span>argv[i] == <span style="color:rgb(0,128,128);font-weight:bold">'-w' </span><span style="color:rgb(0,0,128);font-weight:bold">and </span>i < <span style="color:rgb(0,0,128)">len</span>(argv)-<span style="color:rgb(0,0,255)">1</span>:<br>            weights.append(<span style="color:rgb(0,0,128)">float</span>(argv[i+<span style="color:rgb(0,0,255)">1</span>]))<br>            i = i + <span style="color:rgb(0,0,255)">1<br></span><span style="color:rgb(0,0,255)">        </span><span style="color:rgb(0,0,128);font-weight:bold">elif </span>argv[i] == <span style="color:rgb(0,128,128);font-weight:bold">'-co' </span><span style="color:rgb(0,0,128);font-weight:bold">and </span>i < <span style="color:rgb(0,0,128)">len</span>(argv)-<span style="color:rgb(0,0,255)">1</span>:<br>            creation_options.append(argv[i+<span style="color:rgb(0,0,255)">1</span>])<br>            i = i + <span style="color:rgb(0,0,255)">1<br></span><span style="color:rgb(0,0,255)">        </span><span style="color:rgb(0,0,128);font-weight:bold">elif </span>argv[i] == <span style="color:rgb(0,128,128);font-weight:bold">'-threads' </span><span style="color:rgb(0,0,128);font-weight:bold">and </span>i < <span style="color:rgb(0,0,128)">len</span>(argv)-<span style="color:rgb(0,0,255)">1</span>:<br>            num_threads = argv[i+<span style="color:rgb(0,0,255)">1</span>]<br>            i = i + <span style="color:rgb(0,0,255)">1<br></span><span style="color:rgb(0,0,255)">        </span><span style="color:rgb(0,0,128);font-weight:bold">elif </span>argv[i] == <span style="color:rgb(0,128,128);font-weight:bold">'-bitdepth' </span><span style="color:rgb(0,0,128);font-weight:bold">and </span>i < <span style="color:rgb(0,0,128)">len</span>(argv)-<span style="color:rgb(0,0,255)">1</span>:<br>            bitdepth = argv[i+<span style="color:rgb(0,0,255)">1</span>]<br>            i = i + <span style="color:rgb(0,0,255)">1<br></span><span style="color:rgb(0,0,255)">        </span><span style="color:rgb(0,0,128);font-weight:bold">elif </span>argv[i] == <span style="color:rgb(0,128,128);font-weight:bold">'-nodata' </span><span style="color:rgb(0,0,128);font-weight:bold">and </span>i < <span style="color:rgb(0,0,128)">len</span>(argv)-<span style="color:rgb(0,0,255)">1</span>:<br>            nodata = argv[i+<span style="color:rgb(0,0,255)">1</span>]<br>            i = i + <span style="color:rgb(0,0,255)">1<br></span><span style="color:rgb(0,0,255)">        </span><span style="color:rgb(0,0,128);font-weight:bold">elif </span>argv[i] == <span style="color:rgb(0,128,128);font-weight:bold">'-q'</span>:<br>            callback = <span style="color:rgb(0,0,128);font-weight:bold">None<br></span><span style="color:rgb(0,0,128);font-weight:bold">        elif </span>argv[i] == <span style="color:rgb(0,128,128);font-weight:bold">'-verbose_vrt'</span>:<br>            verbose_vrt = <span style="color:rgb(0,0,128);font-weight:bold">True<br></span><span style="color:rgb(0,0,128);font-weight:bold">        elif </span>argv[i][<span style="color:rgb(0,0,255)">0</span>] == <span style="color:rgb(0,128,128);font-weight:bold">'-'</span>:<br>            sys.stderr.write(<span style="color:rgb(0,128,128);font-weight:bold">'Unrecognized option : %s</span><span style="color:rgb(0,0,128);font-weight:bold">\n</span><span style="color:rgb(0,128,128);font-weight:bold">' </span>% argv[i])<br>            <span style="color:rgb(0,0,128);font-weight:bold">return </span>Usage()<br>        <span style="color:rgb(0,0,128);font-weight:bold">elif </span>pan_name <span style="color:rgb(0,0,128);font-weight:bold">is None</span>:<br>            pan_name = argv[i]<br>            pan_ds = gdal.Open(pan_name)<br>            <span style="color:rgb(0,0,128);font-weight:bold">if </span>pan_ds <span style="color:rgb(0,0,128);font-weight:bold">is None</span>:<br>                <span style="color:rgb(0,0,128);font-weight:bold">return </span><span style="color:rgb(0,0,255)">1<br></span><span style="color:rgb(0,0,255)">        </span><span style="color:rgb(0,0,128);font-weight:bold">else</span>:<br>            <span style="color:rgb(0,0,128);font-weight:bold">if </span>last_name <span style="color:rgb(0,0,128);font-weight:bold">is not None</span>:<br>                pos = last_name.find(<span style="color:rgb(0,128,128);font-weight:bold">',band='</span>)<br>                <span style="color:rgb(0,0,128);font-weight:bold">if </span>pos > <span style="color:rgb(0,0,255)">0</span>:<br>                    spectral_name = last_name[<span style="color:rgb(0,0,255)">0</span>:pos]<br>                    ds = gdal.Open(spectral_name)<br>                    <span style="color:rgb(0,0,128);font-weight:bold">if </span>ds <span style="color:rgb(0,0,128);font-weight:bold">is None</span>:<br>                        <span style="color:rgb(0,0,128);font-weight:bold">return </span><span style="color:rgb(0,0,255)">1<br></span><span style="color:rgb(0,0,255)">                    </span>band_num = <span style="color:rgb(0,0,128)">int</span>(last_name[pos+<span style="color:rgb(0,0,128)">len</span>(<span style="color:rgb(0,128,128);font-weight:bold">',band='</span>):])<br>                    band = ds.GetRasterBand(band_num)<br>                    spectral_ds.append(ds)<br>                    spectral_bands.append(band)<br>                <span style="color:rgb(0,0,128);font-weight:bold">else</span>:<br>                    spectral_name = last_name<br>                    ds = gdal.Open(spectral_name)<br>                    <span style="color:rgb(0,0,128);font-weight:bold">if </span>ds <span style="color:rgb(0,0,128);font-weight:bold">is None</span>:<br>                        <span style="color:rgb(0,0,128);font-weight:bold">return </span><span style="color:rgb(0,0,255)">1<br></span><span style="color:rgb(0,0,255)">                    </span><span style="color:rgb(0,0,128);font-weight:bold">for </span>j <span style="color:rgb(0,0,128);font-weight:bold">in </span><span style="color:rgb(0,0,128)">range</span>(ds.RasterCount):<br>                        spectral_ds.append(ds)<br>                        spectral_bands.append(ds.GetRasterBand(j+<span style="color:rgb(0,0,255)">1</span>))<br><br>            last_name = argv[i]<br><br>        i = i + <span style="color:rgb(0,0,255)">1<br></span><span style="color:rgb(0,0,255)">    </span><span style="color:rgb(0,0,128);font-weight:bold">if </span>pan_name <span style="color:rgb(0,0,128);font-weight:bold">is None or </span><span style="color:rgb(0,0,128)">len</span>(spectral_bands) == <span style="color:rgb(0,0,255)">0</span>:<br>        <span style="color:rgb(0,0,128);font-weight:bold">return </span>Usage()<br>    out_name = last_name<br>    <span style="color:rgb(0,0,128);font-weight:bold">if </span><span style="color:rgb(0,0,128)">len</span>(bands) == <span style="color:rgb(0,0,255)">0</span>:<br>        bands = [ j+<span style="color:rgb(0,0,255)">1 </span><span style="color:rgb(0,0,128);font-weight:bold">for </span>j <span style="color:rgb(0,0,128);font-weight:bold">in </span><span style="color:rgb(0,0,128)">range</span>(<span style="color:rgb(0,0,128)">len</span>(spectral_bands)) ]<br>    <span style="color:rgb(0,0,128);font-weight:bold">else</span>:<br>        <span style="color:rgb(0,0,128);font-weight:bold">for </span>i <span style="color:rgb(0,0,128);font-weight:bold">in </span><span style="color:rgb(0,0,128)">range</span>(<span style="color:rgb(0,0,128)">len</span>(bands)):<br>            <span style="color:rgb(0,0,128);font-weight:bold">if </span>bands[i] < <span style="color:rgb(0,0,255)">0 </span><span style="color:rgb(0,0,128);font-weight:bold">or </span>bands[i] > <span style="color:rgb(0,0,128)">len</span>(spectral_bands):<br>                <span style="color:rgb(0,0,128)">print</span>(<span style="color:rgb(0,128,128);font-weight:bold">'Invalid band number in -b: %d' </span>% bands[i])<br>                <span style="color:rgb(0,0,128);font-weight:bold">return </span><span style="color:rgb(0,0,255)">1<br></span><span style="color:rgb(0,0,255)"><br></span><span style="color:rgb(0,0,255)">    </span><span style="color:rgb(0,0,128);font-weight:bold">if </span><span style="color:rgb(0,0,128)">len</span>(weights) != <span style="color:rgb(0,0,255)">0 </span><span style="color:rgb(0,0,128);font-weight:bold">and </span><span style="color:rgb(0,0,128)">len</span>(weights) != <span style="color:rgb(0,0,128)">len</span>(spectral_bands):<br>        <span style="color:rgb(0,0,128)">print</span>(<span style="color:rgb(0,128,128);font-weight:bold">'There must be as many -w values specified as input spectral bands'</span>)<br>        <span style="color:rgb(0,0,128);font-weight:bold">return </span><span style="color:rgb(0,0,255)">1<br></span><span style="color:rgb(0,0,255)"><br></span><span style="color:rgb(0,0,255)"><br></span><span style="color:rgb(0,0,255)"><br></span><span style="color:rgb(0,0,255)"><br></span><span style="color:rgb(0,0,255)">    </span>vrt_xml = <span style="color:rgb(0,128,128);font-weight:bold">"""<VRTDataset subClass="VRTPansharpenedDataset"></span><span style="color:rgb(0,0,128);font-weight:bold">\n</span><span style="color:rgb(0,128,128);font-weight:bold">"""<br></span><span style="color:rgb(0,128,128);font-weight:bold">    </span><span style="color:rgb(0,0,128);font-weight:bold">if </span>bands != [ j+<span style="color:rgb(0,0,255)">1 </span><span style="color:rgb(0,0,128);font-weight:bold">for </span>j <span style="color:rgb(0,0,128);font-weight:bold">in </span><span style="color:rgb(0,0,128)">range</span>(<span style="color:rgb(0,0,128)">len</span>(spectral_bands)) ]:<br>        <span style="color:rgb(0,0,128);font-weight:bold">for </span>i <span style="color:rgb(0,0,128);font-weight:bold">in </span><span style="color:rgb(0,0,128)">range</span>(<span style="color:rgb(0,0,128)">len</span>(bands)):<br>            band = spectral_bands[bands[i]-<span style="color:rgb(0,0,255)">1</span>]<br>            datatype = gdal.GetDataTypeName(band.DataType)<br>            colorname = gdal.GetColorInterpretationName(band.GetColorInterpretation())<br>            vrt_xml += <span style="color:rgb(0,128,128);font-weight:bold">"""  <VRTRasterBand dataType="%s" band="%d" subClass="VRTPansharpenedRasterBand"><br></span><span style="color:rgb(0,128,128);font-weight:bold">      <ColorInterp>%s</ColorInterp><br></span><span style="color:rgb(0,128,128);font-weight:bold">  </VRTRasterBand></span><span style="color:rgb(0,0,128);font-weight:bold">\n</span><span style="color:rgb(0,128,128);font-weight:bold">""" </span>% (datatype, i+<span style="color:rgb(0,0,255)">1</span>, colorname)<br><br>    vrt_xml += <span style="color:rgb(0,128,128);font-weight:bold">"""  <PansharpeningOptions></span><span style="color:rgb(0,0,128);font-weight:bold">\n</span><span style="color:rgb(0,128,128);font-weight:bold">"""<br></span><span style="color:rgb(0,128,128);font-weight:bold">    </span><span style="color:rgb(0,0,128);font-weight:bold">if </span><span style="color:rgb(0,0,128)">len</span>(weights) != <span style="color:rgb(0,0,255)">0</span>:<br>        vrt_xml += <span style="color:rgb(0,128,128);font-weight:bold">"""      <AlgorithmOptions></span><span style="color:rgb(0,0,128);font-weight:bold">\n</span><span style="color:rgb(0,128,128);font-weight:bold">"""<br></span><span style="color:rgb(0,128,128);font-weight:bold">        </span>vrt_xml += <span style="color:rgb(0,128,128);font-weight:bold">"""        <Weights>"""<br></span><span style="color:rgb(0,128,128);font-weight:bold">        </span><span style="color:rgb(0,0,128);font-weight:bold">for </span>i <span style="color:rgb(0,0,128);font-weight:bold">in </span><span style="color:rgb(0,0,128)">range</span>(<span style="color:rgb(0,0,128)">len</span>(weights)):<br>            <span style="color:rgb(0,0,128);font-weight:bold">if </span>i > <span style="color:rgb(0,0,255)">0</span>: vrt_xml += <span style="color:rgb(0,128,128);font-weight:bold">","<br></span><span style="color:rgb(0,128,128);font-weight:bold">            </span>vrt_xml += <span style="color:rgb(0,128,128);font-weight:bold">"%.16g" </span>% weights[i]<br>        vrt_xml += <span style="color:rgb(0,128,128);font-weight:bold">"</Weights></span><span style="color:rgb(0,0,128);font-weight:bold">\n</span><span style="color:rgb(0,128,128);font-weight:bold">"<br></span><span style="color:rgb(0,128,128);font-weight:bold">        </span>vrt_xml += <span style="color:rgb(0,128,128);font-weight:bold">"""      </AlgorithmOptions></span><span style="color:rgb(0,0,128);font-weight:bold">\n</span><span style="color:rgb(0,128,128);font-weight:bold">"""<br></span><span style="color:rgb(0,128,128);font-weight:bold"><br></span><span style="color:rgb(0,128,128);font-weight:bold">    </span><span style="color:rgb(0,0,128);font-weight:bold">if </span>resampling <span style="color:rgb(0,0,128);font-weight:bold">is not None</span>:<br>        vrt_xml += <span style="color:rgb(0,128,128);font-weight:bold">'      <Resampling>%s</Resampling></span><span style="color:rgb(0,0,128);font-weight:bold">\n</span><span style="color:rgb(0,128,128);font-weight:bold">' </span>% resampling<br><br>    <span style="color:rgb(0,0,128);font-weight:bold">if </span>num_threads <span style="color:rgb(0,0,128);font-weight:bold">is not None</span>:<br>        vrt_xml += <span style="color:rgb(0,128,128);font-weight:bold">'      <NumThreads>%s</NumThreads></span><span style="color:rgb(0,0,128);font-weight:bold">\n</span><span style="color:rgb(0,128,128);font-weight:bold">' </span>% num_threads<br><br>    <span style="color:rgb(0,0,128);font-weight:bold">if </span>bitdepth <span style="color:rgb(0,0,128);font-weight:bold">is not None</span>:<br>        vrt_xml += <span style="color:rgb(0,128,128);font-weight:bold">'      <BitDepth>%s</BitDepth></span><span style="color:rgb(0,0,128);font-weight:bold">\n</span><span style="color:rgb(0,128,128);font-weight:bold">' </span>% bitdepth<br><br>    <span style="color:rgb(0,0,128);font-weight:bold">if </span>nodata <span style="color:rgb(0,0,128);font-weight:bold">is not None</span>:<br>        vrt_xml += <span style="color:rgb(0,128,128);font-weight:bold">'      <NoData>%s</NoData></span><span style="color:rgb(0,0,128);font-weight:bold">\n</span><span style="color:rgb(0,128,128);font-weight:bold">' </span>% nodata<br><br>    <span style="color:rgb(0,0,128);font-weight:bold">if </span>spat_adjust <span style="color:rgb(0,0,128);font-weight:bold">is not None</span>:<br>        vrt_xml += <span style="color:rgb(0,128,128);font-weight:bold">'      <SpatialExtentAdjustment>%s</SpatialExtentAdjustment></span><span style="color:rgb(0,0,128);font-weight:bold">\n</span><span style="color:rgb(0,128,128);font-weight:bold">' </span>% spat_adjust<br><br>    pan_relative=<span style="color:rgb(0,128,128);font-weight:bold">'0'<br></span><span style="color:rgb(0,128,128);font-weight:bold">    </span><span style="color:rgb(0,0,128)">print</span>(<span style="color:rgb(0,128,128);font-weight:bold">"panname: "</span>+pan_name)<br>    <span style="color:rgb(0,0,128)">print</span>(<span style="color:rgb(0,0,128)">str</span>(os.path.isabs(pan_name)))<br>    <span style="color:rgb(0,0,128)">print</span>(<span style="color:rgb(0,0,128)">str</span>(os.path.relpath(pan_name, os.path.dirname(out_name))))<br>    <span style="color:rgb(0,0,128);font-weight:bold">if </span>format.upper() == <span style="color:rgb(0,128,128);font-weight:bold">'VRT'</span>:<br>        <span style="color:rgb(0,0,128);font-weight:bold">if not </span>os.path.isabs(pan_name):<br>            pan_relative=<span style="color:rgb(0,128,128);font-weight:bold">'1'<br></span><span style="color:rgb(0,128,128);font-weight:bold">            </span>pan_name = os.path.relpath(pan_name, os.path.dirname(out_name))<br><br>    vrt_xml += <span style="color:rgb(0,128,128);font-weight:bold">"""    <PanchroBand><br></span><span style="color:rgb(0,128,128);font-weight:bold">      <SourceFilename relativeToVRT="%s">%s</SourceFilename><br></span><span style="color:rgb(0,128,128);font-weight:bold">      <SourceBand>1</SourceBand><br></span><span style="color:rgb(0,128,128);font-weight:bold">    </PanchroBand></span><span style="color:rgb(0,0,128);font-weight:bold">\n</span><span style="color:rgb(0,128,128);font-weight:bold">""" </span>% (pan_relative, pan_name)<br>    <span style="color:rgb(0,0,128)">print</span>(vrt_xml)<br>    <span style="color:rgb(0,0,128);font-weight:bold">for </span>i <span style="color:rgb(0,0,128);font-weight:bold">in </span><span style="color:rgb(0,0,128)">range</span>(<span style="color:rgb(0,0,128)">len</span>(spectral_bands)):<br>        dstband = <span style="color:rgb(0,128,128);font-weight:bold">''<br></span><span style="color:rgb(0,128,128);font-weight:bold">        </span><span style="color:rgb(0,0,128);font-weight:bold">for </span>j <span style="color:rgb(0,0,128);font-weight:bold">in </span><span style="color:rgb(0,0,128)">range</span>(<span style="color:rgb(0,0,128)">len</span>(bands)):<br>            <span style="color:rgb(0,0,128);font-weight:bold">if </span>i + <span style="color:rgb(0,0,255)">1 </span>== bands[j]:<br>                dstband = <span style="color:rgb(0,128,128);font-weight:bold">' dstBand="%d"' </span>% (j+<span style="color:rgb(0,0,255)">1</span>)<br>                <span style="color:rgb(0,0,128);font-weight:bold">break<br></span><span style="color:rgb(0,0,128);font-weight:bold"><br></span><span style="color:rgb(0,0,128);font-weight:bold">        </span>ms_relative=<span style="color:rgb(0,128,128);font-weight:bold">'0'<br></span><span style="color:rgb(0,128,128);font-weight:bold">        </span>ms_name = spectral_ds[i].GetDescription()<br>        <span style="color:rgb(0,0,128);font-weight:bold">if </span>format.upper() == <span style="color:rgb(0,128,128);font-weight:bold">'VRT'</span>:<br>            <span style="color:rgb(0,0,128);font-weight:bold">if not </span>os.path.isabs(ms_name):<br>                ms_relative=<span style="color:rgb(0,128,128);font-weight:bold">'1'<br></span><span style="color:rgb(0,128,128);font-weight:bold">                </span>ms_name = os.path.relpath(ms_name, os.path.dirname(out_name))<br><br>        vrt_xml += <span style="color:rgb(0,128,128);font-weight:bold">"""    <SpectralBand%s><br></span><span style="color:rgb(0,128,128);font-weight:bold">      <SourceFilename relativeToVRT="%s">%s</SourceFilename><br></span><span style="color:rgb(0,128,128);font-weight:bold">      <SourceBand>%d</SourceBand><br></span><span style="color:rgb(0,128,128);font-weight:bold">    </SpectralBand></span><span style="color:rgb(0,0,128);font-weight:bold">\n</span><span style="color:rgb(0,128,128);font-weight:bold">""" </span>% (dstband, ms_relative, ms_name, spectral_bands[i].GetBand())<br><br>    vrt_xml += <span style="color:rgb(0,128,128);font-weight:bold">"""  </PansharpeningOptions></span><span style="color:rgb(0,0,128);font-weight:bold">\n</span><span style="color:rgb(0,128,128);font-weight:bold">"""<br></span><span style="color:rgb(0,128,128);font-weight:bold">    </span>vrt_xml += <span style="color:rgb(0,128,128);font-weight:bold">"""</VRTDataset></span><span style="color:rgb(0,0,128);font-weight:bold">\n</span><span style="color:rgb(0,128,128);font-weight:bold">"""<br></span><span style="color:rgb(0,128,128);font-weight:bold">    </span><span style="color:rgb(0,0,128);font-weight:bold">if </span>format.upper() == <span style="color:rgb(0,128,128);font-weight:bold">'VRT'</span>:<br>        f = gdal.VSIFOpenL(out_name, <span style="color:rgb(0,128,128);font-weight:bold">'wb'</span>)<br>        <span style="color:rgb(0,0,128);font-weight:bold">if </span>f <span style="color:rgb(0,0,128);font-weight:bold">is None</span>:<br>            <span style="color:rgb(0,0,128)">print</span>(<span style="color:rgb(0,128,128);font-weight:bold">'Cannot create %s' </span>% out_name)<br>            <span style="color:rgb(0,0,128);font-weight:bold">return </span><span style="color:rgb(0,0,255)">1<br></span><span style="color:rgb(0,0,255)">        </span>gdal.VSIFWriteL(vrt_xml, <span style="color:rgb(0,0,255)">1</span>, <span style="color:rgb(0,0,128)">len</span>(vrt_xml), f)<br>        gdal.VSIFCloseL(f)<br>        <span style="color:rgb(0,0,128);font-weight:bold">if </span>verbose_vrt:<br>            vrt_ds = gdal.Open(out_name, gdal.GA_Update)<br>            vrt_ds.SetMetadata(vrt_ds.GetMetadata())<br>        <span style="color:rgb(0,0,128);font-weight:bold">else</span>:<br>            vrt_ds = gdal.Open(out_name)<br>        <span style="color:rgb(0,0,128);font-weight:bold">if </span>vrt_ds <span style="color:rgb(0,0,128);font-weight:bold">is None</span>:<br>            <span style="color:rgb(0,0,128);font-weight:bold">return </span><span style="color:rgb(0,0,255)">1<br></span><span style="color:rgb(0,0,255)">        </span><span style="color:rgb(0,0,128);font-weight:bold">return </span><span style="color:rgb(0,0,255)">0<br></span><span style="color:rgb(0,0,255)">    </span>vrt_ds = gdal.Open(vrt_xml)<br>    out_ds = gdal.GetDriverByName(format).CreateCopy(out_name, vrt_ds, <span style="color:rgb(0,0,255)">0</span>, creation_options, <span style="color:rgb(102,0,153)">callback </span>= callback)<br><br>    <span style="color:rgb(0,0,128);font-weight:bold">if </span>out_ds <span style="color:rgb(0,0,128);font-weight:bold">is None</span>:<br>        <span style="color:rgb(0,0,128);font-weight:bold">return </span><span style="color:rgb(0,0,255)">1<br></span><span style="color:rgb(0,0,255)">    </span><span style="color:rgb(0,0,128);font-weight:bold">return </span><span style="color:rgb(0,0,255)">0<br></span><span style="color:rgb(0,0,128);font-weight:bold">def </span>main():<br>    <span style="color:rgb(0,0,128);font-weight:bold">return </span>gdal_pansharpen(sys.argv)<br><br><span style="color:rgb(0,0,128);font-weight:bold">if </span>__name__ == <span style="color:rgb(0,128,128);font-weight:bold">'__main__'</span>:<br>    sys.exit(gdal_pansharpen(sys.argv))</pre><pre style="white-space:pre-wrap;color:rgb(0,0,0);font-family:'Courier New'"><br></pre><pre style="white-space:pre-wrap;color:rgb(0,0,0);font-family:'Courier New'"><span style="color:rgb(36,39,41);font-family:Arial,'Helvetica Neue',Helvetica,sans-serif;font-size:15px;line-height:19.5px;white-space:normal">My input file is a 7 bands geotiff file and the band 8 of an Landsat8 images.</span><br></pre><pre style="white-space:pre-wrap"><p style="color:rgb(36,39,41);font-family:Arial,'Helvetica Neue',Helvetica,sans-serif;margin:0px 0px 1em;padding:0px;border:0px;font-size:15px;clear:both;line-height:19.5px;white-space:normal">If i use the script as follow:</p><pre style="white-space:pre-wrap;color:rgb(57,51,24);font-family:Consolas,Menlo,Monaco,'Lucida Console','Liberation Mono','DejaVu Sans Mono','Bitstream Vera Sans Mono','Courier New',monospace,sans-serif;margin-top:0px;margin-bottom:1em;padding:5px;border:0px;font-size:13px;width:auto;max-height:600px;overflow:auto;word-wrap:normal;background-color:rgb(239,240,241)"><code style="margin:0px;padding:0px;border:0px;font-family:Consolas,Menlo,Monaco,'Lucida Console','Liberation Mono','DejaVu Sans Mono','Bitstream Vera Sans Mono','Courier New',monospace,sans-serif;white-space:inherit"><span style="margin:0px;padding:0px;border:0px;color:rgb(24,26,28)">gdal_pansharpen panchro</span><span style="margin:0px;padding:0px;border:0px;color:rgb(24,26,28)">.</span><span style="margin:0px;padding:0px;border:0px;color:rgb(24,26,28)">tif multispectral</span><span style="margin:0px;padding:0px;border:0px;color:rgb(24,26,28)">.</span><span style="margin:0px;padding:0px;border:0px;color:rgb(24,26,28)">tif pansharpend_output</span><span style="margin:0px;padding:0px;border:0px;color:rgb(24,26,28)">.</span><span style="margin:0px;padding:0px;border:0px;color:rgb(24,26,28)">tif</span></code></pre><p style="color:rgb(36,39,41);font-family:Arial,'Helvetica Neue',Helvetica,sans-serif;margin:0px 0px 1em;padding:0px;border:0px;font-size:15px;clear:both;line-height:19.5px;white-space:normal">it returns with this error:</p><pre style="white-space:pre-wrap;color:rgb(57,51,24);font-family:Consolas,Menlo,Monaco,'Lucida Console','Liberation Mono','DejaVu Sans Mono','Bitstream Vera Sans Mono','Courier New',monospace,sans-serif;margin-top:0px;margin-bottom:1em;padding:5px;border:0px;font-size:13px;width:auto;max-height:600px;overflow:auto;word-wrap:normal;background-color:rgb(239,240,241)"><code style="margin:0px;padding:0px;border:0px;font-family:Consolas,Menlo,Monaco,'Lucida Console','Liberation Mono','DejaVu Sans Mono','Bitstream Vera Sans Mono','Courier New',monospace,sans-serif;white-space:inherit"><span style="margin:0px;padding:0px;border:0px;color:rgb(24,26,28)">ERROR </span><span style="margin:0px;padding:0px;border:0px;color:rgb(107,41,27)">1</span><span style="margin:0px;padding:0px;border:0px;color:rgb(24,26,28)">:</span><span style="margin:0px;padding:0px;border:0px;color:rgb(24,26,28)"> </span><span style="margin:0px;padding:0px;border:0px;color:rgb(43,145,175)">Missing</span><span style="margin:0px;padding:0px;border:0px;color:rgb(24,26,28)"> one of rasterXSize</span><span style="margin:0px;padding:0px;border:0px;color:rgb(24,26,28)">,</span><span style="margin:0px;padding:0px;border:0px;color:rgb(24,26,28)"> rasterYSize </span><span style="margin:0px;padding:0px;border:0px;color:rgb(0,0,139)">or</span><span style="margin:0px;padding:0px;border:0px;color:rgb(24,26,28)"> bands on </span><span style="margin:0px;padding:0px;border:0px;color:rgb(43,145,175)">VRTDataset</span><span style="margin:0px;padding:0px;border:0px;color:rgb(24,26,28)">.</span></code></pre><p style="color:rgb(36,39,41);font-family:Arial,'Helvetica Neue',Helvetica,sans-serif;margin:0px 0px 1em;padding:0px;border:0px;font-size:15px;clear:both;line-height:19.5px;white-space:normal">I undestrand that the problem is the bands on the VRTDataset but for now i didn't find any solutions.</p><p style="margin:0px 0px 1em;padding:0px;border:0px;clear:both"><font color="#242729" face="Arial, Helvetica Neue, Helvetica, sans-serif"><span style="font-size:15px;line-height:19.5px;white-space:normal">I thank you in advance for any suggestions.<br></span></font></p><p style="margin:0px 0px 1em;padding:0px;border:0px;clear:both"><font color="#242729" face="Arial, Helvetica Neue, Helvetica, sans-serif"><span style="font-size:15px;line-height:19.5px;white-space:normal">Thank you,</span></font></p><p style="margin:0px 0px 1em;padding:0px;border:0px;clear:both"><font color="#242729" face="Arial, Helvetica Neue, Helvetica, sans-serif"><span style="font-size:15px;line-height:19.5px;white-space:normal">Lorenzo Bernardi</span></font></p></pre></div><div><br></div>-- <br><div class="gmail_signature"><div dir="ltr"><pre cols="72" style="white-space:pre-wrap;color:rgb(136,136,136)">Lorenzo Bernardi


<br></pre></div></div></div>