[gdal-dev] Zip files and VISFileFromMemBuffer()

Kurt Schwehr schwehr at gmail.com
Tue Jan 31 15:56:41 PST 2017


Sean,

Very cool.  One follow up question, do you really need the "with" for
open?  Does this not work (and MemoryFile can drop the file descriptor as
soon as it wants to)?

with MemoryFile(open(path_zip_file, 'rb')) as memfile:
        with memfile.open('white-gemini-iv.vrt') as dataset:
            assert dataset.count == 3

On Tue, Jan 31, 2017 at 3:35 PM, Sean Gillies <sean at mapbox.com> wrote:

> Thanks for confirming that I was on the right trail, Even! I got it
> figured out: I was naively trying to open the /vsizip/vsimem/ file in
> update mode.
>
> In case you're interested, my new Python usage is like this:
>
> with open(path_zip_file, 'rb') as f:
>     with MemoryFile(f) as memfile:
>         with memfile.open('white-gemini-iv.vrt') as dataset:
>             assert dataset.count == 3
>
> https://github.com/mapbox/rasterio/pull/972/files#diff-
> d3388b510bd97235e4741b8417cc41e9R148
>
>
> On Tue, Jan 31, 2017 at 5:42 PM, Even Rouault <even.rouault at spatialys.com>
> wrote:
>
>> On mardi 31 janvier 2017 17:33:23 CET Sean Gillies wrote:
>>
>> > Hey all,
>>
>> >
>>
>> > The tests in
>>
>> > https://svn.osgeo.org/gdal/branches/1.9/autotest/gcore/vsizip.py show
>> how
>>
>> > to create a zip archive in memory and create directories and files
>> within
>>
>> > it. I'm looking for a shortcut.
>>
>> >
>>
>> > Given a sequence of bytes representing an existing zip file that
>> contains a
>>
>> > TIFF and a VRT (referencing the TIFF), is it possible to make a VSI file
>>
>> > from this buffer (using VISFileFromMemBuffer()) and then access the VRT
>>
>> > using a path like /vsizip/vsimem/archive.zip/example.vrt protocol?
>>
>>
>>
>> Hi Sean,
>>
>>
>>
>> That sounds like you tested it and something went wrong ? Perhaps check
>> the path to the source in the VRT and the value of the relativeToVRT
>> attribute.
>>
>>
>>
>> Your above strategy does work for me:
>>
>>
>>
>> $ gdal_translate byte.tif byte.vrt -of VRT
>>
>> Input file size is 20, 20
>>
>>
>>
>> $ zip byte.tif.zip byte.tif byte.vrt
>>
>> adding: byte.tif (deflated 96%)
>>
>> adding: byte.vrt (deflated 53%)
>>
>>
>>
>> $ python
>>
>> >>> from osgeo import gdal
>>
>> >>> data = open('byte.tif.zip', 'rb').read()
>>
>> >>> gdal.FileFromMemBuffer('/vsimem/archive.zip', data)
>>
>> >>> ds = gdal.Open('/vsizip/vsimem/archive.zip/byte.vrt')
>>
>> >>> ds.GetRasterBand(1).Checksum()
>>
>> 4672
>>
>>
>>
>>
>>
>> Even
>>
>>
>>
>>
>>
>> --
>>
>> Spatialys - Geospatial professional services
>>
>> http://www.spatialys.com
>>
>
>
>
> --
> Sean Gillies
>
> _______________________________________________
> gdal-dev mailing list
> gdal-dev at lists.osgeo.org
> https://lists.osgeo.org/mailman/listinfo/gdal-dev
>



-- 
--
http://schwehr.org
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osgeo.org/pipermail/gdal-dev/attachments/20170131/fcba19dd/attachment-0001.html>


More information about the gdal-dev mailing list