def test_gdalmdimtranslate_array(): tmpfile = '/vsimem/out.vrt' with gdaltest.error_handler(): assert not gdal.MultiDimTranslate( tmpfile, 'data/mdim.vrt', arraySpecs=['not_existing']) assert not gdal.MultiDimTranslate( tmpfile, 'data/mdim.vrt', arraySpecs=[ 'name=my_variable_with_time_increasing,unknown_opt=foo' ]) assert gdal.MultiDimTranslate( tmpfile, 'data/mdim.vrt', arraySpecs=['my_variable_with_time_increasing']) f = gdal.VSIFOpenL(tmpfile, 'rb') got_data = gdal.VSIFReadL(1, 10000, f).decode('ascii') gdal.VSIFCloseL(f) #print(got_data) gdal.Unlink(tmpfile) assert got_data == """<VRTDataset>
def test_gdalmdimtranslate_multidim_to_classic(): tmpfile = '/vsimem/out.tif' with gdaltest.error_handler(): assert not gdal.MultiDimTranslate(tmpfile, 'data/mdim.vrt') assert gdal.MultiDimTranslate( tmpfile, 'data/mdim.vrt', arraySpecs=['/my_subgroup/array_in_subgroup']) gdal.Unlink(tmpfile)
def test_gdalmdimtranslate_no_arg(): tmpfile = '/vsimem/out.vrt' assert gdal.MultiDimTranslate(tmpfile, 'data/mdim.vrt') assert gdal.MultiDimInfo(tmpfile) == gdal.MultiDimInfo('data/mdim.vrt') gdal.Unlink(tmpfile)
def test_gdalmdimtranslate_classic_to_classic(): tmpfile = '/vsimem/out.tif' ds = gdal.MultiDimTranslate(tmpfile, '../gcore/data/byte.tif') assert ds.GetRasterBand(1).Checksum() == 4672 ds = None gdal.Unlink(tmpfile)
def test_gdalmdimtranslate_multidim_to_mem(): out_ds = gdal.MultiDimTranslate('', 'data/mdim.vrt', format='MEM') assert out_ds rg = out_ds.GetRootGroup() assert rg ar = rg.OpenMDArray('time_increasing') assert ar assert ar.Read() == [ '2010-01-01', '2011-01-01', '2012-01-01', '2013-01-01' ]
def test_gdalmdimtranslate_dims_with_same_name_different_size(): srcfile = '/vsimem/in.vrt' gdal.FileFromMemBuffer( srcfile, """<VRTDataset> <Group name="/"> <Array name="X"> <DataType>Float64</DataType> <Dimension name="dim0" size="2"/> </Array> <Array name="Y"> <DataType>Float64</DataType> <Dimension name="dim0" size="3"/> </Array> </Group> </VRTDataset>""") tmpfile = '/vsimem/test.vrt' gdal.MultiDimTranslate(tmpfile, srcfile, groupSpecs=['/'], format='VRT') f = gdal.VSIFOpenL(tmpfile, 'rb') got_data = gdal.VSIFReadL(1, 10000, f).decode('ascii') gdal.VSIFCloseL(f) #print(got_data) assert got_data == """<VRTDataset> <Group name="/"> <Dimension name="dim0" size="2" /> <Dimension name="dim0_2" size="3" /> <Array name="X"> <DataType>Float64</DataType> <DimensionRef ref="dim0" /> <Source> <SourceFilename relativetoVRT="1">in.vrt</SourceFilename> <SourceArray>/X</SourceArray> <SourceSlab offset="0" count="2" step="1" /> <DestSlab offset="0" /> </Source> </Array> <Array name="Y"> <DataType>Float64</DataType> <DimensionRef ref="dim0_2" /> <Source> <SourceFilename relativetoVRT="1">in.vrt</SourceFilename> <SourceArray>/Y</SourceArray> <SourceSlab offset="0" count="3" step="1" /> <DestSlab offset="0" /> </Source> </Array> </Group> </VRTDataset> """ gdal.Unlink(tmpfile) gdal.Unlink(srcfile)
def test_gdalmdimtranslate_multidim_1d_to_classic(): tmpfile = '/vsimem/out.tif' assert gdal.MultiDimTranslate(tmpfile, 'data/mdim.vrt', arraySpecs=['latitude']) ds = gdal.Open(tmpfile) band = ds.GetRasterBand(1) data = band.ReadRaster() assert len(data) == 10 * 4 assert struct.unpack('f' * 10, data)[0] == 90.0 ds = None gdal.Unlink(tmpfile)
def test_gdalmdimtranslate_two_groups(): tmpfile = '/vsimem/out.vrt' assert gdal.MultiDimTranslate( tmpfile, 'data/mdim.vrt', groupSpecs=['my_subgroup', 'name=other_subgroup,dstname=renamed']) f = gdal.VSIFOpenL(tmpfile, 'rb') got_data = gdal.VSIFReadL(1, 10000, f).decode('ascii') gdal.VSIFCloseL(f) #print(got_data) gdal.Unlink(tmpfile) assert got_data == """<VRTDataset>
def test_gdalmdimtranslate_scaleaxes(): tmpfile = '/vsimem/out.vrt' assert gdal.MultiDimTranslate( tmpfile, 'data/mdim.vrt', arraySpecs=['my_variable_with_time_increasing'], scaleAxesSpecs=['longitude(2)']) f = gdal.VSIFOpenL(tmpfile, 'rb') got_data = gdal.VSIFReadL(1, 10000, f).decode('ascii') gdal.VSIFCloseL(f) # print(got_data) gdal.Unlink(tmpfile) assert got_data == """<VRTDataset>
def test_gdalmdimtranslate_array_with_transpose_and_view(): tmpfile = '/vsimem/out.vrt' assert gdal.MultiDimTranslate( tmpfile, 'data/mdim.vrt', arraySpecs=[ 'name=my_variable_with_time_increasing,dstname=foo,transpose=[1,2,0],view=[::-1,1,...]' ]) f = gdal.VSIFOpenL(tmpfile, 'rb') got_data = gdal.VSIFReadL(1, 10000, f).decode('ascii') gdal.VSIFCloseL(f) #print(got_data) gdal.Unlink(tmpfile) assert got_data == """<VRTDataset>
def test_gdalmdimtranslate_classic_to_multidim(): tmpfile = '/vsimem/out.vrt' tmpgtifffile = '/vsimem/tmp.tif' ds = gdal.Translate(tmpgtifffile, '../gcore/data/byte.tif') ds.SetSpatialRef(None) ds = None assert gdal.MultiDimTranslate( tmpfile, tmpgtifffile, arraySpecs=['band=1,dstname=ar,view=[newaxis,...]']) f = gdal.VSIFOpenL(tmpfile, 'rb') got_data = gdal.VSIFReadL(1, 10000, f).decode('utf-8') gdal.VSIFCloseL(f) #print(got_data) gdal.Unlink(tmpfile) gdal.Unlink(tmpgtifffile) assert got_data == """<VRTDataset>
def test_gdalmdimtranslate_subset(): tmpfile = '/vsimem/out.vrt' with gdaltest.error_handler(): assert not gdal.MultiDimTranslate( tmpfile, 'data/mdim.vrt', subsetSpecs=['latitude(']) assert not gdal.MultiDimTranslate( tmpfile, 'data/mdim.vrt', subsetSpecs=['latitude(1']) assert not gdal.MultiDimTranslate( tmpfile, 'data/mdim.vrt', subsetSpecs=['latitude(1,2,3)']) for subset_spec, success, expected_view in [ # Increasing numeric variable ('longitude(-180,-0.01)', False, None), # All below min ('longitude(-180)', False, None), ('longitude(22.51,100)', False, None), # All above max ('longitude(22.51)', False, None), ('longitude(-0.01,22.51)', True, None), # Encompassing whole range ('longitude(0,22.5)', True, None), # Exact range ('longitude(0)', True, '[0]'), ('longitude(2.5)', True, '[1]'), ('longitude(20)', True, '[8]'), ('longitude(22.5)', True, '[9]'), ('longitude(0,0)', True, '[0:1:1]'), ('longitude(-0.01,0.01)', True, '[0:1:1]'), ('longitude(0,0.01)', True, '[0:1:1]'), ('longitude(-0.01,0)', True, '[0:1:1]'), ('longitude(-0.01,22.49)', True, '[0:9:1]'), ('longitude(0.01,22.49)', True, '[1:9:1]'), ('longitude(0.01,22.51)', True, '[1:10:1]'), ('longitude(22.5,22.5)', True, '[9:10:1]'), ('longitude(22.49,22.5)', True, '[9:10:1]'), ('longitude(22.49,22.51)', True, '[9:10:1]'), ('longitude(22.5,22.51)', True, '[9:10:1]'), # Decreasing numeric variable ('latitude(-180,67.49)', False, None), # All below min ('latitude(-180)', False, None), ('latitude(90.01,100)', False, None), # All above max ('latitude(90.01)', False, None), ('latitude(64.49,90.01)', True, None), # Encompassing whole range ('latitude(67.5,90)', True, None), # Exact range ('latitude(67.5)', True, '[9]'), ('latitude(70)', True, '[8]'), ('latitude(87.5)', True, '[1]'), ('latitude(90)', True, '[0]'), ('latitude(70,87.5)', True, '[1:9:1]'), ('latitude(90,90)', True, '[0:1:1]'), ('latitude(89.99,90)', True, '[0:1:1]'), ('latitude(90,90.01)', True, '[0:1:1]'), ('latitude(67.5,67.5)', True, '[9:10:1]'), ('latitude(67.5,67.51)', True, '[9:10:1]'), ('latitude(67.49,67.5)', True, '[9:10:1]'), # Increasing string variable ('time_increasing("2008-01-01","2009-01-01")', False, None ), # All below min ('time_increasing("2008-01-01")', False, None), ('time_increasing("2014-01-01","2016-01-01")', False, None), # All above max ('time_increasing("2014-01-01")', False, None), ('time_increasing("2009-01-01","2014-01-01")', True, None), # Encompassing whole range ('time_increasing("2010-01-01","2013-01-01")', True, None), # Exact range ('time_increasing("2010-01-01")', True, "[0]"), ('time_increasing("2011-01-01")', True, "[1]"), ('time_increasing("2012-01-01")', True, "[2]"), ('time_increasing("2013-01-01")', True, "[3]"), ('time_increasing("2009-12-31","2010-01-02")', True, "[0:1:1]"), ('time_increasing("2009-12-13","2010-01-01")', True, "[0:1:1]"), ('time_increasing("2010-01-01","2010-01-01")', True, "[0:1:1]"), ('time_increasing("2010-01-01","2010-01-02")', True, "[0:1:1]"), ('time_increasing("2011-01-01","2012-01-01")', True, "[1:3:1]"), ('time_increasing("2012-12-31","2013-01-02")', True, "[3:4:1]"), ('time_increasing("2012-12-13","2013-01-01")', True, "[3:4:1]"), ('time_increasing("2013-01-01","2013-01-01")', True, "[3:4:1]"), ('time_increasing("2013-01-01","2013-01-02")', True, "[3:4:1]"), # Decreasing string variable ('time_decreasing("2008-01-01","2009-01-01")', False, None ), # All below min ('time_decreasing("2008-01-01")', False, None), ('time_decreasing("2014-01-01","2016-01-01")', False, None), # All above max ('time_decreasing("2014-01-01")', False, None), ('time_decreasing("2009-01-01","2014-01-01")', True, None), # Encompassing whole range ('time_decreasing("2010-01-01","2013-01-01")', True, None), # Exact range ('time_decreasing("2010-01-01")', True, "[3]"), ('time_decreasing("2011-01-01")', True, "[2]"), ('time_decreasing("2012-01-01")', True, "[1]"), ('time_decreasing("2013-01-01")', True, "[0]"), ('time_decreasing("2009-12-31","2010-01-02")', True, "[3:4:1]"), ('time_decreasing("2009-12-13","2010-01-01")', True, "[3:4:1]"), ('time_decreasing("2010-01-01","2010-01-01")', True, "[3:4:1]"), ('time_decreasing("2010-01-01","2010-01-02")', True, "[3:4:1]"), ('time_decreasing("2011-01-01","2012-01-01")', True, "[1:3:1]"), ('time_decreasing("2012-12-31","2013-01-02")', True, "[0:1:1]"), ('time_decreasing("2012-12-13","2013-01-01")', True, "[0:1:1]"), ('time_decreasing("2013-01-01","2013-01-01")', True, "[0:1:1]"), ('time_decreasing("2013-01-01","2013-01-02")', True, "[0:1:1]"), ]: with gdaltest.error_handler(): res = gdal.MultiDimTranslate( tmpfile, 'data/mdim.vrt', arraySpecs=[subset_spec[0:subset_spec.find('(')]], subsetSpecs=[subset_spec]) is not None assert res == success, subset_spec if not success: continue f = gdal.VSIFOpenL(tmpfile, 'rb') got_data = gdal.VSIFReadL(1, 10000, f).decode('ascii') gdal.VSIFCloseL(f) #print(got_data)/ gdal.Unlink(tmpfile) if expected_view: assert expected_view in got_data, subset_spec else: assert 'SourceView' not in got_data, subset_spec assert gdal.MultiDimTranslate( tmpfile, 'data/mdim.vrt', subsetSpecs=['latitude(70,87.5)', 'time_increasing("2012-01-01")']) f = gdal.VSIFOpenL(tmpfile, 'rb') got_data = gdal.VSIFReadL(1, 10000, f).decode('ascii') gdal.VSIFCloseL(f) #print(got_data) gdal.Unlink(tmpfile) assert got_data == """<VRTDataset>