internal void MoveUp(int index) { if (index < 0 || index >= _fileItems.Count) { return; } if (index == 0) { return; } MosaicProjectItem item = _fileItems[index]; _fileItems.RemoveAt(index); _fileItems.Insert(index - 1, item); }
public bool Add(IRasterDataProvider file, out string errorMsg) { errorMsg = ""; if (!Contains(file)) { DataIdentify identify = file.DataIdentify; if (_dataIdentify == null) { _dataIdentify = identify; MosaicProjectItem item = new MosaicProjectItem(file); if (!string.IsNullOrWhiteSpace(item.ErrorMsg)) { errorMsg = item.ErrorMsg; return(false); } _fileItems.Add(item); if (DataIdentifyChanged != null) { DataIdentifyChanged(_dataIdentify, file); } return(true); } else if (_dataIdentify.IsOrbit) { if (_dataIdentify.Sensor != identify.Sensor || _dataIdentify.Satellite != identify.Satellite || (_dataIdentify.OrbitDateTime == identify.OrbitDateTime && identify.OrbitDateTime != DateTime.MinValue)) { return(false); } MosaicProjectItem item = new MosaicProjectItem(file); _fileItems.Add(item); return(true); } } return(false); }
public IRasterDataProvider[] DoProject(PrjOutArg prjArgs, MosaicType mosaicType, Action <int, string> progressCallback, out string msg) { ProjectionFactory proj = new ProjectionFactory(); msg = ""; TryCreateOutDir(prjArgs.OutDirOrFile); StringBuilder str = new StringBuilder(); List <string[]> projectedFiles = new List <string[]>(); for (int fileIndex = 0; fileIndex < _fileItems.Count; fileIndex++) { string errMessage; MosaicProjectItem item = _fileItems[fileIndex]; if (item == null || item.MainFile == null) { continue; } string file = item.MainFile.fileName; string outfilename = ""; if (mosaicType != MosaicType.NoMosaic && !IsDir(prjArgs.OutDirOrFile) && _fileItems.Count > 1) { outfilename = prjArgs.OutDirOrFile; prjArgs.OutDirOrFile = Path.GetDirectoryName(outfilename) + "\\" + Guid.NewGuid().ToString() + Path.GetExtension(outfilename); } string[] files = proj.Project(file, prjArgs, progressCallback, out errMessage); if (!string.IsNullOrWhiteSpace(outfilename)) { prjArgs.OutDirOrFile = outfilename; } if (!string.IsNullOrWhiteSpace(errMessage)) { str.AppendLine(Path.GetFileName(file) + errMessage); } if (files == null || files.Length == 0) { continue; } if (files.Length == 1 && files[0] == null) { continue; } projectedFiles.Add(files); } msg = str.ToString(); if (projectedFiles.Count == 0) { return(null); } if (projectedFiles.Count == 1 && projectedFiles[0] == null) { return(null); } int envCount = prjArgs.Envelopes == null ? 1 : prjArgs.Envelopes.Length; IRasterDataProvider[] retEnvFiles = new IRasterDataProvider[envCount]; List <IRasterDataProvider> retEnvFilesNoMosaic = new List <IRasterDataProvider>(); for (int i = 0; i < envCount; i++) { List <string> envFiles = new List <string>(); for (int j = 0; j < _fileItems.Count; j++) { if (j >= projectedFiles.Count) { break; } if (projectedFiles[j] != null && projectedFiles[j].Length > i) { if (projectedFiles[j] == null || projectedFiles[j].Length == 0 || string.IsNullOrWhiteSpace(projectedFiles[j][i])) { continue; } envFiles.Add(projectedFiles[j][i]); } } //by chennan 批量分幅投影 if (mosaicType != MosaicType.NoMosaic) { if (envFiles.Count > 1) { List <IRasterDataProvider> mosaicFiles = new List <IRasterDataProvider>(); try { foreach (string envfile in envFiles) { IRasterDataProvider file = FileHelper.Open(envfile); mosaicFiles.Add(file); } string mosaicFile = null; if (prjArgs == null || string.IsNullOrWhiteSpace(prjArgs.OutDirOrFile)) { string outDir = Path.GetDirectoryName(mosaicFiles[0].fileName); mosaicFile = Path.Combine(outDir, Path.GetFileNameWithoutExtension(mosaicFiles[0].fileName) + "_MOSAIC.ldf"); } else { if (IsDir(prjArgs.OutDirOrFile)) { mosaicFile = Path.Combine(prjArgs.OutDirOrFile, Path.GetFileNameWithoutExtension(mosaicFiles[0].fileName) + "_MOSAIC.ldf"); } else { mosaicFile = prjArgs.OutDirOrFile; } } RasterMoasicProcesser processer = new RasterMoasicProcesser(); IRasterDataProvider drcDataProvider = processer.Moasic(mosaicFiles.ToArray(), "LDF", mosaicFile, true, new string[] { "0" }, progressCallback); //拼接角度文件 if (prjArgs.Args != null && prjArgs.Args.Length > 0) { foreach (object arg in prjArgs.Args) { if (arg is string) { bool isMoasic = true; string[] extentStr = null; List <IRasterDataProvider> mosaicExtFile = new List <IRasterDataProvider>(); List <string> extFileList = new List <string>(); try { string extFileName; string extension; string argStr = arg as string; if (argStr.Contains("=")) { argStr = argStr.Split('=')[1]; if (argStr.Contains(";")) { extentStr = argStr.Split(';'); } } if (extentStr != null) { for (int extentIndex = 0; extentIndex < extentStr.Length; extentIndex++) { argStr = extentStr[extentIndex]; extension = "." + argStr + ".ldf"; for (int j = 0; j < envFiles.Count; j++) { extFileName = Path.ChangeExtension(envFiles[j], extension); if (!File.Exists(extFileName)) { isMoasic = false; break; } else { isMoasic = true; } IRasterDataProvider file = FileHelper.Open(extFileName); mosaicExtFile.Add(file); extFileList.Add(extFileName); } if (isMoasic) { string outFileName = Path.ChangeExtension(mosaicFile, extension); IRasterDataProvider drcExtDataProvider = processer.Moasic(mosaicExtFile.ToArray(), "LDF", outFileName, true, new string[] { "0" }, progressCallback); } } } else { extension = "." + argStr + ".ldf"; for (int j = 0; j < envFiles.Count; j++) { extFileName = Path.ChangeExtension(envFiles[j], extension); if (!File.Exists(extFileName)) { isMoasic = false; break; } IRasterDataProvider file = FileHelper.Open(extFileName); mosaicExtFile.Add(file); extFileList.Add(extFileName); } if (isMoasic) { string outFileName = Path.ChangeExtension(mosaicFile, extension); IRasterDataProvider drcExtDataProvider = processer.Moasic(mosaicExtFile.ToArray(), "LDF", outFileName, true, new string[] { "0" }, progressCallback); } } } finally { if (mosaicExtFile.Count > 0) { foreach (IRasterDataProvider file in mosaicExtFile) { if (file != null) { file.Dispose(); } } mosaicExtFile.Clear(); } if (extFileList.Count > 0) { foreach (string envfile in extFileList) { TryDeleteRasterFile(envfile); } extFileList.Clear(); } } } } } retEnvFiles[i] = drcDataProvider; } catch (Exception ex) { Console.WriteLine(ex.Message); } finally { foreach (IRasterDataProvider envfile in mosaicFiles) { if (envfile != null) { envfile.Dispose(); } } mosaicFiles.Clear(); foreach (string envfile in envFiles) { TryDeleteRasterFile(envfile); } } } else if (envFiles.Count == 1) { if (!IsDir(prjArgs.OutDirOrFile) && !string.IsNullOrWhiteSpace(prjArgs.OutDirOrFile) && envFiles[0] != prjArgs.OutDirOrFile) { if (!Directory.Exists(Path.GetDirectoryName(prjArgs.OutDirOrFile))) { Directory.CreateDirectory(Path.GetDirectoryName(prjArgs.OutDirOrFile)); } File.Copy(envFiles[0], prjArgs.OutDirOrFile); TryDeleteRasterFile(envFiles[0]); retEnvFiles[i] = FileHelper.Open(prjArgs.OutDirOrFile); } else { retEnvFiles[i] = FileHelper.Open(envFiles[0]); } } else { retEnvFiles[i] = null; } // } else if (envFiles.Count != 0) { List <IRasterDataProvider> mosaicFiles = new List <IRasterDataProvider>(); foreach (string envfile in envFiles) { IRasterDataProvider file = FileHelper.Open(envfile); mosaicFiles.Add(file); } retEnvFilesNoMosaic.AddRange(mosaicFiles); } } // return(retEnvFilesNoMosaic.Count == 0 ? retEnvFiles : retEnvFilesNoMosaic.ToArray()); }