C使用GDAL库需安装以下两个Nuget包:GDAL和GDAL。Native 也可以安装这几个包: 这两种方式的注册方式会不太一样,其他用法大致相同。在此选中的是第一种方式,即在此安装的是GDAL和GDAL。Native。注册 使用GDAL库的功能之前,必须先注册注册GdalConfiguration。ConfigureGdal();Gdal。AllRegister();设置utf8编码Gdal。SetConfigOption(GDALFILENAMEISUTF8,YES); 若安装的是第二种程序包,即MaxRev。Gdal。Core等,则注册语句为:注册GdalBase。ConfigureAll();设置编码Gdal。SetConfigOption(GDALFILENAMEISUTF8,YES); 需注意的是,有时会报PROJ:projcreatefromdatabase:Cannotfindproj。db这样的异常,解决这个异常,可以在注册之后加上这行代码,手动设置PROJDB环境变量的查找路径:Osr。SetPROJSearchPath(Environment。GetEnvironmentVariable(PROJLIB)); 或者在文件资源管理器中找到proj。db文件,再设置它的查找路径 最后手动设置查找路径:Osr。SetPROJSearchPath(C:xxxxxx。nugetpackagesgdal。native3。5。3buildgdalshare); MaxRev。Gdal的查找路径为:Osr。SetPROJSearchPath(C:xxxxxx。nugetpackagesmaxrev。gdal。windowsruntime。minimal3。6。1。110runtimeswinx64nativemaxrev。gdal。core。libshared);读取信息使用只读方式打开tif文件DatasetdsGdal。Open(C:xxx。tif,Access。GAReadOnly);if(dsnull){Console。WriteLine(文件打开失败。。。);return;}获取驱动器名称,这里输出的是:GeoTIFFvardriverNameds。GetDriver()。LongName;投影坐标系信息varprojectionds。GetProjection();varprojectionds。GetProjectionRef(); 这里的波段表示单个栅格波段通道图层,它不一定代表整个图像,例如,24位RGB图像通常表示为具有三个波段的数据集,一个用于红色,一个用于绿色,一个用于蓝色。波段数varrasterCountds。RasterCount;获取tif的第一个波段,波段索引从1开始varbandds。GetRasterBand(1);波段数据类型varbandDataTypeband。DataType;Console。WriteLine(DataType:Gdal。GetDataTypeName(bandDataType));波段颜色解释varinterpretationband。GetRasterColorInterpretation();Console。WriteLine(PaletteInterp:interpretation。ToString()); 读取像素值varbandds。GetRasterBand(1);计算最大值和最小值double〔〕rasterMinMaxnewdouble〔2〕;intapproxok0;band。ComputeRasterMinMax(rasterMinMax,approxok);Console。WriteLine(rasterMinMaxrasterMinMax〔0〕,rasterMinMax〔1〕);获取最大值和最小值,这里获取的不一定是真实的最值band。GetMaximum(outdoublemval,outintmhasval);band。GetMinimum(outdoublemin,outintminval);获取无效值band。GetNoDataValue(outvarval,outvarhasval);读取像素值intXsizeband。XSize;intYsizeband。YSize;varbuffnewdouble〔XsizeYsize〕;band。ReadRaster(0,0,Xsize,Ysize,buff,Xsize,Ysize,0,0);for(inti0;iXsize;i){for(intj0;jYsize;j){varvaluebuff〔ijXsize〕;Console。Write(value);}} 计算经纬度获取仿射变换矩阵地理坐标和影像数据行列的转换关系:XgeoGT(0)XpixelGT(1)YlineGT(2)YgeoGT(3)XpixelGT(4)YlineGT(5)double〔〕geoTransnewdouble〔6〕;ds。GetGeoTransform(geoTrans);转换地理坐标系SpatialReferencespatialds。GetSpatialRef();vargeorsnewSpatialReference();geors。ImportFromEPSG(4326);vartransformationnewCoordinateTransformation(spatial,geors);计算经纬度for(inti0;iYsize;i){for(intj0;jXsize;j){计算投影坐标varxgeoTrans〔0〕igeoTrans〔1〕jgeoTrans〔2〕;varygeoTrans〔3〕igeoTrans〔4〕jgeoTrans〔5〕;计算经纬度double〔〕longiAndLatnewdouble〔2〕;transformation。TransformPoint(longiAndLat,x,y,0);1是经度,2是纬度Console。Write((longiAndLat〔1〕,longiAndLat〔0〕),);}} 标签:GIS