已阅读5页,还剩36页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
gis工程开发报告 39目录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设计工具的功能实现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.1.2空间数据库逻辑结构设计 根据上一步的规划,对各个图层进行逻辑结构设计或者说是定义,其结构如下: 世界自然与文化明遗产规划为点状要素,属性包括objectid、shape、name,它的设计如下面图二和图三所示: 河流规划为线状要素,它的属性包括objectid、shape、name、remark、shape_length,它的逻辑设计如下面图四和图五所示: 省级行政中心规划为点状要素,它的属性包括objectid、shape、name,它的逻辑设计如下面图六和图七所示:高速公路规划为线状要素,属性包括objectid、shape、name,remark、shape_length它的逻辑设计如下面图八和图九所示:其他的图层要素也是如上面所示的几个要素一样,根据其要素特征进行具体的规划设计,包括其不同的要素类型,不同的属性数据等等。3.1.3基于arccatalog构建地理数据库物理结构打开arccatalog,选中需要建立数据库的文件夹,并建立数据库t&t,如图十和图12所示:然后在该数据库下建立四个数据集:景点、水系、行政区划、道路。建立景点这个要素集,并为其设置好要素集的坐标系统,即选择高斯投影中的北京54(17带)投影坐标系。如下面图11所示:则建立水系、行政区划、道路的要素集也如同图11景点的要素集一样,他们的坐标系统选择与景点的坐标系统选择是一样的,故略去。四个要素集建立后,再给四个要素集分别建立要素类,也就是给要素集景点建立如下要素类:世界自然与文化遗产,国家重点风景名胜区,国家森林公园、自然保护区,省级风景名胜区,革命纪念地,一般景点,温泉寺庙。给要素集行政区划建立如下要素类:省级行政中心、市级行政中心、县级行政中心、行政区划。给要素集水系建立如下要素类:河流和湖泊。给要素集道路建立如下要素类:高速公路、国道、省道、铁路。其建立过程如最上面步骤1.2图一所示,全部建立后的结果如最上面的图一所示。3.1.4地理实体空间和属性数据入库进行地图配准: 将给定的四川交通运输旅游图添加进来,并为该图在试图的数据框属性中设定好作坐标系统,如下图图13所示: 在工具条中选择影像配准,为原始的四川交通旅游图实现地图配准,如下面图14所示:配准的具体操作是选择四个角点,对其赋予坐标,左下角的坐标为(0,0),左上角坐标为(0,500000),右左上角坐标为(700000,500000),右下角坐标为(700000,0)。左后配准的精度如下面图15所示:屏幕跟踪矢量化完成了原始地图的配准之后就可以将数据库中的要素类添加到arcmap中,以对其进行矢量化操作,添加要素类进来后如右边下面图16所示:然后在编辑器中点击开始编辑,然后在目标中选择要矢量化的要素进行矢量化操作。也就是根据各个要素类的不同特征分别对其进行矢量化,并在同时可对每次矢量化的要素输入其属性信息。具体的矢量化操作工程为:(1)加载数据库单击添加数据,选择已建立的数据库和校正好的图像。(2)矢量化并使矢量化数据入库开始矢量化,单击编辑器-开始编辑,使矢量化工具变为可用。在任务下拉框里选择新建要素,目标下拉框里选择要矢量化的要素类型。(3)属性添加选中点、线或面状目标,右击,选择打开属性表,在属性表对话框中设置目标的各种属性。(4)空间几何信息入库及实体相关属性入库单击保存编辑,即可保存矢量化的结果,并使矢量化数据及其属性入库。(5)矢量化完成后,对图形进行修饰,使其清晰明确。矢量化操作后的初始的结果如下面图17所示:3.2.arcmap地图符号化 对矢量化后的图形,结合实际的要求和应用的需求,对各个图层的属性进行设置,使图形更加的实用和美观。即就是对各个图层的地图符号进行设置,以尽量符合实际形式并保证能为用户所明白,并且需要保证地图的美观。最后的图形如图18和图19所示:3.3.基于arcmaap二次定制开发3.3.1arcmap工具条定制: 在工具中选择定制,再在工具条一栏中选择新建,用来建立一个“查询工具”的工具条,其建立过程如下面图20所示:然后在命令中为新建的“查询工具”添加相应的工具,其中一些简单的工具可以在命令中直接选中添加到新建的工具条中,而个别比较复杂的命令需要在宏里面定义建立,如“属性查图”、“放大镜”都是在宏里面定义建立的,然后再添加到了“查询工具”中。最后的工具条如下面图21所示:属性查图和放大镜、添加书签、返回书签就表现了可以用宏来设置工具,其具体过程如下:在“工具”菜单中,选择“宏”菜单中的“宏”子菜单。在“宏”对话框中,输入名称,点击“创建”创建一个宏。在弹出的代码窗口输入相应的功能实现代码。在宏对话框中建立“属性查图”这一工具的过程如右边图22所示:实现思想就是:(1)创建一个宏实现地图的查询创建一个宏“query”在弹出的代码窗口输入以下代码:sub query() userform1.showend sub由此,查询扩展模块的总体框架即可完成。(2)设计查询窗体界面选择图层组合框:在其下拉条目中选择所要操作的图层。属性列表框:列表中显示所选图层的所有属性。在其条目中选择所要操作的属性。操作符框架包括9个可选的操作符:。选定图层及属性后,才能选择操作符。查询条件表达式文本框:显示所选择的图层及属性,并可输入要查询的数值。功能按钮框架包括4个可选的按钮:查询、清除、恢复、关闭。单击实现不同的功能具体实现如下:然后点击创建,进入vb中进行编程实现其功能,如下面图23所示:对于图层选择框,需要进行编程实现:如下面图24所示:其他子块的实现也一样,最后得到的工具就是图25:而放大镜、添加书签、返回书签也都和属性查图在宏里面的定义步骤是一样的,不同的就是根据其功能所采用的程序编辑代码不同而已。如图26 所示的那样,creatmargnifierwindos_clink即为创建的放大镜,addspatialbookmark即为创建的添加书签,zoomtobookmark即为创建的返回书签。3.4.模块的使用与效果3.4.1图查属性 点击欲查属性的空间地物,如点击图示达州市,便弹出该目标的属性,如下面图27所示 图273.4.2属性查图点击属性查图按钮,弹出属性填充对话框,如下面图28所示:在相应的选择条框中选择好待查目标的属性值,如下面图29选择“市级行政中心”,选择name=”攀枝花市”:点击查询,具有所填属性的目标地物将在图中高亮显示,如下面图30所示: 图303.4.3放大镜只需点击工具条“查询工具”中的放大镜就可以把原图上面的地物信息放大为我们自己设定的260%,如下面图31所示:3.4.4添加书签与返回书签添加书签就是为了在未来的操作之后还能回来当前现在的地图状态而在此特别设定的书签,等之后的操作完成之后,只需要再点击“返回书签”便可回到之前添加着书签的地方,但是需要注意的是,如果之前使用过书签功能,需要打开“视图”中的“书签”的“管理”。然后点击“移出所有”,如下面图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 pidentifydialogprops 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 = pactiveview.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 userform_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 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 pflayer = player exit for end if next i dim pfclass 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 subprivate 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 pflayer = 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() textbox1.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() 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 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 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 bookmarkset 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.focusmapset 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工具的视图查询软件的制作: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命名为mapcontrol2,作为地图鹰眼,左上角的toccontrol用以显示mapcontrol1中所具有的图层。在最上面菜单栏中设置有四个菜单:文件、视图、查询、帮助,这几个菜单下面分别具有其所能实现的功能,如图35所示;在菜单栏下面添加一个toolbarcomtrol,在它里面可以添加需要的按钮;界面的下面为显示地图的比例尺以及光标所移动到的位置。图35 图363.5.2设计工具的功能实现 首先将toccontrol和toolbarcontrol都关联到mapcontrol1,如图37所示toolbarcontrol的关联选项:并且可在其“项”这一栏中添加适当的按钮,如图38所示。地图鹰眼的实现主要是需要进行编程,如下面图39所示: 图39其他很多的工具,包括菜单里面的工具都主要是进行编程实现,没有别的什么步骤,所以这里就不再赘述,而把实习的源程序附在后面。这里需要说明的还有以下内容:在“查询”菜单下面的“属性查图”工具中,使用了另外一个form来显示;在“帮助”菜单下面的“关于文件”也是定义了一个另外的窗体来显示。3.5.3成果演示: 先打开所做的“gis视图查询”,如图所示,左下角显示的是光标的位置坐标。图在“文件”中打开所要显示的地图,如下图所示:工具栏中的工具就不做累赘说明,下面说明菜单栏的工具以及下面自己所做的工具;在“文件”菜单下面的四个工具里,“打开”已经使用了,而“加入图层”也就是用来添加一个新图层的,“导出地图”是用来把在左边大幅框中显示的地图用“.jpg”的格式导出,如下面图42和43所示: “视图”菜单里面的三个功能也都和工具条里面系统自带的相应工具的功能一样,不过就是自己用代码实现的而已。如下面图44和图45所示,将全局视图用“视图”菜单中的“定点放大”进行放大后成为图45的效果:图45“视图”菜单中的“定点缩小”功能与上面的“定点缩小”类似,差别也就是将地图缩小了。而“漫游”工具也就是可以把地图拖至自己想要的图幅位置。 在“帮助”菜单中“关于文件,我将其设置成了如下图46显示: 图46在“查询”菜单中设置了两个工具“属性查图”和“图查属性”。“属性查图”可以在属性查图工具框中根据用户自己选择的属性内容在地图上高亮度显示出来,并且能够弹出一个msgbox用以调出被选中地物要素的所有属性信息,如下面图47所示:图47 而“图查属性”就是在地图上选中一个地物,点击后就会高亮度显示并且弹出一个msgbox显示出被选中读物的属性信息,如图48所示一样:工具条中的工具都是大家所熟识的,也就不做赘述。下面介绍主界面下面的工具: 最左下角的显示的是光标随时移动到的位置坐标,单位是米(m)。在显示地图的主界面mapcontrol1的下面可以显示出地图的比例尺,也就如下图49所示在右边的“当前比例尺:1:1850115.36407854”,而也可以自己人为的设定图幅比例尺的大小,在其左边就有一个“设置比例尺1:”只要在后面的框里面填入数字,地图马上就显示为所设定的比例尺大小。并且需要设置的比例尺大小和右边显示出来当前地图的比例尺大小任何时候都是大小一样的。 3.5.4“gis视图查询”的源程序:比例尺的设置及显示:private sub mapcontrol1_onextentupdated(byval displaytransformation as variant, byval sizechanged as boolean, byval newenvelope as variant)label1.caption = 1: & mapcontrol1.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, byval 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 dim 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.displaytransformation.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.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.outputspatialreference(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 msgbox (图层: & pfeatureclass.aliasname & vbcrlf & _ pfeatureclass.fields.field(0).name & : & pfeature.value(0) & _ vbcrlf & pfeatureclass.fields.field(2).name & : & pfeature.value(2) pfeatureselection.clear mapcontrol1.refresh exit do end if end if set pfeaturelayer = penumlayer.next loop end ifend sub鹰眼的设置:private sub mapcontrol2_onafterdraw(byval display as variant, byval viewdrawphase as long) if m_penvelope is nothing then exit sub if the foreground phase has drawn dim pviewdrawphase as esriviewdrawphasepviewdrawphase = viewdrawphase if pviewdrawphase = esriviewforeground then draw the shape on the mapcontrol. mapcontrol2.drawshape m_penvelope, m_pfillsymbol end ifend subprivate sub m_ptransformevents_visibleboundsupdated(byval sender as esridisplay.idisplaytransformation, byval sizechanged as boolean) set the extent to the new visible extent. set m_penvelope = sender.visiblebounds refresh the mapcontrols foreground phase. mapcontrol2.refresh esriviewforegroundend subprivate sub form_load() call createoverviewsymbolend subprivate sub mapcontrol1_onmapreplaced(byval newmap as variant) 当主地图显示控件的地图改变时,鹰眼中的地图也跟随改变 get the iactiveview of the focus map in the pagelayoutcontrol. dim pactiveview as iactiveview set pactiveview = mapcontrol1.activeview.focusmap trap the itransformevents of the pagelayoutcontrols focus map. set m_ptransformevents = pactiveview.screendisplay.displaytransformation get the extent of the focus map. set m_penvelope = pactiveview.extent load the same preauthored map document into the mapcontrol.mapcontrol2.loadmxfile mapcontrol1.documentfilename set the extent of the mapcontrol to the full extent of the data.mapcontrol2.extent = mapcontrol2.fullextentend subprivate sub mapcontrol2_onmousedown(byval button as long, byval shift as long, byval x as long, byval y as long, byval mapx as double, byval mapy as double) dim ppt as ipoint set ppt = new point ppt.putcoords mapx, mapy改变主控件的视图范围mapcontrol1.centerat pptend sub光标坐标位置的显示:private sub mapcontrol1_onmousemove(byval button as long, byval shift as long, byval x as long, byval y as long, byval mapx as double, byval mapy as double)statusbar1.panels(1) = format(mapx, .00m) & , & format(mapy, .00m)end sub“文件”菜单中的“打开”工具定义:private sub open_click()打开地图文档on error resume nextdim sfilename as stringwith commondialog1 .dialogtitle = open map document .filter = map documents (*.mxd;*.pmf)|*.mxd;*.pmf .showopen if .filename = then exit sub sfilename = .filenameend withif mapcontrol1.checkmxfile(sfilename) then mapcontrol1.loadmxfile sfilename mapcontrol1.extent = mapcontrol1.fullextentelse msgbox sfilename & is not a valid arcmap document exit subend ifstatusbar
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年中职人工智能工程技术(AI基础应用)试题及答案
- 2025年高职(农产品加工与质量检测)微生物检测基础试题及答案
- 2026年写字楼服务(会议组织流程)试题及答案
- 2025年高职教育技术学(多媒体教学资源制作)试题及答案
- 2025年中职播音与主持艺术(播音与主持教学法)试题及答案
- 2025年中职旅游服务与管理(景区讲解技巧)试题及答案
- 2025年大学大一(播音与主持艺术)节目策划与制作综合测试题及答案
- 2025年中职会计(税务申报基础)试题及答案
- 2025年大学第一学年(材料成型及控制工程)焊接材料学试题及答案
- 2025年中职(会计基础)账务核算阶段测试试题及答案
- 2026年度医保制度考试真题卷及答案
- 2026年1月浙江省高考(首考)英语试题(含答案)+听力音频+听力材料
- 2026年货物运输合同标准模板
- 广西壮族自治区南宁市2025-2026学年七年级上学期期末语文综合试题
- 2024VADOD临床实践指南:耳鸣的管理解读课件
- 2026年湖南铁路科技职业技术学院单招职业适应性测试题库及参考答案详解一套
- 第一单元写作:考虑目的和对象 教学课件
- (人教A版)高二数学下学期期末考点复习训练专题05 导数的计算与复合函数导数的计算(重难点突破+课时训练)(原卷版)
- 开放大学(电大)《农村社会学》期末试题
- 2025年70岁老人考驾照三力测试题及答案
- 2023-2024学年六年级上学期南沙区数学期末考试试题(含答案)
评论
0/150
提交评论