private IInterestedPixelExtracter CreateThresholdExtracter(enumDataType dataType) { switch (dataType) { case enumDataType.Byte: return(new SimpleThresholdExtracter <byte>()); case enumDataType.Int16: return(new SimpleThresholdExtracter <Int16>()); case enumDataType.UInt16: return(new SimpleThresholdExtracter <UInt16>()); case enumDataType.Int32: return(new SimpleThresholdExtracter <Int32>()); case enumDataType.UInt32: return(new SimpleThresholdExtracter <UInt32>()); case enumDataType.Float: return(new SimpleThresholdExtracter <float>()); case enumDataType.Double: return(new SimpleThresholdExtracter <double>()); case enumDataType.Int64: return(new SimpleThresholdExtracter <Int64>()); case enumDataType.UInt64: return(new SimpleThresholdExtracter <UInt64>()); default: throw new NotSupportedException("简单阈值判识器不支持\"" + dataType.ToString() + "\"数据类型的栅格数据。"); } }
private DataType GetDataType(enumDataType dataType) { switch (dataType) { case enumDataType.Byte: return(DataType.GDT_Byte); case enumDataType.UInt16: return(DataType.GDT_UInt16); case enumDataType.Int16: return(DataType.GDT_Int16); case enumDataType.UInt32: return(DataType.GDT_UInt32); case enumDataType.Int32: return(DataType.GDT_Int32); case enumDataType.Float: return(DataType.GDT_Float32); case enumDataType.Double: return(DataType.GDT_Float64); } throw new NotSupportedException(dataType.ToString()); }
private void ShowInformation() { StringBuilder strInfo = new StringBuilder("当前任务信息:\r\n"); strInfo.Append("\r\n数据源:\t\t"); strInfo.Append(txtDatasource.Text); strInfo.Append("\r\n数据类型:\t"); strInfo.Append(m_DataType.ToString()); strInfo.Append("\r\n直接检查数据源:\t"); strInfo.Append(checkBoxUseSourceDirectly.Checked ? "是" : "否"); strInfo.Append("\r\n标准:\t\t"); strInfo.Append(cmbStandard.Text); strInfo.Append("\r\n方案:\t\t"); strInfo.Append(cmbSchema.Text); strInfo.Append("\r\nTopo容限:\t"); strInfo.Append(txtTopoTolerance.Text); strInfo.Append("\r\n比例尺:\t\t"); strInfo.Append(cmbScale.Text); strInfo.Append("\r\n空间参考图层:\t"); strInfo.Append(cmbSpatialRefLayer.Text); strInfo.Append("\r\n单位:\t\t"); strInfo.Append(txtInstitute.Text); strInfo.Append("\r\n创建人:\t\t"); strInfo.Append(txtPerson.Text); strInfo.Append("\r\n创建时间:\t"); strInfo.Append(dateTime.Text); strInfo.Append("\r\n备注:\t\t"); strInfo.Append(txtRemark.Text); txtInformation.Text = strInfo.ToString(); }
public DataTypeIsNotSupportException(enumDataType dataType) { _dataType = dataType.ToString(); }
public List <string[]> SeriesStaticAOI(string[] filesL, int bandNumL, string[] fillvalueL, out Dictionary <DateTime, string> filedate, Action <int, string> progressCallback) { int[] aoiIndex; Size fileSize; int aoilength; int count = 0; IRasterDataProvider arrayPrd = null; List <string[]> resultList = new List <string[]>(); filedate = new Dictionary <DateTime, string>(); DateTime t = DateTime.MinValue; try { foreach (string file in filesL) { enumDataType datatype = enumDataType.Unknow; using (IRasterDataProvider dataPrd = GeoDataDriver.Open(file) as IRasterDataProvider) { datatype = dataPrd.DataType; fileSize = new Size(dataPrd.Width, dataPrd.Height); //创建AOI(基于数据的地理范围) aoiIndex = GetAOI(dataPrd.CoordEnvelope, _aoiContainer, fileSize); if (aoiIndex == null || aoiIndex.Length <= 0) { throw new ArgumentException("矢量AOI区域设置无效或范围不合法!"); } } aoilength = aoiIndex.Length; count = 0; arrayPrd = null; switch (datatype) { case enumDataType.Float: float[][] rasterbandsF = new float[1][]; { rasterbandsF[0] = GetHistArrayAOI <float>(new string[] { file }, bandNumL, fileSize.Width, fileSize.Height, datatype, aoiIndex, fillvalueL, out count); arrayPrd = new ArrayRasterDataProvider <float>("Array", rasterbandsF, aoilength, 1); } break; case enumDataType.Int16: short[][] rasterbandsS = new short[1][]; { rasterbandsS[0] = GetHistArrayAOI <short>(new string[] { file }, bandNumL, fileSize.Width, fileSize.Height, datatype, aoiIndex, fillvalueL, out count); arrayPrd = new ArrayRasterDataProvider <short>("Array", rasterbandsS, aoilength, 1); } break; case enumDataType.Byte: Byte[][] rasterbandsB = new Byte[1][]; { rasterbandsB[0] = GetHistArrayAOI <Byte>(new string[] { file }, bandNumL, fileSize.Width, fileSize.Height, datatype, aoiIndex, fillvalueL, out count); arrayPrd = new ArrayRasterDataProvider <Byte>("Array", rasterbandsB, aoilength, 1); } break; default: throw new ArgumentException("暂不支持" + datatype.ToString() + "类型的统计!"); } if (arrayPrd.Width == 0 || arrayPrd.Height == 0) { throw new ArgumentException("创建待统计数据失败!" + file); } double[] values; if (CloudParaFileStatics.ComputeMinMaxAvg(arrayPrd, datatype, new int[] { bandNumL }, null, out values, progressCallback)) { string date; GetFileTime(file, out date, out t); if (!filedate.ContainsKey(t)) { filedate.Add(t, date); } resultList.Add(new string[] { date, values[1].ToString("f2") }); if (progressCallback != null) { progressCallback(-1, Path.GetFileName(file) + "统计完成!"); } } } return(resultList); } finally { if (arrayPrd != null) { arrayPrd.Dispose(); } } }
public Dictionary <int, RasterQuickStatResult> FilesHistoStatAOI(string[] files, int[] bands, string[] fillValues, string min = null, string max = null, Action <int, string> progressCallback = null) { foreach (int b in bands) { if (!CheckFiles(files, b)) { throw new ArgumentException("输入文件错误!band" + b + "大小或类型不一致!"); } } if (StatRegionSet.UseVectorAOIRegion) { PrjEnvelope RegionEnv = StatRegionSet.AOIPrjEnvelope; _aoiContainer = StatRegionSet.AoiContainer; _VectorAOIName = StatRegionSet.AOIName; if (RegionEnv == null || RegionEnv.Height <= 0 || RegionEnv.Width <= 0) { throw new ArgumentException("矢量AOI区域设置无效或范围不合法!"); } } CoordEnvelope outerEnv = null; Size fileSize; enumDataType datatype = enumDataType.Unknow; using (IRasterDataProvider dataPrd = GeoDataDriver.Open(files[0]) as IRasterDataProvider) { datatype = dataPrd.DataType; outerEnv = dataPrd.CoordEnvelope; fileSize = new Size(dataPrd.Width, dataPrd.Height); } //创建AOI(基于数据的地理范围) int[] aoi = GetAOI(outerEnv, _aoiContainer, fileSize); if (aoi == null || aoi.Length <= 0) { throw new ArgumentException("矢量AOI区域设置无效或范围不合法!"); } if (progressCallback != null) { progressCallback(3, "开始读取波段数据..."); } int aoilength = aoi.Length; int count = 0; IRasterDataProvider arrayPrd = null; switch (datatype) { case enumDataType.Float: float[][] rasterbandsF = new float[bands.Max()][]; if (min != null && max != null) { foreach (int b in bands) { rasterbandsF[b - 1] = GetHistArrayBetweenAOI <float>(files, b, fileSize.Width, fileSize.Height, datatype, min, max, aoi, fillValues, out count); } arrayPrd = new ArrayRasterDataProvider <float>("Array", rasterbandsF, count, 1); } else { foreach (int b in bands) { rasterbandsF[b - 1] = GetHistArrayAOI <float>(files, b, fileSize.Width, fileSize.Height, datatype, aoi, fillValues, out count); } arrayPrd = new ArrayRasterDataProvider <float>("Array", rasterbandsF, aoilength, 1); } break; case enumDataType.Int16: short[][] rasterbandsS = new short[bands.Max()][]; if (min != null && max != null) { foreach (int b in bands) { rasterbandsS[b - 1] = GetHistArrayBetweenAOI <short>(files, b, fileSize.Width, fileSize.Height, datatype, min, max, aoi, fillValues, out count); } arrayPrd = new ArrayRasterDataProvider <short>("Array", rasterbandsS, count, 1); } else { foreach (int b in bands) { rasterbandsS[b - 1] = GetHistArrayAOI <short>(files, b, fileSize.Width, fileSize.Height, datatype, aoi, fillValues, out count); } arrayPrd = new ArrayRasterDataProvider <short>("Array", rasterbandsS, aoilength, 1); } break; case enumDataType.Byte: Byte[][] rasterbandsB = new Byte[bands.Max()][]; if (min != null && max != null) { foreach (int b in bands) { rasterbandsB[b - 1] = GetHistArrayBetweenAOI <Byte>(files, b, fileSize.Width, fileSize.Height, datatype, min, max, aoi, fillValues, out count); } arrayPrd = new ArrayRasterDataProvider <Byte>("Array", rasterbandsB, count, 1); } else { foreach (int b in bands) { rasterbandsB[b - 1] = GetHistArrayAOI <Byte>(files, b, fileSize.Width, fileSize.Height, datatype, aoi, fillValues, out count); } arrayPrd = new ArrayRasterDataProvider <Byte>("Array", rasterbandsB, aoilength, 1); } break; default: throw new ArgumentException("暂不支持" + datatype.ToString() + "类型的统计!"); } try { if (arrayPrd.Width == 0 || arrayPrd.Height == 0) { throw new ArgumentException("创建待统计数据失败!"); } if (progressCallback != null) { progressCallback(5, "开始统计波段数据..."); } return(DoStat(arrayPrd, bands, null, progressCallback)); } finally { if (arrayPrd != null) { arrayPrd.Dispose(); } } }