def vrtrawlink_5(): driver = gdal.GetDriverByName("VRT") ds = driver.Create('tmp/rawlink.vrt', 31, 35, 0) # Add a new band pointing to this bogus file. options = [ 'subClass=VRTRawRasterBand', 'SourceFilename=tmp/rawlink.dat', 'relativeToVRT=1', 'ImageOffset=100', 'PixelOffset=3', 'LineOffset=93', 'ByteOrder=MSB' ] result = ds.AddBand(gdal.GDT_UInt16, options) if result != gdal.CE_None: gdaltest.post_reason('AddBand() returned error code') return 'fail' gdaltest.rawlink_ds.FlushCache() # Close and reopen to ensure we are getting data from disk. ds = None xmlstring = open('tmp/rawlink.vrt').read() node = gdal.ParseXMLString(xmlstring) node = _xmlsearch(node, gdal.CXT_Element, 'VRTRasterBand') node = _xmlsearch(node, gdal.CXT_Element, 'SourceFilename') node = _xmlsearch(node, gdal.CXT_Attribute, 'relativeToVRT') if node is None or node[2][1] != "1": gdaltest.post_reason('incorrect relativeToVRT value') return 'fail' return 'success'
def vrtderived_2(): filename = 'tmp/derived.vrt' vrt_ds = gdal.GetDriverByName('VRT').Create(filename, 50, 50, 0) options = [ 'subClass=VRTDerivedRasterBand', 'PixelFunctionType=dummy', ] vrt_ds.AddBand(gdal.GDT_Byte, options) simpleSourceXML = ''' <SimpleSource> <SourceFilename>data/byte.tif</SourceFilename> <SourceBand>1</SourceBand> </SimpleSource>''' md = {} md['source_0'] = simpleSourceXML vrt_ds.GetRasterBand(1).SetMetadata(md, 'vrt_sources') vrt_ds = None xmlstring = open(filename).read() gdal.Unlink(filename) node = gdal.ParseXMLString(xmlstring) node = _xmlsearch(node, gdal.CXT_Element, 'VRTRasterBand') node = _xmlsearch(node, gdal.CXT_Element, 'PixelFunctionType') node = _xmlsearch(node, gdal.CXT_Text, 'dummy') if node is None: gdaltest.post_reason('incorrect PixelFunctionType value') return 'fail' return 'success'
def minixml_3(): fp = open('data/doctype.xml', 'r') text = fp.read() tree = gdal.ParseXMLString(text) if tree[0] != gdal.CXT_Element: gdaltest.post_reason('wrong node type.') return 'fail' # Check <chapter> element node = tree[6] if node[0] != gdal.CXT_Element: gdaltest.post_reason('wrong node type.') return 'fail' if node[1] != 'chapter': gdaltest.post_reason('Wrong element name') return 'fail' if len(node) != 7: gdaltest.post_reason('Wrong number of children.') return 'fail' # Check <chapter><title> subelement subnode = node[2] if subnode[0] != gdal.CXT_Element: gdaltest.post_reason('wrong node type.') return 'fail' if subnode[1] != 'title': gdaltest.post_reason('Wrong element name') return 'fail' if len(subnode) != 3: gdaltest.post_reason('Wrong number of children.') return 'fail' if subnode[2][1] != 'Chapter 1': gdaltest.post_reason('Wrong element content.') return 'fail' # Check fist <chapter><para> subelement subnode = node[3] if subnode[0] != gdal.CXT_Element: gdaltest.post_reason('wrong node type.') return 'fail' if subnode[1] != 'para': gdaltest.post_reason('Wrong element name') return 'fail' if len(subnode) != 3: gdaltest.post_reason('Wrong number of children.') return 'fail' return 'success'
def minixml_4(): xml = """<?xml encoding="utf-8"?>\n<foo />\n""" got_xml = gdal.SerializeXMLTree(gdal.ParseXMLString(xml)) if xml != got_xml: gdaltest.post_reason('serialize xml tree failed.') print(got_xml) return 'fail' return 'success'
def vrtderived_1(): filename = 'tmp/derived.vrt' vrt_ds = gdal.GetDriverByName('VRT').Create(filename, 50, 50, 0) options = [ 'subClass=VRTDerivedRasterBand', ] vrt_ds.AddBand(gdal.GDT_Byte, options) simpleSourceXML = ''' <SimpleSource> <SourceFilename>data/byte.tif</SourceFilename> <SourceBand>1</SourceBand> </SimpleSource>''' md = {} md['source_0'] = simpleSourceXML vrt_ds.GetRasterBand(1).SetMetadata(md, 'vrt_sources') md_read = vrt_ds.GetRasterBand(1).GetMetadata('vrt_sources') vrt_ds = None expected_md_read = '<SimpleSource>\n <SourceFilename relativeToVRT="0">data/byte.tif</SourceFilename>\n <SourceBand>1</SourceBand>\n <SourceProperties RasterXSize="20" RasterYSize="20" DataType="Byte" BlockXSize="20" BlockYSize="20" />\n</SimpleSource>\n' if md_read['source_0'] != expected_md_read: gdaltest.post_reason('fail') print(md_read['source_0']) return 'fail' xmlstring = open(filename).read() gdal.Unlink(filename) node = gdal.ParseXMLString(xmlstring) node = _xmlsearch(node, gdal.CXT_Element, 'VRTRasterBand') node = _xmlsearch(node, gdal.CXT_Attribute, 'subClass') node = _xmlsearch(node, gdal.CXT_Text, 'VRTDerivedRasterBand') if node is None: gdaltest.post_reason('invalid subclass') return 'fail' return 'success'
def minixml_1(): tree = gdal.ParseXMLString( '<TestDoc style="123"><sub1/><sub2>abc</sub2></TestDoc>') if tree[0] != gdal.CXT_Element: gdaltest.post_reason('wrong node type.') return 'fail' if tree[1] != 'TestDoc': gdaltest.post_reason('Wrong element name') return 'fail' if len(tree) != 5: gdaltest.post_reason('Wrong number of children.') return 'fail' # Check style attribute node = tree[2] if node[0] != gdal.CXT_Attribute: gdaltest.post_reason('wrong node type.') return 'fail' if node[1] != 'style': gdaltest.post_reason('Wrong element name') return 'fail' if len(node) != 3: gdaltest.post_reason('Wrong number of children.') return 'fail' if node[2][1] != '123': gdaltest.post_reason('Wrong element content.') return 'fail' # Check <sub1> element node = tree[3] if node[0] != gdal.CXT_Element: gdaltest.post_reason('wrong node type.') return 'fail' if node[1] != 'sub1': gdaltest.post_reason('Wrong element name') return 'fail' if len(node) != 2: gdaltest.post_reason('Wrong number of children.') return 'fail' # Check <sub2> element node = tree[4] if node[0] != gdal.CXT_Element: gdaltest.post_reason('wrong node type.') return 'fail' if node[1] != 'sub2': gdaltest.post_reason('Wrong element name') return 'fail' if len(node) != 3: gdaltest.post_reason('Wrong number of children.') return 'fail' if node[2][1] != 'abc': gdaltest.post_reason('Wrong element content.') return 'fail' return 'success'