Esempio n. 1
0
        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);
            }
        }