GIS工程开发报告.doc

上传人:仙人指路1688 文档编号:2708401 上传时间:2023-02-23 格式:DOC 页数:40 大小:2.22MB
返回 下载 相关 举报
GIS工程开发报告.doc_第1页
第1页 / 共40页
GIS工程开发报告.doc_第2页
第2页 / 共40页
GIS工程开发报告.doc_第3页
第3页 / 共40页
GIS工程开发报告.doc_第4页
第4页 / 共40页
GIS工程开发报告.doc_第5页
第5页 / 共40页
点击查看更多>>
资源描述

《GIS工程开发报告.doc》由会员分享,可在线阅读,更多相关《GIS工程开发报告.doc(40页珍藏版)》请在三一办公上搜索。

1、GIS工程开发报告 目录1 .实习任务:22.实习环境:23.实习步骤:23.1. 基于ArcGIS的空间数据库设计与构建23.1.1图层规划设计33.1.2空间数据库逻辑结构设计33.1.3基于ArcCatalog构建地理数据库物理结构43.1.4地理实体空间和属性数据入库53.2.ArcMap地图符号化83.3.基于ArcMAap二次定制开发103.3.1ArcMap工具条定制:103.4.模块的使用与效果133.4.1图查属性133.4.2属性查图143.4.3放大镜153.4.5以上的程序代码163.5.基于VB工具的视图查询软件的制作:213.5.1配置环境和设置界面213.5.2设

2、计工具的功能实现223.5.3成果演示:243.5.4“GIS视图查询”的源程序:294实习总结401 .实习任务:1.根据四川省交通旅游图,建立四川省交通旅游基础地理信息数据库,并基于ArcGIS平台开发简单的交通旅游信息查询实验系统。2.在VB上面建立一个简单的视图查询软件,基本功能类似于任务一。2.实习环境: Windows操作系统、ArcGIS平台、Access数据库管理系统、VBA开发工具、VB软件3.实习步骤:3.1. 基于ArcGIS的空间数据库设计与构建3.1.1图层规划设计 根据四川的交通运输图,我们将其分为四个部分:景点、行政区划、水系、道路。其中,景点包括:世界自然与文化

3、遗产,国家重点风景名胜区,国家森林公园、自然保护区,省级风景名胜区,革命纪念地,一般景点,温泉寺庙。行政区划包括:省级行政中心、市级行政中心、县级行政中心、行政区划。水系包括:河流和湖泊。道路包括:高速公路、国道、省道、铁路。图层规划结果如右边图一所示:3.1.2空间数据库逻辑结构设计 根据上一步的规划,对各个图层进行逻辑结构设计或者说是定义,其结构如下: 世界自然与文化明遗产规划为点状要素,属性包括OBJECTID、SHAPE、name,它的设计如下面图二和图三所示: 河流规划为线状要素,它的属性包括OBJECTID、SHAPE、name、remark、SHAPE_Length,它的逻辑设计

4、如下面图四和图五所示: 省级行政中心规划为点状要素,它的属性包括OBJECTID、SHAPE、name,它的逻辑设计如下面图六和图七所示:高速公路规划为线状要素,属性包括OBJECTID、SHAPE、name,remark、SHAPE_Length它的逻辑设计如下面图八和图九所示:其他的图层要素也是如上面所示的几个要素一样,根据其要素特征进行具体的规划设计,包括其不同的要素类型,不同的属性数据等等。3.1.3基于ArcCatalog构建地理数据库物理结构打开ArcCatalog,选中需要建立数据库的文件夹,并建立数据库T&T,如图十和图12所示:然后在该数据库下建立四个数据集:景点、水系、行政

5、区划、道路。建立景点这个要素集,并为其设置好要素集的坐标系统,即选择高斯投影中的北京54(17带)投影坐标系。如下面图11所示:则建立水系、行政区划、道路的要素集也如同图11景点的要素集一样,他们的坐标系统选择与景点的坐标系统选择是一样的,故略去。四个要素集建立后,再给四个要素集分别建立要素类,也就是给要素集景点建立如下要素类:世界自然与文化遗产,国家重点风景名胜区,国家森林公园、自然保护区,省级风景名胜区,革命纪念地,一般景点,温泉寺庙。给要素集行政区划建立如下要素类:省级行政中心、市级行政中心、县级行政中心、行政区划。给要素集水系建立如下要素类:河流和湖泊。给要素集道路建立如下要素类:高速

6、公路、国道、省道、铁路。其建立过程如最上面步骤1.2图一所示,全部建立后的结果如最上面的图一所示。3.1.4地理实体空间和属性数据入库进行地图配准: 将给定的四川交通运输旅游图添加进来,并为该图在试图的数据框属性中设定好作坐标系统,如下图图13所示: 在工具条中选择影像配准,为原始的四川交通旅游图实现地图配准,如下面图14所示:配准的具体操作是选择四个角点,对其赋予坐标,左下角的坐标为(0,0),左上角坐标为(0,500000),右左上角坐标为(700000,500000),右下角坐标为(700000,0)。左后配准的精度如下面图15所示:屏幕跟踪矢量化完成了原始地图的配准之后就可以将数据库中

7、的要素类添加到ArcMap中,以对其进行矢量化操作,添加要素类进来后如右边下面图16所示:然后在编辑器中点击开始编辑,然后在目标中选择要矢量化的要素进行矢量化操作。也就是根据各个要素类的不同特征分别对其进行矢量化,并在同时可对每次矢量化的要素输入其属性信息。具体的矢量化操作工程为:(1)加载数据库单击添加数据,选择已建立的数据库和校正好的图像。(2)矢量化并使矢量化数据入库开始矢量化,单击编辑器-开始编辑,使矢量化工具变为可用。在任务下拉框里选择新建要素,目标下拉框里选择要矢量化的要素类型。(3)属性添加选中点、线或面状目标,右击,选择打开属性表,在属性表对话框中设置目标的各种属性。(4)空间

8、几何信息入库及实体相关属性入库单击保存编辑,即可保存矢量化的结果,并使矢量化数据及其属性入库。(5)矢量化完成后,对图形进行修饰,使其清晰明确。矢量化操作后的初始的结果如下面图17所示:3.2.ArcMap地图符号化 对矢量化后的图形,结合实际的要求和应用的需求,对各个图层的属性进行设置,使图形更加的实用和美观。即就是对各个图层的地图符号进行设置,以尽量符合实际形式并保证能为用户所明白,并且需要保证地图的美观。最后的图形如图18和图19所示:3.3.基于ArcMAap二次定制开发3.3.1ArcMap工具条定制: 在工具中选择定制,再在工具条一栏中选择新建,用来建立一个“查询工具”的工具条,其

9、建立过程如下面图20所示:然后在命令中为新建的“查询工具”添加相应的工具,其中一些简单的工具可以在命令中直接选中添加到新建的工具条中,而个别比较复杂的命令需要在宏里面定义建立,如“属性查图”、“放大镜”都是在宏里面定义建立的,然后再添加到了“查询工具”中。最后的工具条如下面图21所示:属性查图和放大镜、添加书签、返回书签就表现了可以用宏来设置工具,其具体过程如下:在“工具”菜单中,选择“宏”菜单中的“宏”子菜单。在“宏”对话框中,输入名称,点击“创建”创建一个宏。在弹出的代码窗口输入相应的功能实现代码。在宏对话框中建立“属性查图”这一工具的过程如右边图22所示:实现思想就是:(1)创建一个宏实

10、现地图的查询创建一个宏“Query”在弹出的代码窗口输入以下代码:Sub Query() UserForm1.ShowEnd Sub由此,查询扩展模块的总体框架即可完成。(2)设计查询窗体界面选择图层组合框:在其下拉条目中选择所要操作的图层。属性列表框:列表中显示所选图层的所有属性。在其条目中选择所要操作的属性。操作符框架包括9个可选的操作符:。选定图层及属性后,才能选择操作符。查询条件表达式文本框:显示所选择的图层及属性,并可输入要查询的数值。功能按钮框架包括4个可选的按钮:查询、清除、恢复、关闭。单击实现不同的功能具体实现如下:然后点击创建,进入VB中进行编程实现其功能,如下面图23所示:

11、对于图层选择框,需要进行编程实现:如下面图24所示:其他子块的实现也一样,最后得到的工具就是图25:而放大镜、添加书签、返回书签也都和属性查图在宏里面的定义步骤是一样的,不同的就是根据其功能所采用的程序编辑代码不同而已。如图26 所示的那样,CreatMargnifierWindos_Clink即为创建的放大镜,AddSpatialBookMark即为创建的添加书签,ZoomToBookMark即为创建的返回书签。3.4.模块的使用与效果3.4.1图查属性 点击欲查属性的空间地物,如点击图示达州市,便弹出该目标的属性,如下面图27所示 图273.4.2属性查图点击属性查图按钮,弹出属性填充对话

12、框,如下面图28所示:在相应的选择条框中选择好待查目标的属性值,如下面图29选择“市级行政中心”,选择name=”攀枝花市”:点击查询,具有所填属性的目标地物将在图中高亮显示,如下面图30所示: 图303.4.3放大镜只需点击工具条“查询工具”中的放大镜就可以把原图上面的地物信息放大为我们自己设定的260%,如下面图31所示:3.4.4添加书签与返回书签添加书签就是为了在未来的操作之后还能回来当前现在的地图状态而在此特别设定的书签,等之后的操作完成之后,只需要再点击“返回书签”便可回到之前添加着书签的地方,但是需要注意的是,如果之前使用过书签功能,需要打开“视图”中的“书签”的“管理”。然后点

13、击“移出所有”,如下面图32所示:然后再添加,以便后面正确的使用“返回书签”回到现在要设定书签的地方。3.4.5以上的程序代码图查属性:Private Sub UIToolControl1_MouseDown(ByVal button As Long, ByVal shift As Long, ByVal x As Long, ByVal y As Long)Dim pMxDoc As IMxDocument Dim pActiveView As IActiveView Dim pIdentifyDialog As IIdentifyDialog Dim pIdentifyDialogProp

14、s As IIdentifyDialogProps Dim pEnumLayer As IEnumLayer Dim pLayer As ILayer Set pMxDoc = ThisDocument Set pActiveView = pMxDoc.FocusMap Set pIdentifyDialog = New IdentifyDialog Set pIdentifyDialogProps = pIdentifyDialog Set pIdentifyDialog.Map = pMxDoc.FocusMap Set pIdentifyDialog.Display = pActiveV

15、iew.ScreenDisplay pIdentifyDialog.ClearLayers Set pEnumLayer = pIdentifyDialogProps.Layers pEnumLayer.Reset Set pLayer = pEnumLayer.Next Do While Not pLayer Is Nothing pIdentifyDialog.AddLayerIdentifyPoint pLayer, x, y Set pLayer = pEnumLayer.Next Loop pIdentifyDialog.ShowEnd Sub属性查图Private Sub User

16、Form_Activate() Dim pMxDoc As IMxDocument Set pMxDoc = ThisDocument Dim pMap As IMap Set pMap = pMxDoc.FocusMap Dim pLayer As ILayer Dim i As Integer For i = 0 To pMap.LayerCount - 1 Set pLayer = pMap.Layer(i) ComboBox1.AddItem pLayer.Name Next iEnd SubPrivate Sub ComboBox1_Change() Dim pMxDoc As IM

17、xDocument Set pMxDoc = ThisDocument Dim pMap As IMap Set pMap = pMxDoc.FocusMap Dim pLayer As ILayer Dim pFLayer As IFeatureLayer Dim i As Integer For i = 0 To pMap.LayerCount - 1 Set pLayer = pMap.Layer(i) If pLayer.Name = ComboBox1.Text Then Set pFLayer = pLayer Exit For End If Next i Dim pFClass

18、As IFeatureClass Set pFClass = pFLayer.FeatureClass ListBox1.Clear Dim intLoop As Integer Dim Str As String Str = For intLoop = 0 To pFClass.Fields.FieldCount - 1 Str = pFClass.Fields.Field(intLoop).Name ListBox1.AddItem Str Next intLoop End SubPrivate Sub CommandButton11_Click() TextBox1 = End SubP

19、rivate Sub CommandButton12_Click() Dim pMxDoc As IMxDocument Set pMxDoc = ThisDocument Dim pMap As IMap Set pMap = pMxDoc.FocusMap Dim pLayer As ILayer Dim pFLayer As IFeatureLayer Dim i As Integer For i = 0 To pMap.LayerCount - 1 Set pLayer = pMap.Layer(i) If pLayer.Name = ComboBox1.Text Then Set p

20、FLayer = pLayer Exit For End If Next i If ComboBox1.Text = Then MsgBox 请选择要恢复的图层! Else Dim pQFilter As IQueryFilter Set pQFilter = New QueryFilter pQFilter.WhereClause = OBJECTIDEnd SubPrivate Sub CommandButton3_Click() TextBox1.Text = TextBox1.Text & =End SubPrivate Sub CommandButton4_Click() TextB

21、ox1.Text = TextBox1.Text & End SubPrivate Sub CommandButton5_Click() TextBox1.Text = TextBox1.Text & End SubPrivate Sub CommandButton6_Click() TextBox1.Text = TextBox1.Text & =End SubPrivate Sub CommandButton7_Click() TextBox1.Text = TextBox1.Text & & And & End SubPrivate Sub CommandButton8_Click()

22、TextBox1.Text = TextBox1.Text & & Or & End SubPrivate Sub CommandButton9_Click() TextBox1.Text = TextBox1.Text & & Not & End Sub放大镜Sub CreatMargnifierWindos_Clink()Dim pMapInset As IMapInsetDim pMapInsetWindow As IMapInsetWindowDim pDataWindowFactory As IDataWindowFactorySet pDataWindowFactory = New

23、 MapInsetWindowFactoryIf pDataWindowFactory.CanCreate(Application) ThenSet pMapInsetWindow = pDataWindowFactory.Create(Application)Set pMapInset = pMapInsetWindow.MapInsetpMapInset.ZoomPercent = 260pMapInsetWindow.Show TrueEnd IfEnd Sub添加书签Sub AddSpatialBookMark()Dim pmxdoc As IMxDocumentDim pmap As

24、 IMapDim pactiveview As IActiveViewDim pareaofinterest As IAOIBookmarkDim pmapbookmarks As IMapBookmarksSet pmxdoc = Application.DocumentSet pmap = pmxdoc.FocusMapSet pactiveview = pmapSet pareaofinterest = New AOIBookmarkSet pareaofinterest.Location = pactiveview.Extentpareaofinterest.Name = my boo

25、kmarkSet pmapbookmarks = pmappmapbookmarks.AddBookmark pareaofinterestEnd Sub返回书签Sub ZoomToBookMark()Dim pmxdoc As IMxDocumentDim pmapbookmarks As IMapBookmarksDim penumbookmarks As IEnumSpatialBookmarkDim pbookmark As ISpatialBookmarkSet pmxdoc = Application.DocumentSet pmapbookmarks = pmxdoc.Focus

26、MapSet penumbookmarks = pmapbookmarks.Bookmarkspenumbookmarks.ResetSet pbookmark = penumbookmarks.NextDo While Not pbookmark Is NothingIf pbookmark.Name = my bookmark Thenpbookmark.ZoomTo pmxdoc.FocusMappmxdoc.ActivatedView.RefreshExit SubEnd IfSet pbookmark = penumbookmarks.NextLoopEnd Sub3.5.基于VB工

27、具的视图查询软件的制作:3.5.1配置环境和设置界面制作本软件所需要的环境应该是环境:ArcGisEngine 9.1 + Microsoft Visual Basic 6.0 打开VB6.0后,再在工程中打开部件和引用,添加相关的内容工具,如ESRI ToolbarControl, ESRITOCControl 、ESRILicenseControl、ESRIMapControl等,如图33和图34所示:图33 图34接下来要做的就是设计所做软件的主界面的布局,如图36所示:右侧大的MapcControl命名为MapControl1,为显示地图主界面;左下角的MapcControl命名为Ma

28、pControl2,作为地图鹰眼,左上角的TOCControl用以显示MapControl1中所具有的图层。在最上面菜单栏中设置有四个菜单:文件、视图、查询、帮助,这几个菜单下面分别具有其所能实现的功能,如图35所示;在菜单栏下面添加一个ToolbarComtrol,在它里面可以添加需要的按钮;界面的下面为显示地图的比例尺以及光标所移动到的位置。图35 图363.5.2设计工具的功能实现 首先将TOCControl和ToolbarControl都关联到MapControl1,如图37所示ToolbarControl的关联选项:并且可在其“项”这一栏中添加适当的按钮,如图38所示。地图鹰眼的实现

29、主要是需要进行编程,如下面图39所示: 图39其他很多的工具,包括菜单里面的工具都主要是进行编程实现,没有别的什么步骤,所以这里就不再赘述,而把实习的源程序附在后面。这里需要说明的还有以下内容:在“查询”菜单下面的“属性查图”工具中,使用了另外一个Form来显示;在“帮助”菜单下面的“关于文件”也是定义了一个另外的窗体来显示。3.5.3成果演示: 先打开所做的“GIS视图查询”,如图所示,左下角显示的是光标的位置坐标。图在“文件”中打开所要显示的地图,如下图所示:工具栏中的工具就不做累赘说明,下面说明菜单栏的工具以及下面自己所做的工具;在“文件”菜单下面的四个工具里,“打开”已经使用了,而“加

30、入图层”也就是用来添加一个新图层的,“导出地图”是用来把在左边大幅框中显示的地图用“.JPG”的格式导出,如下面图42和43所示: “视图”菜单里面的三个功能也都和工具条里面系统自带的相应工具的功能一样,不过就是自己用代码实现的而已。如下面图44和图45所示,将全局视图用“视图”菜单中的“定点放大”进行放大后成为图45的效果:图45“视图”菜单中的“定点缩小”功能与上面的“定点缩小”类似,差别也就是将地图缩小了。而“漫游”工具也就是可以把地图拖至自己想要的图幅位置。 在“帮助”菜单中“关于文件,我将其设置成了如下图46显示: 图46在“查询”菜单中设置了两个工具“属性查图”和“图查属性”。“属

31、性查图”可以在属性查图工具框中根据用户自己选择的属性内容在地图上高亮度显示出来,并且能够弹出一个MsgBox用以调出被选中地物要素的所有属性信息,如下面图47所示:图47 而“图查属性”就是在地图上选中一个地物,点击后就会高亮度显示并且弹出一个MsgBox显示出被选中读物的属性信息,如图48所示一样:工具条中的工具都是大家所熟识的,也就不做赘述。下面介绍主界面下面的工具: 最左下角的显示的是光标随时移动到的位置坐标,单位是米(m)。在显示地图的主界面MapControl1的下面可以显示出地图的比例尺,也就如下图49所示在右边的“当前比例尺:1:1850115.36407854”,而也可以自己人

32、为的设定图幅比例尺的大小,在其左边就有一个“设置比例尺1:”只要在后面的框里面填入数字,地图马上就显示为所设定的比例尺大小。并且需要设置的比例尺大小和右边显示出来当前地图的比例尺大小任何时候都是大小一样的。 3.5.4“GIS视图查询”的源程序:比例尺的设置及显示:Private Sub MapControl1_OnExtentUpdated(ByVal displayTransformation As Variant, ByVal sizeChanged As Boolean, ByVal newEnvelope As Variant)Label1.Caption = 1: & MapCon

33、trol1.MapScale 显示比例尺Text1.Text = MapControl1.MapScaleEnd SubPrivate Sub Command1_Click()设置地图显示比例尺MapControl1.MapScale = Val(Text1.Text)MapControl1.RefreshEnd SubPrivate Sub MapControl1_OnMouseDown(ByVal button As Long, ByVal shift As Long, ByVal x As Long, ByVal y As Long, ByVal mapX As Double, ByVa

34、l mapY As Double) If pan.Checked = True Then MapControl1.pan End If If query2.Checked = True Then Dim pPoint As IPoint Dim pMap As IMap Dim pEnvelope As IEnvelope Dim pSpatialFilter As ISpatialFilter Dim pEnumLayer As IEnumLayer Dim pFeatureLayer As IFeatureLayer Dim pFeatureClass As IFeatureClass D

35、im pFeatureCursor As IFeatureCursor Dim pFeature As IFeature Dim pUID As New UID Dim ShapeFieldName As String Dim pFeatureSelection As IFeatureSelection Set pMap = MapControl1.ActiveView.FocusMap If pMap.LayerCount = 0 Then Exit Sub Set pPoint = MapControl1.ActiveView.ScreenDisplay.displayTransforma

36、tion.ToMapPoint(x, y) Set pEnvelope = pPoint.Envelope pEnvelope.Expand 5000, 5000, False Set pSpatialFilter = New SpatialFilter Set pSpatialFilter.Geometry = pEnvelope pSpatialFilter.SpatialRel = esriSpatialRelIntersects pUID = 40A9E885-5533-11D0-98BE-00805F7CED21 IFeatureLayer Set pEnumLayer = pMap

37、.Layers(pUID, False) pEnumLayer.Reset Set pFeatureLayer = pEnumLayer.Next Do While Not pFeatureLayer Is Nothing Set pFeatureSelection = pFeatureLayer Only search the selectable layers If pFeatureLayer.Selectable Then ShapeFieldName = pFeatureLayer.FeatureClass.ShapeFieldName Set pSpatialFilter.Outpu

38、tSpatialReference(ShapeFieldName) = pMap.SpatialReference pSpatialFilter.GeometryField = pFeatureLayer.FeatureClass.ShapeFieldName Set pFeatureClass = pFeatureLayer.FeatureClass Set pFeatureCursor = pFeatureClass.Search(pSpatialFilter, False) Do the search Set pFeature = pFeatureCursor.NextFeature Get the first feature If Not pFeature Is Nothing Then Set FindFeature = pFeature Exit if feature is valid pFeatureSelection.Add pFeature MapControl1.Refresh

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号