基ArcGisEngine的黑龙江省旅游景点查询系统设计学士学位论文.doc_第1页
基ArcGisEngine的黑龙江省旅游景点查询系统设计学士学位论文.doc_第2页
基ArcGisEngine的黑龙江省旅游景点查询系统设计学士学位论文.doc_第3页
基ArcGisEngine的黑龙江省旅游景点查询系统设计学士学位论文.doc_第4页
基ArcGisEngine的黑龙江省旅游景点查询系统设计学士学位论文.doc_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

学 士 学 位 论 文题 目 基于ArcGis Engine的黑龙江省旅游景点查询系统设计 学 生 闫利爽 指导教师 马大龙 讲师年 级 2009级专 业 地理信息系统系 别 地理系学 院 地理科学学院哈尔滨师范大学2013年5月基于ArcGis Engine的黑龙江省旅游景点查询系统设计题闫利爽摘要:随着地理信息系统及计算机技术的迅速发展和广泛应用,基于ArcGis Engine的地理信息系统应用程序己成为地理信息系统研究的热点。本文简要介绍了ArcGis Engine体系结构和VC2005开发应用程序。根据ArcGis Engine的特点及查询系统的性能需求,建立基于ArcGis Engine组件库、VC2005平台等技术为核心的旅游景点查询系统的软件,对整个程序和各主要功能模块设计进行了详细的研究和分析,实现了基于ArcGis Engine黑龙江省旅游景点查询系统基本功能。 关键词:ArcGis Engine;VC2005;旅游信息查询 1、 引言近些年,随着人们生活水平和消费水平的提高的提高,出门旅游已经成为了一种新的时尚,也是人们一种放松的方式。因此,出门旅游的人数不断增加,尤其是长假期间,旅游人数剧增。2005年,我国入境旅游达到了12亿,旅游创汇293亿元,比上年增长13.8%;国内旅游人数达到12.1亿人次,比上年增长10%;其中去黑龙江旅游的人数比去年增长了50%。我过已经实现了从旅游资源大国向世界旅游打过的历史性跨越。1黑龙江省的旅游资源十分丰富,其中,5A级风景区3个,国家重点风景名胜区2处,省级名声风景区14处,全省各地进行旅游开发建设的风景区点200余处。【2】丰富的旅游资源吸引了大量的海内外有课。尤其在炎炎夏日,来黑龙江省旅游的游客与日俱增。然而,过快过猛的发展也给旅游这个新兴产业带来了必然的压力很多硬件、软件上的不足和缺陷一步步暴露出来,成为我国旅游业成熟和腾飞过程中的一道无法跨越的障碍7。其中,旅游信息的匮乏,和大众获取信息方式的不畅,便是当前旅游业快速增长的一大瓶颈,直观来说,这个瓶颈所带来的最大弊端,就是令旅游消费者在进行旅游目的地选择时,会面对庞杂而无序的零散信息无从下手8。而消费者最终在盲目或混乱状态下做出的选择,又往往会给出游过程平添许多的不快和麻烦,随之而来的,将是消费者信心的下降和旅游业潜在消费群体的直接损失。人们在出行前,经常会查阅报纸或翻阅书籍或利用互联网来查询信息,查询他们所到之地的地理位置、景区特点、门票价格、周边状况、风俗习惯、交通情况、住宿状况、客流量以及当地的天气等等信息。而目前互联网上的旅游信息查询多数以文本、图片、录像等单一的表示方式来展示信息,几乎没有用到地理信息系统,而ArcGis Engine使得地理信息应用在GIS中,使查询更加方便快捷,并且使用数据库技术,当景区信息有变更时,可以实时更新数据库中的内容,操作简便,能够为旅游者们的出行提供极大的方便。二、ArcGisEngine概述(一) ArcGis 9 总览在GIS系列软件中,ESRI公司的ArcGis系列软件应用最为广泛,其数据格式是业界数据交流的标准格式;支持对象组件技术,各种主流开发工具均可对ArcGis平台进行定制;基于Windows用户界面标准,界面友好,操作方便。【3】并且ArcGIS为用户提供了一整套功能强大的GIS框架。ArcGis Engine可以在应用系统中加入地理信息的功能。在ArcGIS 9系列产品中,ArcGIS Desktop、ArcGIS Engine和ArcGIS Server都是基于核心组件库ArcObjects搭建。ArcObjects组件库有3000多个对象可供开发人员调用,其中有细粒度的小对象,例如:Geometry对象;也有粗粒度的大对象,例如Map对象,通过这些对象开发人员可以操作控制文档(mxd,3dd,sxd等)、和空间数据库进行交互。ArcObjects组件库为开发人员集成了大量的GIS功能,可以快速的帮助开发人员进行GIS项目的开发。由于ArcGIS Desktop、ArcGIS Engine和ArcGIS Server三个产品都是基于ArcObjects搭建的应用,那么对于开发人员来说ArcObjects的开发经验在这三个产品中是通用的。开发人员可以通过ArcObjects来扩展ArcGIS Desktop,定制ArcGIS Engine应用。ArcGIS Engine开发包提供了一系列可以在ArcGIS Desktop框架之外使用的GIS组件,而在ArcGIS Engine发布之前,基于ArcObjects的开发只能在庞大的ArcGIS Desktop框架下进行。(二)ArcGIS Engine 组成部分ArcGIS Engine由一个软件开发工具包(SDK)和一个运行时(Runtime)组成。从功能层次上可划分为如下五个部分: 1 基本服务由GIS核心ArcObjects构成,几乎所有GIS应用程序都需要,如要素几何体(feature geometry)和显示(display)。 2 数据存取ArcGIS Engine可以对许多栅格和矢量格式进行存取,包括强大的地理数据库(Geodatabase)。 3地图表达创建和显示带有符号和标注的地图。 4 开发组件用于快速开发应用程序的界面控件。 5 运行时选项ArcGIS Engine运行时可以与标准功能或其它高级功能一起部署。 ArcGIS Engine Developer Kit 是创建独立的GIS应用程序和制图应用程序的工具包,由控件、工具条和工具、对象库三个部分组成。4ArcGIS Engine的另一个组件就是其运行时(Runtime)。ArcGIS Engine Developer Kit建立的所有应用程序在运行时都需要相应级别的ArcGIS Engine运行时。ArcGIS Engine运行时有多种版本级别,从标准版本一直到企业版本。标准 Engine运行时提供所有ArcGIS应用程序的核心功能。这个级别的ArcGIS Engine运行时可以操作几种不同的栅格和矢量格式、进行地图表达和创建以及通过执行各种空间或属性查询查找要素。这个级别的ArcGIS Engine运行时还可以进行基本数据创建、编辑Shapefile和简单的个人地理数据库(Personal Geodatabase)及GIS分析。编辑Enterprise Geodatabase扩展模块。ArcGIS Engine运行时Enterprise Geodatabase编辑增加了创建和更新多用户企业Geodatabase的功能。ArcGIS Engine的其它扩展模块包括:空间分析扩展模块、3D分析扩展模块、网络分析、StreetMap扩展模块等。(三)ArcGIS Engine的功能w 分图层显示专题图,例如:道路,河流,行政边界等。w 浏览、缩放地图w 查看地图上特征要素的信息w 在地图上检索、查找特征要素w 在地图上显示文本注记w 在地图上叠加卫星影像或航摄影像w 在地图上绘制点、线、面几何体w 通过矩形、圆形或多边形来选中地图上的要素w 通过SQL语句来查找要素w 使用各种渲染方式来绘制地图图层,例如:分级渲染,柱状图渲染,点密度渲 染,依比例尺渲染等。w 动态绘制实时的数据,例如实时的GPS坐标点。w 转换空间数据的坐标系。ArcGIS Engine的授权文件(*.ecp)控制用户可以使用哪些功能。ArcGIS Engine的功能是否可以使用需要根据用户自己的授权文件而定。 三 信息查询系统功能的实现(1) 新建项目1启动VS2005,选择“文件新建项目”,在项目类型中选择Visual C#,在选择Windows应用程序模版,输入名称“HLJTravelSerch”,点击确定。在解决方案管理器中将“”Form1.cs重命名为“HLJTravelSerch.cs”,在设计视图中,选中窗体,将其属性中的“text”改为“HLJTravelSerch”2添加控件选择工具箱中的“ArcGIS Windows Forms”节,将“ToolbarControl”控件拖入窗体,并将该控件的停靠方式置于整个窗体上方,即将其属性中的Dock设置为Top。为了将所添加的控件固定,并更加美观,因此添加一个容器空间,选择工具箱中的“容器|SplitContainer”容器拖入窗体。将TabControl控件拖入Panel1,将选项卡置于底端,即Alignment属性设置为Bottom,Dock属性设置为Fill。点击TabPages属性右边的按钮,弹出TabPage集合编辑器,将tabPage1的Name设置为tabPageLayer,Text设置为图层。选择“图层”选项卡,拖入TOCControl控件,设置Dock属性为Fill。在“地图”选项卡,将MapControl控件拖入panel2中,设置Dock属性为Fill。最后将LicenseControl控件拖入到窗体的任意地方。按F5编译运行,可以看到刚才布局好的程序界面了。图1 布局好的页面 3控件绑定 通过以上步骤添加的控件还只是单独存在,而我们的程序需要各控件间协同工作,因此要对控件进行绑定,现将工具条、图层控件和地图控件绑定在一起。 分别右击ToolbarControl、TOCControl控件,将Buddy设置为axMapControl1。这样就将ToolbarControl、TOCControl控件和axMapControl1控件绑定在一起了,TOCControl中显示的图层就会是axMapControl1中地图的图层。ToolbarControl中添加工具的话进行的操作也是对axMapControl1中的地图进行操作。4添加工具 右击ToolbarControl,选择“属性Items”,点击Add,选择Commands选项卡中的Generic,双击Open、SaveAs、Redo、Undo即可将相应工具添加到工具条。5加载地图在arcmap中对地图进行处理,例如对地图进行坐标转换,比例尺选择等操作。然后在整个程序的bin目录下的Debug文件夹中,将所处理完毕的地图等数据文件打包放入该文件夹下,这样引用地图时可以引用相对路径而不是绝对路径,这样做的好处是当需要更换工作环境时,只需将整个工程文件夹拷走而不必担心文件丢失或者更换目录的情况。然后在MapControl1上加载需要用的黑龙江省旅游地图,双击Form1.cs的页面,进入代码编辑页面,在页面加载函数HLJTravelSearch_Load中添加代码:this.axMapControl1.LoadMxFile(Application.StartupPath + dataxuanran1.mxd);图2 加载地图(2) 鹰眼功能鹰眼功能显示的是整幅地图的全图,当大地图放大时,鹰眼中用一个框框显示大地图中所出现的范围,在页面中添加一个MapControl控件,添加方法同MapControl,其name属性为MapControl2,并将其放入合适的位置。对MapControl1添加相应事件,在其属性栏的右边的闪电状符号中,找到OnExtentUpdated事件和OnAfterScreenDraw事件并并双击,这样就为地图控件添加了响应函数,当地图进行操作时,对应的响应函数做相应的响应。由于MapControl2的功能只是显示MapControl1中的地图的功能和特殊标记MapControl2中当前窗口大小,并不需要移动地图,故对MapControl2添加OnMouseDown事件和OnMouseMove事件。添加完4个事件之后,程序自动生成四个对应的函数:1.axMapControl1_OnExtentUpdated2.axMapControl1_OnAfterScreenDraw3.axMapControl2_OnMouseMove4.axMapControl2_OnMouseDown在这四个函数中分别加入代码如下:在axMapControl1_OnExtentUpdated中添加代码: IGraphicsContainerpc = this.axMapControl2.ActiveView.GraphicsContainer; pc.DeleteAllElements(); IElement pe = new RectangleElementClass(); pe.Geometry = this.axMapControl1.Extent as IEnvelope; IRgbColor pcolor = new RgbColorClass(); pcolor.Red = 255; pcolor.Transparency = 255; ILineSymbol pls = new SimpleLineSymbolClass(); pls.Width = 1; pls.Color = pcolor; IFillSymbol pfs = new SimpleFillSymbolClass(); pcolor.Transparency = 0; pfs.Color = pcolor; pfs.Outline = pls; IFillShapeElement pfse = pe as IFillShapeElement; pfse.Symbol = pfs; pc.AddElement(pe, 0); this.axMapControl2.ActiveView.Refresh(); 在axMapControl1_OnAfterScreenDraw中添加代码: IGraphicsContainer pc = this.axMapControl2.ActiveView.GraphicsContainer; pc.DeleteAllElements(); IElement pe = new RectangleElementClass(); pe.Geometry = this.axMapControl1.Extent as IEnvelope; IRgbColor pcolor = new RgbColorClass(); pcolor.Red = 255; pcolor.Transparency = 255; ILineSymbol pls = new SimpleLineSymbolClass(); pls.Width = 1; pls.Color = pcolor; IFillSymbol pfs = new SimpleFillSymbolClass(); pcolor.Transparency = 0; pfs.Color = pcolor; pfs.Outline = pls; IFillShapeElement pfse = pe as IFillShapeElement; pfse.Symbol = pfs; pc.AddElement(pe, 0); this.axMapControl2.ActiveView.Refresh();在axMapControl2_OnMouseMove中添加代码: if (e.button = 1) IPoint pp = new PointClass(); pp.PutCoords(e.mapX, e.mapY); IEnvelope penv = this.axMapControl1.Extent as IEnvelope; penv.CenterAt(pp); this.axMapControl1.Extent = penv; 在axMapControl2_OnMouseDown中添加代码: if (e.button = 2) IPoint pp = new PointClass(); pp.PutCoords(e.mapX, e.mapY); IEnvelope penv = this.axMapControl2.TrackRectangle(); this.axMapControl1.Extent = penv; 这时运行就可以看到添加鹰眼后的地图界面,如下图所示:图3 鹰眼功能(3) 列表框查询在添加列表框前先建立一个access数据库,在数据库添加黑龙江省各市县的信息,建立两个字段,Num字段和city字段,其中Num存储城市的编号,city存储城市的名称,然后用该应用程序连接access,这样列表框可以直接引用数据库中的数据。修改应用程序中Form.cs中的代码用以连接数据库,连接数据库的代码如下:using System.Windows.Forms; using System.Data; using System.Data.OleDb; namespace WindowsFormsApplication1 static class Program / 应用程序的主入口点。 STAThread static void Main() string strConnection=Provider=Microsoft.Jet.OleDb.4.0; strConnection +=Data Source=/192.168.1.10/access/CSharptest.mdb; OleDbConnection objConnection = new OleDbConnection(strConnection); objConnection.Open(); OleDbCommand sqlcmd = new OleDbCommand(select * from city);OleDbDataReader reader = sqlcmd.ExecuteReader(); int num = new int(); if(reader.Read() num = (int)readerNum; objConnection.Close(); reader.Close(); Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Form1 form = new Form1(); form.Text = age.ToString(); Application.Run(form); 选择工具箱中的“所有Windows窗体”节,将“listBox”控件拖入窗体,为该控件添加SelectedIndexChanged事件,并在窗口初始化函数中在该空间中加载黑龙江省各县市的名称,当点击列表框中某一个县市的时候,相应的地图中的位置出会闪烁并且会将当前选中的地区放大到整幅图面中,具体实现方式为:HLJTravelSearch_Load中添加代码:QueryFilter pqf = new QueryFilterClass(); IFeatureLayer pfl = this.axMapControl1.get_Layer(1) as IFeatureLayer; IFeatureClass pfc = pfl.FeatureClass; IFeatureCursor pfcur = pfc.Search(pqf, true); IFeature pf; pf = pfcur.NextFeature(); while (pf != null) this.listBox1.Items.Add(pf.get_Value(pfc.FindField(name); pf = pfcur.NextFeature(); 以下是添加完列表框后运行的效果图:图4 列表框查询(4) 添加查询按钮选择工具箱中的“所有Windows窗体”节,将“listBox”和“button”控件拖入窗体,这时用户可以自由输入地区名称进行查询。此时为了美观,可添加TabControl控件,将listcontrol控件拖入TabControl中,以达到固定效果,并增加功能“景点查询”,其添加方法同前一个listbox的添加方法。此时,列表框中所对应的地名已经和地图中的地名对应上了,当双击列表框中某一地名时,相对应的地图上的相应的地方会闪亮显示,然后自动放大到当前页面大小,如图: 图5 双击列表框效果图(5) 添加详细信息同样,在access数据库中添加每个地区每个景点的简介、图片、交通住宿、小贴士信息,使用应用程序调用access数据库中的数据,将数据添加到程序中去,每一个地区对应一种信息,用户可以查看需要的信息,如下图所示:图6图片查询(6) 添加状态栏在设计视图中,点击窗体中的状态栏,在其属性面板中找到“ Items ”项,单击其右边的按钮,在下拉框中选择“ StatusLabel ”,单击“添加按钮”,依次添加两个个 StatusLabel 标签,分别将其Text属性设置为:坐标、比例尺。在后台添加一定的代码即可显示当前图像的坐标和比例尺,如下图:图7 状态栏至此,黑龙江省旅游信息查询系统设计完毕。如下图所示图8 应用程序四 结束语本论文的研究是在地理信息系统与ArcGisEngin技术不断发展与结合的基础上提出来的。首先介绍了ArcGIS的基本概念;然后介绍了基于ArcGisEngin的组成部分和功能;最后对黑龙江省旅游信息查询系统的进行设计和实现。现在常用的信息传播媒介一般有:平面、电视、网络、人。但是这些传统的信息来源方式都存在一个弊端:更新速度慢【6】,而本文则利用ArcGis Engin建立以一款实时更新数据的软件,是一款可以同步反映各种旅游信息的查询系统。并且由于ArcGisEngin采用了嵌入式的开发技术,使得建立起来的旅游信息查询系统能更更好的兼容目前的系统,并能以最少的投入获取最大的所需信息。5这款应用程序可以使用户很方便快捷地查询到所需要的信息,并且具有很强的扩展功能,技术人员可以添加用户所需的信息,并且本文使用access数据库,可以实时更新数据,使用户对所要旅游的地方有一个更全面更深入的认识。参考文献:1 刘志芳1 付华2:(1. 基于WebGIS的旅游信息系统建设 (2. 中国测绘科学研究院 首都师范大学 2009。2 喜雨:黑龙江省风景名胜区建设发展概况与分析 2008。3 高雪山1 黄晓红2 : GIS技术在潖江滞洪区洪水淹没模型中的应用 (1. 广东省北江 防洪调度中心 (2. 拱洞轻工职业技术学院 20064 刘庆元,陶佩枫:基于ArcGisEngin的地图编辑软件的设计与实现 中南大学信息物理工程学院 2008 5 肖海 武伟 刘洪斌:基于ArcGisEngin的农业资源信息管理系统的研究 西南农业大学与生物信息重点实验室 20066 康敏捷:面向大众的旅游信息查询系统设计与实现 南京师范大学 2010年7 薛伟.MapObjects-地理信息系统

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论