ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

基于C#的ArcEngine实现点击地图要素展示个性化介绍窗口

2021-05-06 19:31:59  阅读:313  来源: 互联网

标签:要素 string C# bname name pFeature intro 个性化 ArcEngine


一、简介

这篇博文实现的功能是,在地图上选择一个要素,然后弹出它对应的信息窗口。比如我的实习主题是武汉大学内的历史建筑,我可以选择宋卿体育馆,像这样。
在这里插入图片描述
然后点击“建筑介绍”,接着软件就会弹出像下面这样的窗口。
在这里插入图片描述

二、实现介绍

2.1 要素的选择

        private void 要素选择ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            this.axMapControl1.CurrentTool = null;
            //Tool的定义和初始化
            ControlsSelectFeaturesToolClass pTool = new ESRI.ArcGIS.Controls.ControlsSelectFeaturesToolClass();
            //Tool通过ICommand与MapControl的关联
            pTool.OnCreate(this.axMapControl1.Object);
            //MapControl的当前工具设定为tool 
            this.axMapControl1.CurrentTool = pTool as ITool; 
        }

但是实现上面这个方法之后,你会惊讶地发现自己就仅仅是在地图上勾了一个要素而已,就是高亮了个好看!做到这里你可以给房地产开发商高亮标记告诉他们你要投资这里,这里是哪里不知道,总之一定要投。

2.2 已选要素的获取

你现在有了一块地,可是不知道它叫什么名字,没有控制权,除了钱和拿下它的决心你一无所有,OK,下面我来介绍怎么获取它的信息。

//获得已选要素的feature对象(注意,是可以多选的,已选要素全部会存在pEnumFeature里面,可以一直Next()直到没有下一位)

  IMap map = axMapControl1.Map;
            ISelection selection = map.FeatureSelection;
            IEnumFeatureSetup iEnumFeatureSetup = (IEnumFeatureSetup)selection;
            iEnumFeatureSetup.AllFields = true;
            IEnumFeature pEnumFeature = (IEnumFeature)iEnumFeatureSetup;
            pEnumFeature.Reset();
            IFeature pFeature = pEnumFeature.Next();
            
            //如果你拿到的第一个要素很奇怪,也许会需要下面这条
            //pFeature = pEnumFeature.Next(); 

现在拿到了这个pFeature对象,你就拿到了房产证,可以查看feature的属性了。

2.3 要素和相应介绍信息的绑定

动态加载介绍窗口的关键是需要一个ID(标识符)把你预先存储的介绍信息(包括图片)和选择的地图要素绑定起来,我用的建筑的名字。

//获取你需要的字段的值,2是索引号,请根据自己的数据修改
String name = pFeature.get_Value(2).ToString();

然后你需要拿着feature和name去实例化一个介绍窗口。

2.4 介绍窗口类

新建一个Windows窗体类FormIntro;
自己根据显示需求画好Form的模板。
我的是这样:
在这里插入图片描述

添加两个成员变量和一个字典变量(把name作为键,介绍的文本作为值,实现文本调取)

//窗体类的变量
public IFeature pfeature;
public string bname;
Dictionary<string, string> dict = new Dictionary<string, string>();

下面是调取相关信息显示到窗口上的方法:

        public void showDetails(string bname)
        {
            string intro = getInfo(bname);
            string pic = @"自己的路径"+bname+".jpg";
            //设置文本信息
            label1.Text= bname;
            label2.Text = arrlist[1].ToString();
            //设置图片适应pictureBox的大小
            pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;
            //设置图片
            pictureBox1.Image = Image.FromFile(pic);

        }
        
        //这个函数很简单也可以不写。但是当你需要调取的字段有很多的话,就需要考虑看上去比较聪明的写法^^
	    public string getInfo(String bname)
        {
            string intro=dict[bname];
            return intro;
        }

最后,只需要在点击查询按钮之后的响应代码里调用这个showDetails方法来设置窗口信息,并且让窗口Show()就好了;

		    FormIntro intro = new FormIntro();
            while(pFeature != null)
            {                             
                string name = null;
                try
                {
                    name = pFeature.get_Value(2).ToString();
                }
                catch (NullReferenceException)
                {
                    MessageBox.Show("didn't get buildingname");   
                }
                finally
                {
                }
                pFeature = pEnumFeature.Next(); 
                intro.showDetails(name);
                intro.Show();                              
            }
        }

至此,你就可以给网友们在线展示一下你的校园了。(雾)
在这里插入图片描述
在这里插入图片描述

三、参考资料和slogan

这个功能的实现也获得了不少互联网的帮助,你也许需要一些扩展知识:

[1] RTFM (*F=friendly)
[2] 模仿ArcEngine的 Identify功能展示要素的属性信息
[3] AE要素选择(点选和拉框选择)
[4]珞珈史迹知多少:武大“国保”名单内外的历史建筑

在这里插入图片描述

标签:要素,string,C#,bname,name,pFeature,intro,个性化,ArcEngine
来源: https://blog.csdn.net/Lexieloveshair/article/details/116458627

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有