private void CoverageSetup_Load(object sender, EventArgs e) { var pc = viewModel.Value.ProjectController; _SelectedCoverage = viewModel.Value.Coverage; var pcks = pc.Project.Model.GetPackages(); int layer_count = pc.Project.Model.Grid.ActualLayerCount; int[] grid_layers = new int[layer_count]; var cov_pcks = new List <IPackage>(); var buf = from layer in pc.MapAppManager.Map.Layers select new MapLayerDescriptor { LegendText = layer.LegendText, DataSet = layer.DataSet }; var map_layers = buf.ToList(); labelStatus.Text = "Ready"; for (int i = 0; i < layer_count; i++) { grid_layers[i] = i + 1; } foreach (var pck in pcks) { var atr = pck.GetType().GetCustomAttributes(typeof(CoverageItem), false); if (atr.Length == 1) { cov_pcks.Add(pck); } } cmbGridLayer.SelectedIndexChanged -= cmbGridLayer_SelectedIndexChanged; cmbMapLayers.SelectedIndexChanged -= cmbMapLayers_SelectedIndexChanged; cmbMapLayers.DataSource = map_layers; cmbGridLayer.DataSource = grid_layers; cmbPackages.DataSource = cov_pcks; chbProp.Items.Clear(); if (_SelectedCoverage != null) { tbCoverageName.Text = _SelectedCoverage.LegendText; _SelectedCoverage.LoadLookTable(); dataGridEx1.Bind(_SelectedCoverage.LookupTable); //restore cmbMapLayers for (int i = 0; i < map_layers.Count; i++) { string fn = map_layers[i].DataSet.Filename; if (DirectoryHelper.IsRelativePath(fn)) { fn = Path.Combine(pc.Project.AbsolutePathToProjectFile, fn); } if (DirectoryHelper.Compare(fn, _SelectedCoverage.FullCoverageFileName)) { cmbMapLayers.SelectedIndex = i; var layer = map_layers[i]; if (layer.DataSet is FeatureSet) { var fs = layer.DataSet as FeatureSet; var fields = (from DataColumn dc in fs.DataTable.Columns select dc.ColumnName).ToList(); cmbFields.DataSource = fields; cmbFields.SelectedIndex = fields.IndexOf(_SelectedCoverage.FieldName); } else { cmbFields.DataSource = new string [] { "Raster Value" }; cmbFields.SelectedIndex = 0; } break; } } for (int i = 0; i < cov_pcks.Count; i++) { if (cov_pcks[i].Name == _SelectedCoverage.PackageName) { cmbPackages.SelectedIndex = i; break; } } } if (_SelectedCoverage != null) { cmbGridLayer.SelectedIndex = _SelectedCoverage.GridLayer; tbCoverageName.ReadOnly = true; btnCreateLookupTable.Enabled = false; } else { tbCoverageName.Text = "new_coverage"; cmbGridLayer.SelectedIndex = 0; dataGridEx1.ClearContent(); tbCoverageName.ReadOnly = false; btnCreateLookupTable.Enabled = true; //cmbGridLayer.Enabled = true; //cmbFields.Enabled = true; //cmbGridLayer.Enabled = true; //cmbPackages.Enabled = true; //chbProp.Enabled = true; } cmbMapLayers.SelectedIndexChanged += cmbMapLayers_SelectedIndexChanged; cmbGridLayer.SelectedIndexChanged += cmbGridLayer_SelectedIndexChanged; }
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); } }
private void btnCreateLookupTable_Click(object sender, EventArgs e) { try { var pc = viewModel.Value.ProjectController; if (_SelectedPackage == null) { MessageBox.Show("No package selected.", "Selection", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } if (chbProp.CheckedItems.Count == 0) { MessageBox.Show("No areal properties selected. Please select at least one.", "Selection", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } if (cmbMapLayers.SelectedItem == null) { MessageBox.Show("A map layer must be selected", "Layer Selection", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } if (cmbFields.SelectedItem == null) { MessageBox.Show("A field must be selected", "Field Selection", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } if (TypeConverterEx.IsNull(tbCoverageName.Text)) { MessageBox.Show("Coverage name can not be null ", "Coverage Name", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } else { if (pc.Project.ContainsCoverage(tbCoverageName.Text)) { MessageBox.Show("The coverage name you entered exists, please input anothr one", "Coverage Name", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } } var layer = cmbMapLayers.SelectedItem as MapLayerDescriptor; if (_SelectedCoverage != null) { if (MessageBox.Show("Lookup table existed. Do you really want to create a new lookup table?", "Layer Selection", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == System.Windows.Forms.DialogResult.Yes) { _SelectedCoverage.ArealProperties = chbProp.CheckedItems.Cast <ArealPropertyInfo>().ToList(); _SelectedCoverage.LegendText = tbCoverageName.Text; _SelectedCoverage.Package = _SelectedPackage; _SelectedCoverage.Source = layer.DataSet; _SelectedCoverage.GridLayer = cmbGridLayer.SelectedIndex; _SelectedCoverage.FieldName = cmbFields.SelectedItem.ToString(); _SelectedCoverage.CoverageFilePath = layer.DataSet.Filename; _SelectedCoverage.InitLookupTable(); _SelectedCoverage.SaveLookupTable(); dataGridEx1.Bind(_SelectedCoverage.LookupTable); } } else { if (layer.DataSet is IFeatureSet) { _SelectedCoverage = new FeatureCoverage() { LegendText = tbCoverageName.Text, ID = DirectoryHelper.GetUniqueString(), ArealProperties = chbProp.CheckedItems.Cast <ArealPropertyInfo>().ToList(), PackageName = _SelectedPackage.Name, Package = _SelectedPackage, Source = layer.DataSet, GridLayer = cmbGridLayer.SelectedIndex, CoverageFilePath = layer.DataSet.Filename, FieldName = cmbFields.SelectedItem.ToString() }; _SelectedCoverage.LookupTableFilePath = string.Format(".\\Processing\\fea_{0}_{1}.map", _SelectedCoverage.PackageName, _SelectedCoverage.ID); _SelectedCoverage.InitLookupTable(); _SelectedCoverage.SaveLookupTable(); dataGridEx1.Bind(_SelectedCoverage.LookupTable); pc.Project.FeatureCoverages.Add(_SelectedCoverage as FeatureCoverage); } else { _SelectedCoverage = new RasterCoverage() { LegendText = tbCoverageName.Text, ID = DirectoryHelper.GetUniqueString(), ArealProperties = chbProp.CheckedItems.Cast <ArealPropertyInfo>().ToList(), PackageName = _SelectedPackage.Name, Package = _SelectedPackage, Source = layer.DataSet as IRaster, GridLayer = cmbGridLayer.SelectedIndex, CoverageFilePath = layer.DataSet.Filename, FieldName = cmbFields.SelectedItem.ToString() }; _SelectedCoverage.LookupTableFilePath = string.Format(".\\Processing\\fea_{0}_{1}.map", _SelectedCoverage.PackageName, _SelectedCoverage.ID); _SelectedCoverage.InitLookupTable(); _SelectedCoverage.SaveLookupTable(); dataGridEx1.Bind(_SelectedCoverage.LookupTable); pc.Project.RasterLayerCoverages.Add(_SelectedCoverage as RasterCoverage); } } } catch { MessageBox.Show("Failed to creat lookup table", "Creation", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } }