Esempio n. 1
0
        private void CreateLegendScheme(LegendType aLT, string fieldName)
        {
            if (_ifCreateLegendScheme)
            {
                double     min, max;
                ShapeTypes aST = _legendScheme.ShapeType;

                min = _legendScheme.MinValue;
                max = _legendScheme.MaxValue;
                switch (aLT)
                {
                case LegendType.SingleSymbol:
                    Color aColor = Color.Black;
                    switch (aST)
                    {
                    case ShapeTypes.Point:
                        aColor = Color.Black;
                        break;

                    case ShapeTypes.Polyline:
                    case ShapeTypes.PolylineZ:
                        aColor = Color.Black;
                        break;

                    case ShapeTypes.Polygon:
                    case ShapeTypes.Image:
                        aColor = Color.FromArgb(255, 251, 195);
                        break;
                    }
                    Single size = 0.1F;
                    if (_legendScheme.ShapeType == ShapeTypes.Point)
                    {
                        size = 5;
                    }
                    _legendScheme = LegendManage.CreateSingleSymbolLegendScheme(_legendScheme.ShapeType, aColor,
                                                                                size);

                    TSB_Add.Enabled        = false;
                    TSB_Del.Enabled        = false;
                    TSB_DelAll.Enabled     = false;
                    TSB_Down.Enabled       = false;
                    TSB_Up.Enabled         = false;
                    TSB_MakeBreaks.Enabled = false;
                    TSB_Reverse.Enabled    = false;
                    break;

                case LegendType.UniqueValue:
                    Color[]       colors;
                    List <string> valueList = new List <string>();

                    VectorLayer aLayer      = (VectorLayer)_mapLayer;
                    bool        isDateField = false;
                    Type        colType     = aLayer.AttributeTable.Table.Columns[fieldName].DataType;
                    if (colType == typeof(DateTime))
                    {
                        isDateField = true;
                    }

                    List <string> captions = new List <string>();

                    for (int i = 0; i < aLayer.AttributeTable.Table.Rows.Count; i++)
                    {
                        if (!valueList.Contains(aLayer.AttributeTable.Table.Rows[i][fieldName].ToString()))
                        {
                            valueList.Add(aLayer.AttributeTable.Table.Rows[i][fieldName].ToString());
                            if (isDateField)
                            {
                                captions.Add(((DateTime)aLayer.AttributeTable.Table.Rows[i][fieldName]).ToString("yyyy/M/d"));
                            }
                        }
                    }

                    if (valueList.Count == 1)
                    {
                        MessageBox.Show("The values of all shapes are same!", "Alarm");
                        break;
                    }

                    if (valueList.Count <= 13)
                    {
                        colors = LegendManage.CreateRainBowColors(valueList.Count);
                    }
                    else
                    {
                        colors = LegendManage.CreateRandomColors(valueList.Count);
                    }
                    List <Color> CList = new List <Color>(colors);
                    CList.Insert(0, Color.White);
                    colors = CList.ToArray();

                    if (isDateField)
                    {
                        _legendScheme = LegendManage.CreateUniqValueLegendScheme(valueList, captions, colors, aST, min,
                                                                                 max, _legendScheme.HasNoData, _legendScheme.MissingValue);
                    }
                    else
                    {
                        _legendScheme = LegendManage.CreateUniqValueLegendScheme(valueList, colors,
                                                                                 aST, min, max, _legendScheme.HasNoData, _legendScheme.MissingValue);
                    }

                    _legendScheme.FieldName = fieldName;

                    TSB_Add.Enabled        = true;
                    TSB_Del.Enabled        = true;
                    TSB_DelAll.Enabled     = true;
                    TSB_Down.Enabled       = true;
                    TSB_Up.Enabled         = true;
                    TSB_MakeBreaks.Enabled = true;
                    TSB_Reverse.Enabled    = true;
                    break;

                case LegendType.GraduatedColor:
                    aLayer = (VectorLayer)_mapLayer;
                    double[] S = new double[aLayer.AttributeTable.Table.Rows.Count];
                    for (int i = 0; i < S.Length; i++)
                    {
                        S[i] = double.Parse(aLayer.AttributeTable.Table.Rows[i][fieldName].ToString());
                    }
                    MIMath.GetMaxMinValue(S, _legendScheme.MissingValue, ref min, ref max);


                    if (min == max)
                    {
                        MessageBox.Show("The values of all shapes are same!", "Alarm");
                        break;
                    }

                    double[] CValues;
                    CValues = LegendManage.CreateContourValues(min, max);
                    colors  = LegendManage.CreateRainBowColors(CValues.Length + 1);

                    _legendScheme = LegendManage.CreateGraduatedLegendScheme(CValues, colors,
                                                                             aST, min, max, _legendScheme.HasNoData, _legendScheme.MissingValue);
                    _legendScheme.FieldName = fieldName;

                    TSB_Add.Enabled        = true;
                    TSB_Del.Enabled        = true;
                    TSB_DelAll.Enabled     = true;
                    TSB_Down.Enabled       = true;
                    TSB_Up.Enabled         = true;
                    TSB_MakeBreaks.Enabled = true;
                    TSB_Reverse.Enabled    = true;
                    break;
                }

                //ShowLegendScheme(_legendScheme);
                //DataGridView1.Refresh();
                legendView1.LegendScheme = _legendScheme;
                legendView1.Invalidate();
            }
        }