东华理工GIS二次开发实验报告新.docx

上传人:b****2 文档编号:11615982 上传时间:2023-06-01 格式:DOCX 页数:52 大小:1.27MB
下载 相关 举报
东华理工GIS二次开发实验报告新.docx_第1页
第1页 / 共52页
东华理工GIS二次开发实验报告新.docx_第2页
第2页 / 共52页
东华理工GIS二次开发实验报告新.docx_第3页
第3页 / 共52页
东华理工GIS二次开发实验报告新.docx_第4页
第4页 / 共52页
东华理工GIS二次开发实验报告新.docx_第5页
第5页 / 共52页
东华理工GIS二次开发实验报告新.docx_第6页
第6页 / 共52页
东华理工GIS二次开发实验报告新.docx_第7页
第7页 / 共52页
东华理工GIS二次开发实验报告新.docx_第8页
第8页 / 共52页
东华理工GIS二次开发实验报告新.docx_第9页
第9页 / 共52页
东华理工GIS二次开发实验报告新.docx_第10页
第10页 / 共52页
东华理工GIS二次开发实验报告新.docx_第11页
第11页 / 共52页
东华理工GIS二次开发实验报告新.docx_第12页
第12页 / 共52页
东华理工GIS二次开发实验报告新.docx_第13页
第13页 / 共52页
东华理工GIS二次开发实验报告新.docx_第14页
第14页 / 共52页
东华理工GIS二次开发实验报告新.docx_第15页
第15页 / 共52页
东华理工GIS二次开发实验报告新.docx_第16页
第16页 / 共52页
东华理工GIS二次开发实验报告新.docx_第17页
第17页 / 共52页
东华理工GIS二次开发实验报告新.docx_第18页
第18页 / 共52页
东华理工GIS二次开发实验报告新.docx_第19页
第19页 / 共52页
东华理工GIS二次开发实验报告新.docx_第20页
第20页 / 共52页
亲,该文档总共52页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

东华理工GIS二次开发实验报告新.docx

《东华理工GIS二次开发实验报告新.docx》由会员分享,可在线阅读,更多相关《东华理工GIS二次开发实验报告新.docx(52页珍藏版)》请在冰点文库上搜索。

东华理工GIS二次开发实验报告新.docx

东华理工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

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 人文社科 > 法律资料

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2