Esempio n. 1
0
        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]);
        }
Esempio n. 2
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);
        }
Esempio n. 3
0
        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);
        }
Esempio n. 4
0
 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);
             }
         }
     }
 }
Esempio n. 5
0
        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);
        }
Esempio n. 6
0
        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);
                }
            }
        }
Esempio n. 7
0
        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);
                }
            }
        }
Esempio n. 8
0
        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;
                }
            }
        }
Esempio n. 9
0
        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);
        }
Esempio n. 10
0
 public override void ComputeDstEnvelope(RSS.Core.DF.IRasterDataProvider srcRaster, Project.ISpatialReference dstSpatialRef, out RasterProject.PrjEnvelope maxPrjEnvelope, Action <int, string> progressCallback)
 {
     throw new NotImplementedException();
 }
Esempio n. 11
0
 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();
             }
         }
     }
 }
Esempio n. 12
0
        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);
            }
        }
Esempio n. 13
0
 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;
     }
 }
Esempio n. 14
0
 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;
     }
 }