修改SampleCode 例子代码 单值专题图

来源:互联网 发布:欧莱雅男士 知乎 编辑:程序博客网 时间:2024/04/30 14:43

 

 ==============================================================

写代码过程中犯的错误:

List<Item> 没有new

checkbox1在InitializeComponent()前调用。

sampleRun中的方法在sampleRun实例化之前调用了。

 ==============================================================

Form1的c sharp:

    public partial class Form1 : Form    {        private Workspace m_workspace;        private MapControl m_mapControl;        private SampleRun m_sampleRun;                public Form1()        {                       InitializeComponent();            this.Load += new EventHandler(Form1_Load);            this.FormClosing += new FormClosingEventHandler(Form1_FormClosing);            this.checkBox1.CheckedChanged += new EventHandler(checkBox1_CheckedChanged);            this.panel2.Paint += panel2_Paint;            m_workspace = new Workspace(this.components);            m_mapControl = new MapControl();            m_mapControl.Dock = DockStyle.Fill;        }         void panel2_Paint(object sender, PaintEventArgs e)        {            if (checkBox1.Checked && m_sampleRun.listItems.Count > 0)            {                                panel3.BackColor = m_sampleRun.listItems[0].itemColor;                label1.Text = m_sampleRun.listItems[0].itemName;                panel4.BackColor = m_sampleRun.listItems[1].itemColor;                label1.Text = m_sampleRun.listItems[1].itemName;                 Panel[] arrPanel = new Panel[]{panel3,panel4,panel5,panel6,panel7,panel8,panel9,panel10,panel11,panel12,panel13};                Label[] arrLabel = new Label[] { label1, label2, label3, label4, label5, label6, label7, label8, label9, label10, label11 };                for (int i = 0; i < 11; i++)                {                    arrPanel[i].BackColor = m_sampleRun.listItems[i].itemColor;                    arrLabel[i].Text = m_sampleRun.listItems[i].itemName;                }            }                  }        private void checkBox1_CheckedChanged(object sender, EventArgs e)        {            m_sampleRun.ShowThemeLayer(checkBox1.Checked);            this.panel2.Visible = checkBox1.Checked;        }         private void Form1_FormClosing(object sender, FormClosingEventArgs e)        {            m_mapControl.Dispose();            m_workspace.Dispose();        }         private void Form1_Load(object sender, EventArgs e)        {                       m_sampleRun = new SampleRun(m_workspace, m_mapControl);            checkBox1.Checked = true;            base.Controls.Add(m_mapControl);        }    }
 
===========================
SampleRun类:
namespace uniqueDisplayTheme{    internal class SampleRun    {        private Workspace m_workspace;        private MapControl m_mapControl;        private string layerName;        public List<Item> listItems;        private ThemeUnique themeUnique;         public SampleRun(Workspace workspace, MapControl mapControl)        {            this.m_workspace = workspace;            this.m_mapControl = mapControl;            this.m_mapControl.Map.Workspace = m_workspace;            this.listItems = new List<Item>();            Initialize();          }         private void Initialize()        {             WorkspaceConnectionInfo conInfo = new WorkspaceConnectionInfo(@"D:\souce\supermap\SampleData\ThematicMaps\Thematicmaps.smwu");                m_workspace.Open(conInfo);            m_mapControl.Map.Open(m_workspace.Maps[0]);             Dataset dataset = m_workspace.Datasources[0].Datasets["Landuse_R"];            //地图上加图层            m_mapControl.Map.Layers.Add(dataset, true);             m_mapControl.Action = Action.Pan;             for (int i = 0; i < m_mapControl.Map.Layers.Count; i++)            {                Layer layer = m_mapControl.Map.Layers[i];                layer.IsSelectable = true;            }             m_mapControl.Map.ViewEntire();        }         public void ShowThemeLayer(bool isShow)        {            m_mapControl.Map.Layers.Remove(layerName);            if (isShow)            {                DatasetVector datasetVector = m_workspace.Datasources[0].Datasets["Landuse_R"as DatasetVector;                 //创建专题图                themeUnique = new ThemeUnique();                themeUnique.UniqueExpression = "LandType";                //把单值专题图子项添加到单值专题图类中                CreateThemeItem(Color.FromArgb(206, 101, 156), "城市");                CreateThemeItem(Color.FromArgb(181, 178, 181), "旱地");                CreateThemeItem(Color.FromArgb(255, 255, 155), "水浇地");                CreateThemeItem(Color.FromArgb(254, 175, 136), "水田");                CreateThemeItem(Color.FromArgb(115, 77, 0), "沙漠");                CreateThemeItem(Color.FromArgb(173, 170, 0), "沼泽");                CreateThemeItem(Color.FromArgb(151, 219, 242), "湖泊水库");                CreateThemeItem(Color.FromArgb(90, 138, 66), "灌丛");                CreateThemeItem(Color.FromArgb(0, 113, 74), "用材林");                CreateThemeItem(Color.FromArgb(0, 170, 132), "经济林");                CreateThemeItem(Color.FromArgb(90, 179, 40), "草地");                 Layer layer = m_mapControl.Map.Layers.Add(datasetVector, themeUnique, true);                layerName = layer.Name;                //StringBuilder strbuild = new StringBuilder();                //foreach (Layer layer1 in m_mapControl.Map.Layers)                //{                //    strbuild.Append(layer1.Name + ",");                //}                //System.Windows.Forms.MessageBox.Show(strbuild.ToString());            }            m_mapControl.Map.Refresh();        }        /// <summary>        /// 创建单值专题图子项,并添加到单值专题图类中        /// </summary>        /// <param name="itemcolor"></param>        /// <param name="itemname"></param>        public void CreateThemeItem(Color itemcolor, string itemname)        {            GeoStyle geostyle = new GeoStyle();            geostyle.FillForeColor = itemcolor;            geostyle.FillOpaqueRate = 80;            geostyle.LineSymbolID = 5;             ThemeUniqueItem themeItem = new ThemeUniqueItem();            themeItem.Caption = itemname;            themeItem.Style = geostyle;            themeItem.IsVisible = true;            themeItem.Unique = itemname;            Item item = new Item(itemname, itemcolor);//创建 名字+颜色的对象            listItems.Add(item);            themeUnique.Add(themeItem);        }    }    /// <summary>    /// 构造一个类,用于存放单值专题图索引记录名 和 颜色    /// </summary>    class Item    {        private string name;        private Color color;        public string itemName        {            get { return name; }        }        public Color itemColor        {            get { return color; }        }         public Item(string name, Color color)        {            this.name = name;            this.color = color;        }    }}
原创粉丝点击