Support WarpedVRT

Note that WarpedVRTs must be padded to multiples of 512
This commit is contained in:
Sean Gillies 2022-10-31 09:09:57 -06:00
parent 91b34bd750
commit 68f7047b60

View File

@ -14,10 +14,11 @@ log = logging.getLogger(__name__)
class RasterioStore(MutableMapping): class RasterioStore(MutableMapping):
def __init__(self, dataset): def __init__(self, dataset):
self.dataset = dataset self.dataset = dataset
self.array_name = Path(self.dataset.name).as_posix().lstrip("/")
chunk_height, chunk_width = self.dataset.block_shapes[0] chunk_height, chunk_width = self.dataset.block_shapes[0]
self._data = { self._data = {
".zgroup": json.dumps({"zarr_format": 2}).encode("utf-8"), ".zgroup": json.dumps({"zarr_format": 2}).encode("utf-8"),
Path(self.dataset.name).name self.array_name
+ "/.zarray": json.dumps( + "/.zarray": json.dumps(
{ {
"zarr_format": 2, "zarr_format": 2,
@ -38,13 +39,13 @@ class RasterioStore(MutableMapping):
"filters": None, "filters": None,
} }
).encode("utf-8"), ).encode("utf-8"),
Path(self.dataset.name).name + "/.zattrs": json.dumps({}), self.array_name + "/.zattrs": json.dumps({}),
} }
def __getitem__(self, key): def __getitem__(self, key):
if key in self._data: if key in self._data:
return self._data[key] return self._data[key]
elif key.startswith(Path(self.dataset.name).name): elif key.startswith(self.array_name):
chunk_height, chunk_width = self.dataset.block_shapes[0] chunk_height, chunk_width = self.dataset.block_shapes[0]
chunking = key.split("/")[-1] chunking = key.split("/")[-1]
bc, rc, cc = [int(x) for x in chunking.split(".")] bc, rc, cc = [int(x) for x in chunking.split(".")]
@ -53,7 +54,6 @@ class RasterioStore(MutableMapping):
window=Window( window=Window(
cc * chunk_width, rc * chunk_height, chunk_width, chunk_height cc * chunk_width, rc * chunk_height, chunk_width, chunk_height
), ),
boundless=True,
) )
return chunk return chunk
else: else: