Exemplo n.º 1
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="fileName"></param>
        /// <param name="header1024"></param>
        /// <param name="driver"></param>
        /// <param name="args">
        /// 可扩展的参数信息,每对参数都采用key=value的形式。
        /// 1、数据集,采用逗号分隔的形式加入默认所选择的波段。
        /// 例如:datasets=VIRR_1Km_LST[,...]
        /// 2、投影方式,采用proj4字符串的形式
        /// 例如:proj4=
        /// 3、其他待扩展的参数信息
        /// 坐标信息:geoinfo=1,2,3,4,5,6//其中1,2,3,4,5,6分辨代表:minX,maxX,minY,maxY,resolutionX,resolutionY;
        /// 经纬度数据集:geodatasets=Longitude,Latitude//该数据对轨道数据有效。
        /// </param>
        public HdfRasterDataProvider(string fileName, byte[] header1024, IGeoDataDriver driver, params object[] args)
            : base(fileName, driver)
            //: base(fileName, driver)
        {
            _args = args;
            TryParseArgs();
            using (Dataset _dataset = Gdal.Open(fileName, Access.GA_ReadOnly))
            {
                GDALHelper.GetDatasetAttributes(_dataset, _attributes);
                //数据集仅有一个数据集,一个通道
                if (_dataset.RasterCount == 1)
                {
                    //GDAL对于只有一个数据集的HDF数据,SUBDATASETS属性值是空的,这里尝试手动设置下
                    TrySetGDALSUBDATASETS(_datasets);
                }
            }

            //...可以在此添加投影等信息
            TryCreateBandProvider(fileName, header1024, _datasets, _attributes.GetAttributeDomain("SUBDATASETS"));

            //_bandCount = _dataset.RasterCount;

            _bandCount = _rasterBands.Count;

            TryGetDatTypeOfProvider();

            TryGetSizeOfProvider();

            TryCreateSpatialRef();
            TryCreateCoordTransform();
            TrySetEnvelopeAndResolutions();
        }
Exemplo n.º 2
0
        public FY3AASOandASLProvider(string fileName, byte[] header1024, IGeoDataDriver driver, params object[] args)
            : base(fileName, driver)
        {
            _fileName = fileName;
            _args     = args;
            using (Dataset dataset = Gdal.Open(fileName, Access.GA_ReadOnly))
            {
                GDALHelper.GetDatasetAttributes(dataset, _attributes);
            }
            Dictionary <string, string> allGdalSubDatasets = this.Attributes.GetAttributeDomain("SUBDATASETS");

            _allGdalSubDatasets = RecordAllSubDatasetNames(allGdalSubDatasets);
            _coordEnvelope      = TrySetGeoInfo();
            _selectedsets       = TryGetSelectedSets();
            TryCreateBandProvider();
            _bandCount   = _rasterBands.Count;
            _dataType    = _rasterBands[0].DataType;
            _width       = _rasterBands[0].Width;
            _height      = _rasterBands[0].Height;
            _spatialRef  = SpatialReference.GetDefault();
            _coordType   = _spatialRef.ProjectionCoordSystem != null ? enumCoordType.PrjCoord : enumCoordType.GeoCoord;
            _resolutionX = (float)(_coordEnvelope.Width / (_width));
            _resolutionY = (float)(_coordEnvelope.Height / (_height));
            if (_dataIdentify != null)
            {
                _dataIdentify.OrbitDateTime = IceConDataProvider.TryGetFileDate(Path.GetFileName(fileName));
            }
        }
Exemplo n.º 3
0
 /// <summary>
 /// 这里增加一个判断一个文件是否该驱动支持的静态方法
 /// </summary>
 /// <param name="fileName"></param>
 /// <returns></returns>
 internal static bool IsSupport(string fileName)
 {
     try
     {
         AttributeManager attributes = new AttributeManager();
         using (Dataset dataset = Gdal.Open(fileName, Access.GA_ReadOnly))
         {
             GDALHelper.GetDatasetAttributes(dataset, attributes);
         }
         Dictionary <string, string> allGdalSubDatasets = attributes.GetAttributeDomain("SUBDATASETS");
         string[] allGdalSubDatasetArray = RecordAllSubDatasetNames(allGdalSubDatasets);
         if (allGdalSubDatasetArray == null || allGdalSubDatasetArray.Length != 6)
         {
             return(false);
         }
         using (Hdf5Operator hdf = new Hdf5Operator(fileName))
         {
             allGdalSubDatasetArray = hdf.GetDatasetNames;
         }
         string[] DATASETS = new string[] { "icecon_north_asc", "icecon_north_avg", "icecon_north_des", "icecon_south_asc", "icecon_south_avg", "icecon_south_des" };
         for (int i = 0; i < 6; i++)
         {
             if (!allGdalSubDatasetArray[i].Contains(DATASETS[i]))//数据集必须完全匹配,才能用此数据集
             {
                 return(false);
             }
         }
         return(true);
     }
     catch
     {
         return(false);
     }
 }
Exemplo n.º 4
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="fileName"></param>
        /// <param name="header1024"></param>
        /// <param name="driver"></param>
        /// <param name="access"></param>
        /// <param name="args">
        /// selectedband=1,2,3
        ///
        /// </param>
        public SICRasterDataProvider(string fileName, byte[] header1024, IGeoDataDriver driver, enumDataProviderAccess access, params object[] args)
            : base(fileName, driver)
        {
            _access = (access == enumDataProviderAccess.ReadOnly ? Access.GA_ReadOnly : Access.GA_Update);
            TryParseArgs(args);
            //通过GDAL获取GDAL识别的通道
            using (Dataset _dataset = Gdal.Open(fileName, Access.GA_ReadOnly))
            {
                GDALHelper.GetDatasetAttributes(_dataset, _attributes);
            }
            Dictionary <string, string> allGdalSubDatasets = _attributes.GetAttributeDomain("SUBDATASETS");

            _allGdalSubDatasets = RecordAllSubDatasetNames(allGdalSubDatasets);

            //...根据参数取得当前需要的数据集
            //如果是北极
            string[] currentDsNames = new string[] { _allGdalSubDatasets[0], _allGdalSubDatasets[1], _allGdalSubDatasets[2] };
            //如果是南极
            currentDsNames = new string[] { _allGdalSubDatasets[3], _allGdalSubDatasets[4], _allGdalSubDatasets[5] };
            //设置_rasterBands
            List <IRasterBand> rasterBands = new List <IRasterBand>();

            foreach (string dsName in currentDsNames)
            {
                //这里测试时候看dsName是否是全路径,如果不是需要用全路径
                string        dsFullPath   = dsName;
                Dataset       ds           = Gdal.Open(dsFullPath, _access);
                IRasterBand[] gdalDatasets = ReadBandsFromDataset(ds, this);
                rasterBands.AddRange(gdalDatasets);
            }
            _rasterBands = rasterBands;
            _bandCount   = 3;
            _dataType    = rasterBands[0].DataType;
            _width       = rasterBands[0].Width;
            _height      = rasterBands[0].Height;
            _resolutionX = 12500f;
            _resolutionY = 12500f;
            //设置坐标
            _coordType = enumCoordType.PrjCoord;
            //如果是北极
            _coordEnvelope = new Core.DF.CoordEnvelope(-3850000, 3750000, -5350000, 5850000);
            _spatialRef    = SpatialReference.FromProj4(NORTH_PROJ4);
            //如果是南极
            _coordEnvelope = new Core.DF.CoordEnvelope(-3950000, 3950000, -3950000, 4350000);
            _spatialRef    = SpatialReference.FromProj4(SOUTH_PROJ4);
        }
Exemplo n.º 5
0
        public FY3HDFL2ProductProvider(string fileName, byte[] header1024, IGeoDataDriver driver, params object[] args)
            : base(fileName, driver)
        {
            L2ProductDefind[] l2Pros = L2ProductDefindParser.GetL2ProductDefs(Path.GetFileName(_fileName));
            if (l2Pros == null)
            {
                return;
            }
            _fileName = fileName;
            _args     = args;
            L2ProductDefind verifyL2Pro = l2Pros.Length == 1 ? l2Pros[0] : VerifyL2ProDef(l2Pros);

            if (verifyL2Pro == null)
            {
                return;
            }
            using (Dataset dataset = Gdal.Open(fileName, Access.GA_ReadOnly))
            {
                GDALHelper.GetDatasetAttributes(dataset, _attributes);
            }
            Dictionary <string, string> allGdalSubDatasets = this.Attributes.GetAttributeDomain("SUBDATASETS");

            _allGdalSubDatasets = RecordAllSubDatasetNames(allGdalSubDatasets);
            _coordEnvelope      = TrySetGeoInfo(verifyL2Pro);
            _selectedsets       = TryGetSelectedSets(verifyL2Pro);
            TryCreateBandProvider();
            _bandCount   = _rasterBands.Count;
            _dataType    = _rasterBands[0].DataType;
            _width       = _rasterBands[0].Width;
            _height      = _rasterBands[0].Height;
            _coordType   = _spatialRef.ProjectionCoordSystem != null ? enumCoordType.PrjCoord : enumCoordType.GeoCoord;
            _resolutionX = (float)(_coordEnvelope.Width / (_width));
            _resolutionY = (float)(_coordEnvelope.Height / (_height));
            if (_dataIdentify != null && _dataIdentify.OrbitDateTime == DateTime.MinValue)
            {
                _dataIdentify.OrbitDateTime = IceConDataProvider.TryGetFileDate(Path.GetFileName(fileName));
            }
        }
Exemplo n.º 6
0
 public FYSnowPrdDataProvider(string fileName, byte[] header1024, IGeoDataDriver driver, params object[] args)
     : base(fileName, driver)
 {
     _args = args;
     TryParseArgs();
     using (Dataset dataset = Gdal.Open(fileName, Access.GA_ReadOnly))
     {
         GDALHelper.GetDatasetAttributes(dataset, _attributes);
     }
     TryCreateBandProvider();
     _bandCount = _rasterBands.Count;
     TryGetDatTypeOfProvider();
     TryGetSizeOfProvider();
     //TryCreateSpatialRef();
     _coordType   = enumCoordType.PrjCoord;
     _resolutionX = (float)(_coordEnvelope.Width / (_width));
     _resolutionY = (float)(_coordEnvelope.Height / (_height));
     if (_dataIdentify != null)
     {
         _dataIdentify.Sensor        = "MWRI";
         _dataIdentify.OrbitDateTime = IceConDataProvider.TryGetFileDate(Path.GetFileName(fileName));
     }
 }