基于Android平台的智能停车系统
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于Android平台的智能停车系统
最近在做一个基于物联网的技术的智能停车平台,Android端+pc端,手机端是Android开发的一套+高德地图SDK+高德导航SDK,pc端是
Linux+Django+Mysql+Apache+(Html、Css+Div),今天想记录一下实
时获取停车场车位数据以及在地图上为停车场添加注标。
目前项目面向的用户是兰州市的用户,整个兰州市的停车场也就是差不多有
200多个,数据量不大,需要在地图上为兰州市的所有停车场都加上标注,并
且标注分为三种:当前有空闲车位的停车场标注为绿色,没有车位的停车场标
注为红色,没有联网的停车场标注为蓝色。
第一种做法:
轮询请求服务器,每次请求都把兰州市所有停车场的信息:经纬度、编号、名字、总车位、剩余车位请求下来,然后根据每个停车场当时的联网状况以及剩
余车位状况在地图上添加标注。
这种做法很粗暴,很省事,但是可用性太差,非常消耗手机资源(电能、数据
流量、内存),如果停车场数据暴增,将会出现客户端卡死现象。这种做法立
马就被淘汰了。
第二种做法:
打开App,进入地图界面,获取当前地图可视区域的中心点位置的经纬度,获取当前地图的缩放级别,然后把当前经度longitude、纬度latitude、半径radius(这个半径是根据当前地图的缩放级别来给出的,比如地图的缩放级别
是15,就把radius的值设为2000米,当然需要根据具体情况来确定)post
给服务器,服务器根据传过来的三个参数,计算以当前经纬度为圆心,以radius为半径的圆中包含那些停车场,然后把在范围之内的停车场数据返回给客户端。
每当地图的可视区域发生变化时,就去当前重新获取可视区域中心点的经纬度,并根据缩放级别设置radius大小(缩放级别越大,radius应越小),然后
post参数给服务器,获取在范围内的停车场数据,然后进行显示。
经过实验,第二种做法明显比第一种做法合理的多,当然第二种做法也并不像
想象中的那么简单易做,以为给地图加上可视区域发生变化的监听后,每次用
手去触碰一下地图,就会触发可视区域发生变化的回调函数,这样即便我的手
机旋转一下,都会不断的去触发可视区域发生变化的回调函数,每触发回调函
数,就会发生请求服务器的操作,这样明显是不合理的,所以我就认为判断了一下,当触发可视区域发生变化的回调函数时,首先去判断地图的缩放级别有没有发生变化,如果发生变化,就必须执行请求服务器的操作。再判断,如果当前可是区域中心的经纬度没有发生变化或者变化极小(变化的绝对值不超过0.00005)并且地图的缩放级别没有发生变化,就不去请求服务器,第二种判断就解决了晃动一下手机或者点击一下地图带来的频繁请求服务器的问题。