📄 gdal_ruby.i
字号:
/* * $Id: gdal_ruby.i 8449 2005-09-26 08:18:55Z cfis $ * * ruby specific code for gdal bindings. *//* * $Log$ * Revision 1.2 2005/09/26 08:18:55 cfis * Copied over code from the Python version of gdal_ruby.i. Will have to port the code to Ruby. * * Revision 1.1 2005/09/02 16:19:23 kruland * Major reorganization to accomodate multiple language bindings. * Each language binding can define renames and supplemental code without * having to have a lot of conditionals in the main interface definition files. * */%init %{ /* gdal_ruby.i %init code */ if ( GDALGetDriverCount() == 0 ) { GDALAllRegister(); }%}%include "cpl_exceptions.i";%header %{static CPLXMLNode *RubyArrayToXMLTree(VALUE rubyArray){ int nChildCount = 0, iChild, nType; CPLXMLNode *psThisNode; CPLXMLNode *psChild; char *pszText = NULL; nChildCount = RARRAY(rubyArray)->len - 2; if( nChildCount < 0 ) { rb_raise(rb_eRuntimeError, "Error in input XMLTree, child count is less than zero."); } VALUE item1 = rb_ary_entry(rubyArray, 0); nType = NUM2INT(item1); VALUE item2 = rb_ary_entry(rubyArray, 1); pszText = StringValuePtr(item2); psThisNode = CPLCreateXMLNode( NULL, (CPLXMLNodeType) nType, pszText ); for( iChild = 0; iChild < nChildCount; iChild++ ) { psChild = RubyArrayToXMLTree( rb_ary_entry(rubyArray,iChild+2) ); CPLAddXMLChild( psThisNode, psChild ); } return psThisNode;}static VALUE XMLTreeToRubyArray( CPLXMLNode *psTree ){ int nChildCount = 0, iChild; CPLXMLNode *psChild; for( psChild = psTree->psChild; psChild != NULL; psChild = psChild->psNext ) nChildCount++; VALUE rubyArray = rb_ary_new2(nChildCount+2); rb_ary_store(rubyArray, 0, INT2NUM((int) psTree->eType)); rb_ary_store(rubyArray, 1, rb_str_new2(psTree->pszValue)); for( psChild = psTree->psChild, iChild = 2; psChild != NULL; psChild = psChild->psNext, iChild++ ) { rb_ary_store(rubyArray, iChild, XMLTreeToRubyArray(psChild)); } return rubyArray; }%}/*%extend GDAL_GCP {%pythoncode { def __str__(self): str = '%s (%.2fP,%.2fL) -> (%.7fE,%.7fN,%.2f) %s '\ % (self.Id, self.GCPPixel, self.GCPLine, self.GCPX, self.GCPY, self.GCPZ, self.Info ) return str def serialize(self,with_Z=0): base = [CXT_Element,'GCP'] base.append([CXT_Attribute,'Id',[CXT_Text,self.Id]]) pixval = '%0.15E' % self.GCPPixel lineval = '%0.15E' % self.GCPLine xval = '%0.15E' % self.GCPX yval = '%0.15E' % self.GCPY zval = '%0.15E' % self.GCPZ base.append([CXT_Attribute,'Pixel',[CXT_Text,pixval]]) base.append([CXT_Attribute,'Line',[CXT_Text,lineval]]) base.append([CXT_Attribute,'X',[CXT_Text,xval]]) base.append([CXT_Attribute,'Y',[CXT_Text,yval]]) if with_Z: base.append([CXT_Attribute,'Z',[CXT_Text,zval]]) return base} }%extend GDALRasterBandShadow {%pythoncode { def ReadAsArray(self, xoff=0, yoff=0, win_xsize=None, win_ysize=None, buf_xsize=None, buf_ysize=None, buf_obj=None): import gdalnumeric return gdalnumeric.BandReadAsArray( self, xoff, yoff, win_xsize, win_ysize, buf_xsize, buf_ysize, buf_obj ) def WriteArray(self, array, xoff=0, yoff=0): import gdalnumeric return gdalnumeric.BandWriteArray( self, array, xoff, yoff )}}%extend GDALMajorObjectShadow {%pythoncode { def GetMetadata( self, domain = '' ): if domain[:4] == 'xml:': return self.GetMetadata_List( domain ) return self.GetMetadata_Dict( domain )}}*/%import typemaps_ruby.i
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -