版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
I基于的手机导航系统的设计与实现基于的手机导航系统的设计与实现随着移动通信技术的发展,手机已成为集通信、掌上电脑于一体的移动计算工具,人们对手机所赋予的功能也已经扩展到分布式计算、空间定位等更高端的领域。技术的融合,可为手机用户提本文参照规范标准,建立了利用文档进行地图数据组织和存储的应用模文档解析、操作的支持下,对手机上实现移动服务的各项功能的关键技术进行了基于目前用户使用手机中有以上是具有蓝牙功能的手机的现状,提出了一种基于平台的移动解决方案。该方案通过增加一个外置蓝牙信号接收器获取II基于的手机导航系统的设计与实现ofIII基于的手机导航系统的设计与实现 2.2.2基于移动终端的定位技术 5 2.6.1RMS 10 2 t 2.9.3JavaServletAPI 14 2.10.2地图制作软件——AdobeIllustrator 14IV基于的手机导航系统的设计与实现 4.2客户端功能描述 164.3服务端功能描述 17 5.1.2本系统采用的设计模式——状态设计模式 18 XML 195.2.5蓝牙设备发现、连接及数据传送功能设计 195.2.6文件系统访问设计 20 K IAC V基于的手机导航系统的设计与实现 1基于的手机导航系统的设计与实现第一章引言1.1课题背景及研究意义模式采用结构,服务器端基于协议开发地,不具备无级缩放等矢量地图所具使用的手机中以上是具有蓝牙功能的手机,提出了一种基于蓝牙的、具有定位功能的移动解决方案。1.2课题主要内容卫星导航数据,并对导航数据进间限制以及不具备的手机无法实现定位的问题。本论文根据该方案设计实现了统,其主要功能包括地图服务、定位服用受到严格的限制,如何,论文中通过使用将大2基于的手机导航系统的设计与实现数据量图形计算等资源消耗高的处理由部署在服务器端的组件完成的方式来解决上述问题。客户端软件只负责发送处理请求并解析服务器处理结果,避免了移动终端软件在处理大数据量运算时出现死机或者内存不足等资源耗尽的情况,降低了对移动终端资源的要求,使系统有更强的兼容性。客户端与服务端连接设计,服务器端设计包括服务端包生成接收及解析功能设1.3论文结构安排论文首先对系统设计过程中所使用到的关键技术作简要介绍,然后按照软件工程的思3基于的手机导航系统的设计与实现第二章关键技术介绍J2ME平台是由配置(Configuration)和简表(Profile)构成的。配置是提供给最大范定设备提供的类库,比如某些设备是支持蓝牙的,针对此功能J2ME中制定了JSR82 (BluetoothAPI)提供了对蓝牙的支持。目前,J2ME中有两个最主要的配置,分别是参考。本教程将主要讲解基于种平台开发的J2ME应用规模基本上不会超过一个人的能力范围。这样可以有效避免协4基于的手机导航系统的设计与实现2.2定位技术网络的定位技术(1)CELL-ID-TACELL-ID是小区全球识’别码,每个蜂窝小区有一个惟一的小区识别码。基于TDD的。所有终端都可以同时使用这种定小和周围的环境。(2)UL-TOA和TDOATDOA测量的是移动用户发射信号到达不同基站之间的传输时间差,而不是传输时间。UL-TOA定位方法需要MS和参与定位的基站相互之间精确同步,而TDOA则不需要。(3)AOA信号到达角定位方法是由两个或更多基站通过测量接收信号的到达角来估计移动用户5基于的手机导航系统的设计与实现2.2.2基于移动终端的定位技术该定位技术的原理是:多个已知位置的基站发射信号,所发射信号携带有与基站位置端接收到这些信号后,确定其与各基站之间的几何位置关系,并根据相关算法对其自身位置进行定位估算,从而得到自身的位置信息。具有较高的定位精度。但其致命的缺陷是需要手机参与定位参数的测量并进行坐标位置的计算,必须对手手机的能耗,而且从商用角度来看很难做到大面积的推广和使用。知的地理位置相比较得到差值,该差域且共用四颗卫星进行定位的移动接于公共误差修正值可以修正移动接收6基于的手机导航系统的设计与实现(1)移动性:运行于各种移动终端上,与服务端可通过无线通信进行交互实时获取空间数据,可以随时随地进行空间信息服务,也可以脱离服务器与传输介质的约束独立运行,(2)客户端多样性:移动GIS的客户端指的是在户外使用的可移动终端设备,其选择范屏幕较小、功能受限的各类(3)动态(实时)性:作为一种应用服务系统,应能及时地响应用户的请求,能处理用户环境中随时间变化的因素的实时影响,在移动的过程中,不受限制地把采集到的相关(4)数据资源分散、多样性:移动GIS运行平台向无线网络的延伸进一步拓宽了其应用的信息也是多种多样的,这就需满足所有的移动数据请求。(1)嵌入式技术(2)无线网络技术在移动通信领域,无线接入技术可以分为两类:一是基于数字蜂窝移动电话网络的接的接入技术,如蓝牙、无线局域网等技术。(3)分布式空间数据管理技术布的各种数据源,借助于现有的分持。(4)移动数据库技术7基于的手机导航系统的设计与实现移动数据库是指移动环境的分布式数据库,是分布式数据库的延伸和发展。移动数据库要求支持用户在多种网络条件下都能够有效地访问,完成移动查询和事务处理。利用数据库复制/缓存技术或数据广播技术,移动用户即使在断接的情况下也可以访问所需的数(5)GPS定位技术mS2.4蓝牙通信技术导航系统中移动终端自身所处位置的经纬度数据是通过移动终端与蓝牙GPS信号接。1蓝牙通信概述 。些机型甚至还配备了8基于的手机导航系统的设计与实现要通过无线搜索去实现。搜索到远(1)蓝牙通信需要蓝牙设备硬件支持,蓝牙网络可以视为无线局域网。(2)蓝牙通信也是基于通用连接框架,但不同的是对于客户端而言,需要通过搜索来获。(3)蓝牙服务端使用了连接通知者对象,用于等待远程设备的连接。该连接通知者对象(4)对于客户端而言,搜索服务端分为两个层次:第一层为设备搜索;第二层为服务搜索。服务搜索需要基于指定的远程设备才能进行。(5)客户端和服务端在获得蓝牙协议连接后,就可以通过连接创建输入/输出流来进行通图蓝牙通信示意图9基于的手机导航系统的设计与实现鉴于系统中客户端与服务器之间之间采用超文本传输协议(HTTP),属于J2ME网络图网络应用框架HTTP(RequestMethod)和返回状态。基于的手机导航系统的设计与实现考虑,移动无线设备是资源受限设备,所能支持厂家可能只选择支持其中的一种或几种。MIDP1.0中提供规范所需要的通信协议是HTTPHTTP议的支持,而其他协议的实现都是类型的手机上的可兼容性,客户端和服务端采用2.6数据存储技术本系统中查询记录是保存在手机记录管理系统(RMS)中,从服务端接收的地图文件J2ME记录管理系统(RMS)提供了一种机制,通过这种机制,MIDlet能够持久存储存储在与平台相关的位置(比如非易失性设备存储器)创建,这些位置不直接公开给MIDlet。RMS类调用特定于平台的本机代码,这种本机代码使用标准OS数据管理器函数来执行实际的数据库操作。记录存储实现确保所有单个的记录存储操作都是原子的、同步的以及序列化的,因此多个访问将不会出现数据毁坏。记录存储被盖上时间戳来指示它记且有唯一的整数标识符。统P供。文件系统可选包(JSR75规范)中定义了J2ME平台的文件系统接口。其核心包和文件系统打交道的与其他通用连接框架的应用没有很大的区别,其特有的部分就是文件系统处理。XML(ExtensibleMarkupLanguage)即可扩展标记语言,它与HTML一样,都是基于的手机导航系统的设计与实现是一种简单的数据存储语言,使用一系列简单的标记描述数据,而这些标记可以用方便的DOM(DocumentObjectModel,文档对象模型)是一种应用程序接口(API)的应用,它将文档(如XML文档,HTML文档等)看成是一个文档对象,然后通过程序语言(如SAX是(SimpleAPIforXML)简易应用程序编写接口,SAX解析器不在内存中建立为了提高程序的响应速度和程序运行效率,不致于用户在单击按钮后程序不再响应用户的了多线程机制。用户发起网络请求时,网起,该线程完成网络操作后将结果或接到程序中并发执行多个指令流,每个比进程间通信简单。多个线程的执基于的手机导航系统的设计与实现下状态:(1)新建:当一个下hread类或者其子类的对象被声明并创建时,新的线程对象处于。(2)就绪:处于新建状态的线程被启动后,将进入线程队列排队等待CpU服务,这(3)运行:就绪的线程被调度并获得CUp的处理边进入了运行状态,每一个Thread(4)阻塞:一个正在执行的线程如果在某种情况下不能执行了,进入阻塞状态,此时(5)死亡:处于死亡状态的线程不具有继续执行的能力,线程死亡主要的原因是正常(2)方式二:实现Runnable接口(1)线程同步标记:synchronized关键字基于的手机导航系统的设计与实现(2)线程协作处理:使用join()方法理,该方法的本质还是通过wait()方法实现,该线程的启动必须拿到另一个线程的Servlet的生命周期始于将它装入Web服务器的内存时,并在终止或重新装入(1)初始化(2)请求处理对于到达服务器的客户机请求,服务器创建特定于请求的一个“请求”对象和一个“响(3)终止基于的手机导航系统的设计与实现和</FORM>标记定义的。表单中典型地包含输入字段(如文本输入字段、复选框、单选按钮和选择列表)和用于提交数据的按钮。当提交信息时,它们还指定服务器应执行哪一0SVG地图图片的渲染及制作技术电子出版物设计等诸多领域。通过使用它,用户彩丰富的图形和文字效果,还可以在同一版面中实现图文混排,甚至可以制作出极具视觉效果的图表。作为全球最著名的图形软件基于的手机导航系统的设计与实现第三章导航模型需求分析地图服务:由于本次系统设计时采用的地图数据主要是合肥学院这一块的地图,主要是满足在合肥学院周边地区人们获取地理信息数据的需求,包括地图的平移、缩放和测距。基于的手机导航系统的设计与实现第四章导航模型概要设计4.1功能模块划分4.2客户端功能描述(1)地图服务主要完成地图的平移、缩放、测定距离、图层控制、重定中心等功能,其中地图平移(2)定位服务、纬度、海拔高度,将这些数据基于的手机导航系统的设计与实现3)查询服务客户端用户输入文字信息,该文字信息被传送到后台服务端,服务端在地图上进行快4)系统设置设置地图视图方式,分混合视图、建筑视图、交通视图。选择混合视图时地图中将包括建筑物信息及交通信息,选择建筑视图时地图中将只包括建筑物信息而不包括交通信息,选择交通视图时地图中将只包括交通信息而不包括建筑物信息。5)系统帮助:提供该系统的使用帮助信息。4.3服务端功能描述地图服务器端软件主要负责响应客户端发送来的各种请求,并同地图服务器交互完成2)业务处理模块主要根据用户的客户端请求处理类型执行相应的业务逻辑运算,得到运算结果。选择3)数据发送模块主要完成接收业务处理模块的处理结果数据并对数据进行分析选择相应的地图,并将基于的手机导航系统的设计与实现第五章导航模型详细设计设计模式()是一套被反复使用、多数人知晓的、经过分类编目的、、让代码更容易被他人理解、保证结构。把已经证实的技术表示为设计模式帮助设计师选择可使系统重模式还提供了类和对象接口的明确开发中的种设计模式包括:工厂模式、建造模式、工厂方法模式、原始模型态设计模式对象看上去象是改变象里,每一个状态对态创立一个状态类的都有初始化、出5.2客户端设计计实现,分为一级主状态欢迎、过场和地图)界面和二级菜单状态基于的手机导航系统的设计与实现(我的位置、附近搜索、查询历史、设置、帮助、关于、退出)界面的设计。系统启动后有我的位置界面、附近搜索界面、查询历史界采用第一种解决方案需要手机支持,并且具备模块才能获取当前设备经纬。蓝牙设备发现、连接及数据传送功能设计规范中定义了蓝牙相关的开发包,可用来进行蓝牙设备的查找和控制数据设计了一个蓝牙信号接收器信号数据。基于的手机导航系统的设计与实现系统中从服务器传送到客户端的地图数据是先保存到手机文件系统中,再从文件系统中读取并渲染到用户界面上,涉及到文件系统读取及写入操作,主要通过写地图文件线程t端发送过来的包进行解析后的请求命令字调用相应的模块,分服技术,得到请求命令字,请求描述本地磁盘中对应的地图文件,并将地图文件数据发送给客户端。如果请求命令字为其件数据发送功能设计通过resp.getOutputStream()输出流将地图数据发送给客户端。5.4客户端与服务端通信设计协议无线设备是资源受限设备,所能支持的网络协议非常有限,仅限于,可能只选择支持其中的一种或几种。中提供规范所需要的通信协议是,也就基于的手机导航系统的设计与实现和服务端采用协议进行通讯。采用协议做为数据传输协议,服务端程序可以在现有的服务中间件服传播的文档规范化,用文档的结构能理解的信息符号规则语言标准的束符合语法规则的文档称为合格文档,针对不同应用领域的文档结构约束规则即所谓的文档有效性约束符合某种结构约束规则的合格文档称为有效文档。按照标准制定的置标语言和数据交换格式已经广表可以与其他用户或系统实现数据共享。基于的手机导航系统的设计与实现客户端数据发送模块将请求数据包发送给服务端数据接收模块服务器端服务器结束后选择相应的地图文件并调用数据发送模块将地图数据发送给客户端。客户端数据接收模块接收到响应地图数据后调用5.5地图服务设计设计原则()数据量最少原则移动终端同地图服务器之间的数据传输,至关重要就是传输的数据量的多少。数据传统响应时间如果传输的数据量过大,所花费的会出现内存不足的基于的手机导航系统的设计与实现()界面友好,操作方便()系统模型要简单,开发量要小()良好的兼容性,可兼容大部分移动设备客户端可接受的图片有两种格式一种矢量图,另一种是栅格图。如果采用栅格图,虽然编程模式简单,但是地图在客户端缩放平移时,将不断请求服务端相应的地图数据,平台,提供了完整的对可拓展矢量图形——格式图可通过解析得到相关属性信息并编辑,所以本系统中地图文件格式采用格式。5.6定位服务设计定位服务主要移动终端与蓝牙模块进行通讯并接收到的数据,在地图上对用于导航的数据大多采用格式提供直接利用无线网络将数据送至后台的服务器,采集点在地图上的定位可以通过在服务器端根据经纬度坐标重新渲染地图,然后将其传回客户端显示的方法实现。5.7查询服务设计系统提供简单的查询操作,可对当前地图中的建筑物进行查询,当查询到所提交的兴息并提示用户重新输入。基于的手机导航系统的设计与实现6.1服务端应用程序实现思路根据命令字及属性选择相应的地图并将地图数据返回给客户端,由于请求数据包数据量较小,故采用实现较简单的解析技术解析请求数据包。实现流程如下图:基于的手机导航系统的设计与实现()服务端接收客户端包数据并解析实现务器上的一个来担当控制器,它通过解。try{is=req.getInputStream();//客户端传过来的请求数据包输入流DocumentBuilderbuilder=factory.newDocumentBuilder();Documentdoc=builder.parse(is);//解析请求数据包Elementroot=doc.getDocumentElement();NodeListnodeList=root.getChildNodes();//获得包命令字commandID=nodeList.item(0).getFirstChild().getNodeValue();//获得包描述description=nodeList.item(1).getFirstChild().getNodeValue();//属性经度longitude=nodeList.item(2).getFirstChild().getNodeValue();//属性纬度latitude=nodeList.item(3).getFirstChild().getNodeValue();}catch(ParserConfigurationExceptione){e.printStackTrace();}catch(SAXExceptione){e.printStackTrace();}finally{is.close();is=null;}()服务端地图数据发送实现地图表示的经度范围为从到,纬度范围为从到,如果该经纬度位于该范围内,则读取该地图DataOutputStreamdos=null;基于的手机导航系统的设计与实现if(commandID.equals("0x01")){//包命令字为0x01,选择地图发送给客户端Stringurl=null;try{if(Double.parseDouble(longitude)>117.2297215461731&&Double.parseDouble(longitude)<117.26757287979126&&Double.parseDouble(latitude)>31.736981902016406&&Double.parseDouble(latitude)<31.77515124322556){//客户端请求包中的经纬度落入该范围内,调用对应的地图url="C:/MapFile/LONG1172211726LAT3173631775/map.svg";}//读取并发送地图数据Filefile=newFile(url);byte[]data=newbyte[(int)file.length()];FileInputStreamfis=newFileInputStream(file);fis.read(data);dos=newDataOutputStream(resp.getOutputStream());dos.writeInt(data.length);dos.write(data);dos.flush();//清空数据输出流,迫使所有缓冲的输出字节被写出到流中}catch(IOExceptione){e.printStackTrace();}finally{dos.close();dos=null;}6.2客户端应用程序实现计思想的实现根据系统当前状态执行对应的方法,包括逻辑处理、绘制、按键按下、按键释放、重复按键方法。在逻辑处理中,根据出场条件调用相应的释放资源和初始化处理方法进入下一状态。系统各状态的主要处理方法如下表所示:基于的手机导航系统的设计与实现表系统各状态处理方法方法初始化欢迎按键按下按键释放重复按键初始化过场动画按键按下按键释放重复按键初始化地图初始化附近搜索释放资源逻辑处理绘制按键按下按键释放重复按键初始化查询历史释放资源逻辑处理绘制按键按下按键释放重复按键初始化设置释放资源逻辑处理绘制按键按下基于的手机导航系统的设计与实现系统逻辑处理使用判断当前当前状态选择对应的逻辑处理方法,实现代码如//一级主状态开关逻辑处理switch(firstState){process_Welcome();break;process_Cartoon();break;caseMAP:process_Map();break;}//二级菜单状态开关逻辑处理switch(secondState){process_SearchAround();break;caseLOOKUP_HISTORY:process_LookupHistory();基于的手机导航系统的设计与实现break;caseSETTING:process_Setting();break;caseHELP:process_Help();break;caseABOUT:process_About();break;caseEXIT:process_Exit();break;}//一级主状态界面绘制switch(firstState){draw_Welcome(g);break;draw_Cartoon(g);break;caseMAP:draw_Map(g);break;}//二级菜单状态界面绘制switch(secondState){break;caseLOOKUP_HISTORY:draw_LookupHistory(g);break;caseSETTING:draw_Setting(g);break;caseHELP:draw_Help(g);break;caseABOUT:draw_About(g);break;caseEXIT:基于的手机导航系统的设计与实现draw_Exit(g);break;}//一级主状态按键按下处理switch(firstState){keyPressed_Welcome(keyCode);break;keyPressed_Cartoon(keyCode);break;caseMAP:keyPressed_Map(keyCode);break;}//二级菜单状态按键按下处理switch(secondState){break;caseLOOKUP_HISTORY:keyPressed_LookupHistory(keyCode);break;caseSETTING:keyPressed_Setting(keyCode);break;caseHELP:keyPressed_Help(keyCode);break;caseABOUT:keyPressed_About(keyCode);break;caseEXIT:keyPressed_Exit(keyCode);break;}//一级主状态按键释放处理switch(firstState){基于的手机导航系统的设计与实现keyReleased_Welcome(keyCode);break;keyReleased_Cartoon(keyCode);break;caseMAP:keyReleased_Map(keyCode);break;}//二级菜单状态按键释放处理switch(secondState){break;caseLOOKUP_HISTORY:keyReleased_LookupHistory(keyCode);break;caseSETTING:keyReleased_Setting(keyCode);break;caseHELP:keyReleased_Help(keyCode);break;caseABOUT:keyReleased_About(keyCode);break;caseEXIT:keyReleased_Exit(keyCode);break;}//一级主状态重复按键处理switch(firstState){keyRepeated_Welcome(keyCode);break;keyRepeated_Cartoon(keyCode);break;caseMAP:keyRepeated_Map(keyCode);break;}//二级菜单状态重复按键处理switch(secondState){基于的手机导航系统的设计与实现break;caseLOOKUP_HISTORY:keyRepeated_LookupHistory(keyCode);break;caseSETTING:keyRepeated_Setting(keyCode);break;caseHELP:keyRepeated_Help(keyCode);break;caseABOUT:keyRepeated_About(keyCode);break;caseEXIT:keyRepeated_Exit(keyCode);break;}()欢迎状态基于的手机导航系统的设计与实现if(-1==readGPSDataSign){gpsClientCanvas.out_Welcome();gpsClientCanvas.init_Cartoon();}后台多线程处理代码如下,其中//欢迎界面出场处理//过场动画初始化处理为初始化是否成功的标记,为读取数据是否成功的标记。if(initializationSign!=-1){if(0==initializationSign){if(!gpsClientCanvas.initializationThread.isAlive()){//启动初始化线程,显示系统初始化信息gpsClientCanvas.initializationThread.start();}initializationSign=1;}elseif(1==initializationSign){}}elseif(readGPSDataSign!=-1){if(0==readGPSDataSign){if(!gpsClientCanvas.readGPSDataThread.isAlive()){//启动读GPS数据线程,与蓝牙GPS信号接收器通信gpsClientCanvas.readGPSDataThread.start();}}elseif(1==readGPSDataSign){if(!gpsClientCanvas.xmlThread.isAlive()){//启动XML线程,发送请求数据包,并接收服务端传过来的地图数据gpsClientCanvas.xmlThread.start();}readGPSDataSign=-1;}}()过场动画状态上图为系统启动时过场动画界面,后台主要是启动写地图文件线程及读地图文件界面设计也是采用实现,界面下方给出提示信息,提示系统当前运行状态。主要包括初始化、出场、逻辑处理、绘制、按键按下、按键释放、重复按键等:if(-1==createMapSign){gpsClientCanvas.out_Cartoon();gpsClientCanvas.init_Map();//过场动画出场处理//地图初始化处理基于的手机导航系统的设计与实现}if(0==createMapSign){if(!gpsClientCanvas.writeMapFileThread.isAlive()){//启动写地图文件线程gpsClientCanvas.writeMapFileThread.start();}if(!gpsClientCanvas.readMapFileThread.isAlive()){//启动读地图文件线程gpsClientCanvas.readMapFileThread.start();}createMapSign=1;}elseif(1==createMapSign){try{gpsClientCanvas.readMapFileThread.join();//等待readMapFileThread线程终止}catch(InterruptedExceptione){e.printStackTrace();}createMapSign=-1;}()地图状态基于的手机导航系统的设计与实现switch(MENU){caseMY_LOCATION://按下我的位置菜单//地图重定中心setCenter(gpsClientCanvas.readGPSDataThread.longitude,gpsClientCanvas.readGPSDataThread.latitude);gpsClientCanvas.secondState=-128;//设置当前系统不存在二级状态gpsClientCanvas.map.MENU=-128;//设置当前未选择任何菜单break;caseSEARCH_AROUND://按下附近搜索菜单gpsClientCanvas.out_Map();gpsClientCanvas.init_SearchAround();break;caseLOOKUP_HISTORY://按下查询历史菜单gpsClientCanvas.out_Map();gpsClientCanvas.init_LookupHistory();break;caseSETTING://按下设置菜单gpsClientCanvas.out_Map();gpsClientCanvas.init_Setting();break;caseHELP://按下帮助菜单gpsClientCanvas.out_Map();gpsClientCanvas.init_Help();break;caseABOUT://按下关于菜单基于的手机导航系统的设计与实现gpsClientCanvas.out_Map();gpsClientCanvas.init_About();break;caseEX工T://按下退出菜单gpsClientCanvas.out_Map();gpsClientCanvas.init_Exit();break;}()我的位置状态选择“我的位置”菜单即调用相应的重定中心方法,根据从蓝牙信号接收器获得如图所示,具体实现过程见后面的定位()附近搜索状态选择“附近搜索”菜单即可进入附近搜索界面,如上图所示,输入相应的建筑物筑物,如果找到对应的建筑物,则调用高亮显示,如图所示,如果未找到,则给出提示,提示用户重新查找,如图所示。具体实现核心代码见后面的查询服基于的手机导航系统的设计与实现图6-9未搜索到查询结果()查询历史状态Stringcontent=this.getString();//提取查询信息内容StringBufferrecord=newStringBuffer();//其中getTimeStr()为获取系统当前时间方法record.append("时间:"+gpsClientCanvas.map.getTimeStr()+"");record.append("搜索:"+content);byte[]bytes=record.toString().getBytes();try{//打开记录集LookupHistory,该记录集用于保存查询记录rs=RecordStore.openRecordStore("LookupHistory",false);rs.addRecord(bytes,0,bytes.length);//将查询记录添加到记录集}catch(RecordStoreFullExceptione){e.printStackTrace();}catch(RecordStoreNotFoundExceptione){e.printStackTrace();}catch(RecordStoreExceptione){e.printStackTrace();}finally{try{rs.closeRecordStore();//关闭记录集rs=null;基于的手机导航系统的设计与实现}catch(RecordStoreNotOpenExceptione){e.printStackTrace();}catch(RecordStoreExceptione){e.printStackTrace();}}try{rs=RecordStore.openRecordStore("LookupHistory",false);em=rs.enumerateRecords(null,null,true);//枚举所有记录records.removeAllElements();//删除所有记录while(em.hasNextElement()){//遍历记录intrecordID;recordID=em.nextRecordId();byte[]bytes=rs.getRecord(recordID);//读取记录字符数组Stringdata=newString(bytes);records.addElement(data);//添加记录到records中}}catch(RecordStoreNotOpenExceptione){e.printStackTrace();}catch(InvalidRecordIDExceptione){e.printStackTrace();}catch(RecordStoreExceptione){e.printStackTrace();}finally{try{rs.closeRecordStore();//关闭记录集rs=null;}catch(RecordStoreNotOpenExceptione){e.printStackTrace();}catch(RecordStoreExceptione){e.printStackTrace();}}最后再在查询历史状态drawLookupHistory()方法中,将查询历史显示出来if(0==records.size()){//先判断records中是否存在表示记录的元素g.drawString("目前还无历史记录!",10,(gpsClientCanvas.canvasHeight>>2)-10,Graphics.BOTTOM|Graphics.LEFT);}for(inti=0;i<records.size();i++){基于的手机导航系统的设计与实现if(i<10){//绘制查询历史记录g.drawString(records.elementAt(i).toString(),5,(gpsClientCanvas.canvasHeight>>2)+i*21-10,Graphics.BOTTOM|Graphics.LEFT);}}()设置状态()帮助状态提示用户进行操作。由于在低级界面中文本不能自动换行,而帮助界面的绘制是使用实现,需要使用文本自动换行处理方法。该方法的处理过程在此就不作详解。基于的手机导航系统的设计与实现在客户端线程中,系统将在读取数据线程中获取的经纬度数据包装成数Stringurl=":8080/GPS/map";//WEB服务器路径hc=(HttpConnection)Connector.open(url,Connector.READ_WRITE);hc.setRequestMethod(HttpConnection.POST);//设置请求方式dos=newDataOutputStream(hc.openOutputStream());StringBufferstrXML=newStringBuffer();//生成请求XML数据包strXML.append("<?xmlversion=\"1.0\"encoding=\"UTF-8\"?>");strXML.append("<Request>");strXML.append("<commandID>0x01</commandID>");strXML.append("<description>LocationData</description>");strXML.append("<longitude>"+gpsClientCanvas.readGPSDataThread.longitude+"</longitude>");strXML.append("<latitude>"+gpsClientCanvas.readGPSDataThread.latitude+"</latitude>");strXML.append("</Request>");byterequestData[]=strXML.toString().getBytes();dos.write(requestData);dos.flush();//清空数据输出流,迫使所有缓冲的输出字节被写出到流中基于的手机导航系统的设计与实现dis=newDataInputStream(hc.openInputStream());intlength=dis.readInt();mapData=newbyte[length];//mapData为地图数据dis.readFully(mapData);//服务器端传过来的地图数据字节流很长时必须用readFully方法,而read方法只能读取一定数量的字节为选择“建筑视图”时地图显示效果基于的手机导航系统的设计与实现protectedvoidzoomIn(){svgRect_X=svgRect.getX()+svgRect.getWidth()/4;svgRect_Y=svgRect.getY()+svgRect.getHeight()/4;svgRect_Width=svgRect.getWidth()/2;svgRect_Height=svgRect.getHeight()/2;svgRect.setX(svgRect_X);svgRect.setY(svgRect_Y);svgRect.setWidth(svgRect_Width);svgRect.setHeight(svgRect_Height);svgElement.setRectTrait("viewBox",svgRect);}protectedvoidzoomOut(){svgRect_X=svgRect.getX()-svgRect.getWidth()/2;svgRect_Y=svgRect.getY()-svgRect.getHeight()/2;svgRect_Width=svgRect.getWidth()*2;svgRect_Height=svgRect.getHeight()*2;svgRect.setX(svgRect_X);svgRect.setY(svgRect_Y);svgRect.setWidth(svgRect_Width);svgRect.setHeight(svgRect_Height);svgElement.setRectTrait("viewBox",svgRect);基于的手机导航系统的设计与实现}//左移protectedvoidleftMove(){svgRect_X=svgRect.getX()-40;svgRect.setX(svgRect_X);svgElement.setRectTrait("viewBox",svgRect);}//右移protectedvoidrightMove(){svgRect_X=svgRect.getX()+40;svgRect.setX(svgRect_X);svgElement.setRectTrait("viewBox",svgRect);}//上移protectedvoidupMove(){svgRect_Y=svgRect.getY()-40;svgRect.setY(svgRect_Y);svgElement.setRectTrait("viewBox",svgRect);}//下移protectedvoiddownMove(){svgRect_Y=svgRect.getY()+40;svgRect.setY(svgRect_Y);svgElement.setRectTrait("viewBox",svgRect);}地图视图设置是通过设置地图图片各图层的显示隐藏属性来达到各种视图方式,switch(menuIndex){//判断选择的菜单case0://选择混合视图do{if(layer.getLocalName().equals("g")&&layer.getId().equals("building")){//将building图层可视性设置为visiblelayer.setTrait("visibility","visible");}if(layer.getLocalName().equals("g")&&layer.getId().equals("road")){//将road图层可视性设置为visiblelayer.setTrait("visibility","visible");}layer=(SVGElement)layer.getNextElementSibling();}while(layer!=null);基于的手机导航系统的设计与实现break;case1://选择建筑视图do{if(layer.getLocalName().equals("g")&&layer.getId().equals("building")){//将building图层可视性设置为visiblelayer.setTrait("visibility","visible");}if(layer.getLocalName().equals("g")&&layer.getId().equals("road")){//将road图层可视性设置为hiddenlayer.setTrait("visibility","hidden");}layer=(SVGElement)layer.getNextElementSibling();}while(layer!=null);break;case2://选择交通视图do{if(layer.getLocalName().equals("g")&&layer.getId().equals("building")){//将building图层可视性设置为hiddenlayer.setTrait("visibility","hidden");}if(layer.getLocalName().equals("g")&&layer.getId().equals("road")){//将road图层可视性设置为visiblelayer.setTrait("visibility","visible");}layer=(SVGElement)layer.getNextElementSibling();}while(layer!=null);break;}}系统首先同蓝牙信号接收器通信接收导航数据,然后根据接收到的导航数据进行基于的手机导航系统的设计与实现//重置ViewBox属性达到重定中心的目的svgRect_X=(float)(svgRect_Base_X-(latitude-(lat2+lat1)/2.0)*viewBoxHeight/(lat2-lat1));svgRect_Y=(float)(svgRect_Base_Y-(longitude-(long2+long1)/2.0)*viewBoxWidth/(long2-long1));svgRect.setX(svgRect_X);svgRect.setY(svgRect_Y);svgElement.setRectTrait("viewBox",svgRect);//高亮显示当前位置center_X=(float)((longitude-long1)/(long2-long1)*viewBoxHeight+svgRect_Base_Y);center_Y=(float)((latitude-lat1)/(lat2-lat1)*viewBoxWidth+svgRect_Base_X);if(element!=null){svg.removeChild(element);element=null;}SVGElementlayer=(SVGElement)svgElement.getFirstElementChild();Stringnamespace=svg.getNamespaceURI();element=(SVGElement)document.createElementNS(namespace,"circle");SVGRGBColorfillColor=svg.createSVGRGBColor(255,0,255);element.setFloatTrait("cx",center_X);element.setFloatTrait("cy",center_Y);element.setFloatTrait("r",16.0f);element.setFloatTrait("fill-opacity",0.5f);element.setRGBColorTrait("fill",fillColor);if(layer.getId().equals("base")){基于的手机导航系统的设计与实现svg.appendChild(element);}询服务实现系统首先得到所输入的建筑物信息,然后解析文档,逐一比较,当找到时,进行从文档中查找信息并重定中心将查找到的建筑物放在屏幕中央位置的关键代码如do{if(!layer.getId().equals("base")&&!layer.getId().equals("road")&&layer.getTrait("visibility").equals("visible")){//仅在building图层中查找,免得资源消耗太大,有利于移动设备有限的资源textElement=(SVGElement)layer.getFirstElementChild();do{if(content.equals(textElement.getTrait("#text"))){sign=true;textColor=gpsClientCanvas.map.svg.createSVGRGBColor(255,0,0);textElement.setRGBColorTrait("stroke",textColor);gpsClientCanvas.map.setCenter(textElement.getMatrixTrait("transform")基于的手机导航系统的设计与实现.getComponent(4),textElement.getMatrixTrait("transform").getComponent(5));break;}textElement=(SVGElement)textElement.getNextElementSibling();}while(textElement!=null);}layer=(SVGElement)layer.getNextElementSibling();}while(layer!=null);protectedvoidsetCenter(floatmatrix_X,floatmatrix_Y){floatviewBoxWidth=svgRect.getWidth();//ViewBox宽度floatviewBoxHeight=svgRect.getHeight();//ViewBox高度//重置ViewBox属性达到重定中心的目的svgRect_X=(float)(matrix_X-viewBoxWi
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 内蒙古呼和浩特市2026届九年级下学期第一次模拟考试历史试卷(含答案)
- 湖南省郴州市重点校联考2025-2026学年高二下学期4月阶段检测历史试卷(含答案)
- 2026安徽芜湖市无为市中医医院招聘周转池编制专业技术人员6人备考题库及答案详解(易错题)
- 2026四川凉山州金阳县特聘农技员招募8人备考题库附答案详解(a卷)
- 2026江西吉安市吉安县文化馆招聘派遣工作人员1人备考题库含答案详解(a卷)
- 2026湖北教师招聘统考随州市曾都区招聘140人备考题库及答案详解(新)
- 2026年上半年四川雅安中学考核招聘教师2人备考题库附答案详解(满分必刷)
- 2026浙江温州市乐清市人力资源和社会保障局招聘协管员1人备考题库及答案详解参考
- 2026江苏建筑职业技术大学招聘专职辅导员备考题库及答案详解(各地真题)
- 医院病房视觉舒适性提升方案
- 会计研究方法论 第4版 课件全套 吴溪 第1-20章 导论- 中国会计学术研究成果的国际发表
- 智慧树知到《形势与政策(北京大学)》2025春期末答案
- 2025冠心病流行病学调查报告:区域差异与挑战
- DB22-T 389.4-2025 用水定额 第4部分:居民生活
- 曲妥珠单抗心脏毒性的管理
- 贵州中医药大学时珍学院《C#程序语言设计》2023-2024学年第一学期期末试卷
- 法院委托评估价格异议申请书
- 卫生事业管理学:第十一章 社会健康资源管理
- 电工二级技师试题及答案
- DL-T5706-2014火力发电工程施工组织设计导则
- 杆上变压器安装施工方案
评论
0/150
提交评论