Ejemplo n.º 1
0
 /// <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();
             }
         }
     }
 }