//public override void SetExtHeader(IExtHeaderSetter setter, object header) //{ // if (setter == null || header == null) // return; // setter.SetExtHeader<NDVISetValue>((NDVISetValue)header); //} private IPixelFeatureMapper <float> ComputeNDVIResult(IRasterDataProvider orbitDataProvider, IPixelIndexMapper result, int visiBandNo, int niBandNo) { //生成判识结果文件 IRasterDataProvider batDataProvider = null; IInterestedRaster <UInt16> iir = null; try { RasterIdentify id = new RasterIdentify(); id.ThemeIdentify = "CMA"; id.ProductIdentify = "BAG"; id.SubProductIdentify = "DBLV"; id.Sensor = orbitDataProvider.DataIdentify.Sensor; id.Satellite = orbitDataProvider.DataIdentify.Satellite; id.OrbitDateTime = DateTime.Now.Subtract(new TimeSpan(1, 0, 0, 0, 0)); id.GenerateDateTime = DateTime.Now; iir = new InterestedRaster <UInt16>(id, new Size(orbitDataProvider.Width, orbitDataProvider.Height), orbitDataProvider.CoordEnvelope.Clone()); int[] idxs = result.Indexes.ToArray(); iir.Put(idxs, 1); batDataProvider = iir.HostDataProvider; //内存结果 IPixelFeatureMapper <float> memresult = new MemPixelFeatureMapper <float>("NDVI", 1000, new Size(batDataProvider.Width, batDataProvider.Height), batDataProvider.CoordEnvelope, batDataProvider.SpatialRef); //虚拟文件 //转换IRasterDataProvider!!!!! IVirtualRasterDataProvider vrd = new VirtualRasterDataProvider(new IRasterDataProvider[] { batDataProvider, orbitDataProvider }); ArgumentProvider ap = new ArgumentProvider(vrd, null); RasterPixelsVisitor <Int16> visitor = new RasterPixelsVisitor <Int16>(ap); visitor.VisitPixel(new int[] { 1, visiBandNo + 1, niBandNo + 1 }, (index, values) => { if (values[0] == 0) { memresult.Put(index, -9999); } else { memresult.Put(index, GetOnePixelNDVI(values[1], values[2])); } }); iir.Dispose(); return(memresult); } finally { if (batDataProvider != null) { batDataProvider.Dispose(); } if (File.Exists(iir.FileName)) { File.Delete(iir.FileName); } } }
private string CombineCloudAndWater(string cloudFile, string waterFile) { IInterestedRaster <Int16> iir = null; IRasterDataProvider waterPrd = null; IRasterDataProvider cloudPrd = null; try { RasterIdentify id = new RasterIdentify(waterFile); waterPrd = GeoDataDriver.Open(waterFile) as IRasterDataProvider; cloudPrd = GeoDataDriver.Open(cloudFile) as IRasterDataProvider; iir = new InterestedRaster <Int16>(id, new Size(waterPrd.Width, waterPrd.Height), waterPrd.CoordEnvelope.Clone()); //虚拟文件 //转换IRasterDataProvider!!!!! IVirtualRasterDataProvider vrd = new VirtualRasterDataProvider(new IRasterDataProvider[] { waterPrd, cloudPrd }); ArgumentProvider ap = new ArgumentProvider(vrd, null); RasterPixelsVisitor <Int16> visitor = new RasterPixelsVisitor <Int16>(ap); visitor.VisitPixel(new int[] { 1, 2 }, (index, values) => { if (values[0] == 1) { iir.Put(index, 1); } else if (values[1] == 1) { iir.Put(index, -9999); } }); return(iir.FileName); } finally { if (iir != null) { iir.Dispose(); } if (waterPrd != null) { waterPrd.Dispose(); } if (cloudPrd != null) { cloudPrd.Dispose(); } } }
private void button17_Click(object sender, EventArgs e) { IVirtualRasterDataProvider prd = new VirtualRasterDataProvider(null); IRasterPixelsVisitor <UInt16> visitor = new RasterPixelsVisitor <UInt16>(new ArgumentProvider(prd, null)); IPixelFeatureMapper <float> result = new MemPixelFeatureMapper <float>("NVI", 10000, new Size(prd.Width, prd.Height), prd.CoordEnvelope, prd.SpatialRef); visitor.VisitPixel(new int[] { 1, 11, 21 }, (idx, values) => { result.Put(idx, values[0] * values[1] * values[2]); } ); // //IInterestedRaster<float> rst = new InterestedRaster<float>(null, Size.Empty, null); //rst.Put(result); //rst.Dispose(); }
private IExtractResult ERADAlgorithm() { int optdCH = (int)_argumentProvider.GetArg("OPTDBandNo"); double OptdZoom = (float)_argumentProvider.GetArg("OPTDZoom"); int lwpCH = (int)_argumentProvider.GetArg("LWPBandNo"); double LwpZoom = (float)_argumentProvider.GetArg("LWPZoom"); if (_argumentProvider.GetArg("mainfiles") == null || _argumentProvider.GetArg("LWPFile") == null) { return(null); } string optdFile = _argumentProvider.GetArg("mainfiles").ToString(); string lwpFile = _argumentProvider.GetArg("LWPFile").ToString(); if (optdCH == -1 || lwpCH == -1 || !File.Exists(optdFile) || !File.Exists(lwpFile)) { //errorStr = "雾滴尺度产品生产所用通道未设置完全,请检查!"; return(null); } IRasterDataProvider optdPrd = null; IRasterDataProvider lwpPrd = null; IVirtualRasterDataProvider vrd = null; try { optdPrd = GeoDataDriver.Open(optdFile) as IRasterDataProvider; lwpPrd = GeoDataDriver.Open(lwpFile) as IRasterDataProvider; vrd = new VirtualRasterDataProvider(new IRasterDataProvider[] { optdPrd, lwpPrd }); return(CalcOPTDByOneFile(vrd, optdPrd, optdCH, OptdZoom, lwpCH, LwpZoom)); } finally { optdPrd.Dispose(); lwpPrd.Dispose(); vrd.Dispose(); } }
/// <summary> /// /// </summary> /// <param name="rasterFile">土地利用类型文件</param> /// <param name="dblvFile">二值图文件</param> /// <returns></returns> private unsafe string GenerateNetImageFile(string rasterFile, string dblvFile) { using (IRasterDataProvider rasterprd = GeoDataDriver.Open(rasterFile) as IRasterDataProvider) { using (IRasterDataProvider dblvprd = GeoDataDriver.Open(dblvFile) as IRasterDataProvider) { //step1:将文件转换为类型一致 IRasterDataProviderConverter converter = new RasterDataProviderConverter(); string dstFileName = MifEnvironment.GetFullFileName("1.dat"); using (IRasterDataProvider dstDataProvider = converter.ConvertDataType <UInt16, Byte>(dblvprd, enumDataType.Byte, dstFileName, (v) => { return((Byte)v); })) { //step2:裁切文件以保证大小一致 using (IRasterDataProvider sameSizeDataProvider = GetSameSizeDataProvider(rasterprd, dstDataProvider)) { byte[] dataBlock = new byte[sameSizeDataProvider.Width * sameSizeDataProvider.Height]; fixed(byte *buffer = dataBlock) { IntPtr ptr = new IntPtr(buffer); sameSizeDataProvider.GetRasterBand(1).Read(0, 0, sameSizeDataProvider.Width, sameSizeDataProvider.Height, ptr, enumDataType.Byte, sameSizeDataProvider.Width, sameSizeDataProvider.Height); sameSizeDataProvider.Read(0, 0, sameSizeDataProvider.Width, sameSizeDataProvider.Height, ptr, enumDataType.Byte, sameSizeDataProvider.Width, sameSizeDataProvider.Height, 1, new int[] { 1 }, enumInterleave.BSQ); } if (sameSizeDataProvider == null) { return(null); } //step3:生成虚拟文件 VirtualRasterDataProvider vrd = new VirtualRasterDataProvider(new IRasterDataProvider[] { sameSizeDataProvider, dstDataProvider }); //step4:遍历虚拟文件生成结果 ArgumentProvider ap = new ArgumentProvider(vrd, null); RasterPixelsVisitor <Byte> visitor = new RasterPixelsVisitor <Byte>(ap); //生成结果 MemPixelFeatureMapper <Byte> memresult = new MemPixelFeatureMapper <Byte>("NIMG", 1000, new Size(vrd.Width, vrd.Height), vrd.CoordEnvelope, vrd.SpatialRef); visitor.VisitPixel(new int[] { 1, 2 }, (index, values) => { if (values[0] == 0) { memresult.Put(index, 0); } else if (values[1] == 0) { memresult.Put(index, 100); } else if (values[1] == 1) { memresult.Put(index, (byte)(100 + values[0])); } }); //保存文件 RasterIdentify idNIMG = new RasterIdentify(dblvFile); idNIMG.ThemeIdentify = "CMA"; idNIMG.ProductIdentify = "SNW"; idNIMG.SubProductIdentify = "NIMG"; idNIMG.GenerateDateTime = DateTime.Now; idNIMG.Satellite = dblvprd.DataIdentify.Satellite; idNIMG.Sensor = dblvprd.DataIdentify.Sensor; string fileName = MifEnvironment.GetFullFileName(idNIMG.ToLongString() + ".dat"); if (File.Exists(fileName)) { idNIMG.GenerateDateTime = DateTime.Now.AddSeconds(1); } IInterestedRaster <Byte> iirNIMG = new InterestedRaster <Byte>(idNIMG, new Size(sameSizeDataProvider.Width, sameSizeDataProvider.Height), sameSizeDataProvider.CoordEnvelope.Clone(), sameSizeDataProvider.SpatialRef); iirNIMG.Put(memresult); iirNIMG.Dispose(); if (File.Exists(dstFileName)) { File.Delete(dstFileName); } return(iirNIMG.FileName); } } } } }