东华理工GIS二次开发实验报告新.docx
- 文档编号:24817435
- 上传时间:2023-06-01
- 格式:DOCX
- 页数:52
- 大小:1.27MB
东华理工GIS二次开发实验报告新.docx
《东华理工GIS二次开发实验报告新.docx》由会员分享,可在线阅读,更多相关《东华理工GIS二次开发实验报告新.docx(52页珍藏版)》请在冰豆网上搜索。
东华理工GIS二次开发实验报告新
东华理工GIS二次开发实验报告(新)
1系统特色
系统特色:
1、人性化界面,大标签UI。
2、DotNetBar控件同ArcGis控件结合,提升系统的整体美观程度。
3、一体化仿Office主题设计,色调和谐。
4、多标签模式,支持同时打开多个文档。
5、属性设置方便直观。
6、图层窗、鹰眼窗、属性表窗支持任意拖动调整位置与停靠。
2DotNetBar介绍
DotNetBar是一组用于.NETFramework环境下的一组组件集,利用该组件集能够打造绚丽并且实用的应用程序界面,给开发人员提供极大的便利。
由于DotNetBar2内容极为丰富,因此先在工具箱中“添加选项卡”(DotNetBar2),然后在此选项卡下“选择项”,浏览DevComponents.DotNetBar2.dll文件,显示如下:
3文件打开实现
●单击“文件”按钮,会弹出“打开”和“关闭”选项,代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
private void OpenMXD_Click(object sender, EventArgs e)//“打开MXD文件”按钮
{
OpenFileDialog ofDialog = new OpenFileDialog();
ofDialog.Title = "输入ArcMap文档名称";
ofDialog.Filter = "ArcView MXD文件|*.mxd";
ofDialog.Multiselect = false;
if (ofDialog.ShowDialog() == DialogResult.OK)
openFile(ofDialog.FileName, false);
}
private void Openshape_Click(object sender, EventArgs e)//“打开shape文件”按钮
{
IWorkspaceFactory shpFactory = new ShapefileWorkspaceFactoryClass();
OpenFileDialog ofDialog = new OpenFileDialog();
ofDialog.Title = "输入ArcMap文档名称";
ofDialog.Filter = "ArcView Shape文件|*.shp";
ofDialog.Multiselect = false;
if (ofDialog.ShowDialog() == DialogResult.OK)
{
string fileName = ofDialog.FileName;
string filePath = fileName.Substring(0, fileName.LastIndexOf('\\'));
IWorkspace shpWorkspace = shpFactory.OpenFromFile(filePath, 0);
IFeatureLayer ftlayer = new FeatureLayerClass();
IEnumDataset ds = shpWorkspace.get_Datasets(esriDatasetType.esriDTFeatureClass);
IDataset featureClass = ds.Next();
ftlayer.FeatureClass = (IFeatureClass)featureClass;
ftlayer.Name = fileName;
ILayer layer = ftlayer as ILayer;
IMap mmap = sizelist[(int)superTabControl.SelectedTab.Tag].Map;
mmap.AddLayer(layer);
IActiveView act = mmap as IActiveView;
act.Refresh();
}
}
●执行“打开文档”命令,代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
public void openFile(string fileName, bool isRecentFile)//打开文档
{
ribbonTabItem2.Enabled = false;
ribbonTabItem1.Enabled = true;
m_ipPathFinder = null;
if (!
isRecentFile)//如果不是从“最近打开”处打开的则记录该文档名
writeRecentFile(fileName);
if (switch1)//当不是空文档时
{
switch2 = false;
//新建一个文档标签为去地址文件名的标签
SuperTabItem tabItem =
superTabControl.CreateTab(System.IO.Path.GetFileNameWithoutExtension(fileName));
AxMapControl newaxmap = new AxMapControl();
sizelist.Add(newaxmap);
newaxmap.SendToBack();
newaxmap.Dock = DockStyle.Fill;
tabItem.AttachedControl.Controls.Add(newaxmap);
superTabControl.SelectNextTab();
superTabControl.SelectedTab.Tag = n++;
newaxmap.LoadMxFile(fileName);
axTOCClayer.SetBuddyControl(newaxmap);
superTabControl.SelectNextTab();
newaxmap.OnMouseMove +=
new IMapControlEvents2_Ax_OnMouseMoveEventHandler(axMapControlOnMouseMove);
switch2 = true;
newaxmap.OnMouseDown +=
new IMapControlEvents2_Ax_OnMouseDownEventHandler(axMapControlOnMouseDown);
}
else//否则直接载入
{
superTabControl.SelectedTab.Text =
System.IO.Path.GetFileNameWithoutExtension(fileName);
sizelist[(int)superTabControl.SelectedTab.Tag].LoadMxFile(fileName);
switch1 = true;
}
anotherrefresh();//刷新标签
switch2 = true;
bar4.Show();//鹰眼框,图层框可用
bar5.Show();
bar5.AutoHide = true;
axMapEagleEye.Extent = axMapEagleEye.FullExtent;
axMapEagleEye.ActiveView.Refresh();
//读取刚载入的地图的图层和字段信息
getLayerInfo(sizelist[(int)superTabControl.SelectedTab.Tag]);
getAttributeInfo(sizelist[(int)superTabControl.SelectedTab.Tag]);
}
●本系统支持快速打开最近曾经打开过的文档,代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
public void writeRecentFile(string filename)//写入“最近文档”的记录文件
{
try
{
StreamWriter s = new StreamWriter("\\Menu.ini", true);
s.WriteLine(filename);
s.Flush();
s.Close();
}
catch { }
}
public void readRecentFile()//读取最近打开的文档
{
itemContainer4.SubItems.Clear();
try
{
StreamReader sr = new StreamReader("\\Menu.ini");
while (sr.Peek() >= 0)
{
ButtonItem recentFile = new ButtonItem();
recentFile.Tag = sr.ReadLine();
recentFile.Text = "&" + System.IO.Path.GetFileNameWithoutExtension((string)recentFile.Tag);
recentFile.Click += new EventHandler(openRecentFile);
itemContainer4.SubItems.Add(recentFile);
}
}
catch { }
}
public void openRecentFile(object sender, EventArgs e)//打开最近打开的文档
{
ButtonItem tempButton = (ButtonItem)sender;
openFile((string)tempButton.Tag, true);
}
●清除“最近打开栏”中的记录,代码如下:
1
2
3
4
5
6
7
8
private void clearRecentFile_Click(object sender, EventArgs e)//清除“最近打开”
{
itemContainer4.SubItems.Clear();
System.IO.FileStream stream = File.Open("\\Menu.ini", FileMode.OpenOrCreate, FileAccess.Write);
stream.Seek(0, SeekOrigin.Begin);
stream.SetLength(0);
stream.Close();
}
●当当前标签没有加载地图时,初始化一个空文档,代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
private void FormWithNoDocument()//初始化一个空文档
{
ribbonTabItem1.Enabled = false;//空文档下不能进行图层选择操作
ribbonTabItem2.Enabled = false;
bar5.Hide();//鹰眼框,图层框,属性表框都隐藏
superTabControl.CreateTab("空文档");//创建标签为“空文档”的标签
superTabControl.SelectedTab.Tag = n++;
bar4.Hide();
bar3.Hide();
AxMapControl newaxmap = new AxMapControl();//动态创建一个axmapcontrol
newaxmap.BeginInit();
newaxmap.SendToBack();
newaxmap.Dock = DockStyle.Fill;
sizelist.Add(newaxmap);
superTabControl.SelectedTab.AttachedControl.Controls.Add(newaxmap);//将其加入该标签
newaxmap.OnExtentUpdated +=
new IMapControlEvents2_Ax_OnExtentUpdatedEventHandler(axMapControlOnExtentUpdated);
newaxmap.OnMouseMove +=
new IMapControlEvents2_Ax_OnMouseMoveEventHandler(axMapControlOnMouseMove);
newaxmap.OnMouseDown +=
new IMapControlEvents2_Ax_OnMouseDownEventHandler(axMapControlOnMouseDown);
newaxmap.EndInit();
axTOCClayer.SetBuddyControl(newaxmap);//设置为关联组件
BTNattribute1.SubItems.Clear();//初始化所有图层、字段选择框
BTNlayer1.SubItems.Clear();
buttonItem4.SubItems.Clear();
buttonItem7.SubItems.Clear();
}
单击文件按钮,弹出菜单
4多标签切换实现
●相应“关闭标签”事件,代码如下:
1
2
3
4
5
6
7
8
9
private void superTabControl1_TabItemClose(object sender, SuperTabStripTabItemCloseEventArgs e)
{
if (superTabControl.Tabs.Count == 1)//如果只剩下唯一一个t标签(一定是“空文档”标签)
{
switch2 = false;
switch1 = false;
FormWithNoDocument();
}
}
●相应“标签切换”事件,代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
//当不是空文档时切换的文档标签切换事件
private void superTabControl_SelectedTabChanged
(object sender, SuperTabStripSelectedTabChangedEventArgs e)
{
if (switch2)
{
m_ipPathFinder = null;
axMapEagleEye.LoadMxFile
(sizelist[(int)superTabControl.SelectedTab.Tag].DocumentFilename);//加载该文档
axMapEagleEye.Extent = axMapEagleEye.FullExtent;
axMapEagleEye.ActiveView.Refresh();
axTOCClayer.SetBuddyControl
(sizelist[(int)superTabControl.SelectedTab.Tag]);//重新设置关联组件
axTOCClayer.ActiveView.Refresh();
nowSelectedLayer = 0;//初始化选择的图层
getLayerInfo(sizelist[(int)superTabControl.SelectedTab.Tag]);//重新读取该文档的信息
getAttributeInfo(sizelist[(int)superTabControl.SelectedTab.Tag]);
}
}
private void anotherrefresh()//当是空文档时切换的文档标签切换事件
{
m_ipPathFinder = null;
axMapEagleEye.LoadMxFile
(sizelist[(int)superTabControl.SelectedTab.Tag].DocumentFilename);
axMapEagleEye.Extent = axMapEagleEye.FullExtent;
axMapEagleEye.ActiveView.Refresh();
axTOCClayer.SetBuddyControl
(sizelist[(int)superTabControl.SelectedTab.Tag]);
axTOCClayer.ActiveView.Refresh();
nowSelectedLayer = 0;
getLayerInfo(sizelist[(int)superTabControl.SelectedTab.Tag]);
getAttributeInfo(sizelist[(int)superTabControl.SelectedTab.Tag]);
}
5属性表实现
●相应右键菜单“查看属性表”,代码如下:
1
2
3
4
5
6
7
8
9
private void 查看属性表ToolStripMenuItem_Click(object sender, EventArgs e)
{
if (!
barisshow)
{
shuxingbiao();
barisshow = true;//表示属性表已打开
查看属性表ToolStripMenuItem.Enabled = false;
}
}
●相应ArcGis图层列表单击事件,代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
ILayer m_Layer;//记录图层,提供给数据窗
private void axTOCControlOnMouseDown(object sender, ITOCControlEvents_OnMouseDownEvent e)//右键菜单
{
AxTOCControl axt1 = (AxTOCControl)sender;
esriTOCControlItem Item = esriTOCControlItem.esriTOCControlItemNone;
IBasicMap pBasicMap = null;
ILayer pLayer = null;
object other = null;
object index = null;
//根据点击位置实现赋值
axt1.HitTest(e.x, e.y, ref Item, ref pBasicMap, ref pLayer, ref other, ref index);
m_Layer = pLayer;
if (Item == esriTOCControlItem.esriTOCControlItemLayer
|| Item == esriTOCControlItem.esriTOCControlItemLegendClass)//如果点击的地方是图层名或者图例
{
if (e.button == 2)//显示右键菜单,并定义其相对控件的位置,正好在鼠标出显示
contextMenuStrip1.Show(axt1, new System.Drawing.Point(e.x, e.y));
else if (barisshow)//若已打开属性表框则左键点击直接显示其属性
shuxingbiao();
}
}
●显示属性表,代码如下:
1
2
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 东华 理工 GIS 二次开发 实验 报告