public void InitLookupTable() { NewLookupTable(); _RowIndex.Clear(); if (Source is FeatureSet) { var dt = (Source as FeatureSet).DataTable; for (int i = 0; i < dt.Rows.Count; i++) { string id = dt.Rows[i][FieldName].ToString(); var dr = LookupTable.NewRow(); dr[_ID_COL_NAME] = id; foreach (var ap in ArealProperties) { dr[ap.AliasName] = ap.DefaultValue.ToString(); } _RowIndex.Add(id, i); LookupTable.Rows.Add(dr); } } else { bool outov = false; var uval = RasterEx.GetUniqueValues(Source as IRaster, 100, out outov); var uid = from uu in uval select uu.ToString(); for (int i = 0; i < uval.Count; i++) { var dr = LookupTable.NewRow(); var id = uval.ElementAt(i).ToString(); dr[_ID_COL_NAME] = id; foreach (var ap in ArealProperties) { dr[ap.AliasName] = ap.DefaultValue.ToString(); } _RowIndex.Add(id, i); LookupTable.Rows.Add(dr); } } }
private DataTable Derieve(PackageCoverage coverage) { if (coverage is FeatureCoverage) { var lm = coverage as FeatureCoverage; var dt = (lm.Source as FeatureSet).DataTable; List <DataColumn> new_dcs = new List <DataColumn>(); foreach (var ap in lm.ArealProperties) { if (!dt.Columns.Contains(ap.PropertyName)) { DataColumn dc = new DataColumn(ap.PropertyName, Type.GetType(ap.TypeName)); dt.Columns.Add(dc); dc.DefaultValue = ap.DefaultValue; new_dcs.Add(dc); } } if (!dt.Columns.Contains("ID")) { DataColumn dc = new DataColumn("ID", Type.GetType("System.Int32")); dt.Columns.Add(dc); for (int i = 0; i < dt.Rows.Count; i++) { dt.Rows[i]["ID"] = i + 1; } } if (new_dcs.Count > 0) { foreach (DataRow dr in dt.Rows) { foreach (var dc in new_dcs) { dr[dc.ColumnName] = dc.DefaultValue; } } } //lm.Source.Save(); return(dt); } else { bool outov = false; var raster = coverage as RasterCoverage; bool require_newfile = true; DataTable dt = null; if (File.Exists(raster.FullLookupTableFileName)) { LookupTable <double> mt = new LookupTable <double>(); mt.FromTextFile(raster.FullLookupTableFileName); dt = mt.ToDataTable(); require_newfile = false; foreach (var ap in raster.ArealProperties) { var buf = mt.ColNames.Where(p => p == ap.PropertyName); if (buf.Count() == 0) { require_newfile = true; break; } } if (!require_newfile) { //raster.Converter = mt; } } if (require_newfile) { var para_names = from pr in raster.ArealProperties select pr.PropertyName; var uval = RasterEx.GetUniqueValues(raster.Source as IRaster, 100, out outov); var uid = from uu in uval select uu.ToString(); var default_values = from pr in raster.ArealProperties select double.Parse(pr.DefaultValue.ToString()); var mapping = new LookupTable <double>(para_names.ToArray(), uid.ToArray(), default_values.ToArray()); mapping.Save(raster.FullLookupTableFileName); dt = mapping.ToDataTable(); //raster.Converter = mapping; } return(dt); } }