




已阅读5页,还剩55页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Map拼车网中信息撮合系统的设计与实现毕业论文目录第一章 概述1.1 课题研究背景11.2 课题研究目的及意义21.3 课题的国内外研究现状21.4 本文研究内容及技术路线21.4.1 本文研究内容与组织结构21.4.2 技术路线3本章小结4第二章 系统涉及技术及其分析2.1 AJAX技术及其特点52.1.1 AJAX概述52.1.2 AJAX定义62.1.3 AJAX核心技术62.1.4 AJAX工作原理82.2 XML技术102.2.1 XML的历史与背景102.2.2 XML系列简述112.2.3 XML语法简述112.2.4 XML解析技术122.3 空间数据库技术概述152.3.1 OpenGIS简介152.3.2 MySQL中对OpenGIS的支持172.4 相关设计模式概述202.4.1 设计模式的发展历史202.4.2 设计模式的定义与基本要素212.4.3 设计模式的作用222.4.4 Gof设计模式的简介222.5 SSH构架简介25本章小结25第三章 信息撮合系统的分析及设计3.1 需求分析263.2 技术调研273.2.1 新消息提醒的及时性体现273.2.2 数据库存储类型的选择283.2.3 消息表的设计293.2.4 前后台新消息的交互数据293.2.5 撮合时信息的处理303.2.6 线路撮合成功后的评价生成303.3 数据库的设计与封装303.3.1 用户相关表的设计303.3.2线路相关表的设计313.3.3 消息相关表的设计323.3.4 撮合相关表的设计323.3.5 数据库的整体设计333.3.6 通过Hibernate实现数据库的封装353.4 信息撮合系统的整体设计363.4.1 线路撮合的设计363.4.2评价模块的设计373.4.3新消息提示的设计383.4.4 消息获取的设计38本章小结38第四章 信息撮合系统的实现方法及关键技术4.1 线路撮合的后台实现394.2 评价模块的实现424.2.1 评价记录的生成424.2.2评价记录的提交434.3新消息提示的实现444.4消息获取的实现454.4.1消息的后台获取的实现454.4.2消息的前台解析的实现46本章小结47第五章 系统功能展示5.1 新消息提示模块的实现效果485.2 评价模块的实现效果485.3 乘客申请模块的实现效果505.4 车主邀请模块的实现效果51本章小结52第六章 总结与展望6.1 总结536.2 展望53参考文献54致谢5757第一章 概述1.1 课题研究背景相同路线的人乘坐同一辆出租车上下班,上学及放学回家,节假日出游等,车费由乘客平均分摊即为拼车。拼车是一个新兴的事物。根据报导,韩国、希腊及欧美国家的出租车已尝试“合乘制”。在美国,多人乘坐同一辆出租车是被鼓励和支持的。既有利于环保,有利于缓解拥挤的城市交通,又有利于乘客。在我国浙江、北京、广州等五十多个城市已经开拓了拼车服务并产生了注册服务机构国内外要就现状。为了用户更加方便灵活的享受拼车的服务,本项目针对用户拼车需求,利用Google Maps API将拼车信息,拼车信息在地图上进行显示,并在地图上标注路线,便于直观的搜索和匹配拼车需求信息。本系统将着重于用户信息撮合方面的实现。随着Internet在全球的迅猛发展,电子商务作为21 世纪信息时代经济活动全新的技术手段和方法,已成为其最广阔的应用领域。在这些电子商务特别是B2B 电子商务平台的应用中,越来越多地提供了E-Market的功能,而在E-Market中,供需双方的信息匹配又是不可或缺的内容。传统的电子商务一般只注重信息的搜索,提供给客户的撮合的功能较少,只在一定的规则下给出定性的查询结果,并不提供细致的定量分析。而随着商务活动的日趋繁忙,人们希望平台提供更多的信息交互和对业务进行撮合的功能。在我国这样一个信息不对称的环境下,信息的掌握和交流往往较其他的生产要素来得更加重要,一场交易的成败往往就依赖于一条好的消息渠道,将有效信息尽快地传达给用户至关重要,由此可见信息在传递和交互过程中的速度、安全性是多么重要。那么根据这些信息进行撮合也就扮演了重要的角色。1.2 课题研究目的及意义本课题的研究主要是针对拼车网中信息撮合系统的设计与实现进行,以设计和实现一个针对GoogleMap拼车网的信息撮合系统为目的。在撮合系统的设计与实现过程中,尽量地使系统达到高类聚低耦合,使系统更具扩展性,实现更好的用户体验,让拼车的多方之间能够尽可能的撮合。对与我们的GoogleMap拼车网而言,信息的交互尤其重要。用户在基于搜索的情况下,选择自己最有可能参与的拼车线路,信息撮合系统把这些选择传递给发布线路的人使消息在他们之间来回传递,最终达到线路撮合成功的结果。在我们的拼车网中,信息撮合系统起到非常重要的作用。正是由于撮合系统的存在,才使得拼车的多方有了一个交流的平台和一个既定的撮合流程,让拼车的多方之间不必为了何时撮合成功而苦恼。用户只需要查看系统提示的新消息,按照简单的提示就可以达到满意的撮合结果。同时信息撮合系统提供评分的机制,不用太担心有不诚实的情况存在,因为在我们拼成网中,如果用户不诚实,同行者将给予扁评,积分上就会有所体现。正是因为我们的拼车网有必要有一个上面所说的撮合系统,才使得我的这个课题得以进行。可以说针对本课题而言,项目是研究的驱动。拼车网中撮合系统的实现在web运用领域尚属比较新的范畴,所以本课题的研究也有很高的使用价值。1.3 课题的国内外研究现状关于拼车网的研究与运用在web领域非常的广泛,例如拼车/顺风车信息网、拼车啦、顺风车网、上海百姓网、温州拼车网、中国拼车族、CarS和google生活频道等。但是这些网站在用户的信息撮合这几块都只是简单的登录后报名,然后可以查看别人的联系方式,同时给发布线路的人发送申请者的信息,这样用户之间的交流和撮合是和系统无关的,用户在私底下解决。这些网站在撮合这一块几乎没有做努力。所以将撮合系统运用到拼车网中尙属于比较新的组合。撮合系统在各E-Market中的运用相对比较广泛,最好的例子就是C2C的网站,例如淘宝、拍拍等网站。这些网站充分考虑了交易中会出现各种情况,提供了交易的双方之间通讯的平台和交易的流程,也为交易提供了支付手段。淘宝年交易量过千亿已经无懈可击地证明了他们的撮合系统的强大1.4 本文研究内容及技术路线1.4.1 本文研究内容与组织结构第一章是概述,介绍本文的研究背景、课题的中外研究现状、课题的研究意义等。第二章将要介绍了本文方法所设计到的相关技术,这些技术将是支撑整个系统的基础,非常重要。第三章介绍了信息撮合系统的分析与设计,对系统的需求进行了分析,对项目实现过程中将要面临的技术难点进行了突破,对整个系统进行了设计,为整个系统的实现提供了实现基础,是整个系统的核心思想所在。第四章介绍了信息撮合系统的实现方法及关键技术,主要以流程图的形式显示在实现过程中的编码逻辑,在关键代码的实现上以伪代码的形式展示,主要体现了编码过程中的基本思路。第五章介绍了本系统实现后的功能展示。第六章主要是对本文进行一次总结和对未来工作的一些展望。本文的组织结构图1-1所示。图1-1 文档结构图1.4.2 技术路线本系统实现的技术路线图:图1-2 本系统实现的技术路线图本章小结本章就课题的背景、课题的研究目的意义、国内外研究现状、研究内容及技术路线做了一番概述。对本文起到概括作用。在接下来的一章中,主要介绍本系统在开发过程中所设计的一些关键技术,以及对这些关键技术的分析。第二章 系统涉及技术及其分析本章将对系统开发过程中涉及到的技术做详尽的阐述和分析,这些技术是系统实现的基础,在系统的开发过程中起到了指导性意义。下面将对这些技术进行逐一地阐述和分析。2.1 AJAX技术及其特点2.1.1 AJAX概述当前应用程序的开发模式主要有客户端/服务器(C/S)模式和浏览器/服务器(B/S)模式,C/S模式的应用程序优点是不存在网络数据传输的瓶颈束缚,客户端相应速度快,界面元素丰富,动态性好,操作效率高等,但其缺点是客户端需要分别安装,增加了系统实施的成本,也正因为客户端是分别安装的,其版本更新就成了一个很大的问题;B/S模式由于不需要可以安装客户端(使用浏览器代替客户端),所以不存在客户端软件的安装和更新的问题,但由于存在于服务器端的网络数据传输,整个操作过程中会存在一个“发出请求等待服务器相应获得操作结果”的过程,因而客户端用户会明显地感觉到操作延迟。AJAX的出现极大的缓解了B/S模式应用程序的上述不足,它的富客户端的思想和异步操作特性使得B/S应用程序响应时间更快,界面更友好,更加接近甚至超过C/S模式的客户端。IT界首次出现AJAX的概念是在2005年2月,当时Adaptive Path公司的Jesse James Garrett在互联网上发表了一篇名为AJAX: A New Approach to web Application的论文。在这篇文章中,Garrett提出AJAX是Asynchronous JavaScript And XML的缩写,并提到Web应用程序与传统桌面程序之间的差距正在被缩小,以及如何从真正意义上消除这两种应用程序之间的界限。他引入了一些新的概念,并以Google公司的几个成型产品如Google Maps和Google Suggest等作为示例,详细阐述了如何将传统的桌面应用程序模型转移到web上。AJAX与传统Web界面在实现上的异同如图2-1图2-1 AJAX与传统Web界面在实现上的异同2.1.2 AJAX定义在上述文章中,Jesse James Garrett这样定义为Ajax: Ajax不是一种新技术。实际上,它由几种蓬勃发展的、拥有各自的产权的技术以一种强大的新方式组合而成。具体来说,Ajax包含: 使用XHTML和CSS技术进行标准化显示和表达; 使用文档对象模型(Document object Model,DOM)技术进行动态的显示和交互; 使用XML和XSLT进行数据的交互操作和控制; 使用XMLHttpRequest与服务器进行异步数据通信; 使用JavaScript技术将所有其他组件绑定在一起。 2.1.3 AJAX核心技术在AJAX的各个组件中,最为重要的当属JavaScript、DOM、CSS和XMLHttpRequest四者,以下分别进行简单介绍:1. JavaScriptJavaScript是一种强大的编程语言,用于开发交互式的Web页面。创建JavaScript的初衷是为了帮助开发人员动态地修改页面上的标记,为客户提供更丰富的体验。当人们越来越认识到页面也可以当作对象时,文档对象模型DOM应运生。开始的时候,JavaScript和DOM紧密交织在一起,但最后还是分开来各自发展了。JavaScript的定义可以从两个方面来说明:JavaScript是一种通用的脚本编程语言,也是一种基于对象和事件驱动并具有安全性能的脚本语言;JavaScript代码嵌入在HTML页面中,它把静态页面转变成支持用户并响应事件的动态页面。2. DOM文档对象模型(Document Object Model,DOM)是一个跨平台的、可适应不同程序语一言的文件对象模型,它采取直观的方式,将HTML和XML文档进行模型化处理,提供了存取和更新文档内容、结构和样式的编程接口。DOM要比DTHML对象模型功能更全面。DOM由w3C制定,它可以分为三个部分:核心、XML和HTML。其中核心DOM定义了任意文档结构的标准对象集合;HTMLDOM和用户的关系最为紧密,用户通常使用存在于HTML中的JavaScript脚本来操纵DOM。DOM的出现使开发人员拥有了创建多样化、功能强大的应用程序的能力。在AJAX应用开发中,采用DOM的方式动态修改页面,进行局部刷新,从而实现页面的动态更新效果。DOM的出现使开发人员拥有了创建多样化、功能强大的应用程序的能力。在AJAX应用开发中,采用DOM的方式动态修改页面,进行局部刷新,从而实现页面的动态更新效果。3. CSSCSS的全称是Cascading Style Sheets,中文翻译为“层叠样式表”。它是一种制定网页的技术。它可以轻松地控制页面的布局,使页面的字体变得更美观,更容易编排,使页面真正赏心悦目;以前用过图片转换实现的功能,现在只用CSS就轻松实现,另外,CSS有多种使用方法如外部链接式、嵌入式或直接插入式等,使用起来非常便捷。4. XMLHttpRequestAJAX技术之中,最核心的技术就是XMLHttpRequest, XMLHttpRequest为运行于浏览器中的JavaScript脚本提供了一种在页面之内与服务器通信的手段。页面内的JavaScript可以在不刷新页面的情况下从服务器获取数据,或者向服务器提交数据。而在这个技术出现之前,浏览器与服务器通信的唯一方式就是通过表单的提交,这一般都会带来一次全页面的刷新。下面这段简单的代码展示了如何在客户端页面中创建一个XMLHttpRequest对象:var myXmlHttpRequest=false;/In the IE Browser myXmlHttpRequest = newAetiveXObject(Msxml2.XMLHTTP): myXmlHttpRequest = newAetiveX0bject(Microsoft.XMLHTTP):/In the Mozilla Browser myXmlHttpRequest = newXMLHttpRequest():2.1.4 AJAX工作原理AJAX典型的工作过程如下所示:在会话的开始,浏览器加载了一个Ajax引擎,其采用JavaScript编写,主要负责绘制用户界面以及与服务器端通讯。用户使用某个基于AJAX的功能后,引擎便开始异步访问服务器,而不用耽误用户的时间。当访问结束后,Ajax会将结果传回,客户端此时可以根据结果或者提示用户某些信息,或者为用户提供某些服务。AJAX技术与传统Web操作间之所以能够产生如此大的差异,关键在于AJAX中“异步”的特性,这个过程可用图2-2。图2-2 Compare with synchronous and asynchronous web application(传统web应用的同步交互过程和AJAX应用的异步交互过程的比较)AJAX技术特点和优势Ajax作为一种web领域广泛运用的技术,有许多传统web技术无法比拟的优点,主要体现在一下几个方面: 增加用户愉悦的体验。应为可以不刷新整个页面更新信息,所以给用户的视觉效果比以前的WEB系统大大提高,系统地响应速度也得到很大的提高; 减轻了网络负担。因为很多情况下不需要真个页面刷新,网络上只需要以XML格式或者其他自定义的格式传递所需的数据即可,大大的减小了网络上数据的传送量; 弱化了桌面程序和服务器程序的差别。提出了“富客户端”的概念,在WEB客户端也能处理一些事情; 减轻了服务器负载。对一些大型的网站,服务器的资源非常宝贵,AJAX技术能将部分处理分担在客户端,从而减轻了服务器端的负担,使得相同的服务器单位时间能提供更多的服务; 更新了开发理念。以前一些客户端的特殊效果,比如拖拽,分层展开,及时提醒等等只能在桌面软件上实现,现在通过AJAX技术,这些己经不再困难; 使Web程序更加规范。CSS、XML和XSLT被提到了前所未有的高度,使得Web程序的开发更加规范。同时,一些基于AJAX开发的辅助工具也为我们的开发提供了很大的便利。2.2 XML技术2.2.1 XML的历史与背景XML是从1996年开始有其雏形,并向 W3C(全球信息网联盟)提案,而在1998二月发布为W3C的标准(XML1.0)。 XML的前身是SGML(The Standard Generalized Markup Language),是自IBM从60年代就开始发展的 GML(Generalized Markup Language)标准化后的名称。XML(Extensible Markup Language)即可扩展标记语言,它与HTML一样,都是SGML(Standard Generalized Markup Language,标准通用标记语言)。Xml是Internet环境中跨平台的,依赖于内容的技术,是当前处理结构化文档信息的有力工具。XML与Access、Oracle和SQL Server等数据库不同,数据库提供了更强有力的数据存储和分析能力,例如:数据索引、排序、查找、相关一致性等,XML仅仅是展示数据。事实上XML与其他数据表现形式最大的不同是:他极其简单。这是一个看上去有点琐细的优点,但正是这点使XML与众不同。 XML与HTML的设计区别是:XML是用来存储数据的,重在数据本身。而HTML是用来定义数据的,重在数据的显示模式。XML的简单使其易于在任何应用程序中读写数据,这使XML很快成为数据交换的唯一公共语言,虽然不同的应用软件也支持其它的数据交换格式,但不久之后他们都将支持XML,那就意味着程序可以更容易的与Windows、Mac OS, Linux以及其他平台下产生的信息结合,然后可以很容易加载XML数据到程序中并分析他,并以XML格式输出结果。 因为XML是W3C制定的,XML的标准化工作由W3C的XML工作组负责,该小组成员由来自各个地方和行业的专家组成,他们通过email交流对XML标准的意见,并提出自己的看法 (/TR/WD-xml)。因为XML 是个公共格式, (它不专属于任何一家公司),你不必担心XML技术会成为少数公司的盈利工具,XML不是一个依附于特定浏览器的语言。2.2.2 XML系列简述XML不仅仅是XML1.1规范,围绕XML的是各式各样的XML标准和产品,他们与XML组合起来解决大量有关把XML引入主流计算的问题,即表现、结构和转换。这些组成了通常所说的XML系列。如图2-3所示,XML从大量的支持技术中产生力量。图2-3 XML技术序列2.2.3 XML语法简述XML文档的基本结构由序言部分(Prolog)和一个根元素(Root element)组成。序言包括了XML声明和DTD(或是XML Schema),DTD和XML Schema都是用来描述XML文档结构,也就是描述元素和属性是如何联系在一起的。根元素(也称文档元素),由文档中的其它所有标记和字符数据组成。元素是XML文档的基本组成部分。图2-4 XML文档示例下面是一些基本的语法规则: 每个文档有且仅有一个根元素(Root),其它所有元素都是它的子元素。 每个元素(Element)对的上下文(context)关系要正确。即元素之间必须正确的嵌套。因为XML是半结构化的数据,可以用XML描述树来表示起结构,所以它的逻辑结构和语法都有严格定义(如使用DTD或Schema)。 每个元素(Element)都必须有开始和结束标识()。元素的内容可以是其它的元素、字符数据、字符引用、实体引用、PI、注释和CDATA(Character DATA,字符数据)节,元素也是能够拥有属性的唯一基本类型。 元素的属性值必须由单引号()或双引号(“)包含。2.2.4 XML解析技术随着XML越来越广泛地被采用,高效解析XML文档也变得越来越重要,尤其是对于那些要处理大量数据的应用程序,这种技术尤为重要。不正确的解析会导致过度的内存消耗和过长的处理时间,从而有损于可伸缩性。通常,用于XML解析的API可以分为两大类:基于时间流的API和基于树结构的API(例如DOM);而基于时间流的API又可以分为“推”模式(比如SAX)和“拉”模式(比如STAX)两种类型。图2-5 基本的XML解析API以下针对这三种类型的典型API进行分析比较,指出它们各自的优点和不足之处,从而为接下来的嵌入式XML解析器的设计提供必要的选型依据。 DOMDOM是W3C支持的标准应用程序编程接口(API),是一种与平台和语言无关的接口,DOM采用基于树型的解析技术将XML文档一次性解析,生成一棵位于内存中的对象用以描述该文档。树的节点是一个个对象,通过操作这些对象就能操作XML文档的内容。图2-6 DOM解析过程图2-7 生成的DOM树示例 SAXSAX解析XML采用事件驱动的方式。虽然并不是W3C的标准,但它的API是公认的,很多解析器都是基于它的。与DOM比较而言,SAX是一种轻量级的方法。当SAX解析器读取文档的时候会引发很多事件,这些事件会交给对应的时间处理者(event handlers)。三种基本的事件:DTDHander访问XML的DTD内容;ErrorHander解析错误;ContentHandler访问文档的内容。图2-8 SAX解析过程SAX模型内存消耗小,因为整个文档无需一次加载到内存中,这使SAX解析器可以解析大于系统内存的文档。另外,无需像DOM那样为所有节点创建对象,开发人员可以根据需要创建自己的XML对象模型。 StAXStAX在完美地体现XML“拉”式解析器的卓越性能和低内存,并且突破了该类解析器在功能上的有限性。与SAX一样,StAX也是基于时间流驱动的,具有类似于流媒体的优点:分析能够立即开始,而不是等待所有的数据被处理,而且由于应用程序只是在读取数据时检查数据,文档的读入过程和解析过程同时进行,所以不需要将数据存储在内存中。StAX只解析应用程序所需要的时间流发送给应用程序,减少了向应用程序发送一些不必要的时间反馈图2-9 StAX解析过程 三种解析技术的比较三种技术各有各的优缺点,现将他们的优点、局限和使用地方列表如下:图2-10 XML Parsing Techniques at a Glance(XML解析技术一览)2.3 空间数据库技术概述空间数据库是以空间数据为研究对象,在实现对空间数据的存储和操作的基础上进行空间分析和应用。空间数据库在空间信息系统中占有十分重要的地位,其投资占整个系统建设的70甚至更多。因此,空间数据库的建设是空间信息系统建设中的一个关键问题,同时也是一项费时费力的基础性工作。在一个完整的空间数据库中,每个空间对象是由反映其几何特征的“空间数据”和非几何特征的“属性数据”表示。空间数据和属性数据是两种异质数据,同时维护两种异质数据是空间数据库区别于其他数据库的典型特征。空间数据库在地理信息系统中得到了大量的运用,但是地理信息系统技术在取得巨大发展的同时,其孤立性、封闭性的缺陷越来越不适合现代信息社会的要求,开放式地理信息系统(OpenGIS)规范和互操作技术的提出,不仅为数据共享提供了崭新的思路,而且将GIS带入了开放的时代,从而使得各个系统间实现不同类型地理数据和地理处理方法的透明访问成为可能。本小节的内容就围绕着OpenGIS展开。2.3.1 OpenGIS简介OpenGIS(Open Geo data Interoperation Specification,OGIS-开放的地理数据互操作规范)由美国OGC(OpenGIS协会,OpenGIS Consortium)提出。OGC是一个非赢利性组织,目的是促进采用新的技术和商业方式来提高地理信息处理的互操作性(Interoperability),OGC会员主要包括GIS相关的计算机硬件和软件制造商(包括ESRI、Intergraph、MapInfo等知名GIS软件开发商),数据生产商以及一些高等院校,政府部门等,其技术委员会负责具体标准的制定工作。OpenGIS的目标是,制定一个规范,使得应用系统开发者可以在单一的环境和单一的工作流中,使用分布于网上的任何地理数据和地理处理。它致力于消除地理信息应用(如地理信息系统,遥感,土地信息系统,自动制图/设施管理(AM/FM)系统)之间以及地理应用与其它信息技术应用之间的藩篱,建立一个无“边界”的、分布的、基于构件的地理数据互操作环境,与传统的地理信息处理技术相比,基于该规范的GIS软件将具有很好的可扩展性、可升级性、可移植性、开放性、互操作性和易用性。图2-11 OpenGIS结构图OpenGIS定义了一组基于数据的服务,而数据的基础是要素(Feature)。所谓要素简单地说就是一个独立的对象,在地图中可能表现为一个多边形建筑物,在数据库中即一个独立的条目。要素具有两个必要的组成部分,几何信息和属性信息。OpenGIS将几何信息分为点、边缘、面和几何集合四种:其中我们熟悉的线(LineString)属于边缘的一个子类,而多边形(Polygon)是面的一个子类。也就是说OpenGIS定义的几何类型并不仅仅是我们常见的点、线、多边形三种,它提供了更复杂更详细的定义,增强了未来的可扩展性。另外,几何类型的设计中采用了组合模式(Composite),将几何集合(GeometryCollection)也定义为一种几何类型,类似地,要素集合(FeatureCollection)也是一种要素。属性信息没有做太大的限制,可以在实际应用中结合具体的实现进行设置。相同的几何类型、属性类型的组合成为要素类型(FeatureType),要素类型相同的要素可以被存放在一个数据源中。而一个数据源只能拥有一个要素类型。因此,可以用要素类型来描述一组属性相似的要素。在面向对象的模型中,完全可以把要素类型理解为一个类,而要素则是类的实例。基类Geometry拥有Point(点), Curve(曲线), Surface(面)和GeometryCollection(集合图元)。每一个几何对象都与一个空间参照系相互关联,几何对象所定义的坐标在空间参照系得到反映。类关系图如图2-12所示:图2-12 Geometry 类关系图Geometry是OpenGIS几何模型层次关系的根类,Geometry是一个抽象(不能实例化)类。其子类实例化可得到空间参照系中的0,1,2维几何对象。在该层次关系中的所有可实例化类这样定义可以使在系统中是拓扑相关的(例如,所有几何对象定义都包括他们的边界)。2.3.2 MySQL中对OpenGIS的支持 MySQL是开源数据库的大鳄,从MySQL4.0开始加入了Spatial扩展功能,实现了OpenGIS规定的几何数据类型,在SQL中的简单空间运算。但是从4.0之后到现在,MySQL的Spatial部分一直没有继续的更新和增强。加上早先MySQL在SQL上对空间运算支持的不完善(只支持基于最小外接矩形的关系判断),所以MySQL是开源数据源中一个不太让人满意的选择。不过由于MySQL在小型项目上的广泛引用,在一些情况下也是可以以MySQL为数据源的。MySQL对OpenGIS的支持主要表现在支持空间数据的数据类型,以及用于创建和检索空间值的函数上。 MySQL空间数据类型MySQL具有与OpenGIS类对应的数据类型。某些类型只能保存单个几何值: GEOMETRY 、POINT、LINESTRING 、POLYGON 。GEOMETRY能够保存任何类型的几何值。其他的单值类型POINT、LINESTRING以及POLYGON只能保存特定几何类型的值。其他数据类型能保存多个值:MULTIPOINT、MULTILINESTRING 、MULTIPOLYGON 、GEOMETRYCOLLECTION 。GEOMETRYCOLLECTION能保存任意类型的对象集合。对于其他集合类型,MULTIPOINT、MULTILINESTRING、MULTIPOLYGON和GEOMETRYCOLLECTION,仅限于具有特定几何类型的集合成员。 MySQL创建几何值的函数: GeometryCollection(g1,g2,.)构造WKB GeometryCollection。如果任何参量不是构造良好的几何对象WKB表达式,返回值为NULL。 LineString(pt1,pt2,.)从多个WKB Point参量构造WKB LineString值。如果任何参量不是WKB Point,返回值为NULL。如果Point参量的数目小于2,返回值为NULL。 MultiLineString(ls1,ls2,.)使用WKB LineString参量构造WKB MultiLineString值。如果任何参量不是WKB LineString,返回值为NULL。 MultiPoint(pt1,pt2,.)使用WKB Point参量构造WKB MultiPoint值。如果任何参量不是WKB Point,返回值为NULL。 MultiPolygon(poly1,poly2,.)从一组WKB Polygon参量构造WKB MultiPolygon值。如果任何参量不是WKB Polygon,返回值为NULL。 Point(x,y)使用其坐标构造WKB Point。 Polygon(ls1,ls2,.)从多个WKB LineString参量构造WKB Polygon值。如果任何参量未表示为LinearRing的WKB形式(即,非封闭和简单LineString),返回值为NULL。 Geometry格式转换函数 AsBinary(g)将采用内部几何格式的值转换为其WKB表示,并返回二进制结果。 AsText(g)将采用内部几何格式的值转换为其WKT表示,并返回字符串结果。 GeomFromText(wkt,srid)将字符串值从其WKT表示转换为内部几何格式,并返回结果。 GeomFromWKB(wkb,srid)将二进制值从其WKB表示转换为内部几何格式,并返回结果。. 通用几何函数 Dimension(g) 返回几何值g的固有维数。结果可以是-1、0、1或2。 Envelope(g)返回几何值g的最小边界矩形(MBR)。结果以Polygon值的形式返回。 多边形(polygon)是由边界框的顶点定义的:POLYGON(MINX MINY, MAXX MINY, MAXX MAXY, MINX MAXY, MINX MINY) GeometryType(g)以字符串形式返回几何类型的名称,几何实例g是几何类型的成员。该名称与可实例化几何子类之一对应。 SRID(g)返回指明了几何值g的空间参考系统ID的整数。 Point函数 X(p)以双精度数值返回点p的X坐标值。 Y(p)以双精度数值返回点p的Y坐标值。 LineString函数 EndPoint(ls)返回LineString值1s的最后一个点的Point。 GLength(ls)以双精度数值返回LineString值1s在相关的空间参考系中的长度。 NumPoints(ls)返回LineString值1s中的点数。 PointN(ls,n)返回LineString值1s中的第n个点。点编号从1开始。 StartPoint(ls)返回LineString值1s的第一个点的Point。 MultiLineString函数 GLength(mls)以双精度数值形式返回MultiLineString值m1s的长度。mls的长度等于其元素的长度之和。 IsClosed(mls)如果MultiLineString值m1s是封闭的(即StartPoint()和EndPoint()值对m1s中的每个LineString是相同的)返回1。如果mls是非封闭的,返回0,如果它是NULL,返回-1。 Polygon函数 Area(poly)以双精度数值形式返回Polygon值poly的面积,根据在其空间参考系中的测量值。 ExteriorRing(poly)以LineString形式返回Polygon值poly的外环。 InteriorRingN(poly,n)以LineString形式返回Polygon值poly的第n个内环。环编号从1开始。 NumInteriorRings(poly)返回Polygon值poly的内环的数目。 MultiPolygon函数 Area(mpoly)以双精度数值形式返回MultiPolygon值mpoly的面积,根据在其空间参考系中的测量结果。 GeometryCollection函数 GeometryN(gc,n)返回GeometryCollection值gc中第n个几何对象。几何对象的编号从1开始。 NumGeometries(gc)返回GeometryCollection值gc中几何对象的数目。0 关于几何最小边界矩形(MBR)的关系MySQL提供了一些可测试两个几何对象g1和g2最小边界矩形之间关系的函数。它们包括: MBRContains(g1,g2)返回1或0以指明g1的最小边界矩形是否包含g2的最小边界矩形。 MBRDisjoint(g1,g2)返回1或0以指明两个几何变量g1和g2的最小边界矩形是否不相交。 MBREqual(g1,g2)返回1或0以指明两个几何变量g1和g2的最小边界矩形是否相同。 MBRIntersects(g1,g2)返回1或0以指明两个几何变量g1和g2的最小边界矩形是否相交。 MBROverlaps(g1,g2)返回1或0以指明两个几何变量g1和g2的最小边界矩形是否交迭。 MBRTouches(g1,g2)返回1或0以指明两个几何变量g1和g2的最小边界矩形是否接触。 MBRWithin(g1,g2)返回1或0以指明g1的最小边界矩形是否位于g2的最小边界矩形内。2.4 相关设计模式概述2.4.1 设计模式的发展历史模式的核心思想是总结和积累前人成功的设计经验,通过对这些经验的学习使得人们在面对新的设计问题时不用一切都从零开始,而是尽量套用己有的模式以提高生产效率。模式体现了复用的思想。模式的研究起源于20世纪70年代建筑工程设计大师ChristopherAlexander,他发表了很多关于城市规划和建筑设计的著作,其中明确提出了模式概念。发人员的青睐;进入90年代,面向对象的重点已经从语言转移到设计方法学方面,尽管还不成熟,但陆续提出了一些面向对象的开发方法和设计技术。随之面向对象设计模式才初露端倪。1995年由Erich Gamma、Richard Helm、Ralph Johnson和John Vlissides四人合著的设计模式可复用面向对象软件的基础(简称GoF设计模式)书出版,他们对大量项目中的可重用思想进行了收集、分析并加以概括整理,最终形成了23个经典模式。GoF的“设计模式”是第一次将设计模式提升到理论高度,并将之规范化,本书提出了23种基本设计模式,自此,在可复用面向对象软件的发展过程中,新的大量的设计模式不断出现。2.4.2 设计模式的定义与基本要素设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样。设计模式使人们可以更加简单方便地复用成功的设计和体系结构。将已证实的技术表述成设计模式也会使新系统开发者更加容易理解其设计思路。1. 模式名称(pattern name) 一个助记名,它用一两个词来描述模式的问题、解决方案和效果。命名一个新的模式增加了我们的设计词汇。设计模式允许我们在较高的抽象层次上进行设计。基于一个模式词汇表,我们自己以及同事之间就可以讨论模式并在编写文档时使用它们。模式名可以帮助我们思考,便于我们与其他人交流设计思想及设计结果。找到恰当的模式名也是我们设计模式编目工作的难点之一。 2. 问题(problem) 描述了应该在何时使用模式。它解释了设计问题和问题存在的前因后果,它可能描述了特定的设计问题,如怎样用对象表示算法等。也可能描述了导致不灵活设计的类或对象结构。有时候,问题部分会包括使用模式必须满足的一系列先决条件。 3. 解决方案(solution) 描述了设计的组成成分,它们之间的相互关系及各自的职责和协作方式。因为模式就像一个模板,可应用于多种不同场合,所以解决方案并不描述一个特定而具体的设计或实现,而是提供设计问题的抽象描述和怎样用一个具有一般意义的元素组合(类或对象组合)来解决这个问题。 4. 效果(consequences) 描述了模式应用的效果及使用模式应权衡的问题。尽管我们描述设计决策时,并不总提到模式效果,但它们对于评价设计选择和理解使用模式的代价及好处具有重要意义。软件效果大多关注对时间和空间的衡量,它们也表述了语言和实现问题。因为复用是面向对象设计的要素之一,所以模式效果包括它对系统的灵活性、扩充性或可移植性的影响,显式地列出这些效果对理解和评价这些模式很有帮助。2.4.3 设计模式的作用面向对象设计者在软件开发时经常遇到一些问题,比如将系统分解成对象集合,同时要考虑许多因素:封装、粒度、依赖关系、性能、复用等等,有时这些因素通常还是相互冲突的。再比如,一些Java程序员在实际开发中,很少使用到面向对象的接口或抽象类,经常以那些技术只适合大型项目为由,避开或忽略它们,其实,Java的接口和抽象类是真正体现面向对象思想的核心所在。这些类似问题的原因是,开发人员对于面向对象的理解只停留在了语言层,而没有深入到设计模式中去。设计模式并不是一种具体“技术”,它讲述的是思想,它不仅仅展示了接口或抽象类在实际案例中的灵活应用和智慧,让你能够真正掌握接口或抽象类的应用,从而在原来的Java语言基础上跃进一步,更重要的是,GoF的设计模式反复向你强调一个宗旨:要让你的程序尽可能的可重用。需要指出的是,设计模式并不保证成功。一个设计模式的描述表明该模式什么时候是可适用的,但是只有经验的积累才能更好地确保何时一个特定的设计模式能够改良一个设计。2.4.4 Gof设计模式的简介GoF在Design Pattern中总结出23种经典模式,各种设计模式在粒度和抽象层次上各有不同,对它们进行分类有助于更快的学习和使用模式,主要使用下面两条准则对模式进行分类。依据其目的可分为:创建型(Creational)、结构型(Structural)、和行为型(Behavioral)三种。创建型模式与对象的创建有关;结构型模式处理类或对象的组合;行为型模式对类或对象怎样交互作用和怎样分配职责进行描述。依据应用范围可分为:类模式和对象模式。指定模式主要是用于类还是用于对象。类模式处理类和子类之间的关系,这些关系通过继承建立,是静态的,在编译的时候就确定下来了。对象模式处理对象间的关系,这些关系在运行时刻是可以变化的,具有动态性。图2-13 Gof设计模式在设计中运用到的两种设计模式:1. 观察者模式观察者模式(有时又被称为发布/订阅模式)是软件设计模式的一种。在此种模式中,一个目标物件管理所有相依于它的观察者物件,并且在它本身的状态改变时主动发出通知。这通常透过呼叫各观察者所提供的方法来实现。此种模式通常被用来实作事件处理系统。图2-14 观察者模式结构图在什么时候运用:当抽象个体有两个互相依赖的层面时。封装这些层面在单独的物件内将可允许程式设计师单独地去变更与重复使用这些物件,而不会产生两者之间交互的问题;当其中一个物件的变更会影响其他物件,却又不知道多少物件必须被同时变更时;当物件应该有能力通知其他物件,又不应该知道其他物件的实做细节时。2. 单例模式单例模式(Singleton),也叫单子模式,是一种常用的软件设计模式。在应用这个模式时,单例对象的类必须保证只有一个实例存在。许多时候整个系统只需要拥有一个的全局对象,这样有利于我们协调系统整体的行为。比如在某个服务器程序中,该服务器的配置信息存放在一个文件中,这些配置数据由一个单例对象统一读取,然后服务进程中的其他对象再通过这个单例对象获取这些配置信息。这种方式简化了在复杂环境下的配置管理。实现单例模式的思路是:一个类能返回对象一个引用(永远是同一个)和一个获得该实例的方法(必须是静态方法,通常使用getInstance这个名称);当我们调用这个方法时,如果类持有的引用不为空就返回这个引用,如果类保持的引用为空就创建该类的实例并将实例的引用赋予该类保持的引用;同时我们还将该类的构造函数定义为私有方法,这样其他处的代码就无法通过调用该类的构造函数来实例化该类的对象,只有通过该类提供的静态方法来得到该类的唯一实例。单例模式在多线程的应用场合下必须小心使用。如果当唯一实例尚未创建时,有两个线程同时调用创建方法,那么它们同时没有检测到唯一实例的存在,从而同时各自创建了一个实例,这样就有两个实例被构造出来,从而违反了单例模式中实例唯一的原则。 解决这个问题的办法是为指示类是否已经实例化的变量提供一个互斥锁(虽然这样会降低效率)。2.5 SSH构架简介SSH框架是采用Struts+Spring+Hibernate整合而成的,SSH是分层思想的完美诠释。为Web运用的各层都提供了
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 水产品线上销售平台用户体验创新创业项目商业计划书
- 移动工作站GPU云渲染服务创新创业项目商业计划书
- 2025年恩施市残疾人联合会公益性岗位招聘考试笔试试题(含答案)
- 现场急救知识培训教案课件
- 2025年城市地下综合管廊运营社会稳定风险评估与风险控制报告
- 2025年汽车尾气排放检测技术市场发展趋势报告
- 2025年生鲜新零售供应链优化与冷链物流成本效益评估报告
- 2025年快时尚模式在时尚零售行业的供应链优化研究报告
- 2025年数字化教材在数学教育中的应用与教学效果研究
- 2025年教育行业教育培训机构教学效果评估与反馈研究报告
- 化工设备基础知识培训课件
- 2025-2026学年北师大版数学小学三年级上册(全册)教案设计及教学计划
- 医疗生产安全知识培训课件
- 2025年平凉市静宁县城镇公益性岗位人员招聘(78人)考前自测高频考点模拟试题及答案详解一套
- 2025年部编版新教材道德与法治二年级上册教学计划(含进度表)
- 2025年【秋季】小学【一年级】开笔礼校长致辞:翰墨初启 开笔破蒙
- 2025年“学宪法讲宪法”主题活动知识竞赛题库附答案
- 2025年秋八年级开学主题班会第一课课件(初二正青春拼搏向暖阳)
- 印章U盾管理办法
- 携手筑梦新学期共育成长向未来-2025-2026学年高二上学期开学家长会-
- 2025年重庆市永川区社区工作者招聘考试笔试试题(含答案)
评论
0/150
提交评论