收藏 分销(赏)

Gistar-Net-Analysis路网分析组件的设计与实现.doc

上传人:仙人****88 文档编号:9148298 上传时间:2025-03-15 格式:DOC 页数:32 大小:334.50KB 下载积分:10 金币
下载 相关 举报
Gistar-Net-Analysis路网分析组件的设计与实现.doc_第1页
第1页 / 共32页
Gistar-Net-Analysis路网分析组件的设计与实现.doc_第2页
第2页 / 共32页


点击查看更多>>
资源描述
摘要 随着计算机软件技术的发展,GIS组件化发展到了一个全新的阶段,出现了组件式GIS。组件式GIS基于标准的组件式平台,各个组件之间不仅可以进行自由、灵活的重组,而且具有可视化的界面和使用方便的标准接口。设计一种适用GIS的路网分析组件。用丰富多样的外部接口来保证组件的适应性,从细化内部功能、合理设计组件接口来构造分工细致、协作灵活的组件。将得到的地理数据存入数据库,从数据库中读取数据进行路网数据的初始化,用户可以根据自己所需,在地图上进行查询,得到自己想要的路线,搜索利用A*算法(优化的Dijkstra算法)克服Gis数据量庞大而带来的问题,使搜索大大提高了效率,在最短的时间内得到点与点之间的最短路径,并且在地图上显示最短路径,返回给用户。 关键词:组件式GIS,A*算法 ,最短路径 ABSTRACT As the technology of software developing fast, GIS component developed into a new stage ,ComGIS appeared . ComGIS is based on standard components in the platform. Between the various components may not only engage in a free and flexible restructuring, but also have a visual interface and easy to use standard interface. Design a component for net analysis of GIS. By separating internal functions in detail and designing interfaces logically,special and cooperative component are constructed.The gotten information of geography will be saved into database,then reading the information of geography from database to initial the road net data. User can search the map to get the way they want. The method A-Star algorithm (a utilizes Dijkstra algorithm) to solve the problems caused by the large amount of GIS data in searching, the speed of searching is improved totally, the shortest path between two points will be gotten in the shortest time, and show the path back to the user on the map. Keywords: Component GIS, A-Star algorithm , Shortest path 目录 摘要 I ABSTRACT II 第1章 引言 1 1.1 背景 1 1.2 研究内容 2 第2章 地理信息系统 3 2.1 地理信息系统概述 3 2.2 地理信息系统的分类 3 2.3 组件介绍 4 2.3.1 COM组件简介 4 2.3.2 COM组件优点 5 2.4 组件式GIS 6 2.4.1组件式GIS简介 6 2.4.2组件式GIS特点 6 第3章 GISTAR NET ANALYSIS路网分析组件设计 8 3.1 组件设计需求 8 3.2 组件主要功能 8 3.3 组件的结构设计 8 3.3.1 组件对象 8 3.3.2 组件对象表设计 9 3.4 组件功能实现的方法 11 第4章 GISTAR NET ANALYSIS路网分析组件实现 13 4.1 开发环境 13 4.2 数据库实现 13 4.3 组件实现 15 4.3.1 组件开发工具 15 4.3.2 组件对象的封装 16 4.3.3 组件对象属性初始化 16 4.3.4 最短路径的实现 17 第5章 集成 & 测试 22 5.1 集成 22 5.2 测试 23 第6章 结束语 25 6.1 总结 25 6.2 对未来的展望 25 致谢 27 参考文献 28 28 第1章 引言 1.1 背景 3500年前,在Lascaux附近的洞穴墙壁上,法国的Cro Magnon猎人画下了他们所捕猎动物的图案。与这些动物图画相关的是一些描述迁移路线和轨迹线条和符木。这些早期记录符合了现代地理信息系统的二元素结构:一个图形文件对应一个属性数据库。 18世纪地形图绘制的现代勘测技术得以实现, 同时还出现了专题绘图的早期版本, 例如:科学方面或户口普查资料。 20世纪初期世纪将图片分成层的“照片石印术”得以发展。直至60年代早期,在核武器研究的推动下,计算机硬件的发展导致通用计算机“绘图”的应用。 1967年世界第一个投入实际操作的GIS(Geographic Information System)系统由联邦能量、矿产和资源部门在安大略省的渥太华开发出来。 这个系统是由Roger Tomlinson开发的,被称为“Canadian GIS”(CGIS)。它被用来存储,分析以及处理所收集来的有关加拿大土地存货清单(CLI)数据。CLI通过在1:250,000的比例尺下绘制关于土壤, 农业, 休闲、野生生物、水鸟、林业, 和土地利用等各种信息为加拿大农村测定土地能力,并增设了了等级分类因素来进行分析。 CGIS是世界的第一个“系统”, 并且在“绘图”应用上进行了改进,它具有覆盖,测量,资料数字化/扫描的功能,支持一个跨越大陆的国家坐标系统,将线编码为具有真实的嵌入拓扑结构的“弧”,并且将属性和位置的信息分别存储在单独的文件中。它的开发者,地理学家Roger Tomlinson,被称为“GIS之父”。 CGIS一直持续到20世纪70年代才完成,但这花费了太长的一段时间,因此在它最初发展期,不能与如Intergraph这样的销售各种商业地图应用软件的供应商竞争。微型计算机硬件的发展使得像ESRI和CARIS那样的供应商成功地兼并了大多数的CGIS特征,并结合了对空间和属性信息的分离的第1 种世代方法与对组织的属性数据的第2种世代方法入数据库结构。20世纪80年代和90年代产业成长刺激了应用了GIS的UNIX工作站和个人计算机飞速增长。至20世纪末,在各种系统中迅速增长使得其在在相关的少量平台已经得到了巩固和规范。并且用户开始提出了在互联网上查看GIS数据的概念,这要求数据的格式和传输标准化。 我国GIS的发展较晚,经历了四个阶段,即起步(1970-1980)、准备(1980-1985)、发展(1985-1995)、产业化(1996以后)阶段。GIS已在许多部门和领域得到应用,并引起了政府部门的高度重视。从应用方面看,地理信息系统已在资源开发、环境保护、城市规划建设、土地管理、农作物调查与结产、交通、能源、通讯、地图测绘、林业、房地产开发、自然灾害的监测与评估、金融、保险、石油与天然气、军事、犯罪分析、运输与导航、110报警系统公共汽车调度等方面得到了具体应用。 国内外已有城市测绘地理信息系统或测绘数据库正在运行或建设中。一批地理信息系统软件已研制开发成功,一批高等院校已设立了一些与GIS有关的专业或学科,一批专门从事GIS产业活动的高新技术产业相继成立。此外,还成立了“中国GIS协会”和“中国GPS技术应用协会”等。 1.2 研究内容 本次研究的主要内容是组件式GIS的应用: 1.做一个路网分析的组件,其目标在现有的地图中实现点与点之间最短路径查询,将查询结果反馈给用户; 2.将地理信息中的城市交通网形成路网数据,将这些得到路网数据存入数据库,首先要进行数据库设计,怎么样才能设计出有效准确记录路网数据的数据库; 3.从数据库中读取网路数据,将读取的数据初始化路网,提供两地之间的最短路径的查询,重点是用什么搜索算法能有效的提升查询的速度,及时将得到的结果反馈给用户。 第2章 地理信息系统 2.1 地理信息系统概述 地理信息系统[1](Geographic Information System或 Geo-Information system,GIS)有时又称为“地学信息系统”或“资源与环境信息系统”。它是一种特定的十分重要的空间信息系统。它是在计算机硬、软件系统支持下,对整个或部分地球表层(包括大气层)空间中的有关地理分布数据进行采集、储存、管理、运算、分析、显示和描述的技术系统。 2.2 地理信息系统的分类 地理信息系统按其内容可以分为三大类: (1)专题地理信息系统(Thematic GIS),是具有有限目标和专业特点的地理信息系统,为特定的专门目的服务。例如,森林动态监测信息系统、水资源管理信息系统、矿业资源信息系统、农作物估产信息系统、草场资源管理信息系统、水土流失信息系统等 (2) 区域信息系统(Regional GIS),主要以区域综合研究和全面的信息服务为目标,可以有不同的规模,如国家级的、地区或省级的、市级和县级等为各不同级别行政区服务的区域信息系统;也可以按自然分区或流域为单位的区域信息系统。区域信息系统如加拿大国家信息系统、中国黄河流域信息系统等。许多实际的地理信息系统是介于上述二者之间的区域性专题信息系统,如北京市水土流失信息系统、海南岛土地评价信息系统、河南省冬小麦估产信息系统等。 (3) 地理信息系统工具或地理信息系统外壳(GIS Tools),是一组具有图形图像数字化、存储管理、查询检索、分析运算和多种输出等地理信息系统基本功能的软件包。它们或者是专门设计研制的,或者在完成了实用地理信息系统后抽取掉具体区域或专题的地理系空间数据后得到的,具有对计算机硬件适应性强、数据管理和操作效率高、功能强且具有普遍性的实用性信息系统,也可以用作GIS教学软件。 2.3 组件介绍 2.3.1 COM组件简介 COM[2](Component Object Model)是微软公司为了计算机工业的软件生产更加符合人类的行为方式开发的一种新的软件开发技术。在COM构架下,人们可以开发出各种各样的功能专一的组件,然后将它们按照需要组合起来,构成复杂的应用系统。由此带来的好处是多方面的:可以将系统中的组件用新的替换掉,以便随时进行系统的升级和定制;可以在多个应用系统中重复利用同一个组件;可以方便的将应用系统扩展到网络环境下;COM与语言,平台无关的特性使所有的程序员均可充分发挥自己的才智与专长编写组件模块;等等。 COM是开发软件组件的一种方法。组件实际上是一些小的二进制可执行程序,它们可以给应用程序,操作系统以及其他组件提供服务。开发自定义的COM组件就如同开发动态的,面向对象的API。多个COM对象可以连接起来形成应用程序或组件系统。并且组件可以在运行时刻,在不被重新链接或编译应用程序的情况下被卸下或替换掉。Microsoft的许多技术,如ActiveX, DirectX以及OLE等都是基于COM而建立起来的。并且Microsoft的开发人员也大量使用COM组件来定制他们的应用程序及操作系统。 COM所含的概念并不止是在Microsoft Windows操作系统下才有效。COM并不是一个大的API,它实际上像结构化编程及面向对象编程方法那样,也是一种编程方法。在任何一种操作系统中,开发人员均可以遵循“COM方法”。 目前这种状况已经发生变化。开发人员开始将单个的应用程序分隔成单独多个独立的部分,也即组件。这种做法的好处是可以随着技术的不断发展而用新的组件取代已有的组件。此时的应用程序可以随新组件不断取代旧的组件而渐趋完善。而且利用已有的组件,用户还可以快速的建立全新的应用。 传统的做法是将应用程序分割成文件,模块或类,然后将它们编译并链接成一个单模应用程序。它与组件建立应用程序的过程(称为组件构架)有很大的不同。一个组件同一个微型应用程序类似,即都是已经编译链接好并可以使用的二进制代码,应用程序就是由多个这样的组件打包而得到的。单模应用程序只有一个二进制代码模块。自定义组件可以在运行时刻同其他的组件连接起来以构成某个应用程序。在需要对应用程序进行修改或改进时,只需要将构成此应用程序的组件中的某个应用用新的版本替换掉即可。 COM,即组件对象模型,是关于如何建立组件以及如何通过组件建立应用程序的一个规范,说明了如何可动态交替更新组件。 2.3.2 COM组件优点 组件架构的一个优点就是应用可以随时间的流逝而发展进化。除此之外,使用组件还有一些可以使对以有应用的升级更加方便和灵活的优点,如应用的定制,组件库以及分布式组件等。 使用组件的种种优点直接来源于可以将它们动态的插入或卸出应用。为了实现这种功能,所有的组件必须满足两个条件:第一,组件必须动态链接;第二,它们必须隐藏(或封装)其内部实现细节。动态链接对于组件而言是一个至关重要的要求,而消息隐藏则是动态链接的一个必要条件。 COM组件由以Win 32动态连接库(DLL)或可执行文件(EXE)形式发布的可执行代码所组成。遵循COM规范编写出来的组件将能够满足对组件架构的所有要求。COM组件可以给应用程序、操作系统以及其他组件提供服务;自定义的COM组件可以在运行时刻同其他组件连接起来构成某个应用程序;COM组件可以动态的插入或卸出应用。 2.4 组件式GIS 2.4.1 组件式GIS简介  组件式软件技术已经成为当今软件技术的潮流之一,为了适应这种技术潮流,GIS软件象其他软件一样,已经或正在发生着革命性的变化,即由过去厂家提供了全部系统或者具有二次开发功能的软件,过渡到提供组件由用户自己再开发的方向上来。无疑,组件式GIS技术将给整个GIS技术体系和应用模式带来巨大影响。 GIS技术的发展,在软件模式上经历了功能模块、包式软件、核心式软件,从而发展到组件式GIS和WebGIS的过程。传统GIS虽然在功能上已经比较成熟,但是由于这些系统多是基于十多年前的软件技术开发的,属于独立封闭的系统。同时,GIS软件变得日益庞大,用户难以掌握,费用昂贵,阻碍了GIS的普及和应用。组件式GIS的出现为传统GIS面临的多种问题提供了全新的解决思路。 组件式GIS[3]的基本思想是把GIS的各大功能模块划分为几个控件,每个控件完成不同的功能。各个GIS控件之间,以及GIS控件与其它非GIS控件之间,可以方便地通过可视化的软件开发工具集成起来,形成最终的GIS应用。控件如同一堆各式各样的积木,他们分别实现不同的功能(包括GIS和非GIS功能),根据需要把实现各种功能的 “积木”搭建起来,就构成应用系统。 2.4.2 组件式GIS特点 (1)小巧灵活、价格便宜 由于传统GIS结构的封闭性,往往使得软件本身变得越来越庞大,不同系统的交互性差,系统的开发难度大。在组件模型下,各组件都集中地实现与自己最紧密相关的系统功能,用户可以根据实际需要选择所需控件,最大限度地降低了用户的经济负担。。组件化的GIS平台集中提供空间数据管理能力,并且能以灵活的方式与数据库系统连接。在保证功能的前提下,系统表现得小巧灵活,而其价格仅是传统GIS开发工具的十分之一,甚至更少。这样,用户便能以较好的性能价格比获得或开发GIS应用系统。 (2)无须专门GIS开发语言 传统GIS往往具有独立的二次开发语言,对用户和应用开发者而言存在学习上的负担。而且使用系统所提供的二次开发语言,开发往往受到限制,难以处理复杂问题。而组件式GIS建立在严格的标准之上,不需要额外的GIS二次开发语言,只需实现GIS的基本功能函数,按照Microsoft的ActiveX控件标准开发接口。这有利于减轻GIS软件开发者的负担,而且增强了GIS软件的可扩展性。GIS应用开发者,不必掌握额外的GIS开发语言,只需熟悉基于Windows平台的通用集成开发环境,以及GIS各个控件的属性、方法和事件,就可以完成应用系统的开发和集成。目前,可供选择的开发环境很多,如Visual C++、Visual Basic、Visual FoxPro、Borland C++、Delphi、C++ Builder以及Power Builder等都可直接成为GIS或GMIS的优秀开发工具,它们各自的优点都能够得到充分发挥。这与传统GIS专门性开发环境相比,是一种质的飞跃。 (3)强大的GIS功能 新的GIS组件都是基于32位系统平台的,采用InProc直接调用形式,所以无论是管理大数据的能力还是处理速度方面均不比传统GIS软件逊色。小小的GIS组件完全能提供拼接、裁剪、叠合、缓冲区等空间处理能力和丰富的空间查询与分析能力。 (4)开发简捷 由于GIS组件可以直接嵌入MIS开发工具中,对于广大开发人员来讲,就可以自由选用他们熟悉的开发工具。而且,GIS组件提供的API形式非常接近MIS工具的模式,开发人员可以像管理数据库表一样熟练地管理地图等空间数据,无须对开发人员进行特殊的培训。在GIS或GMIS的开发过程中,开发人员的素质与熟练程度是十分重要的因素。这将使大量的MIS开发人员能够较快地过渡到GIS或GMIS的开发工作中,从而大大加速GIS的发展。 (5)更加大众化 组件式技术已经成为业界标准,用户可以象使用其他ActiveX控件一样使用GIS控件,使非专业的普通用户也能够开发和集成GIS应用系统,推动了GIS大众化进程。组件式GIS 的出现使GIS不仅是专家们的专业分析工具,同时也成为普通用户对地理相关数据进行管理的可视化工具。 第3章 Gistar Net Analysis路网分析组件设计 3.1 组件设计需求 从服务器读取原始数据,形成路网数据,用户根据自己的需求进行查询,要求将处理结果反馈给用户。结构图如下所示: 图3-1 路网分析结构图 3.2 组件主要功能 1、路网数据数据库存储。 2、从矢量地图,根据路网上的层次信息以及几何交叉信息,生成路网数据。 3、根据这个路网数据,进行导航路径查询。 3.3 组件的结构设计 3.3.1 组件对象 1对象结构。 网络Net对象为整体存储单位,为本系统的主对象; 路径Path对象建立/维护/独立保存支持,节点、边、节点的序列。从节点到节点。 节点Node/Nodes对象;(属性包括名称,InEdge, OutEdge集合) 边Edge/Edges对象(可单向/双向, 属性包括名称,权(距离)、两个Node引用) 连接关系Relation/Relations对象(Node和Edge的引用),可扩展限制条件。 2属性 1)Net对象 (1)Nodes,该网络的所有节点集合 (2)Edges,该网络的所有边 (3)Relations,该对象的所有连接关系 2)Node对象 (1)地理位置坐标或空间点引用 (2)名称 (3)InEdges, OutEdges, 入边集合和出边集合 (4)权重(可扩展属性 3)Edge对象 (1)From , To对象,起点和终点节点 (2)Path,中间经过的坐标点 (3)Direction 方向, 单向或双向 (4)权重 4)Relation对象 (1)Objects,所有的涉及的Node / Edge的引用 (2)Type, 关系类型:单项连通,双向联通,限制连通等 (3)Para, 自定义关系参数 3.3.2 组件对象表设计 Node(Nodes)对象和Edge(Edges)对象是存储路网数据的最小元素; Net对象是由所有的Node(Nodes)对象和Edge(Edges)对象生成,实际并不存储数据,不需要设计表; Path对象是存储查询结果的对象,包含最短路径经过的边和点的引用,也不需要设计表; Relation(Relations)对象该组件暂时未用到,进行了简单的设计,以后再改进,最终设计出三张存储表: 表3-1 组件点对象表 字段 类型 可否为空 说明 ID Bigint No 主码,唯一标识 Name Char(50) Yes 交点的名称 Weight Float Yes 交点的权值 Type Int Yes 交点的类型 X Float Yes 交点的地理信息 Y Float Yes 交点的地理信息 Z Float Yes 交点的地理信息 Inedges Text Yes 交点的入边集 Outedges Text Yes 交点的出边集 表3-2组件边对象表 字段 类型 可否为空 说明 ID Bigint No 主码,唯一标识 Name Char(50) Yes 边的名字 FWDWeight Float Yes 正向值 REVWeight Float Yes 反向值 DualDirect Bit Yes 是否双向(1:双向,0:单项) PointNO Int Yes 经过的节点数 FromNode Char(50) Yes 起点 ToNode Char(50) Yes 终点 MidPTs Geometry Yes 经过的点的详细地理信息(折线) 表3-3组件区域对象表 字段 类型 可否为空 说明 ID Bigint No 主码,唯一标识 Name Char(50) Yes 区域的名字 Type Tinyint Yes 类型(0:双连通,1:正向连通,2:反向连通,3:不通) Para Char(50) Yes 自定义参数 3.4 组件功能实现的方法 Net对象 (1)初始化InitializeFromLayer方法 参数:MapLayer对象. 通过相交计算,起终点和交点作为Node,当中的部分作为Edge. 通过引用GistarXLite根据对MapLayer对象内容,生成Net对象 (2)初始化InitializeFromLayer2方法 参数:MapLayer对象(节点).,MapLayer对象(边). 读取地图属性中的关联信息(节点要求有至少两个字段,ID/类型,边需要四个字段 ID/名称(忽略)/起点/终点)和地图空间数据中的位置信息,建立Net网络 (3)路径查询SelectPath方法 参数:字符串 传递节点、边的引用以及若干个通过AND/OR/NOT连接的条件串的组合支持Node(编号/名称)/Edge(编号/名称)等要素引用。From(节点), To (节点), Through(节点/边)等条件判定函数,以及MinNodeCount,MinEdgeCount, MinLength,MinEdgeCount, MaxNodeCount,MaxLength等条件常量(条件常量根据前后次序设定优先级) 第4章 Gistar Net Analysis路网分析组件实现 4.1 开发环境 开发环境如下表所示: 表4-1开发环境 操作系统 Windows XP/Windows vista/ Windows7 数据库 Microsoft SQL Server 2008 开发工具 Microsoft Visual Studio 2008 开发语言 C# 4.2 数据库实现 SQL Server 2008[4]提供了公司可依靠的技术和能力来接受不断发展的对于管理数据和给用户发送全面的洞察的挑战。具有在关键领域方面的显著的优势,SQL Server 2008是一个可信任的、高效的、智能的数据平台。SQL Server 2008是微软数据平台愿景中的一个主要部分,旨在满足目前和将来管理和使用数据的需求。 SQL Server 2008是一个重大的产品版本,它推出了许多新的特性和关键的改进,使得它成为至今为止的最强大和最全面的SQL Server版本 SQL Server 2008为大地测量空间数据提供了geography数据类型,为平面空间数据提供了geometry数据类型。这两个都是Microsoft .NET Framework通用语言运行时(CLR)类型,并且可以用来存储不同种类的地理元素,例如点、线和多边形。这两个数据类型都提供了你可以用来执行空间操作的属性和方法,例如计算位置间的距离和找出两者间交叉的地理特性(例如一条河流经一个城镇。) geography数据类型为空间数据提供了一个由经度和纬度联合定义的存储结构。使用这种数据的典型用法包括定义道路、建筑、或者地理特性如可以覆盖到一个光栅图上的向量数据,它考虑了地球的弯曲性,或者计算真实的圆弧距离和空中传播轨道,而这些在一个平面模型中所存在的固有失真引起的错误程度是不可接受的。 Geometry[5]数据类型为空间数据提供了一个存储结构,它是由任意平面上的坐标定义的。这种数据通常是用在区域匹配系统中的,例如由美国政府制定的州平面系统,或者是不需要考虑地球弯曲性的地图和内层布置图 Geometry 数据类型提供了与开放地理空间联盟(OGC)Simple Features Specification for SQL标准结合的属性和方法,使得你可以对geometry数据执行操作以产生行业标准的行为。 本文数据库设计用到的是平面空间数据geometry数据类型,geometry可以存储点Point,线LineString,面Polygon 。本次研究主要用到线LineString类型来存储边的地理信息,将边经过的节点以折线形式存入数据库,记录实际的地理信息。 例如: CREATE TABLE SpatialTable     ( id int IDENTITY (1,1),     GeomCol1 geometry,     GeomCol2 AS GeomCol1.STAsText() ); 创建了一个包含Geometry类型的表。GeomCol1存储了平面类型的数据,GeomCol2存储了该数据的Text表达示。 INSERT INTO SpatialTable (GeomCol1) VALUES (geometry::STGeomFromText('LINESTRING (100 100, 20 180, 180 180)', 0)); 插入一条记录,记录了平面内的一条直线。懂平面坐标的朋友一眼就能看出是用坐标点来描述的。 INSERT INTO SpatialTable (GeomCol1) VALUES (geometry::STGeomFromText('POLYGON ((0 0, 150 0, 150 150, 0 150, 0 0))', 0)); 插入一条记录,记录了平面内的一个多边型。 利用数据库存储路网数据比用地图存储更安全,数据不容易受到人为或其他因素的破坏;读取数据库数据比分析原始图层快使,初始化路网数据更加简便,大大提高了资源的利用和程序的运行速度。 4.3 组件实现 4.3.1 组件开发工具 Microsoft Visual Studio 2008[6]是面向Windows Vista、Office 2007、Web 2.0的下一代开发工具,代号“Orcas”,是对Visual Studio 2005一次及时、全面的升级。VS2008引入了250多个新特性,整合了对象、关系型数据、XML的访问方式,语言更加简洁。使用Visual Studio 2008可以高效开发Windows应用。设计器中可以实时反映变更,XAML中智能感知功能可以提高开发效率。同时Visual Studio 2008支持项目模板、调试器和部署程序。Visual Studio 2008可以高效开发Web应用,集成了ASP.NET AJAX 1.0,包含ASP.NET AJAX项目模板,它还可以高效开发Office应用和Mobile应用。 4.3.2组件对象的封装 封装 (encapsulation) [7] 隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和修改的访问级别. 封装就是将抽象得到的数据和行为(或功能)相结合,形成一个有机的整体,也就是将数据与操作数据的源代码进行有机的结合,形成“类”,其中数据和函数都是类的成员。 封装的目的是增强安全性和简化编程,使用者不必了解具体的实现细节,而只是要通过 外部接口,以特定的访问权限来使用类的成员。 封装的大致原则 : 1把尽可能多的东西藏起来.对外提供简捷的接口; 2把所有的属性藏起来。 对象的定义: 实际的交通道路通过相交计算,起终点和交点作为Node,当中的部分作为Edge. Nodes是一些的Node集合,Edges是一些Edge的集合,Relations是Relation的集合 Net对象包含所有的点和边,内部引用Nodes对象和Edges对象 Path对象是搜索结果的存储,内部引用Nodes对象和Edges对象 将组件对象(Net对象,路径Path,节点Node/Nodes对象,边Edge/Edges对象,连接关系Relation/Relations对象)封装成类,将对象的属性作为类的属性和方法; 对象与对象之间建立联系,以便相互引用,只有在Net对象和Path对象中提供外部接口,以供外界调用:在Net对象中提供外部接口有原始地图的相交计算初始化路网数据,从数据库中读取数据进行初始化路网数据,路网数据存储到数据库,最短路径的实现方法,当然为了使操作简单,还对数据库操作进行的封装,代码建立数据库,代码建立数据库的表,代码连接数据库,对数据库中数据的添加删除,修改都进行了函数实现,以便外接使用;Path对象对外的接口就是存储了搜索结果的相关路径和路径的总长度,将路径经过的点、边以及总长度反馈给用户。 4.3.3 组件对象属性初始化 1.用加载图层的方法初始化,该方法适合何地使用和数据录入数据库,因为该方法需要加载图层,数据分析和处理速度比较慢,时间复杂度是O(n2)一般不建议使用。 图4-1 原始路网图层 通过相交计算,起终点和交点作为Node,当中的部分作为Edge,将生成的对象属性数据存入数据库。 图4-2数据库中存储的数据 2.读取数据库数据初始化,该方法处理数据速度比较快,推荐使用。 数据库存储的数据是对象的最基本的属性,边对象的只存储了起点终点的名称,并非是点对象,同样,点对象的入边集合出边集只存储了边的名称,并非边对象,从数据库中读取基本的对象属性数据,对象属性的具体初始化在代码中需要处理过才能实现。当然这远远超出分析原始图层的速度。 表4-2初始化对比 方法 时间 原始图层初始化 5分钟(30个对象) 3小时(2K个对象) 数据库初始化 2秒(30个对象) 1分钟(2K个对象) 4.3.4 最短路径的实现 在目前,解决最短路径问题,国内外公认较好的算法是Dijkstra算法[8]。许多网络流分析问题可以采用线性规划方法解决。有些较为复杂的应用问题,如多个约束条件下的路径选优,若采用深度优先或广度优先搜索法,当图的节点或弧段过多时,会因可选路径的“组合爆炸”导致搜索时间急剧增长,算法效率就非常低。此时,就应该对图的拓扑网络进行一些预处理工作。本文主要用到的是改进的Dijkstra算法——A*算法[9]。 Dijkstra算法的中心思想: Dijkstra(迪杰斯特拉)算法是典型的单源最短路径算法,用于计算一个节点到其他所有节点的最短路径。主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。Dijkstra算法是很有代表性的最短路径算法,在很多专业课程中都作为基本内容有详细的介绍,如数据结构,图论,运筹学等等。Dijkstra一般的表述通常有两种方式,一种用永久和临时标号方式,一种是用OPEN, CLOSE表的方式,这里均采用永久和临时标号的方式。注意该算法要求图中不存在负权回路。 算法描述: (这里描述的是从节点1开始到各点的dijkstra算法,其中Wa->b表示a->b的边的权值,d(i)即为最短路径值) 1. 置集合S={2,3,...n}, 数组d(1)=0, d(i)=W1->i(1,i之间存在边) or +无穷大(1.i之间不存在边) 2. 在S中,令d(j)=min{d(i),i属于S},令S=S-{j},若S为空集则算法结束,否则转3 3. 对全部i属于S,如果存在边j->i,那么置d(i)=min{d(i), d(j)+Wj->i},转2 A*算法的中心思想: A*(A-Star)算法是一种静态路网中求解最短路最有 效的方法。 公式表示为: f(n)=g(n)+h(n), 其中f(n) 是节点n从初始点到目标点的估价函数, g(n) 是在状态空间中从初始节点到n节点的实际代价, h(n)是从n到目标节点最佳路径的估计代价。 主要搜索过程: 创建两个表,OPEN表保存所有已生成而未考察的节点,CLOSED表中记录已访问过的节点。 遍历当前节点的各个节点,将n节点放入CLOSE中,取n节点的子节点X,->算X的估价值->   While(OPEN!=NULL)   {   从OPEN表中取估价值f最小的节点n;   if(n节点==目标节点) break;   else   {   if(X in OPEN) 比较两个X的估价值f //注意是同一个节点的两个不同路径的估价值   if( X的估价值小于OPEN表的估价值 )   更新OPEN表中的估价值; //取最小路径的估价值   if(X in CLOSE) 比较两个X的估价值 //注意是同一个节点的两个不同路径的估价值   if( X的估价值小于CLOSE表的估价值 )   更新CLOSE表中的估价值; 把X节点放入OPEN //取最小路径的估价值   if(X not in both)   求X的估价值;   并将X插入OPEN表中; //还没有排序   }   将n节点插入CLOSE表中;   按照估价值将OPEN表中的节点排序; //实际上是比较OPEN表内节点f的大小,从最小路径的节点向下进行。 } 下图是A*算法的框架图: 图4-3 A*算法的框架图 经过实际验证,A*算法是一种比较有效的搜索算法。 算法的主要代码如下://pFR到pTR可能有多路径,用 A* 算法求解 List<CNode> PNLOpen = new List<CNode>(); List<CNode> PNLClose = new List<CNode>(); while (PNLOpen.Count > 0) { CNode node = PNLOpen[0]; PNLOpen.RemoveAt(0);//从Open表中移
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服