版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
python的gdal库说明_GDAL库学习笔记(⼀):GDAL库介绍可能你不玩GIS,不懂这个库到底有什么⽤,或者和python有什么关系。但是你要玩GIS,RS,你就应当知道这个库的价值。就算你不玩GIS,我想这个库对你也应该有致命的吸引⼒。为什么?看下⾯的介绍吧!先看看这段GDAL主页上的英⽂介绍吧!geospatialdataformatsthatisreleasedunderanX/MITstyleOpenSourcelicensebytheOpenSourceGeospatialFoundation.Asalibrary,itpresentsasingleabstractdatamodeltothecallingapplicationforallsupportedformats.Italsocomeswithavarietyofusefulcommandlineutilitiesfordatatranslationandprocessing.简单地说,GDAL是⼀个操作各种栅格地理数据格式的库。包括读取、写⼊、转换、处理各种栅格数据格式(有些特定的格式对⼀些操作如写⼊等不⽀持)。它使⽤了⼀个单⼀的抽象数据模型就⽀持了⼤多数的栅格数据(GIS对栅格,⽮量,3D数据模型的抽象能⼒实在令⼈叹服)。当然除了栅格操作,这个库还同时包括了操作⽮量数据的另⼀个有名的库ogr(ogr这个库另外介绍),这样这个库就同时具备了操作栅格和⽮量数据的能⼒,买⼀送⼀,这么合算的买卖为什么不做。最最最重要的是这个库是跨平台的,开源的!如今这个库对各种数据格式的⽀持强⼤到令⼈啧啧的地步了。如果你对他的强⼤有什么怀疑的话,看看这⾥⼀⼤串的GDAL所⽀持格式清单,吓到了吧!再看看它的主页最后那些使⽤了它作为底层数据处理的软件列表吧!其中你可以不知道GRASS,你也可以不知道QuantumGIS(QGIS),但是你总该知道Google有⼈说我⼜不玩GIS。不错,但是,你即使不玩GIS,这个库也是满有⽤的。⾸先,哪个库⽀持这么多栅格(图⽚)格式,哪个库在C/C++/python/ruby/VB/java/C#(这个暂时不完全⽀持)下都能⽤,⽽且都⼀样⽤?退⼀步讲,3S软件⼜才⽤到。你⼤可⽤这个库来读取jpg,gif,tif,xpm等格式。⽽且对各种格式⽀持得不是⼀般的好,很⼤⼀部分⾮标准格式照样⽀持得⾮常好。我曾经在java下玩过jai,以及⼀系列jai的扩展库,⼀些图像格式在很多图⽚浏览器中都可以正确读取(有的甚⾄不是⾮标准格式),⽤jai死活就读不出来!这个库的python版和其他的python库结合的很好。最直接、明显的⽀持是使⽤Numeric库来进⾏数据读取和操作。各种矩阵魔术可以发挥得淋漓尽致(图像其实就是矩阵)。⽽且按我的观点,python对矩阵的操作⽐其他的语⾔有明显的优势。写出来的东西⽐其他语⾔写出来的短⼩的多,⽽且好看得多。并且python的弱类型在处理栅格数据格式类型的时候代码量⽐强类型的语⾔少了数倍(不⽤也直接在ARCGIS9中⽤python来作栅格数据的导⼊导出。⼀句话,真是太⽅便啦!安装2.1.windows下的安装“D:\ProgramFiles\MicrosoftVisualStudio.NET2003\Vc7\bin\vcvars32.batvc的编译环境。修改GDAL_HOME=$(GDAL_HOME)\pymod把路径改成python下的Lib\site-packages⽂件夹下。PYDIR="C:\Software\Python24python的安装路径。下⾯的参数爱改什么就把前⾯的#删除(要看您有没有那些库的源码),注意⼀下路径就可以了。我是都没改。后⾯就依次运⾏TogglelinenumbersTogglelinenumbers1nmake/fmakefile.vc2nmake/fmakefile.vcinstall3nmake/fmakefile.vcdevinstallgdal13.dll(也有可能是gdal12.dll)copy到PY_INST_DIR路径下到此处就完成安装gdal(python)的⼯作。gdal在.net2005下只能顺利编译1.2,1.3以上版本不能顺利编译,有⼀个地⽅指针转换出错。可能是2005的编译器⽐以往的严厉⼀点吧。另外,安装了QGIS,对编译也有⼀些影响,主要是proj库的冲突,导致⼀个找不到"d:/program.obj"⽂件的错误,如果你有静态编译过proj,那么你可以打开nmake.opt修改有关proj的设置,如果搞不定,就卸载QGIS,然后编译,编译后再安装QGIS.呵呵,还好QGIS的体积没有ArcGIS那么可怕.2.2.linux下的安装TogglelinenumbersTogglelinenumbers1./configure2make3su4makeinstall5ldconfig就ok(默认就已经⽀持python)。当然在第⼀步的时候需要看看是否依赖的库都安装了。如果缺少,就去安装⼀个。如果对configure的条件不理解,就⽤./configure--help看看具体情况。2.3.安装其他驱动这⾥讲⼀个安装hdf4的驱动的例⼦(默认情况下gdal是不安装hdf4的),其他驱动应该和这个也差不了多少吧,可以作为其他的参考。完整步骤如下:windows下的安装:followingandupdatetoenableNCSAHDFRelease4support.”这⼀⾏把下⾯两⾏前⾯的#去掉,然后改成:HDF4_DIR=D:\warmerda\42r1-win\release#HDF4_LIB=/LIBPATH:$(HDF4_DIR)\libhd421m.libHDF4_LIB=$(HDF4_DIR)\dll\hd421m.lib$(HDF4_DIR)\dll\hm421m.lib\$(HDF4_DIR)\lib\hd421.lib$(HDF4_DIR)\lib\hm421.lib⽤HDF4_LIB=/LIBPATH:这种形式似乎可以建⽴gdal的库,但是往下编译会出错。⽽且要把$(HDF4_DIR)\dll和$(HDF4_DIR)\lib拷贝到同⼀个⽬录下,不然会提⽰找不到库你也可以试⼀试在D:\ProgramFiles\MicrosoftVisualStudio.NET2003\Common7\Tools\vsvars32.bat⽂件中添加HDF4_LIB路径到“@setLIB=”这⾏的末尾(不要忘记;的分割符)。然后找⼀下"INC="这⾏,把-I$(HDF4_DIR)\include加到下⼀⾏的末尾(应该也可以在vsvars32.bat中添加路径,不过要重启命令⾏)。然后编译吧!祝你好运。注意:上⾯的HDF4_DIR是我本机的路径,你要根据你⾃⼰的路径进⾏设置(想起我的⼀个⽼师说过的话:“抄⼈家的作业可以,不要连名字也⼀起抄⾛啊”),下⾯的$(HDF4_DIR)可以不⽤改,那个是变量,会⾃动替代HDF4_DIR路径。编译成功后,要HDF4能运⾏,还需要两个库,⼀个是zlib,⼀个是szip,可以到下⾯两个链接去下载⼀个下简单:只要⽤./configureconfiguregdal会提⽰是否⽀持HDF4。编译后也要把zlib和szip到此你已经可以⽤C/C++来操作gdal读写hdf4的格式了!zlib,szip的库拷贝到Python的Lib\site-packages⽬录下。2.4.下载如果你实在玩不转,可以在这⾥下载已经编译好的gdal1.3.2程序库⽀持,以及proj,geos插件。注意,这⾥的geos是静态链接的,注意版权(geos是LGPL的license)。hdf4和hdf5⽤的是release版本。这⾥是我的nmake配置⽂件,你可以对照你的实际情况参考⼀下。快速开始其实在主站的教程⾥已经有python的⽰例了。但是我们还是按照⾃⼰的思路来开始吧。第⼀步就是打开⼀个数据集。对于“数据集”这个名词⼤家可能不会太习惯,但是对于⼀般的格式来说,⼀个“数据集”就是⼀个⽂件,⽐RS数据,他们把⼀张图像分成数个图像⽂件,然后放在⼀个⽂件夹中,⽤⼀些额外的⽂件来组织它们之间的关系,形成⼀个“数据集”。如果你不理解,那么就算了,当成jpg或者gif⽂件好了。下⾯我们打开⼀个tiff⽂件(GeoTIFF)。这个⽂件是我从GRASS的⽰例数据spearfish中导出的⼀个同名影像数据。TogglelinenumbersTogglelinenumbers1gdal2>>>dataset=gdal.Open("j:/gisdata/gtif/spot.tif")34['AddBand','AdviseRead','BuildOverviews','FlushCache','GetDescription','Get5Driver','GetGCPCount','GetGCPProjection','GetGCPs','GetGeoTransform','GetMe6tadata','GetProjection','GetProjectionRef','GetRasterBand','GetSubDatasets','RasterCount','RasterXSize','RasterYSize','ReadAsArray','ReadRaster','RefreshBandInfo','SetDescription','SetGCPs','SetGeoTransform','SetMetadata','SetProjection','WriteRaster','del','doc','init','module','_b10and','_o']11>>>这样我们就打开了这个⽂件。并且我们可以看到可以供我们调⽤的函数们(更具体的API列表可以看这⾥)。现在我们不做修改,不做添加,所以只要带有Set开头的函数以及有Write开头的函数我们暂时都不管。因为RS影像必然要和地理上的位置挂上钩,才能把图像正确铺展到⼀个坐标系中。其中的信息和对应关系有点复杂,不适合在快速开始中介绍,我们暂时也先不管。这⾥需要注意的就是⼏个函数。GetDescriptionTogglelinenumbersTogglelinenumbers1>>>dataset.GetDescription()2'j:/gisdata/gtif/spot.tif'3>>>看来这⾥的图像描述是图像的路径名,但是这是和各种不同数据集相关的,不同数据集可能有不同的描述。这要看读取驱动的实现作者的⾼兴了。RasterCountGetRasterBandTogglelinenumbersTogglelinenumbers1>>>213>>>band=dataset.GetRasterBand(1)4>>>多个。⼀个传感器只负责接收⼀个频率范围的地物反射光波,⼀个频率范围的光波记录称为⼀个波段。是不是晕了?其实说得简单⼀点。其⼆,B值表就是波段三。RasterCount是3,就有可能是彩⾊3⽚有价值)。不理解就跳过,很正常,我第⼀次听这种东西也觉得很⽞:)这⾥我们获取了第⼀个波段(红⾊值组成的表)。注意!这⾥的波段获取和通常的C数组获取不⼀样,开始是1不是0。获取了波段,我们就可以在下⾯的操作中读取这个波段的所有数值。RasterXSize图像的宽度(X⽅向上的像素个数)RasterYSize图像的⾼度(Y⽅向上的像素个数)TogglelinenumbersTogglelinenumbers1>>>29503>>>47005>>>可以看出我们的图像⼤⼩是950*700。还是很⼩的⼀张图。ReadRasterReadAsArrayTogglelinenumbersTogglelinenumbers1>>>help(dataset.ReadRaster)HelponmethodReadRasterinmodulegdal:ReadRaster(self,xoff,yoff,xsize,ysize,buf_xsize=None,buf_ysize=None,buf_t4ype=None,band_list=None)methodofgdal.Datasetinstance5>>>help(dataset.ReadAsArray)HelponmethodReadAsArrayinmodulegdal:ReadAsArray(self,xoff=0,yoff=0,xsize=None,ysize=None)methodofgdal.Dataset8instance9>>>这两个函数很重要,它们直接读取图像的数据,可以看到两个函数的帮助中有⼀⼤溜的参数。解释⼀下:xoff,yoff,xsize,ysize你可能不想读取整张图像。只想读取其中的⼀部分。那么就⽤xoff,yoff指定想要读取的部分原点位置在整张图像中距离全图原点的位置。⽤xsize和ysize指定要读取部分图像的矩形⼤⼩。buf_xsizebuf_ysize你可以在读取出⼀部分图像后进⾏缩放。那么就⽤这两个参数来定义缩放后图像最终的宽和⾼,gdal将帮你缩放到这个⼤⼩。buf_type如果你要读取的图像的数据类型不是你想要的(⽐如原图数据类型是short,你要把它们缩⼩成byte),就可以设置它。band_list这就适应上⾯多波段的情况。你可以指定读取的波段序列。要哪⼏个波段,不要哪⼏个波段,你说了算。举个例⼦吧:TogglelinenumbersTogglelinenumbers1>>>dataset.ReadAsArray(230,270,10,10)2array([[255,255,255,232,232,255,255,255,255,222],3[255,255,255,255,255,255,210,110,11,122],4[255,255,255,255,255,255,210,255,11,243],5[201,255,255,255,255,200,200,110,122,243],6[111,211,255,201,255,255,100,11,132,243],7[255,100,100,100,110,100,110,111,122,243],8[255,255,255,255,255,255,122,222,255,255],9[255,255,255,255,255,255,243,243,255,255],10[255,255,255,255,255,255,255,255,255,255],11[255,255,255,255,255,255,255,255,255,255]],'b')12>>>dataset.ReadRaster(230,270,10,10)13'\xff\xff\xff\xe8\xe8\xff\xff\xff\xff\xde\xff\xff\xff\xff\xff\xff\xd2n\x0bz\xff\14xff\xff\xff\xff\xff\xd2\xff\x0b\xf3\xc9\xff\xff\xff\xff\xc8\xc8nz\xf3o\xd3\xff\x15c9\xff\xffd\x0b\x84\xf3\xffdddndnoz\xf3\xff\xff\xff\xff\xff\xffz\xde\xff\xff\xff16\xff\xff\xff\xff\xff\xf3\xf3\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff17\xff\xff\xff\xff\xff\xff\xff\xff\xff'18>>>我们就把图像中位于230,270,宽度10⾼度10的数据读取出来了。我们看完了数据集的主要函数。似乎已经够⽤了。的确,如果只是为了显⽰图像,这些的确已经够了。但是如果需要更多信息,我们就不得供我们操作的(具体的API列表看这⾥)。TogglelinenumbersTogglelinenumbers1>>>dir(band)2['AdviseRead','Checksum','ComputeRasterMinMax','DataType'3,'Fill','FlushCache','GetHistogram','GetMaximum','GetMetadata','GetMinimum','GetNoDataValue','GetOffset','GetOverview','GetRasterColorTable','GetScale','GetStatistics','ReadAsArray','ReadRaster','SetDefaultHistogram','SetDescription','SetMetadata','SetNoDataValue','SetRasterColorInterpre8tation','SetRasterColorTable','WriteArray','WriteRaster','XSize','YSize','9doc','init','module','_o']10>>>挑⼏个有⽤的吧。TogglelinenumbersTogglelinenumbers1>>>band.XSize29503>>>band.YSize47005>>>617>>>时候⽤importgdalconst引⼊。TogglelinenumbersTogglelinenumbers1>>>importgdalconst2>>>dir(gdalconst)3['CE_Debug','CE_Failure','CE_Fatal','CE_None','CE_Warning','CPLES_Backslash4Quotable','CPLES_CSV','CPLES_SQL','CPLES_URL','CPLES_XML','CPLE_AppDefined'5,'CPLE_AssertionFailed','CPLE_FileIO','CPLE_IllegalArg','CPLE_NoWriteAccess'6,'CPLE_None','CPLE_NotSupported','CPLE_OpenFailed','CPLE_OutOfMemory','CPLE_UserInterrupt','CXT_Attribute','CXT_Comment','CXT_Element','CXT_Literal','CXT_Text','DCAP_CREATE',9IONOPTIONLIST','DMD_HELPTOPIC','DMD_LONGNAME','DMD_MIMETYPE'10,'GA_ReadOnly','GA_Update','GCI_BlackBand','GCI_BlueBand',11'GCI_CyanBand','GCI_GrayIndex','GCI_GreenBand','GCI_HueBand','GCI_LightnessB12and','GCI_MagentaBand','GCI_PaletteIndex','GCI_RedBand','GCI_SaturationBand'13,'GCI_Undefined','GCI_YellowBand','GDT_Byte','GDT_CFloat32','GDT_CFloat64',14'GDT_CInt16','GDT_CInt32','GDT_Float32','GDT_Float64','GDT_Int16','GDT_Int1532','GDT_TypeCount','GDT_UInt16','GDT_UInt32','GDT_Unknown','GF_Read','GF_Write','GPI_CMYK','GPI_Gray','GPI_HLS','GPI_RGB','GRA_Bilinear','GRA_Cubic','GRA_CubicSpline','GRA_NearestNeighbour','builtins','doc','file18','name']19>>>那些GDT开头的就是数值数据类型。TogglelinenumbersTogglelinenumbers1>>>band.GetNoDataValue()265535.03>>>4>>>5>>>bandputeRasterMinMax()6(1.0,255.0)7>>>Maximum是表⽰在本波段数值中最⼤的值,Minimum当然就是表⽰本波段中最⼩的值啦。我们可以看到在⼀开始这两个都没有值。因为对于⽂件格0或者255在任何情况下都⽆意义。在很多情况下0,255需要和其他值⼀样表⽰⼀个实际意义。虽然可能它最终会被显⽰得和⿊⾊⼀样。⽽⼀些位置上的点要表⽰的意思是“什么也不是”,它在那个位置上只是为了占⼀个位置,使得整体图像看起来像个矩形⽽已。在做实际应⽤的时候两种值的处理将会完全不⼀样。所以需要设置⽆意义值,来和其他的值区别开来。⽽⽤ComputeRasterMinMax算出的最⼤最⼩值,是排除了⽆意义值后计算出来的最⼤最⼩值。TogglelinenumbersTogglelinenumbers1>>>band.GetRasterColorInterpretation()223>>>gdalconst.GCI_PaletteIndex425>>>colormap=band.GetRasterColorTable()6>>>dir(colormap)7['Clone','GetColorEntry','GetColorEntryAsRGB','GetCount','GetPaletteInterpre8tation','SetColorEntry','del','doc','init','module','str9','_o','own_o',10>>>colormap.GetCount()1125612>>>13114>>>gdalconst.GPI_RGB15116>>>foriinrange(colormap.GetCount()):17...printcolormap.GetColorEntry(i),18...19(0,0,0,255)(0,0,28,255)(0,0,56,255)(0,0,85,255)(0,0,113,255)20(0,0,142,255)(0,0,170,255)(0,0,199,255)(0,0,227,255)(0,0,255,21255)(0,28,0,255)(0,28,28,255)(0,28,56,255)(0,28,85,255)(0,28,22113,255)(0,28,142,255)(0,28,170,255)(0,28,199,255)(0,28,227,25523)(0,28,255,255)(0,56,0,255)(0,56,28,255)(0,56,56,255)(0,56,8524,255)(0,56,113,255)(0,56,142,255)(0,56,170,255)(0,56,199,255)(250,56,227,255)(0,56,255,255)(0,85,0,255)(0,85,28,255)(0,85,56,26255)(0,85,85,255)(0,85,113,255)(0,85,142,255)(0,85,170,255)(0,2785,199,255)(0,85,227,255)(0,85,255,255)(0,113,0,255)(0,113,28,28255)(0,113,56,255)(0,113,85,255)(0,113,113,255)(0,113,142,255)(290,113,170,255)(0,113,199,255)(0,113,227,255)(0,113,255,255)(0,13042,0,255)(0,142,28,255)(0,142,56,255)(0,142,85,255)(0,142,113,31255)(0,142,142,255)(0,142,170,255)(0,142,199,255)(0,142,227,255)32(0,142,255,255)(0,170,0,255)(0,170,28,255)(0,170,56,255)(0,17033,85,255)(0,170,113,255)(0,170,142,255)(0,170,170,255)(0,170,19934,255)(0,170,227,255)(0,170,255,255)(0,199,0,255)(0,199,28,255)35(0,199,56,255)(0,199,85,255)(0,199,113,255)(0,199,142,255)(0,19369,170,255)(0,199,199,255)(0,199,227,255)(0,199,255,255)(0,227,037,255)(0,227,28,255)(0,227,56,255)(0,227,85,255)(0,227,113,255)38(0,227,142,255)(0,227,170,255)(0,227,199,255)(0,227,227,255)(0,39227,255,255)(0,255,0,255)(0,255,28,255)(0,255,56,255)(0,255,85,40255)(0,255,113,255)(0,255,142,255)(0,255,170,255)(0,255,199,25541)(0,255,227,255)(0,255,255,255)(28,0,0,255)(28,0,28,255)(28,0,4256,255)(28,0,85,255)(28,0,113,255)(28,0,142,255)(28,0,170,255)43(28,0,199,255)(28,0,227,255)(28,0,255,255)(28,28,0,255)(28,28,4428,255)(28,28,56,255)(28,28,85,255)(28,28,113,255)(28,28,142,24555)(28,28,170,255)(28,28,199,255)(28,28,227,255)(28,28,255,255)46(28,56,0,255)(28,56,28,255)(28,56,56,255)(28,56,85,255)(28,56,47113,255)(28,56,142,255)(28,56,170,255)(28,56,199,255)(28,56,227,48255)(28,56,255,255)(28,85,0,255)(28,85,28,255)(28,85,56,255)(2498,85,85,255)(28,85,113,255)(28,85,142,255)(28,85,170,255)(28,8550,199,255)(28,85,227,255)(28,85,255,255)(28,113,0,255)(28,113,2851,255)(28,113,56,255)(28,113,85,255)(28,113,113,255)(28,113,142,52255)(28,113,170,255)(28,113,199,255)(28,113,227,255)(28,113,255,53255)(28,142,0,255)(28,142,28,255)(28,142,56,255)(28,142,85,255)54(28,142,113,255)(28,142,142,255)(28,142,170,255)(28,142,199,255)55(28,142,227,255)(28,142,255,255)(28,170,0,255)(28,170,28,255)(2856,170,56,255)(28,170,85,255)(28,170,113,255)(28,170,142,255)(28,57170,170,255)(28,170,199,255)(28,170,227,255)(28,170,255,255)(28,58199,0,255)(28,199,28,255)(28,199,56,255)(28,199,85,255)(28,199,59113,255)(28,199,142,255)(28,199,170,255)(28,199,199,255)(28,199,60227,255)(28,199,255,255)(28,227,0,255)(28,227,28,255)(28,227,56,61255)(28,227,85,255)(28,227,113,255)(28,227,142,255)(28,227,170,62255)(28,227,199,255)(28,227,227,255)(28,227,255,255)(28,255,0,25635)(28,255,28,255)(28,255,56,255)(28,255,85,255)(28,255,113,255)64(28,255,142,255)(28,255,170,255)(28,255,199,255)(28,255,227,255)65(28,255,255,255)(56,0,0,255)(56,0,28,255)(56,0,56,255)(56,0,8566,255)(56,0,113,255)(56,0,142,255)(56,0,170,255)(56,0,199,255)(6756,0,227,255)(56,0,255,255)(56,28,0,255)(56,28,28,255)(56,28,5686,255)(56,28,85,255)(56,28,113,255)(56,28,142,255)(56,28,170,25695)(56,28,199,255)(56,28,227,255)(56,28,255,255)(56,56,0,255)(5670,56,28,255)(56,56,56,255)(5
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 人员密集场所安全培训
- ChatGPT行业报告:算力
- 《班组安全培训》课件
- 《组织结构图例》课件
- 适老智能家居系统定义
- 卫生标准培训
- 二年级数学100以内三数加减法混合运算题过关作业练习题
- 现代办公事务处理值班的类型和编排方法
- 《逆转录病毒科》课件
- 项目管理工具之韦恩图社会工作专业教学案例宝典
- 小学主题班会 四年级英语家长会 全国通用(共15张PPT)
- 住房公积金贷款申请表
- 煤的工业分类
- DB32∕T 2860-2015 散装液体化学品槽车装卸安全作业规范
- 针灸疗法ppt课件(1)
- 呼吸衰竭课件
- 药学专业高水平专业群建设项目建设方案
- 透水性材料施工技术方案
- 马铃薯栽培技术课件
- 砌体结构承载力计算
- 北京大学数字图像处理(冈萨雷斯)(课堂PPT)
评论
0/150
提交评论