GIS设计与开发的学习笔记

news2024/12/23 0:22:40

目录

一、简答题

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.coloradmin.cn/o/1533179.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【LabVIEW FPGA入门】局部变量和全局变量

局部变量 无法访问某前面板对象或需要在程序框图节点之间传递数据时,可创建前面板对象的局部变量。创建局部变量后,局部变量仅仅出现在程序框图上,而不在前面板上。 局部变量可对前面板上的输入控件或显示件进行数据读写。写入局部变量相当于…

借还款管理神器,高效记录借还款信息,让财务明细不再遗漏

在快节奏的现代生活中,借还款管理成为我们日常财务处理的重要一环。无论是个人生活还是企业运营,都需要一个高效、准确、便捷的方式来记录和追踪借还款信息。传统的记账方式往往容易出错、繁琐且耗时,难以满足现代人的需求。现在,…

数据库系统概论(超详解!!!) 第四节 关系数据库标准语言SQL(Ⅰ)

1.SQL概述 SQL(Structured Query Language)结构化查询语言,是关系数据库的标准语言 SQL是一个通用的、功能极强的关系数据库语言 SQL的动词 基本概念 基本表 :本身独立存在的表; SQL中一个关系就对应一个基本表&am…

一、初识 Web3

瑾以此系列文章,献给那些出于好奇并且想要学习这方面知识的开发者们 在多数时间里,我们对 web3 的理解是非常模糊的 就好比提及什么是 web1 以及 web2,相关概念的解释是: 1. 从 Web3 的开始 Web3,也被称为Web3.0&…

飞腾+FPGA+AI电力行业智能数据采集与分析网闸解决方案

行业痛点: 安全物联网闸在监控平台中的具体作用:35KV变电站是煤矿的动力核心,采矿人员上下井、煤炭提升输送、矿井通风等核心设备均依靠变电站提供电源。监控中心及时掌握变电站的运行状态对煤矿的安全生产非常重要。如若外部通过监控网络来控制变电站会…

ByteMD - 掘金社区 MarkDown 编辑器的免费开源的版本,可以在 Vue / React / Svelte 中使用

各位元宵节快乐,今天推荐一款字节跳动旗下掘金社区官方出品的 Markdown 编辑器 JS 开发库。 ByteMD 是一个用于 web 开发的 Markdown 编辑器 JavaScript 库,是字节跳动(也就是掘金社区)出品的 Markdown 格式的富文本编辑器&#…

区域规划(Regional Planning)的学习笔记

目录 一、概念题 1.区域的概念、类型、特性 2.区域分析的概念、主要内容 3.自然环境、自然资源的概念 4.区域自然资源评价的内容 5.可持续发展理论定义 6.经济增长、经济结构定义 7.产业结构概念 8.人口增长分析的含义、指标 9.技术进步概念、类型 10.技术进步对区域…

小侃威胁情报

0x01 什么是情报 百度百科释义: 情报“有情有报告的信息”,学者从情报搜集的手段来给其下定义,说情报是通过秘密手段搜集来的、关于敌对方外交军事政治经济科技等信息。还有学者从情报处理的流程来给其下定义,认为情报是被传递、整…

Vue响应式原理全解析

前言 大家好,我是程序员蒿里行。浅浅记录一下面试中的高频问题,请你谈一下Vue响应式原理。 必备前置知识,​​Vue2​​官方文档中​​深入响应式原理​​​及​​Vue3​​官方文档中​​深入响应式系统​​。 什么是响应式 响应式本质是当…

[隐私计算实训营学习笔记] 第1讲 数据要素流通

信任四基石 数据的分级分类 技术信任:全链路审计、闭环完成的数据可信流通体系 技术信任:开启数据密态时代 数据可流通的基础设施:密态天空计算

react ant design radio group, 自定义modal样式,radio样式

需求&#xff1a; modal 里面需要一个list 列表&#xff0c;列表有单选框&#xff0c;并且可以确认。 遇到的问题&#xff1a;自定义modal的样式&#xff0c;修改radio/ radio group 的样式 设计图如下&#xff1a; 代码&#xff1a; return (<Modaltitle"Duplica…

7.PWM开发SG90(手把手教会)

简介 PWM&#xff0c;英文名Pulse Width Modulation&#xff0c;是脉冲宽度调制缩写&#xff0c;它是通过对一系列脉冲的宽度进 行调制&#xff0c;等效出所需要的波形&#xff08;包含形状以及幅值&#xff09;&#xff0c;对模拟信号电平进行数字编码&#xff0c;也就是说通…

Transformer的前世今生 day02(神经网络语言模型、词向量)

神经网络语言模型 使用神经网络的方法&#xff0c;去完成语言模型的两个问题&#xff0c;下图为两层感知机的神经网络语言模型&#xff1a; 假设词典V内有五个词&#xff1a;“判断”、“这个”、“词”、“的”、“词性”&#xff0c;且要输出P(w_next | “判断”、“这个”、…

李国武:如何评估一家精益制造咨询公司的实施能力?

在制造业转型升级的大背景下&#xff0c;精益制造已成为企业提升竞争力、实现可持续发展的关键。然而&#xff0c;面对市场上众多的精益制造咨询公司&#xff0c;如何评估其实施能力成为了众多企业的难题。本文将从多个方面为大家揭示评估精益制造咨询公司实施能力的方法&#…

软考网工学习笔记(6) 广域通信网

公共交换电话网&#xff08;pstn&#xff09; 在pstn是为了语音通信而建立的网络。从20世纪60你年代开始用于数据传输 电话网有三个部分组成&#xff1a; 本地回路 &#xff0c;干线 和 交换机 。 干线 和 交换机 一般采用数字传输和交换技术 &#xff0c;而 本地回路基本采…

Tomcat介绍,Tomcat服务部署

目录 一、Tomcat 介绍 二、Tomcat 核心技术和组件 2.1、Web 容器&#xff1a;完成 Web 服务器的功能 2.2、Servlet 容器&#xff0c;名字为 catalina&#xff0c;用于处理 Servlet 代码 2.3、JSP 容器&#xff1a;用于将 JSP 动态网页翻译成 Servlet 代码 Tomcat 功能组件…

【自然语言处理】NLP入门(八):1、正则表达式与Python中的实现(8):正则表达式元字符:.、[]、^、$、*、+、?、{m,n}

文章目录 一、前言二、正则表达式与Python中的实现1、字符串构造2、字符串截取3、字符串格式化输出4、字符转义符5、字符串常用函数6、字符串常用方法7、正则表达式1. .&#xff1a;表示除换行符以外的任意字符2. []&#xff1a;指定字符集3. ^ &#xff1a;匹配行首&#xff0…

蓝桥杯练习题总结(二)dfs题、飞机降落、全球变暖

一、飞机降落 问题描述&#xff1a; N架飞机准备降落到某个只有一条跑道的机场。其中第 i 架飞机在 时刻到达机场上空&#xff0c;到达时它的剩余油料还可以继续盘旋 个单位时间&#xff0c;即它最早可以于 1, 时刻开始降落&#xff0c;最晚可以于时刻开始降落。降落过程需要个…

mysql笔记:24. 主从同步环境搭建

文章目录 主从同步的基本原理主从同步的搭建步骤1. 环境准备2. 配置主服务器&#xff08;Master&#xff09;3. 配置从服务器&#xff08;Slave&#xff09;4. 测试配置5. 常见故障5.1. 主从服务器上的MySQL版本不一致导致失败&#xff1f;5.2. Slave_IO_Running状态异常&#…

AI颠覆教学系统,ChatGPT对应试教育会带来哪些挑战?

ChatGPT爆火两个月&#xff0c;整个教育系统都在被颠覆。在全美范围内&#xff0c;许多大学教授、系主任和管理人员&#xff0c;都在对课堂进行大规模的调整&#xff0c;以应对ChatGPT对教学活动造成的巨大冲击。 我们的传统中高考选出的分霸&#xff0c;是更能吃苦&#xff0…