由于GPS全球定位系统的发展,大部分的快递系统都使用了GPS以便于及时得知当前运送货品以及车辆的位置,并在地图上以直观的形式展示出来。具备这样功能的快递系统在市场中更具有竞争力。刚好公司的一个项目中使用到了类似这部分的功能,领导把这个任务指派给了我,并限定5个工作日把这个事情搞定,5个工作日并非是完全的八个小时都能在这个上面工作。关于公司其他软件的问题,大部分都需要我关注,在这样的境况下,设计的质量和程序的质量都需要打一些折扣,因此如果下面都考虑不当的部分,请各位同仁指正。
       程序中使用的地图是静态的,经由电子地图录屏得到,客户的要求是能够展示,这个是前提,因此决定了程序的精确程度这么低就可以满足。在地图上需要画出一个车辆从一个城市出发,经过一系列的线路到达另外的城市,同时也需要经过铁路,航空,海运这些线路。在图片上以动画的形式描述运输过程,考虑到任何一个线路中都会有许多点,这些点决定了整个线路,以动画的形式展示运输过程需要根据两点之间的连线作为线路,那么如何得到这些点的坐标就成了解决问题的重点。根据以上考虑,需要开发一个小的软件以辅助得到这些点。这个软件的功能需要包括:在不同的图片之间进行切换,在图片上描点并串成线,对图片上的点的位置进行调整,为线路命名,保存线路,加载线路,根据图片查询关于这个图片的所有线路等。存储的点仅对于这个程序有效,数据量也不大,因此使用XML存储是比较便捷的。下面介绍详细的设计。
       基于以上的分析,可以根据GRASP法则设计类,给类非配职责,设计XML的结构。这个问题的核心是线路,因此需要设计一个代表线路的类,命名为Route,Route应该能记录线路的唯一标识id,以便于根据线路的id得到线路的所有信息,线路的名称name,线路使用的地图的名称imageName,该线路上使用的交通工具vehicle(火车,货车或者飞机),以及该线路上所有的点的集合stones,使用的地图的名称为图片的名称,程序在指定的位置获取gif或者jpg图片供使用时选择,vehicle也是同样的道理。
Route(1)
线路上的所有的点需要使用一个类来描述,命名为Stone,该类需要记录点的x坐标和y坐标,该点的ID,ID在该条线路上必须唯一,点的名子,代表城市的名字,或者某个地点的名字,该点的描述,该点的其他信息。Stone类在每次画图的时候都需要进行重画,因此需要在Stone类中设计该节点应该如何在图上展示,其中的PaintElement方法用来实现这个功能,其中的第二个参数是用来决定是否画被选中状态的边框。如果当前的节点被选中,那么需要在圆点的周围画一个边框。
Stone(2)
存储和获取所有线路需要一个类,命名为RoutesAdapter,其职责是向XML写入所有的线路,从xml中加载所有的线路,暂存所有的线路,根据线路的id获取对应的线路,根据图片的名称获取该图片上对应的所有线路。剩下的工作就要交给UI来处理了下面介绍UI的设计。
RouteAdapter(3)
       使用javaxSwing相关的类进行处理需要进行详细的规划,可以借助于JBuilder等可视化的图形工具来辅助生成相应的代码,由于作者喜欢完全控制所有的类,因此没有使用工具辅助生成,而是自己设计了类组合关系。首先需要一个JFrame来显示整个应用程序,在应用程序的顶部使用一个工具条,他属于JPanel的子类,在下面的地方使用一个JScrollPane包含一个JPanel的子类,命名为工作区WorkArea,在工作区中保存了显示该工作区的相关信息,如下图所示,在顶部的工具栏中有下拉框,选择下拉框中的图片可以切换图片,并更新相应的线路下来框,选中一个线路可以在图上画出线路所有的线路。点击画图按钮可以在图上描点,点击调整按钮可以在图片上拖动以改变点的位置,暂存按钮把图片上的点以及工具栏上的信息保存为一个Route,存放在缓存中,同时更新线路下拉框并清除图上的所有点。点击保存按钮可以把所有的线路保存在XML中。图中节点的信息通过在节点上点击右键,弹出的模式对话框中进行设置,
使用界面(4)
属性对话框图片。(5)
使用的情形可以描述为,如果某一个订单在一个车中,订单的路线为A-B-C-D-E,终点为E,B,C,D为经过的路线,通过GPS定位系统得知当前的货车已经到达D点,便可以在图上标识出A-B-C-D的路线为绿色,剩余的路线为红色,这样便达到了直观的效果。如图所示
便可以达到目的。
如果需要小车在线路上跑,则需要一个线程,每经过一段时间进行一次刷新,同时在图中的线路上画出车的位置。需要详细了解程序请看源代码。源代码下载之后需要设置JDK1.5以上,双击start直接启动程序。如果有需要帮助请直接联系我。
作者简介:凌辉 北京******发展有限公司  软件开发部 项目经理,数据库方向研究生学历,设计开发过多个J2EE应用程序,有丰富的软件开发、管理、测试经验,擅长网站应用程序开发,在设计模式,软件重构,版本控制,软件保护,数据库设计与管理等方面都有独特的见解。
联系方式:QQ21731278 msn[email]lili00okok123@hotmail.com[/email]