![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIyZwpmLxczM38VM3EjN2EzM1MTMvw1Nx8CXxEjMxAjMvw1ckF2bsBXdvwFdl5mLuR2cj5Set1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)
==============================================================
写代码过程中犯的错误:
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;
}
}
}