private void btnCategoryGenerate_Click(object sender, EventArgs e) { int count = Convert.ToInt32(udNumCategories.Value); MapWinGIS.ShapefileCategories categories = _shapefile.Categories; if (lstFields1.SelectedItem == null) { return; } string name = lstFields1.SelectedItem.ToString().ToLower().Trim(); int index = -1; for (int i = 0; i < _shapefile.NumFields; i++) { if (_shapefile.get_Field(i).Name.ToLower() == name) { index = i; break; } } if (index == -1) { return; } MapWinGIS.tkClassificationType classification = chkUniqueValues.Checked ? tkClassificationType.ctUniqueValues : tkClassificationType.ctNaturalBreaks; bool showWaiting = false; if (classification == tkClassificationType.ctUniqueValues) { HashSet <object> set = new HashSet <object>(); for (int i = 0; i < _shapefile.NumShapes; i++) { object val = _shapefile.get_CellValue(index, i); set.Add(val); } if (set.Count > 300) { showWaiting = true; string s = string.Format("字段 = {1}.\n唯一值数量 = {0}.\n" + "需要加载较长时间.\n是否继续?", set.Count, "[" + name.ToUpper() + "]"); if (MessageBox.Show(s, "MapWinGisDemo", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No) { return; } } set.Clear(); } if (showWaiting) { this.Enabled = false; this.Cursor = Cursors.WaitCursor; } else { btnCategoryGenerate.Enabled = false; } // 生成目录 categories.Generate(index, classification, count); categories.Caption = "Categories: " + _shapefile.get_Field(index).Name; ApplyColorScheme2Categories(); if (chkUseVariableSize.Checked) { ApplyVariablePointSize(); } _shapefile.Categories.ApplyExpressions(); RefreshCategoriesList(); RedrawMap(); // 保存设置 _settings.CategoriesClassification = classification; _settings.CategoriesFieldName = name; _settings.CategoriesSizeRange = (int)(udMaxSize.Value - udMinSize.Value); _settings.CategoriesCount = (int)udNumCategories.Value; _settings.CategoriesRandomColors = chkRandomColors.Checked; _settings.CategoriesUseGradient = chkSetGradient.Checked; _settings.CategoriesVariableSize = chkUseVariableSize.Checked; if (showWaiting) { this.Enabled = true; this.Cursor = Cursors.Default; } else { btnCategoryGenerate.Enabled = true; } RefreshControlsState(null, null); MarkStateChanged(); }
/// <summary> /// Generates shapefile categories according to specified options /// </summary> private void btnOk_Click(object sender, EventArgs e) { if (cboField.SelectedIndex < 0) { Globals.MessageBoxInformation("No field for generation was selected."); this.DialogResult = DialogResult.None; return; } int count; if (!Int32.TryParse(cboCategoriesCount.Text, out count)) { Globals.MessageBoxError("Number of categories isn't a valid interger."); return; } MapWinGIS.ShapefileCategories categories = _shapefile.Categories; int index = ((ComboItem)cboField.SelectedItem).RealIndex; categories.Generate(index, (MapWinGIS.tkClassificationType)cboClassificationType.SelectedIndex, count); categories.Caption = "Categories: " + _shapefile.get_Field(index).Name; if (chkUseVariableSize.Checked) { if (_shapefile.ShapefileType == ShpfileType.SHP_POINT || _shapefile.ShapefileType == ShpfileType.SHP_MULTIPOINT) { double step = (double)(udMaxSize.Value - udMinSize.Value) / ((double)categories.Count - 1); for (int i = 0; i < categories.Count; i++) { categories.get_Item(i).DrawingOptions.PointSize = (int)udMinSize.Value + Convert.ToInt32(i * step); } } else if (_shapefile.ShapefileType == ShpfileType.SHP_POLYLINE) { double step = (double)(udMaxSize.Value + udMinSize.Value) / (double)categories.Count; for (int i = 0; i < categories.Count; i++) { categories.get_Item(i).DrawingOptions.LineWidth = (int)udMinSize.Value + Convert.ToInt32(i * step); } } } MapWinGIS.ColorScheme scheme = null; if (icbColorScheme.SelectedIndex >= 0) { ColorBlend blend = (ColorBlend)icbColorScheme.ColorSchemes.List[icbColorScheme.SelectedIndex]; scheme = ColorSchemes.ColorBlend2ColorScheme(blend); } tkColorSchemeType type = chkRandomColors.Checked ? tkColorSchemeType.ctSchemeRandom : tkColorSchemeType.ctSchemeGraduated; _shapefile.Categories.ApplyColorScheme(type, scheme); if (chkSetGradient.Checked) { for (int i = 0; i < categories.Count; i++) { ShapeDrawingOptions options = categories.get_Item(i).DrawingOptions; options.SetGradientFill(options.FillColor, 75); options.FillType = tkFillType.ftGradient; } } _shapefile.Categories.ApplyExpressions(); SaveSettings(); }