MUI app 百度地图定时推送(获取)经纬度到服务器

这两天因为项目需要,需要在mui开发的app上定时推送实时经纬度到后台服务器保存,然后web端通过传输的经纬度和一些数据,来绘制轨迹和掌握实时位置,中途遇到过很多坑(),这里直接将解决方案记录下来:

思路:首先服务器后台使用websocket与app前台保持长连接,然后服务器后台写个定时器,每5秒向前台推送一个消息,app前台收到消息后执行“获取当前经纬度”的代码,然后使用ajax向后台数据库中插入当前的经纬度。

:之前一直想通过前台使用jquery的 setInterval()/setTimeout() 方法来实现循环执行“获取当前经纬度代码”,但是发现总是执行一会儿就挂了(停止了),最后看到群里朋友说用while试试,导致app直接白屏,因为前台js引擎是单线程的,当js引擎在运行的时候,事件监听引擎和页面渲染引擎是停止工作的。又看到 web workers,想想好像挺麻烦,就暂时没考虑了。

下面贴出前台获取经纬度的代码:

*前提需要引入百度地图给的api接口,相信大家都知道(ak要写自己的哦!):

<script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=xxx"></script>
/*获取当前经纬度,给后台推送经纬度,currentLon:经度,currentLat:纬度,pointArr存放经纬度的数组*/
var currentLon = null, currentLat = null, pointArr = []; 

//获取当前位置
function Geolocation(){
    plus.geolocation.getCurrentPosition(getPoint,function(e){
        //mui.toast("异常:" + e.message);
    },{enableHighAccuracy:true,maximumAge:0});
}
function getPoint(position){
	pointArr = [];
    pointArr.push(new BMap.Point(position.coords.longitude,position.coords.latitude));
    var convertor = new BMap.Convertor();
    convertor.translate(pointArr, 3, 5, translateCallback);这里会自动调用百度那边的webserver接口,对gps获取的经纬度进行转换(为什么转换,百度一下,你就知道!)
}

//坐标转换完之后的回调函数
translateCallback = function (data){
	tuiJwd(data.points[0].lng,data.points[0].lat);//将转换后的经纬度推到后台,推送经纬度到后台的代码就没必要贴了吧,呵呵。
}

大功告成,只要服务器不关,app打开能持续不间断地推送经纬度了,完美,如果大家遇到有问题,欢迎一起交流!


85 Clicks !

发表评论

电子邮件地址不会被公开。 必填项已用*标注