<div dir="ltr"><div style="margin:0px;padding:0px;border:0px;font-variant-numeric:inherit;font-variant-east-asian:inherit;font-stretch:inherit;font-size:12pt;line-height:inherit;font-family:Calibri,Arial,Helvetica,sans-serif;vertical-align:baseline;color:rgb(0,0,0)">Hi,</div><div style="margin:0px;padding:0px;border:0px;font-variant-numeric:inherit;font-variant-east-asian:inherit;font-stretch:inherit;font-size:12pt;line-height:inherit;font-family:Calibri,Arial,Helvetica,sans-serif;vertical-align:baseline;color:rgb(0,0,0)"><br></div><div style="margin:0px;padding:0px;border:0px;font-variant-numeric:inherit;font-variant-east-asian:inherit;font-stretch:inherit;font-size:12pt;line-height:inherit;font-family:Calibri,Arial,Helvetica,sans-serif;vertical-align:baseline;color:rgb(0,0,0)">I'm attempting to merge 2 multi-band tiffs as well as build overviews for the resulting merged tiff.  I'm a bit confused when I attempt to use a `vsimem` object to perform the actions in memory.  For example, I have a couple of functions defined as</div><div style="margin:0px;padding:0px;border:0px;font-variant-numeric:inherit;font-variant-east-asian:inherit;font-stretch:inherit;font-size:12pt;line-height:inherit;font-family:Calibri,Arial,Helvetica,sans-serif;vertical-align:baseline;color:rgb(0,0,0)"><br></div><div style="margin:0px;padding:0px;border:0px;font-variant-numeric:inherit;font-variant-east-asian:inherit;font-stretch:inherit;font-size:12pt;line-height:inherit;font-family:Calibri,Arial,Helvetica,sans-serif;vertical-align:baseline;color:rgb(0,0,0)"><pre style="font-family:Menlo;font-size:9pt;background-color:rgb(43,43,43);color:rgb(169,183,198);white-space:pre-wrap"><span style="margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(204,120,50)">def </span><span style="margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(255,198,109)">merge_bands</span><span style="margin:0px;padding:0px;border:0px;font-style:italic;font-variant:inherit;font-weight:inherit;font-stretch:inherit;font-size:inherit;line-height:inherit;font-family:inherit;vertical-align:baseline;color:rgb(152,118,170)">(</span>tiffs<span style="margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(204,120,50)">, </span>out_file<span style="margin:0px;padding:0px;border:0px;font-style:italic;font-variant:inherit;font-weight:inherit;font-stretch:inherit;font-size:inherit;line-height:inherit;font-family:inherit;vertical-align:baseline;color:rgb(152,118,170)">)</span>:<br>    <span style="margin:0px;padding:0px;border:0px;font-style:italic;font-variant:inherit;font-weight:inherit;font-stretch:inherit;font-size:inherit;line-height:inherit;font-family:inherit;vertical-align:baseline;color:rgb(98,151,85)">"""Merge multi-band GeoTIFFs together.<br></span><span style="margin:0px;padding:0px;border:0px;font-style:italic;font-variant:inherit;font-weight:inherit;font-stretch:inherit;font-size:inherit;line-height:inherit;font-family:inherit;vertical-align:baseline;color:rgb(98,151,85)"><br></span><span style="margin:0px;padding:0px;border:0px;font-style:italic;font-variant:inherit;font-weight:inherit;font-stretch:inherit;font-size:inherit;line-height:inherit;font-family:inherit;vertical-align:baseline;color:rgb(98,151,85)">    Args:<br></span><span style="margin:0px;padding:0px;border:0px;font-style:italic;font-variant:inherit;font-weight:inherit;font-stretch:inherit;font-size:inherit;line-height:inherit;font-family:inherit;vertical-align:baseline;color:rgb(98,151,85)">        tiffs (list): List of paths to TIFFs to be merged<br></span><span style="margin:0px;padding:0px;border:0px;font-style:italic;font-variant:inherit;font-weight:inherit;font-stretch:inherit;font-size:inherit;line-height:inherit;font-family:inherit;vertical-align:baseline;color:rgb(98,151,85)">        out_file (str): Path to output file<br></span><span style="margin:0px;padding:0px;border:0px;font-style:italic;font-variant:inherit;font-weight:inherit;font-stretch:inherit;font-size:inherit;line-height:inherit;font-family:inherit;vertical-align:baseline;color:rgb(98,151,85)">    """<br></span><span style="margin:0px;padding:0px;border:0px;font-style:italic;font-variant:inherit;font-weight:inherit;font-stretch:inherit;font-size:inherit;line-height:inherit;font-family:inherit;vertical-align:baseline;color:rgb(98,151,85)">    </span>merge_command = <span style="margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(106,135,89)">'gdal_merge.py -separate -o {} '</span>.format<span style="margin:0px;padding:0px;border:0px;font-style:italic;font-variant:inherit;font-weight:inherit;font-stretch:inherit;font-size:inherit;line-height:inherit;font-family:inherit;vertical-align:baseline;color:rgb(152,118,170)">(</span>out_file<span style="margin:0px;padding:0px;border:0px;font-style:italic;font-variant:inherit;font-weight:inherit;font-stretch:inherit;font-size:inherit;line-height:inherit;font-family:inherit;vertical-align:baseline;color:rgb(152,118,170)">)<br></span><span style="margin:0px;padding:0px;border:0px;font-style:italic;font-variant:inherit;font-weight:inherit;font-stretch:inherit;font-size:inherit;line-height:inherit;font-family:inherit;vertical-align:baseline;color:rgb(152,118,170)">    </span>merge_command += <span style="margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(106,135,89)">' --config GDAL_CACHEMAX 256'<br></span><span style="margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(106,135,89)">    </span>merge_command += <span style="margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(106,135,89)">' -co compress=LZW'<br></span><span style="margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(106,135,89)">    </span>merge_command += <span style="margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(106,135,89)">' -co TILED=YES'<br></span><span style="margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(106,135,89)">    </span><span style="margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(204,120,50)">for </span>tiff <span style="margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(204,120,50)">in </span>tiffs:<br>        merge_command = merge_command + <span style="margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(106,135,89)">' {}'</span>.format<span style="margin:0px;padding:0px;border:0px;font-style:italic;font-variant:inherit;font-weight:inherit;font-stretch:inherit;font-size:inherit;line-height:inherit;font-family:inherit;vertical-align:baseline;color:rgb(152,118,170)">(</span>tiff<span style="margin:0px;padding:0px;border:0px;font-style:italic;font-variant:inherit;font-weight:inherit;font-stretch:inherit;font-size:inherit;line-height:inherit;font-family:inherit;vertical-align:baseline;color:rgb(152,118,170)">)<br></span><span style="margin:0px;padding:0px;border:0px;font-style:italic;font-variant:inherit;font-weight:inherit;font-stretch:inherit;font-size:inherit;line-height:inherit;font-family:inherit;vertical-align:baseline;color:rgb(152,118,170)">    </span>sp.check_call<span style="margin:0px;padding:0px;border:0px;font-style:italic;font-variant:inherit;font-weight:inherit;font-stretch:inherit;font-size:inherit;line-height:inherit;font-family:inherit;vertical-align:baseline;color:rgb(152,118,170)">(</span>merge_command<span style="margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(204,120,50)">, </span><span style="margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(170,73,38)">shell</span>=<span style="margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(204,120,50)">True, </span><span style="margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(170,73,38)">stdout</span>=sp.PIPE<span style="margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(204,120,50)">, </span><span style="margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(170,73,38)">stderr</span>=sp.PIPE<span style="margin:0px;padding:0px;border:0px;font-style:italic;font-variant:inherit;font-weight:inherit;font-stretch:inherit;font-size:inherit;line-height:inherit;font-family:inherit;vertical-align:baseline;color:rgb(152,118,170)">)</span></pre><pre style="font-family:Menlo;font-size:9pt;background-color:rgb(43,43,43);color:rgb(169,183,198);white-space:pre-wrap"><span style="margin:0px;padding:0px;border:0px;font-style:italic;font-variant:inherit;font-weight:inherit;font-stretch:inherit;font-size:inherit;line-height:inherit;font-family:inherit;vertical-align:baseline;color:rgb(152,118,170)"><pre style="font-family:Menlo;font-size:9pt;color:rgb(169,183,198);white-space:pre-wrap"><span style="margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(204,120,50)">def </span><span style="margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(255,198,109)">build_overviews</span><span style="margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(152,118,170)">(</span>filename<span style="margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(204,120,50)">, </span>levels<span style="margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(152,118,170)">)</span>:<br>    <span style="margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(98,151,85)">"""Build overviews.<br></span><span style="margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(98,151,85)">    Args:<br></span><span style="margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(98,151,85)">        filename (str): Input filename<br></span><span style="margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(98,151,85)">        levels (list): Level (int) or list or levels (ints)<br></span><span style="margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(98,151,85)">            to build overviews for.<br></span><span style="margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(98,151,85)">    """<br></span><span style="margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(98,151,85)">    </span><span style="margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(204,120,50)">if not </span><span style="margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,136,198)">isinstance</span><span style="margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(152,118,170)">(</span>levels<span style="margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(204,120,50)">, </span><span style="margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,136,198)">list</span><span style="margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(152,118,170)">)</span>:<br>        levels = <span style="margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(152,118,170)">[</span>levels<span style="margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(152,118,170)">]<br></span><span style="margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(152,118,170)">    </span>command = <span style="margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(106,135,89)">'gdaladdo'<br></span><span style="margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(106,135,89)">    </span>command += <span style="margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(106,135,89)">' -r average'<br></span><span style="margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(106,135,89)">    </span>command += <span style="margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(106,135,89)">' {}'</span>.format<span style="margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(152,118,170)">(</span>filename<span style="margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(152,118,170)">)<br></span><span style="margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(152,118,170)">    </span>command += <span style="margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(106,135,89)">' {}'</span>.format<span style="margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(152,118,170)">(</span><span style="margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(106,135,89)">' '</span>.join<span style="margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(152,118,170)">(</span><span style="margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,136,198)">str</span><span style="margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(152,118,170)">(</span>x<span style="margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(152,118,170)">) </span><span style="margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(204,120,50)">for </span>x <span style="margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(204,120,50)">in </span>levels<span style="margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(152,118,170)">))<br></span><span style="margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(152,118,170)">    </span>sp.check_call<span style="margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(152,118,170)">(</span>command<span style="margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(204,120,50)">, </span><span style="margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(170,73,38)">shell</span>=<span style="margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(204,120,50)">True, </span><span style="margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(170,73,38)">stdout</span>=sp.PIPE<span style="margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(204,120,50)">, </span><span style="margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(170,73,38)">stderr</span>=sp.PIPE<span style="margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(152,118,170)">)</span></pre><br></span></pre>When I attempt to call it, using the following, the `vsimem` object seems to no longer be accessible to perform the overview creation:</div><div style="margin:0px;padding:0px;border:0px;font-variant-numeric:inherit;font-variant-east-asian:inherit;font-stretch:inherit;font-size:12pt;line-height:inherit;font-family:Calibri,Arial,Helvetica,sans-serif;vertical-align:baseline;color:rgb(0,0,0)"><br></div><div style="margin:0px;padding:0px;border:0px;font-variant-numeric:inherit;font-variant-east-asian:inherit;font-stretch:inherit;font-size:12pt;line-height:inherit;font-family:Calibri,Arial,Helvetica,sans-serif;vertical-align:baseline;color:rgb(0,0,0)"><pre style="font-family:Menlo;font-size:9pt;background-color:rgb(43,43,43);color:rgb(169,183,198);white-space:pre-wrap">merged_mem = <span style="margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(106,135,89)">'/vsimem/merged.tiff'<br></span><span style="margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(106,135,89)"><br></span>merge_bands<span style="margin:0px;padding:0px;border:0px;font-style:italic;font-variant:inherit;font-weight:inherit;font-stretch:inherit;font-size:inherit;line-height:inherit;font-family:inherit;vertical-align:baseline;color:rgb(152,118,170)">([</span><span style="margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(106,135,89)">'file1.tiff'</span><span style="margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(204,120,50)">, </span><span style="margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(106,135,89)">'file2.tiff'</span><span style="margin:0px;padding:0px;border:0px;font-style:italic;font-variant:inherit;font-weight:inherit;font-stretch:inherit;font-size:inherit;line-height:inherit;font-family:inherit;vertical-align:baseline;color:rgb(152,118,170)">]</span><span style="margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(204,120,50)">, </span>merged_mem<span style="margin:0px;padding:0px;border:0px;font-style:italic;font-variant:inherit;font-weight:inherit;font-stretch:inherit;font-size:inherit;line-height:inherit;font-family:inherit;vertical-align:baseline;color:rgb(152,118,170)">)<br></span>build_overviews<span style="margin:0px;padding:0px;border:0px;font-style:italic;font-variant:inherit;font-weight:inherit;font-stretch:inherit;font-size:inherit;line-height:inherit;font-family:inherit;vertical-align:baseline;color:rgb(152,118,170)">(</span>merged_mem<span style="margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(204,120,50)">, </span><span style="margin:0px;padding:0px;border:0px;font-style:italic;font-variant:inherit;font-weight:inherit;font-stretch:inherit;font-size:inherit;line-height:inherit;font-family:inherit;vertical-align:baseline;color:rgb(152,118,170)">[</span><span style="margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(104,151,187)">2</span><span style="margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(204,120,50)">,</span><span style="margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(104,151,187)">4</span><span style="margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(204,120,50)">,</span><span style="margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(104,151,187)">8</span><span style="margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(204,120,50)">,</span><span style="margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(104,151,187)">16</span><span style="margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(204,120,50)">,</span><span style="margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(104,151,187)">32</span><span style="margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(204,120,50)">,</span><span style="margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(104,151,187)">64</span><span style="margin:0px;padding:0px;border:0px;font-style:italic;font-variant:inherit;font-weight:inherit;font-stretch:inherit;font-size:inherit;line-height:inherit;font-family:inherit;vertical-align:baseline;color:rgb(152,118,170)">])<br></span></pre>I get an `exit status 2` which I believe is due to `merged_mem` being a NoneType after the merge is performed.</div><div style="margin:0px;padding:0px;border:0px;font-variant-numeric:inherit;font-variant-east-asian:inherit;font-stretch:inherit;font-size:12pt;line-height:inherit;font-family:Calibri,Arial,Helvetica,sans-serif;vertical-align:baseline;color:rgb(0,0,0)"><br></div><div style="margin:0px;padding:0px;border:0px;font-variant-numeric:inherit;font-variant-east-asian:inherit;font-stretch:inherit;font-size:12pt;line-height:inherit;font-family:Calibri,Arial,Helvetica,sans-serif;vertical-align:baseline;color:rgb(0,0,0)">I'm also confused about best practices.  Ideally, I'd like to do this all in the python wrapper but there doesn't seem to be an immediately obvious parallel for the `gdal_merge` script.</div><div style="margin:0px;padding:0px;border:0px;font-variant-numeric:inherit;font-variant-east-asian:inherit;font-stretch:inherit;font-size:12pt;line-height:inherit;font-family:Calibri,Arial,Helvetica,sans-serif;vertical-align:baseline;color:rgb(0,0,0)"><br></div><div style="margin:0px;padding:0px;border:0px;font-variant-numeric:inherit;font-variant-east-asian:inherit;font-stretch:inherit;font-size:12pt;line-height:inherit;font-family:Calibri,Arial,Helvetica,sans-serif;vertical-align:baseline;color:rgb(0,0,0)">I'm using python 3.8 and <span style="margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:inherit">GDAL 3.0.2.<br></span><span style="margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:inherit"></span></div><div style="margin:0px;padding:0px;border:0px;font-variant-numeric:inherit;font-variant-east-asian:inherit;font-stretch:inherit;font-size:12pt;line-height:inherit;font-family:Calibri,Arial,Helvetica,sans-serif;vertical-align:baseline;color:rgb(0,0,0)"><br></div><div style="margin:0px;padding:0px;border:0px;font-variant-numeric:inherit;font-variant-east-asian:inherit;font-stretch:inherit;font-size:12pt;line-height:inherit;font-family:Calibri,Arial,Helvetica,sans-serif;vertical-align:baseline;color:rgb(0,0,0)">Any guidance would be appreciated and thank you for your time,</div><div style="margin:0px;padding:0px;border:0px;font-variant-numeric:inherit;font-variant-east-asian:inherit;font-stretch:inherit;font-size:12pt;line-height:inherit;font-family:Calibri,Arial,Helvetica,sans-serif;vertical-align:baseline;color:rgb(0,0,0)">Brenton</div><div><br></div>-- <br><div dir="ltr" class="gmail_signature" data-smartmail="gmail_signature"><div dir="ltr"><div><div>Brenton Mallen</div><div>(561) 376-6580 | <a href="https://brentonmallen.com/" style="color:rgb(17,85,204)" target="_blank">Site</a> | <a href="https://github.com/brentonmallen1" style="color:rgb(17,85,204)" target="_blank">GitHub</a> | <a href="https://www.linkedin.com/in/brentonmallen/" style="color:rgb(17,85,204)" target="_blank">LinkedIn</a></div></div></div></div></div>