I am trying to write a function which will help me construct a rasterio
memory file and return the dataset reader object so I can then play around with it as needed. I am trying to avoid with
statements because I would like to allow the user to read and write as they deem necessary. This is what I have so far:
from rasterio import mask, features, warp
from rasterio.io import MemoryFile
import rasterio
import numpy as np
def create_memory_file(data, west_bound, north_bound, cellsize, driver='AAIGrid'):
#data is a numpy array
dtype = data.dtype
shape = data.shape
transform = rasterio.transform.from_origin(west_bound, north_bound, cellsize, cellsize)
memfile = MemoryFile()
dataset = memfile.open(driver=driver, width= shape[1], height = shape[0], transform=transform, count=1, dtype = dtype)
dataset.write(data,1)
return dataset
def close_memory_file(memfile):
memfile.close()
data = np.array([[1,2,3], [4,5,6], [7,8,9]])
memfile = create_memory_file(data, 0, 2, 0.5)
memfile.read(1)
The last line throws an error:
Traceback (most recent call last):
File "D:/11202750-002_RA2CE/Basis/common.py", line 214, in <module>
memfile.read(1)
File "rasterio\_io.pyx", line 209, in rasterio._io.DatasetReaderBase.read
rasterio.errors.UnsupportedOperation: not readable
The memfile apparently only has write permissions because of the following:
>>> memfile
<open BufferedDatasetWriter name='/vsimem/3c0572dd-a295-4f2b-a65d-22a404dd5d0f.' mode='w'>
>>> memfile.mode
'w'
I have tried various combinations of adding mode=r+
, permissions=r+
to my memfile.open()
call but it won't allow this.
How can I add the read/write mode at the level of the open
statement?
dataset = memfile.open(mode='r+',driver=driver, width= shape[1], height = shape[0], transform=transform, count=1, dtype = dtype)
throws the following type error:TypeError: __init__() got multiple values for keyword argument 'mode'
UnsupportedOperation: not readable
. I'm usingrasterio 1.0.6
withPython 3.6.6 :: Anaconda, Inc.
Please make sure you are using these versions of the software