/// <summary> /// 投影 /// </summary> /// <param name="srcRaster"></param> /// <param name="prjSettings"></param> /// <param name="dstRaster"></param> /// <param name="beginBandIndex"></param> /// <param name="progressCallback"></param> /// <returns></returns> public override IRasterDataProvider Project(IRasterDataProvider srcRaster, FilePrjSettings prjSettings, RSS.Core.DF.IRasterDataProvider dstRaster, int beginBandIndex, Action <int, string> progressCallback) { if (dstRaster == null) { return(null); } try { _dstSpatialRef = dstRaster.SpatialRef; CoordEnvelope coordEnv = dstRaster.CoordEnvelope; prjSettings.OutEnvelope = PrjEnvelope.CreateByLeftTop(coordEnv.MinX, coordEnv.MaxY, coordEnv.Width, coordEnv.Height); ReadyArgs(srcRaster, prjSettings, dstRaster.SpatialRef, progressCallback); string outfilename = _prjSettings.OutPathAndFileName; try { Size outSize = new Size(dstRaster.Width, dstRaster.Height); string[] options = new string[] { "INTERLEAVE=BSQ", "VERSION=LDF", "WITHHDR=TRUE", "SPATIALREF=" + _dstSpatialRef.ToProj4String(), "MAPINFO={" + 1 + "," + 1 + "}:{" + _prjSettings.OutEnvelope.MinX + "," + _prjSettings.OutEnvelope.MaxY + "}:{" + dstRaster.ResolutionX + "," + dstRaster.ResolutionY + "}" , "BANDNAMES=" + BandNameString(_prjSettings.OutBandNos) }; //ReadyAngleFiles(_angleDataProvider, outfilename, _prjSettings, outSize, options); ProjectRaster(srcRaster, dstRaster, beginBandIndex, progressCallback); return(dstRaster); } catch (IOException ex) { if (ex.Message == "磁盘空间不足。\r\n" && File.Exists(outfilename)) { File.Delete(outfilename); } throw ex; } finally { if (dstRaster != null) { dstRaster.Dispose(); dstRaster = null; } } } catch { EndSession(); TryDeleteCurCatch(); throw; } finally { if (_curSession == null) { EndSession(); if (prjSettings.IsClearPrjCache) { TryDeleteCurCatch(); } } } }