基于智能移动终端的路面病害检测系统开发研究

基于智能移动终端的路面病害检测系统开发研究

ID:76165948

大小:3.56 MB

页数:92页

时间:2024-02-04

上传者:笑似︶ㄣ無奈
基于智能移动终端的路面病害检测系统开发研究_第1页
基于智能移动终端的路面病害检测系统开发研究_第2页
基于智能移动终端的路面病害检测系统开发研究_第3页
基于智能移动终端的路面病害检测系统开发研究_第4页
基于智能移动终端的路面病害检测系统开发研究_第5页
基于智能移动终端的路面病害检测系统开发研究_第6页
基于智能移动终端的路面病害检测系统开发研究_第7页
基于智能移动终端的路面病害检测系统开发研究_第8页
基于智能移动终端的路面病害检测系统开发研究_第9页
基于智能移动终端的路面病害检测系统开发研究_第10页
资源描述:

《基于智能移动终端的路面病害检测系统开发研究》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

硕士学位论文基于智能移动终端的路面病害检测系统开发研究作者姓名陈颗学科专业道路与铁道工程指导教师王端宜教授所在学院土木与交通学院论文提交日期2017年04月 StudyontheDevelopmentofRoadDiseaseDetectionSystemBasedonIntelligentMobileTerminalADissertationSubmittedfortheDegreeofMasterCandidate:ChenKeSupervisor:Prof.WangDuanyiSouthChinaUniversityofTechnologyGuangzhou,China 分类号:U416学校代号:10561学号:201420106673华南理工大学硕士学位论文基于智能移动终端的路面病害检测系统开发研究作者姓名:陈颗指导教师姓名、职称:王端宜教授申请学位级别:工学硕士学科专业名称:道路与铁道工程研究方向:路面工程论文提交日期:2017年04月13日论文答辩日期:2017年05月31日学位授予单位:华南理工大学学位授予日期:年月日答辩委员会成员:主席:张丽娟委员:王端宜吴文亮胡迟春钱尼贵 华南理工大学学位论文原创性声明本人郑重声明:所呈交的论文是本人在导师的指导下独立进行研宂所取得的研究成果。除了文中特别加以标注引用的内容外,本论文不包含任何其他个人或集体已经发表或撰写的成果作品》对本文的研究做出重要贡献的个人和集体,均已在文中以明确方式标明。本人完全意识到本声明的法律后果由本人承担。作者签名:I曰期:年夕月W曰学位论文版权使用授权书本学位论文作者完全了解学校有关保留、使用学位论文的规定,即:研宄生在校攻读学位期间论文工作的知识产权单位属华南理工大学。学校有权保存并向国家有关部门或机构送交论文的复印件和电子版,允许学位论文被查阅(除在保密期内的保密论文外);学校可以公布学位论文的全部或部分内容,可以允许釆用影印、缩印或其它复制手段保存、汇编学位论文■=一本人电子文档的内容和纸质论文的内容相致。本学位论文属于:□保密,(校保密委员会审定为涉密学位时间:年_月?曰)??于年月曰解密后适用6___本授权书A保密,同意在校园网上发布,供校内师生和与学校有共享协议的单位浏览:同意将本人学位论文提交中国学术期刊(光盘版电子杂志社全文)出版和编入CNKI《中国知识资源总库》,传播学位论文的全部或部分内容。请在“”以上相应内打V(#)作者签名:曰期曰指导教师签客;日期:i祀纪休姑作者联系电话:电子邮箱:联系地址(含邮编 摘要道路运输是我国最主要的交通运输方式之一,其正常安全服务对促进地方经济发展有重要作用。路面的早期病害,导致路面技术性能下降,严重影响其服务水平,甚至危及行车安全。对路面采取合理的养护对策,对于提高道路服务水平,增强行车安全,具有重要意义。路面病害调查作为制定合理养护对策的基础,如何快速有效的进行路面病害调查非常关键。用于路面病害调查的方法主要有人工检测和自动化检测。自动化检测方法能够大大提高效率,但是它的成本非常高,精度不高。而传统的人工检测方法成本低,但是它的效率低,有纸化操作,浪费资源。针对以上方法的优缺点,并随着Android智能手机的普及,其内置大量的传感器,提出将智能手机应用于路面病害调查。针对国内外智能手机在路面病害调查的现状进行分析研究,同时学习Android系统、数据库、Web服务器相关知识,开发基于智能移动终端的路面病害检测系统。系统利用Android智能手机采集路面病害数据,SQLServer数据库存储、管理数据,Web服务器实现上述两者之间的数据交互。对系统进行功能测试,在小米4真机上能够实现道路信息编辑、道路路段信息编辑、病害信息编辑、病害图片添加、病害位置定位、病害查询等功能,同时系统计算的路面损坏PCI值与Excel上计算结果完全一致。本文开发的基于移动智能终端的路面病害检测系统,相对于传统的方法,更加方便快捷、成本更低,具有良好的应用前景。关键词:路面病害检测;Android系统;数据库I ABSTRACTRoadtransportationisoneofthemostimportantmodesoftransportationinChina.Thesafetyserviceofroadtransportationplaysanimportantroleinpromotingthedevelopmentoflocaleconomy.Theearlydiseaseoftheroad,resultinginthedeclineofpavementtechnicalperformance,seriouslyaffecteditsservicelevel,andevenendangerthetrafficsafety.Sincepavementdiseaseinvestigationisabasisforthedevelopmentofreasonableconservationmeasures,itiscriticaltocarryouttheroaddiseaseinvestigationquicklyandeffectively.Manualdetectionandautomatedtestingaretwomajormethodsforroaddiseaseinvestigation.Automateddetectionmethodscangreatlyimprovethedetectionefficiency,butitscostisveryhigh,theaccuracyofitisnothighenough.Thetraditionalmethodofmanualdetectionhaslowcost,butitisinefficient,paperizedoperation,andwasteofresources.Consideringtheadvantagesanddisadvantagesoftheabovemethodsaswellas,thepopularityofAndroidsmartphones,whichbuiltalargenumberofsensorsinit,usethesmartphoneaspavementdiseaseinvestigationwasputforward.Thispaperanalyzesthecurrentsituationofroaddiseasesurveyindomesticandforeignsmartphones,andlearnstherelatedknowledgeofAndroid,databaseandWebserver,andproposesthedevelopmentofaroaddiseasedetectionsystembasedonintelligentmobileterminal.ThesystemusesAndroidsmartphonetocollectpavementdiseasedata,SQLServerdatabasestorage,managementdata,andWebservertoachievethedataexchangebetweenandroidsmartphonesanddatabase.Thefunctionofthesystemistested,andthefunctionofroadinformationediting,roadinformationediting,diseaseinformationediting,diseasepictureaddition,diseaselocation,diseasequeryandsooncanberealizedontherealmachineofXiaoMi4.Theresultsareidentical.Themobileintelligentterminalpavementdiseasedetectionsystemdevelopedinthispaperwasmoreconvenientandhaslowercostaswellasgoodapplicationprospectsascomparedwiththetraditionaldetectionmethod.Keywords:PavementDiseaseDetection;AndroidSystem;DatabaseII 目录摘要..........................................................................................................................................1ABSTRCT................................................................................................................................II第一章绪论..............................................................................................................................11.1研究背景及意义.............................................................................................................11.2国内外研究现状.............................................................................................................21.2.1路面平整度...............................................................................................................21.2.2路面损坏...................................................................................................................31.2.3道路养护信息管理...................................................................................................51.2.4其它...........................................................................................................................51.3主要存在的问题.............................................................................................................61.4本文的研究内容.............................................................................................................6第二章系统整体架构设计......................................................................................................82.1系统目标定位.................................................................................................................82.2系统功能需求分析.........................................................................................................82.3系统整体架构.................................................................................................................92.4系统硬件要求...............................................................................................................102.5系统操作流程...............................................................................................................112.6本章小结.......................................................................................................................11第三章路面病害检测系统相关技术研究............................................................................123.1Android系统..................................................................................................................123.1.1Android系统应用现状............................................................................................123.1.2Android系统的体系架构........................................................................................123.1.3Android应用程序的基本组件...............................................................................143.1.4Android的开发环境...............................................................................................163.2Android应用程序权限.................................................................................................173.3Web服务器介绍及设计................................................................................................183.4本章小结.......................................................................................................................21III 第四章数据库设计................................................................................................................224.1数据库系统的基本概念...............................................................................................224.1.1数据.........................................................................................................................234.1.2数据模型.................................................................................................................234.1.3数据库管理系统.....................................................................................................244.2数据库设计...................................................................................................................254.2.1数据库设计的步骤.................................................................................................254.2.2数据库表的设计.....................................................................................................284.2.3数据库表关系.........................................................................................................344.3本章小结.......................................................................................................................35第五章路面病害检测系统的设计与实现............................................................................365.1安卓客户端界面设计...................................................................................................365.2登录功能.......................................................................................................................375.3病害数据采集模块.......................................................................................................405.3.1道路信息编辑.........................................................................................................415.3.2道路路段信息编辑.................................................................................................445.3.3路段病害信息编辑.................................................................................................465.3.4路面损坏PCI计算.................................................................................................575.4病害查询模块...............................................................................................................655.5系统安装测试...............................................................................................................695.5.1路面病害检测程序安装.........................................................................................695.5.2功能测试.................................................................................................................705.6本章小结.......................................................................................................................76结论与展望..............................................................................................................................77一、主要成果及结论..........................................................................................................77二、展望..............................................................................................................................77参考文献..................................................................................................................................79攻读博士/硕士学位期间取得的研究成果.............................................................................82致谢..........................................................................................................................................83IV 第一章绪论第一章绪论1.1研究背景及意义公路是国民经济、社会发展和人民生活服务的公共基础设施,公路运输在整个交通运输系统中也处于基础地位。截至2015年,全国公路总里程457.73万公里,公路养护里程446.56万公里,占公路总里程97.6%[1]。而路面技术状况调查是公路运输部门做出路面养护决策的依据。根据《公路技术状况评定标准》(JTGH20-2007),路面技术状况评定所需要数据的最低检测与调查频率应符合表1-1[2]。由此可知,采集如此庞大的路面技术状况数据将非常艰难。目前,用于路面病害数据采集的方法主要有:人工检测及自动化检测。传统的人工检测方法虽然成本低,但是它的效率低,同时需封路进行,影响交通顺畅;自动化检测能够大大提高效率,但是它的成本高,图像存储空间要求高,精度不高[3,4]。针对以上检测方法的缺陷,国内外一些学者开始研究将智能手机用于路面病害检测。我国智能手机用户已经超过5亿人,是智能手机用户最多的国家。随着智能手机的发展,智能手机应用程序也得到了广泛的应用,涉及到生活中各个方面。现代智能手机内置摄像头、三轴加速度计、陀螺仪、光强传感器、磁场传感器、GPS等,若开发一款基于智能手机的路面病害检测系统,用于路面损坏PCI检测,由于它的低成本及易于使用的特性,将具有广阔的应用前景[5]。表1-1最低检测与调查频率路面损检测频率路面平整度抗滑性能路面车辙结构强度坏检测内容(RQI)(SRI)(RDI)(PSSI)(PCI)高速、一1年11年1次2年1次1年1次抽样检测级公路次沥青二、三、1年11年1次------四级公路次路面高速、一1年1水泥1年1次2年1次----PQI级公路次混凝二、三、1年1土1年1次------四级公路次1年1砂石路面--------次1 华南理工大学硕士学位论文1.2国内外研究现状国内外学者将智能手机用于路面技术状况调查,主要集中在以下几个方面:路面损坏、路面平整度以及道路养护信息管理等。1.2.1路面平整度一些学者开发基于智能手机的路面平整度检测系统。这些系统的原理就是通过智能手机内置的加速度计采集行驶在道路上车辆的加速度数据,然后对加速度数据进行二次积分,得到位移数据,进而得到路面轮廓数据。由上述原理可知,这些系统可以归类到断面类平整度仪,但是又不同于传统的断面类平整度仪,因为它们的价格低廉、操作简单。ShahidulIsIam团队开发了“RoughnessCapture”应用程序,将安装此应用程序的智能手机固定在汽车仪表盘上,通过该智能手机应用程序收集三个正交方向的加速度、时间戳、GPS坐标,并将它们存储在ASCII文本文件中。然后将此文件导入MATLAB,通过内部代码计算得到路面轮廓数据,最后,将路面轮廓数据导入ProVAL软件计算得到IRI值。试验阶段,考虑到车辆类型(悬架系统)、行驶速度、智能手机类型(样本采集率)会影响IRI值,根据以前的研究结果,进行试验方案设计。以IRI_Profiler为x轴,IRI_cellphone_app为y轴(单位为in./mi),建立平面坐标系。在路段1、2中,所有点均能在y=x+10与y=x-10之间区域内,这说明2者之间有很好的相关性。而在路段3中,所有点均偏离y=x下方,针对这种现象,研究者给出了2种解释:①在高IRI值路段,智能手机样本采集率偏低,由路面平整度引起的车辆振动不能完全感应到;②车辆悬架系统的阻尼作用。研究者使用简单的线性相关性来修正智能手机测得的IRI值,即修正IRI=0.95*智能手机测量的IRI+58,结果显示,修正后的IRI值与惯性分析器获得IRI值有较好的相关性。研究者对智能手机IRI测量系统的重现性也进行了研究,试验结果显示其平整度变异系数10%左右,而基于传统的惯性分析器获得的平整度变异系数低于5%,但是考虑到惯性分析器测量路面平整度的成本,变异系数为10%的智能手机IRI测量系统是合理的[6,7]。ViengnamDouangphachanh团队研究智能手机采集的加速度数据与传统方法获得的IRI值之间的相关性。通过相关系数的高低,来选择最佳的试验条件。研究集中在以下2个方面:①智能手机的位置和约束状态;②滤波器处理智能手机采集到的加速度信号。2 第一章绪论试验阶段,智能手机A、B固定在试验车辆的仪表盘上,智能手机C放在司机衬衫的前口袋中,智能手机D放在换挡杆附近的一个盒子里;数据处理过程中,用0-10Hz、20-30Hz、40-50Hz、0-50Hz分别处理收集到的加速度信号。试验结果显示,用40-50Hz处理的智能手机C的加速度信号与IRI值的相关性最好[8]。在日本,一个研究团队开发了一个“颠簸记录”应用程序,用于检测道路颠簸的位置和严重程度[9]。美国学者RajBridgeall提出了用“撞击因子”指标来评价行驶质量,研究中确定了64HZ为最佳的数据采集率[10]。长安大学的韩韶清开发一款路面平整度检测车,当该检测车行驶在路段上时,检测车内的加速度计能够采集三个正交方向的加速度,通过单片机控制系统处理,再传输到数据接收系统,接收系统的平整度检测软件将这些数据进行分析处理,获得该路段的纵断面曲线及IRI曲线。该检测车相对于自动化检测方法,具有成本低、携带方便、操作简单等特点[11]。1.2.2路面损坏(1)裂缝国内外学者将智能手机用于路面裂缝检测,更多地是以图片形式采集裂缝信息,而路面裂缝识别,则由于智能手机软硬件的限制,还不能在智能手机上实现。美国卡内基梅隆大学ChristophMertz团队开发了一个基于智能手机的系统,将智能手机安装在个人汽车、公共汽车、垃圾车、警车上,采集路面图像,上传到服务器,分析与处理系统采用机器视觉算法自动识别路面裂缝。整个系统的成本低于1000美元,消耗劳动力少[12]。西安工业大学的张海先开发了一个手持终端设备的混凝土路面病害检测系统,系统采用了多种自动检测算法实现了对混凝土路面裂缝类病害的自动化处理[13]。西安工业大学的刘才臻设计开发了一个混凝土路面病害巡检评估系统,系统使用安卓系统的设备作为手持终端,进行路面病害图像数据采集,通过移动网络传输至服务器,服务器内的自动算法对这些图像进行分析处理,实现裂缝分类并提取裂缝相应的参数[14]。(2)坑槽当车辆行驶在坑槽路段时会引起加速度的变化,通过智能手机采集的加速度数据,然后采用算法自动识别这种变化,来检测坑槽的存在。目前,国内外开发的坑槽检测系统,大多利用智能手机来采集加速度数据,如何根据加速度数据的变化来判定坑槽,则3 华南理工大学硕士学位论文需要通过相应的算法来进行识别。拉脱维亚的ArtisMednis团队开发了基于安卓智能手机的坑槽实时检测系统。该系统采用了基于阀值启发式的4种算法,分别为Z-THRESH、Z-DIFF、STDEV(Z)、G-ZERO。Z-THRESH算法,事先设定一个阀值,当竖向加速度值超过这个值时,则认为存在坑槽。Z-DIFF算法,事先设定一个阀值,当相邻2个采样点的竖向加速度差值超过这个值时,则认为存在坑槽。STDEV(Z)算法,事先设定一个阀值,当竖向加速度的标准差超过这个值,则认为存在坑槽。G-ZERO算法,事先设定一个阀值,当三个方向的加速度值均低于这个值时,则认为存在坑槽。研究团队选择长4.4千米的路段进行试验,试验结果确定了四种算法的最佳阀值,分别为0.4g、0.2g、0.2g、0.8g。这四种算法的准确率均大于80%,其中Z-DIFF算法得准确率达到了90%[15]。微软印度研究院开发的Nericell和TrafficSense系统,系统使用WP操作系统的智能手机作为硬件/软件平台。该系统采用了基于阀值启发式的Z-PEAK和Z-SUS算法来检测坑槽。在高速(>25kmph)时,使用Z-PEAK算法检测坑槽,它的特点类似于上述Z-THRESH算法;在低速(<25kmph)时,使用Z-SUS算法检测坑槽,当采集的竖向加速度持续20ms低于设定的阀值T时,则认为存在坑槽[16-18]。广西大学叶进设计开发了一款基于群智感知的道路坑槽检测系统,系统使用安卓智能手机采集三向加速度数据及GPS位置信息,并通过移动网络传输至中心服务器。中心服务器对接收的数据进行分析,首先采用k-近邻算法检测是否存在坑槽,然后再用k-means聚类算法检测坑槽等级。试验结果表明,这两类算法识别准确率超过80%[19]。上海交通大学杨超使用车辆中的智能手机的振动、3D加速度传感器和GPS的感知数据,检测路面危害坑洞的位置,估计危害坑洞信息,同时利用众包模式聚合所有用户的信息,以聚合并优化路面坑洞检测精度[20]。(3)松散松散是沥青路面中一种常见的病害。为了解决传统方法的局限性,AidinMassahi团队开发了一个智能手机应用程序,用于获取视频图像及GPS位置数据;然后将数据导入到电脑,通过预先安装的分析软件来确定松散的面积。研究小组选择一些路段进行试验,将该方法获得的松散数据与佛罗里达交通部门提供的松散等级相比较,发现两者之间具有良好的相关性,并且建立了不同松散等级之间的临界值,并以这些临界值作为评价标准[21]。4 第一章绪论1.2.3道路养护信息管理在道路养护信息管理方面,国内外大多采用智能手机采集路面病害数据,数据库存储、管理数据。长安大学的冯志慧开发了一种基于智能手机的干线公路养护数据采集系统,系统采用智能手机作为数据采集工具,以SQLServer为数据库。道路养护人员可以将智能手机采集到的数据实时上传至数据库,为道路养护部门提供数据基础,有助于制定正确的养护方案[22]。中国矿业大学的李若童开发了一款基于手机端的路面病害管理系统。系统由智能手机、数据库以及进行两者之间数据交互的Web服务器组成。手机端采用安卓操作系统,能够查看病害的信息以及病害的处治维修措施,还使用DBSCAN算法对病害分布进行统计分析[23]。长安大学仵晓煜开发基于PAD平台的便携式路况采集系统,系统中包括病害采集子系统,该子系统具有采点、查看等功能。采点功能用于采集路面病害详细信息;查看功能可查看未上报病害和历史病害的详细信息[24]。长安大学的王楠开发了一个高速公路建设PAD质量巡查系统,该系统包括了PAD移动终端、数据库、服务器三个部分。管理人员手持移动设备,在施工现场,拍照、文字描述施工状况,并将照片、描述通过移动网络传输至服务器[25]。同济大学唐棠基于Android系统开发了一个道路养护信息采集软件,系统包括路面病害输入模块,模块可选择病害类型及损坏程度[26]。1.2.4其它国内一些学者将智能手机应用到道路设施空间位置和路线横断面方面。中国科学院冯磊设计开发了一种客户端/服务器结构的无线移动式三维GIS系统,系统由智能手机客户端、数据库、GIS服务器组成。使用智能手机客户端现场采集道路设施空间位置和属性数据,并通过无线网络传输到GIS服务器。GIS服务器一方面将接收的数据存储至数据库,另一方面对这些数据进行自动建模,并将结果反馈至客户端。对该系统进行测试,结果表明,系统运行顺畅,功能均能实现[27]。中山大学的杨文浩开发一种基于智能手机和GPS的道路数据采集系统。该系统是在GIS平台上进行二次开发,通过智能手机采集实时GPS位置数据和道路图片,并且5 华南理工大学硕士学位论文保存,然后对这些数据进行过滤处理,处理完毕后,将这些离散的GPS数据绘制在坐标中并沿着轨迹连成一条线,然后根据横断面绘制规则和采集的道路图片,自动绘制道路横断面上的各个道路元素[28]。1.3主要存在的问题尽管国内外在利用智能手机进行对路面技术状况调查方面做了一些研究,取得了很好成果,但是仍然有许多问题需要解决:(1)从国内外将智能手机用于路面技术状况调查的研究来看,智能手机更多地进行数据采集,然后通过无线网络将采集的数据发送到数据库,最后在计算机上完成数据处理与分析;(2)开发的智能手机检测系统,功能单一,仅仅能调查一种或几种路面病害对象;(3)国内研究主要集中在哪里有病害,病害怎么样,更多地对路面病害进行定性描述。系统并不能计算得到路段的PCI值。1.4本文的研究内容本文针对传统的路面病害检测方法的缺陷,结合了智能手机、无线数据传输技术、无线定位技术等,研究开发基于智能移动终端的路面病害检测系统。该系统由三个部分组成,分别为安卓智能手机客户端,数据库、Web服务器。安卓智能手机进行路面病害数据采集,数据库用于存储、组织、管理病害数据,Web服务器实现Android客户端与数据库之间的数据交互。本文的主要研究内容如下:(1)研究国内外智能手机在路面病害调查方面的资料,针对自动化检测方法和人工检测方法的优缺点,提出开发基于智能移动终端的路面病害检测系统的构想。(2)研究智能移动终端的路面病害检测系统的需求,确定系统所需功能,从实现功能角度考虑,拟定系统的整体架构。(3)介绍Android系统的应用现状、体系架构、应用程序基本组件以及开发环境,研究如何在主配置文件添加网络权限、相机相册权限、GPS权限,设计Web服务器,实现客户端与数据库之间的数据交互。(4)分析基本数据类型的特点,为各实体属性选择合适的数据类型,研究智能移动终端的路面病害检测系统数据库表的划分,根据存储、组织、管理数据的要求,设置主6 第一章绪论键、外键以建立表与表之间的关系。(5)通过Eclipse、SDK开发平台,结合数据库和Web服务器,开发路面病害检测系统,实现路面病害数据采集及查询路面病害等功能。7 华南理工大学硕士学位论文第二章系统整体架构设计2.1系统目标定位本文设计开发的路面病害检测系统,用户定位为道路检测企业和基层道路养护单位,功能定位为支持安卓智能手机采集路面病害数据,能计算路段的PCI值,并将采集的数据传输至数据库存储、管理。该系统能够获得智能手机网络、相机、GPS定位等权限,通过智能手机的相机来拍摄路面病害图片,同时对路面病害进行定位,为道路检测人员提供便利。但是,由于硬件软件的限制,还无法自动识别路面病害的损坏程度,因此,道路检测人员只能将病害损坏程度及面积手动输入智能手机应用程序。从实用性、针对性的原则出发,该系统只能实现路面病害检测。但是,在程序开发过程中刻意留有扩展接口,以便在后续开发中添加模块,提升功能。2.2系统功能需求分析公路建成通车1至3年内,由于设计、施工、交通荷载、气候等原因,路面出现早期病害[29]。为了确保公路在设计年限内能够正常、安全服务,道路养护部门需要对出现病害的路面进行养护。而道路养护部门在做出路面养护决策前,必须进行路面病害检测。通常,路面病害检测的方法有自动化的快速检测方法和人工检测方法。基于这两种方法的优缺点,本文提出基于智能移动终端的路面病害检测系统,它能够用于采集路面病害数据,获得路段的PCI值,指导养护人员做出正确的道路养护决策以确保道路使用舒适、安全。该系统使用智能手机作为路面病害数据采集工具,技术先进,使用方便,具有很大的社会需求。为设计路面病害检测系统,该系统应具备以下功能:(1)路面病害数据采集。以1000米路段为基本单位,通过智能手机拍摄病害图片,清晰、直观地描述病害状况,辅以人工检测确定病害的损坏程度及面积,使用GPS定位功能获取病害位置信息。系统内部开发PCI计算代码,用于计算路段的PCI值。智能手机能够通过无线网络将上述采集到的病害图片、病害位置信息、病害损坏程度及面积发送到数据库,数据库进行存储、组织、管理。(2)查询路面病害。在智能手机客户端应用程序界面设置搜索栏,可搜索获取道路8 第二章系统整体架构设计的病害情况,或搜索具体的道路路段。2.3系统整体架构上一节对系统的需求进行分析,明确系统的功能需求。为实现系统的功能,基于智能移动终端的路面病害检测系统应该由Android智能手机、数据库和Web服务器组成。其中智能手机用于采集路面病害数据,数据库用于存储、组织、管理数据,Web服务器实现智能手机客户端与数据库之间的数据交互。系统整体架构见图2-1。病害图片病害定位病害数据…4G网络服务器与Android智数据库能手机图2-1系统整体架构系统具有以下几个方面的优点:(1)将智能手机用于采集路面病害数据,可以降低系统的成本;(2)智能手机的尺寸小,方便携带,易于使用,同时功能强大;(3)智能手机拍摄路面病害图片,能够清晰、直观地描述病害状况;(4)智能手机内置GPS模块,可以用于病害定位,精度高;(5)智能手机采集的路面病害数据能通过无线网络发送到数据库,可以节省手机的存储空间;(6)系统采用数据库存储、管理数据,提高了数据存储效率,同时也提高了用户查询路面病害情况的效率。系统也存在以下几个缺陷:(1)智能手机与数据库之间通过无线网络进行联系,在无网络信号或网络信号不好时,该系统将无法正常运行;(2)系统采用智能手机内置的GPS模块来确定路面病害的位置。但是,由于不同的手机配置了不同的芯片,它们的定位精度就会存在较大的差别。如果使用配置较差芯片的智能手机,用于路面病害定位,将会产生较大的误差;9 华南理工大学硕士学位论文(3)系统无法对智能手机采集到的路面病害图片进行自动识别。后期,可以加入自动检测算法,实现图像预处理、分割病害、特征提取、病害识别等功能。2.4系统硬件要求本文开发的路面病害检测系统是通过智能手机进行路面病害数据采集,为实现系统的功能,对智能手机的硬件有相应的要求。(1)操作系统目前,市场上智能手机操作系统主要有安卓系统、IOS系统、塞班系统、WP系统。安卓系统的开放性、丰富的硬件、Google应用等优点,使得安卓智能手机的市场占有率超过80%[30]。因此,本文开发的系统考虑采用安卓操作系统的智能手机。(2)相机在进行路面病害调查时,传统的人工调查,是通过文字描述路面病害的情况。而该系统是通过图片形式直观地描述路面病害状况,所以对拍摄的图片清晰度有很高的要求。智能手机的相机参数有像素、传感器类型、光圈、单像素尺寸、光学防抖,其中像素的数量越多,图片越清晰。为了获得清晰度高的路面病害图片,应尽量选用相机像素高的智能手机。(3)全球卫星定位系统(GPS)GPS是全球卫星定位系统的简称,它是一种结合卫星及通讯发展的技术,利用导航卫星进行测时和测距[31]。现代智能手机均内置了GPS模块,该模块集成了RF射频芯片、基带芯片和核心CPU。不同的GPS模块,它们的定位精度、敏感度、定位时间不一样。国内公路里程桩号最小间隔为100米。因此,在进行路面病害调查时,传统的人工调查,确定路面病害的位置,误差比较大。本文开发的路面病害检测系统,在确定路面病害的位置信息时,是通过智能手机内置的GPS模块进行定位,精度高。为了提高该系统对于病害位置信息的准确度,应尽量选用高精度GPS模块的智能手机。(4)4G网络4G是the4thGenerationmobilecommunicationtechnology的缩写,指的是第四代移动通信技术[32]。智能手机采集路面病害图片,由于图片内存大,为了能够将这些图片顺利发送至数据库,应使用4G网络。10 第二章系统整体架构设计2.5系统操作流程系统的操作流程为操作前的准备、登录、功能选择、路面病害检测、路面病害情况查询、结束。操作前的准备:智能手机必须安装路面损坏检测应用程序,同时打开手机蜂窝移动网络,为了保证系统的正常运行,最好使用4G网络。登录:点击进入路面病害检测应用程序主界面,选择提供的账号进行登录,只有登录后才能使用应用程序的功能。功能选择:应用程序提供了路面病害检测和查询路面病害情况两项功能,用户根据需要自行选择。选择路面病害检测这项功能,用户应输入道路名称、道路路面材料、道路路面宽度、上下行等道路属性信息,还应输入道路路段、起始里程桩号、终止里程桩号、车道名称等道路路段信息,然后开始病害数据采集,采集数据包括拍摄路面病害图片、获取病害位置信息、辅以人工检测获取病害损坏程度及面积,完成路段内每个病害的数据采集任务后,应用程序会自动计算该路段的PCI值,最后通过4G网络将采集到的数据发送至数据库。选择查询路面病害情况,用户可以通过搜索道路、路段名称,获得路面病害信息,前提是数据库内应已存储该道路的病害信息。2.6本章小结本章首先进行目标定位分析,系统主要为道路检测人员使用,智能手机为移动终端。对系统需求进行分析,确定系统的功能需求为路面病害数据采集、路面病害查询等。为实现系统的功能,确定系统整体架构,由智能手机、数据库和Web服务器组成。系统需采集病害图片、位置等信息,对智能手机的操作系统、相机、GPS、4G网络等提出要求。系统的操作流程为操作前的准备、登录、功能选择、路面病害检测、路面病害情况查询、结束。11 华南理工大学硕士学位论文第三章路面病害检测系统相关技术研究3.1Android系统3.1.1Android系统应用现状Android操作系统是基于Linux的操作系统,其源代码具有高度的自由性和开放性[33]。它是由世界上著名的Google公司领导开发的,初衷是用来作为智能手机的操作系统。至今,Android已经开发了6个版本,从2008年9月的Android1.0到2015年5月的Andriod6.0。如今,安卓系统广泛地应用于平板电脑、智能电视、智能手机当中。在平板电脑领域,有调查显示,大部分开发商更愿意开发基于IOS系统的应用程序,而只有一小部分开发商愿意开发Andriod的应用程序。但是,由于Andriod系统的平板电脑相对低廉的价格,使得其在平板电脑市场仍具备一定的竞争力。在智能电视领域,Andriod占据绝对的优势,传统的老品牌长虹、海尔、创维等以及新兴品牌小米等均搭载Andriod操作系统[34]。在智能手机领域,著名移动通信领域的权威网站Gsmarena给出了2016年手机出货量数据,排名前三位的分别是三星、苹果、华为,其中三星的出货量超过3亿部,苹果的出货量接近2.2亿部,华为的出货量为1.37亿部。其它的品牌如小米、vivo、oppo,它们的出货量分别为4640万部、5930万部、3840万部。由此可见,安卓系统的智能手机市场占有率远远超过IOS系统。3.1.2Android系统的体系架构Android系统的整体架构见图3-1。由整体架构可知,它采用分层结构,从上往下共分为四层,其中第三层分为两个部分,分别为应用程序层、应用框架层、运行库和函数库、Linux核心层[35]。12 第三章路面病害检测系统相关技术研究图3-1Android系统整体架构(1)应用程序层Android系统发布时,系统内部就包含了一系列采用Java语言编写的应用程序,比如查看日期的日历、浏览器、电子邮件客户端、联系人、查看位置信息的地图等程序。上述这些应用程序并不是绑定在系统上的,它们可以被用户体验更佳的应用程序所取代,这也使得Android系统受到越来越多的开发者青睐。(2)应用框架层应用框架层内含有大量的API接口,在应用程序开发时这些接口可以供开发者调用,从而简化了开发者的开发流程。开发者在开发任何一个应用程序时,都可以调用这些接口来发布自己的功能组件,但是,必须在遵守框架原则的前提下,进行开发扩展。应用框架层提供了各种服务和管理工具,分别为:视图、通知管理器、活动管理器、内容提供器及资源管理器等。它也提供了各种功能,如Android.app、Androidnet、Androidutil等。(3)Android运行库Android运行库包括了程序库、核心库和虚拟机。AndroidRuntime有CoreLibraries和DalvikVirtualMachine。CoreLibraries就是运行安卓应用程序的核心库,它的作用类似于Java中的JDK;DalvikVirtualMachine是谷歌公司专门为运行安卓应用程序开发的13 华南理工大学硕士学位论文虚拟机,它的作用类似于Java中的JVM,但是它们之间运行的文件格式不一样,Java虚拟机能够运行的.class文件,并不能在Dalvik虚拟机上运行,必须转化为dex格式的文件,才能在Dalvik虚拟机上运行[36]。(4)函数库函数库里面包含了一些C/C++库集,一般情况下,这些C/C++库集很难被开发者直接调用,但是通过应用框架层,开发者可以对这些C/C++库集进行调用。这些库集包括以下核心库:系统C库、数据库引擎、媒体库、SGL、FreeType等。(5)Linux核心层Android系统是基于不同版本的Linux开发的,Linux内核层是位于硬件与其它软件之间,它提供了内存及进程管理、安全性、驱动模型等核心服务。3.1.3Android应用程序的基本组件Android系统有四个基本组件,分别为Activity、Service、BroadcastReceive以及ContentProvider。开发一个Android应用程序,其实就是开发者将上述组件进行组合,但是组件应用前必须进行注册,Activity、Service以及ContentProvider三个组件必须在应用程序主配置文件AndroidManifest.xml中注册,而BroadcastReceive则可以通过两种方式来注册,一种是在AndroidManifest.xml中注册,另一种是通过代码来注册[37,38]。(1)Activity在使用应用程序时,我们看到的界面就是Activity。每一个Activity都有一个默认的窗口,窗口上的可视内容就是通过View的子类来展现的。Activity的生命周期,就是四种基本状态的转换。系统先后调用onCreat()、onStart()、onResume()这三种方法,使Activity处于激活状态或者说是运行状态;另一个Activity覆盖在当前的Activity上时,系统调用onPause(),使当前的的Activity处于暂停状态;当前处于暂停状态的Activity又可以通过onResume()回到激活状态,也可以通过onStop()进入下一个状态即停止状态;处在停止状态的Activity,可以通过一系列方法进入运行状态,也可以通过onDestroy()进入销毁状态。Activity生命周期见图3-2。14 第三章路面病害检测系统相关技术研究Activity开始onCreate()用户再次启onStart()onRestart()动该Activity应用程序onResume()进程终止运行状态该Activity再次回到前台更高优先级的应onPause()用需要内存暂停状态用户再次启动该Activity使之进入前台onStop()停止状态onDestroy()销毁状态图3-2Activity生命周期(2)ServiceService不同于Activity,它没有可视化界面,只能后台运行。正是由于Service后台运行的特点,所以经常被用来处理比较繁琐的操作。15 华南理工大学硕士学位论文(3)BroadcastReceiver广播接收器是应用程序的基本组件,它有两个方面的作用,一是接收广播信息;二是对此做出相应的响应。这些广播可以来自于系统内部,也可以来自应用程序。一般情况下,用户是无法知道广播接收器所接收的广播信息,但是可以通过启动一个Activity即可视的界面来告知用户。(4)ContentProvider内容提供器,它的作用就是让彼此没有任何关联的多个应用程序之间实现数据共享。要想发挥内容提供器的作用,必须在应用程序中通过授权。3.1.4Android的开发环境上文提到的Android体系架构中的应用程序层包含的应用程序均是采用Java语言编写,这些程序都是系统自带的,而后期开发设计的应用程序大多也是选择Java语言。因此,在开发之前,需要进行Java开发环境配置,以及下载安装Eclipse。然后将在Eclipse中安装插件ADT以及下载安装安卓的SDK,至此,开发环境搭建完成,我们就可以进行安卓开发工作了。开发界面见图3-3。图3-3开发界面Android虚拟机作为调试工具,为开发者提供诸多便利,它可以模拟移动设备上典型的功能,比如:拍照,拨打电话等,同时还提供了大量控制键,这些控制键可以通过自带虚拟键盘点击或者通过鼠标点击,来向应用程序发出指令。Android虚拟机界面见16 第三章路面病害检测系统相关技术研究图3-4。图3-4Android虚拟机3.2Android应用程序权限当下载安装Android应用程序时,在安装界面会有一个权限详情,只有获得这些权限,应用程序才能实现相应的功能。Manifest.permission类中提供了多达124种不同类型的权限,应用程序可以获得其中任一项权限。本文开发的路面病害检测应用程序,为实现它的功能,应用程序应获得以下几个方面的权限:基于安全的完全的网络访问、基于网络的大致位置、基于GPS和网络的精确位置、查看网络连接、查看手机状况和身份、修改和删除内部存储、手机相机相册等权限,考虑到客户端的主要功能是获取病害图片、病害位置定位以及客户端与数据库之间的数据交互,所以,接下来详细介绍如何在主配置文件中添加网络、手机相机相册以及17 华南理工大学硕士学位论文GPS权限。(1)网络权限路面病害检测应用程序与数据库需要通过移动网络或Wifi进行数据交互,并且病害定位也需要网络,所以,开发过程中必须在主配置文件AndroidManifest.xml添加以下代码[39]:(2)相机、相册权限获取病害图片可以通过两种方式,一种是从相册中选取;另一种是调用相机进行拍摄。可以在主配置文件AndroidManifest.xml添加相机和相册权限,代码如下[40]:(3)GPS权限获取病害的位置信息,需要通过手机内置的GPS模块进行定位,可以在主配置文件AndroidManifest.xml添加GPS权限,代码如下[41]:3.3Web服务器设计本文开发的路面病害检测系统采用Android智能手机作为移动终端设备,由于移动设备硬件缺陷、存储空间不足等原因,所以,本系统采用SQLServer数据库存储、管理病害数据。但是,Android客户端很难与SQLServer数据库直接相连,为了能够实现两者之间的数据交互,应该在两者之间设计Web服务器。使用Java语言开发后台服务器代码接口,用以接收终端数据。比较分析各种服务器的特点后,选用Tomcat作为后台服务器提供终端接口。Tomcat服务器是一个免费的开放源代码的Web应用服务器,属于轻量级应用服务器。在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试接口程序的首选[42]。在进行用户与密码校验是否正确的逻辑里使用ManageSQLServer类中的exeSQL()方法,在进行病害信息的新增,路面病害信息的查询时只要提供SQL语句便可完成数据的查询,新增数据操作。18 第三章路面病害检测系统相关技术研究下面仅介绍用户登录时系统内部是如何进行数据交互的。当用户启动路面病害检测应用程序,进入登录界面,输入用户名和密码并点击登录后,客户端开始进行Http请求发送数据到后台服务器,后台服务器开始进行数据接收,代码如下:publicclassLoginServletextendsHttpServlet{@OverrideprotectedvoiddoGet(HttpServletRequestreq,HttpServletResponseresp)throwsServletException,IOException{OutputStreamout=resp.getOutputStream();//获取Android终端请求发送过来的用户名Stringusername=req.getParameter("username");//获取Android终端请求发送过来的用户密码Stringpassword=req.getParameter("password");//如使用化JDBCManageSQLServermss=newManageSQLServer();//调用JDBC方法进行登录校验UserloginUser=mss.checkUserLogin(username,password);//如果loginUse等于空说明用户不存在或密码错误if(loginUser==null){StringuserJson=‘{"code":"-1","messages":"用户名或密码不正确"}‘;//返回数据给客户端OutputStreamout=response.getOutputStream();out.write(userJson.getBytes("UTF-8"));out.flush()}else{StringuserJson=JSON.toJSONString(loginUser);//返回数据给客户端OutputStreamout=response.getOutputStream();out.write(userJson.getBytes("UTF-8"));out.flush()}19 华南理工大学硕士学位论文}@OverrideprotectedvoiddoPost(HttpServletRequestreq,HttpServletResponseresp)throwsServletException,IOException{doGet(req,resp);}}当服务器接收到客户端传过来的用户名和密码进行校验时调用了ManageSQLServer类中的checkUserLogin()方法进行数据库用户查询,如果查询到的用户名与密码与数据库用户信息匹配则返回用户信息给Android终端,否则提示用户,用户名或密码不正确。代码如下:publicUsercheckUserLogin(Stringusername,Stringpassword){//初始化结果集合ResultSetrs=null;Useruser=null;try{//根据用户名和密码进行数据库查询,查找匹配用户rs=execSQL("select*fromPersonerwherePerson_Name=‘“+username+”’andPerson_Pass=‘“+password+”’“);}catch(SQLExceptione){//打印错误信息e.printStackTrace();returnnull;}try{//如果查询到结果while(rs.next()){//获取查询到的结果值Stringtemp_username=rs.getString(“Person_Name”).trim();Stringtemp_password=rs.getString(“Person_Pass”).trim();20 第三章路面病害检测系统相关技术研究Stringtemp_userPostion=rs.getString(“Person_Position”).trim();Stringtemp_person_Company=rs.getString(“Person_Company”).trim();Stringtemp_person_PositionAge=rs.getString(“Person_PositionAge”).trim();//把查询到的结果字段值设置到封装的对象里UseruserObj=newUser();userObj.setPerson_Name(temp_username);userObj.setPerson_Position(temp_userPostion);userObj.setPerson_Company(temp_person_Company);userObj.setPerson_PositionAge(temp_person_PositionAge);user=userObj;}else{//如果查询不到就是返回空user=null;}}}catch(SQLExceptione){//打印错误信息e.printStackTrace();}//返回查询对象结果returnuser;}}3.4本章小结本章首先介绍Android系统的应用现状、体系架构、应用程序的基本组件以及开发环境。研究如何在主配置文件AndroidManifest.xml中添加网络、相机相册以及GPS权限。最后,设计Web服务器,实现智能手机客户端与数据库之间数据交互,以路面病害检测系统登录功能为例,介绍数据接收、用户名和密码查询校验的代码设计成果。21 华南理工大学硕士学位论文第四章数据库设计为了更好地存储、使用和管理数据,必须开发一个数据库系统,它作为路面病害检测系统的一部分。4.1数据库系统的基本概念数据库系统DBS,即DateBaseSystems,是指在计算机系统中引入数据库后的系统,一般由数据库、数据库管理系统、应用系统、数据库管理员构成。数据库是指长期存储在计算机内的、有组织的、可共享的数据集合,它存储的数据具有很高的独立性及扩展性,能够为不同用户使用[43]。数据库管理系统是作为整个系统的核心,它主要用来实现快速存储、组织和科学管理数据。数据库系统图见图4-1。应用管理存储应用程序1数据库管理系数据库统DBMS用户应用程序2应用程序n图4-1数据库系统图22 第四章数据库设计4.1.1数据数据是数据库中存储的基本对象,是用来描述事物的符号记录。而描述事物的符号有多种,比如文字、声音、图形、数字等。因此,为了更好地组织、存储和管理数据,需要将数据库字段的数据进行分类。SQLServer提供了大量的数据类型,大致可以分为二进制数据类型、字符数据类型、日期和时间数据类型、数字数据类型。(1)二进制数据类型SQLServer用binary、varbinary和image三种数据类型来存储二进制数据。二进制类型主要用于存储图像、声音等数据。系统涉及到路面病害图片,如果将这些图片以二进制数据类型存储到数据库中,将会占用大量的空间,影响数据库的检索效率。所以,在数据库表设计时,可以采用字符数据类型存储病害图片的路径来代替直接存储图片,节省大量的内存,提高数据的检索效率[44]。(2)字符数据类型SQLServer提供了char、varchar、text三种ASCII码字符型数据。文本类型text存储字符型数据能够超过8000字节,而在路面病害检测系统中,大部分数据都是采用字符型数据类型,且字节基本不超过16,因此本系统采用char和varchar这两种数据类型。(3)日期和时间数据类型SQLServer提供了6种日期和时间数据类型,分别是time、date、smalldatetime、datetime、datetime2、datetimeoffset。不同的数据类型,它们的格式、范围、精确度都不一样。考虑到本系统中涉及到时间的对象有道路属性信息表中的道路修建时间,只需要包括年月日,不需要具体到时分秒,因此采用date类型就可满足要求。(4)数字数据类型SQLServe中数字数据类型包括bit、int、smallint、tinyint、decimal、real以及float。本系统中涉及到数字数据的对象有道路路面宽度和车道宽度、道路全长,而国内公路或城市道路车道宽度在3.00米至3.75米之间,因此本系统应该采用float数字数据类型。4.1.2数据模型数据模型可以定义为是现实世界数据特征的抽象。按照模型应用的不同目的,模型可以分为三类:概念模型、逻辑模型和物理模型。23 华南理工大学硕士学位论文(1)概念模型概念模型也称为信息模型,它是从用户角度来对数据和信息建模,是现实世界到信息世界的第一层抽象,是用户和数据库设计人员交流的语言,主要用于数据库设计[45]。(2)逻辑模型逻辑模型不同于概念模型,它是从计算机角度对数据和信息建模,是现实世界数据特征的抽象。它主要包括以下几个方面的模型:关系模型、层次模型、网状模型以及面向对象模型。主要用于数据库管理系统的实现。(3)物理模型物理模型是对数据最底层的抽象,它描述数据在系统内部的表示方法和存取方法,是面向计算机系统的。一般用户不需要了解物理模型,也不需要选择合适的物理模型,这些都是由数据库设计人员完成的。4.1.3数据库管理系统4.1.3.1数据库管理系统的功能数据库管理系统(DBMS)是位于用户与操作系统之间的一层数据管理软件。主要有以下几个方面的功能:(1)数据定义功能。系统提供数据定义语言DDL,该语言是用于描述数据库中药存储的现实世界实体的语言。(2)数据组织、存储和管理。系统提供多种存取方法,比如索引、HASH查找、顺序查找等,从而提高存取效率。(3)数据操纵功能。系统提供数据操纵语言DML。DML主要有两类:一种是嵌入主语言中的宿主型DML,如C,Pascal等语言,不能独立操作;另一种是交互式命令语言,可以独立使用,所以称为自含型或自主型DML。(4)数据库的事务和运行管理。系统对数据控制功能包括并发控制、存取控制、完整性约束条件的检查和执行、数据库内部的维护等。(5)数据库的建立和维护功能。包括数据库的初始载入和转换、数据库的转储和恢复、数据库的重组织、独立监视与分析等。4.1.3.2数据库管理系统的种类数据库管理系统软件的种类很多,但是常用的有以下4种:Oracle、MySQL、Access、24 第四章数据库设计SQLServer。(1)OracleOracleRDBMS,即Oracle,它属于关系数据库管理系统,是由著名的甲骨文公司开发的。它有非常完整的数据管理功能,能够实现分布式处理功能。其特点有:①可用性强;②可扩展性强;③数据安全性强;④稳定性强。(2)MySQLMySQL与Oracle一样,也是属于关系数据库管理系统。在互联网上的中小型网站中,通常使用MySQL作为数据库管理系统。其特点有:①语言简洁、易学易用;②源码开放;③高度非过程化。(3)AccessAccess数据库是由著名的微软公司开发的一款数据库管理系统。它的特点有:①存储方式单一;②界面友好、易操作;③集成环境、处理多种数据信息;④支持ODBC。(4)MSSQLServerSQLServer与前两种数据库一样,属于关系数据库管理系统。它是由著名的微软公司发布的一款RMDBS数据库。其特点有:①用户界面直观;②丰富的编程接口工具;③很好的伸缩性,可跨界运行;④支持Web技术。通过分析以上4种常用数据库管理系统的特点,本文开发的路面病害检测系统采用SQLServer。4.2数据库设计数据库设计是根据一个给定的应用环境,构造最优的数据模型,利用数据库管理系统,建立数据库应用系统。4.2.1数据库设计的步骤数据库设计要经历以下几个阶段:需求分析、概念结构设计、逻辑结构设计、物理结构设计、数据库实施、数据库运行与维护[46]。数据库设计流程见图4-2。25 华南理工大学硕士学位论文需求分析概念结构设计逻辑结构设计N数据模型评价Y物理结构设计NN性能评价Y数据库实施试运行Y运行与维护图4-2数据库设计流程图(1)需求分析需求分析就是分析用户的需要与要求,它是数据库设计的起点,它的结果是否准确地反映了用户的实际要求,将对后续各个阶段的设计产生重大影响。此阶段的重点是调查并分析用户在数据管理中的信息要求、处理要求、安全性与完整性要求。需求分析的成果主要是用户活动图、系统范围图、数据流图、数据字典。(2)概念结构设计概念结构设计的任务是将需求分析结果抽象为概念模型。在概念结构设计阶段,通常采用E-R模型来描述某一系统的概念模型。E-R模型表示了实体、属性和实体间的联系。本文开发的系统涉及到四个实体,分别是道路、路段、检测、病害。道路实体具有的属性如下:道路编码、道路名称、道路级别、道路修建时间、道路26 第四章数据库设计材料、道路路面宽度、道路全长。路段实体具有的属性如下:路段编码、道路编码、起始里程桩号、终止里程桩号、上下行、车道名称、车道宽度。病害实体具有的属性如下:病害编码、路段编码、检测人员编号、病害类型、损坏程度、病害面积、病害图片、病害描述、病害地理坐标位置、检测时间。检测人员信息具有的属性如下:人员编号、人员名称、所在单位、职位、工龄,登录密码。一条道路通过里程桩号分割成多条路段,道路与路段是一对多联系,一条路段可能会有多个病害,所以病害与路段是一对多的联系。一名检测人员可能检测多个病害,所以检测人员与病害是一对多的关系。(3)逻辑结构设计逻辑结构设计的任务是将概念设计结果转换为数据库管理系统支持的数据模型。它的步骤是首先将概念结构转换为相应的逻辑模型;然后将转换来的逻辑模型向特定数据库管理系统支持的数据模型转换,由于SQLServer是关系型数据库管理系统,因此,这里应转换关系数据模型;最后对数据模型进行优化。逻辑结构设计就是将一个实体转换为一个关系模式,实体的属性就是关系模式的属性,实体的键就是关系的主键。实体间的一对一、一对多、多对多联系按照一定的方法进行转换为关系模式。(4)物理结构设计物理结构设计时根据使用的计算机软硬件环境和数据库管理系统,确定数据库表的结果,并进行优化,为数据模型选择合理的存储结构和存取方法,决定存取路径和分配存取空间等。(5)数据库的实施数据库实施是运用数据库管理系统建立数据库,创建各种对象,编制与调试应用程序,录入数据,进行试运行。(6)数据库的运行和维护数据库系统正式投入使用后,还应不断进行评价、修改与调整。这一时期的工作就是数据库的运行和维护。27 华南理工大学硕士学位论文4.2.2数据库表的设计在关系数据库中,表是具有相同主题的数据集合。数据库设计时依据不同的主题创建不同的表。本文开发的系统包括了道路属性信息表、道路路段信息表、路段病害信息表、检测人员信息表。(1)道路属性信息表道路属性信息表是用于存储道路的基本信息,只有成功创建了道路属性信息表,才能创建数据库内的其它表。道路属性信息表包括道路编码、道路名称、道路级别、道路修建时间、道路材料、道路路面宽度、道路全长。下面对各字段的数据类型、允许null以及主外键设置进行说明:①该表将道路编码设置为主键,不允许空,唯一标识。采用的数据类型为int型,系统根据添加先后顺序自动增加。②道路名称的数据类型采用varchar(20),不允许空,与上述的道路编码一一对应。③道路级别一般为4个汉字,所以,道路级别的数据类型采用varchar(4),允许空。④因为不同道路材料,会出现不同类型的路面病害,为了后续开发方便,在道路属性信息表中加入道路材料这项。道路材料通常为水泥和沥青,因此,采用数据类型为varchar(2),不允许空。⑤道路修建时间的数据类型采用date,允许空。⑥在路面损坏PCI计算时,需要知道调查路段的宽度,再乘以路段长度(通常为1000米)得到调查路段的面积。所以,在道路属性信息表中加入道路路面宽度这项。道路路面宽度的数据类型float。⑦道路全长的数据类型采用float,允许空。整个道路属性信息表见表4-1。28 第四章数据库设计表4-1道路属性信息表允许null主键/外序号数据库字段名数据类型值键1道路编码(Road_ID)intNotnull主键2道路名称(Road_Name)varchar(20)Notnull3道路级别(Road_Class)varchar(4)4道路修建时间(Road_BuildYear)date5道路材料(Road_Stuff)varchar(2)Notnull6道路路面宽度(Road_Width)floatNotnul7道路全长(Road_length)float在SQLServer数据库中,实现道路属性信息表的代码如下://创建表createtableRoad(Road_IDintnotnulldefaultautoincrementconstraintCKC_ROAD_ID_ROADcheck(Road_ID>=1),Road_Namevarchar(20)notnull,Road_Classvarchar(4)null,Road_Typevarchar(10)null,Road_Stuffvarchar(10)notnull,Road_Widthfloatnotnull,Road_lengthfloatnull,Road_BuildYeardatenull,constraintPK_ROADprimarykeyclustered(Road_ID));(2)道路路段信息表根据《公路技术状况评定标准》(JTGH20-2007),公路技术状况评定以1000米路段长度为基本评定单元,因此建立道路路段信息表。道路路段信息表包括起始里程桩号、终止里程桩号、上下行、路段编码、道路编码、路段名称、车道名称、车道宽度。下面对各字段的数据类型、允许null以及主外键设置进行说明:①该表将路段编码设置为主键,不允许空,唯一标识,路段编码的数据类型采用int型,系统根据添加先后顺序自动增加。②上文提到道路与道路路段存在着一对多的关系,将道路编码设置为道路路段信息29 华南理工大学硕士学位论文表的外键,就可以建立道路属性信息表与道路路段信息表之间的一对多关系。③起始里程桩号和终止里程桩号的数据类型采用varchar(10),不允许空。④上下行的数据类型采用varchar(1),不允许空。⑤高速公路不同的车道所承受的车辆荷载不一样,所以呈现的病害类型也不一致。所以在道路路段信息表中加入车道名称这一项。但是,对于一般的公路,并没有进行车道细分,可以约定上行全车道或者下行全车道。车道名称的数据类型采用varchar(10),不允许空。⑥与道路属性信息表中的道路路面宽度一样的原因,需设置车道宽度这一项。车道宽度采用的数据类型为float,不允许空。整个道路路段信息表见表4-2。表4-2道路路段信息表允许null主键/外序号数据库字段名数据类型值键1路段编码(RoadSegmentID)intNotnull主键2道路编码(Road_ID)intNotnull外键3路段名称(name)varchar(10)Notnull4起始里程桩号(StartMilePeg)varchar(10)Notnull5终止里程桩号(EndMilePeg)varchar(10)Notnull6上下行(Orientation)varchar(1)Notnull7车道名称(LaneName)varchar(10)Notnull8车道宽度(width)floatNotnull在SQLServer数据库中,实现道路路段信息表的代码如下://创建表createtableRoadSegment(RoadSegmentIDintnotnulldefaultautoincrementConstraintCKC_ROADSEGMENTID_ROADSEGMcheck(RoadSegmentID>=1),Road_IDintnotnull,namevarchar(10)notnull,widthfloatnotnull,StartMilePegvarchar(10)notnull,EndMilePegvarchar(10)notnull,Orientationvarchar(1)notnull,30 第四章数据库设计constraintPK_ROADSEGMENTprimarykeyclustered(RoadSegmentID));//创建主外键关联altertableRoadSegmentaddconstraintFK_ROADSEGM_REFERENCE_ROADforeignkey(Road_ID)referencesRoad(Road_ID)onupdaterestrictondeleterestrict;(3)路段病害信息表检测人员检测路段时需要做好路段病害记录。所以在数据库表设计时,需要设计路段病害检测信息表。路段病害检测信息表包括病害编码、路段编码、检测人员编号、病害类型、损坏程度、病害面积、检测时间、病害图片、病害描述、病害地理坐标位置。下面对各字段的数据类型、允许null以及主外键设置进行说明:①该表将病害编码设置为主键,不允许空,唯一标识,病害编码的数据类型采用int型,系统根据添加先后顺序自动增加。②道路路段与路段病害之间存在着一对多的关系,将路段编码设置为路段病害检测信息表的外键,就可以建立道路属性信息表与道路路段信息表之间的一对多关系;检测人员编号与道路路段之间也是存在上述一对多关系,因此,检测人员编号也设置为路段病害检测信息表的外键。检测人员编号采用的数据类型为int,不允许空。③病害类型采用的数据类型为varchar(4),不允许空。④损坏程度为轻、中、重,所以采用的数据类型为varchar(1),不允许空。⑤通常情况下,不直接使用二进制数据存储图片,而是采用字符数据存储图片的路径来代替。因此,病害图片采取的数据类型为varchar(200),不允许空。⑥病害坐标地理位置采用的数据类型为varchar(20),不允许空。⑦病害描述采用的数据类型为varchar(200),不允许空。⑧检测时间采用的数据类型为datetime,不允许空。整个道路路段病害信息表见表4-3。31 华南理工大学硕士学位论文表4-3路段病害信息表允许null主键/外序号数据库字段名数据类型值键1病害编码(Disease_ID)intNotnull主键2路段编码(RoadSegmentID)intNotnull外键3检测人员编号(Person_ID)intNotnull外键4病害类型(Disease_Type)varchar(4)Notnull5损坏程度(Damage_Level)varchar(1)Notnull6病害面积(Disease_Area)floatNotnull7病害图片(Disease_Images)varchar(200)Notnull8坐标地理位置(Disease_Local)varchar(20)Notnull9病害描述(Disease_Remark)varchar(200)Notnull10检测时间(Disease_Time)datetimeNotnull在SQLServer数据库中,实现路段病害信息表的代码如下://创建表createtableDisease(Disease_IDintnotnulldefaultautoincrementconstraintCKC_DISEASE_ID_DISEASEcheck(Disease_ID>=1),RoadSegmentIDvarchar(20)notnull,Person_IDintnotnull,Disease_Typeintnull,Disease_Remarktextnull,Disease_Imagesvarchar(200)null,Disease_Localvarchar(20)null,Disease_Timedatetimenotnull,constraintPK_DISEASEprimarykeyclustered(Disease_ID));//创建主外键关联altertableDiseaseaddconstraintFK_DISEASE_REFERENCE_ROADSEGMforeignkey(RoadSegmentID)referencesRoadSegment(RoadSegmentID)onupdaterestrict32 第四章数据库设计ondeleterestrict;altertableDiseaseaddconstraintFK_DISEASE_REFERENCE_PERSONINforeignkey(Person_ID)referencesPersonInfo(Person_ID)onupdaterestrictondeleterestrict;(4)检测人员信息表检测人员信息表包括检测人员编码、检测人员名称、检测人单位、检测人职位、检测人工龄。下面对各字段的数据类型、允许null以及主外键设置进行说明:①检测人员编号的数据类型采用int型,设置为主键,不允许空,唯一标识。②人员名称的数据类型采用varchar(20),不允许空。③检测单位采用的数据类型为varchar(20),不允许空。④职位的数据类型采用varchar(20),允许空。⑤工龄的数据类型采用int型,允许空。整个道路检测信息表见表4-4。表4-4检测人员信息表允许null主键/外序号数据库字段名数据类型值键1人员编码(Person_ID)intNotnull主键2人员名称(Person_Name)varchar(20)Notnull3单位(Person_Company)varchar(20)Notnull4职位(Person_Position)varchar(20)5工龄(Person_PositionAge)int在SQLServer数据库中,实现检测人员信息表的代码如下://创建表createtablePersonInfo(Person_IDintnotnulldefaultautoincrementconstraintCKC_PERSON_ID_PERSONINcheck(Person_ID>=1),Person_Namevarchar(20)notnull,Person_Companyvarchar(20)notnull,Person_Positionvarchar(20)null,33 华南理工大学硕士学位论文"Person_PositionAge"intnull,constraintPK_PERSONINFOprimarykeyclustered(Person_ID));4.2.3数据库表关系上一节建立的道路属性信息表、道路路段信息表、路段病害信息表、检测人员信息表,它们之间并不是孤立的,而是存在一定的关系。这些关系与前面所述的实体联系一样,分别是一对一关系、一对多关系、多对多关系。道路属性信息表与道路路段信息表是属于一对多关系;道路路段信息表与路段病害信息表是属于一对多关系;检测人员信息表与路段病害信息表是一对多关系;上述4个表,表与表之间的关系是通过这些主键和外键实现的。道路路段信息表将道路编码设置为外键,以此建立了与道路属性信息表之间的关系;路段病害信息表将路段编码和检测人员编号设置为外键,以此建立了与道路路段信息表和检测人员信息表之间的关系。具体的数据库表关系见图4-3。34 第四章数据库设计路段病害信息表道路路段信息表PK病害编码PK路段编码FK路段编码FK道路编码FK检测人员编号路段名称病害类型起始里程桩号损坏程度终止里程桩号病害图片上下行坐标地理位置车道名称病害描述车道宽度检测时间道路属性信息表PK道路编码检测人员信息表PK检测人员编号道路名称道路级别FK检测人员名称道路修建时间检测单位道路材料职位道路路面宽度工龄道路全长图4-3数据库表关系图4.3本章小结本章首先分析四种基本数据类型的特点,为各实体属性选择数据类型提供依据;分析数据库管理系统的功能与常用的关系型数据库管理系统的特点,选择SQLServer作为路面病害检测系统的数据库管理系统。研究数据库设计各个阶段的内容和特点,为系统数据库设计奠定基础。研究数据库表的划分,建立道路属性信息表、道路路段信息表、路段病害信息表、检测人员信息表,并设置表的主键和外键,建立表之间的相互关系。35 华南理工大学硕士学位论文第五章路面病害检测系统的设计与实现5.1安卓客户端界面设计用户界面是系统和用户之间进行信息交换的媒介,实现信息的内部形式与人类可以接受形式之间的转换[47]。安卓的界面是由布局和组件协同完成的,组件按照布局的要求依次排列,就组成了用户所看见的界面。安卓的布局方式有以下五种:LinearLayout(线性布局方式)、RelativeLayout(相对布局)、AbsoluteLayout(绝对位置布局)、FramelLayout(帧布局)、TableLayout(表格布局)。该系统主界面顶部标题栏使用了相对布局进行横向并排,中间功能列表区使用了表格(ListView),底部使用了Tabbar控件,Tabbar内嵌两个进行道路与个人中心的页面切换。系统所有的文本诸如:道路名称、道路路段名称、车道宽度等均是采用TextView控件,与之对应的输入文本或者数值控件都是采用TextInputEditText控件。道路修建时间采用时间弹出框(Date_Dialog)控件。道路级别、道路材料、病害类型采用下拉框(Spinner)控件,与病害类型关联的损坏程度也是采用下拉框(Spinner)控件。路面病害检测程序界面见图5-1。图5-1路面病害检测程序界面36 第五章路面病害检测系统的设计与实现5.2登录功能(1)工作流程点击路面病害检测应用程序,呈现出来的就是登陆界面。考虑到该系统为道路检测人员使用,用户数量少,因此,系统采用线下注册方式。进入登陆界面后,用户可以根据提示文字输入登陆账号与密码,由于采用线下注册,可以考虑采用机构相关系统的账号与密码进行注册,再用该账号与密码进行登录。客户端能够判断输入的账号、密码是否符合格式要求,如果不符合,客户端提示检测人员进行修改;如果符合,客户端将输入的账号与密码发送至后台,与注册的账号进行比对,若不一样,系统提示账号或密码错误,反之则登录成功,跳转到主界面。客户端登录工作流程图见图5-2。开始登录输入账号N输入密码输入密码N输入格式是否符合要求Y验证输入的账号与密码是否正确Y完成登录并进入功能菜单界面结束图5-2登录工作流程图(2)核心代码当用户输入用户名和密码后并点击登录按钮,客户端先会获取输入的用户名和密码,然后再验证输入的用户名和密码是否为空,接着验证输入的用户名与密码是否正确。客户端获取用户名和密码的代码如下:37 华南理工大学硕士学位论文//获取用户输入的用户名StringinputUserNameStr=userNameTextField.getText().toString().trim();//获取用户输入的密码StringinputUserPassword=PasswordTextField.getText().toString().trim();客户端验证用户名和密码是否为空的代码如下:if(inputUserNameStr.equals("")||inputUserNameStr.equals("")){//弹出消息提示用户“用户名或密码不能为空”Toasttoast=Toast.makeText(getApplicationContext(),"用户名或密码不能为空",Toast.LENGTH_LONG);toast.setGravity(Gravity.CENTER,0,0);toast.show();//终止程序运行Return;}当上述验证完成后,客户端会将获取用户名和密码与后台数据库进行查询比对,如果在网络状况不是很好的情况下,这个过程会需要较长时间,因此,应设置一个模态框(Bootstrap)提示用户当前正在登陆。模态框代码如下://模态框初始化pDialog=newSweetAlertDialog(this,SweetAlertDialog.PROGRESS_type);//设置模态框的颜色pDialog.getProgressHelper().setBarColor(Color.parseColor("#388E8E"));//设置提示信息pDialog.setTitleText("正在登录");//屏屏取消pDialog.setCancelable(false);//弹出提示框pDialog.show();查询比对的代码如下://初始化查询实例38 第五章路面病害检测系统的设计与实现AVQueryquery=newAVQuery<>("Personer");//设置查询条件、查询当前用户名和密码相匹配的用户query.whereEqualTo("Person_Name",inputUserNameStr);query.whereEqualTo("Person_Pass",inputuserPassword);//调用后台接口条件查询后台表信息query.findInBackground(newFindCallback(){@Overridepublicvoiddone(Listlist,AVExceptione){//后台接口请求完成,隐藏模态提示框pDialog.hide();//获取返回查询数据,如果返回list不为空,则表明用户是存在的if(list.size()>0){//获取list第一个用户对象AVObjectresultObj=list.get(0);//初始化用户对象,进行用户信息存储,把获取到的表信息通过User对象进行存储UseruserObj=newUser();//设置用户IDuserObj.setPerson_ID(resultObj.getObjectId());//设置用户名userObj.setPerson_Name(resultObj.getString("Person_Name"));//设置用户机构userObj.setPerson_Company(resultObj.getString("Person_Company"));//设置用户职位userObj.setPerson_Position(resultObj.getString("Person_Position"));//设置用户工龄userObj.setPerson_PositionAge(resultObj.getString("Person_PositionAge"));//使用单例设计模式进行用户信息存储UserSingleton.setUserObj(userObj);//如果用户名和密码正确则跳转到功能菜单页面39 华南理工大学硕士学位论文//初始化跳转页面Intentintent=newIntent(getBaseContext(),DubhOptionScreen.class);//进行跳转startActivity(intent);}else{//提示用户名或密码不正确Toasttoast=Toast.makeText(getApplicationContext(),"用户名或密码不正确",Toast.LENGTH_LONG);toast.setGravity(Gravity.CENTER,0,0);toast.show();}登录界面示意图见图5-3。图5-3登陆界面示意图5.3路面病害数据采集模块登录成功后,客户端会自动跳转到主界面。客户端提供了两项功能,一个是病害数据采集功能,另一个是病害查询功能。病害数据采集模块内部由三层结构组成,分别是道路信息、道路路段信息、路段病害信息。在上一章数据库表设计中,分析了道路与道路路段及道路路段与路段病害之间40 第五章路面病害检测系统的设计与实现的关系,并通过设置主键、外键,建立了它们之间一对多的关系。为了与数据库表设计相一致,客户端病害数据采集模块设计也必须按照这种一对多的关系来设计。5.3.1道路信息编辑(1)工作流程当选择病害数据采集功能,客户端跳转到道路列表界面。在界面右上角点击添加,进入添加道路信息界面,需要编辑道路名称、道路级别、道路材料、路面宽度、道路全长、道路修建时间等信息,只有准确完成以上信息编辑后,再点击界面右上角的保存,客户端才会提示保存成功,否则客户端将提示哪些信息需要完善。保存成功后,返回到道路列表界面,客户端会将刚刚添加的道路信息展示在列表内。道路名称、路面宽度、道路全长使用TextInputEditText控件进行手动输入。道路级别和道路材料使用Spinner控件选择,客户端提供了五种道路级别,分别为高速公路、一级公路、二级公路、三级公路、四级公路;提供了两种道路材料,分别为沥青、水泥。道路信息编辑工作流程图见图5-4。开始添加道路信息编辑输入道路名称下拉框选择道路级别下拉框选择道路材料N输入路面宽度选择输入道路全长选择道路修建时间验证道路信息编辑是否完整Y结束图5-4道路信息编辑工作流程图(2)核心代码41 华南理工大学硕士学位论文当用户完成道路名称、道路级别、道路材料、路面宽度、道路全长、道路修建时间编辑后并点击界面右上角保存按钮,客户端会获取上述控件值,然后验证这些控件值是否符合要求。下面仅以路面宽度为例,介绍客户端如何获取路面宽度控件值,并验证用户输入的路面宽度值是否为空,如果不为空,再验证输入的宽度值是否为数值类型,如果符合,则设置保存到数据库Road的Road_Width值。代码如下://获取路面宽度控件TextInputEditTextroadWidthdEditText=(TextInputEditText)findViewById(R.id.road_width);//获取路面宽度控件值StringroadWidthStr=roadWidthdEditText.getText().toString().trim();//校验用户输入的路面宽度值是否为空if(roadWidthStr.equals("")){this.alertMessage("路面宽度不能为空");return;}else{//校验用户输入的路面宽度值是否为数值类型if(!ValidateUtil.isPrice(roadWidthStr)){this.alertMessage("路面宽度为数值类型");return;}}//如果输入正确,则设置保存到数据库表Road的Road_Width值todoFolder.put("Road_Width",Integer.parseInt(roadWidthStr));当以上六个控件值均符合要求后,则进行道路信息保存,其代码如下://设置保存后的回调值SaveCallbackcallback=newSaveCallback(){@Overridepublicvoiddone(AVExceptione){//获取回调后的返回值,如果没有异议,说明保存成功42 第五章路面病害检测系统的设计与实现if(e==null){//弹出模态框提示用户保存成功newSweetAlertDialog(AddRoad.this,SweetAlertDialog.SUCCESS_TYPE).setTitleText("应用提示").setContentText("保存道路信息成功").show();}else{newSweetAlertDialog(AddRoad.this,SweetAlertDialog.ERROR_TYPE).setTitleText("应用提示").setContentText(e.getMessage()).show();}}}//调用后台接口进行道路信息保存todoFolder.saveInBackground(callback);}道路信息编辑界面示意图见图5-5。43 华南理工大学硕士学位论文图5-5道路信息编辑界面示意图5.3.2道路路段信息编辑(1)工作流程在道路列表界面,点击其中一个道路信息,客户端跳转到道路路段列表界面。在界面右上角点击添加,进入道路路段信息编辑界面,界面的上面列出了路段所属的道路信息,界面中间是道路路段名称、起始里程桩号、终止里程桩号、车道名称、车道宽度、上下行等TextView控件以及TextInputEditText和Spinner控件,当准确完成以上信息编辑后,再点击界面右上角的保存,客户端才会提示保存成功,否则客户端将提示哪些信息需要完善。保存成功后,返回到道路路段列表界面,客户端会将刚刚添加的道路路段信息展示在该界面上。道路路段名称、起始里程桩号、终止里程桩号、车道宽度使用TextInputEditText控件进行手动输入。考虑到不同省份对于高速公路车道名称不一致以及其他等级道路并没有进行车道划分,所以,在客户端设计时,选择使用TextInputEditText控件进行手动输入。上下行使用Spinner控件进行选择。道路路段信息编辑工作流程图见图5-6。44 第五章路面病害检测系统的设计与实现开始添加道路路段信息编辑输入道路路段名称输入起始、终止里程桩号N输入车道名称输入车道宽度下拉框选择上下行验证道路路段信息编辑是否完整Y结束图5-6道路路段信息编辑工作流程图(2)核心代码当用户完成道路路段名称、起始和终止里程桩号、车道名称、车道宽度、上下行编辑后并点击界面右上角保存按钮,客户端会获取上述控件值,然后验证这些控件值是否符合要求。这部分的代码与上节的道路信息编辑部分基本相似。所以,下面仅以起始里程桩号为例,介绍客户端如何获取路面宽度控件值,并验证用户输入的起始里程桩号是否为空,如果不为空,则设置保存到数据库RoadSegment的StartMilePeg值。代码如下://获取道路路段起始里程桩号输入框控件TextViewStartMilePeg=(TextView)findViewById(R.id.StartMilePeg);//获取道路路段起始里程桩号输入框控件值StringStartMilePegStr=StartMilePeg.getText().toString().trim();//校验道路路段起始里程桩号输入框控件值是否为空,如果为空则提示用户if(StartMilePegStr.equals("")){alertMessage("起始里程桩号不能为空");return;}45 华南理工大学硕士学位论文道路路段信息编辑示意图见图5-7。图5-7道路路段信息编辑示意图5.3.3路段病害信息编辑(1)病害信息分类道路路面可以根据路面材料分为三类,分别为沥青路面、水泥路面、砂石路面。不同材料的路面呈现出不同的损坏类型。考虑到国内道路路面材料大多采用沥青和水泥,所以在此只叙述这两种材料的道路损坏类型。沥青路面病害类型分为11类,水泥路面也分为11类,考虑到路面损坏PCI计算时,同一种病害类型不同损坏程度采用不同的权重系数,所以公路技术状况评定标准JTGH20-2007将沥青路面包含损坏程度的损坏类型分为21类,水泥路面包含损坏程度的损坏类型分为20类。沥青路面损坏类型见表5-1,水泥路面损坏类型见表5-2。46 第五章路面病害检测系统的设计与实现表5-1沥青路面损坏类型和权重类型(i)损坏名称损坏程度权重(wi)1轻0.62龟裂中0.83重1.04轻0.6块状裂缝5重0.86轻0.6纵向裂缝7重1.08轻0.6横向裂缝9重1.010轻0.8坑槽11重1.012轻0.6松散13重1.014轻0.6沉陷15重1.016轻0.6车辙17重1.018轻0.6波浪拥抱19重1.020泛油0.221修补0.147 华南理工大学硕士学位论文表5-2水泥混凝土路面损坏类型和权重类型(i)损坏名称损坏程度权重(wi)1轻0.8破碎板2重1.03轻0.64裂缝中0.85重1.06轻0.67板角断裂中0.88重1.09轻0.6错台10重1.011唧泥1.012轻0.613边角剥落中0.814重1.015轻0.4接缝料损坏16重0.617坑洞1.018拱起1.019露骨0.320修补0.1在客户端设计过程中,道路材料、病害类型、损坏程度三个下拉框之间存在先后关系,也就是说只有选择了路面材料,才能生成病害类型下拉框,选择了病害类型型才能生成损坏程度下拉框,下拉框内的具体选项都是由表5-1、5-2确定的。此外,在路面损坏PCI计算时,需要依据表5-1、5-2进行数据构造,目的是当用户选择了病害类型及损坏程度后,系统能够获得相应的权重,以进行DR、PCI计算。(2)工作流程在道路路段列表界面,点击其中一个道路路段信息,客户端跳转到路段病害列表界面。界面分为三个部分,上面为路段所属的道路信息,显示道路名称、道路级别、道路材料、道路全长、路面宽度、道路修建时间;中间为路段信息,显示道路路段名称、起始里程桩号、终止里程桩号、车道宽度、上下行、路面损坏PCI值;下面为路段病害列表。在界面右上角点击添加,进入新增病害信息编辑界面,用户需要编辑病害类型、损坏程度、病害位置、检测时间、病害面积、病害描述、病害图片等信息,只有完成以上信息编辑后,再点击界面右上角的保存,客户端才会提示保存成功,否则客户端将提示哪些信息需要完善。保存成功后,返回到路段病害界面,客户端会将刚刚添加的病害信48 第五章路面病害检测系统的设计与实现息进行自动编号(int自增)然后展示在路段病害列表内,同时路面损坏PCI值也会相应更新。病害类型和损坏程度都使用Spinner控件进行选择,病害类型下拉框内的选项是由道路材料确定,损坏程度下拉框内的选项由病害确定。检测时间是进入新增病害信息界面时,向系统获取的。病害位置是进入新增病害信息界面时,客户端会提示是否启用GPS,当用户选择允许后,客户端会自动进行定位。病害面积及病害描述都是使用TextInputEditText控件进行手动输入。病害图片添加使用ImageList控件,客户端提供两种方式,一种是调用相机进行拍摄,另一种是直接在手机相册里添加照片。路段病害信息编辑工作流程图见图5-7。开始添加路段病害信息编辑下拉框选择病害类型下拉框选择损坏程度自动获取地址位置N自动获取检测时间输入病害面积输入病害描述添加病害图片验证道路路段信息编辑是否完整Y结束图5-7路段病害信息编辑工作流程图(3)核心代码病害编辑界面:病害类型、损坏程度、病害图片上传、病害位置信息以及病害信息49 华南理工大学硕士学位论文保存都是通过AddDisease类来实现的。页面布局通过Activity生命周期方法onCreate进行页面初始化。核心代码如下://通过Activity生命周期方法onCreate进行页面初始化@OverrideprotectedvoidonCreate(BundlesavedInstanceState){//调用父类初始化构造方法super.onCreate(savedInstanceState);//调用布局文件进行界面布局及生成界面控件setContentView(R.layout.activity_add_disease);//调用初始化方法进行页面数据初始化及初始化类属性值iniSelectItem();}考虑到一个病害需要拍摄多张图片,所以用数组来存储病害图片;采用getStringDate()方法获取系统时间作为病害检测时间;为了在病害列表界面显示上一个界面的道路信息及道路路段信息,采用了Intent对象,它的作用类似于桥,可以将上一个界面的数据传输到病害详情界面;核心代码如下://进行页面数据初始化及初始化类属性值publicvoidiniSelectItem(){//初始化病害损坏程度数组diseaseLevelArray=newArrayList();//初始化病害图片数组imgeArray=newArrayList();//初始化定位位置为"",准确定位后再重新赋值roadeSegmentLocation="";//获取病害时间控件TextViewroadSegmentTestTime=(TextView)findViewById(R.id.roadSegmentDiseaseTestTime);//通过Utils类中的getStringDate()方法生成时间了字符串对控件进行赋值,getStringDate()方法会生成当前时间,如“2017-03-16”roadSegmentTestTime.setText(Utils.getStringDate());50 第五章路面病害检测系统的设计与实现//获取上一个页面的Intent对象Intentintent=getIntent();//从Intent对象中获取上一个页面传过来的值所对应的参数key(Params)Bundlebundle=intent.getBundleExtra("Params");//获取病害图片列表控件checkDetailImgGridView=(GridView)findViewById(R.id.checkDiseaseImg);//设置病害图片列表控件触屏事件,例如向下滑动列表checkDetailImgGridView.setOnTouchListener(newOnTouchListener(){//用户触屏后事件回调函数,目的是为了屏蔽掉父控件的触屏事件,响应当前触屏事件,这样在用户进行列表滑动时不会触发ScrollVIew事件,决解ListView滑不动的情况publicbooleanonTouch(Viewv,MotionEventevent){//屏蔽掉父控件的触屏事件,响应当前触屏事件checkDetailImgGridView.getParent().requestDisallowInterceptTouchEvent(true);returnfalse;}});//设置病害图片列表控件,选中某一行事件checkDetailImgGridView.setOnItemClickListener(newAdapterView.OnItemClickListener(){publicvoidonItemClick(AdapterViewparent,Viewv,intposition,longid){//目前没有相关逻辑,虚以待位}});//初始化病害列表适配器diseaseAddImgGuidViewAdapter=newDiseaseAddImgGuidViewAdapter(this);//病害列表适配器设置到病害列表控件checkDetailImgGridView.setAdapter(diseaseAddImgGuidViewAdapter);//从bundle中获取上一个页面传过来的options值51 华南理工大学硕士学位论文Stringoptions=bundle.getString("options");//如果options值等于"新增",则表示当前处于病害新增/编辑功能页面,因为新增/编辑与查看页面是共用的,所以需要参数来进行区分if(options.equals("新增")){//从bundle中获取上一个页面传过来的roadSegment对象roadSegments=(RoadSegments)bundle.getSerializable("roadSegment");//根据根roadSegments对象的Road_Stuff值获取数组下标所对应的值。m2={"沥青","水泥"},当Road_Stuff=0时,stuff=沥青stuff=AddRoad.m2[roadSegments.getRoad_Stuff()];//通过stuff(道路材料)初始化病害数组diseaseTypeArray=UserSingleton.getDiseaseTypeByStuff(stuff);//获取化病害数组下标为0的值初始化病害类型值diseaseTypeValue=diseaseTypeArray.get(0);//获取病害类型控件diseaseTypeSpinner=(Spinner)findViewById(R.id.diseaseType);//初始化病害类型下拉列表控件,并将可选内容(diseaseTypeArray)与ArrayAdapter下拉值一一对应diseaseTypeAdapter=newArrayAdapter(this,android.R.layout.simple_spinner_item,diseaseTypeArray);//设置下拉列表的风格diseaseTypeAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);//将病害adapter添加到病害spinner中diseaseTypeSpinner.setAdapter(diseaseTypeAdapter);//添加病害控件Spinner件监听事件diseaseTypeSpinner.setOnItemSelectedListener(newdiseaseTypeListener());//设置默认值diseaseTypeSpinner.setVisibility(View.VISIBLE);//初始化病害程度下拉列表控件,并将可选内容(diseaseTypeArray)与ArrayAdapter下拉值一一对应52 第五章路面病害检测系统的设计与实现diseaseLevelAdapter=newArrayAdapter(this,android.R.layout.simple_spinner_item,diseaseLevelArray);//设置病害损坏程度列表的风格diseaseLevelAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);//获取病害程度控件diseaseLevelSpinner=(Spinner)findViewById(R.id.diseaseLevel);//将病害adapter添加到病害spinner中diseaseLevelSpinner.setAdapter(diseaseLevelAdapter);//添加病害程度Spinner监听事件diseaseLevelSpinner.setOnItemSelectedListener(newdiseaseLevelListener());//设置病害程度控件显示diseaseLevelSpinner.setVisibility(View.VISIBLE);//如果当前处于新增/编辑功能时,开始启动定位startLocationStack();}else{//病害查看页面//获取病害界面头部标题控件TextViewcheckedDetailTitle=(TextView)findViewById(R.id.checkedDetailTitle);//如果是病害查看页面,则界面头部标题显示“病害详情”checkedDetailTitle.setText("病害详情");//获取保存病害控件ImageViewaddSegmentRoadBtn=(ImageView)findViewById(R.id.addSegmentRoadBtn);//设置保存病害控件为隐藏addSegmentRoadBtn.setVisibility(View.GONE);//获取提交病害控件TextViewtextView=(TextView)findViewById(R.id.submitRoadSegmentDiseaseBtn);//设置提交病害控件为隐藏53 华南理工大学硕士学位论文textView.setVisibility(View.GONE);//获取上一个页面传过来的DiseaseObjParam参数值DiseasediseaseObjParam=(Disease)bundle.getSerializable("DiseaseObjParam");//获取病害类型下拉列表控件SpinnerdiseaseType=(Spinner)findViewById(R.id.diseaseType);//设置病害类型下拉列表控件为隐藏diseaseType.setVisibility(View.GONE);//获取病害类型下标签控件TextViewdiseaseType_Lable=(TextView)findViewById(R.id.diseaseType_Lable);//设置病害类型下标签控件显示diseaseType_Lable.setVisibility(View.VISIBLE);//设置病害类型下标签控件值diseaseType_Lable.setText(diseaseObjParam.getDisease_Type());//获取病害损坏程度下拉列表控件SpinnerdiseaseLevel=(Spinner)findViewById(R.id.diseaseLevel);//设置病害程度下拉列表控件为陷藏diseaseLevel.setVisibility(View.GONE);//获取病害程度标签控件TextViewdiseaseLevel_Label=(TextView)findViewById(R.id.diseaseLevel_Label);//获取病害程度标签控件为显示diseaseLevel_Label.setVisibility(View.VISIBLE);//设置病害程度标签控件值diseaseLevel_Label.setText(diseaseObjParam.getDisease_Level());//获取病害地理位置输入框控件TextInputEditTextcheckDetailLabelTextSizeShow=(TextInputEditText)findViewById(R.id.checkDetailLabelTextSizeShow);//设置病害地理位置输入框控件为隐藏checkDetailLabelTextSizeShow.setVisibility(View.GONE);//获取病害地理位置标签控件TextViewdiseaseLocation=(TextView)findViewById(R.id.diseaseLocation);54 第五章路面病害检测系统的设计与实现//获取病害地理位置标签控件隐藏diseaseLocation.setVisibility(View.INVISIBLE);//设置病害地理位置标签控件文本diseaseLocation.setText(diseaseObjParam.getDisease_Local());//获取病害采集时间标签控件TextViewroadSegmentDiseaseTestTime=(TextView)findViewById(R.id.roadSegmentDiseaseTestTime);//设置病害采集时间标签控件值roadSegmentDiseaseTestTime.setText(diseaseObjParam.getDisease_Time());//获取病害面积输入框控件TextInputEditTextDisease_Area=(TextInputEditText)findViewById(R.id.Disease_Area);//设置病害面积输入框控件为隐藏Disease_Area.setVisibility(View.GONE);//获取病害面积标签为控件TextViewDisease_Area_Label=(TextView)findViewById(R.id.Disease_Area_Label);//设置病害面积标签为显示Disease_Area_Label.setVisibility(View.VISIBLE);//设置病害面积标签为为值Disease_Area_Label.setText(String.valueOf(diseaseObjParam.getDisease_Area()));//获取病害描述输入框控件TextInputEditTextDisease_RemarkRecommend=(TextInputEditText)findViewById(R.id.Disease_RemarkRecommend);//获取病害描述输入框控件为隐藏Disease_RemarkRecommend.setVisibility(View.GONE);//获取病害标签控件TextViewDisease_RemarkRecommend_Label=(TextView)findViewById(R.id.Disease_RemarkRecommend_Label);//获取病害标签控件为隐藏55 华南理工大学硕士学位论文Disease_RemarkRecommend_Label.setVisibility(View.VISIBLE);//设置病害标签控件为隐藏Disease_RemarkRecommend_Label.setText(diseaseObjParam.getDisease_Remark());//设置病害图片列表为显示checkDetailImgGridView.setVisibility(View.VISIBLE);//初始化数组ArrayListimageList=newArrayList();//获取病害图片Stringurl=diseaseObjParam.getDiseaseimage();//把获取到的病害图片添加到数组imageList.add(url);//加载病害图片列表进行数据展示loadMapImagData(imageList);}}路段病害信息编辑界面示意图见图5-8。图5-8路段病害信息编辑界面示意图56 第五章路面病害检测系统的设计与实现5.3.4路面损坏PCI计算(1)PCI计算公式路面损坏用路面损坏状况指数(PCI)评价,PCI按(5-1)、(5-2)式计算[1]。PCI=100−𝑎𝐷𝑅𝑎1(5-1)0𝑖0∑𝑖=1𝑤𝑖𝐴𝑖DR=100×(5-2)𝐴式中:DR——路面破损率,为各种损坏的折合损坏面积之和与路面调查面积之百分比(%);A2i——第i类路面损坏的面积(m);A——调查的路面面积(调查长度与有效路面宽度之积,m2);wi——第i类路面损坏的权重;a0——沥青路面采用15.00,水泥路面采用10.66,砂石路面采用10.10;a1——沥青路面采用0.412,水泥路面采用0.461,砂石路面采用0.487;i——考虑损坏程度(轻、中、重)的第i项路面损坏类型;i0——包含损坏程度(轻、中、重)的损坏类型总数,沥青路面取21,水泥路面取20,砂石路面取6。由公式(5-1)、(5-2)知,求PCI需要知道权重A、Ai、wi,其中调查的路面面积A为路段长度1000米乘以车道宽度,第i类路面损坏的面积Ai由路面调查得到,第i类路面损坏的权重wi查表5-1、5-2得到。在病害编辑界面,布置了路面损坏面积控件,用户需手动输入面积值;同时设置了病害类型下拉框及损坏程度下拉框,当用户完成这两个下拉框选择后,系统内部会提取相应的权重wi。(2)PCI计算代码道路路段详情页面的病害信息是以列表(ListView)的方式展现的,在病害列表数据进行加载的时候可以对当前路段的病害数据进行PCI计算,通过获取PCI标签控件,将PCI计算结果作为PCI标签控件值显示在页面上。核心代码如下://加载当前道路路段的所有病害信息到病害列表publicvoidloadDiseaseListView(){//初始化查询对象AVQueryquery=newAVQuery<>("Disease");57 华南理工大学硕士学位论文//设置查询条件,根据道路路段编号进行病害查询query.whereEqualTo("RoadSegmentID",roadSegmentObj.getRoadSegmentID());//调用接口进行后台数据查询query.findInBackground(newFindCallback(){//查询成功或失败回调@Overridepublicvoiddone(Listlist,AVExceptione){//如果异常为空表示查询成功if(e==null){//清空病害列表缓存diseaseList.clear();//进行病害数组遍历for(inti=0;igetDiseaseList(){if(diseaseList==null){//水泥//破碎板HashMappsb=newHashMap();psb.put("轻",0.8);psb.put("重",1.0);HashMappsbMap=newHashMap();psbMap.put("破碎板",psb);//此处省略其它几种损坏类型的代码……//沥青//龟裂HashMapgl=newHashMap();gl.put("轻",0.6);gl.put("中",0.8);gl.put("重",1);HashMapglMap=newHashMap();glMap.put("龟裂",gl);//此处省略其它几种损坏类型的代码……returndiseaseList;}上述代码将损坏类型、损坏程度及权重等数据转化为计算机能够识别的数据结构。在计算PCI时,最重要的是如何获取与病害类型及损坏程度相对应的权重wi。常规59 华南理工大学硕士学位论文的想法就是当用户选择了病害类型及损坏程度后,系统能够自动选取相应的权重wi。为了实现这个想法,首先应根据道路路面材料初始化病害类型下拉框,然后再根据病害类型初始化损坏程度下拉框,当用户选择了病害类型及损坏程度后,系统根据上述数据结构,自动提取相应的权重wi。第一步:根据道路路面材料(沥青或水泥)获取病害类型数组,代码如下://根据道路路面材料获取病害类型数组publicstaticArrayListgetDiseaseTypeByStuff(Stringstuff){//如果病害型列表数据为空if(diseaseList==null)//构造病害数据列表getDiseaseList();//初始化病害类型数组用户存储病害值ArrayListdiseaseTypes=newArrayList();//用户于存放病害类型MapArrayListdiseaseTypeHashMapArray=newArrayList();//根据道路路面材料遍历所有病害类型Mapfor(inti=0;imap=diseaseList.get(i);if(Utils.getMapKey(map).equals(stuff)){diseaseTypeHashMapArray=map.get(stuff);break;}}//通过遍历病害类型Map获取所有Keyfor(intj=0;jgetDiseaseTypeByStuffAndType(Stringstuff,StringdiseaseType){//如果病害型列表数据为空if(diseaseList==null)getDiseaseList();//初始化病害类型数组用户存储病害值ArrayListdiseaseTypes=newArrayList();//用户于存放病害类型MapArrayListdiseaseTypeHashMapArray=newArrayList();//根据道路路面材料遍力所有病害类型Mapfor(inti=0;imap=diseaseList.get(i);//判断当前道路路面材料是水泥还是沥青if(Utils.getMapKey(map).equals(stuff)){//获取道路路面材料对应的病害数组列表diseaseTypeHashMapArray=map.get(stuff);//跳出循环break;}}//map存放着病害对所应的损坏程度Map61 华南理工大学硕士学位论文Collectionkeys=map.keySet();//依次遍历损害程度Mapfor(Iteratoriterator=keys.iterator();iterator.hasNext();){//获取损害程度Mapkey值Objectkey=iterator.next();//进行key值增加到List列表diseaseTypes.add(key.toString());}//返回病害程度key值List列表returndiseaseTypes;}第三步:根据病害类型及损坏程度获取权重wi。代码如下:/***获取病害权重wi*@paramstuff*@paramdiseaseType*@paramlevel*@return*/publicstaticNumbergetDiseaseTypeByStuffAndLevelValue(Stringstuff,StringdiseaseType,Stringlevel){//如果病害型列表数据为空if(diseaseList==null)getDiseaseList();//初始化病害类型数组用户存储病害值ArrayListdiseaseTypes=newArrayList();//根据道路路面材料遍力所有病害类型MapArrayListdiseaseTypeHashMapArray=newArrayList();//根据道路路面材料遍历所有病害类型Mapfor(inti=0;imap=diseaseList.get(i);//判断当前道路路面材料是水泥还是沥青if(Utils.getMapKey(map).equals(stuff)){//获取道路路面材料对应的病害数组列表diseaseTypeHashMapArray=map.get(stuff);//跳出循环break;}}//用于存放根据病害类型key查找到对应的Map值HashMapmap=newHashMap();//根据道路路面材料遍历所有病害类型Mapfor(intj=0;jdiseaseList){//A是车道宽度乘以路段长度(固定1000)doubleA=roadSegment.getWidth()*1000;//初始化值为0floatweightTotal=0;//初始化材料值为空Stringstuff="";//依次遍历病害列表for(inti=0;iqueryAV=newAVQuery<>("RoadSegment");//设置道路编号,道路编号是外键,通过道路编号查询路段queryAV.whereEqualTo("Road_ID",roadObj.getRoad_ID());65 华南理工大学硕士学位论文//初始化起始查询下标,从一条开始查询roadSkip=0;//设置一次查询30条数据queryAV.limit(30);//设置从第一条开始果查询queryAV.skip(roadSkip);//设置模糊查询条件,查询路段名称中包含用户输入的符queryAV.whereContains("name",query);//查询这前初始化查询结果列表roadSegmentseList.clear();//以路段信息为作查询参数开始调用数据查询方法loadRoadData(queryAV);returnfalse;}//当搜索内容改变时触发该方法@OverridepublicbooleanonQueryTextChange(StringnewText){returnfalse;}});}else{//否则隐藏搜索框//获取搜索框控件LinearLayoutserarchLayout=(LinearLayout)this.findViewById(R.id.roadSegmentSearchViewLayout);//设置搜索框控件为隐藏serarchLayout.setVisibility(View.GONE);}在搜索框输入道路路段信息后,客户端向后台发出指令,调用后台搜索接口进行查询。其核心代码如下://调用封装好的搜索查询函数进行数据查询66 第五章路面病害检测系统的设计与实现publicvoidloadRoadData(finalAVQueryquery){//调用后台查询接口进行数据查询query.findInBackground(newFindCallback(){@Override//搜索函数搜索到数据之后返回数据publicvoiddone(Listlist,AVExceptione){//如果返回数据数组大于0,说明返回了搜索结果if(list.size()>0){//开始遍历返回结果数组for(inti=0;i

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。
关闭