基于C#的ArcEngine实现点击地图要素展示个性化介绍窗口
2021/5/6 20:25:57
本文主要是介绍基于C#的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]珞珈史迹知多少:武大“国保”名单内外的历史建筑
这篇关于基于C#的ArcEngine实现点击地图要素展示个性化介绍窗口的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2022-03-01沐雪多租宝商城源码从.NetCore3.1升级到.Net6的步骤
- 2024-11-18微软研究:RAG系统的四个层次提升理解与回答能力
- 2024-11-15C#中怎么从PEM格式的证书中提取公钥?-icode9专业技术文章分享
- 2024-11-14云架构设计——如何用diagrams.net绘制专业的AWS架构图?
- 2024-05-08首个适配Visual Studio平台的国产智能编程助手CodeGeeX正式上线!C#程序员必备效率神器!
- 2024-03-30C#设计模式之十六迭代器模式(Iterator Pattern)【行为型】
- 2024-03-29c# datetime tryparse
- 2024-02-21list find index c#
- 2024-01-24convert toint32 c#
- 2024-01-24Advanced .Net Debugging 1:你必须知道的调试工具