首页 GIS程序设计

GIS程序设计

举报
开通vip

GIS程序设计《GIS程序设计》实习报告姓名学号指导教师专业地理信息系统所在院系理学院地球科学系二0一四年六月二十三日2目录实习一创建与调用AOI书签………………………………………3实习二地理数据列表显示…………………&hel...

GIS程序设计
《GIS程序 设计 领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计 》实习 报告 软件系统测试报告下载sgs报告如何下载关于路面塌陷情况报告535n,sgs报告怎么下载竣工报告下载 姓名学号指导教师专业地理信息系统所在院系理学院地球科学系二0一四年六月二十三日2目录实习一创建与调用AOI书签………………………………………3实习二地理数据列 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf 显示…………………………………………18实习三对地图进行简单图层渲染…………………………………32实习四地图的页面布局及打印……………………………………41实习五地图的制图文件输出………………………………………47实习六创建一个Shape文件………………………………………54实习七地理要素的编辑……………………………………………62实习八空间关系查询………………………………………………67实习九缓冲区 分析 定性数据统计分析pdf销售业绩分析模板建筑结构震害分析销售进度分析表京东商城竞争战略分析 …………………………………………………73实习十地图要素的数据统计………………………………………793实习一创建与调用AOI书签一、实习目的1.通过简单的实习操作,熟悉在VisualStudio10环境下运行ArcGISEngine;2.掌握对地图的简单操作处理,即空间书签的创建;3.能够通过代码实现书签的功能,并进行合理的调用;4.能够在思想掌握上述操作的基础上进行功能性拓展。二、实习概况与要求地图是一幅庞大的图幅,我们不可能且条件也不允许我们在进行局部具体操作时通篇考虑全图的信息,当然特殊全局需求分析除外,因此我们就需要一种手段来实现局部地图的显示、操作与输出,也就是所谓的空间书签,通过它可以进行快速的定位,并指向我们所需要的版块。书签分为AOI书签与特征书签。前者记录用户所关心的一个范围;后者则记录用户所关注的一个特征。本次实习主要进行第一种书签的操作。用户可以通过地图的IMapBookmark接口,可以访问其空间书签,并进行增加与筛减。所有的空间书签对象都实现了ISpatialBookmark接口,它定义了各种书签所有的公共功能。ZoomTo函数通过IActiveView::Extent改变地图的显示范围。因此,我们实习的内容便是在原有给定功能的基础上进行合理的开发,并通过代码实现相应的功能。正确的创建空间书签并根据需求进行合理的调用与索引,在此基础上考虑更好的实现其功能并进行适当的改进与整合,也即功能的拓展与应用。三、实现思路与过程(一)添加控件和类库引用图1创建项目工程4图2MapControl属性进行选择操作地图文件图3初始运行结果正常显示图4菜单栏添加新的MenuItem5图5具体参数属性设置如下图所示图6菜单栏再次新建ComboBox图7具体属性设置如下6其中,miCreateBookmark用于稍后调用“创建书签”窗体。cbBookmarkList用于保存已创建的书签,并在选中某书签名时,改变当前地图视图到特定书签视图。图8为项目添加引用图9选择具体的类库引用并添加同时需要在主窗体中添加该类库的引用。具体语句为:在添加后我们注意到,Path类的调用出现问题,需要做出具体类库引用的修改,具体修改是:7在Path前添加系统类库的引用,如下:(二)添加“创建书签”函数在菜单栏中创建的“创建书签”项目,需要对其功能进行具体的实现。即通过具体的接口进行地图视图的范围选择,并进行访问。同时需要将原有的书签添加到组合框中,以便后续的调用使用。具体的代码实现如下:(三)添加“书签名称设置”窗体进行窗体添加时,需要在项目菜单下选择Windows窗体选项。该窗体用于获取用户定义的当前书签的名称,并向主窗体传递。图11窗体的新建与重命名8图12窗体的显示可以根据需要进行具体参数的设置图13添加文本框与按钮如视图双击上述按钮的“确认”键转至代码区,添加一个主窗体类型的成员变量m_frmMain,并新建一个以主窗体类型对象为参数的构造函数,用于调用主窗体的相关成员。具体代码实现如下视图所示。9(四)实现创建书签与调用书签功能添加如下代码进行激活点击事件,使得窗体能够正常运行。为组合框cbBookmarkList生成“选择索引更改”事件相应函数。图14创建书签点击事件10图15书签列表框的选择索引变更事件添加代码,当组合框中被选中项改变时,地图将依据对应书签改变显示范围。四、核心代码(一)“创建书签”函数作为创建书签函数的声明。其参数sBookmarkName代表内容为输入的书签名,类型为字符串string。11此语句通过系统自带的接口IAOIBookmark创建一个变量aoiBookmark,其类型为IAOIBookmark,用于保存当前地图的范围。因为接口IAOIBookmark可以对如何AOI书签进行操作控制。通过IMapBookmarks接口访问当前地图,并向地图中加入新书签。将新建书签加入组合框中,用于之后调用该对应书签。(二)“书签名称设置”函数用于传入主窗体对象。“确认”按钮的点击事件响应函数,用于创建书签。(三)创建书签与调用书签“创建书签”按钮的点击事件响应函数,用于运行“确认书签名称”的按钮。访问地图所包含的书签,并获取书签序列。12对所包含的书签进行遍历,获取与组合框所选项名称相符的书签。五、运行效果如下图所示,首先要保证初始视图的完整,并在此基础上,选择在不同地图范围内创建书签,并尝试更改组合框的选择项,查看当前视图会否更改。如下图所示,当创建书签“上海”时,并选择特定区域。再次创建“东京”书签,并选择特定区域。我们可以在菜单栏的项目下拉单中选择已经创建的书签,可以发现视图会根据选择的书签漂移至指定书签视图。可以实现即时跳转。如此,即表明该空间书签的创建是成功的。图16最初显示地图信息13图17创建书签上海图18创建书签东京14图19选择下拉单的上海便成功转换当前视图六、功能拓展(思考题)当我们创建书签时,变换不同地图区域设定时,若命名相同的话,则无论现在哪个下拉单的书签都会不选择地显示第一个空间书签所对应的视图。所以,此书签的功能设定是不完善的,需要改进的。所以我们需要考虑空间书签重名的问题,并进行相应的显示。(一)空间书签重名的预防方法一:实现此功能,需要另外定义一个布尔类型变量b用于判断该书签名是否已存在。若存在则进行相关提示,并关闭该框体。若不存在同样进行相应的提示,并进行后续操作。具体的实现代码如下:其运行的结果如下图显示内容。15图20首次创建书签“天津”成功的显示信息图21第二次进行同名书签创建时提示信息16方法二:可以首先通过所有书签名的遍历,查看是否有与即将输入书签重名的内容。如果有则返回false,并作出相关提示。如果没有则允许继续进行后续的操作。具体代码如下:图22首次创建书签“上海”成功的显示信息17图21第二次进行同名书签创建时提示信息即当正常运行程序时出现恶意操作时,应该予以制止并提示相应的错误信息,才能够使得软件更加具有可操作性。才能满足用户在使用时,可以得知错误之处,提供时间与空间及时调整。18实习二地理数据列表显示一、实习目的1.通过简单的实习操作,增加对于地图不同图层组合的理解;2.掌握对地图增加控件并显示信息的简单操作处理,以显示相关地理数据;3.创建表视图的对话框,用于显示相关信息显示的操作,并通过列表控件进行显示处理等操作;4.在上述内容基础上进行拓展开发,如多图层信息任意要素所有字段的综合显示,以及数据类型转换的自定义实现等。二、实习概况与要求我们所看到的地图更像是一项庞大的工程,其包含着不同属性信息的多重图层,以使得地图可以包含更多内容的信息,即增加地图的载负能力。对于空间数据,在ArcGIS进行相应的读写操作,需要我们了解其数据内在组成以及可适用文件信息。ArcGIS可以读取多种空间数据,包括矢量、栅格以及Tin。它同样可以将空间数据与属性数据一起进行读取分析处理,使其集成在一个坐标系环境下进行操作;其可以读取的格式包括Coverage、Shape-file和CAD文件,以及基于文件和数据库的Geodatabase数据,和ArcXML。我们实习的内容便是在原有给定功能的基础上进行合理的开发,并通过代码实现相应的功能。正确的添加相应需求的控件,并根据需求进行合理的调用与信息显示。在此基础上考虑更好的实现其功能并进行适当的改进与整合,也即功能的拓展与应用。如任意要素类所有字段信息的列表显示或者自定义窗口的“数据格式转换”交互界面,实现数据类型的转换。三、实现思路与过程(一)添加控件在程序的主窗体中,首先创建“空间数据”菜单项,并可以将其根据命名规则命名为miSpaceData。并在其基础上设立下拉菜单,添加一个下拉菜单项。文本属性设定为“访问图层数据”,控件名称命名为miAccessData。以便用于稍后“数据展示台”窗体。图1数据访问菜单项19(二)添加“数据展示台”窗体在当前项目添加一个新的窗体类DataBoard.cs,用于根据用户不同的要求,展示相应的数据信息。图2添加当前项目的窗体选项图3添加窗体并命名添加后可以对该窗体的部分属性进行设置,使得其更好的显示。在此修订之后,需要向该窗体添加两个控件:一个文本框,用于显示当前显示数据的名称,控件名称为tbDataName;还有一个数据网格视图(DataGridView),修改只读为true。20图4添加控件后的操作台显示在此基础上,需要新建一个以String类型对象和DataTable类型对象为参数的构造函数,用于设置展示的数据表名和数据源。具体代码信息如下:(三)添加“数据操作”类图5添加类选项21如图所示,在当前项目下进行添加类DataOperator.cs,用于管理当前项目中涉及数据操作的相关功能。图6添加该类需要导入相关类库Geodatabase和DataSourcesFile,并添加引用。图7添加引用类库具体引用代码如下。22向类添加实现IMap接口的成员变量m_map,保存当前的地图对象,并新建一个以IMap接口对象为参数的构造函数,将当前地图对象传入类内,以添加创建好的Shape文件和要素。具体实现内容如下:(四)添加“获取地图图层”功能函数向类DataOperator中添加成员函数GetLayerByName,通过指定图层获取对应图层对象。具体代码如下:添加成员函数GetContinentsNames,获取地图中“Continents”图层,读取各个大洲的名称,并以DataTable类型返回。具体代码如下:23(五)实现创建地理数据列表功能为主窗体的“访问图层数据”菜单项生成“点击”事件响应函数,并添加代码运行“数据展示台”窗体,以展示各洲名称。具体代码实现如下:24四、核心代码(一)通过指定图层名获取对应图层对象要获取某一特定的图层内容的属性信息,我们需要根据需求选择该图层,也即需要对该地图的所有图层名称进行遍历查看是否存在与已知一致的图层。(二)获取图层并读取洲名首先,我们需要获取“Continents”图层,并需要通过特定的接口进行访问。并进行相应的判断。25如上述代码,显示对特定图层对象进行获取与保存时,需要通过不同的类型对象包括DataTable与DataColumn,存储在相对应的列集合中。当进行具体的引用时,需要考虑其属性表中各信息的所在字段。五、运行效果图8运行初始结果正常图9选择菜单栏的下拉选项26图10最终的运行显示结果从运行结果来看,基本功能是能够实现的。下拉菜单项正常显示,功能衔接完善。最终的结果输出显示均无误差。六、功能拓展(思考题)我们看到最终显示的结果只不过是指定要素中字段信息的列表显示,我们可以探讨拓展展到任意要素所有字段信息的列表显示。以更好的实现其属性列表的功能。拓展过程可以参考“GetContinentsNames”图层字段的信息显示,套用到其他信息的列表输出。(一)任意要素字段列表用ArcMap打开本实习所用的文档,查看Continent图层属性信息,以便用于稍后的显示输出。具体信息如下所示:图11查看Continent图层属性27我们知道,在输出名称时采用的方法是,就关联在DataTable的下一个DataRow将要素在序号和名称字段上的值赋予DataRow的对应列中。同理,同样感觉相互对应的列的信息,进行其他要素的输出。具体实现如下:再进行输出格式的匹配就可以完成输出的列表显示。添加如上代码之后,再次运行程序。运行结果如下:图12修改后的列表信息显示28(二)Shape类型转换如上显示结果表明,在进行Shape类型输出时,由于无法识别相应的格式,从而导致结果输出错误。需要在进行Shape输出时,直接从数据源处获取该数据的格式,再进行输出。需要重新定义一个函数getShapeType,用于获取图层的Shape,并进行输出显示。具体实现如下内容所示:如此,方能正确地进行输出类型格式。显示各属性要素字段值。图13最终输出结果如下(三)文件数据类型转换从上面的实例我们可以看出,不同文件间的格式在使用时需要进行相应的转换操作,以便在新的操作平台上进行。需要将特定的ESRI文件转换至.NET类型;同时,需要将获取的地理数据类型转换成字符串string类型,便于输出的格式操作。因此,除上述的方法之外,便可以通过此内容,实现Shape等类型的转换。此种方式是一种统筹式的类型转换。可以用于任何不同数据类型的转换和相应的输出。部分类型转换的代码可以从Help中查询并使用。具体代码如下:293031图14运行结果显示由此, 说明 关于失联党员情况说明岗位说明总经理岗位说明书会计岗位说明书行政主管岗位说明书 通过这种数据格式的转换能够更好的实现数据在不同平台的适用。其结果都是相同无异的。32实习三对地图进行简单图层渲染一、实习目的1.通过简单的实习操作,增加对于地图不同要素的理解,对于特定图层通过操作进行一定渲染,使得其能够着重突出;2.掌握对地图增加控件并显示信息的简单操作处理,以显示相关地理数据;3.通过增加地图编制的功能,更进一步了解对地图的编辑及操作;4.在上述内容基础上进行拓展开发,如进行图层渲染器信息的获取等操作。二、实习概况与要求我们所看到的地图更像是一项庞大的工程,其包含着不同属性信息的多重图层,以使得地图可以包含更多内容的信息,即增加地图的载负能力。地图上特定的地物通过不同的表现元素进行符号化,如点、线、面等图元。进行地图信息的渲染为的是使得地图的层次清晰,减少相对图元的显示,提高地图的可视化效果,即信息化的显示。ArcGISEngine中提供的类库Carto支持地图的创建与显示。Carto又提供了PageLayout、Map及各种形式的Layer、Renderer等组件。FeatureLayer对象处理矢量要素。图层可以处理与之相关的Renderer对象,其属性控制着在地图上的显示方式;Renderers用Display类库中的符合进行实际的绘制。PageLayout和Map均可以包含元素Element,其用几何图形定义其在地图中的位置,用行为控制元素的显示,可以用来进行标注。在应用程序中均可以直接使用PageLayout与Map对象,但通常需要基于高一级的控制对象如PageLayoutControl、MapControl与ArcGIS。主要是为了能够更好的控制相应对象。本次实验便通过增加相应的控件,通过计算机进行地图图层的识别并进行对应要素的简单渲染(SimpleRenderer),是一种ArcGISEngine的默认渲染方式;即对地图中所有要素采用同一种方式进行显示,无差别化显示。地图符号通常要与图层的几何类型相互匹配,面元绘制多边形,线元绘制线,点元绘制点。三、实现思路与过程(一)类、控件与引用准备首先根据即将操作的功能设定菜单栏,添加相应的控件。如上述的内容提到本次实习是对地图的操作与显示相应添加相关的引用与控件。通过新建类MapComposer.cs实现相应的功能。相关操作在前几次实习都进行实现,不在此赘述。同时,相应修改该类为public权限。具体实现如下:33(二)完善“地图编制”类功能向此类中,添加成员函数GetRendererType,用于获取指定图层的渲染器类型信息。当获取渲染器类型时,就需要进行相应的识别并返回信息。如下简单列举两例,其余识别均相同,若未识别则返回失败的提示。添加静态成员函数GetRendererType用于获取指定图层的符号信息。34获取指定图层的要素类的几何形状信息,并进行匹配。根据不同形状设置不同类型的符号的颜色。新建简单渲染器对象,设置其符号。访问指定图层,并设置渲染器。35(三)实现图层简单渲染为主窗体的“简单渲染图层”菜单项生成点击事件响应函数,并添加代码实现对“WorldCities”图层的简单渲染。为主窗体“获取渲染器信息”生成点击事件响应函数,并添加代码实现对“WorldCities”图层渲染器类型信息的获取。四、核心代码(一)通过接口访问指定图层图层上有一个执行搜索的方法Search。这个方法返回一个满足给定搜索条件的要素的Cursor。如果图层定义了一个查询设置,搜索方法将在满足条件的要素子集中搜索。搜索方法在连接字段上不起作用。如果FeatureLayer有连接,就要使用IGeoFeatureLayer接口访问方法。IGeoFeatureLayer可以访问IFeatureLayer的所有属性和方法,另外还有访问图层要素渲染器和标签的属性。相对于IFeatureLayer,少数layer类型支持IGeoFeatureLayer。函数中接口访问的具体代码如下:36(二)获取指定图层的几何形状需要获取相应图层的几何形状的信息,如何根据各不同的几何形状,分别设置符号、颜色信息。esriGeometryType指系统自带的几何信息,需要进行匹配当前图层的几何类型就需要对应到featureClass进行识别。37五、运行效果点击菜单栏“地图表现”查看下拉菜单,如图1。并点击“获取渲染器信息”得到如下图2的显示,即UniqueValueRenderer渲染器。点击“简单渲染地图”后得到如图3的运行结果。再此获取渲染器会得到SimpleRenderer,如图4显示结果。此时查看下拉菜单会发现“简单渲染地图”已无显示。如此即表明各项功能均正常。图1菜单栏项目图2UniqueValueRenderer渲染器图图3SimpleRenderer渲染器图4简单渲染后结果38六、功能拓展(思考题)上述的实验中,我们只简单做了关于点的渲染,即对“WorldCities”的渲染,在此基础上我们应该思考对线、面的渲染,以适应更大的需求。由于,在设计渲染类型的时候便很好的区分了点、线、面,因此在进行此次渲染的时候,只需要根据具体渲染对象做一定的设置就行,省去了较多具体的代码实现。分别在如图5所示的“简单渲染地图”设立右拉单,分别对其进行渲染。在相应的点击事件相应函数中加入类似代码,对于不同的渲染对象,只需进行图层对象的修改就行,不再赘述。具体实现代码如下内容所示:图5简单渲染右拉单如下图6、7、8分别是对“WorldCities”、“Continents”及“World”的渲染结果,以及渲染器类型的修改显示。如下运行结果即表明对于不同的渲染对象,都具有相同的渲染功能以及渲染器识别内容。39图6“WorldCities”对象渲染及渲染器类型图7“Continents”对象渲染及渲染器类型40图8“World”对象渲染及渲染器类型41实习四地图的页面布局及打印一、实习目的1.通过简单的实习操作,增加对于地图制图以及输出的理解;2.掌握对地图增加控件并显示信息的简单操作处理的各接口的使用及相关操作,以输出相关地图信息;3.通过增加地图编制的功能,更进一步了解对地图的编辑及操作;4.在上述内容基础上进行拓展开发,如输出路径的选择等。二、实习概况与要求地图的制图输出是整个地图制作的重要一部分,需要什么样的输出效果及输出格式对应应用需求都是有不可或缺的意义。地图输出主要有两种方式,第一种便是借助打印机或者绘图仪进行硬拷贝输出;第二种便是将地图转换为通用格式的栅格文件,便于在系统中的使用。在输出过程中需要进行图幅的整饰即设置如指北针、图幅名称、比例尺及输出格式等信息。格式转换输出数字地图需要设置栅格所采用的分辨率,输出格式包括EMF、EPS等打印格式、PDF、SVG以及BMP、JPEG、PNG、TIGG、GIF等图片格式。页面布局控件PageLayout管理硬拷贝输出的页面布局,其是页面布局实现的首要接口。由要素Element、页面Page和布局设置组成。Element是地图框架的各种对象,也包括地图对象;Page表达布局输出的纸张;页面布局对象会自动创建咬合向导、咬合网格、标尺设置。三、实现思路与过程(一)菜单、控件及引用准备在主程序的地图控件上方添加PageLayoutControl。Dock设置为Fill;Visual设置为False;同时需要在ToolbarControl的属性中添加PageLayout的相应工具条。在File下拉菜单下添加“打印”,命名为miPrint,Visual设置为False。在地图表现的下拉菜单下添加两项分别为“显示地图”与“显示页面布局”,分别命名为miMap与miPageLayout,前者Checked设置为True,后者设置为False。由于需要进行相关的输出操作则需要添加相应的类库,引用并在代码区添加代码。具体引用是:由于相应操作比较简单,上述实验也有所涉及,不再在此赘述。(二)显示打印页面布局为主窗体的“显示页面布局”菜单项生成点击事件响应函数,并添加代码实现页面布局视图与地图视图的切换。42(三)显示地图控件为主窗体的“显示地图”菜单项生成点击事件响应函数,并添加代码实现页面布局视图与地图视图的切换。43(四)添加地图打印功能为主窗体的“打印”菜单项生成点击事件响应函数,并添加代码实现当前页面布局视图的打印。四、核心代码(一)页面布局视图与地图视图的切换44如上述代码所示,为实现页面布局视图与地图视图的切换,需要同时与函数axToolbarControl1.SetBuddyControl及axTOCControl1.SetBuddyControl建立关系。无论是“显示地图”控件还是“显示页面布局”控件其作用原理都是相同的,因此只在此列举一例子。(二)添加打印机功能添加打印机功能需要分别通过IPrinter、IPaper及IPage接口,分别设置打印功能所需要的默认打印机、纸张属性及页面设置。部分代码实现如下内容所示:对于打印点击事件的提示信息,需要考虑到页面布局设置的默认打印机,并输出其名称。同时需要根据具体情况,决定是否继续,可以根据“取消”点击,结束此次操作。由于,本计算机没有打印机预设所以,无法查看此功能是否实现,及具体的提示信息。具体代码如下所示内容:五、运行效果保存代码及控件并运行程序,如图1所示点击并勾选“显示页面布局”菜单项后,可以看到程序运行结果如图2所示视图,纵向页面。此时激活File下拉单中的“打印”菜单项,点击该菜单后最终显示效果如下图3所示,由于本机没有设置默认打印机,所以获取失败。总之,说明该程序运行正常。图1点击显示页面布局45图2页面布局的显示图3打印操作后显示46六、功能拓展(思考题)正如,前面所提到的若计算机没有设置默认打印机,则会引发程序错误,点击“确定”时,即会报错。错误原因在于若获取打印机失败,没有一定的终止操作,使得程序一直进行下去,出现运行到显示打印机名称信息的界面,而又无法显示。所以,应该在获取打印机失败后添加解释语句。添加语句如下,具体报错情况如图4所示:图4报错内容提示47实习五地图的制图文件输出一、实习目的1.通过简单的实习操作,增加对于地图制图以及输出的理解;2.掌握对地图增加控件并显示信息的简单操作处理的各接口的使用及相关操作,以输出相关地图信息;3.通过增加地图编制的功能,更进一步了解对地图的编辑及操作;4.在上述内容基础上进行拓展开发,如输出路径的选择等。二、实习概况与要求地图的制图输出是整个地图制作的重要一部分,需要什么样的输出效果及输出格式对应应用需求都是有不可或缺的意义。地图输出主要有两种方式,第一种便是借助打印机或者绘图仪进行硬拷贝输出;第二种便是将地图转换为通用格式的栅格文件,便于在系统中的使用。在输出过程中需要进行图幅的整饰即设置如指北针、图幅名称、比例尺及输出格式等信息。格式转换输出数字地图需要设置栅格所采用的分辨率,输出格式包括EMF、EPS等打印格式、PDF、SVG以及BMP、JPEG、PNG、TIGG、GIF等图片格式。页面布局控件PageLayout管理硬拷贝输出的页面布局,其是页面布局实现的首要接口。由要素Element、页面Page和布局设置组成。Element是地图框架的各种对象,也包括地图对象;Page表达布局输出的纸张;页面布局对象会自动创建咬合向导、咬合网格、标尺设置。三、实现思路与过程(一)菜单、控件及引用准备在File菜单项下添加一个下拉菜单,文本属性为地图输出,Visual属性设置为False,名称为miOutput,其他内容的属性设置可以参照miPrint,进行进一步的设置。由于相应操作比较简单,上述实验也有所涉及,不再在此赘述。(二)添加地图输出功能为主窗体的“地图输出”菜单项生成点击事件响应函数,并添加代码实现地图文件的输出。具体功能实现代码如下所示:48四、核心代码(一)变量定义与视图输出页面视图的输出,需要根据系统内的特定接口进行访问记输出,接口有IActiveView、IExport及IPrintAndExport,视图控件主要是通过对当前视图的识别进行页面布局的输出。(二)文件输出本实习内容限定输出结果为JPEG与doc因此需要应用到相应的类进行输出。由于IPrintAndExport.Export是一个五参数的函数,具体参数如下:因此,输出函数中也同样需要5个参数信息,具体参数如下内容所示:49五、运行效果保存代码及相应控件后,运行程序。点击菜单栏中File下的“地图输出”项目,如图1所示。查看在指定路径地址是否存在该文件,查看是存在的,如图2所示,具体打开查看信息内容如图3所示,于原图无异。由于输出图片内容,是镶嵌在纸张上的,所以在放大后进行截取。图1菜单栏的“地图输出”选项图2输出的文件信息图3图片信息查看50六、功能拓展(思考题)从上述的演示功能来看,由于输出格式与路径均是固定的,因此在实际应用中的意义不大。我们需要考虑如何设置输出的格式以及根据需求制定的路径中去,具体可设置一个新的Windows进行具体操作,具体内容如下。通过对象SaveFileDialog进行具体类型及路径的选择,通过它可以经过可视化对话框的形式保存成ArcGIS所能够识别的类型,而且具有较好的封装性。SaveFileDialog取代了之前版本的ExportFileDialog及ExportDialog对象,对于此对象的引用需要引用类库ESRI.ArcGIS.OutputUI进行具体的对象引用等功能的实现。具体代码实现内容如下:51根据菜单项的“地图输出”,进行点击,查看是否有自定义路径及图像类型,并查看该路径是否存在此类型文件,并打开进行查看具体信息,是否与打印界面要求一致。具体运行效果如下图所示,表明与设定的功能完成一致,能够很好的根据需求进行自定义路径类型的设置。图4点击“地图输出”图5点击后自定义输出路径及格式信息52图6桌面生成的Output.gif文件图7打开后的缩放图本次功能拓展的思路就是,根据需求在DeveloperHelp中查询帮助,若其中存在部分相关内容信息则可以进行查看或直接进行引用。如下述的基本步骤与代码都是进行相关操作的样例:531.Gettheoutputpathforthenewlayerfile—YoucanuseSaveFileDialogoranyotherformtogettheoutputfilenameforthenewlayerfile.2.CreateanewinstanceofaLayerFileclass—UsetheLayerFileclasstocreateanewinstanceofalayerfile.3.Bindthelayerfromthemapwiththenewlycreatedlayerfile—Onceyouhavecreatedthenewlayerfile,youneedtobinditwiththecurrentlayerfromthemapthatyouintendtosavetodisk.4.Savethelayerfile—Tocompletetheoperation,savethelayerfile.54实习六创建一个Shapefile文件一、实习目的1.通过简单的实习操作,增加对于空间数据的认识,包括几何数据与特征数据及相应的关联及后续的操作;2.掌握对要素类的认识,熟练掌握有关要素类类别、属性及组成的理解,并在此基础上进行操作,即创建Shapefile文件;3.熟悉进行要素类操作处理的各接口的使用及相关操作并用于创建,包括IFeatureClass、IWorkspaceFactory、IWorkspace及IFieldEdit等接口;4.通过增加地图编制的功能,更进一步了解对地图的编辑及操作,主要是空间数据的了解与处理;在上述内容基础上进行拓展开发等。二、实习概况与要求工作空间工厂是进行GIS空间数据处理的重要空间,而空间数据又包括几何与特征数据及相关处理,根据需求可以自定义空间的类型及相连数据源并可以通过接口IWorkspaceFactory的Create来进行创建。IFeatureWorkspace用于访问和管理基于要素的地理数据库组件如表、对象类、特征类等,是创建和打开对象的主要接口。而对于字段组对象的编辑接口IFieldEdit用于创建字段组的集合,或者对已有的字段组进行修改、添加、查找、删除等操作。有序的字段组合就像一个列表,也可以从指定位置(索引)访问某个特定的字段,即Field属性内容包括字段名称及字段类型,有整形、字符串形和几何形等。对象Field的字段编辑接口IFieldEdit用于创建新字段,并提供了一系列的字段属性的定义。地理要素类FeatureClass可以通过要素工作空间接口IFeatureWorkspace直接创建一个独立的要素类,也可以通过IFeatureDataset创建隶属于该数据集的要素类。均是通过方法CreateFeatureClass实现的,如下:Fields参数传递要素类的字段组。在一个地理空间数据库中创建要素类,在字段中必须有唯一标识符ObjectID和一个几何字段Geometry。本次实习内容就是创建一个可以用于空间数据处理的Shapefile文件,作为图层添加到当前地图。三、实现思路与过程(一)菜单、控件及引用准备在主窗体添加菜单项,文本为“数据操作”名称为miData,并向下拉单中添加文本为“创建Shapefile”菜单名称为miCreateShapefile。之后向当前项目添加ESRI.ArcGIS.Geodatabase与DataSourcesFile两项类库的引用。55(二)添加“创建Shapefile文件”功能函数如下述的实现代码,通过指定的上级路径、文件夹名和文件名,创建一个Shape文件。通过IWorkspaceFactory接口创建针对Shape文件的工作空间工厂对象,并通过参数创建相关工作空间(文件夹)用于包含Shape文件。由于Shape文件在概念层次上是一个要素类,需要创建并编辑该要素类所需的字段集。需要通过Fields对象接口IFieldsEdit进行创建字段组。具体通过Field的字段编辑接口IFieldEdit创建新字段并提供属性的定义等。不仅如此,考虑到需要处理的是地理数据所以需要创建地理定义,并设置其空间参考和几何类型,为后续的字段操作做准备。具体实现代码如下:56添加布尔型成员函数AddFeatureClassToMap,用于将指定的要素类以图层的形式添加到类保存的地图对象中,并同时指定图层的名称。通过IFeatureLayer接口创建要素图层对象,将要素类以层的形式进行操作。最后需要将创建好的图层添加到地图对象,并将地图对象转换为当前活动视图。具体实现如下:57(三)实现创建Shape文件在主窗体视图设计中,为“创建Shapefile”菜单项生成点击事件响应函数,并添加代码调用DataOperator类中的相关方法,创建Shape文件,并使其以图层形式添加到地图中。具体实现如下内容:四、核心代码(一)创建Shape文件的工作空间ShapefileWorkspaceFactoryClass是IWorkspaceFactory接口的一个具体的执行类,用于创建有关Shape文件的工作空间对象。该接口通过Create方式创建相应的空间,而对于Create如下共有四个参数,即包括上级路径、名称和属性等。对于IName接口需要联系到ArcGISde定义下进行转换。publicIWorkspaceNameCreate(stringparentDirectory,stringName,IPropertySetConnectionProperties,inthWnd);58(二)创建并编辑字段对于字段的操作,需要应用到IField接口创建字段组集合,同时需要注意进行field识别类型的转换。IFieldEdit是继承IField的,因为IField的属性大部分是只读的(read-only),所以IFieldEdit就在IField的基础上多了个只写的属性也就出现_2等原因了。IFields是IField的集合,有AddField方法;另外就是几个类型要搞清楚,这里也理一下:esriFieldType字段类型,除了int、string与double等常见类型外还包含了esriFieldTypeGeometry的类型;esriGeometryType几何类型,指点、线、面等多种类型;esriFeatureType要素类型,包括简单要素类、复杂要素、注记、维要素、Covering和Raster等。当使用具体是属性时,查看帮助时有这样一段表述:WhenusingC#(andother.NETlanguages)youmustappendan"_2"tothepropertyyouwanttosetonthisinterface.ForexamplefieldEdit.Name_2="NewFieldName".所以正确的表述如下。对于其他字段的创建与编辑与此相同。(三)创建地理定义分别通过接口IGeometryDefEdit和ISpatialReference设置其空间参考和几何类型,并关联到IMap接口中,进行具体的设置。并没有难点。具体实现如下代码:五、运行效果运行程序,点击“数据处理”的“创建Shapefile”菜单项,如图1所示,然后,可以查看到新建图层“ObservationStations”显示在地图上的当前视图,如图2所示。说明,创建Shapefile成功。图1菜单项59图2新建图层的显示六、功能拓展(思考题)(一)自定义字段添加创建一个Shapefile,使用World的空间参考。添加“人口”字段为长整形,“名称”字段为字符型且最大长度为30。字段的创建与编辑基本步骤是类似的,具体实现如下。60(二)通过ArcCatalog进行Shapefile创建1.启动ArcCatalog并在ArcCatalog中的目录树中,点击要将shp存放的目录,点击右键,弹出快捷菜单“new”再选择“Shapefile”。图3目录树创建Shapefile2.在Createnewshapefile对话框中,输入Name,即shp文件的文件名。FeatureType:要建立的Shapefile的类型(点、线或者面)。SpatialReference:空间参考。根据设定要求如上述设置。图4参数设置613.在Shapefile文件上右键,弹出快捷菜单,选择属性。在属性对话框中点击字段fields,就可以创建属性字段了。这样Shapefile文件就创建完成了,你就可以将Shapefile文件装在在ArcMap中就行矢量化的工作了。图5创建属性字段4.将创建完的Shapefile文件拉倒ArcMap地图上,如下图同样可以查看到图层“ObservationStations”显示在地图上的当前视图,如图6所示。说明,创建Shapefile成功。图6当前视图62实习七地理要素的编辑一、实习目的1.通过简单的实习操作,增加对地理要素的认识,包括几何与特征信息;2.掌握对要素类的认识,熟练掌握有关要素类类别、属性及组成的理解,并在此基础上进行操作,即对要素的编辑操作;3.熟悉进行要素类操作处理的各接口的使用及相关操作并用于编辑;4.通过增加地图编制的功能,更进一步了解对地图要素的编辑及操作,主要是空间信息的了解与处理;在上述内容基础上进行拓展开发等。二、实习概况与要求GIS中的地理要素代表着现实世界中的实体特征,而这些实体特征的位置可以通过几何表达,几何是一个对象定义的空间位置和相关几何形状的对象几何,基本路线包括点、多点、线和多边形。其构成图元有段、路径和环,均支持缓冲和裁剪操作。几何接口IGeometry为所有形状Shape的组件类所继承,提供了访问几何对象的属性及行为。由于要素是一个空间对象,同时作为要素类的一个成员对应着要素类的表的一行。都有一个相关联的Shape,该类型由FeatureClass定义。最简单的要素是简单要素,可以根据要求自定义设定其他要素。IFeature接口拓展了其所继承的IObject和IRow接口新增了处理形状和属性的特征功能。本次实习主要从要素编辑相关组件开始,探讨如何新建地理要素类并编辑地理要素,通过实现在地图上添加要素类,通过鼠标在地图上左键单击来确定新建地理要素的几何信息,向Shapefile中添加要素。三、实现思路与过程(一)菜单、控件及引用准备在主窗体菜单项“数据操作”添加下拉单,文本为“添加要素”菜单名称为miAddFeature,其可用属性Enabled为false。(二)增加“新增要素”函数在DataOperator中添加成员函数AddFeatureToLayer,在鼠标点击处,在给定的名称的图层上新增要素,并指定要素名称。添加参数指定图层名称、将被添加要素的名称和将被添加要素的坐标信息。以此用于相应的点击操作及坐标定位。对地图中的图层进行遍历,当某图层的名称与指定名称相同,跳出循环。通过IFeatureLayer接口访问获取图层,并进一步获取要素类。通过IFeature接口访问要素类新创建的要素,对新创建的要素进行编辑,将其坐标、属性值进行设置。最后需要将地图转换为活动视图,对活动视图进行刷新,新添加的要素被展示在控件上。最终函数返回值为true。其中很多内容都是以前实习内容涉及过的,如遍历、获取和活动视图等;并没有太大的难度。具体函数实现代码如下:6364(三)实现添加要素功能为菜单项“添加要素”生成点击响应事件,以设置按钮是否被勾选。在勾选的情况下,在地图上按下鼠标才会在新建图层上添加要素。由于,在刚设置时Enabled值为false,所以需要在执行完创建Shapefile之后进行恢复,如下:否则本菜单项会一直处于不可用状态,无法进行后续操作。勾选菜单项具体实现代码如下:需要为地图控件对象添加“鼠标按下”事件响应函数,并添加代码调用DataOperator类中的相关方法,在鼠标按下处创建要素、添加至新图层,并使其显示在地图上。功能实现代码如下:四、核心代码(一)对要素属性进行编辑既然要对字段进行创建与编辑,那么必须设置其具体属性信息。可以根据需求设定其类型为点或面等,并将其关联到先前所创建的Name字段上,通过其进行具体的编辑工作。属性值就包括坐标和名称的二元参数,最后进行保存和判断工作。具体实现如下:65对于具体坐标实现需要通过IPoint接口,保存鼠标按下的坐标包括mapX和mapY,用对象PutCoords进行具体的记录保存。再对其通过添加要素类到图层“观测站”,对其进行相应的编辑操作。具体实现如下:总的来说,通过一个又一个的实习操作,发现每个程序的实现都有固定的套路及实现途径,我们所能够做的就是如何进行代码实现,甚至是最优化的结果。每次实现功能,代码慢慢发现都是很相似的,只不过从相似中发现他的不同本质罢了。程序设计思想方法才是最为珍贵的。五、运行效果运行程序,在创建Shapefile之后,“添加要素”选项可用,进行勾选,如图1所示,在勾选之后任意点取地图对象中的point,可以看到成功的对其进行了编辑如图3左中侧,海洋中的红点选项。图1添加要素选项勾选如图2所示,对于新建图层与原图层是并不矛盾的,而是相互叠加的,如图中红色圈中的新建图层。所以,我们通过此可以更好的认识地图的图幅叠加、图层覆盖等等地图的特性所在。当然,本次实习至少简单进行要素的创建与编辑,而且类型为点point,我们依然可以通过此种思想,继续进行如面和多边形等的要素的创建与相应的编辑操作。66图2要素叠加图3运行结果六、功能拓展(思考题)本次实习的内容,主要是针对点的要素的创建与编辑的,显然在地图图幅整饰及处理中是不够的。我们还需要进行对多边形的绘制及相应要素的编辑等等操作,这也是下一个实习的内容即“地理要素交互编辑”部分。所以,不再在此赘述。实验中,有时经常会发生“某某接口无法嵌入,请调整……”的问题,只需要在对于的类库属性中“嵌入互操作类型”修改为false即可。67实习八空间关系查询一、实习目的1.通过简单的实习操作,增加对地理要素的认识,包括几何与特征信息;2.掌握对要素类的认识,熟练掌握有关要素类类别、属性及组成的理解,并在此基础上进行操作,即对要素的编辑操作;3.熟悉进行要素类操作处理的各接口的使用及相关操作并用于编辑,更进一步了解对地图要素的编辑及操作;4.通过增加地图编制的功能,,主要是空间信息的了解与处理;在上述内容基础上进行拓展开发,如进行查询信息的显示等。二、实习概况与要求空间分析是GIS中的十分重要的一环,也正是地理信息系统的精髓所在。可以从空间物体的空间位置、联系等内容出发,利用空间统计学、拓扑学及几何学的内容来描述空间要素的构成与联系,并进行定量的描述。地理要素代表着现实世界中的实体特征,而这些实体特征的位置可以通过几何表达,几何是一个对象定义的空间位置和相关几何形状的对象几何,基本路线包括点、多点、线和多边形。其构成图元有段、路径和环,均支持缓冲和裁剪操作。ArcEngine内的QueryDef组件进行要素内容的查询,查询的结果包含在Cursor中,被选择的要素也可以构成选择集SelectionSet,通过枚举ID号进行代表被选择要素的标识符。利用查询定义进行要素选择的核心是通过查询过滤器QueryFilter来进行空间和属性进行过滤。由于要素是一个空间对象,同时作为要素类的一个成员对应着要素类的表的一行。都有一个相关联的Shape,该类型由FeatureClass定义。最简单的要素是简单要素,可以根据要求自定义设定其他要素。本次实习主要从空间对象的定位查询开始,用于搜索亚洲境内的人口
本文档为【GIS程序设计】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
个人认证用户
绘画的问号
暂无简介~
格式:pdf
大小:5MB
软件:PDF阅读器
页数:0
分类:高中语文
上传时间:2019-12-13
浏览量:0