GIS设计与开发的学习笔记

目录

一、简答题

1.GeoDatabase数据模型结构类型与四种关系。

2.组件式GIS的基本思想是什么?

3.请简述创建空间书签的实现逻辑。

4.请问与地理要素编辑相关的类有哪些?(列举至少五个类)

5.利用ArcGIS Engine提供的栅格运算工具,请简述如何实现一个栅格计算器的思路?

6.请简述地理数据列表显示的实现逻辑。

7.请简述通过接口调用某一方法前需要做什么准备工作?

8.请简述图层的基本渲染的实现思路。

9.请简述如何创建一个Shapefile文件,要用到哪些类库文件?

三、功能实现题

10.现需要实现将一个要素类转换到地理空间数据库的某个要素类的这一功能,请参看FeatureDataConverter组件类图,要通过什么接口调用什么方法来达到这一目标?请写出关键的代码,并说明所调用的方法需要哪些输入参数。

11.如类库Workspacefactory与类Workspace关系图所示,要创建一个workspace对象应该如何实现,写出关键代码。

12.如类RasterHydrologyOp所示,现需计算对某一栅格数据图层进行流向计算,应该如何实现?请写出关键代码。(功能实现)

三、思考题

1.GIS开发有哪些开发模式?你是如何理解这些不同模式的开发?它们之间有联系吗?

2.围绕GIS系统开发为主题,阐述开发过程中需要涉及到的理论与思想,并结合目前GIS开发的最新前沿及应用需求,作为开发人员应该如何开发具有一定生命力、易于后期维护、人机交互友好型的GIS行业应用系统?


一、简答题

1.GeoDatabase数据模型结构类型与四种关系。

三个类

①抽象类:不能用以创建对象,但可以用来指定子类 。

②组件类:能够直接用new方法创建对象的类。

③普通类:自己不能创建对象,只能由别人创建它的对象的类。

四种关系

①依赖关系(可实例化):表示一个对象可以产生(实例化)另外一个对象。

②关联关系:指从一个类的对象访问到另外一个类的对象,它是一种松散的关系。

③组合关系:指其中的一个类对象是另外一个类对象的组成部分,体现了严格的部分和整体的关系,部分和整体的生命周期一样。

④继承关系:同面向对象中的继承。父类不能直接产生类对象,只能通过派生子类的方法来实现自己,是一种比较强的关系。

2.组件式GIS的基本思想是什么?

把GIS的各种功能模块进行分类,划分为不同类型的控件,每个控件完成各自相应的功能;各个GIS控件之间以及GIS控件与其他非GIS控件之间可以方便地通过可视化的软件开发工具集成起来,形成满足用户特定功能需求的GIS应用系统。

3.请简述创建空间书签的实现逻辑。

①在主窗体添加“创建书签”的控件和添加用来保存已创建的书签名的组合框控件,并添加相应引用(Geometry)。

②在主窗体类中添加“创建书签”的函数CreateBookmark(string sBookmarkName),在函数中,通过IAOBookmark接口创建一个变量,用于保存当前地图的范围;通过IMapBookmarks接口访问当前地图,并向地图中加入新建书签;最后将书签名加入组合框中。

③添加“书签名称设置”窗体,添加设置“书签名称”的“文本框”控件和“确定”按钮控件,在此窗体中创建一个用于保存主窗体的对象,并在“确定”按钮的“点击”事件响应函数中调用CreateBookmark函数创建书签。

④为主窗体“创建书签”按钮生成“点击”事件响应函数,用于运行"书签名称设置"功能。

4.请问与地理要素编辑相关的类有哪些?(列举至少五个类)

①Point②Editor③Display④Geometry⑤Polygon⑥Polyline

5.利用ArcGIS Engine提供的栅格运算工具,请简述如何实现一个栅格计算器的思路?

①在主窗体创建一个名为“栅格计算器”的控件。

②添加“栅格计算器参数设置”窗体,并添加相应引用,添加“打开文件”按钮,用于选择输入的栅格文件,添加一个“文本框”,用于输入计算表达式,计算表达式可以是数学运算和函数运算 ,添加一个“计算”按钮,当用户点击该按钮时,程序会读取输入的计算表达式,使用RasterMathSupportOp类中的方法计算表达式的结果,并将返回结果存储为一个新的栅格文件。

③为主窗体“栅格计算器”按钮生成“点击”事件响应函数,用于运行“栅格计算器参数设置”功能。

6.请简述地理数据列表显示的实现逻辑。

①在主窗体添加“访问图层数据”的控件。

②添加“数据展示台”窗体,在此窗体添加用来显示表名的“文本框”控件和用来显示表格的“数据网格视图”。

③添加“数据操作”类,并添加相应引用(Carto,Geometry,Geodatabase,DataSourceFile),在此窗体中创建一个保存当前地图的对象。

④在“数据操作”类中添加“获取地图图层”功能,添加GetLayerByName(string sLayerName)函数得到指定的图层对象,添加GetDataTableByLayer()函数处理图层对象得到的DataTable对象。

⑤为“访问图层数据”控件生成“点击”事件响应函数,调用“数据操作”工具得到DataTable对象,然后调用“数据展示”工具传入DataTable对象,实现创建地理数据列表功能。

7.请简述通过接口调用某一方法前需要做什么准备工作?

①添加该接口的引用。

②获取调用该方法的对象。

③设置接口属性。

④调用接口方法,如果该方法需要的参数,则准备好需要的参数。

8.请简述图层的基本渲染的实现思路。

①在主窗体添加“简单渲染图层”的控件。

②添加“地图编制”类,添加相应引用(Carto,Geometry,Geodatabase,Display)。

③完善“地图编制”类,添加GetLayerByName(string sLayerName)函数用于获取指定的图层对象,添加GetSymbolFromLayer(ILayer layer)函数用于获取图层的符号信息,添加RenderSimplfy(ILayer layer,IColor color)函数用于设置指定图层符号的颜色,并进行简单渲染。

④为“简单渲染图层”控件生成“点击”事件响应函数,调用相应函数获取图层对象,再获取符号对象,设置颜色对象,调用简单渲染函数进行渲染。

9.请简述如何创建一个Shapefile文件,要用到哪些类库文件?

①在主窗体添加“创建Shapefile文件”的控件。

②添加“数据操作”类,并添加相应引用(Geodatabase,DataSourceFile),获取当前地图对象。

③在“数据操作”类中添加“创建shape文件”函数CreateShapfile(String sParentDirectory,String sWorkspaceName,String sFileName),通过指定的上级路径,包含shape文件的文件夹名,shape文件名,创建并编辑“序号”、“名称”和“形状”等字段,创建shape文件。

④为“创建Shapefile文件”控件添加“点击”事件响应函数,调用函数创建shape文件。

三、功能实现题

10.现需要实现将一个要素类转换到地理空间数据库的某个要素类的这一功能,请参看FeatureDataConverter组件类图,要通过什么接口调用什么方法来达到这一目标?请写出关键的代码,并说明所调用的方法需要哪些输入参数。

IFeatureDataConverter接口

ConvertFeatureClass()方法

关键代码:

//装载数据转换类,实现数据转换

IFeatureDataConverter fctofc = new FeatureDataConverterClass();

IEnumInvalidObject enumErrors = fctofc.ConvertFeatureClass(

    sourceFeatureClassName, queryFilter, null, targetFeatureClassName,

    geometryDef, targetFeatureClassFields, "", 1000, 0);

//装载数据转换类,实现数据转换
IFeatureDataConverter fctofc = new FeatureDataConverterClass();
IEnumInvalidObject enumErrors = fctofc.ConvertFeatureClass(sourceFeatureClassName, queryFilter, null, targetFeatureClassName,geometryDef, targetFeatureClassFields, "", 1000, 0);

调用方法参数:

ConvertFeatureClasss(

    IFeatureClassName InputDatasetName,//输入数据集的名称

    IQueryFilter InputQueryFilter,//输入查询过滤器的名称

    IFeatureDatasetName outputFDatasetName,//输出数据集的名称

    IFeatureClassName outputFClassName,//输出特征类的名称

    IGeometryDef OutputGeometryDef,//输出的几何定义

    IFields OutputFields,//输出的字段

    string configKey,//配置键

    int FlushInterval,//刷新间隔

    int parentHWND//父窗口句柄

    )

ConvertFeatureClasss(IFeatureClassName InputDatasetName,//输入数据集的名称IQueryFilter InputQueryFilter,//输入查询过滤器的名称IFeatureDatasetName outputFDatasetName,//输出数据集的名称IFeatureClassName outputFClassName,//输出特征类的名称IGeometryDef OutputGeometryDef,//输出的几何定义IFields OutputFields,//输出的字段string configKey,//配置键int FlushInterval,//刷新间隔int parentHWND//父窗口句柄)

11.如类库Workspacefactory与类Workspace关系图所示,要创建一个workspace对象应该如何实现,写出关键代码。

要创建一个workspace对象,可以使用WorkspaceFactory类创建相应类型的工作空间工厂对象,然后再通过工作空间工厂对象调用相应的OpenFromFile方法打开指定的数据源,得到一个workspace对象。

IWorkspaceFactory workspaceFactory = new ShapefileWorkspaceFactoryClass();

IWorkspace sourceWorkspace = workspaceFactory.OpenFromFile(文件路径名称, 0);

IWorkspaceFactory workspaceFactory = new ShapefileWorkspaceFactoryClass();
IWorkspace sourceWorkspace = workspaceFactory.OpenFromFile(文件路径名称, 0);

首先通过调用ShapefileWorkspaceFactoryClass类的构造函数创建一个Shapefile工作空间工厂对象。然后,调用工作空间工厂对象的OpenFromFile方法,打开指定路径下的Shapefile数据源,返回一个IWorkspace接口对象,这个接口对象代表着打开的工作空间。

12.如类RasterHydrologyOp所示,现需计算对某一栅格数据图层进行流向计算,应该如何实现?请写出关键代码。(功能实现)

创建一个RasterHydrologyOp对象,指定输入栅格图层和输出流向图层。使用RasterHydrologyOp对象的FlowDirection方法计算流向。

using ESRI.ArcGIS.GeoAnalyst;

using ESRI.ArcGIS.Geodatabase;

// 获取RasterHydrologyOp对象

IRasterHydrologyOp hydrologyOp = new RasterHydrologyOpClass();

// 获取需要进行流向计算的栅格数据图层

// 获取WorkspaceFactory

IWorkspaceFactory workspaceFactory = new RasterWorkspaceFactoryClass();

// 打开栅格数据工作空间

IRasterWorkspace rasterWorkspace = workspaceFactory.OpenFromFile(rasterWorkspacePath, 0) as IRasterWorkspace;

// 打开栅格数据集

IRasterDataset rasterDataset = rasterWorkspace.OpenRasterDataset(rasterDatasetName);

// 将栅格数据集转换为GeoDataset

IGeoDataset geoDataset = rasterDataset as IGeoDataset;

// 定义是否创建落差栅格

bool createDrop = false;

// 定义是否在边缘强制流动

bool forceFlowAtEdge = true;

// 进行流向计算

IGeoDataset flowDirectionDataset = hydrologyOp.FlowDirection(geoDataset, createDrop, forceFlowAtEdge);

// 将结果保存为栅格数据图层

// 获取Dataset保存对象

IDatasetSaveAs datasetSaveAs = flowDirectionDataset as IDatasetSaveAs;

// 定义保存路径和名称

string savePath = @"D:\FlowDirection.tif";

// 保存栅格数据图层

datasetSaveAs.SaveAs(savePath, null, "TIFF");

using ESRI.ArcGIS.GeoAnalyst;
using ESRI.ArcGIS.Geodatabase;// 获取RasterHydrologyOp对象
IRasterHydrologyOp hydrologyOp = new RasterHydrologyOpClass();// 获取需要进行流向计算的栅格数据图层
// 获取WorkspaceFactory
IWorkspaceFactory workspaceFactory = new RasterWorkspaceFactoryClass();
// 打开栅格数据工作空间
IRasterWorkspace rasterWorkspace = workspaceFactory.OpenFromFile(rasterWorkspacePath, 0) as IRasterWorkspace;
// 打开栅格数据集
IRasterDataset rasterDataset = rasterWorkspace.OpenRasterDataset(rasterDatasetName);
// 将栅格数据集转换为GeoDataset
IGeoDataset geoDataset = rasterDataset as IGeoDataset;// 定义是否创建落差栅格
bool createDrop = false;
// 定义是否在边缘强制流动
bool forceFlowAtEdge = true;
// 进行流向计算
IGeoDataset flowDirectionDataset = hydrologyOp.FlowDirection(geoDataset, createDrop, forceFlowAtEdge);// 将结果保存为栅格数据图层
// 获取Dataset保存对象
IDatasetSaveAs datasetSaveAs = flowDirectionDataset as IDatasetSaveAs;
// 定义保存路径和名称
string savePath = @"D:\FlowDirection.tif";
// 保存栅格数据图层
datasetSaveAs.SaveAs(savePath, null, "TIFF");

三、思考题

1.GIS开发有哪些开发模式?你是如何理解这些不同模式的开发?它们之间有联系吗?

①独立开发模式:不依赖于任何GIS工具软件,从空间数据的采集,编辑到数据的处理分析及结果输出,所有的算法都由开发者独立设计。

②单纯二次开发模式:指完全借助于GIS工具软件提供的开发语言进行应用系统开发。

③集成二次开发模式:指利用专业的GIS工具软件,如ArcInfo,MapInfo,SuperMap等,实现GIS的基本功能,以通用软件开发工具尤其是可视化开发工具,如C# .NET、Visual C++、Visual Basic、Java等为开发平台,进行二者的集成开发。目前有两种方式:①OLE/DDE,②GIS控件。

2.围绕GIS系统开发为主题,阐述开发过程中需要涉及到的理论与思想,并结合目前GIS开发的最新前沿及应用需求,作为开发人员应该如何开发具有一定生命力、易于后期维护、人机交互友好型的GIS行业应用系统?

COM标准,面向对象思想,组件式思想,

①需求分析

②软件分析:初步设计和详细设计

③总体设计:系统设计和结构设计

④低耦合,高内聚

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

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

相关文章

gitLab server version 13.12.1 is not supported

拉代码的时候,报的这个错,实际上就是因为gitLab 版本太低了,这里不准备升级版本,打算继续使用账号密码来拉取代码 在idea已经安装的插件中,去掉gitlab插件,如下: 之后再拉取代码,就…

多进程数据库不适合作为hive的元数据库

简介 “今天发现一个比较奇怪的现象,因为博主不熟悉mysql,所以在安装hive的使用了postgresql作为hive的元数据库,在测试几个连接工具对hive进行链接,后面再测试的时候发现链接不上了,并且报错日志如下:” …

HTTPS证书是什么?多少钱?

HTTPS证书,其实就是SSL证书或者TLS证书,它就像是个网络保安,专门保护你的网站和用户浏览器之间的聊天内容不被坏人偷听或者改掉。当你给网站装上有效的HTTPS证书后,网址前面就会出现"https://",旁边可能还会…

【Linux第三课-基础开发工具的使用】yum、vim、gcc/g++编译器、gdb、Make/Makefile编写、进度条程序、git命令行简单操作

目录 yum - 软件包管理器快速认识yum快速使用yumyum搜索yum安装yum卸载 yum的周边 - yum的整个生态问题 vim快速介绍vimvim的模式命令模式插入模式低行模式 常见模式 -- 命令、低行命令模式 -- 光标的移动命令模式 -- 复制粘贴、剪贴、删除命令模式 -- 小写/大写替换模式命令模…

linux命令(二)

环境变量 在这里我说一下linux的环境变量 windows的环境变量大家应该都用的很熟吧,在这里说一下linux怎么查看以及设置环境变量 首先是查看环境变量 export这就会列出来所有的环境变量 既然能看到环境变量,那如何进行设置呢 首先先试试echo $PATH看看…

外包干了14天,技术退步明显。。。

先说一下自己的情况,本科生,2019年我通过校招踏入了成都一家软件公司,开始了我的职业生涯。那时的我,满怀热血和憧憬,期待着在这个行业中闯出一片天地。然而,随着时间的推移,我发现自己逐渐陷入…

数据结构试卷第九套

1.时间复杂度 2.树,森林,二叉树的转换 2.1树转二叉树 给所有的兄弟节点之间加一条连线;去线,只保留当前根节点与第一个叶子节点的连线,删除它与其他节点之间的连线;然后根据左孩子右兄弟进行调整&#xf…

C++第六弹---类与对象(三)

✨个人主页: 熬夜学编程的小林 💗系列专栏: 【C语言详解】 【数据结构详解】【C详解】 目录 1、类的6个默认成员函数 2、构造函数 2.1、概念 2.2、特性 3、析构函数 3.1、概念 3.2、特性 3.3、调用顺序 总结 1、类的6个默认成员函数…

《由浅入深学习SAP财务》:第2章 总账模块 - 2.1 基础知识

2.1.1 总账模块的基本功能 总账模块(General Ledger,GL)是“总分类账会计模块”的中文简称,它是财务会计(FI)模块的一个子模块,它是一切会计事务处理的核心模块。 它的基本功能有会计科…

【Linux】Linux工具学习之gcc/g++

🔥博客主页: 小羊失眠啦. 🎥系列专栏:《C语言》 《数据结构》 《C》 《Linux》 《Cpolar》 ❤️感谢大家点赞👍收藏⭐评论✍️ 接上文,我们已经学习了 Linux 中的编辑器 vim 的相关使用方法,现在…

WordPress Plugin NotificationX插件 SQL注入漏洞复现(CVE-2024-1698)

0x01 产品简介 WordPress和WordPress plugin都是WordPress基金会的产品。WordPress是一套使用PHP语言开发的博客平台。该平台支持在PHP和MySQL的服务器上架设个人博客网站。 0x02 漏洞概述 WordPress plugin NotificationX是一个应用插件。2.8.2版本及之前 存在安全漏洞,该…

【RAG实践】基于 LlamaIndex 和Qwen1.5搭建基于本地知识库的问答机器人

什么是RAG LLM会产生误导性的 “幻觉”,依赖的信息可能过时,处理特定知识时效率不高,缺乏专业领域的深度洞察,同时在推理能力上也有所欠缺。 正是在这样的背景下,检索增强生成技术(Retrieval-Augmented G…

第八篇【传奇开心果系列】Python自动化办公库技术点案例示例:深度解读使用Python库清洗处理从PDF文件提取的文本

传奇开心果博文系列 系列博文目录Python自动化办公库技术点案例示例系列 博文目录前言一、Python清洗处理文本的常见步骤二、使用Python库去除非文本元素示例代码三、使用Python库去除格式化元素的示例代码四、使用Python库去除空白字符示例代码五、使用Python库合并段落和行示…

Oracle P6 Professional 配置连接数据库总结

前言 P6 Professional作为Oracle P6计划管理系统的重要套件之一,其操作出色,体检佳,是非常多的计划工程师跟踪项目进度计划的辅助工具。自20年前,Professional一直在不断的演变更新,以适应当前的新技术,从…

什么是可回收箱?可回收箱能回收哪些物品?具有哪些功能?

可回收箱是指专门用于收集居民或单位产生的、适宜回收和资源化利用的废弃物的容器。这些箱子通常会按照垃圾分类的标准进行设计,贴有明确标识,不同类型的可回收箱可能在开口大小、形状等方面有所不同,以适应不同类型可回收物的投放需求&#…

电源配小了,是不是容易烧?是的!

电源小的话会不会容易烧毁? 是的。 功率电压*电流。 随着功率增大,电压不变,电流增大,发热量增大,可能会烧毁。 今天给大家推荐一款650w的电脑电源,不过在推荐之前,首先要确认自己的电脑功耗…

制造业工厂为什么需要生产管理MES系统

一、制造业的生产管理需求与痛点 日趋激烈的市场竞争、客户对产品多样化要求越来越高,导致产品的生命周期缩短,企业需要通过智能制造实现降本、增效、提质,以提高企业的快速响应能力和核心竞争力。 二、生产管理的过程的痛点具体表现如下&am…

ES的集群节点发现故障排除指南(1)

本文是ES官方文档关于集群节点发现与互联互通的问题排查指南内容。 英文原文(官网) 集群节点发现是首要任务 集群互连,重中之重! 在大多数情况下,发现和选举过程会迅速完成,并且主节点会长时间保持当选状…

Jmeter-基础元件使用(二)-属性及对数据库简单操作

一、Jmeter属性 当我们想要在不同线程组中使用某变量,就需要使用属,此时Jmeter属性的设置需要函数来进行set和get操作 1.创建set函数 2.然后采用Beanshell取样器进行函数执行 3.调用全局变量pro_id 4.将上面生成的函数字符串粘贴到另一个线程组即可…

Python数学建模-2.9Matplotlib库

Matplotlib库是Python中一个非常流行的绘图库,它提供了大量的绘图工具,可以生成各种类型的静态、动态、交互式的图表。Matplotlib的设计初衷是为了与NumPy配合使用,从而提供一个强大的数学绘图工具。 1.Matplotlib的主要特点 丰富的图表类型…