def test_ogr_pgdump_13(): tests = [ [ ogr.wkbUnknown, [], 'POINT ZM (1 2 3 4)', ["'GEOMETRY',2)", "0101000000000000000000F03F0000000000000040"] ], [ ogr.wkbUnknown, ['GEOM_TYPE=geography'], 'POINT ZM (1 2 3 4)', [ "geography(GEOMETRY", "0101000000000000000000F03F0000000000000040" ] ], [ ogr.wkbUnknown, ['DIM=XYZ'], 'POINT ZM (1 2 3 4)', [ "'GEOMETRY',3)", "0101000080000000000000F03F00000000000000400000000000000840" ] ], [ ogr.wkbUnknown, ['DIM=XYZ', 'GEOM_TYPE=geography'], 'POINT ZM (1 2 3 4)', [ "geography(GEOMETRYZ,", "0101000080000000000000F03F00000000000000400000000000000840" ] ], [ ogr.wkbPoint, ['DIM=XYZ'], 'POINT ZM (1 2 3 4)', [ "'POINT',3)", "0101000080000000000000F03F00000000000000400000000000000840" ] ], [ ogr.wkbPoint25D, [], 'POINT ZM (1 2 3 4)', [ "'POINT',3)", "0101000080000000000000F03F00000000000000400000000000000840" ] ], [ ogr.wkbPoint, ['DIM=XYZ', 'GEOM_TYPE=geography'], 'POINT ZM (1 2 3 4)', [ "geography(POINTZ,", "0101000080000000000000F03F00000000000000400000000000000840" ] ], [ ogr.wkbUnknown, ['DIM=XYM'], 'POINT ZM (1 2 3 4)', [ "'GEOMETRY',3)", "0101000040000000000000F03F00000000000000400000000000001040" ] ], [ ogr.wkbUnknown, ['DIM=XYM', 'GEOM_TYPE=geography'], 'POINT ZM (1 2 3 4)', [ "geography(GEOMETRYM,", "0101000040000000000000F03F00000000000000400000000000001040" ] ], [ ogr.wkbPoint, ['DIM=XYM'], 'POINT ZM (1 2 3 4)', [ "'POINTM',3)", "0101000040000000000000F03F00000000000000400000000000001040" ] ], [ ogr.wkbPointM, [], 'POINT ZM (1 2 3 4)', [ "'POINTM',3)", "0101000040000000000000F03F00000000000000400000000000001040" ] ], [ ogr.wkbPoint, ['DIM=XYM', 'GEOM_TYPE=geography'], 'POINT ZM (1 2 3 4)', [ "geography(POINTM,", "0101000040000000000000F03F00000000000000400000000000001040" ] ], [ ogr.wkbUnknown, ['DIM=XYZM'], 'POINT ZM (1 2 3 4)', [ "'GEOMETRY',4)", "01010000C0000000000000F03F000000000000004000000000000008400000000000001040" ] ], [ ogr.wkbUnknown, ['DIM=XYZM', 'GEOM_TYPE=geography'], 'POINT ZM (1 2 3 4)', [ "geography(GEOMETRYZM,", "01010000C0000000000000F03F000000000000004000000000000008400000000000001040" ] ], [ ogr.wkbPoint, ['DIM=XYZM'], 'POINT ZM (1 2 3 4)', [ "'POINT',4)", "01010000C0000000000000F03F000000000000004000000000000008400000000000001040" ] ], [ ogr.wkbPointZM, [], 'POINT ZM (1 2 3 4)', [ "'POINT',4)", "01010000C0000000000000F03F000000000000004000000000000008400000000000001040" ] ], [ ogr.wkbPoint, ['DIM=XYZM', 'GEOM_TYPE=geography'], 'POINT ZM (1 2 3 4)', [ "geography(POINTZM,", "01010000C0000000000000F03F000000000000004000000000000008400000000000001040" ] ], ] for (geom_type, options, wkt, expected_strings) in tests: ds = ogr.GetDriverByName('PGDump').CreateDataSource( '/vsimem/ogr_pgdump_13.sql', options=['LINEFORMAT=LF']) lyr = ds.CreateLayer('test', geom_type=geom_type, options=options) f = ogr.Feature(lyr.GetLayerDefn()) f.SetGeometryDirectly(ogr.CreateGeometryFromWkt(wkt)) lyr.CreateFeature(f) f = None ds = None f = gdal.VSIFOpenL('/vsimem/ogr_pgdump_13.sql', 'rb') sql = gdal.VSIFReadL(1, 10000, f).decode('utf8') gdal.VSIFCloseL(f) gdal.Unlink('/vsimem/ogr_pgdump_13.sql') for expected_string in expected_strings: assert expected_string in sql, (geom_type, options, wkt, expected_string) if 'GEOM_TYPE=geography' in options: continue ds = ogr.GetDriverByName('PGDump').CreateDataSource( '/vsimem/ogr_pgdump_13.sql', options=['LINEFORMAT=LF']) lyr = ds.CreateLayer('test', geom_type=ogr.wkbNone, options=options) lyr.CreateGeomField(ogr.GeomFieldDefn("my_geom", geom_type)) f = ogr.Feature(lyr.GetLayerDefn()) f.SetGeometryDirectly(ogr.CreateGeometryFromWkt(wkt)) lyr.CreateFeature(f) f = None ds = None f = gdal.VSIFOpenL('/vsimem/ogr_pgdump_13.sql', 'rb') sql = gdal.VSIFReadL(1, 10000, f).decode('utf8') gdal.VSIFCloseL(f) gdal.Unlink('/vsimem/ogr_pgdump_13.sql') for expected_string in expected_strings: assert expected_string in sql, (geom_type, options, wkt, expected_string)
def test_jpeg_cleanup(): gdal.Unlink('tmp/albania.jpg') gdal.Unlink('tmp/albania.jpg.ovr')
def stats_byte_partial_tiles(): ds = gdal.Translate( '/vsimem/stats_byte_tiled.tif', '../gdrivers/data/small_world.tif', creationOptions=['TILED=YES', 'BLOCKXSIZE=64', 'BLOCKYSIZE=64']) stats = ds.GetRasterBand(1).GetStatistics(0, 1) ds = None gdal.GetDriverByName('GTiff').Delete('/vsimem/stats_byte_tiled.tif') expected_stats = [0.0, 255.0, 50.22115, 67.119029288849973] if stats != expected_stats: gdaltest.post_reason('did not get expected stats') print(stats) print(expected_stats) return 'fail' # Same but with nodata set ds = gdal.Translate( '/vsimem/stats_byte_tiled.tif', '../gdrivers/data/small_world.tif', creationOptions=['TILED=YES', 'BLOCKXSIZE=64', 'BLOCKYSIZE=64']) ds.GetRasterBand(1).SetNoDataValue(0) stats = ds.GetRasterBand(1).GetStatistics(0, 1) ds = None gdal.GetDriverByName('GTiff').Delete('/vsimem/stats_byte_tiled.tif') expected_stats = [1.0, 255.0, 50.311081057390084, 67.14541389488096] expected_stats_32bit = [1.0, 255.0, 50.311081057390084, 67.145413894880946] if stats != expected_stats and stats != expected_stats_32bit: gdaltest.post_reason('did not get expected stats') print(stats) print(expected_stats) return 'fail' # Same but with nodata set but untiled and with non power of 16 block size ds = gdal.Translate('/vsimem/stats_byte_untiled.tif', '../gdrivers/data/small_world.tif', options='-srcwin 0 0 399 200') ds.GetRasterBand(1).SetNoDataValue(0) stats = ds.GetRasterBand(1).GetStatistics(0, 1) ds = None gdal.GetDriverByName('GTiff').Delete('/vsimem/stats_byte_untiled.tif') expected_stats = [1.0, 255.0, 50.378183963744554, 67.184793517649453] if stats != expected_stats: gdaltest.post_reason('did not get expected stats') print(stats) print(expected_stats) return 'fail' ds = gdal.GetDriverByName('GTiff').Create( '/vsimem/stats_byte_tiled.tif', 1000, 512, options=['TILED=YES', 'BLOCKXSIZE=512', 'BLOCKYSIZE=512']) ds.GetRasterBand(1).Fill(255) stats = ds.GetRasterBand(1).GetStatistics(0, 1) ds = None gdal.Unlink('/vsimem/stats_byte_tiled.tif') expected_stats = [255.0, 255.0, 255.0, 0.0] if max([abs(stats[i] - expected_stats[i]) for i in range(4)]) > 1e-15: gdaltest.post_reason('did not get expected stats') print(stats) print(expected_stats) return 'fail' # Non optimized code path ds = gdal.GetDriverByName('MEM').Create('', 1, 1) ds.GetRasterBand(1).WriteRaster(0, 0, 1, 1, struct.pack('B' * 1, 1)) stats = ds.GetRasterBand(1).GetStatistics(0, 1) ds = None expected_stats = [1.0, 1.0, 1.0, 0.0] if max([abs(stats[i] - expected_stats[i]) for i in range(4)]) > 1e-15: gdaltest.post_reason('did not get expected stats') print(stats) print(expected_stats) return 'fail' ds = gdal.GetDriverByName('MEM').Create('', 3, 5) ds.GetRasterBand(1).WriteRaster(0, 0, 3, 1, struct.pack('B' * 3, 20, 30, 50)) ds.GetRasterBand(1).WriteRaster(0, 1, 3, 1, struct.pack('B' * 3, 60, 10, 5)) ds.GetRasterBand(1).WriteRaster(0, 2, 3, 1, struct.pack('B' * 3, 10, 20, 0)) ds.GetRasterBand(1).WriteRaster(0, 3, 3, 1, struct.pack('B' * 3, 10, 20, 255)) ds.GetRasterBand(1).WriteRaster(0, 4, 3, 1, struct.pack('B' * 3, 10, 20, 10)) stats = ds.GetRasterBand(1).GetStatistics(0, 1) ds = None expected_stats = [0.0, 255.0, 35.333333333333336, 60.785597709398971] if max([abs(stats[i] - expected_stats[i]) for i in range(4)]) > 1e-15: gdaltest.post_reason('did not get expected stats') print(stats) print(expected_stats) return 'fail' ds = gdal.GetDriverByName('MEM').Create('', 32 + 2, 2) ds.GetRasterBand(1).Fill(1) ds.GetRasterBand(1).WriteRaster(32, 1, 2, 1, struct.pack('B' * 2, 0, 255)) stats = ds.GetRasterBand(1).GetStatistics(0, 1) ds = None expected_stats = [0.0, 255.0, 4.7205882352941178, 30.576733555893391] if max([abs(stats[i] - expected_stats[i]) for i in range(4)]) > 1e-15: gdaltest.post_reason('did not get expected stats') print(stats) print(expected_stats) return 'fail' ds = gdal.GetDriverByName('MEM').Create('', 32 + 2, 2) ds.GetRasterBand(1).Fill(1) ds.GetRasterBand(1).SetNoDataValue(2) ds.GetRasterBand(1).WriteRaster(32, 1, 2, 1, struct.pack('B' * 2, 0, 255)) stats = ds.GetRasterBand(1).GetStatistics(0, 1) ds = None expected_stats = [0.0, 255.0, 4.7205882352941178, 30.576733555893391] if max([abs(stats[i] - expected_stats[i]) for i in range(4)]) > 1e-15: gdaltest.post_reason('did not get expected stats') print(stats) print(expected_stats) return 'fail' return 'success'
def vsicrypt_2(): if not gdaltest.has_vsicrypt: return 'skip' # Missing key with gdaltest.error_handler(): fp = gdal.VSIFOpenL('/vsicrypt//vsimem/file.bin', 'wb+') if fp is not None: gdaltest.post_reason('fail') return 'fail' # Invalid file with gdaltest.error_handler(): fp = gdal.VSIFOpenL('/vsicrypt/key=DONT_USE_IN_PROD,file=/not_existing/not_existing', 'wb') if fp is not None: gdaltest.post_reason('fail') return 'fail' # Invalid file with gdaltest.error_handler(): fp = gdal.VSIFOpenL('/vsicrypt/key=DONT_USE_IN_PROD,file=/not_existing/not_existing', 'rb') if fp is not None: gdaltest.post_reason('fail') return 'fail' # Invalid file with gdaltest.error_handler(): fp = gdal.VSIFOpenL('/vsicrypt/key=DONT_USE_IN_PROD,file=/not_existing/not_existing', 'ab') if fp is not None: gdaltest.post_reason('fail') return 'fail' # Invalid access with gdaltest.error_handler(): fp = gdal.VSIFOpenL('/vsicrypt/key=DONT_USE_IN_PROD,file=/not_existing/not_existing', 'foo') if fp is not None: gdaltest.post_reason('fail') return 'fail' # Key to short with gdaltest.error_handler(): fp = gdal.VSIFOpenL('/vsicrypt/key=a,file=/vsimem/file.bin', 'wb+') if fp is not None: gdaltest.post_reason('fail') return 'fail' # Invalid signature gdal.FileFromMemBuffer('/vsimem/file.bin', 'foo') with gdaltest.error_handler(): fp = gdal.VSIFOpenL('/vsicrypt/key=DONT_USE_IN_PROD,file=/vsimem/file.bin', 'rb') if fp is not None: gdaltest.post_reason('fail') return 'fail' # Generate empty file fp = gdal.VSIFOpenL('/vsicrypt/key=DONT_USE_IN_PROD,file=/vsimem/file.bin', 'wb') gdal.VSIFCloseL(fp) fp = gdal.VSIFOpenL('/vsicrypt/key=DONT_USE_IN_PROD,file=/vsimem/file.bin', 'rb') if fp is None: gdaltest.post_reason('fail') return 'fail' gdal.VSIFCloseL(fp) fp = gdal.VSIFOpenL('/vsimem/file.bin', 'rb') header = gdal.VSIFReadL(1, 1000, fp) gdal.VSIFCloseL(fp) if len(header) != 46: gdaltest.post_reason('fail') print(len(header)) return 'fail' # Test shortening header for i in range(46): fp = gdal.VSIFOpenL('/vsimem/file.bin', 'wb') gdal.VSIFWriteL(header, 1, 46 - 1 - i, fp) gdal.VSIFCloseL(fp) with gdaltest.error_handler(): fp = gdal.VSIFOpenL('/vsicrypt/key=DONT_USE_IN_PROD,file=/vsimem/file.bin', 'rb') if fp is not None: gdaltest.post_reason('fail') return 'fail' # Test corrupting all bytes of header for i in range(46): for val in (0, 127, 255): fp = gdal.VSIFOpenL('/vsimem/file.bin', 'wb') try: new_byte = chr(val).encode('latin1') except: new_byte = chr(val) header_new = header[0:i] + new_byte + header[i+1:] gdal.VSIFWriteL(header_new, 1, 46, fp) gdal.VSIFCloseL(fp) with gdaltest.error_handler(): fp = gdal.VSIFOpenL('/vsicrypt/key=DONT_USE_IN_PROD,file=' '/vsimem/file.bin', 'rb') if fp is not None: gdal.VSIFCloseL(fp) gdal.SetConfigOption('VSICRYPT_IV', 'TOO_SHORT') with gdaltest.error_handler(): fp = gdal.VSIFOpenL('/vsicrypt/key=DONT_USE_IN_PROD,file=' '/vsimem/file.bin', 'wb') gdal.SetConfigOption('VSICRYPT_IV', None) if fp is not None: gdal.VSIFCloseL(fp) # Inconsistent initial vector. header = struct.pack('B' * 38, 86, 83, 73, 67, 82, 89, 80, 84, # signature 38, 0, # header size 1, # major 0, # minor 0, 2, # sector size 0, # alg 0, # mode 8, # size of IV (should be 16) 32, 13, 169, 71, 154, 208, 22, 32, # IV 0, 0, # size of free text 0, # size of key check 0, 0, 0, 0, 0, 0, 0, 0, # size of unencrypted file 0, 0 # size of extra content ) fp = gdal.VSIFOpenL('/vsimem/file.bin', 'wb') gdal.VSIFWriteL(header, 1, len(header), fp) gdal.VSIFCloseL(fp) with gdaltest.error_handler(): fp = gdal.VSIFOpenL( '/vsicrypt/key=DONT_USE_IN_PROD,file=/vsimem/file.bin', 'rb') if fp is not None: gdaltest.post_reason('fail') return 'fail' # Inconsistent initial vector with key check. header = struct.pack('B' * 39, 86, 83, 73, 67, 82, 89, 80, 84, # signature 39, 0, # header size 1, # major 0, # minor 0, 2, # sector size 0, # alg 0, # mode 8, # size of IV (should be 16) 32, 13, 169, 71, 154, 208, 22, 32, # IV 0, 0, # size of free text 1, # size of key check 0, # key check 0, 0, 0, 0, 0, 0, 0, 0, # size of unencrypted file 0, 0 # size of extra content ) fp = gdal.VSIFOpenL('/vsimem/file.bin', 'wb') gdal.VSIFWriteL(header, 1, len(header), fp) gdal.VSIFCloseL(fp) with gdaltest.error_handler(): fp = gdal.VSIFOpenL('/vsicrypt/key=DONT_USE_IN_PROD,file=/vsimem/file.bin', 'rb') if fp is not None: gdaltest.post_reason('fail') return 'fail' # Test reading with wrong key fp = gdal.VSIFOpenL('/vsicrypt/key=DONT_USE_IN_PROD,file=/vsimem/file.bin', 'wb') gdal.VSIFWriteL('hello', 1, 5, fp) gdal.VSIFCloseL(fp) fp = gdal.VSIFOpenL('/vsicrypt/key=dont_use_in_prod,file=/vsimem/file.bin', 'rb') content = gdal.VSIFReadL(1, 5, fp).decode('latin1') gdal.VSIFCloseL(fp) if content == 'hello': gdaltest.post_reason('fail') return 'fail' with gdaltest.error_handler(): fp = gdal.VSIFOpenL('/vsicrypt/key=short_key,file=/vsimem/file.bin', 'ab') if fp is not None: gdaltest.post_reason('fail') return 'fail' # Test reading with wrong key with add_key_check fp = gdal.VSIFOpenL('/vsicrypt/key=DONT_USE_IN_PROD,add_key_check=yes,file=/vsimem/file.bin', 'wb') gdal.VSIFWriteL('hello', 1, 5, fp) gdal.VSIFCloseL(fp) with gdaltest.error_handler(): fp = gdal.VSIFOpenL('/vsicrypt/key=dont_use_in_prod,file=/vsimem/file.bin', 'rb') if fp is not None: gdaltest.post_reason('fail') return 'fail' with gdaltest.error_handler(): fp = gdal.VSIFOpenL('/vsicrypt/key=short_key,file=/vsimem/file.bin', 'ab') if fp is not None: gdaltest.post_reason('fail') return 'fail' with gdaltest.error_handler(): fp = gdal.VSIFOpenL('/vsicrypt/key=dont_use_in_prod,file=/vsimem/file.bin', 'ab') if fp is not None: gdaltest.post_reason('fail') return 'fail' # Test creating with potentially not build-in alg: with gdaltest.error_handler(): fp = gdal.VSIFOpenL('/vsicrypt/alg=blowfish,key=DONT_USE_IN_PROD,file=/vsimem/file.bin', 'wb') if fp is not None: gdal.VSIFCloseL(fp) # Invalid sector_size with gdaltest.error_handler(): fp = gdal.VSIFOpenL('/vsicrypt/key=DONT_USE_IN_PROD,sector_size=1,file=/vsimem/file.bin', 'wb') if fp is not None: gdaltest.post_reason('fail') return 'fail' # Sector size (16) should be at least twice larger than the block size (16) in CBC_CTS with gdaltest.error_handler(): fp = gdal.VSIFOpenL('/vsicrypt/key=DONT_USE_IN_PROD,sector_size=16,mode=CBC_CTS,file=/vsimem/file.bin', 'wb') if fp is not None: gdaltest.post_reason('fail') return 'fail' gdal.Unlink('/vsimem/file.bin') return 'success'
def ogr_plscenes_2(): if gdaltest.plscenes_drv is None: return 'skip' gdal.FileFromMemBuffer('/vsimem/root', '{"ortho":"/vsimem/root/ortho/"}') gdal.FileFromMemBuffer( '/vsimem/valid_root_but_invalid_child', '{"ortho":"/vsimem/valid_root_but_invalid_child/invalid_child/"}') # Error: no API_KEY gdal.PushErrorHandler() gdal.SetConfigOption('PL_URL', '/vsimem/root/') ds = gdal.OpenEx('PLScenes:', gdal.OF_VECTOR) gdal.SetConfigOption('PL_URL', None) gdal.PopErrorHandler() if ds is not None: gdaltest.post_reason('fail') return 'fail' # Error case gdal.PushErrorHandler() gdal.SetConfigOption('PL_URL', '/vsimem/does_not_exist/') ds = gdal.OpenEx('PLScenes:', gdal.OF_VECTOR, open_options=['API_KEY=foo']) gdal.SetConfigOption('PL_URL', None) gdal.PopErrorHandler() if ds is not None: gdaltest.post_reason('fail') return 'fail' # Error case gdal.SetConfigOption('PL_URL', '/vsimem/valid_root_but_invalid_child/') ds = gdal.OpenEx('PLScenes:', gdal.OF_VECTOR, open_options=['API_KEY=foo']) gdal.SetConfigOption('PL_URL', None) gdal.PushErrorHandler() ret = ds.GetLayer(0).GetFeatureCount() gdal.PopErrorHandler() if ret != 0: gdaltest.post_reason('fail') return 'fail' # Error cases for ortho_json in [ """{}""", """{ invalid_json,""", """{ "type": "FeatureCollection" }""", """{ "type": "FeatureCollection", "count": -1 }""", """{ "type": "FeatureCollection", "count": 0 }""", """{ "type": "FeatureCollection", "count": 1 }""", """{ "type": "FeatureCollection", "count": 1, "features": [] }""", ]: gdal.FileFromMemBuffer('/vsimem/root/ortho/?count=1000', ortho_json) gdal.SetConfigOption('PL_URL', '/vsimem/root/') ds = gdal.OpenEx('PLScenes:', gdal.OF_VECTOR, open_options=['API_KEY=foo']) gdal.SetConfigOption('PL_URL', None) lyr = ds.GetLayer(0) gdal.PushErrorHandler() f = lyr.GetNextFeature() gdal.PopErrorHandler() if f: gdaltest.post_reason('fail') return 'fail' gdal.FileFromMemBuffer('/vsimem/root/ortho/?count=1', """{ "count": 2, }""") gdal.FileFromMemBuffer( '/vsimem/root/ortho/?count=1000', """{ "type": "FeatureCollection", "count": 2, "features": [ { "type": "Feature", "id": "my_id", "geometry": { "coordinates": [ [ [2,49],[2,50],[3,50],[3,49],[2,49] ] ], "type": "Polygon" }, "properties": { "acquired" : "2015-03-27T12:34:56.123+00", "camera" : { "bit_depth" : 12, "color_mode": "RGB" }, "cloud_cover" : { "estimated" : 0.25 } } } ], "links": { "next" : "/vsimem/root/ortho/?count=1000&page=2" } }""") gdal.FileFromMemBuffer( '/vsimem/root/ortho/?count=1000&page=2', """{ "type": "FeatureCollection", "count": 1, "features": [ { "type": "Feature", "id": "my_id2", "geometry": null, "properties": {} } ], "links": { "next" : null } }""") my_id_only = """{ "type": "FeatureCollection", "count": 1, "features": [ { "type": "Feature", "id": "my_id", "geometry": { "coordinates": [ [ [2,49],[2,50],[3,50],[3,49],[2,49] ] ], "type": "Polygon" }, "properties": { "acquired" : "2015-03-27T12:34:56.123+00", "camera" : { "bit_depth" : 12, "color_mode": "RGB" }, "cloud_cover" : { "estimated" : 0.25 } } } ], "links": { "next" : null } }""" gdal.FileFromMemBuffer( '/vsimem/root/ortho/?count=1&intersects=POINT%282.5%2049.5%29', my_id_only) gdal.FileFromMemBuffer( '/vsimem/root/ortho/?count=1&intersects=POLYGON%20%28%282%2049%2C2%2050%2C3%2050%2C3%2049%2C2%2049%29%29', my_id_only) gdal.FileFromMemBuffer( '/vsimem/root/ortho/?count=1000&intersects=POINT%282.5%2049.5%29', my_id_only) gdal.FileFromMemBuffer( '/vsimem/root/ortho/?count=1000&camera.color_mode.eq=RGB&acquired.gte=2015-03-27T12:34:56&acquired.lt=2015-03-27T12:34:57&cloud_cover.estimated.gt=0.20000000&camera.bit_depth.lte=12&camera.bit_depth.gte=12&camera.bit_depth.lt=13', my_id_only) gdal.FileFromMemBuffer( '/vsimem/root/ortho/?count=1&camera.color_mode.eq=RGB&acquired.gte=2015-03-27T12:34:56&acquired.lt=2015-03-27T12:34:57&cloud_cover.estimated.gt=0.20000000&camera.bit_depth.lte=12&camera.bit_depth.gte=12&camera.bit_depth.lt=13', my_id_only) gdal.SetConfigOption('PL_URL', '/vsimem/root/') gdal.PushErrorHandler() ds = gdal.OpenEx('PLScenes:api_key=foo,unsupported_option=val', gdal.OF_VECTOR) gdal.PopErrorHandler() gdal.SetConfigOption('PL_URL', None) if ds is not None or gdal.GetLastErrorMsg().find( 'Unsupported option unsupported_option') < 0: gdaltest.post_reason('fail') print(gdal.GetLastErrorMsg()) return 'fail' gdal.SetConfigOption('PL_URL', '/vsimem/root/') ds = gdal.OpenEx('PLScenes:', gdal.OF_VECTOR, open_options=['API_KEY=foo']) gdal.SetConfigOption('PL_URL', None) if ds is None: gdaltest.post_reason('fail') return 'fail' if ds.GetLayerCount() != 1: gdaltest.post_reason('fail') return 'fail' if ds.GetLayer(-1) or ds.GetLayer(1): gdaltest.post_reason('fail') return 'fail' lyr = ds.GetLayerByName('ortho') if lyr.TestCapability(ogr.OLCFastFeatureCount) != 1 or \ lyr.TestCapability(ogr.OLCStringsAsUTF8) != 1 or \ lyr.TestCapability(ogr.OLCRandomRead) != 0: gdaltest.post_reason('fail') return 'fail' if lyr.GetFeatureCount() != 2: gdaltest.post_reason('fail') return 'fail' ext = lyr.GetExtent() if ext != (2.0, 3.0, 49.0, 50.0): gdaltest.post_reason('fail') print(ext) return 'fail' #lyr.ResetReading() f = lyr.GetNextFeature() if f.id != 'my_id' or f.acquired != '2015/03/27 12:34:56.123+00' or \ f['cloud_cover.estimated'] != 0.25: gdaltest.post_reason('fail') f.DumpReadable() return 'fail' if f.GetGeometryRef().ExportToWkt( ) != 'MULTIPOLYGON (((2 49,2 50,3 50,3 49,2 49)))': gdaltest.post_reason('fail') f.DumpReadable() return 'fail' f = lyr.GetNextFeature() if f.id != 'my_id2': gdaltest.post_reason('fail') f.DumpReadable() return 'fail' if lyr.GetFeatureCount() != 2: gdaltest.post_reason('fail') return 'fail' f = lyr.GetNextFeature() if f is not None: gdaltest.post_reason('fail') f.DumpReadable() return 'fail' lyr.SetSpatialFilterRect(-1000, -1000, 1000, 1000) if lyr.GetFeatureCount() != 2: gdaltest.post_reason('fail') return 'fail' lyr.SetSpatialFilterRect(2.5, 49.5, 2.5, 49.5) f = lyr.GetNextFeature() if f.id != 'my_id': gdaltest.post_reason('fail') f.DumpReadable() return 'fail' lyr.SetSpatialFilter(None) # Filter that can be passed to server side filterstring = "\"camera.color_mode\" = 'RGB' AND acquired = '2015/03/27 12:34:56' AND \"cloud_cover.estimated\" > 0.2 AND \"camera.bit_depth\" <= 12 AND \"camera.bit_depth\" >= 12 AND \"camera.bit_depth\" < 13" lyr.SetAttributeFilter(filterstring) if lyr.GetFeatureCount() != 1: gdaltest.post_reason('fail') return 'fail' f = lyr.GetNextFeature() if f.id != 'my_id': gdaltest.post_reason('fail') f.DumpReadable() return 'fail' f = lyr.GetNextFeature() if f is not None: gdaltest.post_reason('fail') f.DumpReadable() return 'fail' # Same but invert GetNextFeature() and GetFeatureCount() lyr.SetAttributeFilter(filterstring) f = lyr.GetNextFeature() if f.id != 'my_id': gdaltest.post_reason('fail') f.DumpReadable() return 'fail' if lyr.GetFeatureCount() != 1: gdaltest.post_reason('fail') return 'fail' f = lyr.GetNextFeature() if f is not None: gdaltest.post_reason('fail') f.DumpReadable() return 'fail' # Filter that can be - partly - passed to server side filterstring = "fid = 1 AND \"camera.color_mode\" = 'RGB' AND acquired = '2015/03/27 12:34:56' AND \"cloud_cover.estimated\" > 0.2 AND \"camera.bit_depth\" <= 12 AND \"camera.bit_depth\" >= 12 AND \"camera.bit_depth\" < 13" lyr.SetAttributeFilter(filterstring) if lyr.GetFeatureCount() != 1: gdaltest.post_reason('fail') return 'fail' f = lyr.GetNextFeature() if f.id != 'my_id': gdaltest.post_reason('fail') f.DumpReadable() return 'fail' f = lyr.GetNextFeature() if f is not None: gdaltest.post_reason('fail') f.DumpReadable() return 'fail' # Same but invert GetNextFeature() and GetFeatureCount() lyr.SetAttributeFilter(filterstring) f = lyr.GetNextFeature() if f.id != 'my_id': gdaltest.post_reason('fail') f.DumpReadable() return 'fail' f = lyr.GetNextFeature() if f is not None: gdaltest.post_reason('fail') f.DumpReadable() return 'fail' if lyr.GetFeatureCount() != 1: gdaltest.post_reason('fail') return 'fail' # Filter that cannot be passed to server side filterstring = "fid = 1" lyr.SetAttributeFilter(filterstring) if lyr.GetFeatureCount() != 1: gdaltest.post_reason('fail') return 'fail' f = lyr.GetNextFeature() if f.id != 'my_id': gdaltest.post_reason('fail') f.DumpReadable() return 'fail' # Same but invert GetNextFeature() and GetFeatureCount() lyr.SetAttributeFilter(filterstring) f = lyr.GetNextFeature() if f.id != 'my_id': gdaltest.post_reason('fail') f.DumpReadable() return 'fail' if lyr.GetFeatureCount() != 1: gdaltest.post_reason('fail') return 'fail' # Filter on id gdal.FileFromMemBuffer( '/vsimem/root/ortho/my_id', """{ "type": "Feature", "id": "my_id", "geometry": { "coordinates": [ [ [2,49],[2,50],[3,50],[3,49],[2,49] ] ], "type": "Polygon" }, "properties": { "acquired" : "2015-03-27T12:34:56.123+00", "camera" : { "bit_depth" : 12, "color_mode": "RGB" }, "cloud_cover" : { "estimated" : 0.25 } } }""") filterstring = "id = 'my_id'" lyr.SetAttributeFilter(filterstring) if lyr.GetFeatureCount() != 1: gdaltest.post_reason('fail') return 'fail' f = lyr.GetNextFeature() if f.id != 'my_id': gdaltest.post_reason('fail') f.DumpReadable() return 'fail' # Same but invert GetNextFeature() and GetFeatureCount() lyr.SetAttributeFilter(filterstring) f = lyr.GetNextFeature() if f.id != 'my_id': gdaltest.post_reason('fail') f.DumpReadable() return 'fail' if lyr.GetFeatureCount() != 1: gdaltest.post_reason('fail') return 'fail' gdal.ErrorReset() lyr.SetAttributeFilter("id = 'non_existing_id'") if lyr.GetFeatureCount() != 0 or gdal.GetLastErrorMsg() != '': gdaltest.post_reason('fail') return 'fail' f = lyr.GetNextFeature() if f is not None or gdal.GetLastErrorMsg() != '': gdaltest.post_reason('fail') f.DumpReadable() return 'fail' # Unset attribute filter lyr.SetAttributeFilter(None) f = lyr.GetNextFeature() if f.id != 'my_id': gdaltest.post_reason('fail') f.DumpReadable() return 'fail' # Regular ExecuteSQL sql_lyr = ds.ExecuteSQL("select * from ortho") f = sql_lyr.GetNextFeature() if f.id != 'my_id': gdaltest.post_reason('fail') f.DumpReadable() return 'fail' ds.ReleaseResultSet(sql_lyr) # Test ordered by optimization gdal.FileFromMemBuffer( '/vsimem/root/ortho/?count=1000&order_by=acquired%20asc', """{ "type": "FeatureCollection", "count": 2, "features": [ { "type": "Feature", "id": "my_id2", "geometry": null, "properties": {} } ], "links": { "next" : null } }""") sql_lyr = ds.ExecuteSQL("select * from ortho order by acquired asc") f = sql_lyr.GetNextFeature() if f.id != 'my_id2': gdaltest.post_reason('fail') f.DumpReadable() return 'fail' ds.ReleaseResultSet(sql_lyr) # Test spat option ds = None gdal.SetConfigOption('PL_URL', '/vsimem/root/') ds = gdal.OpenEx('PLScenes:spat=2 49 3 50', gdal.OF_VECTOR, open_options=['API_KEY=foo']) gdal.SetConfigOption('PL_URL', None) lyr = ds.GetLayer(0) if lyr.GetFeatureCount() != 1: gdaltest.post_reason('fail') return 'fail' lyr.SetSpatialFilterRect(2.5, 49.5, 2.5, 49.5) if lyr.GetFeatureCount() != 1: gdaltest.post_reason('fail') return 'fail' ds = None gdal.SetConfigOption('PL_URL', '/vsimem/root/') ds = gdal.OpenEx('PLScenes:spat=2.5 49.5 2.5 49.5', gdal.OF_VECTOR, open_options=['API_KEY=foo']) gdal.SetConfigOption('PL_URL', None) lyr = ds.GetLayer(0) if lyr.GetFeatureCount() != 1: gdaltest.post_reason('fail') return 'fail' ds = None gdal.Unlink('/vsimem/root') gdal.Unlink('/vsimem/valid_root_but_invalid_child') gdal.Unlink('/vsimem/root/ortho/?count=1') gdal.Unlink('/vsimem/root/ortho/?count=1000') gdal.Unlink('/vsimem/root/ortho/?count=1000&page=2') gdal.Unlink('/vsimem/root/ortho/?count=1&intersects=POINT%282.5%2049.5%29') gdal.Unlink( '/vsimem/root/ortho/?count=1&intersects=POLYGON%20%28%282%2049%2C2%2050%2C3%2050%2C3%2049%2C2%2049%29%29' ) gdal.Unlink( '/vsimem/root/ortho/?count=1000&intersects=POINT%282.5%2049.5%29') gdal.Unlink( '/vsimem/root/ortho/?count=1&camera.color_mode.eq=RGB&acquired.gte=2015-03-27T12:34:56&acquired.lt=2015-03-27T12:34:57&cloud_cover.estimated.gt=0.20000000&camera.bit_depth.lte=12&camera.bit_depth.gte=12&camera.bit_depth.lt=13' ) gdal.Unlink( '/vsimem/root/ortho/?count=1000&camera.color_mode.eq=RGB&acquired.gte=2015-03-27T12:34:56&acquired.lt=2015-03-27T12:34:57&cloud_cover.estimated.gt=0.20000000&camera.bit_depth.lte=12&camera.bit_depth.gte=12&camera.bit_depth.lt=13' ) gdal.Unlink('/vsimem/root/ortho/?count=1000&order_by=acquired%20asc') gdal.Unlink('/vsimem/root/ortho/my_id') return 'success'
def remove_vsis(paths) -> None: for path in paths: gdal.Unlink(path)
def vsicrypt_4(): if not gdaltest.has_vsicrypt: return 'skip' test_file = '/vsicrypt/key=DONT_USE_IN_PROD,sector_size=32,file=/vsimem/file_enc.bin' ref_file = '/vsimem/file.bin' for seed in range(1000): gdal.Unlink(test_file) gdal.Unlink(ref_file) test_f = gdal.VSIFOpenL(test_file, 'wb+') ref_f = gdal.VSIFOpenL(ref_file, 'wb+') import random random.seed(seed) for i in range(20): random_offset = random.randint(0,1000) gdal.VSIFSeekL(test_f, random_offset, 0) gdal.VSIFSeekL(ref_f, random_offset, 0) random_size = random.randint(1,80) random_content = ''.join([ chr(40 + int(10 * random.random()) ) for i in range(random_size) ]) gdal.VSIFWriteL(random_content, 1, random_size, test_f) gdal.VSIFWriteL(random_content, 1, random_size, ref_f) if random.randint(0,1) == 0: random_offset = random.randint(0,1500) gdal.VSIFSeekL(test_f, random_offset, 0) gdal.VSIFSeekL(ref_f, random_offset, 0) random_size = random.randint(1,80) test_content = gdal.VSIFReadL(1, random_size, test_f) ref_content = gdal.VSIFReadL(1, random_size, ref_f) if test_content != ref_content: print(seed) print('Test content (%d):' % len(test_content)) print(test_content) print('') print('Ref content (%d):' % len(ref_content)) print(ref_content) return 'fail' gdal.VSIFSeekL(test_f, 0, 0) gdal.VSIFSeekL(ref_f, 0, 0) test_content = gdal.VSIFReadL(1, 100000, test_f) ref_content = gdal.VSIFReadL(1, 100000, ref_f) if test_content != ref_content: print(seed) print('Test content (%d):' % len(test_content)) print(test_content) print('') print('Ref content (%d):' % len(ref_content)) print(ref_content) return 'fail' gdal.Unlink(test_file) gdal.Unlink(ref_file) return 'success'
def ecrgtoc_4(): toc_xml = """<Table_of_Contents> <file_header file_status="new"> <file_name>TOC.xml</file_name> </file_header> <product product_title="ProductTitle"> <disc id="DiscId"> <frame_list number_of_frames="2"> <scale size="1:500 K"> <frame name="000000009s0013.lf2"> <frame_path>clfc\\2</frame_path> <frame_version>001</frame_version> <frame_chart_type>lf</frame_chart_type> <frame_zone>2</frame_zone> </frame> </scale> <scale size="1:1000 K"> <frame name="000000009s0013.lf2"> <frame_path>clfc\\2</frame_path> <frame_version>001</frame_version> <frame_chart_type>lf</frame_chart_type> <frame_zone>2</frame_zone> </frame> </scale> </frame_list> </disc> <disc id="DiscId2"> <frame_list number_of_frames="1"> <scale size="1:500 K"> <frame name="000000009t0013.lf2"> <frame_path>clfc\\2</frame_path> <frame_version>001</frame_version> <frame_chart_type>lf</frame_chart_type> <frame_zone>2</frame_zone> </frame> </scale> </frame_list> </disc> </product> <extension_list> <extension code="LF"> <chart_code>LF</chart_code> <chart_type>1:500 K (LFC Day)</chart_type> <chart_scale>1:500 K</chart_scale> <chart_description>LFC Day</chart_description> </extension> </extension_list> </Table_of_Contents>""" f = gdal.VSIFOpenL('/vsimem/TOC.xml', 'wb') gdal.VSIFWriteL(toc_xml, 1, len(toc_xml), f) gdal.VSIFCloseL(f) ds = gdal.Open('/vsimem/TOC.xml') if ds is None: return 'fail' if ds.RasterCount != 0: gdaltest.post_reason('bad raster count') return 'fail' expected_gt = (-85.43147208121826, 0.00059486040609137061, 0.0, 37.241379310344833, 0.0, -0.00044985604606525913) gt = ds.GetGeoTransform() for i in range(6): if abs(gt[i] - expected_gt[i]) > 1e-10: gdaltest.post_reason('did not get expected geotransform') print(gt) return 'fail' wkt = ds.GetProjectionRef() if wkt.find('WGS 84') == -1: gdaltest.post_reason('did not get expected SRS') print(wkt) return 'fail' filelist = ds.GetFileList() if len(filelist) != 4: gdaltest.post_reason('did not get expected filelist') print(filelist) return 'fail' subdatasets = ds.GetMetadata('SUBDATASETS') if len(subdatasets) != 6: gdaltest.post_reason('did not get expected subdatasets') print(filelist) return 'fail' ds = None ds = gdal.Open( 'ECRG_TOC_ENTRY:ProductTitle:DiscId:1_500_K:/vsimem/TOC.xml') if ds is None: gdaltest.post_reason('did not get subdataset') return 'fail' ds = None ds = gdal.Open( 'ECRG_TOC_ENTRY:ProductTitle:DiscId:1_1000_K:/vsimem/TOC.xml') if ds is None: gdaltest.post_reason('did not get subdataset') return 'fail' ds = None ds = gdal.Open( 'ECRG_TOC_ENTRY:ProductTitle:DiscId2:1_500_K:/vsimem/TOC.xml') if ds is None: gdaltest.post_reason('did not get subdataset') return 'fail' ds = None gdal.PushErrorHandler('CPLQuietErrorHandler') ds = gdal.Open('ECRG_TOC_ENTRY:ProductTitle:DiscId:/vsimem/TOC.xml') gdal.PopErrorHandler() if ds is not None: gdaltest.post_reason('should not have got subdataset') return 'fail' gdal.Unlink('/vsimem/TOC.xml') return 'success'
def generate_libkml(filename): try: os.unlink(filename) except: pass content = """eiffer_tower_normal:SYMBOL(id:"http://upload.wikimedia.org/wikipedia/commons/thumb/7/78/Eiffel_Tower_from_north_Avenue_de_New_York%2C_Aug_2010.jpg/220px-Eiffel_Tower_from_north_Avenue_de_New_York%2C_Aug_2010.jpg");LABEL(c:#FF0000FF) eiffer_tower_highlight:SYMBOL(id:"http://upload.wikimedia.org/wikipedia/commons/thumb/7/78/Eiffel_Tower_from_north_Avenue_de_New_York%2C_Aug_2010.jpg/220px-Eiffel_Tower_from_north_Avenue_de_New_York%2C_Aug_2010.jpg");LABEL(c:#0000FFFF)""" gdal.FileFromMemBuffer("/vsimem/style.txt", content) style_table = ogr.StyleTable() style_table.LoadStyleTable("/vsimem/style.txt") gdal.Unlink("/vsimem/style.txt") ds_options = [ 'author_name=Even Rouault', 'author_uri=http://gdal.org', '[email protected]', 'link=http://gdal.org', 'phonenumber=tel:12345678', 'NLC_MINREFRESHPERIOD=3600', 'NLC_MAXSESSIONLENGTH=-1', 'NLC_COOKIE=cookie', 'NLC_MESSAGE=message', 'NLC_LINKNAME=linkname', 'NLC_LINKDESCRIPTION=linkdescription', 'NLC_LINKSNIPPET=linksnippet', 'NLC_EXPIRES=2014-12-31T23:59:59Z', 'LISTSTYLE_ICON_HREF=http://www.gdal.org/gdalicon.png', 'eiffel_tower_normal_balloonstyle_bgcolor=#FFFF00' ] ds = ogr.GetDriverByName('LIBKML').CreateDataSource(filename, options=ds_options) ds.SetStyleTable(style_table) lyr_options = [ 'LOOKAT_LONGITUDE=2.2945', 'LOOKAT_LATITUDE=48.85825', 'LOOKAT_RANGE=300', 'LOOKAT_ALTITUDE=30', 'LOOKAT_HEADING=0', 'LOOKAT_TILT=70', 'LOOKAT_ALTITUDEMODE=relativeToGround', 'ADD_REGION=YES', 'REGION_MIN_LOD_PIXELS=128', 'REGION_MAX_LOD_PIXELS=10000000', \ 'REGION_MIN_FADE_EXTENT=1', 'REGION_MAX_FADE_EXTENT=2', 'SO_HREF=http://www.gdal.org/gdalicon.png', 'LISTSTYLE_ICON_HREF=http://www.gdal.org/gdalicon.png'] lyr = ds.CreateLayer('test', options=lyr_options) lyr.CreateField(ogr.FieldDefn('name', ogr.OFTString)) lyr.CreateField(ogr.FieldDefn('description', ogr.OFTString)) lyr.CreateField(ogr.FieldDefn('nom_francais', ogr.OFTString)) lyr.CreateField(ogr.FieldDefn('int_value', ogr.OFTInteger)) lyr.CreateField(ogr.FieldDefn('double_value', ogr.OFTReal)) lyr.CreateField(ogr.FieldDefn('timestamp', ogr.OFTDateTime)) lyr.CreateField(ogr.FieldDefn('begin', ogr.OFTDateTime)) lyr.CreateField(ogr.FieldDefn('end', ogr.OFTDateTime)) lyr.CreateField(ogr.FieldDefn('snippet', ogr.OFTString)) lyr.CreateField(ogr.FieldDefn('altitudeMode', ogr.OFTString)) lyr.CreateField(ogr.FieldDefn('extrude', ogr.OFTInteger)) lyr.CreateField(ogr.FieldDefn('tessellate', ogr.OFTInteger)) lyr.CreateField(ogr.FieldDefn('model', ogr.OFTString)) lyr.CreateField(ogr.FieldDefn("scale_x", ogr.OFTReal)) lyr.CreateField(ogr.FieldDefn("scale_y", ogr.OFTReal)) lyr.CreateField(ogr.FieldDefn("scale_z", ogr.OFTReal)) lyr.CreateField(ogr.FieldDefn("heading", ogr.OFTReal)) lyr.CreateField(ogr.FieldDefn("tilt", ogr.OFTReal)) lyr.CreateField(ogr.FieldDefn("roll", ogr.OFTReal)) lyr.CreateField(ogr.FieldDefn("networklink", ogr.OFTString)) lyr.CreateField( ogr.FieldDefn("networklink_refreshvisibility", ogr.OFTInteger)) lyr.CreateField(ogr.FieldDefn("networklink_flytoview", ogr.OFTInteger)) lyr.CreateField(ogr.FieldDefn("networklink_refreshMode", ogr.OFTString)) lyr.CreateField(ogr.FieldDefn("networklink_refreshInterval", ogr.OFTReal)) lyr.CreateField(ogr.FieldDefn("networklink_viewRefreshMode", ogr.OFTString)) lyr.CreateField(ogr.FieldDefn("networklink_viewRefreshTime", ogr.OFTReal)) lyr.CreateField(ogr.FieldDefn("networklink_viewBoundScale", ogr.OFTReal)) lyr.CreateField(ogr.FieldDefn("networklink_viewFormat", ogr.OFTString)) lyr.CreateField(ogr.FieldDefn("networklink_httpQuery", ogr.OFTString)) lyr.CreateField(ogr.FieldDefn("camera_longitude", ogr.OFTReal)) lyr.CreateField(ogr.FieldDefn("camera_latitude", ogr.OFTReal)) lyr.CreateField(ogr.FieldDefn("camera_altitude", ogr.OFTReal)) lyr.CreateField(ogr.FieldDefn("camera_altitudemode", ogr.OFTString)) lyr.CreateField(ogr.FieldDefn("photooverlay", ogr.OFTString)) lyr.CreateField(ogr.FieldDefn("leftfov", ogr.OFTReal)) lyr.CreateField(ogr.FieldDefn("rightfov", ogr.OFTReal)) lyr.CreateField(ogr.FieldDefn("bottomfov", ogr.OFTReal)) lyr.CreateField(ogr.FieldDefn("topfov", ogr.OFTReal)) lyr.CreateField(ogr.FieldDefn("near", ogr.OFTReal)) lyr.CreateField(ogr.FieldDefn("photooverlay_shape", ogr.OFTString)) lyr.CreateField(ogr.FieldDefn("imagepyramid_tilesize", ogr.OFTInteger)) lyr.CreateField(ogr.FieldDefn("imagepyramid_maxwidth", ogr.OFTInteger)) lyr.CreateField(ogr.FieldDefn("imagepyramid_maxheight", ogr.OFTInteger)) feat = ogr.Feature(lyr.GetLayerDefn()) feat.SetField('name', 'Eiffel tower') feat.SetField('description', 'Famous Paris attraction. Built by Gustave Eiffel in 1889.') feat.SetField('nom_francais', 'Tour Eiffel') feat.SetField('int_value', 12) feat.SetField('double_value', 34.56) feat.SetField('snippet', 'Very cool snippet') feat.SetField('begin', '1889/05/06') feat.SetField('end', '9999/12/31') feat.SetStyleString('@eiffel_tower') feat.SetGeometry(ogr.CreateGeometryFromWkt('POINT(2.2945 48.85825)')) lyr.CreateFeature(feat) feat = ogr.Feature(lyr.GetLayerDefn()) feat.SetField('name', 'Avenue Gustave Eiffel') feat.SetField('timestamp', '2014/02/22') feat.SetGeometry( ogr.CreateGeometryFromWkt( 'LINESTRING(2.29420 48.85746,2.29540 48.85833)')) feat.SetStyleString('PEN(c:#00FF00)') feat.SetField('tessellate', 1) lyr.CreateFeature(feat) feat = ogr.Feature(lyr.GetLayerDefn()) feat.SetField('name', 'Ecole Militaire') feat.SetGeometry( ogr.CreateGeometryFromWkt( 'POLYGON((2.30383 48.85162 15,2.30460 48.85220 15,2.30581 48.85152 15,2.30507 48.85083 15,2.30383 48.85162 15))' )) feat.SetField('altitudeMode', 'relativeToGround') feat.SetField('extrude', 1) feat.SetStyleString('BRUSH(fc:#0000FF)') lyr.CreateFeature(feat) feat = ogr.Feature(lyr.GetLayerDefn()) feat.SetField('name', 'Champ de Mars') feat.SetGeometry( ogr.CreateGeometryFromWkt( 'MULTIPOLYGON(((2.29413 48.85703,2.29606 48.85847,2.29837 48.85679,2.29676 48.85543,2.29413 48.85703)),((2.29656 48.85504,2.29929 48.85674,2.30359 48.85364,2.30164 48.85226,2.29656 48.85504)))' )) lyr.CreateFeature(feat) feat = ogr.Feature(lyr.GetLayerDefn()) feat.SetGeometry(ogr.CreateGeometryFromWkt('POINT(2.2945 48.85825 10)')) feat.SetField("tilt", 75) feat.SetField("roll", 10) feat.SetField("heading", -70) feat.SetField("scale_x", 2) feat.SetField("scale_y", 3) feat.SetField("scale_z", 4) feat.SetField("altitudeMode", "relativeToGround") feat.SetField( "model", "http://makc.googlecode.com/svn/trunk/flash/sandy_flar2/cube.dae") lyr.CreateFeature(feat) feat = ogr.Feature(lyr.GetLayerDefn()) feat.SetField("name", "a network link") feat.SetField("networklink", "http://developers.google.com/kml/documentation/Point.kml") feat.SetField("networklink_refreshVisibility", 1) feat.SetField("networklink_flyToView", 1) feat.SetField("networklink_refreshInterval", 60) feat.SetField("networklink_httpQuery", "[clientVersion]") lyr.CreateFeature(feat) feat = ogr.Feature(lyr.GetLayerDefn()) feat.SetField("networklink", "http://developers.google.com/kml/documentation/Point.kml") feat.SetField("networklink_viewRefreshTime", 30) lyr.CreateFeature(feat) feat = ogr.Feature(lyr.GetLayerDefn()) feat.SetField("networklink", "http://developers.google.com/kml/documentation/Point.kml") feat.SetField("networklink_refreshMode", 'onExpire') feat.SetField("networklink_viewRefreshMode", 'onRegion') feat.SetField("networklink_viewBoundScale", 0.5) feat.SetField("networklink_viewFormat", 'BBOX=[bboxWest],[bboxSouth],[bboxEast],[bboxNorth]') lyr.CreateFeature(feat) feat = ogr.Feature(lyr.GetLayerDefn()) feat.SetField("photooverlay", "http://tile.openstreetmap.org/$[level]/$[x]/$[y].png") feat.SetField("imagepyramid_tilesize", 256) feat.SetField("imagepyramid_maxwidth", 512) feat.SetField("imagepyramid_maxheight", 512) feat.SetField("camera_longitude", 2.2946) feat.SetField("camera_latitude", 48.8583) feat.SetField("camera_altitude", 20) feat.SetField("camera_altitudemode", "relativeToGround") feat.SetField("leftfov", -60) feat.SetField("rightfov", 60) feat.SetField("bottomfov", -60) feat.SetField("topfov", 60) feat.SetField("near", 100) feat.SetField("heading", 0) feat.SetField("tilt", 90) feat.SetField("roll", 0) feat.SetGeometry(ogr.CreateGeometryFromWkt('POINT(2.2945 48.85825)')) lyr.CreateFeature(feat) # feat = ogr.Feature(lyr.GetLayerDefn()) # feat.SetGeometry(ogr.CreateGeometryFromWkt('POINT EMPTY')) # lyr.CreateFeature(feat) # feat = ogr.Feature(lyr.GetLayerDefn()) # # feat.SetGeometry(ogr.CreateGeometryFromWkt('LINESTRING EMPTY')) # lyr.CreateFeature(feat) # feat = ogr.Feature(lyr.GetLayerDefn()) # feat.SetGeometry(ogr.CreateGeometryFromWkt('POLYGON EMPTY')) # lyr.CreateFeature(feat) # feat = ogr.Feature(lyr.GetLayerDefn()) # feat.SetGeometry(ogr.CreateGeometryFromWkt('GEOMETRYCOLLECTION (POINT EMPTY,POINT(1 2))')) # lyr.CreateFeature(feat) lyr_options = [ 'CAMERA_LONGITUDE=2.2945', 'CAMERA_LATITUDE=48.85825', 'CAMERA_ALTITUDE=30', 'CAMERA_HEADING=120', 'CAMERA_TILT=70', 'CAMERA_ROLL=10', 'CAMERA_ALTITUDEMODE=relativeToGround', 'FOLDER=YES', 'NAME=layer_name', 'DESCRIPTION=description', 'OPEN=1', 'VISIBILITY=1', 'SNIPPET=snippet' ] ds.CreateLayer('test2', options=lyr_options) gdal.SetConfigOption('LIBKML_USE_SIMPLEFIELD', 'NO') lyr = ds.CreateLayer('test_data') gdal.SetConfigOption('LIBKML_USE_SIMPLEFIELD', None) lyr.CreateField(ogr.FieldDefn('foo', ogr.OFTString)) feat = ogr.Feature(lyr.GetLayerDefn()) feat.SetField("foo", "bar") feat.SetGeometry(ogr.CreateGeometryFromWkt('POINT(2.2945 48.85825)')) lyr.CreateFeature(feat) ds = None return
def ogr_pgdump_8(): ds = ogr.GetDriverByName('PGDump').CreateDataSource( '/vsimem/ogr_pgdump_8.sql', options=['LINEFORMAT=LF']) lyr = ds.CreateLayer('test', geom_type=ogr.wkbNone, options=['FID=myfid']) lyr.CreateField(ogr.FieldDefn('str', ogr.OFTString)) gdal.PushErrorHandler() ret = lyr.CreateField(ogr.FieldDefn('myfid', ogr.OFTString)) gdal.PopErrorHandler() if ret == 0: gdaltest.post_reason('fail') return 'fail' ret = lyr.CreateField(ogr.FieldDefn('myfid', ogr.OFTInteger)) if ret != 0: gdaltest.post_reason('fail') return 'fail' lyr.CreateField(ogr.FieldDefn('str2', ogr.OFTString)) feat = ogr.Feature(lyr.GetLayerDefn()) feat.SetField('str', 'first string') feat.SetField('myfid', 10) feat.SetField('str2', 'second string') gdal.SetConfigOption('PG_USE_COPY', 'YES') ret = lyr.CreateFeature(feat) gdal.SetConfigOption('PG_USE_COPY', None) if ret != 0: gdaltest.post_reason('fail') return 'fail' if feat.GetFID() != 10: gdaltest.post_reason('fail') return 'fail' feat = ogr.Feature(lyr.GetLayerDefn()) feat.SetField('str2', 'second string') gdal.SetConfigOption('PG_USE_COPY', 'YES') ret = lyr.CreateFeature(feat) gdal.SetConfigOption('PG_USE_COPY', None) if ret != 0: gdaltest.post_reason('fail') return 'fail' if feat.GetFID() < 0: gdaltest.post_reason('fail') feat.DumpReadable() return 'fail' if feat.GetField('myfid') != feat.GetFID(): gdaltest.post_reason('fail') feat.DumpReadable() return 'fail' #feat.SetField('str', 'foo') #ret = lyr.SetFeature(feat) #if ret != 0: # gdaltest.post_reason('fail') # return 'fail' feat = ogr.Feature(lyr.GetLayerDefn()) feat.SetFID(1) feat.SetField('myfid', 10) gdal.PushErrorHandler() gdal.SetConfigOption('PG_USE_COPY', 'YES') ret = lyr.CreateFeature(feat) gdal.SetConfigOption('PG_USE_COPY', None) gdal.PopErrorHandler() if ret == 0: gdaltest.post_reason('fail') return 'fail' #gdal.PushErrorHandler() #ret = lyr.SetFeature(feat) #gdal.PopErrorHandler() #if ret == 0: # gdaltest.post_reason('fail') # return 'fail' #feat.UnsetField('myfid') #gdal.PushErrorHandler() #ret = lyr.SetFeature(feat) #gdal.PopErrorHandler() #if ret == 0: # gdaltest.post_reason('fail') # return 'fail' feat = ogr.Feature(lyr.GetLayerDefn()) feat.SetField('str', 'first string') feat.SetField('myfid', 12) feat.SetField('str2', 'second string') gdal.SetConfigOption('PG_USE_COPY', 'YES') ret = lyr.CreateFeature(feat) gdal.SetConfigOption('PG_USE_COPY', None) if ret != 0: gdaltest.post_reason('fail') return 'fail' if feat.GetFID() != 12: gdaltest.post_reason('fail') return 'fail' ds = None f = gdal.VSIFOpenL('/vsimem/ogr_pgdump_8.sql', 'rb') sql = gdal.VSIFReadL(1, 10000, f).decode('ascii') gdal.VSIFCloseL(f) gdal.Unlink('/vsimem/ogr_pgdump_8.sql') if sql.find("""CREATE TABLE "public"."test" ( "myfid" SERIAL, CONSTRAINT "test_pk" PRIMARY KEY ("myfid") )""") < 0 or \ sql.find("""ALTER TABLE "public"."test" ADD COLUMN "myfid" """) >= 0 or \ sql.find("""10\tfirst string\tsecond string""") == -1 or \ sql.find("""INSERT INTO "public"."test" ("str2") VALUES ('second string');""") == -1 or \ sql.find("""12\tfirst string\tsecond string""") == -1: print(sql) return 'fail' return 'success'
def ogr_pgdump_9(pg_use_copy='YES'): gdal.SetConfigOption('PG_USE_COPY', pg_use_copy) ds = ogr.GetDriverByName('PGDump').CreateDataSource( '/vsimem/ogr_pgdump_9.sql', options=['LINEFORMAT=LF']) lyr = ds.CreateLayer('test', geom_type=ogr.wkbNone) fld = ogr.FieldDefn('str', ogr.OFTString) fld.SetWidth(5) lyr.CreateField(fld) fld = ogr.FieldDefn('str2', ogr.OFTString) lyr.CreateField(fld) feat = ogr.Feature(lyr.GetLayerDefn()) feat.SetField('str', '01234') lyr.CreateFeature(feat) feat = ogr.Feature(lyr.GetLayerDefn()) feat.SetField('str', 'ABCDEF') lyr.CreateFeature(feat) if sys.version_info >= (3, 0, 0): val4 = '\u00e9\u00e9\u00e9\u00e9' val5 = val4 + '\u00e9' val6 = val5 + '\u00e9' else: exec("val4 = u'\\u00e9\\u00e9\\u00e9\\u00e9'") exec("val5 = val4 + u'\\u00e9'") exec("val6 = val5 + u'\\u00e9'") feat = ogr.Feature(lyr.GetLayerDefn()) feat.SetField('str', val6) lyr.CreateFeature(feat) feat = ogr.Feature(lyr.GetLayerDefn()) feat.SetField('str', 'a' + val5) lyr.CreateFeature(feat) gdal.SetConfigOption('PG_USE_COPY', None) ds = None f = gdal.VSIFOpenL('/vsimem/ogr_pgdump_9.sql', 'rb') sql = gdal.VSIFReadL(1, 10000, f).decode('utf8') gdal.VSIFCloseL(f) gdal.Unlink('/vsimem/ogr_pgdump_9.sql') if pg_use_copy == 'YES': eofield = '\t' else: eofield = "'" if sql.find("""01234%s""" % eofield) < 0 or \ sql.find("""ABCDE%s""" % eofield) < 0 or \ sql.find("""%s%s""" % (val5, eofield)) < 0 or \ sql.find("""%s%s""" % ('a'+val4, eofield)) < 0: print(sql) return 'fail' return 'success'
def ogr_pgdump_6(): ds = ogr.GetDriverByName('PGDump').CreateDataSource( '/vsimem/ogr_pgdump_6.sql', options=['LINEFORMAT=LF']) lyr = ds.CreateLayer('test', geom_type=ogr.wkbNone) field_defn = ogr.FieldDefn('field_string', ogr.OFTString) field_defn.SetDefault("'a''b'") lyr.CreateField(field_defn) field_defn = ogr.FieldDefn('field_int', ogr.OFTInteger) field_defn.SetDefault('123') lyr.CreateField(field_defn) field_defn = ogr.FieldDefn('field_real', ogr.OFTReal) field_defn.SetDefault('1.23') lyr.CreateField(field_defn) field_defn = ogr.FieldDefn('field_nodefault', ogr.OFTInteger) lyr.CreateField(field_defn) field_defn = ogr.FieldDefn('field_datetime', ogr.OFTDateTime) field_defn.SetDefault("CURRENT_TIMESTAMP") lyr.CreateField(field_defn) field_defn = ogr.FieldDefn('field_datetime2', ogr.OFTDateTime) field_defn.SetDefault("'2015/06/30 12:34:56'") lyr.CreateField(field_defn) field_defn = ogr.FieldDefn('field_date', ogr.OFTDate) field_defn.SetDefault("CURRENT_DATE") lyr.CreateField(field_defn) field_defn = ogr.FieldDefn('field_time', ogr.OFTTime) field_defn.SetDefault("CURRENT_TIME") lyr.CreateField(field_defn) gdal.SetConfigOption('PG_USE_COPY', 'YES') f = ogr.Feature(lyr.GetLayerDefn()) f.SetField('field_string', 'a') f.SetField('field_int', 456) f.SetField('field_real', 4.56) f.SetField('field_datetime', '2015/06/30 12:34:56') f.SetField('field_datetime2', '2015/06/30 12:34:56') f.SetField('field_date', '2015/06/30') f.SetField('field_time', '12:34:56') lyr.CreateFeature(f) f = None # Transition from COPY to INSERT f = ogr.Feature(lyr.GetLayerDefn()) lyr.CreateFeature(f) f = None # Transition from INSERT to COPY f = ogr.Feature(lyr.GetLayerDefn()) f.SetField('field_string', 'b') f.SetField('field_int', 456) f.SetField('field_real', 4.56) f.SetField('field_datetime', '2015/06/30 12:34:56') f.SetField('field_datetime2', '2015/06/30 12:34:56') f.SetField('field_date', '2015/06/30') f.SetField('field_time', '12:34:56') lyr.CreateFeature(f) f = None gdal.SetConfigOption('PG_USE_COPY', None) ds = None f = gdal.VSIFOpenL('/vsimem/ogr_pgdump_6.sql', 'rb') sql = gdal.VSIFReadL(1, 10000, f).decode('ascii') gdal.VSIFCloseL(f) gdal.Unlink('/vsimem/ogr_pgdump_6.sql') if sql.find("""a\t456\t4.56\t\\N\t2015/06/30 12:34:56\t2015/06/30 12:34:56\t2015/06/30\t12:34:56""") < 0 or \ sql.find("""ALTER TABLE "public"."test" ADD COLUMN "field_string" VARCHAR DEFAULT 'a''b';""") == -1 or \ sql.find("""ALTER TABLE "public"."test" ADD COLUMN "field_int" INTEGER DEFAULT 123;""") == -1 or \ sql.find("""ALTER TABLE "public"."test" ADD COLUMN "field_real" FLOAT8 DEFAULT 1.23;""") == -1 or \ sql.find("""ALTER TABLE "public"."test" ADD COLUMN "field_datetime" timestamp with time zone DEFAULT CURRENT_TIMESTAMP;""") == -1 or \ sql.find("""ALTER TABLE "public"."test" ADD COLUMN "field_datetime2" timestamp with time zone DEFAULT '2015/06/30 12:34:56+00'::timestamp with time zone;""") == -1 or \ sql.find("""ALTER TABLE "public"."test" ADD COLUMN "field_date" date DEFAULT CURRENT_DATE;""") == -1 or \ sql.find("""ALTER TABLE "public"."test" ADD COLUMN "field_time" time DEFAULT CURRENT_TIME;""") == -1 or \ sql.find("""b\t456\t4.56\t\\N\t2015/06/30 12:34:56\t2015/06/30 12:34:56\t2015/06/30\t12:34:56""") < 0: print(sql) return 'fail' return 'success'
def test_ogr_osm_10(): if ogrtest.osm_drv is None: pytest.skip() # A file that does not exist. ds = ogr.Open('/nonexistent/foo.osm') assert ds is None # Empty .osm file f = gdal.VSIFOpenL('/vsimem/foo.osm', 'wb') gdal.VSIFCloseL(f) ds = ogr.Open('/vsimem/foo.osm') assert ds is None gdal.Unlink('/vsimem/foo.osm') # Empty .pbf file f = gdal.VSIFOpenL('/vsimem/foo.pbf', 'wb') gdal.VSIFCloseL(f) ds = ogr.Open('/vsimem/foo.pbf') assert ds is None gdal.Unlink('/vsimem/foo.pbf') if ogrtest.osm_drv_parse_osm: # Invalid .osm file f = gdal.VSIFOpenL('/vsimem/foo.osm', 'wb') data = "<osm>" gdal.VSIFWriteL(data, 1, len(data), f) gdal.VSIFCloseL(f) ds = ogr.Open('/vsimem/foo.osm') lyr = ds.GetLayer(0) gdal.ErrorReset() gdal.PushErrorHandler('CPLQuietErrorHandler') feat = lyr.GetNextFeature() gdal.PopErrorHandler() assert gdal.GetLastErrorMsg() != '' ds = None gdal.Unlink('/vsimem/foo.osm') # Invalid .pbf file f = gdal.VSIFOpenL('/vsimem/foo.pbf', 'wb') data = "OSMHeader\n" gdal.VSIFWriteL(data, 1, len(data), f) gdal.VSIFCloseL(f) ds = ogr.Open('/vsimem/foo.pbf') lyr = ds.GetLayer(0) gdal.ErrorReset() gdal.PushErrorHandler('CPLQuietErrorHandler') feat = lyr.GetNextFeature() gdal.PopErrorHandler() assert gdal.GetLastErrorMsg() != '' ds = None gdal.Unlink('/vsimem/foo.pbf') # Test million laugh pattern if ogrtest.osm_drv_parse_osm: ds = ogr.Open('data/osm/billionlaugh.osm') lyr = ds.GetLayer(0) gdal.ErrorReset() gdal.PushErrorHandler('CPLQuietErrorHandler') feat = lyr.GetNextFeature() gdal.PopErrorHandler() assert feat is None and gdal.GetLastErrorMsg() != ''
def numpy_rw_11(): if gdaltest.numpy_drv is None: return 'skip' import numpy from osgeo import gdal_array type_tuples = [('uint8', gdal.GDT_Byte, numpy.uint8, 255), ('uint16', gdal.GDT_UInt16, numpy.uint16, 65535), ('int16', gdal.GDT_Int16, numpy.int16, -32767), ('uint32', gdal.GDT_UInt32, numpy.uint32, 4294967295), ('int32', gdal.GDT_Int32, numpy.int32, -2147483648), ('float32', gdal.GDT_Float32, numpy.float32, 1.23), ('float64', gdal.GDT_Float64, numpy.float64, 1.23456789), ('cint16', gdal.GDT_CInt16, numpy.complex64, -32768 + 32767j), ('cint32', gdal.GDT_CInt32, numpy.complex64, -32769 + 32768j), ('cfloat32', gdal.GDT_CFloat32, numpy.complex64, -32768.5 + 32767.5j), ('cfloat64', gdal.GDT_CFloat64, numpy.complex128, -32768.123456 + 32767.123456j)] for type_tuple in type_tuples: ds = gdal.GetDriverByName('GTiff').Create('/vsimem/' + type_tuple[0], 1, 1, 1, type_tuple[1]) tmp = ds.ReadAsArray() if tmp.dtype != type_tuple[2]: gdaltest.post_reason('did not get expected numpy type') print(type_tuple) return 'fail' ar = numpy.empty([1, 1], dtype=type_tuple[2]) ar_ds = gdal_array.OpenArray(ar) got_dt = ar_ds.GetRasterBand(1).DataType ar_ds = None expected_dt = type_tuple[1] if expected_dt == gdal.GDT_CInt16 or expected_dt == gdal.GDT_CInt32: expected_dt = gdal.GDT_CFloat32 if got_dt != expected_dt: gdaltest.post_reason('did not get expected result (0)') print(type_tuple[1]) print(got_dt) print(expected_dt) return 'fail' ar[0][0] = type_tuple[3] ds.GetRasterBand(1).WriteArray(ar) ds = None ds = gdal.Open('/vsimem/' + type_tuple[0]) ar2 = ds.ReadAsArray() ar3 = numpy.empty_like(ar2) ds.GetRasterBand(1).ReadAsArray(buf_obj=ar3) ds = None gdal.Unlink('/vsimem/' + type_tuple[0]) if (type_tuple[0] == 'float32' and abs(ar2[0][0] - type_tuple[3]) > 1e-6) or \ (type_tuple[0] != 'float32' and ar2[0][0] != type_tuple[3]): gdaltest.post_reason('did not get expected result (1)') print(ar2) print(type_tuple) return 'fail' if (type_tuple[0] == 'float32' and abs(ar3[0][0] - type_tuple[3]) > 1e-6) or \ (type_tuple[0] != 'float32' and ar3[0][0] != type_tuple[3]): gdaltest.post_reason('did not get expected result (2)') print(ar3) print(type_tuple) return 'fail' return 'success'
def tiff_srs_angular_units(): ds = gdal.GetDriverByName('GTiff').Create( '/vsimem/tiff_srs_angular_units.tif', 1, 1) ds.SetProjection("""GEOGCS["WGS 84 (arc-second)", DATUM["WGS_1984 (arc-second)", SPHEROID["WGS 84",6378137,298.257223563]], PRIMEM["Greenwich",0], UNIT["arc-second",4.848136811095361e-06]]""") ds = None ds = gdal.Open('/vsimem/tiff_srs_angular_units.tif') wkt = ds.GetProjectionRef() if wkt.find('UNIT["arc-second",4.848136811095361e-06]') < 0 and \ wkt.find('UNIT["arc-second",4.848136811095361e-006]') < 0 : # wine variant gdaltest.post_reason('fail') print(wkt) return 'fail' ds = None ds = gdal.GetDriverByName('GTiff').Create( '/vsimem/tiff_srs_angular_units.tif', 1, 1) ds.SetProjection("""GEOGCS["WGS 84 (arc-minute)", DATUM["WGS_1984 (arc-minute)", SPHEROID["WGS 84",6378137,298.257223563]], PRIMEM["Greenwich",0], UNIT["arc-minute",0.0002908882086657216]]""") ds = None ds = gdal.Open('/vsimem/tiff_srs_angular_units.tif') wkt = ds.GetProjectionRef() if wkt.find('UNIT["arc-minute",0.0002908882086657216]') < 0: gdaltest.post_reason('fail') print(wkt) return 'fail' ds = None ds = gdal.GetDriverByName('GTiff').Create( '/vsimem/tiff_srs_angular_units.tif', 1, 1) ds.SetProjection("""GEOGCS["WGS 84 (grad)", DATUM["WGS_1984 (grad)", SPHEROID["WGS 84",6378137,298.257223563]], PRIMEM["Greenwich",0], UNIT["grad",0.01570796326794897]]""") ds = None ds = gdal.Open('/vsimem/tiff_srs_angular_units.tif') wkt = ds.GetProjectionRef() if wkt.find('UNIT["grad",0.01570796326794897]') < 0: gdaltest.post_reason('fail') print(wkt) return 'fail' ds = None ds = gdal.GetDriverByName('GTiff').Create( '/vsimem/tiff_srs_angular_units.tif', 1, 1) ds.SetProjection("""GEOGCS["WGS 84 (gon)", DATUM["WGS_1984 (gon)", SPHEROID["WGS 84",6378137,298.257223563]], PRIMEM["Greenwich",0], UNIT["gon",0.01570796326794897]]""") ds = None ds = gdal.Open('/vsimem/tiff_srs_angular_units.tif') wkt = ds.GetProjectionRef() if wkt.find('UNIT["gon",0.01570796326794897]') < 0: gdaltest.post_reason('fail') print(wkt) return 'fail' ds = None ds = gdal.GetDriverByName('GTiff').Create( '/vsimem/tiff_srs_angular_units.tif', 1, 1) ds.SetProjection("""GEOGCS["WGS 84 (radian)", DATUM["WGS_1984 (radian)", SPHEROID["WGS 84",6378137,298.257223563]], PRIMEM["Greenwich",0], UNIT["radian",1]]""") ds = None ds = gdal.Open('/vsimem/tiff_srs_angular_units.tif') wkt = ds.GetProjectionRef() if wkt.find('UNIT["radian",1]') < 0: gdaltest.post_reason('fail') print(wkt) return 'fail' ds = None ds = gdal.GetDriverByName('GTiff').Create( '/vsimem/tiff_srs_angular_units.tif', 1, 1) ds.SetProjection("""GEOGCS["WGS 84 (custom)", DATUM["WGS_1984 (custom)", SPHEROID["WGS 84",6378137,298.257223563]], PRIMEM["Greenwich",0], UNIT["custom",1.23]]""") ds = None ds = gdal.Open('/vsimem/tiff_srs_angular_units.tif') wkt = ds.GetProjectionRef() if wkt.find('UNIT["custom",1.23]') < 0: gdaltest.post_reason('fail') print(wkt) return 'fail' ds = None gdal.Unlink('/vsimem/tiff_srs_angular_units.tif') return 'success'
def mrf_versioned(): gdal.Unlink('/vsimem/out.mrf') gdal.Unlink('/vsimem/out.mrf.aux.xml') gdal.Unlink('/vsimem/out.idx') gdal.Unlink('/vsimem/out.ppg') gdal.Unlink('/vsimem/out.til') # Caching MRF gdal.Translate('/vsimem/out.mrf', 'data/byte.tif', format='MRF') gdal.FileFromMemBuffer( '/vsimem/out.mrf', """<MRF_META> <Raster versioned="on"> <Size x="20" y="20" c="1" /> <PageSize x="512" y="512" c="1" /> </Raster> <GeoTags> <BoundingBox minx="440720.00000000" miny="3750120.00000000" maxx="441920.00000000" maxy="3751320.00000000" /> <Projection>PROJCS["NAD27 / UTM zone 11N",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982138982,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-117],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],UNIT["metre",1,AUTHORITY["EPSG","9001"]],AXIS["Easting",EAST],AXIS["Northing",NORTH],AUTHORITY["EPSG","26711"]]</Projection> </GeoTags> </MRF_META>""") ds = gdal.Open('/vsimem/out.mrf', gdal.GA_Update) ds.GetRasterBand(1).Fill(0) ds = None ds = gdal.Open('/vsimem/out.mrf') cs = ds.GetRasterBand(1).Checksum() expected_cs = 0 if cs != expected_cs: gdaltest.post_reason('fail') print(cs) print(expected_cs) return 'fail' ds = None ds = gdal.Open('/vsimem/out.mrf:MRF:V0') cs = ds.GetRasterBand(1).Checksum() expected_cs = 0 if cs != expected_cs: gdaltest.post_reason('fail') print(cs) print(expected_cs) return 'fail' ds = None ds = gdal.Open('/vsimem/out.mrf:MRF:V1') cs = ds.GetRasterBand(1).Checksum() expected_cs = 4672 if cs != expected_cs: gdaltest.post_reason('fail') print(cs) print(expected_cs) return 'fail' ds = None with gdaltest.error_handler(): ds = gdal.Open('/vsimem/out.mrf:MRF:V2') if ds is not None: gdaltest.post_reason('fail') return 'fail' gdal.Unlink('/vsimem/out.mrf') gdal.Unlink('/vsimem/out.mrf.aux.xml') gdal.Unlink('/vsimem/out.idx') gdal.Unlink('/vsimem/out.ppg') gdal.Unlink('/vsimem/out.til') return 'success'
def testOverwriteLayer(self): """Tests writing a layer with a field value converter.""" ml = QgsVectorLayer('Point?field=firstfield:int', 'test', 'memory') provider = ml.dataProvider() ft = QgsFeature() ft.setAttributes([1]) provider.addFeatures([ft]) options = QgsVectorFileWriter.SaveVectorOptions() options.driverName = 'GPKG' options.layerName = 'test' filename = '/vsimem/out.gpkg' write_result = QgsVectorFileWriter.writeAsVectorFormat( ml, filename, options) self.assertEqual(write_result, QgsVectorFileWriter.NoError) ds = ogr.Open(filename, update=1) lyr = ds.GetLayerByName('test') self.assertIsNotNone(lyr) f = lyr.GetNextFeature() self.assertEqual(f['firstfield'], 1) ds.CreateLayer('another_layer') del f del lyr del ds caps = QgsVectorFileWriter.editionCapabilities(filename) self.assertTrue((caps & QgsVectorFileWriter.CanAddNewLayer)) self.assertTrue((caps & QgsVectorFileWriter.CanAppendToExistingLayer)) self.assertTrue( (caps & QgsVectorFileWriter.CanAddNewFieldsToExistingLayer)) self.assertTrue((caps & QgsVectorFileWriter.CanDeleteLayer)) self.assertTrue(QgsVectorFileWriter.targetLayerExists( filename, 'test')) self.assertFalse( QgsVectorFileWriter.areThereNewFieldsToCreate( filename, 'test', ml, [0])) # Test CreateOrOverwriteLayer ml = QgsVectorLayer('Point?field=firstfield:int', 'test', 'memory') provider = ml.dataProvider() ft = QgsFeature() ft.setAttributes([2]) provider.addFeatures([ft]) options = QgsVectorFileWriter.SaveVectorOptions() options.driverName = 'GPKG' options.layerName = 'test' options.actionOnExistingFile = QgsVectorFileWriter.CreateOrOverwriteLayer filename = '/vsimem/out.gpkg' write_result = QgsVectorFileWriter.writeAsVectorFormat( ml, filename, options) self.assertEqual(write_result, QgsVectorFileWriter.NoError) ds = ogr.Open(filename) lyr = ds.GetLayerByName('test') self.assertIsNotNone(lyr) f = lyr.GetNextFeature() self.assertEqual(f['firstfield'], 2) # another_layer should still exist self.assertIsNotNone(ds.GetLayerByName('another_layer')) del f del lyr del ds # Test CreateOrOverwriteFile ml = QgsVectorLayer('Point?field=firstfield:int', 'test', 'memory') provider = ml.dataProvider() ft = QgsFeature() ft.setAttributes([3]) provider.addFeatures([ft]) options = QgsVectorFileWriter.SaveVectorOptions() options.driverName = 'GPKG' options.layerName = 'test' filename = '/vsimem/out.gpkg' write_result = QgsVectorFileWriter.writeAsVectorFormat( ml, filename, options) self.assertEqual(write_result, QgsVectorFileWriter.NoError) ds = ogr.Open(filename) lyr = ds.GetLayerByName('test') self.assertIsNotNone(lyr) f = lyr.GetNextFeature() self.assertEqual(f['firstfield'], 3) # another_layer should no longer exist self.assertIsNone(ds.GetLayerByName('another_layer')) del f del lyr del ds # Test AppendToLayerNoNewFields ml = QgsVectorLayer('Point?field=firstfield:int&field=secondfield:int', 'test', 'memory') provider = ml.dataProvider() ft = QgsFeature() ft.setAttributes([4, -10]) provider.addFeatures([ft]) self.assertTrue( QgsVectorFileWriter.areThereNewFieldsToCreate( filename, 'test', ml, [0, 1])) options = QgsVectorFileWriter.SaveVectorOptions() options.driverName = 'GPKG' options.layerName = 'test' options.actionOnExistingFile = QgsVectorFileWriter.AppendToLayerNoNewFields filename = '/vsimem/out.gpkg' write_result = QgsVectorFileWriter.writeAsVectorFormat( ml, filename, options) self.assertEqual(write_result, QgsVectorFileWriter.NoError) ds = ogr.Open(filename) lyr = ds.GetLayerByName('test') self.assertEqual(lyr.GetLayerDefn().GetFieldCount(), 1) self.assertIsNotNone(lyr) f = lyr.GetNextFeature() self.assertEqual(f['firstfield'], 3) f = lyr.GetNextFeature() self.assertEqual(f['firstfield'], 4) del f del lyr del ds # Test AppendToLayerAddFields ml = QgsVectorLayer('Point?field=firstfield:int&field=secondfield:int', 'test', 'memory') provider = ml.dataProvider() ft = QgsFeature() ft.setAttributes([5, -1]) provider.addFeatures([ft]) self.assertTrue( QgsVectorFileWriter.areThereNewFieldsToCreate( filename, 'test', ml, [0, 1])) options = QgsVectorFileWriter.SaveVectorOptions() options.driverName = 'GPKG' options.layerName = 'test' options.actionOnExistingFile = QgsVectorFileWriter.AppendToLayerAddFields filename = '/vsimem/out.gpkg' write_result = QgsVectorFileWriter.writeAsVectorFormat( ml, filename, options) self.assertEqual(write_result, QgsVectorFileWriter.NoError) ds = ogr.Open(filename) lyr = ds.GetLayerByName('test') self.assertEqual(lyr.GetLayerDefn().GetFieldCount(), 2) self.assertIsNotNone(lyr) f = lyr.GetNextFeature() self.assertEqual(f['firstfield'], 3) self.assertFalse(f.IsFieldSet('secondfield')) f = lyr.GetNextFeature() self.assertEqual(f['firstfield'], 4) self.assertFalse(f.IsFieldSet('secondfield')) f = lyr.GetNextFeature() self.assertEqual(f['firstfield'], 5) self.assertEqual(f['secondfield'], -1) del f del lyr del ds gdal.Unlink(filename)
def test_gdal_calculations_py_15(): ''' Test commandline ''' #In the unlikely event this code ever ends up _in_ GDAL, this function #will need modification to comply with standard GDAL script/sample paths try: from gdal_calculations import Dataset, __version__ cd=os.path.abspath(os.curdir) testdir=os.path.abspath(os.path.dirname(__file__)) datadir=os.path.join(testdir,'data') tmpdir=os.path.join(testdir,'tmp') topdir=os.path.abspath(os.path.join(testdir,'..','..')) bindir=os.path.join(topdir,'bin') libdir=os.path.join(topdir,'lib') f1=os.path.join(datadir,'tgc_geo.tif') f2=os.path.join(datadir,'tgc_geo_resize.vrt') #test commandline scripts (assumes orig googlecode svn structure, not various gdal setups) #All the commandline gdal_calculate and gdal_calculate.cmd scripts do #is call python -m gdal_calculations <args> os.chdir(libdir) #So script can find module script=os.path.join(bindir,'gdal_calculate') if sys.platform == 'win32':script+='.cmd' #gdaltest.runexternal() doesn't read stderr ret = gdaltest.runexternal(script + ' --version --redirect-stderr').strip() assert ret==__version__,'Script version (%s) != %s'%(ret,__version__) try:del ret except:pass #Try running something that numexpr can handle #if numexpr is not available, this should be handled by standard python eval out=os.path.join(tmpdir,'tgc_15a.ers') args='--calc="ds + 1" --ds="%s" --outfile="%s" --numexpr --of=ERS --redirect-stderr' % (f1,out) try: ret = gdaltest.runexternal(script+' '+args).strip() ds=Dataset(out) del ds except Exception as e:raise RuntimeError(ret+'\n'+e.message) finally: try: gdal.Unlink(out) gdal.Unlink(out[:-4]) except:pass del ret #Try running something that numexpr can't handle, #this should be handled by standard python eval out=os.path.join(tmpdir,'tgc_15b.ers') args='--calc="ds1+ds2" --ds1="%s" --ds2="%s" --outfile="%s" --numexpr --of=ERS --redirect-stderr' % (f1,f2, out) try: ret = gdaltest.runexternal(script+' '+args).strip() ds=Dataset(out) del ds except Exception as e:raise RuntimeError(ret+'\n'+e.message) finally: try: gdal.Unlink(out) gdal.Unlink(out[:-4]) except:pass del ret return 'success' except AssertionError: return fail() finally: os.chdir(cd) cleanup()
def vsicrypt_3(): if not gdaltest.has_vsicrypt: return 'skip' for options in ['sector_size=16', 'alg=AES', 'alg=DES_EDE2', 'alg=DES_EDE3', 'alg=SKIPJACK', 'alg=invalid', 'mode=CBC', 'mode=CFB', 'mode=OFB', 'mode=CTR', 'mode=CBC_CTS', 'mode=invalid', 'freetext=my_free_text', 'add_key_check=yes' ]: gdal.Unlink('/vsimem/file.bin') if options == 'alg=invalid' or options == 'mode=invalid': with gdaltest.error_handler(): fp = gdal.VSIFOpenL('/vsicrypt/key=DONT_USE_IN_PRODDONT_USE_IN_PROD,%s,file=/vsimem/file.bin' % options, 'wb') else: fp = gdal.VSIFOpenL('/vsicrypt/key=DONT_USE_IN_PRODDONT_USE_IN_PROD,%s,file=/vsimem/file.bin' % options, 'wb') if fp is None: gdaltest.post_reason('fail') print(options) return 'fail' gdal.VSIFWriteL('hello', 1, 5, fp) gdal.VSIFCloseL(fp) fp = gdal.VSIFOpenL('/vsicrypt/key=DONT_USE_IN_PRODDONT_USE_IN_PROD,file=/vsimem/file.bin', 'r') content = gdal.VSIFReadL(1, 5, fp).decode('latin1') gdal.VSIFCloseL(fp) if content != 'hello': gdaltest.post_reason('fail') print(options) return 'fail' # Some of those algs might be missing for options in ['alg=Blowfish', 'alg=Camellia', 'alg=CAST256', 'alg=MARS', 'alg=IDEA', 'alg=RC5', 'alg=RC6', 'alg=Serpent', 'alg=SHACAL2', 'alg=Twofish', 'alg=XTEA']: gdal.Unlink('/vsimem/file.bin') with gdaltest.error_handler(): fp = gdal.VSIFOpenL('/vsicrypt/key=DONT_USE_IN_PROD,%s,file=/vsimem/file.bin' % options, 'wb') if fp is not None: gdal.VSIFWriteL('hello', 1, 5, fp) gdal.VSIFCloseL(fp) fp = gdal.VSIFOpenL('/vsicrypt/key=DONT_USE_IN_PROD,file=/vsimem/file.bin', 'rb') content = gdal.VSIFReadL(1, 5, fp).decode('latin1') gdal.VSIFCloseL(fp) if content != 'hello': gdaltest.post_reason('fail') print(options) return 'fail' # Test key generation # Do NOT set VSICRYPT_CRYPTO_RANDOM=NO in production. This is just to speed up tests ! gdal.SetConfigOption("VSICRYPT_CRYPTO_RANDOM", "NO") fp = gdal.VSIFOpenL('/vsicrypt/key=GENERATE_IT,add_key_check=yes,file=/vsimem/file.bin', 'wb') gdal.SetConfigOption("VSICRYPT_CRYPTO_RANDOM", None) # Get the generated random key key_b64 = gdal.GetConfigOption('VSICRYPT_KEY_B64') if key_b64 is None: gdaltest.post_reason('fail') return 'fail' gdal.VSIFWriteL('hello', 1, 5, fp) gdal.VSIFCloseL(fp) fp = gdal.VSIFOpenL('/vsicrypt//vsimem/file.bin', 'rb') content = gdal.VSIFReadL(1, 5, fp).decode('latin1') gdal.VSIFCloseL(fp) if content != 'hello': gdaltest.post_reason('fail') print(options) return 'fail' gdal.SetConfigOption('VSICRYPT_KEY_B64', None) fp = gdal.VSIFOpenL('/vsicrypt/key_b64=%s,file=/vsimem/file.bin' % key_b64, 'rb') content = gdal.VSIFReadL(1, 5, fp).decode('latin1') gdal.VSIFCloseL(fp) if content != 'hello': gdaltest.post_reason('fail') print(options) return 'fail' with gdaltest.error_handler(): statRes = gdal.VSIStatL('/vsicrypt//vsimem/file.bin') if statRes is not None: gdaltest.post_reason('fail') return 'fail' ret = gdal.Rename('/vsicrypt//vsimem/file.bin' , '/vsicrypt//vsimem/subdir_crypt/file.bin') if ret != 0: gdaltest.post_reason('fail') print(ret) return 'fail' ret = gdal.Rename('/vsicrypt//vsimem/subdir_crypt/file.bin' , '/vsimem/subdir_crypt/file2.bin') if ret != 0: gdaltest.post_reason('fail') print(ret) return 'fail' dir_content = gdal.ReadDir('/vsicrypt//vsimem/subdir_crypt') if dir_content != ['file2.bin']: gdaltest.post_reason('fail') print(dir_content) return 'fail' gdal.Unlink('/vsimem/subdir_crypt/file2.bin') return 'success'
def test_jpeg_22(): src_ds = gdal.GetDriverByName('Mem').Create('', 4096, 2048) src_ds.GetRasterBand(1).Fill(255) ds = gdal.GetDriverByName('JPEG').CreateCopy( '/vsimem/jpeg_22.jpg', src_ds, options=['EXIF_THUMBNAIL=YES']) src_ds = None assert ds.GetRasterBand(1).GetOverviewCount() == 4 ovr = ds.GetRasterBand(1).GetOverview(3) cs = ovr.Checksum() assert ovr.XSize == 128 and ovr.YSize == 64 and cs == 34957 ds = None # With 3 bands src_ds = gdal.GetDriverByName('Mem').Create('', 2048, 4096, 3) src_ds.GetRasterBand(1).Fill(255) ds = gdal.GetDriverByName('JPEG').CreateCopy( '/vsimem/jpeg_22.jpg', src_ds, options=['EXIF_THUMBNAIL=YES']) src_ds = None ovr = ds.GetRasterBand(1).GetOverview(3) assert ovr.XSize == 64 and ovr.YSize == 128 ds = None # With comment src_ds = gdal.GetDriverByName('Mem').Create('', 2048, 4096) src_ds.GetRasterBand(1).Fill(255) ds = gdal.GetDriverByName('JPEG').CreateCopy( '/vsimem/jpeg_22.jpg', src_ds, options=['COMMENT=foo', 'EXIF_THUMBNAIL=YES', 'THUMBNAIL_WIDTH=40']) src_ds = None ovr = ds.GetRasterBand(1).GetOverview(3) assert ds.GetMetadataItem('COMMENT') == 'foo' assert ovr.XSize == 40 and ovr.YSize == 80 ds = None src_ds = gdal.GetDriverByName('Mem').Create('', 2048, 4096) src_ds.GetRasterBand(1).Fill(255) ds = gdal.GetDriverByName('JPEG').CreateCopy( '/vsimem/jpeg_22.jpg', src_ds, options=['EXIF_THUMBNAIL=YES', 'THUMBNAIL_HEIGHT=60']) src_ds = None ovr = ds.GetRasterBand(1).GetOverview(3) assert ovr.XSize == 30 and ovr.YSize == 60 ds = None src_ds = gdal.GetDriverByName('Mem').Create('', 2048, 4096) src_ds.GetRasterBand(1).Fill(255) ds = gdal.GetDriverByName('JPEG').CreateCopy('/vsimem/jpeg_22.jpg', src_ds, options=[ 'EXIF_THUMBNAIL=YES', 'THUMBNAIL_WIDTH=50', 'THUMBNAIL_HEIGHT=40' ]) src_ds = None ovr = ds.GetRasterBand(1).GetOverview(3) assert ovr.XSize == 50 and ovr.YSize == 40 ds = None gdal.Unlink('/vsimem/jpeg_22.jpg')
def vsicrypt_6(): try: import ctypes except: return 'skip' import testnonboundtoswig testnonboundtoswig.testnonboundtoswig_init() if testnonboundtoswig.gdal_handle is None: return 'skip' testnonboundtoswig.gdal_handle.VSISetCryptKey.argtypes = [ ctypes.c_char_p, ctypes.c_int] testnonboundtoswig.gdal_handle.VSISetCryptKey.restype = None # Set a valid key testnonboundtoswig.gdal_handle.VSISetCryptKey('DONT_USE_IN_PROD'.encode('ASCII'), 16) if not gdaltest.has_vsicrypt: return 'skip' fp = gdal.VSIFOpenL('/vsicrypt/add_key_check=yes,file=/vsimem/file.bin', 'wb+') if fp is None: gdaltest.post_reason('fail') return 'fail' gdal.VSIFWriteL('hello', 1, 5, fp) gdal.VSIFCloseL(fp) fp = gdal.VSIFOpenL('/vsicrypt//vsimem/file.bin', 'rb') content = gdal.VSIFReadL(1, 5, fp).decode('latin1') gdal.VSIFCloseL(fp) if content != 'hello': gdaltest.post_reason('fail') return 'fail' fp = gdal.VSIFOpenL('/vsicrypt//vsimem/file.bin', 'wb+') if fp is None: gdaltest.post_reason('fail') return 'fail' gdal.VSIFWriteL('hello', 1, 5, fp) gdal.VSIFCloseL(fp) fp = gdal.VSIFOpenL('/vsicrypt//vsimem/file.bin', 'rb') content = gdal.VSIFReadL(1, 5, fp).decode('latin1') gdal.VSIFCloseL(fp) if content != 'hello': gdaltest.post_reason('fail') return 'fail' # Set a too short key testnonboundtoswig.gdal_handle.VSISetCryptKey('bbc'.encode('ASCII'), 3) with gdaltest.error_handler(): fp = gdal.VSIFOpenL('/vsicrypt//vsimem/file.bin', 'rb') if fp is not None: gdaltest.post_reason('fail') return 'fail' with gdaltest.error_handler(): fp = gdal.VSIFOpenL('/vsicrypt//vsimem/file.bin', 'wb+') if fp is not None: gdaltest.post_reason('fail') return 'fail' # Erase key testnonboundtoswig.gdal_handle.VSISetCryptKey(None, 0) with gdaltest.error_handler(): fp = gdal.VSIFOpenL('/vsicrypt//vsimem/file.bin', 'wb+') if fp is not None: gdaltest.post_reason('fail') return 'fail' gdal.Unlink('/vsimem/file.bin') return 'success'
def test_mrf_cached_source(): # Caching MRF gdal.Translate( '/vsimem/out.mrf', 'data/byte.tif', format='MRF', creationOptions=['CACHEDSOURCE=invalid_source', 'NOCOPY=TRUE']) ds = gdal.Open('/vsimem/out.mrf') with gdaltest.error_handler(): cs = ds.GetRasterBand(1).Checksum() expected_cs = 0 assert cs == expected_cs ds = None gdal.Unlink('/vsimem/out.mrf') gdal.Unlink('/vsimem/out.mrf.aux.xml') gdal.Unlink('/vsimem/out.idx') gdal.Unlink('/vsimem/out.ppg') gdal.Unlink('/vsimem/out.til') gdal.Unlink('tmp/byte.idx') gdal.Unlink('tmp/byte.ppg') open('tmp/byte.tif', 'wb').write(open('data/byte.tif', 'rb').read()) gdal.Translate('tmp/out.mrf', 'tmp/byte.tif', format='MRF', creationOptions=['CACHEDSOURCE=byte.tif', 'NOCOPY=TRUE']) ds = gdal.Open('tmp/out.mrf') cs = ds.GetRasterBand(1).Checksum() expected_cs = 4672 assert cs == expected_cs ds = None gdal.Unlink('tmp/byte.tif') ds = gdal.Open('tmp/out.mrf') cs = ds.GetRasterBand(1).Checksum() expected_cs = 4672 assert cs == expected_cs ds = None # Caching MRF in mp_safe mode gdal.Unlink('tmp/out.mrf') gdal.Unlink('tmp/out.mrf.aux.xml') gdal.Unlink('tmp/out.idx') gdal.Unlink('tmp/out.ppg') gdal.Unlink('tmp/out.til') open('tmp/byte.tif', 'wb').write(open('data/byte.tif', 'rb').read()) open('tmp/out.mrf', 'wt').write("""<MRF_META> <CachedSource> <Source>byte.tif</Source> </CachedSource> <Raster mp_safe="on"> <Size x="20" y="20" c="1" /> <PageSize x="512" y="512" c="1" /> </Raster> <GeoTags> <BoundingBox minx="440720.00000000" miny="3750120.00000000" maxx="441920.00000000" maxy="3751320.00000000" /> <Projection>PROJCS["NAD27 / UTM zone 11N",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982138982,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-117],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],UNIT["metre",1,AUTHORITY["EPSG","9001"]],AXIS["Easting",EAST],AXIS["Northing",NORTH],AUTHORITY["EPSG","26711"]]</Projection> </GeoTags> </MRF_META>""") ds = gdal.Open('tmp/out.mrf') cs = ds.GetRasterBand(1).Checksum() expected_cs = 4672 assert cs == expected_cs ds = None gdal.Unlink('tmp/byte.tif') ds = gdal.Open('tmp/out.mrf') cs = ds.GetRasterBand(1).Checksum() expected_cs = 4672 assert cs == expected_cs ds = None # Cloning MRF open('tmp/cloning.mrf', 'wt').write("""<MRF_META> <CachedSource> <Source clone="true">out.mrf</Source> </CachedSource> <Raster> <Size x="20" y="20" c="1" /> <PageSize x="512" y="512" c="1" /> </Raster> <GeoTags> <BoundingBox minx="440720.00000000" miny="3750120.00000000" maxx="441920.00000000" maxy="3751320.00000000" /> <Projection>PROJCS["NAD27 / UTM zone 11N",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982138982,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-117],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],UNIT["metre",1,AUTHORITY["EPSG","9001"]],AXIS["Easting",EAST],AXIS["Northing",NORTH],AUTHORITY["EPSG","26711"]]</Projection> </GeoTags> </MRF_META>""") ds = gdal.Open('tmp/cloning.mrf') cs = ds.GetRasterBand(1).Checksum() expected_cs = 4672 assert cs == expected_cs ds = None gdal.Unlink('tmp/out.mrf') gdal.Unlink('tmp/out.mrf.aux.xml') gdal.Unlink('tmp/out.idx') gdal.Unlink('tmp/out.ppg') gdal.Unlink('tmp/out.til') ds = gdal.Open('tmp/cloning.mrf') cs = ds.GetRasterBand(1).Checksum() expected_cs = 4672 assert cs == expected_cs ds = None gdal.Unlink('tmp/cloning.mrf') gdal.Unlink('tmp/cloning.mrf.aux.xml') gdal.Unlink('tmp/cloning.idx') gdal.Unlink('tmp/cloning.ppg') gdal.Unlink('tmp/cloning.til')
def ogr_plscenes_3(): if gdaltest.plscenes_drv is None: return 'skip' gdal.FileFromMemBuffer('/vsimem/root', '{"ortho":"/vsimem/root/ortho/"}') gdal.FileFromMemBuffer( '/vsimem/root/ortho/my_id', """{ "type": "Feature", "id": "my_id", "geometry": { "coordinates": [ [ [2,49],[2,50],[3,50],[3,49],[2,49] ] ], "type": "Polygon" }, "properties": { "acquired" : "2015-03-27T12:34:56.123+00", "camera" : { "bit_depth" : 12, "color_mode": "RGB" }, "cloud_cover" : { "estimated" : 0.25 } } }""") # Error case: raster file not accessible gdal.SetConfigOption('PL_URL', '/vsimem/root/') gdal.PushErrorHandler('CPLQuietErrorHandler') ds = gdal.OpenEx('PLScenes:', gdal.OF_RASTER, open_options=['API_KEY=foo', 'SCENE=my_id']) gdal.PopErrorHandler() gdal.SetConfigOption('PL_URL', None) if ds is not None: gdaltest.post_reason('fail') return 'fail' gdal.FileFromMemBuffer('/vsimem/root/ortho/my_id/full?product=visual', open('../gcore/data/byte.tif', 'rb').read()) gdal.FileFromMemBuffer('/vsimem/root/ortho/my_id/full?product=analytic', open('../gcore/data/byte.tif', 'rb').read()) gdal.FileFromMemBuffer('/vsimem/root/ortho/my_id/thumb', open('../gcore/data/byte.tif', 'rb').read()) gdal.SetConfigOption('PL_URL', '/vsimem/root/') gdal.PushErrorHandler() ds = gdal.OpenEx('PLScenes:api_key=foo,scene=my_id,unsupported_option=val', gdal.OF_RASTER) gdal.PopErrorHandler() gdal.SetConfigOption('PL_URL', None) if ds is not None or gdal.GetLastErrorMsg().find( 'Unsupported option unsupported_option') < 0: gdaltest.post_reason('fail') print(gdal.GetLastErrorMsg()) return 'fail' gdal.SetConfigOption('PL_URL', '/vsimem/root/') ds = gdal.OpenEx('PLScenes:', gdal.OF_RASTER, open_options=['API_KEY=foo', 'SCENE=my_id']) gdal.SetConfigOption('PL_URL', None) if ds is None: gdaltest.post_reason('fail') return 'fail' md = ds.GetMetadata() if md['id'] != 'my_id': gdaltest.post_reason('fail') return 'fail' ds = None gdal.SetConfigOption('PL_URL', '/vsimem/root/') ds = gdal.OpenEx( 'PLScenes:', gdal.OF_RASTER, open_options=['API_KEY=foo', 'SCENE=my_id', 'PRODUCT_TYPE=analytic']) gdal.SetConfigOption('PL_URL', None) if ds is None: gdaltest.post_reason('fail') return 'fail' md = ds.GetMetadata() if md['id'] != 'my_id': gdaltest.post_reason('fail') return 'fail' ds = None gdal.SetConfigOption('PL_URL', '/vsimem/root/') ds = gdal.OpenEx( 'PLScenes:', gdal.OF_RASTER, open_options=['API_KEY=foo', 'SCENE=my_id', 'PRODUCT_TYPE=thumb']) gdal.SetConfigOption('PL_URL', None) if ds is None: gdaltest.post_reason('fail') return 'fail' ds = None gdal.Unlink('/vsimem/root') gdal.Unlink('/vsimem/root/ortho/my_id/full?product=visual') gdal.Unlink('/vsimem/root/ortho/my_id/full?product=analytic') gdal.Unlink('/vsimem/root/ortho/my_id/thumb') gdal.Unlink('/vsimem/root/ortho/my_id') return 'success'
def test_gdal_edit_py_cleanup(): gdal.Unlink('tmp/test_gdal_edit_py.tif')
def warp_27(): # Open source dataset src_ds = gdal.Open('../gcore/data/byte.tif') # Desfine target SRS dst_srs = osr.SpatialReference() dst_srs.ImportFromEPSG(4326) dst_wkt = dst_srs.ExportToWkt() error_threshold = 0.125 # error threshold --> use same value as in gdalwarp resampling = gdal.GRA_Bilinear # Call AutoCreateWarpedVRT() to fetch default values for target raster dimensions and geotransform tmp_ds = gdal.AutoCreateWarpedVRT( src_ds, \ None, # src_wkt : left to default value --> will use the one from source \ dst_wkt, \ resampling, \ error_threshold ) dst_xsize = tmp_ds.RasterXSize dst_ysize = tmp_ds.RasterYSize dst_gt = tmp_ds.GetGeoTransform() tmp_ds = None # Now create the true target dataset dst_ds = gdal.GetDriverByName('GTiff').Create('tmp/warp_27.tif', dst_xsize, dst_ysize, src_ds.RasterCount) dst_ds.SetProjection(dst_wkt) dst_ds.SetGeoTransform(dst_gt) # And run the reprojection cbk = warp_27_progress_callback cbk_user_data = None # value for last parameter of above warp_27_progress_callback gdal.ReprojectImage( src_ds, \ dst_ds, \ None, # src_wkt : left to default value --> will use the one from source \ None, # dst_wkt : left to default value --> will use the one from destination \ resampling, \ 0, # WarpMemoryLimit : left to default value \ error_threshold, cbk, # Progress callback : could be left to None or unspecified for silent progress cbk_user_data) # Progress callback user data # Done ! dst_ds = None # Check that we have the same result as produced by 'gdalwarp -rb -t_srs EPSG:4326 ../gcore/data/byte.tif tmp/warp_27.tif' ds = gdal.Open('tmp/warp_27.tif') cs = ds.GetRasterBand(1).Checksum() ds = None ds = gdal.Warp('tmp/warp_27_ref.tif', '../gcore/data/byte.tif', options='-rb -t_srs EPSG:4326') ref_cs = ds.GetRasterBand(1).Checksum() ds = None if cs != ref_cs: return 'fail' gdal.Unlink('tmp/warp_27.tif') gdal.Unlink('tmp/warp_27_ref.tif') return 'success'
def vsiswift_extra_1(): if not gdaltest.built_against_curl(): return 'skip' swift_resource = gdal.GetConfigOption('SWIFT_RESOURCE') if swift_resource is None: print('Missing SWIFT_RESOURCE for running gdaltest_list_extra') return 'skip' if swift_resource.find('/') < 0: path = '/vsiswift/' + swift_resource statres = gdal.VSIStatL(path) if statres is None or not stat.S_ISDIR(statres.mode): gdaltest.post_reason('fail') print('%s is not a valid bucket' % path) return 'fail' readdir = gdal.ReadDir(path) if readdir is None: gdaltest.post_reason('fail') print('ReadDir() should not return empty list') return 'fail' for filename in readdir: if filename != '.': subpath = path + '/' + filename if gdal.VSIStatL(subpath) is None: gdaltest.post_reason('fail') print('Stat(%s) should not return an error' % subpath) return 'fail' unique_id = 'vsiswift_test' subpath = path + '/' + unique_id ret = gdal.Mkdir(subpath, 0) if ret < 0: gdaltest.post_reason('fail') print('Mkdir(%s) should not return an error' % subpath) return 'fail' readdir = gdal.ReadDir(path) if unique_id not in readdir: gdaltest.post_reason('fail') print('ReadDir(%s) should contain %s' % (path, unique_id)) print(readdir) return 'fail' ret = gdal.Mkdir(subpath, 0) if ret == 0: gdaltest.post_reason('fail') print('Mkdir(%s) repeated should return an error' % subpath) return 'fail' ret = gdal.Rmdir(subpath) if ret < 0: gdaltest.post_reason('fail') print('Rmdir(%s) should not return an error' % subpath) return 'fail' readdir = gdal.ReadDir(path) if unique_id in readdir: gdaltest.post_reason('fail') print('ReadDir(%s) should not contain %s' % (path, unique_id)) print(readdir) return 'fail' ret = gdal.Rmdir(subpath) if ret == 0: gdaltest.post_reason('fail') print('Rmdir(%s) repeated should return an error' % subpath) return 'fail' ret = gdal.Mkdir(subpath, 0) if ret < 0: gdaltest.post_reason('fail') print('Mkdir(%s) should not return an error' % subpath) return 'fail' f = gdal.VSIFOpenL(subpath + '/test.txt', 'wb') if f is None: gdaltest.post_reason('fail') return 'fail' gdal.VSIFWriteL('hello', 1, 5, f) gdal.VSIFCloseL(f) ret = gdal.Rmdir(subpath) if ret == 0: gdaltest.post_reason('fail') print('Rmdir(%s) on non empty directory should return an error' % subpath) return 'fail' f = gdal.VSIFOpenL(subpath + '/test.txt', 'rb') if f is None: gdaltest.post_reason('fail') return 'fail' data = gdal.VSIFReadL(1, 5, f).decode('utf-8') if data != 'hello': gdaltest.post_reason('fail') print(data) return 'fail' gdal.VSIFCloseL(f) ret = gdal.Unlink(subpath + '/test.txt') if ret < 0: gdaltest.post_reason('fail') print('Unlink(%s) should not return an error' % (subpath + '/test.txt')) return 'fail' ret = gdal.Rmdir(subpath) if ret < 0: gdaltest.post_reason('fail') print('Rmdir(%s) should not return an error' % subpath) return 'fail' return 'success' f = open_for_read('/vsiswift/' + swift_resource) if f is None: gdaltest.post_reason('fail') return 'fail' ret = gdal.VSIFReadL(1, 1, f) gdal.VSIFCloseL(f) if len(ret) != 1: gdaltest.post_reason('fail') print(ret) return 'fail' # Same with /vsiswift_streaming/ f = open_for_read('/vsiswift_streaming/' + swift_resource) if f is None: gdaltest.post_reason('fail') return 'fail' ret = gdal.VSIFReadL(1, 1, f) gdal.VSIFCloseL(f) if len(ret) != 1: gdaltest.post_reason('fail') print(ret) return 'fail' # Invalid resource gdal.ErrorReset() f = open_for_read('/vsiswift_streaming/' + swift_resource + '/invalid_resource.baz') if f is not None: gdaltest.post_reason('fail') print(gdal.VSIGetLastErrorMsg()) return 'fail' return 'success'
def test_jpeg_28(): tmpfilename = '/vsimem/jpeg_28.jpg' # Nothing src_ds = gdal.GetDriverByName('MEM').Create('', 1, 1) ds = gdal.GetDriverByName('JPEG').CreateCopy(tmpfilename, src_ds) src_ds = None ds = gdal.Open(tmpfilename) assert not ds.GetMetadata() # EXIF tags only src_ds = gdal.GetDriverByName('MEM').Create('', 1, 1) src_ds.SetMetadataItem('EXIF_DateTime', 'dt') # not enough values ASCII src_ds.SetMetadataItem('EXIF_DateTimeOriginal', '01234567890123456789') # truncated ASCII src_ds.SetMetadataItem('EXIF_DateTimeDigitized', '0123456789012345678') # right number of items ASCII src_ds.SetMetadataItem('EXIF_Make', 'make') # variable ASCII src_ds.SetMetadataItem('EXIF_ExifVersion', '01234') # truncated UNDEFINED src_ds.SetMetadataItem('EXIF_ComponentsConfiguration', '0x1F') # not enough values UNDEFINED src_ds.SetMetadataItem('EXIF_FlashpixVersion', 'ABCD') # right number of items UNDEFINED src_ds.SetMetadataItem('EXIF_SpatialFrequencyResponse', '0xab 0xCD') # variable UNDEFINED src_ds.SetMetadataItem('EXIF_Orientation', '10') # right number of items SHORT src_ds.SetMetadataItem('EXIF_ResolutionUnit', '2 4') # truncated SHORT src_ds.SetMetadataItem('EXIF_TransferFunction', '0 1') # not enough values SHORT src_ds.SetMetadataItem('EXIF_ISOSpeedRatings', '1 2 3') # variable SHORT src_ds.SetMetadataItem('EXIF_StandardOutputSensitivity', '123456789') # right number of items LONG src_ds.SetMetadataItem('EXIF_XResolution', '96') # right number of items RATIONAL src_ds.SetMetadataItem('EXIF_YResolution', '96 0') # truncated RATIONAL src_ds.SetMetadataItem('EXIF_CompressedBitsPerPixel', 'nan') # invalid RATIONAL src_ds.SetMetadataItem('EXIF_ApertureValue', '-1') # invalid RATIONAL with gdaltest.error_handler(): gdal.GetDriverByName('JPEG').CreateCopy(tmpfilename, src_ds) src_ds = None assert gdal.VSIStatL(tmpfilename + '.aux.xml') is None ds = gdal.Open(tmpfilename) got_md = ds.GetMetadata() expected_md = {'EXIF_DateTimeDigitized': '0123456789012345678', 'EXIF_DateTimeOriginal': '0123456789012345678', 'EXIF_Orientation': '10', 'EXIF_ApertureValue': '(0)', 'EXIF_YResolution': '(96)', 'EXIF_XResolution': '(96)', 'EXIF_TransferFunction': '0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0', 'EXIF_ExifVersion': '0123', 'EXIF_DateTime': 'dt ', 'EXIF_FlashpixVersion': 'ABCD', 'EXIF_ComponentsConfiguration': '0x1f 0x00 0x00 0x00', 'EXIF_Make': 'make', 'EXIF_StandardOutputSensitivity': '123456789', 'EXIF_ResolutionUnit': '2', 'EXIF_CompressedBitsPerPixel': '(0)', 'EXIF_SpatialFrequencyResponse': '0xab 0xcd', 'EXIF_ISOSpeedRatings': '1 2 3'} assert got_md == expected_md # Test SRATIONAL for val in (-1.5, -1, -0.5, 0, 0.5, 1, 1.5): src_ds = gdal.GetDriverByName('MEM').Create('', 1, 1) src_ds.SetMetadataItem('EXIF_ShutterSpeedValue', str(val)) gdal.GetDriverByName('JPEG').CreateCopy(tmpfilename, src_ds) src_ds = None assert gdal.VSIStatL(tmpfilename + '.aux.xml') is None ds = gdal.Open(tmpfilename) got_val = ds.GetMetadataItem('EXIF_ShutterSpeedValue') got_val = got_val.replace('(', '').replace(')', '') assert float(got_val) == val, ds.GetMetadataItem('EXIF_ShutterSpeedValue') # Test RATIONAL for val in (0, 0.5, 1, 1.5): src_ds = gdal.GetDriverByName('MEM').Create('', 1, 1) src_ds.SetMetadataItem('EXIF_ApertureValue', str(val)) gdal.GetDriverByName('JPEG').CreateCopy(tmpfilename, src_ds) src_ds = None assert gdal.VSIStatL(tmpfilename + '.aux.xml') is None ds = gdal.Open(tmpfilename) got_val = ds.GetMetadataItem('EXIF_ApertureValue') got_val = got_val.replace('(', '').replace(')', '') assert float(got_val) == val, ds.GetMetadataItem('EXIF_ApertureValue') # GPS tags only src_ds = gdal.GetDriverByName('MEM').Create('', 1, 1) src_ds.SetMetadataItem('EXIF_GPSLatitudeRef', 'N') src_ds.SetMetadataItem('EXIF_GPSLatitude', '49 34 56.5') gdal.GetDriverByName('JPEG').CreateCopy(tmpfilename, src_ds) src_ds = None assert gdal.VSIStatL(tmpfilename + '.aux.xml') is None ds = gdal.Open(tmpfilename) got_md = ds.GetMetadata() assert got_md == {'EXIF_GPSLatitudeRef': 'N', 'EXIF_GPSLatitude': '(49) (34) (56.5)'} ds = None # EXIF and GPS tags src_ds = gdal.GetDriverByName('MEM').Create('', 1, 1) src_ds.SetMetadataItem('EXIF_ExifVersion', '0231') src_ds.SetMetadataItem('EXIF_GPSLatitudeRef', 'N') gdal.GetDriverByName('JPEG').CreateCopy(tmpfilename, src_ds) src_ds = None assert gdal.VSIStatL(tmpfilename + '.aux.xml') is None ds = gdal.Open(tmpfilename) got_md = ds.GetMetadata() assert got_md == {'EXIF_ExifVersion': '0231', 'EXIF_GPSLatitudeRef': 'N'} ds = None # EXIF and other metadata src_ds = gdal.GetDriverByName('MEM').Create('', 1, 1) src_ds.SetMetadataItem('EXIF_ExifVersion', '0231') src_ds.SetMetadataItem('EXIF_invalid', 'foo') src_ds.SetMetadataItem('FOO', 'BAR') with gdaltest.error_handler(): gdal.GetDriverByName('JPEG').CreateCopy(tmpfilename, src_ds) src_ds = None assert gdal.VSIStatL(tmpfilename + '.aux.xml') is not None ds = gdal.Open(tmpfilename) got_md = ds.GetMetadata() assert got_md == {'EXIF_ExifVersion': '0231', 'EXIF_invalid': 'foo', 'FOO': 'BAR'} ds = None # Too much content for EXIF src_ds = gdal.GetDriverByName('MEM').Create('', 1, 1) src_ds.SetMetadataItem('EXIF_UserComment', 'x' * 65535) with gdaltest.error_handler(): gdal.GetDriverByName('JPEG').CreateCopy(tmpfilename, src_ds) src_ds = None ds = None # EXIF and GPS tags and EXIF overview src_ds = gdal.GetDriverByName('MEM').Create('', 1024, 1024) src_ds.SetMetadataItem('EXIF_ExifVersion', '0231') src_ds.SetMetadataItem('EXIF_GPSLatitudeRef', 'N') gdal.GetDriverByName('JPEG').CreateCopy(tmpfilename, src_ds, options=['EXIF_THUMBNAIL=YES', 'THUMBNAIL_WIDTH=32', 'THUMBNAIL_HEIGHT=32']) src_ds = None assert gdal.VSIStatL(tmpfilename + '.aux.xml') is None ds = gdal.Open(tmpfilename) got_md = ds.GetMetadata() assert got_md == {'EXIF_ExifVersion': '0231', 'EXIF_GPSLatitudeRef': 'N'} assert ds.GetRasterBand(1).GetOverview(ds.GetRasterBand(1).GetOverviewCount() - 1).XSize == 32 ds = None gdal.Unlink(tmpfilename)
def test_tiff_srs_angular_units(): ds = gdal.GetDriverByName('GTiff').Create('/vsimem/tiff_srs_angular_units.tif', 1, 1) ds.SetProjection("""GEOGCS["WGS 84 (arc-second)", DATUM["WGS_1984 (arc-second)", SPHEROID["WGS 84",6378137,298.257223563]], PRIMEM["Greenwich",0], UNIT["arc-second",4.848136811095361e-06]]""") ds = None ds = gdal.Open('/vsimem/tiff_srs_angular_units.tif') wkt = ds.GetProjectionRef() assert 'UNIT["arc-second",4.84813681109536E-06' in wkt ds = None ds = gdal.GetDriverByName('GTiff').Create('/vsimem/tiff_srs_angular_units.tif', 1, 1) ds.SetProjection("""GEOGCS["WGS 84 (arc-minute)", DATUM["WGS_1984 (arc-minute)", SPHEROID["WGS 84",6378137,298.257223563]], PRIMEM["Greenwich",0], UNIT["arc-minute",0.0002908882086657216]]""") ds = None ds = gdal.Open('/vsimem/tiff_srs_angular_units.tif') wkt = ds.GetProjectionRef() assert 'UNIT["arc-minute",0.000290888208665722]' in wkt ds = None ds = gdal.GetDriverByName('GTiff').Create('/vsimem/tiff_srs_angular_units.tif', 1, 1) ds.SetProjection("""GEOGCS["WGS 84 (grad)", DATUM["WGS_1984 (grad)", SPHEROID["WGS 84",6378137,298.257223563]], PRIMEM["Greenwich",0], UNIT["grad",0.01570796326794897]]""") ds = None ds = gdal.Open('/vsimem/tiff_srs_angular_units.tif') wkt = ds.GetProjectionRef() assert 'UNIT["grad",0.015707963267949' in wkt ds = None ds = gdal.GetDriverByName('GTiff').Create('/vsimem/tiff_srs_angular_units.tif', 1, 1) ds.SetProjection("""GEOGCS["WGS 84 (gon)", DATUM["WGS_1984 (gon)", SPHEROID["WGS 84",6378137,298.257223563]], PRIMEM["Greenwich",0], UNIT["gon",0.01570796326794897]]""") ds = None ds = gdal.Open('/vsimem/tiff_srs_angular_units.tif') wkt = ds.GetProjectionRef() assert 'UNIT["gon",0.015707963267949]' in wkt ds = None ds = gdal.GetDriverByName('GTiff').Create('/vsimem/tiff_srs_angular_units.tif', 1, 1) ds.SetProjection("""GEOGCS["WGS 84 (radian)", DATUM["WGS_1984 (radian)", SPHEROID["WGS 84",6378137,298.257223563]], PRIMEM["Greenwich",0], UNIT["radian",1]]""") ds = None ds = gdal.Open('/vsimem/tiff_srs_angular_units.tif') wkt = ds.GetProjectionRef() assert 'UNIT["radian",1]' in wkt ds = None ds = gdal.GetDriverByName('GTiff').Create('/vsimem/tiff_srs_angular_units.tif', 1, 1) ds.SetProjection("""GEOGCS["WGS 84 (custom)", DATUM["WGS_1984 (custom)", SPHEROID["WGS 84",6378137,298.257223563]], PRIMEM["Greenwich",0], UNIT["custom",1.23]]""") ds = None ds = gdal.Open('/vsimem/tiff_srs_angular_units.tif') wkt = ds.GetProjectionRef() assert 'UNIT["custom",1.23]' in wkt ds = None gdal.Unlink('/vsimem/tiff_srs_angular_units.tif')
def stats_uint16(): ds = gdal.Translate( '/vsimem/stats_uint16_tiled.tif', '../gdrivers/data/small_world.tif', outputType=gdal.GDT_UInt16, scaleParams=[[0, 255, 0, 65535]], creationOptions=['TILED=YES', 'BLOCKXSIZE=64', 'BLOCKYSIZE=64']) stats = ds.GetRasterBand(1).GetStatistics(0, 1) ds = None gdal.GetDriverByName('GTiff').Delete('/vsimem/stats_uint16_tiled.tif') expected_stats = [ 0.0, 65535.0, 50.22115 * 65535 / 255, 67.119029288849973 * 65535 / 255 ] if stats != expected_stats: gdaltest.post_reason('did not get expected stats') print(stats) print(expected_stats) return 'fail' ds = gdal.Translate( '/vsimem/stats_uint16_untiled.tif', '../gdrivers/data/small_world.tif', options='-srcwin 0 0 399 200 -scale 0 255 0 65535 -ot UInt16') stats = ds.GetRasterBand(1).GetStatistics(0, 1) ds = None gdal.GetDriverByName('GTiff').Delete('/vsimem/stats_uint16_untiled.tif') expected_stats = [0.0, 65535.0, 12923.9921679198, 17259.703026841547] if stats != expected_stats: gdaltest.post_reason('did not get expected stats') print(stats) print(expected_stats) return 'fail' # Same but with nodata set but untiled and with non power of 16 block size ds = gdal.Translate( '/vsimem/stats_uint16_untiled.tif', '../gdrivers/data/small_world.tif', options='-srcwin 0 0 399 200 -scale 0 255 0 65535 -ot UInt16') ds.GetRasterBand(1).SetNoDataValue(0) stats = ds.GetRasterBand(1).GetStatistics(0, 1) ds = None gdal.GetDriverByName('GTiff').Delete('/vsimem/stats_uint16_untiled.tif') expected_stats = [ 257.0, 65535.0, 50.378183963744554 * 65535 / 255, 67.184793517649453 * 65535 / 255 ] if stats != expected_stats: gdaltest.post_reason('did not get expected stats') print(stats) print(expected_stats) return 'fail' for fill_val in [0, 1, 32767, 32768, 65535]: ds = gdal.GetDriverByName('GTiff').Create( '/vsimem/stats_uint16_tiled.tif', 1000, 512, 1, gdal.GDT_UInt16, options=['TILED=YES', 'BLOCKXSIZE=512', 'BLOCKYSIZE=512']) ds.GetRasterBand(1).Fill(fill_val) stats = ds.GetRasterBand(1).GetStatistics(0, 1) ds = None gdal.Unlink('/vsimem/stats_uint16_tiled.tif') expected_stats = [fill_val, fill_val, fill_val, 0.0] if max([abs(stats[i] - expected_stats[i]) for i in range(4)]) > 1e-15: gdaltest.post_reason('did not get expected stats') print(stats) print(fill_val) print(expected_stats) return 'fail' # Test remaining pixels after multiple of 32 ds = gdal.GetDriverByName('MEM').Create('', 32 + 2, 1, 1, gdal.GDT_UInt16) ds.GetRasterBand(1).Fill(1) ds.GetRasterBand(1).WriteRaster(32, 0, 2, 1, struct.pack('H' * 2, 0, 65535)) stats = ds.GetRasterBand(1).GetStatistics(0, 1) ds = None expected_stats = [0.0, 65535.0, 1928.4411764705883, 11072.48066469611] if max([abs(stats[i] - expected_stats[i]) for i in range(4)]) > 1e-15: gdaltest.post_reason('did not get expected stats') print(stats) print(expected_stats) return 'fail' # Non optimized code path for fill_val in [0, 1, 32767, 32768, 65535]: ds = gdal.GetDriverByName('MEM').Create('', 1, 1, 1, gdal.GDT_UInt16) ds.GetRasterBand(1).WriteRaster(0, 0, 1, 1, struct.pack('H' * 1, fill_val)) stats = ds.GetRasterBand(1).GetStatistics(0, 1) ds = None expected_stats = [fill_val, fill_val, fill_val, 0.0] if max([abs(stats[i] - expected_stats[i]) for i in range(4)]) > 1e-15: gdaltest.post_reason('did not get expected stats') print(stats) print(fill_val) print(expected_stats) return 'fail' ds = gdal.GetDriverByName('MEM').Create('', 3, 5, 1, gdal.GDT_UInt16) ds.GetRasterBand(1).WriteRaster(0, 0, 3, 1, struct.pack('H' * 3, 20, 30, 50)) ds.GetRasterBand(1).WriteRaster(0, 1, 3, 1, struct.pack('H' * 3, 60, 10, 5)) ds.GetRasterBand(1).WriteRaster(0, 2, 3, 1, struct.pack('H' * 3, 10, 20, 0)) ds.GetRasterBand(1).WriteRaster(0, 3, 3, 1, struct.pack('H' * 3, 10, 20, 65535)) ds.GetRasterBand(1).WriteRaster(0, 4, 3, 1, struct.pack('H' * 3, 10, 20, 10)) stats = ds.GetRasterBand(1).GetStatistics(0, 1) ds = None expected_stats = [0.0, 65535.0, 4387.333333333333, 16342.408927558861] if max([abs(stats[i] - expected_stats[i]) for i in range(4)]) > 1e-15: gdaltest.post_reason('did not get expected stats') print(stats) print(expected_stats) return 'fail' ds = gdal.GetDriverByName('MEM').Create('', 2, 2, 1, gdal.GDT_UInt16) ds.GetRasterBand(1).WriteRaster(0, 0, 2, 1, struct.pack('H' * 2, 0, 65535)) ds.GetRasterBand(1).WriteRaster(0, 1, 2, 1, struct.pack('H' * 2, 1, 65534)) stats = ds.GetRasterBand(1).GetStatistics(0, 1) ds = None expected_stats = [0.0, 65535.0, 32767.5, 32767.000003814814] if max([abs(stats[i] - expected_stats[i]) for i in range(4)]) > 1e-15: gdaltest.post_reason('did not get expected stats') print(stats) return 'fail' return 'success'
def test_ogr_pgdump_7(): ds = ogr.GetDriverByName('PGDump').CreateDataSource( '/vsimem/ogr_pgdump_7.sql', options=['LINEFORMAT=LF']) lyr = ds.CreateLayer('test', geom_type=ogr.wkbNone, options=['FID=myfid']) lyr.CreateField(ogr.FieldDefn('str', ogr.OFTString)) gdal.PushErrorHandler() ret = lyr.CreateField(ogr.FieldDefn('myfid', ogr.OFTString)) gdal.PopErrorHandler() assert ret != 0 ret = lyr.CreateField(ogr.FieldDefn('myfid', ogr.OFTInteger)) assert ret == 0 lyr.CreateField(ogr.FieldDefn('str2', ogr.OFTString)) feat = ogr.Feature(lyr.GetLayerDefn()) feat.SetField('str', 'first string') feat.SetField('myfid', 10) feat.SetField('str2', 'second string') ret = lyr.CreateFeature(feat) assert ret == 0 assert feat.GetFID() == 10 feat = ogr.Feature(lyr.GetLayerDefn()) feat.SetField('str2', 'second string') ret = lyr.CreateFeature(feat) assert ret == 0 if feat.GetFID() < 0: feat.DumpReadable() pytest.fail() if feat.GetField('myfid') != feat.GetFID(): feat.DumpReadable() pytest.fail() # feat.SetField('str', 'foo') # ret = lyr.SetFeature(feat) # if ret != 0: # gdaltest.post_reason('fail') # return 'fail' feat = ogr.Feature(lyr.GetLayerDefn()) feat.SetFID(1) feat.SetField('myfid', 10) gdal.PushErrorHandler() ret = lyr.CreateFeature(feat) gdal.PopErrorHandler() assert ret != 0 # gdal.PushErrorHandler() # ret = lyr.SetFeature(feat) # gdal.PopErrorHandler() # if ret == 0: # gdaltest.post_reason('fail') # return 'fail' # feat.UnsetField('myfid') # gdal.PushErrorHandler() # ret = lyr.SetFeature(feat) # gdal.PopErrorHandler() # if ret == 0: # gdaltest.post_reason('fail') # return 'fail' feat = ogr.Feature(lyr.GetLayerDefn()) feat.SetField('str', 'first string') feat.SetField('myfid', 12) feat.SetField('str2', 'second string') ret = lyr.CreateFeature(feat) assert ret == 0 assert feat.GetFID() == 12 ds = None f = gdal.VSIFOpenL('/vsimem/ogr_pgdump_7.sql', 'rb') sql = gdal.VSIFReadL(1, 10000, f).decode('ascii') gdal.VSIFCloseL(f) gdal.Unlink('/vsimem/ogr_pgdump_7.sql') assert (not ("""CREATE TABLE "public"."test" ( "myfid" SERIAL, CONSTRAINT "test_pk" PRIMARY KEY ("myfid") )""" not in sql or \ """ALTER TABLE "public"."test" ADD COLUMN "myfid" """ in sql or \ sql.find("""INSERT INTO "public"."test" ("myfid" , "str", "str2") VALUES (10, 'first string', 'second string');""") == -1 or \ sql.find("""INSERT INTO "public"."test" ("str2") VALUES ('second string');""") == -1 or \ sql.find("""INSERT INTO "public"."test" ("myfid" , "str", "str2") VALUES (12, 'first string', 'second string');""") == -1))