余尤骋
(南京林业大学 人文社会科学学院,南京 210037)
当前,旅游已经成为我国普通民众重要的休闲娱乐方式之一,同时,随着计算机技术和移动通讯技术的发展,智能手机已经和工作、生活的各个方面相融合,成为不可缺少的必需品。在此种情况下,传统的旅游模式不能满足游客的需求,他们对旅游信息化的期望水平更高,既希望通过智能手机平台实现自助旅游,自助游览景区[1],同时通过电子地图确定自己所在的位置,防止走失或者迷糊,自由组合旅游路线。
近年来,地图导航定位系统已经比较成熟,应用也越来越广泛,如谷歌的 Google Map、百度地图等,极大的促进了基于地理位置服务的发展,尤其是Android 开源移动开发平台的发展,国内很多学者开始基于手机平台开发各种旅游应用系统,如基于云平台的手机导游系统、海南自助游导航系统[2]、景区移动终端服务平台[3]等,这些研究的应用满足了游客对于自助旅游的信息化需求,但是自助旅游系统的功能和性能还有很高的进步发展空间。
本系统在Android手机操作平台上开发的一种旅游软件,用户安装该软件系统之后,先进行注册,然后再进行登录,选择相应的功能模块,比如景点位置的查询、景点天气的查询等等,本系统的整体流程,如图1所示。
由图1可知,自助旅游系统主要由客户端和服务器两部分组成,客户端展示给用户,实现和用户的交互,服务器则是对用户的数据进行整理,它们之间进行的主要操作是数据交换。
图1 系统整体流程
结合系统的基本功能需求,在设计过程中将系统分成3个功能模块,如图2所示。
图2 系统功能需求图
3个功能模块分别为会员模块、功能模块、后台模块,设计的自助旅游客户端是最终呈现给用户的界面,负责系统与用户的交互,同时系统的各项功能都是通过该层向用户展示的,用户通过选择不同的选项来请求服务,可以提供给用户登录注册、路径规划、路径导航、实时定位、紧急救援、即时聊天、景点查询、天气查询、景点讲解、汽车票预订、火车票预订、飞机票预订。后台管理模块是整个系统的核心,由服务器模块、数据处理模块两个子模块组成,服务器模块包括百度地图数据库服务器、Web服务器、业务服务器。数据获取模块主要是数据处理模块对获取的信息进行处理,如实时定位;从百度热力地图获取景点周边的天气情况,方便为出游做出安排,导航出行等;后台处理通过用户界面Internet启动或通过对话框进行搜索和查询。数据存储器包含了对文件和SD存储卡的访问,也封装了所有对SQLite数据库操作的方法,用户界面和后台处理会调用它来实现数据库操作。
为了便于系统后期的扩展和维护,采用HTTP(Hyper Text Transfer Protocol)超文本传输协议实现手机客户端与Web服务器、数据库服务器之间的网络连接,手机客户端只存储少量的数据,大部分数据来自于后台服务器,可以在没有网络的情况下实现离线导航,手机Android客户端使用SQLite数据库保存数据。SQLite数据库是一种轻量级数据库,占用空间非常少,运行高效可靠,可移植性好,并且提供零配置运行模式。每个应用程序的SQLite数据被保存在各自的/data/data/
图3 手机终端开发项目列表
Android客户端在设计过程中十分重视用户体验,只将Andorid系统需要的状态栏和操作栏保留在客户端主界面,其他位置全部被地图空间占据,使游客需要的信息能够大部分在地图上展示,提高了软件的使用效果,使其操作更加流畅,客户端的菜单采用弹出式,只有点击菜单或者是在边缘滑动按钮时才会显示出来。本研究仅以地图加载实现和路径规划与导航两个功能模块的开发进行简要概述,具体如下。
3.1.1 地图加载实现
通过解析Android Manifest.xml文件可知,可以将一个Android项目当做一个Application对象。系统设计过程中使用设计模式中的单例设计重写了Application类,这样可以确保系统一个类和一个实例相对应,且该实例易于外界访问,降低了实例个数控制的难度并节约了系统资源。系统在进行地图加载时,需要首先验证地图功能是否授权,即是否匹配Baidu API key正确,而这个对象只需要实例化一个即可,因此设计过程中使用单例设计模式,要求只存在一个该Application类的对象。具体实现步骤如下:
(1)首先对一个静态的类图像进行定义:private static MyApplication mInstance=null;
(2)再通过定义一个静态类让其只能实例化一个自身对象并返回:public static My Application getInstance(){return mInstance;};
(3)创建单例设计模式之后,在每个界面只需要如下代码就可以完成百度开发身份授权的验证及加载:
3.1.2 路径规划与导航
路径规划与导航主要是满足游客自助旅游出行过程中的线路规划,百度地图导航SDK的代码Jar包具有路径规划和导航、自定义图层和语音播报等功能[4],它由Java源代码编译打包而成,资源Jar包由导航需要的基础数据、配置数据及导航功能设计的布局、字符串等资源打包形成,路径导航和规划SDK代码包实现具体如下:
(1)创建一个 Activity及一个Activity的子类,在子类中,采用onCreate()实现系统回调,On Get Route Plan Result Listener和On Map Click Listener接口。
(2)获取游客自助游过程中输入的地址信息,并将地图控件初始化。
(3)创建一个Route Plan Search对象,添加设置路线检索监听者(set On Get Route Plan Result Listener(On Get Route Plan Result Listener))。
(4)游客规划路径方式之后(公交、步行或自驾),向Route Plan Search实例设置并添加出行方式,待路径规划成功之后,通过route.Get All Step()获得Object对象数据,并根据选择的出行方式判断Object对象的类型,根据判断的类型获得百度地图提供的出行路线。
(5)导航(部分代码)
服务器端包括地图服务器和业务服务器,地图服务器为百度地图数据库服务器,发布相关的地图信息数据。业务服务器使用Spring、Struts、Hibernate框架调用百度数据库提供的函数进行空间关系判断,并将执行的结果返回到手机Android客户端。
手机Android客户端与服务器之间的交互是该系统实现的重要基础,系统中旅游信息的查询、地图导航等关键的应用都需要通过手机Android客户端与服务器之间的交互来实现。交互过程中需要的数据格式可以选择JSON、XML、普通表单数据等。使用普通表单数据容易出错,不能复用。XML文本传输数据和JSON格式相比数据量要多,因此本系统的交互数据格式选择JSON。JSON数据格式是一种JavaScript表示数据对象的文本格式。客户端发送信息时的JSON字符串作为HTTP请求的data参数的值,服务器端的处理程序对相关的请求进行解析,获得data中的JSON字符串,利用C#的JSON库方法对客户端的请求进行解析,再调用业务逻辑层的相应方法获得数据,以JSON数据格式封装之后将结果传回客户端。客户端接收服务器回传的JSON数据,解析之后显示在界面。
系统设计完成之后,需要经过前期的基础测试才会在小范围内部署和应用,通过测试可知,手机Android客户端可以访问后台服务器中的数据,完成了上述系统基本功能的设计,并且系统运行稳定,输入相关的景点名称可以实现路径规划与导航,显示天气情况等。系统应用过程中的地图定位,如图4所示。
图4 地图定位
本文设计的基于Android系统和百度地图的自助旅游导航系统基本上可以满足游客出行,打造了专属的旅游软件,通过景点查询可以快速了解景点的具体情况,在出行过程中还可以快速实现路径的规划和导航,同时还有酒店和票务模块,为出行的规划提供了便利。同时系统的后台运行良好,在下一步的计划中,将进一步完善游客出行的需求调研,使自助旅游系统的功能更加完善,提高其实用性。