现在的位置: 首页 > 综合 > 正文

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

2012年08月23日 ⁄ 综合 ⁄ 共 6656字 ⁄ 字号 评论关闭

 

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

写代码过程中犯的错误:

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;
        }
    }
}

抱歉!评论已关闭.