def osr_url_test(url, expected_wkt): timeout = 10 socket.setdefaulttimeout(timeout) if gdaltest.gdalurlopen(url) is None: return 'skip' """Depend on the Accepts headers that ImportFromUrl sets to request SRS from sr.org""" srs = osr.SpatialReference() import gdal gdal.PushErrorHandler( 'CPLQuietErrorHandler' ) try: srs.ImportFromUrl( url ) except AttributeError: # old-gen bindings don't have this method yet return 'skip' except Exception: gdal.PopErrorHandler() if gdal.GetLastErrorMsg() == "GDAL/OGR not compiled with libcurl support, remote requests not supported." or \ gdal.GetLastErrorMsg().find("timed out") != -1: return 'skip' else: gdaltest.post_reason( 'exception: ' + gdal.GetLastErrorMsg() ) return 'fail' gdal.PopErrorHandler() if gdal.GetLastErrorMsg() == "GDAL/OGR not compiled with libcurl support, remote requests not supported." or \ gdal.GetLastErrorMsg().find("timed out") != -1: return 'skip' if not gdaltest.equal_srs_from_wkt( expected_wkt, srs.ExportToWkt() ): return 'fail' return 'success'
def jpeg_6(): ds = gdal.Open('data/vophead.jpg') # Bacause of the optimization done in r17446, we should'nt yet get this error if gdal.GetLastErrorType() == 2 \ and gdal.GetLastErrorMsg().find('Ignoring EXIF') != -1: gdaltest.post_reason('got error too soon.') return 'fail' md = ds.GetMetadata() # Did we get an exif related warning? if gdal.GetLastErrorType() != 2 \ or gdal.GetLastErrorMsg().find('Ignoring EXIF') == -1: gdaltest.post_reason('we did not get expected error.') return 'fail' if len(md) != 1 or md['EXIF_Software'] != 'IrfanView': gdaltest.post_reason('did not get expected metadata.') print(md) return 'fail' ds = None return 'success'
def __init__(self, source, target=None): """ Initialize coordinate transform. source -- source osr.SpatialReference coordinate system. target -- destination osr.SpatialReference coordinate system. """ # # NOTE: A special requirement of the Atlantis Peppers system is # that it needs to be able to instantiate a coordinate tranform # by just passing in a tuple with two SpatialReference objects. We # assume this is the case if target is None. self._o = None if target is None: target = source[1] source = source[0] gdal.ErrorReset() self._o = _gdal.OCTNewCoordinateTransformation(source._o, target._o) if self._o is None or self._o == 'NULL': if len(gdal.GetLastErrorMsg()) > 0: raise ValueError, gdal.GetLastErrorMsg() else: raise ValueError, 'Failed to create coordinate transformation.'
def osr_ct_1(): gdaltest.have_proj4 = 0 utm_srs = osr.SpatialReference() utm_srs.SetUTM(11) utm_srs.SetWellKnownGeogCS('WGS84') ll_srs = osr.SpatialReference() ll_srs.SetWellKnownGeogCS('WGS84') gdal.PushErrorHandler('CPLQuietErrorHandler') try: ct = osr.CoordinateTransformation(ll_srs, utm_srs) except ValueError: gdal.PopErrorHandler() if gdal.GetLastErrorMsg().find('Unable to load PROJ.4') != -1: gdaltest.post_reason('PROJ.4 missing, transforms not available.') return 'skip' else: gdaltest.post_reason(gdal.GetLastErrorMsg()) return 'fail' gdal.PopErrorHandler() if ct is None or ct.this is None: gdaltest.post_reason('Unable to create simple CoordinateTransformat.') return 'fail' gdaltest.have_proj4 = 1 return 'success'
def rasterio_5(): ds = gdal.Open('data/byte.tif') for obj in [ds, ds.GetRasterBand(1)]: gdal.ErrorReset() gdal.PushErrorHandler('CPLQuietErrorHandler') res = obj.ReadRaster(0,0,21,21) gdal.PopErrorHandler() error_msg = gdal.GetLastErrorMsg() if res is not None: gdaltest.post_reason('expected None') return 'fail' if error_msg.find('Access window out of range in RasterIO()') == -1: gdaltest.post_reason('did not get expected error msg (1)') print(error_msg) return 'fail' import sys # This should only fail on a 32bit build try: maxsize = sys.maxint except: maxsize = sys.maxsize # On win64, maxsize == 2147483647 and ReadRaster() # fails because of out of memory condition, not # because of integer overflow. I'm not sure on how # to detect win64 better. if maxsize == 2147483647 and sys.platform != 'win32': gdal.ErrorReset() gdal.PushErrorHandler('CPLQuietErrorHandler') res = obj.ReadRaster(0,0,1000000,1000000) gdal.PopErrorHandler() error_msg = gdal.GetLastErrorMsg() if res is not None: gdaltest.post_reason('expected None') return 'fail' if error_msg.find('Integer overflow') == -1: gdaltest.post_reason('did not get expected error msg (2)') print(error_msg) return 'fail' gdal.ErrorReset() gdal.PushErrorHandler('CPLQuietErrorHandler') res = obj.ReadRaster(0,0,0,1) gdal.PopErrorHandler() error_msg = gdal.GetLastErrorMsg() if res is not None: gdaltest.post_reason('expected None') return 'fail' if error_msg.find('Illegal values for buffer size') == -1: gdaltest.post_reason('did not get expected error msg (3)') print(error_msg) return 'fail' ds = None return 'success'
def vrt_read_7(): filename = "/vsimem/vrt_read_7.vrt" content = """<VRTDataset rasterXSize="20" rasterYSize="20"> <VRTRasterBand dataType="Byte" band="1"> <SimpleSource> <SourceFilename relativeToVRT="1">%s</SourceFilename> <SourceBand>1</SourceBand> <SrcRect xOff="0" yOff="0" xSize="20" ySize="20" /> <DstRect xOff="0" yOff="0" xSize="20" ySize="20" /> </SimpleSource> </VRTRasterBand> </VRTDataset>""" % filename gdal.FileFromMemBuffer(filename, content) gdal.PushErrorHandler('CPLQuietErrorHandler') ds = gdal.Open(filename) gdal.PopErrorHandler() error_msg = gdal.GetLastErrorMsg() gdal.Unlink(filename) if ds is not None: return 'fail' if error_msg != 'GDALOpen() called with too many recursion levels': return 'fail' return 'success'
def LoadFile(filename, xoff=0, yoff=0, xsize=None, ysize=None): ds = gdal.Open(filename) if ds is None: raise ValueError("Can't open " + filename + "\n\n" + gdal.GetLastErrorMsg()) return DatasetReadAsArray(ds, xoff, yoff, xsize, ysize)
def wms_4(): if gdaltest.wms_drv is None or gdaltest.wms_ds is None: return 'skip' if not gdaltest.wms_srv1_ok: return 'skip' gdal.SetConfigOption('CPL_ACCUM_ERROR_MSG', 'ON') gdal.PushErrorHandler('CPLQuietErrorHandler') cs = gdaltest.wms_ds.GetRasterBand(1).Checksum(0, 0, 100, 100) gdal.PopErrorHandler() gdal.SetConfigOption('CPL_ACCUM_ERROR_MSG', 'OFF') msg = gdal.GetLastErrorMsg() gdal.ErrorReset() if msg is not None and msg.find( 'Service denied due to system overload') != -1: print(msg) return 'skip' if cs != 57182: gdaltest.post_reason('Wrong checksum: ' + str(cs)) return 'fail' return 'success'
def dted_8(): # this will enable DTED_VERIFY_CHECKSUM gdal.SetConfigOption('DTED_VERIFY_CHECKSUM', 'YES') ds = gdal.Open( 'data/n43_bad_crc.dt0' ) band = ds.GetRasterBand(1) # numerous errors would be reported gdal.PushErrorHandler( 'CPLQuietErrorHandler' ) chksum = band.Checksum() gdal.PopErrorHandler() gdal.SetConfigOption('DTED_VERIFY_CHECKSUM', 'NO') if gdal.GetLastErrorMsg() is None: gdaltest.post_reason( 'An expected warning was not emitted' ) return 'fail' # 49187 is the checksum of data is the DTED is read without checking its checksum # so we should not get this value if chksum == 49187: gdaltest.post_reason('DTED_VERIFY_CHECKSUM=YES has had no effect!') return 'fail' return 'success'
def ogr_wfs_deegree_gml321(): if gdaltest.wfs_drv is None: return 'skip' if not gdaltest.have_gml_reader: return 'skip' if gdaltest.gdalurlopen('http://deegree3-demo.deegree.org:80/deegree-inspire-node/services') is None: print('cannot open URL') return 'skip' ds = ogr.Open('WFS:http://deegree3-demo.deegree.org:80/deegree-inspire-node/services?MAXFEATURES=10') if ds is None: if gdal.GetLastErrorMsg().find("Unable to determine the subcontroller for request type 'GetCapabilities' and service type 'WFS'") != -1: return 'skip' return 'fail' lyr = ds.GetLayerByName("ad:Address") count = lyr.GetFeatureCount() if count != 10: print(count) return 'fail' lyr = ds.GetLayerByName("au:AdministrativeBoundary") count = lyr.GetFeatureCount() if count != 0: print(count) return 'fail' return 'success'
def ogr_wfs_init(): gdaltest.wfs_drv = None try: gdaltest.wfs_drv = ogr.GetDriverByName('WFS') except: pass if gdaltest.wfs_drv is None: return 'skip' gdaltest.have_gml_reader = 0 gdaltest.geoserver_wfs = None gdaltest.deegree_wfs = None gdaltest.ionic_wfs = None try: gml_ds = ogr.Open('data/ionic_wfs.gml') except: gml_ds = None if gml_ds is None: if gdal.GetLastErrorMsg().find('Xerces') != -1: return 'skip' else: gdaltest.post_reason('failed to open test file.') return 'skip' gdaltest.have_gml_reader = 1 return 'success'
def ogr_geos_unioncascaded(): if not ogrtest.have_geos(): return 'skip' g1 = ogr.CreateGeometryFromWkt( 'MULTIPOLYGON(((0 0,0 1,1 1,1 0,0 0)),((0.5 0.5,0.5 1.5,1.5 1.5,1.5 0.5,0.5 0.5)))' ) gdal.ErrorReset() cascadedunion = g1.UnionCascaded() g1.Destroy() if cascadedunion is None: msg = gdal.GetLastErrorMsg() if msg.find('GEOS >=') != -1: return 'skip' if cascadedunion.ExportToWkt( ) != 'POLYGON ((0 0,0 1,0.5 1.0,0.5 1.5,1.5 1.5,1.5 0.5,1.0 0.5,1 0,0 0))': print('Got: ', cascadedunion.ExportToWkt()) return 'fail' cascadedunion.Destroy() return 'success'
def basic_test_7_internal(): try: ds = gdal.Open('non_existing_ds', gdal.GA_ReadOnly) gdaltest.post_reason('opening should have thrown an exception') return 'fail' except: # Special case: we should still be able to get the error message # until we call a new GDAL function if gdal.GetLastErrorMsg( ) != '`non_existing_ds\' does not exist in the file system,\nand is not recognised as a supported dataset name.\n': gdaltest.post_reason('did not get expected error message') return 'fail' if gdal.GetLastErrorType() == 0: gdaltest.post_reason('did not get expected error type') return 'fail' # Should issue an implicit CPLErrorReset() gdal.GetCacheMax() if gdal.GetLastErrorType() != 0: gdaltest.post_reason('got unexpected error type') return 'fail' return 'success'
def LoadFile(filename, xoff=0, yoff=0, xsize=None, ysize=None, buf_xsize=None, buf_ysize=None, buf_type=None, resample_alg=gdal.GRIORA_NearestNeighbour, callback=None, callback_data=None): ds = gdal.Open(filename) if ds is None: raise ValueError("Can't open " + filename + "\n\n" + gdal.GetLastErrorMsg()) return DatasetReadAsArray(ds, xoff, yoff, xsize, ysize, buf_xsize=buf_xsize, buf_ysize=buf_ysize, buf_type=buf_type, resample_alg=resample_alg, callback=callback, callback_data=callback_data)
def CopyLayer(self, src_layer, new_name, options=[]): md_c = _gdal.ListToStringList(options) obj = _gdal.OGR_DS_CopyLayer(self._o, src_layer._o, new_name, md_c) _gdal.CSLDestroy(md_c) if obj is None and obj != 'NULL': raise OGRError, gdal.GetLastErrorMsg() else: return Layer(obj=obj)
def basic_test_5(): gdal.PushErrorHandler( 'CPLQuietErrorHandler' ) ds = gdal.Open('data/doctype.xml', gdal.GA_ReadOnly) gdal.PopErrorHandler() if ds is None and gdal.GetLastErrorMsg() == '`data/doctype.xml\' not recognised as a supported file format.\n': return 'success' else: return 'fail'
def basic_test_4(): gdal.PushErrorHandler( 'CPLQuietErrorHandler' ) ds = gdal.Open('', gdal.GA_Update) gdal.PopErrorHandler() if ds is None and gdal.GetLastErrorMsg() == '`\' does not exist in the file system,\nand is not recognised as a supported dataset name.\n': return 'success' else: return 'fail'
def rasterio_6(): ds = gdal.GetDriverByName('MEM').Create('', 2, 2) for obj in [ds, ds.GetRasterBand(1)]: try: obj.WriteRaster(0,0,2,2,None) gdaltest.post_reason('expected exception') return 'fail' except: pass gdal.ErrorReset() gdal.PushErrorHandler('CPLQuietErrorHandler') obj.WriteRaster(0,0,2,2,' ') gdal.PopErrorHandler() error_msg = gdal.GetLastErrorMsg() if error_msg.find('Buffer too small') == -1: gdaltest.post_reason('did not get expected error msg (1)') print(error_msg) return 'fail' gdal.ErrorReset() gdal.PushErrorHandler('CPLQuietErrorHandler') obj.WriteRaster(-1,0,1,1,' ') gdal.PopErrorHandler() error_msg = gdal.GetLastErrorMsg() if error_msg.find('Access window out of range in RasterIO()') == -1: gdaltest.post_reason('did not get expected error msg (2)') print(error_msg) return 'fail' gdal.ErrorReset() gdal.PushErrorHandler('CPLQuietErrorHandler') obj.WriteRaster(0,0,0,1,' ') gdal.PopErrorHandler() error_msg = gdal.GetLastErrorMsg() if error_msg.find('Illegal values for buffer size') == -1: gdaltest.post_reason('did not get expected error msg (3)') print(error_msg) return 'fail' ds = None return 'success'
def _extract_shapes(self, abs_dest, table): import ogr import os t, cd, geo_col = self.geometry_type(self.database, table) ds, layer = self.new_layer(abs_dest, table, t) self.create_schema(self.database, table, layer) # TODO AsTest, etc, will have to change to ST_AsText for Postgis q = "SELECT *, AsText(Transform({}, {} )) AS _wkt FROM {}".format( geo_col, self.epsg, table) for i, row in enumerate(self.database.connection.execute(q)): feature = ogr.Feature(layer.GetLayerDefn()) for name, value in row.items(): if name.lower() in (geo_col, 'geometry', 'wkt', 'wkb', '_wkt'): continue if value: try: if isinstance(value, unicode): value = str(value) name = self.mangle_name(str(name)) feature.SetField(name, value) except Exception as e: raise except NotImplementedError as e: raise geometry = ogr.CreateGeometryFromWkt(row['_wkt']) feature.SetGeometryDirectly(geometry) if layer.CreateFeature(feature) != 0: import gdal raise Exception( 'Failed to add feature: {}: geometry={}'.format( gdal.GetLastErrorMsg(), geometry.ExportToWkt())) feature.Destroy() ds.SyncToDisk() ds.Release() return True, abs_dest
def jpeg_12(): ds = gdal.Open('/vsizip/data/byte_jpg.zip') if ds is None: return 'fail' gdal.ErrorReset() ds.GetRasterBand(1).Checksum() if gdal.GetLastErrorMsg() != '': return 'fail' gdal.ErrorReset() ds.GetRasterBand(1).GetMaskBand().Checksum() if gdal.GetLastErrorMsg() != '': return 'fail' ds = None return 'success'
def jpeg_17(): gdal.ErrorReset() gdal.PushErrorHandler('CPLQuietErrorHandler') ds = gdal.Open('data/bogus.jpg') gdal.PopErrorHandler() if ds is not None or gdal.GetLastErrorMsg() == '': gdaltest.post_reason('fail') return 'fail' gdal.ErrorReset() ds = gdal.Open('data/byte_corrupted.jpg') gdal.PushErrorHandler('CPLQuietErrorHandler') ds.GetRasterBand(1).Checksum() gdal.PopErrorHandler() if gdal.GetLastErrorMsg() == '': gdaltest.post_reason('fail') return 'fail' return 'success'
def CreateLayer(self, name, srs=None, geom_type=wkbUnknown, options=[]): if srs is None: srs_o = 'NULL' else: srs_o = srs._o md_c = _gdal.ListToStringList(options) obj = _gdal.OGR_DS_CreateLayer(self._o, name, srs_o, geom_type, md_c) _gdal.CSLDestroy(md_c) if obj is None or obj == 'NULL': raise OGRError, gdal.GetLastErrorMsg() else: return Layer(obj=obj)
def get_info(filename, substring=None, format='text', **kwargs): errors = [] # check if file is a raster try: # json format generates a TypeError if not a raster info = gdal.Info(filename, format=format, **kwargs) if info: return [info] except TypeError: pass # file is not a raster... errors.append(gdal.GetLastErrorMsg()) # try compressed formats files = _compressed(filename, substring) if files: info = [] for f in files: try: info_ = gdal.Info(f, format=format, **kwargs) if info_: info.append(info_) elif not info_: errors.append(gdal.GetLastErrorMsg()) except TypeError: pass if info: return info # file is not compressed or no raster was found in file # try url... # not implemented yet raise OSError(f'Could not find raster file in {filename}...\n' 'Collected messages from gdal:\n' f'{errors}')
def grib_3(): if gdaltest.grib_drv is None: return 'skip' tst = gdaltest.GDALTest('GRIB', 'bug3246.grb', 4, 4081) gdal.PushErrorHandler('CPLQuietErrorHandler') result = tst.testOpen() gdal.PopErrorHandler() msg = gdal.GetLastErrorMsg() if msg.find('data access may be incomplete') == -1 \ or gdal.GetLastErrorType() != 2: gdaltest.post_reason('did not get expected warning.') return result
def ogr_avc_3(): gdal.PushErrorHandler('CPLQuietErrorHandler') avc_ds = ogr.Open('data/compressed.e00') gdal.PopErrorHandler() last_error_msg = gdal.GetLastErrorMsg() if avc_ds is not None: gdaltest.post_reason('expected failure') return 'fail' if last_error_msg == '': gdaltest.post_reason('expected error message') return 'fail' return 'success'
def openRaster(filename, band=1, scale=None, NoData=-9999): '''Opens a raster image whose format is supported by GDAL. Loads it in as a nested list; the first element in the list is a dictionary with image information, while the second element contains a Raster instance. Result is a raster with northern values at the top. Please provide a filename with a complete directory''' import gdal # import numpy from spatial import raster f = gdal.Open(filename) if f is None: print gdal.GetLastErrorMsg() else: b = f.GetRasterBand(band) info = b.GetMetadata() info['dataType'] = gdal.GetDataTypeName(b.DataType) info['projection'] = f.GetProjection() info['ncol'] = b.XSize info['nrow'] = b.YSize ggt = f.GetGeoTransform() info['cellsize'] = float(ggt[1]) info['Xll'] = float(ggt[0]) info['Yll'] = float(ggt[3] + ggt[5] * f.RasterYSize) if b.GetNoDataValue() != None: info['nodata'] = b.GetNoDataValue() else: info['nodata'] = float(NoData) if scale is None: info['scale'] = b.GetScale() else: info['scale'] = float(scale) d = b.ReadAsArray() r = raster.Raster(d, cellsize=info['cellsize'], Xll=info['Xll'], Yll=info['Yll'], nodata=info['nodata']) return [info, r]
def ogr_wfs_ionic_wfst(): if gdaltest.wfs_drv is None: return 'skip' if not gdaltest.have_gml_reader: return 'skip' if gdaltest.gdalurlopen( 'http://webservices.ionicsoft.com/ionicweb/wfs/BOSTON_ORA' ) is None: print('cannot open URL') gdaltest.ionic_wfs = False return 'skip' gdaltest.ionic_wfs = True ds = ogr.Open( 'WFS:http://webservices.ionicsoft.com/ionicweb/wfs/BOSTON_ORA', update=1) if ds is None: if gdal.GetLastErrorMsg().find('HTTP error code : 403') != -1: gdaltest.ionic_wfs = False return 'skip' return 'fail' lyr = ds.GetLayerByName('wfs:BUSINESS') geom = ogr.CreateGeometryFromWkt('POINT(234000 890000)') feat = ogr.Feature(lyr.GetLayerDefn()) feat.SetGeometry(geom) feat.SetField('NAME', 'nameSetByOGR') feat.SetField('TOTAL_EMPLOYEES', '10') ret = lyr.CreateFeature(feat) if ret != 0: print('fail on CreateFeature') return 'fail' gmlid = feat.GetField('gml_id') ret = lyr.SetFeature(feat) if ret != 0: print('fail on SetFeature') return 'fail' ds.ExecuteSQL("DELETE FROM wfs:BUSINESS WHERE gml_id = '%s'" % gmlid) return 'success'
def dted_7(): ds = gdal.Open( 'data/n43_wgs72.dt0' ) # a warning is issued gdal.PushErrorHandler( 'CPLQuietErrorHandler' ) prj = ds.GetProjection() gdal.PopErrorHandler() if gdal.GetLastErrorMsg() is None: gdaltest.post_reason( 'An expected warning was not emitted' ) return 'fail' if prj != 'GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26]],PRIMEM["Greenwich",0],UNIT["degree",0.0174532925199433],AUTHORITY["EPSG","4322"]]': gdaltest.post_reason( 'Projection does not match expected:\n%s' % prj ) return 'fail' return 'success'
def osr_proj4_3(): srs = osr.SpatialReference() try: gdal.PushErrorHandler('CPLQuietErrorHandler') proj4 = srs.ExportToProj4() gdal.PopErrorHandler() except RuntimeError: gdal.PopErrorHandler() if gdal.GetLastErrorMsg().find('No translation') != -1: return 'success' gdaltest.post_reason('empty srs not handled properly') return 'fail'
def ogr_sql_30(): gdal.ErrorReset() sql_lyr = gdaltest.ds.ExecuteSQL('select min(eas_id), count(*) from poly') feat = sql_lyr.GetNextFeature() val_count = feat.GetField(1) gdaltest.ds.ReleaseResultSet(sql_lyr) if gdal.GetLastErrorMsg() != '': return 'fail' if val_count == 10: return 'success' else: return 'fail'