ArcGIS Engine:实现Shp/Mxd数据的加载、图层的简单查询

本博客参考:BiliBili UP主 <羊羊旸> : Arcgis Engine学习

目录

01 加载控件以及控件的基本信息等调整

02 编写 <菜单-地图控件> 中各个子工具的代码 

2.1 加载Shapefile数据-代码

2.2 加载地图文档数据-代码

2.3 获取图层数量-代码

2.4 获取图层名称-代码

2.5 获取图层索引-代码

2.6 完整代码

03 简单演示


01 加载控件以及控件的基本信息等调整

下面是整个软件的布局:

02 编写 <菜单-地图控件> 中各个子工具的代码 

2.1 加载Shapefile数据-代码

双击进入<加载Shapefile数据>的点击事件中(实际上就是点击了该工具会发生什么事情,这一部分事情放在一个函数中让你自由发挥)

using System.IO;  // 与路径的处理相关(在本程序中), 为了使用其中的Path类(其是静态的)

 使用下面中的Path类需要添加上述引用: 

private void 加载Shapefile数据ToolStripMenuItem_Click(object sender, EventArgs e)
{// 创建一个文件对话框实例获取用户选择的Shp文件OpenFileDialog openFileDialog = new OpenFileDialog();openFileDialog.Title = "加载Shapefile数据";  // 文件对话框的标题openFileDialog.Filter = "Shapefile(*.shp)|*.shp|asa|*.*";  // |前面为描述性信息, 后面为通配符openFileDialog.Multiselect = false;  // 不允许选择多个文件if (openFileDialog.ShowDialog() == DialogResult.OK)  // 其中openFileDialog.ShowDialog()执行打开文件对话框并返回相关值, 这里判断是否为{string shapefile_path = openFileDialog.FileName;try{string shapefile_dir = Path.GetDirectoryName(shapefile_path);string shapefile_name = Path.GetFileName(shapefile_path);MainMapControl.AddShapeFile(shapefile_dir, shapefile_name);// 上面分别传入Shp文件所在文件夹的目录和Shp文件的文件名.MessageBox.Show(string.Format("加载Shapefile数据成功:\n {0}", shapefile_name), "加载成功", MessageBoxButtons.OK, MessageBoxIcon.Information);}catch (Exception ex){//MessageBox.Show($"加载Shapefile数据成失败: {ex.Message}", "");MessageBox.Show(string.Format("加载Shapefile数据失败:\n {0}", ex.Message), "加载失败", MessageBoxButtons.OK, MessageBoxIcon.Error);}}
}

前面都比较常规, 首先先实例化一个OpenFileDialog类用于创建一个文件对话窗口,类似下面这种 :

这样用户才可以选择想要的文件,但是这个不需要我们自己从头去弄,调用人家写好的就好了。

发现了一个这个MessageBox.Show:
传入四个参数(也可以就传入一个字符串,其他都不管等等也可行,看重载方法有没有写)

分别是弹出窗口的内容、弹出窗口标题或者说是窗口的说明性描述性信息、弹出窗口的按钮(我加入了一个OK按钮)、弹出窗口的图标(我这里是如果正常加载就是普通信息的图标,否则是错误的图标),如下:

2.2 加载地图文档数据-代码

private void 加载地图文档数据ToolStripMenuItem_Click(object sender, EventArgs e)
{OpenFileDialog openFileDialog = new OpenFileDialog();  // 实例化一个文件对话框对象openFileDialog.Title = "加载地图文档";  // 文件对话框的标题openFileDialog.Filter = "地图文档(.mxd)|*.mxd";  // 前面为描述性信息, 后面为通配符if (openFileDialog.ShowDialog() == DialogResult.OK)  // 文件对话框打开, 并判断文件对话框是否已经选择了文件(==OK){string mxd_path = openFileDialog.FileName;  // 获取文件对话框所选择的文件的名称try{string mxd_name = Path.GetFileName(mxd_path);MainMapControl.LoadMxFile(mxd_path);MessageBox.Show(string.Format("加载地图文档成功:\n {0}", mxd_name), "加载成功", MessageBoxButtons.OK, MessageBoxIcon.Information);// 在这里调用获取图层数量的函数获取图层数量ToolStripMenuItem_Click(sender, e);}catch (Exception ex){MessageBox.Show(string.Format("加载地图文档失败:\n {0}", ex.Message), "加载失败", MessageBoxButtons.OK, MessageBoxIcon.Error);}}
}

与前面类似,这里不再详细描述,对于其中的

// 在这里调用获取图层数量的函数
获取图层数量ToolStripMenuItem_Click(sender, e);

请看后续代码中该函数的编写.

2.3 获取图层数量-代码

private void 获取图层数量ToolStripMenuItem_Click(object sender, EventArgs e)
{int layers_amount = MainMapControl.LayerCount;  // 获取当前显示在Mapcontrol中的所有要素数量textBox.Text = string.Format("当前图层数量: {0}", layers_amount);
}

2.4 获取图层名称-代码

此处使用ILayer类需要添加引用:

using ESRI.ArcGIS.Carto;  // 用于地图和图层操作,此处为使用其中的ILayer类
private void 获取图层名称ToolStripMenuItem_Click(object sender, EventArgs e)
{//if (int.TryParse(textBox.Text, out int layer_ix))int layer_ix;if (int.TryParse(textBox.Text, out layer_ix)){ILayer layer = MainMapControl.get_Layer(layer_ix);textBox.Text = string.Format("索引为{0}的图层名称为: {1}", layer_ix, layer.Name);}else{MessageBox.Show(string.Format("不存在索引为: <{0}>\n 请重新输入", textBox.Text));textBox.Text = "";}}

2.5 获取图层索引-代码

private void 获取图层索引ToolStripMenuItem_Click(object sender, EventArgs e)
{bool layer_exist = false;for (int ix = 0; ix < MainMapControl.LayerCount; ix++){string layer_name = MainMapControl.get_Layer(ix).Name;if (layer_name == textBox.Text){textBox.Text = string.Format("当前图层 <{0}> 的索引为: {1}", layer_name, ix);layer_exist = true;break;}}if (!layer_exist){MessageBox.Show("当前图层 <{0}> 不存在, 请重新输入", textBox.Text);textBox.Text = "";}}

2.6 完整代码

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;using System.IO;  // 与路径的处理相关(在本程序中), 为了使用其中的Path类(其是静态的)
using ESRI.ArcGIS.Carto;  // 为了使用其中的ILayer类namespace BasicBStation
{   public partial class Form1 : Form{public Form1(){ESRI.ArcGIS.RuntimeManager.Bind(ESRI.ArcGIS.ProductCode.EngineOrDesktop);  // 确保ArcGIS版本清晰, 否则报错.InitializeComponent();}private void 加载Shapefile数据ToolStripMenuItem_Click(object sender, EventArgs e){// 创建一个文件对话框实例获取用户选择的Shp文件OpenFileDialog openFileDialog = new OpenFileDialog();openFileDialog.Title = "加载Shapefile数据";  // 文件对话框的标题openFileDialog.Filter = "Shapefile(*.shp)|*.shp|asa|*.*";  // |前面为描述性信息, 后面为通配符openFileDialog.Multiselect = false;  // 不允许选择多个文件if (openFileDialog.ShowDialog() == DialogResult.OK)  // 其中openFileDialog.ShowDialog()执行打开文件对话框并返回相关值, 这里判断是否为{string shapefile_path = openFileDialog.FileName;try{string shapefile_dir = Path.GetDirectoryName(shapefile_path);string shapefile_name = Path.GetFileName(shapefile_path);MainMapControl.AddShapeFile(shapefile_dir, shapefile_name);// 上面分别传入Shp文件所在文件夹的目录和Shp文件的文件名.MessageBox.Show(string.Format("加载Shapefile数据成功:\n {0}", shapefile_name), "加载成功", MessageBoxButtons.OK, MessageBoxIcon.Information);}catch (Exception ex){//MessageBox.Show($"加载Shapefile数据成失败: {ex.Message}", "");MessageBox.Show(string.Format("加载Shapefile数据失败:\n {0}", ex.Message), "加载失败", MessageBoxButtons.OK, MessageBoxIcon.Error);}}}private void 加载地图文档数据ToolStripMenuItem_Click(object sender, EventArgs e){OpenFileDialog openFileDialog = new OpenFileDialog();  // 实例化一个文件对话框对象openFileDialog.Title = "加载地图文档";  // 文件对话框的标题openFileDialog.Filter = "地图文档(.mxd)|*.mxd";  // 前面为描述性信息, 后面为通配符if (openFileDialog.ShowDialog() == DialogResult.OK)  // 文件对话框打开, 并判断文件对话框是否已经选择了文件(==OK){string mxd_path = openFileDialog.FileName;  // 获取文件对话框所选择的文件的名称try{string mxd_name = Path.GetFileName(mxd_path);MainMapControl.LoadMxFile(mxd_path);MessageBox.Show(string.Format("加载地图文档成功:\n {0}", mxd_name), "加载成功", MessageBoxButtons.OK, MessageBoxIcon.Information);// 在这里调用获取图层数量的函数获取图层数量ToolStripMenuItem_Click(sender, e);}catch (Exception ex){MessageBox.Show(string.Format("加载地图文档失败:\n {0}", ex.Message), "加载失败", MessageBoxButtons.OK, MessageBoxIcon.Error);}}}private void 获取图层数量ToolStripMenuItem_Click(object sender, EventArgs e){int layers_amount = MainMapControl.LayerCount;  // 获取当前显示在Mapcontrol中的所有要素数量textBox.Text = string.Format("当前图层数量: {0}", layers_amount);}private void 获取图层名称ToolStripMenuItem_Click(object sender, EventArgs e){//if (int.TryParse(textBox.Text, out int layer_ix))int layer_ix;if (int.TryParse(textBox.Text, out layer_ix)){ILayer layer = MainMapControl.get_Layer(layer_ix);textBox.Text = string.Format("索引为{0}的图层名称为: {1}", layer_ix, layer.Name);}else{MessageBox.Show(string.Format("不存在索引为: <{0}>\n 请重新输入", textBox.Text));textBox.Text = "";}}private void 获取图层索引ToolStripMenuItem_Click(object sender, EventArgs e){bool layer_exist = false;for (int ix = 0; ix < MainMapControl.LayerCount; ix++){string layer_name = MainMapControl.get_Layer(ix).Name;if (layer_name == textBox.Text){textBox.Text = string.Format("当前图层 <{0}> 的索引为: {1}", layer_name, ix);layer_exist = true;break;}}if (!layer_exist){MessageBox.Show("当前图层 <{0}> 不存在, 请重新输入", textBox.Text);textBox.Text = "";}}}
}

由于时间问题,实在没有精力一一说明代码的详情,可以多看视频(视频和本博客代码稍有出入) 。

03 简单演示

时间精力有限,其他功能不再一一演示。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/152542.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何从零开始系统的学习项目管理?

一、项目的概念 根据项目管理协会&#xff08;PMI&#xff09;的定义&#xff0c;项目是指为了创造独特的产品、服务或成果而进行的临时性工作。这意味着项目需要有明确的目标&#xff0c;且不是日常重复性工作。尽管项目是临时性工作&#xff0c;但它所交付的成果可能会持续存…

汽车冲压车间的RFID技术设计解决方案

一、RFID技术的基本原理 RFID技术是一种利用非接触式自动识别的技术&#xff0c;通过将RFID标签放置在被识别物品上&#xff0c;并使用RFID读写器对标签进行扫描和识别&#xff0c;实现对物品的自动识别和追踪。RFID标签分为被动式和主动式两种。被动式标签无内置电源&#xf…

解决远程git服务器路径改变导致本地无法push的问题

解决远程git服务器路径改变导致本地无法push的问题 &#xff08;1&#xff09;第一步&#xff1a;查看git配置 git config -l&#xff08;2&#xff09;第二步&#xff1a;删除远程git地址 git remote remove origin&#xff08;3&#xff09;第三步&#xff1a;再次查看git配…

Vue3 + Ts实现NPM插件 - 定制loading

目录 你的 Loading&#x1f916; 安装&#x1f6f9; 简介苍白请 您移步文档&#xff1a;✈️ 使用方法&#x1f6e0;️ 配置 loading 类型&#x1f3b2; 定制 loading 色彩 &#x1f4a1; 注意事项 前期回顾 你的 Loading 开箱即可用的 loading&#xff0c; 说明&#xff1a;vu…

Java练习题-用冒泡排序法实现数组排序

✅作者简介&#xff1a;CSDN内容合伙人、阿里云专家博主、51CTO专家博主、新星计划第三季python赛道Top1&#x1f3c6; &#x1f4c3;个人主页&#xff1a;hacker707的csdn博客 &#x1f525;系列专栏&#xff1a;Java练习题 &#x1f4ac;个人格言&#xff1a;不断的翻越一座又…

MySql017——组合查询UNION和UNION ALL

一、UNION作用 可用UNION操作符来组合数条SQL查询。 二、UNION 使用规则 1、UNION的使用很简单。所需做的只是给出每条SELECT语句&#xff0c;在各条语句之间放上关键字UNION。2、UNION必须由两条或两条以上的SELECT语句组成&#xff0c;语句之间用关键字UNION分隔&#xff…

Mac mov转mp4,详细转换步骤

Mac mov转mp4怎么转&#xff1f;视频文件格式为.mov是由Apple公司所开发的特殊格式。因其只能在苹果设备上播放&#xff0c;与他人分享时就会变得困难。为此&#xff0c;我们通常会选择使用MP4这种最受欢迎的视频格式。在日常使用中&#xff0c;MP4成为了大家首选的视频格式。而…

Vulnhub系列靶机-The Planets Earth

文章目录 Vulnhub系列靶机-The Planets: Earth1. 信息收集1.1 主机扫描1.2 端口扫描1.3 目录爆破 2. 漏洞探测2.1 XOR解密2.2 解码 3. 漏洞利用3.1 反弹Shell 4. 权限提升4.1 NC文件传输 Netcat&#xff08;nc&#xff09;文件传输 Vulnhub系列靶机-The Planets: Earth 1. 信息…

【管理运筹学】第 9 章 | 网络计划(1,网络图的组成及绘制)

文章目录 引言一、网络图的组成及绘制1.1 网络图的组成1. 基本要素2. 线路与关键线路3. 网络图的类型 1.2 网络图的绘制1. 画图原则2. 绘图一般步骤 写在最后 引言 大纲里关于网络计划这一章的描述&#xff0c;就两个&#xff0c;一个是基本概念&#xff1a;网络计划、时间参数…

计算机竞赛 题目:基于深度学习的中文对话问答机器人

文章目录 0 简介1 项目架构2 项目的主要过程2.1 数据清洗、预处理2.2 分桶2.3 训练 3 项目的整体结构4 重要的API4.1 LSTM cells部分&#xff1a;4.2 损失函数&#xff1a;4.3 搭建seq2seq框架&#xff1a;4.4 测试部分&#xff1a;4.5 评价NLP测试效果&#xff1a;4.6 梯度截断…

API网关是什么?

API网关是什么&#xff1f; API网关很多人都知道它的实现原理&#xff0c;但是并不清楚它存在的意义和背景是什么&#xff0c;这里我给大家通俗易懂地讲解下&#xff01;举个例子&#xff0c;假设你正在开发一个电商网站&#xff0c;那么这里会涉及到很多后端的微服务&#xf…

排序算法之【归并排序】

&#x1f4d9;作者简介&#xff1a; 清水加冰&#xff0c;目前大二在读&#xff0c;正在学习C/C、Python、操作系统、数据库等。 &#x1f4d8;相关专栏&#xff1a;C语言初阶、C语言进阶、C语言刷题训练营、数据结构刷题训练营、有感兴趣的可以看一看。 欢迎点赞 &#x1f44d…

postman测试文件上传接口教程

postman是一个很好的接口测试软件&#xff0c;有时候接口是Get请求方式的&#xff0c;肯定在浏览器都可以测了&#xff0c;不过对于比较规范的RestFul接口&#xff0c;限定了只能post请求的&#xff0c;那你只能通过工具来测了&#xff0c;浏览器只能支持get请求的接口&#xf…

【计算机网络】poll | epoll

文章目录 1. pollpoll函数参数解析代码解析PollServer代码 poll 特点 2. epoll认识接口epoll_createepoll_ctlepoll_wait 基本原理红黑树就绪队列 1. poll poll函数参数解析 输入 man poll poll的第一个参数是文件描述符 poll的第二个参数为 等待的多个文件描述符(fd)数字层面…

点云分割segmentation

点云分割是根据空间、几何和纹理等特征对点云进行划分&#xff0c;使得同一划分区域内的点云拥有相似的特征 。点云的有效分割往往是许多应用的前提。例如&#xff0c;在逆向工程CAD/CAM 领域&#xff0c;对零件的不同扫描表面进行分割&#xff0c;然后才能更好地进行孔洞修复、…

Go 并发编程

并发编程 1.1 并发与并⾏ 并⾏与并发是两个不同的概念&#xff0c;普通解释&#xff1a; 并发&#xff1a;交替做不同事情的能⼒并⾏&#xff1a;同时做不同事情的能⼒ 如果站在程序员的⻆度去解释是这样的&#xff1a; 并发&#xff1a;不同的代码块交替执⾏并⾏&#xf…

蓝牙技术|Matter或能改变中国智能家居市场,蓝牙技术将得到进一步应用

近年来&#xff0c;智能家居开放协议标准Matter&#xff08;目前版本 1.1&#xff09;由连接标准联盟发布&#xff0c;该联盟是一个由数百家公司组成的全球性机构&#xff0c;旨在提供与物联网 (IoT) 相关的标准。例如&#xff0c;Matter 用于允许 Amazon Alexa、Apple Home、G…

宝塔面板二次元透明主题美化模板

看惯了宝塔面板默认风格模板&#xff0c;我们可以试试自己美化修改&#xff0c;我的站长站知道一款非常漂亮的宝塔面板二次元透明主题美化模板&#xff0c;美不美大家看下图&#xff0c;分享给大家。 下载&#xff1a;飞猫盘&#xff5c;文件加速传输工具&#xff5c;云盘&…

学习css 伪类:has

学习抖音&#xff1a; 渡一前端提薪课 首先我们看下:has(selector)是什么 匹配包含&#xff08;相对于 selector 的 :scope&#xff09;指定选择器的元素。可以认为 selector 的前面有一个看不见的 :scope 伪类。它的强大之处是&#xff0c;可以实现父选择器和前面兄弟选择器…

R语言实现竞争风险模型(1)

#竞争风险模型 tmp <- data.frame(gene tiaoxuan[,5:6],OS.Time Train[,"Survival_months"], OS Train[,"CSS"],stringsAsFactors F) colnames(tmp) #方法1&#xff1a;riskregression library(riskRegression) fgr1<-FGR(Hist(OS.Time,OS)~gen…