protected override void ReadLocations(AbstractWarpDataset srcRaster, out double[] longitudes,
                                              out double[] latitudes, out Size locationSize)
        {
            try
            {
                Console.WriteLine($"{srcRaster.Width} {srcRaster.Height}");
                locationSize = new Size(srcRaster.Width, srcRaster.Height);
                longitudes   = new Double[srcRaster.Width * srcRaster.Height];
                latitudes    = new Double[srcRaster.Width * srcRaster.Height];
                CPLErr err = CPLErr.CE_None;

                Band latBand = srcRaster.GetBands(Latitude)[0];
                Console.WriteLine($"LatBand {latBand.XSize} {latBand.YSize}");
                err = latBand.ReadRaster(0, 0, latBand.XSize, latBand.YSize, latitudes,
                                         locationSize.Width, locationSize.Height, 0, 0);
                Console.WriteLine("latBand.ReadRaster" + err);

                Band lonBand = srcRaster.GetBands(Longitude)[0];
                Console.WriteLine($"LonBand {lonBand.XSize} {lonBand.YSize}");

                err = lonBand.ReadRaster(0, 0, lonBand.XSize, lonBand.XSize, longitudes,
                                         locationSize.Width, locationSize.Height, 0, 0);
                Console.WriteLine("lonBand.ReadRaster" + err);
            }
            catch (Exception ex)
            {
                throw new Exception("读取经纬度数据集失败:" + ex.Message, ex);
            }
        }
        protected override void ReadLocations(AbstractWarpDataset locationRaster, out double[] xs, out double[] ys, out System.Drawing.Size locationSize)
        {
            //IBandProvider srcbandpro = locationRaster.BandProvider as IBandProvider;
            {
                Band[] lonsBands = locationRaster.GetBands("Longitude");
                Band   lonsBand  = lonsBands[0];
                {
                    locationSize = new Size(lonsBand.XSize, lonsBand.YSize);
                    xs           = new Double[lonsBand.XSize * lonsBand.YSize];
                    unsafe
                    {
                        fixed(Double *ptrLong = xs)
                        {
                            IntPtr bufferPtrLong = new IntPtr(ptrLong);

                            lonsBand.ReadRaster(0, 0, lonsBand.XSize, lonsBand.YSize, bufferPtrLong, lonsBand.XSize, lonsBand.YSize, DataType.GDT_Float64, 0, 0);
                        }
                    }
                }
                Band[] latBands = locationRaster.GetBands("Latitude");
                Band   latBand  = latBands[0];
                {
                    ys = new Double[locationSize.Width * locationSize.Height];
                    unsafe
                    {
                        fixed(Double *ptrLat = ys)
                        {
                            {
                                IntPtr bufferPtrLat = new IntPtr(ptrLat);
                                latBand.ReadRaster(0, 0, latBand.XSize, latBand.YSize, bufferPtrLat, latBand.XSize, latBand.YSize, DataType.GDT_Float64, 0, 0);
                            }
                        }
                    }
                }
            }
            if (_xzoom != 1d)
            {
                for (int i = 0; i < xs.Length; i++)
                {
                    xs[i] = xs[i] * _xzoom;
                }
            }
            if (_xzoom != 1d)
            {
                for (int i = 0; i < ys.Length; i++)
                {
                    ys[i] = ys[i] * _yzoom;
                }
            }
            if (_prjSettings != null && _prjSettings.ExtArgs != null && _prjSettings.ExtArgs.Contains("360"))
            {
                for (int i = 0; i < xs.Length; i++)
                {
                    if (xs[i] > 180)
                    {
                        xs[i] = xs[i] - 360d;
                    }
                }
            }
        }
Example #3
0
 private void ReadLocations(AbstractWarpDataset srcRaster, out Band longitudeBand, out Band latitudeBand)
 {
     Band[] lonsBands = srcRaster.GetBands("Longitude");
     Band[] latBands  = srcRaster.GetBands("Latitude");
     if (lonsBands == null || latBands == null || lonsBands.Length == 0 || latBands.Length == 0 || lonsBands[0] == null || latBands[0] == null)
     {
         throw new Exception("获取经纬度数据失败");
     }
     longitudeBand = lonsBands[0];
     latitudeBand  = latBands[0];
 }
Example #4
0
 private void InitLutList(AbstractWarpDataset srcRaster)
 {
     PrjBand[] prjBands = PrjBandTable.GetPrjBands(srcRaster);
     for (int i = 0; i < _setting.OutBandNos.Length; i++)
     {
         int     bandNo  = _setting.OutBandNos[i];
         PrjBand b       = prjBands[bandNo - 1];
         string  calName = b.DataSetName.Replace("NOMChannel", "CALChannel");
         Band[]  bands   = srcRaster.GetBands(calName);
         if (bands == null || bands.Length == 0)
         {
             throw new ArgumentNullException(string.Format("FY2X辐射定标,未找到名称为{0}的数据.", calName));
         }
         var     band   = bands[0];
         float[] buffer = new float[band.XSize * band.YSize];
         band.ReadRaster(0, 0, band.XSize, band.YSize, buffer, band.XSize, band.YSize, 0, 0);
         UInt16[] ubuffer = new ushort[band.XSize * band.YSize];
         for (int j = 0; j < buffer.Length; j++)
         {
             if (buffer[j] > 1)
             {
                 ubuffer[j] = (UInt16)(buffer[j] * 10 + 0.5);
             }
             else
             {
                 ubuffer[j] = (UInt16)(buffer[j] * 1000 + 0.5);
             }
         }
         _lutList.Add(ubuffer);
     }
 }
Example #5
0
 private void ReadySensorZenith(AbstractWarpDataset srcRaster)
 {
     _sensorSenithRaster = srcRaster;
     Band[] bands = srcRaster.GetBands("NOMSatelliteZenith");//卫星天顶角
     if (bands != null || bands.Length != 1)
     {
         _sensorSenithBand = bands[0];
     }
 }
Example #6
0
 ///针对FY2E,投影波段,设置为1,2,3,4,5[NOMChannelVIS],6[NOMCloudClassification]
 private Band[] GetSrcRasterBand(AbstractWarpDataset srcRaster, FilePrjSettings prjSettings)
 {
     Band[] bands   = new Band[prjSettings.OutBandNos.Length];
     int[]  bandNos = prjSettings.OutBandNos;
     if (bandNos.Length == 1 && bandNos[0] == 5)
     {
         Band[] bs = srcRaster.GetBands("NOMChannelVIS1KM");
         if (bs != null)
         {
             bands[0] = bs[0];
             //bands[0].GetBandID() = 5;
             _srcImgResolution = 0.01f;
         }
     }
     else
     {
         for (int i = 0; i < bandNos.Length; i++)
         {
             if (bandNos[i] <= 4)
             {
                 bands[i] = srcRaster.GetRasterBand(bandNos[i]);
             }
             else if (bandNos[i] == 5)
             {
                 Band[] bs = srcRaster.GetBands("NOMChannelVIS1KM");
                 if (bs != null)
                 {
                     bands[i] = bs[0];
                     //bands[i].BandNo = 5;
                 }
             }
             else if (bandNos[i] == 6)
             {
                 Band[] bs = srcRaster.GetBands("NOMCloudClassification");
                 if (bs != null)
                 {
                     bands[i] = bs[0];
                     //bands[i].BandNo = 6;
                 }
             }
         }
     }
     return(bands);
 }
Example #7
0
 private float[] ReadBandValueMap(AbstractWarpDataset srcRaster, string dataset)
 {
     float[] value = null;
     Band[]  bands = srcRaster.GetBands(dataset);
     if (bands != null && bands.Length != 0)
     {
         Size size;
         ReadBandData(bands[0], out value, out size);
     }
     return(value);
 }
Example #8
0
        private float[] ReadDataSetToSingle(AbstractWarpDataset srcbandpro, Size srcSize, string dataSetName, int bandIndex)
        {
            Single[] data        = new Single[srcSize.Width * srcSize.Height];
            Band[]   rasterBands = srcbandpro.GetBands(dataSetName);
            Band     rasterBand  = rasterBands[0];

            {
                rasterBand.ReadRaster(0, 0, srcSize.Width, srcSize.Height, data, srcSize.Width, srcSize.Height, 0, 0);
            }
            return(data);
        }
Example #9
0
        private float[] ReadDataSetToFloat32(AbstractWarpDataset srcbandpro, string dataSetName, int bandIndex,
                                             out Size srcSize)
        {
            float[] data       = null;
            Band    rasterBand = srcbandpro.GetBands(dataSetName)[0];

            {
                srcSize = new Size(rasterBand.GetXSize(), rasterBand.GetYSize());
                data    = new float[srcSize.Width * srcSize.Height];
                rasterBand.ReadRaster(0, 0, srcSize.Width, srcSize.Height, data, srcSize.Width, srcSize.Height, 0, 0);
            }
            return(data);
        }
        protected override void ReadLocations(AbstractWarpDataset geoRaster, out double[] longitudes, out double[] latitudes, out Size lonSize)
        {
            // IBandProvider srcbandpro = geoRaster.BandProvider as IBandProvider;
            {
                Band[] lonsBands = geoRaster.GetBands("Longitude");
                Band   lonsBand  = lonsBands[0];
                {
                    lonSize    = new Size(lonsBand.XSize, lonsBand.YSize);
                    longitudes = new Double[lonsBand.XSize * lonsBand.YSize];
                    unsafe
                    {
                        fixed(Double *ptrLong = longitudes)
                        {
                            IntPtr bufferPtrLong = new IntPtr(ptrLong);

                            lonsBand.ReadRaster(0, 0, lonsBand.XSize, lonsBand.YSize, bufferPtrLong, lonsBand.XSize, lonsBand.YSize, DataType.GDT_Float64, 0, 0);
                        }
                    }
                }
                Band[] latBands = geoRaster.GetBands("Latitude");
                Band   latBand  = latBands[0];
                {
                    latitudes = new Double[lonSize.Width * lonSize.Height];
                    unsafe
                    {
                        fixed(Double *ptrLat = latitudes)
                        {
                            {
                                IntPtr bufferPtrLat = new IntPtr(ptrLat);
                                latBand.ReadRaster(0, 0, latBand.XSize, latBand.YSize, bufferPtrLat, latBand.XSize, latBand.YSize, DataType.GDT_Float64, 0, 0);
                            }
                        }
                    }
                }
            }
        }
        private Band[] TryCreateRasterDataBands(AbstractWarpDataset srcRaster, FY3_MERSI_PrjSettings fy3prjSettings, Action <int, string> progressCallback)
        {
            List <Band> rasterBands = new List <Band>();

            for (int i = 0; i < _prjBands.Length; i++)
            {
                if (progressCallback != null)
                {
                    progressCallback(_readyProgress++, "准备第" + i + "个输入数据通道");
                }
                PrjBand bandMap  = _prjBands[i];
                Band[]  latBands = srcRaster.GetBands(bandMap.DataSetName);
                Band    band     = latBands[bandMap.DataSetIndex];
                rasterBands.Add(band);
            }
            return(rasterBands.ToArray());
        }
        private float[] ReadDataSetToSingle(AbstractWarpDataset srcbandpro, Size srcSize, string dataSetName, int bandIndex)
        {
            Single[] data       = new Single[srcSize.Width * srcSize.Height];
            Band     rasterBand = srcbandpro.GetBands(dataSetName)[0];

            {
                unsafe
                {
                    fixed(Single *ptr = data)
                    {
                        IntPtr bufferPtr = new IntPtr(ptr);

                        rasterBand.ReadRaster(0, 0, srcSize.Width, srcSize.Height, bufferPtr, srcSize.Width, srcSize.Height, DataType.GDT_Float32, 0, 0);
                    }
                }
            }
            return(data);
        }
        private Int16[] ReadDataSetToInt16(AbstractWarpDataset srcbandpro, Size srcSize, string dataSetName, int bandIndex)
        {
            Int16[] data        = new Int16[srcSize.Width * srcSize.Height];
            Band[]  rasterBands = srcbandpro.GetBands(dataSetName);
            Band    rasterBand  = rasterBands[0];

            {
                unsafe
                {
                    fixed(Int16 *ptr = data)
                    {
                        IntPtr bufferPtr = new IntPtr(ptr);

                        rasterBand.ReadRaster(0, 0, srcSize.Width, srcSize.Height, bufferPtr, srcSize.Width, srcSize.Height, DataType.GDT_Int16, 0, 0);
                    }
                }
            }
            return(data);
        }
Example #14
0
        protected Band[] TryCreateRasterDataBands(AbstractWarpDataset srcRaster, FilePrjSettings prjSettings,
                                                  Action <int, string> progressCallback)
        {
            PrjBand[]   bands       = PrjBandTable.GetPrjBands(srcRaster);
            List <Band> rasterBands = new List <Band>();

            for (int i = 0; i < prjSettings.OutBandNos.Length; i++)
            {
                if (progressCallback != null)
                {
                    progressCallback(_readyProgress++, "投影准备");
                }
                int     bandNo = prjSettings.OutBandNos[i];
                PrjBand b      = bands[bandNo - 1];
                Band    band   = srcRaster.GetBands(b.DataSetName)[0];
                rasterBands.Add(band);
            }

            return(rasterBands.ToArray());
        }
 private void ReadDnIS(AbstractWarpDataset srcImgRaster, string dsName)
 {
     if (srcImgRaster == null)
     {
         throw new ArgumentNullException("srcRaster", "获取亮温转换参数失败:参数srcRaster为空");
     }
     if (dsName == null)
     {
         throw new ArgumentNullException("dataSetName", "获取亮温转换参数失败:参数srcRaster为空");
     }
     try
     {
         int count = srcImgRaster.GetBands(dsName).Length;
         _dsIntercept = ReadDataSetAttrToFloat(srcImgRaster, dsName, "Intercept", count);
         _dsSlope     = ReadDataSetAttrToFloat(srcImgRaster, dsName, "Slope", count);
     }
     catch (Exception ex)
     {
         throw new Exception("获取亮温转换参数失败:" + ex.Message, ex.InnerException);
     }
 }