ArcGIS Engine开发教程--从零搭建GIS桌面应用
目录
一、ArcGIS Engine简介
1.1 什么是ArcGIS Engine?
1.2 应用场景
二、环境搭建
2.1 安装准备
2.2 配置项目
三、核心对象与基础概念
3.1 核心组件
3.2 接口编程
四、实战:开发简易地图查看器
4.1 加载地图文档
4.2 添加矢量图层
4.3 实现地图缩放
五、进阶功能扩展
5.1 空间查询
5.2 符号化与渲染
六、常见问题与调试
6.1 常见错误
6.2 性能优化
七、学习资源推荐
一、ArcGIS Engine简介
1.1 什么是ArcGIS Engine?
-
ArcGIS Engine 是Esri提供的GIS组件库,支持开发者使用C#、VB.NET、Java等语言构建自定义的桌面GIS应用程序。
-
与ArcGIS Desktop不同,Engine无需依赖完整ArcMap环境,适合轻量化、定制化GIS系统开发。
1.2 应用场景
-
地图数据展示与分析工具
-
行业定制化GIS系统(如国土、交通、环保)
-
嵌入式地图功能集成到现有软件
二、环境搭建
2.1 安装准备
-
开发环境:Visual Studio(推荐2017+)
-
ArcGIS Engine SDK:需从Esri官网下载对应版本(如10.8),安装时勾选“.NET支持”。
-
授权文件:申请试用许可或配置正式License。
2.2 配置项目
-
新建C# Windows窗体项目。
-
添加ArcGIS引用:
ESRI.ArcGIS.Carto; // 地图制图 ESRI.ArcGIS.Controls; // 地图控件 ESRI.ArcGIS.Geometry; // 几何对象 ESRI.ArcGIS.SystemUI; // UI组件
-
拖拽
MapControl
和ToolbarControl
到窗体,设置Buddy
属性关联地图控件。
三、核心对象与基础概念
3.1 核心组件
-
MapControl:地图显示容器,管理图层、视图操作。
-
PageLayoutControl:地图布局控件,支持制图输出。
-
ToolbarControl:GIS工具集容器(如缩放、查询、绘图)。
3.2 接口编程
-
ArcGIS Engine基于COM接口设计,需通过接口操作对象。
例如:IMapControl3 mapControl = axMapControl1.Object as IMapControl3; mapControl.AddShapeFile(@"D:\data", "roads.shp");
四、实战:开发简易地图查看器
4.1 加载地图文档
private void LoadMapDocument(string mxdPath)
{if (axMapControl1.CheckMxFile(mxdPath)){axMapControl1.LoadMxFile(mxdPath);axMapControl1.Refresh();}
}
4.2 添加矢量图层
// 添加Shapefile
ILayer layer = new ShapefileLayerClass();
layer.Name = "Cities";
((IFeatureLayer)layer).FeatureClass = OpenFeatureClass(@"C:\data\cities.shp");
axMapControl1.AddLayer(layer);// 添加GeoDatabase数据
IWorkspaceFactory workspaceFactory = new FileGDBWorkspaceFactoryClass();
IWorkspace workspace = workspaceFactory.OpenFromFile(@"C:\data\demo.gdb", 0);
IFeatureClass featureClass = ((IFeatureWorkspace)workspace).OpenFeatureClass("roads");
axMapControl1.AddLayer(featureClass as ILayer);
4.3 实现地图缩放
// 工具栏绑定工具
axToolbarControl1.AddItem("esriControls.ControlsMapZoomInTool");
axToolbarControl1.AddItem("esriControls.ControlsMapZoomOutTool");
axToolbarControl1.AddItem("esriControls.ControlsMapPanTool");
五、进阶功能扩展
5.1 空间查询
ISpatialFilter spatialFilter = new SpatialFilterClass();
spatialFilter.Geometry = selectedGeometry; // 用户绘制的图形
spatialFilter.SpatialRel = esriSpatialRelEnum.esriSpatialRelIntersects;IFeatureCursor featureCursor = featureLayer.Search(spatialFilter, true);
IFeature feature = featureCursor.NextFeature();
while (feature != null)
{MessageBox.Show(feature.get_Value(feature.Fields.FindField("NAME")).ToString());feature = featureCursor.NextFeature();
}
5.2 符号化与渲染
-
简单符号:
SimpleMarkerSymbol
,SimpleLineSymbol
-
分类渲染:
UniqueValueRenderer
,ClassBreaksRenderer
六、常见问题与调试
6.1 常见错误
-
授权失效:检查License Initializer是否正确配置。
-
COM组件未注册:以管理员身份运行
ESRIRegAsm.exe
注册组件。 -
坐标系不匹配:使用
IGeometryBridge2
动态投影。
6.2 性能优化
-
使用
IMapControl3.CancelDrawing
中断重绘 -
多线程加载大数据量图层
-
启用图层缓存(
ILayer2.Cached
)
七、学习资源推荐
-
官方文档:ESRI Developer Help
-
书籍:《ArcGIS Engine地理信息系统开发教程》
未完待续~
以上为博主自己在学习过程中的学习笔记,用于学习和交流,欢迎大家批评纠正。
希望你越来越优秀!!
相关文章:
ArcGIS Engine开发教程--从零搭建GIS桌面应用
目录 一、ArcGIS Engine简介 1.1 什么是ArcGIS Engine? 1.2 应用场景 二、环境搭建 2.1 安装准备 2.2 配置项目 三、核心对象与基础概念 3.1 核心组件 3.2 接口编程 四、实战:开发简易地图查看器 4.1 加载地图文档 4.2 添加矢量图层 4.3 实…...
DeepSeek 助力 Vue3 开发:打造丝滑的日历(Calendar)
前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏关注哦 💕 目录 Deep…...
Conda使用方法详解
Conda是一个开源的包管理和环境管理系统,主要用于Python/R等科学计算领域,可以轻松管理不同项目的依赖关系。以下是Conda的详细使用方法: 一、安装与配置 1.安装Miniconda/Anaconda Miniconda是精简版,只包含conda和Python Ana…...
CausalML 基于机器学习算法的因果推理方法
CausalML 是一个 Python 包,它使用基于最新研究的机器学习算法提供一套提升建模和因果推理方法。它提供了一个标准界面,允许用户从实验或观察数据中估计条件平均处理效应 (CATE),也称为个体治疗效应 (ITE&a…...
HTML的svg元素
<svg>元素 <svg>是一种用于描述二维矢量图形的 XML 格式,可以直接嵌入 HTML 文档中。 <svg>基本用法 <svg>的几种基本用法,包括圆形,正方形,三角形,直线 ,折线等 <body><svg widt…...
文件上传、读取与包含漏洞解析及防御实战
一、漏洞概述 文件上传、读取和包含漏洞是Web安全中常见的高危风险点,攻击者可通过此类漏洞执行恶意代码、窃取敏感数据或直接控制服务器。其核心成因在于开发者未对用户输入内容进行充分验证或过滤,导致攻击者能够绕过安全机制,上传或执行…...
物联网与边缘计算之物联网架构(感知层、网络层、应用层)
一、感知层:数据采集与智能终端 1. 核心功能 感知层是物联网的数据入口,通过物理设备(如传感器、RFID标签)实时采集环境、设备或生物体的物理量(温度、湿度)、标识信息(如二维码)及…...
nvm使用手册
一、安装前准备 1. 卸载现有 Node.js(如已安装) # 删除全局 node 模块 sudo rm -rf /usr/local/lib/node_modules# 删除 node 可执行文件 sudo rm -rf /usr/local/bin/npm sudo rm -rf /usr/local/bin/node# 删除其他残留文件 sudo rm -rf ~/.npm sudo…...
Maven error:Could not transfer artifact
问题描述 当项目从私有仓库下载依赖时,Maven 报错,无法从远程仓库下载指定的依赖包,错误信息如下: Could not transfer artifact com.ding.abcd:zabk-java:pom from/to releases (http://192.1122.101/repory/mavenleases/): 此…...
【操作系统(Linux)】——通过案例学习父子进程的线程异步性
本篇旨在通过几个案例来学习父子进程的线程异步性 一、父进程与子进程 我们将要做的: 创建父子进程,观察父子进程执行的顺序,了解进程执行的异步行为 源代码: #include <stdio.h> #include <sys/types.h> #include…...
汽车CAN总线采样点和采样率详解
写在前面 本篇文章主要讲解在汽车电子中CAN总线采样率的相关知识点,内容涉及CAN波特率、采样点、时间份额、同步跳转宽度以及采样率的计算。 若有相关问题,欢迎评论沟通,共同进步。(*^▽^*) 1、CAN波特率 CAN波特率常规分为250kbps和500kbps,本文章主要以这两个波特率为…...
一款基于 .NET 8 + Vue 开源的、企业级中后台权限管理系统
前言 今天大姚给大家分享一款基于 .NET 8 Vue 开源、前后端分离的企业级中后台权限管理系统,助力快速完成常规业务需求开发:ApeVolo.Admin。 项目介绍 ApeVolo.Admin 一款基于.NET 8、SqlSugar、Vue、Elment UI、RBAC、前后端分离、开源(…...
创建两个进程
文章目录 创建两个进程**2. 实现思路及源代码**2.1 实现思路2.1.1 fork() 函数2.1.2 思路分析 2.2 源代码2.2.1 源代码分析2.2.2 源代码测试结果 **3. 打印进程树**3.1 tmux操作步骤3.1.1 启动 tmux3.1.2 分屏操作(Ctrlb是在告诉系统准备输入一个快捷键)…...
Zephyr、FreeRTOS、RT-Thread 定时器区别分析
一、核心特性对比 特性ZephyrFreeRTOSRT-Thread定时器类型系统定时器(k_timer)、硬件定时器软件定时器(基于系统tick)软件定时器、硬件定时器定时模式单次、周期性单次、自动重载(周期性)单次、周期、自定…...
.NET 中的深拷贝实现方法
在 .NET 中实现深拷贝(Deep Copy)有几种常用方法,深拷贝是指创建一个新对象,并递归地复制原对象及其所有引用对象,而不仅仅是复制引用。 目录 1. 使用序列化/反序列化2. 使用 JSON 序列化(Newtonsoft.Json…...
Vue/React组件/指令/Hooks封装的基本原则以及示例
一、组件封装原则与示例 Vue组件封装 核心原则 • 单一职责:每个组件只解决一个功能(如分页、过滤表单) • Props控制输入:通过定义明确的Props接口接收外部数据(类型校验、默认值) • Emit事件通信:子组件通过$emit向父组件传递动作(如分页切换) • 插槽扩展性:使用…...
医学分割新标杆!双路径PGM-UNet:CNN+Mamba实现病灶毫厘级捕捉
一、引言:医学图像分割的挑战与机遇 医学图像分割是辅助疾病诊断和治疗规划的关键技术,但传统方法常受限于复杂病理特征和微小结构。现有深度学习模型(如CNN和Transformer)虽各有优势,但CNN难以建模长距离依赖&…...
软考-高项,知识点一览十六 采购管理
十六 采购管理 项目采购管理包括从项目团队外部采购或获取所需产品、服务或成果的各个过程。被授权采购项目所需货物、服务的人员可以是项目团队、管理层或组织采购部的成员 。 管理基础 协议/采购合同 协议可以是合同、服务水平协议 (SLA) 、谅解备忘录、协议备…...
Spring MVC 视图解析器(JSP、Thymeleaf、Freemarker、 JSON/HTML、Bean)详解
Spring MVC 视图解析器详解 1. 视图解析器概述 视图解析器(ViewResolver)是 Spring MVC 的核心组件,负责将控制器返回的视图名称(如 success)转换为具体的 View 对象(如 Thymeleaf 模板或 JSP 文件&#x…...
Joomla 常用模块 - 在线用户与Joomla 常用模块 - 自定义HTML模块
Joomla 常用模块 - 在线用户 在这一节中,我们将介绍如何建立在线用户模块。在线用户模块是显示当前访问网站的匿名用户(如访客)和注册用户(登录用户)的数量。 建立在线用户模块你可以参考以下步骤: 1、选…...
缓存工具类
这里写目录标题 背景代码使用 背景 写oj系统过程中,需要使用缓存工具类。其功能为,先从缓存中获取数据,如数据不存在,从数据库中获取。 代码 package xyz.wry.utils;import org.springframework.util.ObjectUtils;import java.…...
【C++】list底层封装和实现
目录 节点类基本框架构造函数 list类构造函数拷贝构造函数赋值重载析构函数 迭代器类前言(string和vector的区别)迭代器模版参数的说明构造函数运算符重载- -运算符的重载运算符重载!运算符的重载*运算符的重载->运算符的重载 迭代器相关函数插入和删除函数inserterase函数p…...
一种替代DOORS在WORD中进行需求管理的方法 (二)
一、前景 参考: 一种替代DOORS在WORD中进行需求管理的方法(基于WORD插件的应用)_doors aspice-CSDN博客 二、界面和资源 WORD2013/WORD2016 插件 【已使用该工具通过第三方功能安全产品认证】: 1、 核心功能 1、需求编号和跟…...
学习海康VisionMaster之多直线查找
一:进一步学习了 今天学习下VisionMaster中的多直线查找,这个还是拟合直线的衍生应用,可以在测量框内同时查找多段时间 二:开始学习 1:什么是多直线查找? 一个检测框,就可以在检测框里面同时检…...
MATLAB的24脉波整流器Simulink仿真与故障诊断
本博客来源于CSDN机器鱼,未同意任何人转载。 更多内容,欢迎点击本专栏目录,查看更多内容。 目录 0 引言 1 故障数据采集 2 故障特征提取 3 故障诊断分类 4 结语 本博客内容是在MATLAB2023下完成。 0 引言 对于电力电子电路的故障诊断…...
顺序表专题(C语言)
文章目录 前言一、数据结构相关概念类比说明:书架与数据结构 二、线性表基本概念两种实现方式对比 三、顺序表的概念及结构1. 顺序表的定义2. 静态顺序表的基本结构关键点解析: 3. 结构体成员解释 四、顺序表分类五、动态顺序表的实现总结 前言 在C语言…...
Python Cookbook-5.9 在排序完毕的序列中寻找元素
任务 你需要寻找序列中的一系列元素。 解决方案 解决方案如果列表L已经是排序完毕的状态,则Python 标准库提供的 bisect 模块可以很容易地检查出元素x是否在L中: import bisect x_insert_point bisect.bisect_right(L,x) x_is_present L[x_insert_point-1:x_i…...
Johnson算法 流水线问题 java实现
某印刷厂有 6项加工任务J1,J2,J3,J4,J5,J6,需要在两台机器Mi和M2上完 成。 在机器Mi上各任务所需时间为5,1,8,5,3,4单位; 在机器M2上各任务所需时间为7,2,2,4,7,4单位。 即时间矩阵为: T1 {5, …...
10:00开始面试,10:08就出来了,问的问题有点变态。。。
从小厂出来,没想到在另一家公司又寄了。 到这家公司开始上班,加班是每天必不可少的,看在钱给的比较多的份上,就不太计较了。没想到8月一纸通知,所有人不准加班,加班费不仅没有了,薪资还要降40%…...
[Vue]App.vue讲解
页面中可以看见的内容不再在index.html中进行编辑,而是在App.vue中进行编辑。 组件化开发 在传统的html开发中,一个页面的资源往往都写在同一个html文件中。这种模式在开发小规模、样式简单的项目时会相当便捷,但当项目规模越来越大…...
python中的*args和**args
在 Python 里,*args 和 **kwargs 是两个特殊的语法,它们能让函数接收不定数量的参数。下面分别对它们进行介绍。 *args *args 用于向函数传递不定数量的非关键字参数,这些参数会被封装成一个元组。以下是示例代码: def sum_num…...
解决Spring Boot上传默认限制文件大小和完善超限异常(若依框架)
文章目录 报错信息问题分析技术原理解决方法1️⃣调整 Spring Boot 配置文件2️⃣检查内嵌 Tomcat 配置(可选)3️⃣ 代码自定义配置(覆盖配置文件) 全局异常处理代码 报错信息 org.springframework.web.multipart.MaxUploadSizeE…...
Pyside6使用QtWebEngine实现GUI嵌入网页内容
Pyside6是由Qt官方维护和开发的一个用于创建跨平台桌面应用程序的Python绑定库。QtWebEngine是Qt提供的一个模块,它基于Chromium项目,允许开发者在他们的应用程序中嵌入网页内容。通过结合Pyside6和QtWebEngine,开发者可以轻松地创建具有现代…...
【每日一个知识点】多项式回归(Polynomial Regression)
多项式回归(Polynomial Regression)是一种对非线性关系建模的回归方法,它是在线性回归的基础上,引入特征的高次项,从而捕捉自变量与因变量之间的非线性关系。 🔹一、基本概念 多项式回归的形式:…...
最新版PhpStorm超详细图文安装教程,带补丁包(2025最新版保姆级教程)
目录 前言 一、PhpStorm最新版下载 二、PhpStorm安装 三、PhpStorm补丁 四、运行PhpStorm 前言 PhpStorm 是 JetBrains 公司推出的 专业 PHP 集成开发环境(IDE),专为提升 PHP 开发效率设计。其核心功能包括智能代码补全、实时语法错误检…...
C++:模拟实现string
目录 一:string类 二:构造函数、拷贝构造函数及析构函数 1、构造函数 2、拷贝构造函数 3、析构函数 三、实现string中对容量操作的成员函数 1、size 2、capacity 3、reserve 4、resize 5、clear 6、empty 四、string类中对象的增删查改操作 …...
Python 小练习系列 | Vol.14:掌握偏函数 partial,用函数更丝滑!
🧩 Python 小练习系列 | Vol.14:掌握偏函数 partial,用函数更丝滑! 本节的 Python 小练习系列我们将聚焦一个 冷门但高能 的工具 —— functools.partial。它的作用类似于“函数的预设模板”,能帮你写出更加灵活、优雅…...
处理Excel的python库openpyxl、xlrd、xlwt、pandas有什么区别,搞懂它
openpyxl、xlrd、xlwt、pandas 都能处理 Excel 表格,但用途和适合的场景不同。今天做个总结: 库名功能支持格式读写支持样式备注openpyxl全面的.xlsx处理库.xlsx(Excel2007)✅✅✅首选xlrd读取.xls文件的老牌工具.xls(…...
【OSG学习笔记】Day 1: OSG初探——环境搭建与第一个3D窗口
什么是 OSG? 全称:OpenSceneGraph(开源场景图) 定位:一个基于 C/OpenGL 的高性能开源3D图形开发工具包,专注于实时渲染和复杂场景管理。 核心思想:通过 场景图(Scene Graph…...
linux--------------进程控制(下)
一、进程等待 1.1 进程等待必要性 子进程退出后,若父进程不管不顾,可能会产生 “僵尸进程”,进而造成内存泄漏。进程一旦变为僵尸状态,即使使用 kill -9 也无法将其杀死,因为无法杀死一个已死的进程。父进程需要了解…...
【Axure元件分享】移动端滑动拨盘日期选择器
在移动端产品设计中,日期选择器是用户交互中常见的组件,尤其在预订、日程管理等场景中扮演着关键角色。本文将介绍一款基于Axure的移动端滑动拨盘日期选择器元件,该元件通过模拟拨盘滑动交互效果,为用户提供直观日期选择体验。 下…...
基于 JavaWeb 的 SpringBoot 在线课程会员系统设计和实现(源码+文档+部署讲解)
技术范围:SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:免费功能设计、开题报告、任务书、中期检查PPT、系统功能实现、代码编写、论文编写和辅导、论文…...
Linux入门
复习:https://blog.csdn.net/ 操作系统概述 硬件和软件 计算机由硬件和软件组成 硬件:计算机系统中由电子,机械和光电元件等组成的各种物理装置的总称 软件:用户和计算机硬件之间的接口和桥梁,用户通过软件与计算机进行交流 而操作系统就是软件的一类. 操作系统 主要负…...
金融壹账通推出大模型一体机,加速金融行业AI落地与应用
在当前数字化和人工智能技术迅猛发展的背景下,金融行业正面临着效率提升、风险管控和客户体验优化的多重挑战。为应对这些需求,金融壹账通近期推出了全新的“大模型一体机”解决方案。该方案集算力、模型、工具链和应用场景于一体,不仅具备小投入、低门槛和私有化部署的优势,还…...
迁移WordPress网站(大文件版本)
安装插件All-in-One WP Migration,备份并下载文件,可以参考我的另外一篇文章wordpress 利用 All-in-One WP Migration全站转移使用工具解压缩.wpress文件 工具名称:wpress-extractor,github下载地址 或者 我已经上传,也…...
Linux普通用户怎么切换为root用户
在 Linux 中,普通用户切换到 root 用户的常用命令有以下几种: 切到root用户 sudo -i(当前用户的密码) su -(需要知道root 密码) 1. su 命令(需要知道 root 密码) su - 或 su - roo…...
WinForm真入门(11)——ComboBox控件详解
WinForm中 ComboBox 控件详解 ComboBox 是 WinForms 中一个集文本框与下拉列表于一体的控件,支持用户从预定义选项中选择或直接输入内容。以下从核心属性、事件、使用场景到高级技巧的全面解析: 一、ComboBox 核心属性 属性说明示例Items下拉…...
Spring 服务调用接口时,提示You should be redirected automatically to target URL:
问题 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"><title>Redirecting...</title><h1>Redirecting...</h1><p>You should be redirected automatically to target URL: <a href"http://xxx/api/v1/branch…...
OpenCV--模板匹配
一、引言 在计算机视觉领域,模板匹配是一种用于在图像中查找特定目标的基本技术。OpenCV 作为广泛使用的计算机视觉库,提供了强大且易于使用的模板匹配功能。无论是在工业检测、图像识别还是机器人视觉等领域,模板匹配都发挥着重要作用。本文…...
【Ragflow】14.MinerU解析脚本,接入ragflow知识库
概述 前文写了下 MinerU 的解析效果,收到不少读者催更,想利用 MinerU 替换 Deepdoc 的原始的解析器。 我认为,开发新功能基本可遵循能用-好用-用好这三个阶段: 能用:先通过脚本实现该功能,主打的是能用就行 好用&am…...