项目总结一:基于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)并且地图的缩放级别没有发生变化,就不去请求服务器,第二种判断就解决了晃动一下手机或者点击一下地图带来的频繁请求服务器的问题。


未完待续




阅读更多
个人分类: android开发
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭