From ae823c17d1dfa725e6e8ae90d5d2960e52c236df Mon Sep 17 00:00:00 2001 From: David Manthey Date: Tue, 2 Jun 2020 15:42:54 -0400 Subject: [PATCH] Handle subimages of different component depths. --- large_image/tilesource/base.py | 7 ++++++- test/test_source_gdal.py | 9 +++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/large_image/tilesource/base.py b/large_image/tilesource/base.py index b68dab4c5..a4023d55d 100644 --- a/large_image/tilesource/base.py +++ b/large_image/tilesource/base.py @@ -1716,7 +1716,12 @@ def getRegion(self, format=(TILE_FORMAT_IMAGE, ), **kwargs): y0 = 0 subimage = subimage[:min(subimage.shape[0], regionHeight - y0), :min(subimage.shape[1], regionWidth - x0)] - image[y0:y0 + subimage.shape[0], x0:x0 + subimage.shape[1]] = subimage + if subimage.shape[2] > image.shape[2]: + newimage = numpy.ones((image.shape[0], image.shape[1], subimage.shape[2])) + newimage[:, :, :image.shape[2]] = image + image = newimage + image[y0:y0 + subimage.shape[0], x0:x0 + subimage.shape[1], + :subimage.shape[2]] = subimage # Scale if we need to outWidth = int(math.floor(outWidth)) outHeight = int(math.floor(outHeight)) diff --git a/test/test_source_gdal.py b/test/test_source_gdal.py index cd8034e87..f72498dcf 100644 --- a/test/test_source_gdal.py +++ b/test/test_source_gdal.py @@ -9,6 +9,7 @@ import pytest import six +from large_image import constants from large_image.exceptions import TileSourceException import large_image_source_gdal @@ -340,3 +341,11 @@ def testInternalMetadata(): source = large_image_source_gdal.GDALFileTileSource(imagePath) metadata = source.getInternalMetadata() assert metadata['driverShortName'] == 'GTiff' + + +def testGetRegionWithProjection(): + imagePath = utilities.externaldata('data/landcover_sample_1000.tif.sha512') + ts = large_image_source_gdal.GDALFileTileSource(imagePath, projection='EPSG:3857') + region, _ = ts.getRegion(output=dict(maxWidth=1024, maxHeight=1024), + format=constants.TILE_FORMAT_NUMPY) + assert region.shape == (1024, 1024, 4)