public string MutiRegionsClip(string file, GeoDo.RSS.Core.VectorDrawing.AOIContainerLayer aoiContainer, string savePath) { _aoiContainer = aoiContainer; using (IRasterDataProvider raster = GeoDataDriver.Open(file) as IRasterDataProvider) { _resolutionX = raster.ResolutionX; _resolutionY = raster.ResolutionY; _fileSize = new Size(raster.Width, raster.Height); _fileEnvelope = raster.CoordEnvelope; _activeSpatialRef = raster.SpatialRef; _activeCoordType = raster.CoordType; raster.Dispose(); } GeoDo.RSS.Core.DrawEngine.CoordEnvelope corEnvelope = null; corEnvelope = GetGeoRect(); //获取多个aoi的外接矩形 evp.MaxX = corEnvelope.MaxX; evp.MaxY = corEnvelope.MaxY; evp.MinX = corEnvelope.MinX; evp.MinY = corEnvelope.MinY; BlockDefWithAOI outEnvelope; Size size; List <BlockDefWithAOI> blockList = new List <BlockDefWithAOI>(); GetArgs(out outEnvelope, out size); envelopes = new BlockDefWithAOI[] { outEnvelope }; blockList.AddRange(envelopes); blockList[0].AOIIndexes = GetIndexes(); //获得多个aoi的Index OutDir = savePath; string[] put = RasterClipT(file, blockList.ToArray(), OutDir, "Cut"); return(put[0]); }
//以下为一些辅助帮助类 public static IRasterDataProvider CreateRaster(string outFileName, CoordEnvelope env, float resolutionX, float resolutionY, int bandCount, IRasterDataProvider referProvider) { //int bandCount = referProvider.BandCount; //CoordEnvelope outEnv = referProvider.CoordEnvelope; //float resX = referProvider.ResolutionX; //float resY = referProvider.ResolutionY; int width = (int)(Math.Round(env.Width / resolutionX)); int height = (int)(Math.Round(env.Height / resolutionY)); Project.ISpatialReference spatialRef = referProvider.SpatialRef; enumDataType datatype = referProvider.DataType; List <string> options = new List <string>(); options.Add("INTERLEAVE=BSQ"); options.Add("VERSION=LDF"); options.Add("WITHHDR=TRUE"); options.Add("SPATIALREF=" + spatialRef.ToProj4String()); options.Add("MAPINFO={" + 1 + "," + 1 + "}:{" + env.MinX + "," + env.MaxY + "}:{" + resolutionX + "," + resolutionY + "}"); //=env.ToMapInfoString(new Size(width, height)); string hdrfile = HdrFile.GetHdrFileName(referProvider.fileName); if (!string.IsNullOrWhiteSpace(hdrfile) && File.Exists(hdrfile)) { HdrFile hdr = HdrFile.LoadFrom(hdrfile); if (hdr != null && hdr.BandNames != null) { options.Add("BANDNAMES=" + string.Join(",", hdr.BandNames)); } } CheckAndCreateDir(Path.GetDirectoryName(outFileName)); IRasterDataDriver raster = RasterDataDriver.GetDriverByName("LDF") as IRasterDataDriver; RasterDataProvider outRaster = raster.Create(outFileName, width, height, bandCount, datatype, options.ToArray()) as RasterDataProvider; return(outRaster); }
public static IRasterDataProvider CreateRaster(string outFileName, IRasterDataProvider referProvider, string fname) { int width = referProvider.Width; int height = referProvider.Height; Project.ISpatialReference spatialRef = referProvider.SpatialRef; enumDataType datatype = referProvider.DataType; List <string> options = new List <string>(); options.Add("INTERLEAVE=BSQ"); options.Add("VERSION=LDF"); options.Add("WITHHDR=TRUE"); options.Add("SPATIALREF=" + spatialRef.ToProj4String()); options.Add("MAPINFO={" + 1 + "," + 1 + "}:{" + referProvider.CoordEnvelope.MinX + "," + referProvider.CoordEnvelope.MaxY + "}:{" + referProvider.ResolutionX + "," + referProvider.ResolutionY + "}"); //=env.ToMapInfoString(new Size(width, height)); string hdrfile = HdrFile.GetHdrFileName(Path.ChangeExtension(fname, ".hdr")); if (!string.IsNullOrWhiteSpace(hdrfile) && File.Exists(hdrfile)) { HdrFile hdr = HdrFile.LoadFrom(hdrfile); if (hdr != null && hdr.BandNames != null) { options.Add("BANDNAMES=" + string.Join(",", hdr.BandNames)); } } if (!Directory.Exists(Path.GetDirectoryName(outFileName))) { Directory.CreateDirectory(Path.GetDirectoryName(outFileName)); } IRasterDataDriver raster = RasterDataDriver.GetDriverByName("LDF") as IRasterDataDriver; RasterDataProvider outRaster = raster.Create(outFileName, width, height, 1, datatype, options.ToArray()) as RasterDataProvider; return(outRaster); }
private void btnInputFile_Click(object sender, EventArgs e) { using (OpenFileDialog dlg = new OpenFileDialog()) { dlg.Filter = "LDF files(*.ldf)|*.ldf"; if (dlg.ShowDialog() == DialogResult.OK) { txtInputFile.Text = dlg.FileName; string extname = Path.GetExtension(dlg.FileName).ToUpper(); if (!string.IsNullOrEmpty(txtInputFile.Text)) { using (IRasterDataProvider raster = GeoDataDriver.Open(dlg.FileName) as IRasterDataProvider) { _resolutionX = raster.ResolutionX; _resolutionY = raster.ResolutionY; _fileSize = new Size(raster.Width, raster.Height); _fileEnvelope = raster.CoordEnvelope; _activeSpatialRef = raster.SpatialRef; _activeCoordType = raster.CoordType; } _outsizeRegion = new CoordEnvelope(_fileEnvelope.MinX, _fileEnvelope.MaxX, _fileEnvelope.MinY, _fileEnvelope.MaxY); FillControlsValuesByFileArgs(); SetInputFilename(txtInputFile.Text); } } } }
public IFileExtractResult ClipSNWResult(string filename, string area) { inputFileName = filename; using (IRasterDataProvider raster = GeoDataDriver.Open(filename) as IRasterDataProvider) { _resolutionX = raster.ResolutionX; _resolutionY = raster.ResolutionY; _fileSize = new Size(raster.Width, raster.Height); _fileEnvelope = raster.CoordEnvelope; _activeSpatialRef = raster.SpatialRef; _activeCoordType = raster.CoordType; raster.Dispose(); } _outsizeRegion = new CoordEnvelope(_fileEnvelope.MinX, _fileEnvelope.MaxX, _fileEnvelope.MinY, _fileEnvelope.MaxY); OutDir = Path.GetDirectoryName(filename); string hdrfile = Path.Combine(Path.GetDirectoryName(filename), Path.GetFileNameWithoutExtension(filename) + ".hdr"); List <Feature> fets = new List <Feature>(); IVectorFeatureDataReader dr = null; if (area == "中国区") { url = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "数据引用\\基础矢量\\行政区划\\面\\中国边界.shp"); } else { url = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "数据引用\\基础矢量\\行政区划\\面\\省级行政区域_面.shp"); } dr = VectorDataReaderFactory.GetUniversalDataReader(url) as IVectorFeatureDataReader; Feature[] temp = null; temp = dr.FetchFeatures(); fets.AddRange(temp); Feature[] features = null; features = fets.ToArray(); _blockName = area; int index = GetFeatureIndx(area); _vectorFeature = features[index];//_selectFeature //string fieldValue = _vectorFeature.GetFieldValue(fieldIndex); evp = GetMaskEnvelope(_vectorFeature.Geometry as ShapePolygon); BlockDefWithAOI outEnvelope; Size size; List <BlockDefWithAOI> blockList = new List <BlockDefWithAOI>(); GetArgs(out outEnvelope, out size, out OutDir, out filename); envelopes = new BlockDefWithAOI[] { outEnvelope }; aoiIndex = GetFeatureAOIIndex(); blockList.AddRange(envelopes); blockList[0].AOIIndexes = aoiIndex; string[] put = RasterClipT(inputFileName, blockList.ToArray(), OutDir, "Cut"); //put[0] = OutDir + put[0]; string getpath = Path.GetDirectoryName(put[0]); IFileExtractResult res = new FileExtractResult("MWS", put[0], true); res.SetDispaly(false); return(res); }
public bool CreateRaster(string outFileName, int bandCount, enumDataType datatype, IRasterDataProvider referProvider) { CoordEnvelope env = referProvider.CoordEnvelope; float resX = referProvider.ResolutionX; float resY = referProvider.ResolutionY; int width = referProvider.Width; int height = referProvider.Height; Project.ISpatialReference spatialRef = referProvider.SpatialRef; List <string> options = new List <string>(); options.Add("INTERLEAVE=BSQ"); options.Add("VERSION=LDF"); options.Add("WITHHDR=TRUE"); options.Add("SPATIALREF=" + spatialRef.ToProj4String()); options.Add("MAPINFO={" + 1 + "," + 1 + "}:{" + env.MinX + "," + env.MaxY + "}:{" + resX + "," + resY + "}"); //=env.ToMapInfoString(new Size(width, height)); options.Add("BANDNAMES= " + "red,nir,fir"); if (!Directory.Exists(Path.GetDirectoryName(outFileName))) { Directory.CreateDirectory(Path.GetDirectoryName(outFileName)); } using (IRasterDataDriver raster = RasterDataDriver.GetDriverByName("LDF") as IRasterDataDriver) { using (RasterDataProvider outRaster = raster.Create(outFileName, width, height, bandCount, datatype, options.ToArray()) as RasterDataProvider) { unsafe { fixed(UInt16 *ptr = output[0]) { IntPtr buffer = new IntPtr(ptr); outRaster.GetRasterBand(1).Write(0, 0, width, height, buffer, enumDataType.UInt16, width, height); } fixed(UInt16 *ptr = output[1]) { IntPtr buffer = new IntPtr(ptr); outRaster.GetRasterBand(2).Write(0, 0, width, height, buffer, enumDataType.UInt16, width, height); } fixed(UInt16 *ptr = output[2]) { IntPtr buffer = new IntPtr(ptr); outRaster.GetRasterBand(3).Write(0, 0, width, height, buffer, enumDataType.UInt16, width, height); } } return(true); } } }
public static bool CreateRaster(string outFileName, int bandCount, enumDataType datatype, IRasterDataProvider referProvider) { CoordEnvelope env = referProvider.CoordEnvelope; float resX = referProvider.ResolutionX; float resY = referProvider.ResolutionY; int width = referProvider.Width; int height = referProvider.Height; Project.ISpatialReference spatialRef = referProvider.SpatialRef; List <string> options = new List <string>(); options.Add("INTERLEAVE=BSQ"); options.Add("VERSION=LDF"); options.Add("WITHHDR=TRUE"); options.Add("SPATIALREF=" + spatialRef.ToProj4String()); options.Add("MAPINFO={" + 1 + "," + 1 + "}:{" + env.MinX + "," + env.MaxY + "}:{" + resX + "," + resY + "}"); //=env.ToMapInfoString(new Size(width, height)); options.Add("BANDNAMES= " + "LAI"); //string hdrfile = HdrFile.GetHdrFileName(referProvider.fileName); //if (!string.IsNullOrWhiteSpace(hdrfile) && File.Exists(hdrfile)) //{ // HdrFile hdr = HdrFile.LoadFrom(hdrfile); // if (hdr != null && hdr.BandNames != null) // options.Add("BANDNAMES=" + string.Join(",", hdr.BandNames)); //} //CheckAndCreateDir(); if (!Directory.Exists(Path.GetDirectoryName(outFileName))) { Directory.CreateDirectory(Path.GetDirectoryName(outFileName)); } using (IRasterDataDriver raster = RasterDataDriver.GetDriverByName("LDF") as IRasterDataDriver) { using (RasterDataProvider outRaster = raster.Create(outFileName, width, height, bandCount, datatype, options.ToArray()) as RasterDataProvider) { unsafe { fixed(UInt16 *ptr = output[0]) { IntPtr buffer = new IntPtr(ptr); outRaster.GetRasterBand(1).Write(0, 0, width, height, buffer, enumDataType.UInt16, width, height); } } return(true); } } }
private void GetProjectType(Project.ISpatialReference spatialReference, out string projectType) { if (spatialReference == null) { projectType = "等经纬度"; } else if (spatialReference.GeographicsCoordSystem == null) { projectType = ""; } else if (spatialReference.ProjectionCoordSystem == null) { projectType = "等经纬度"; } else { string projectName = spatialReference.ProjectionCoordSystem.Name.Name; switch (projectName) { case "Polar Stereographic": projectType = "极射赤面投影"; break; case "Albers Conical Equal Area": projectType = "阿尔伯斯等面积投影"; break; case "Lambert Conformal Conic": projectType = "兰伯托"; break; case "Mercator": projectType = "墨卡托"; break; case "Hammer": projectType = "Hammer"; break; default: projectType = ""; break; } } }
public string ExractRect(string file, GeoDo.RSS.Core.VectorDrawing.AOIContainerLayer aoiContainer, string savePath, string regionName) { _aoiContainer = aoiContainer; using (IRasterDataProvider raster = GeoDataDriver.Open(file) as IRasterDataProvider) { _resolutionX = raster.ResolutionX; _resolutionY = raster.ResolutionY; _fileSize = new Size(raster.Width, raster.Height); _fileEnvelope = raster.CoordEnvelope; _activeSpatialRef = raster.SpatialRef; _activeCoordType = raster.CoordType; raster.Dispose(); } GeoDo.RSS.Core.DrawEngine.CoordEnvelope corEnvelope = null; corEnvelope = GetGeoRect(); //获取多个aoi的外接矩形 evp.MaxX = corEnvelope.MaxX + 2.0f; evp.MaxY = corEnvelope.MaxY + 2.0f; evp.MinX = corEnvelope.MinX - 2.0f; evp.MinY = corEnvelope.MinY - 2.0f; string filename = ExtractFile(file, 0, evp, regionName, savePath); return(filename); }
public override void ComputeDstEnvelope(RSS.Core.DF.IRasterDataProvider srcRaster, Project.ISpatialReference dstSpatialRef, out RasterProject.PrjEnvelope maxPrjEnvelope, Action <int, string> progressCallback) { throw new NotImplementedException(); }
public override void Project(RSS.Core.DF.IRasterDataProvider srcRaster, FilePrjSettings prjSettings, Project.ISpatialReference dstSpatialRef, Action <int, string> progressCallback) { try { ReadyArgs(srcRaster, prjSettings, dstSpatialRef, progressCallback); IRasterDataProvider outwriter = null; try { Size outSize = _prjSettings.OutSize; string[] options = new string[] { "INTERLEAVE=BSQ", "VERSION=LDF", "WITHHDR=TRUE", "SPATIALREF=" + _dstSpatialRef.ToProj4String(), "MAPINFO={" + 1 + "," + 1 + "}:{" + _prjSettings.OutEnvelope.MinX + "," + _prjSettings.OutEnvelope.MaxY + "}:{" + _outResolutionX + "," + _outResolutionY + "}" }; outwriter = CreateOutFile(_outfilename, _dstBandCount, outSize, srcRaster.DataType, options); //ReadyAngleFiles(_angleDataProvider, _outfilename, _prjSettings, outSize, options); ProjectRaster(srcRaster, outwriter, 0, progressCallback); } catch (IOException ex) { if (ex.Message == "磁盘空间不足。\r\n" && File.Exists(_outfilename)) { File.Delete(_outfilename); } throw ex; } finally { if (outwriter != null) { outwriter.Dispose(); outwriter = null; } } } catch { EndSession(); TryDeleteCurCatch(); throw; } finally { if (_curSession == null) { EndSession(); if (prjSettings.IsClearPrjCache) { TryDeleteCurCatch(); } } } }
private void SetSession(ISmartSession smartSession) { if (smartSession == null) { return; } ICanvasViewer canViewer = smartSession.SmartWindowManager.ActiveCanvasViewer; if (canViewer == null) { return; } IRasterDrawing drawing = canViewer.Canvas.PrimaryDrawObject as IRasterDrawing; IRasterDataProvider activeRaster = drawing.DataProvider; if (activeRaster == null) { return; } _resolutionX = activeRaster.ResolutionX; _resolutionY = activeRaster.ResolutionY; _fileSize = new Size(activeRaster.Width, activeRaster.Height); _fileEnvelope = activeRaster.CoordEnvelope; _activeSpatialRef = activeRaster.SpatialRef; _activeCoordType = activeRaster.CoordType; IAOIProvider aoiProvider = canViewer.AOIProvider; if (aoiProvider == null) { return; } AOIItem[] aoiItems = aoiProvider.GetAOIItems(); if (aoiItems != null && aoiItems.Length == 1) { txtRegionName.Text = string.IsNullOrEmpty(aoiItems[0].Name) ? "DXX" : aoiItems[0].Name; txtMask.Text = _blockName; } GeoDo.RSS.Core.DrawEngine.CoordEnvelope corEnvelope = null; switch (_activeCoordType) { case enumCoordType.PrjCoord: { corEnvelope = aoiProvider.GetPrjRect(); break; } case enumCoordType.GeoCoord: { corEnvelope = aoiProvider.GetGeoRect(); break; } } if (corEnvelope == null) { _outsizeRegion = new CoordEnvelope(activeRaster.CoordEnvelope.MinX, activeRaster.CoordEnvelope.MaxX, activeRaster.CoordEnvelope.MinY, activeRaster.CoordEnvelope.MaxY); } else { _outsizeRegion = new CoordEnvelope(corEnvelope.MinX, corEnvelope.MaxX, corEnvelope.MinY, corEnvelope.MaxY); } FillControlsValuesByFileArgs(); if (_outsizeRegion != null) { GeoRegionChanged(_outsizeRegion); } if (drawing != null) { IRasterDataProvider rdp = drawing.DataProvider; SetInputFilename(rdp.fileName); } }
public override void ComputeDstEnvelope(RSS.Core.DF.IRasterDataProvider srcRaster, Project.ISpatialReference dstSpatialRef, out RasterProject.PrjEnvelope maxPrjEnvelope, Action <int, string> progressCallback) { if (dstSpatialRef == null || dstSpatialRef.ProjectionCoordSystem == null) { maxPrjEnvelope = new PrjEnvelope(60, 150, -70, 70); } else { maxPrjEnvelope = null; } }
public override void ComputeDstEnvelope(RSS.Core.DF.IRasterDataProvider srcRaster, Project.ISpatialReference dstSpatialRef, out RasterProject.PrjEnvelope maxPrjEnvelope, Action <int, string> progressCallback) { //throw new NotImplementedException(); if (srcRaster != null) { Size srcSize = new Size(srcRaster.Width, srcRaster.Height); double[] xs, ys; ReadyLocations(srcRaster, dstSpatialRef, srcSize, out xs, out ys, out maxPrjEnvelope, progressCallback); } else { maxPrjEnvelope = PrjEnvelope.Empty; } }