• phonegap+百度地图导航(JS版)


    使用phonegap+angularjs+ionic实现移动端的百度地图JS版定位导航,可能会比较卡,仅供参考。

    首先需要为你的phonegap项目加一个Gelolcation的插件,大概的步骤就是:使用dos命令进入到你的phonegap项目目录,然后输入以下命令:

    cordova plugin add cordova-plugin-geolocation

    看到提示安装成功就可以了。

    接下来去要去百度地图API网站申请一个key,第一个JS引用会需要用到这个key。下面是需要引用的百度地图JS:

    <script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=你的KEY"></script>
    <script type="text/javascript" src="http://developer.baidu.com/map/jsdemo/demo/convertor.js"></script>

    HTML的代码

    <div id="allmap" style="height: 400px;100%; margin-top: 0px"></div>

    这里是该页面控制器的代码:

    var endPoint={lon:"119.716005",lat:"30.642725"},    //终点坐标
        bm = new BMap.Map("allmap"),
        watchID;    //用来存放持续追踪的监视Id
    
    //地图初始化
    bm.centerAndZoom(new BMap.Point(endPoint.lon,endPoint.lat), 13);
    bm.addControl(new BMap.NavigationControl());
    
    //把真实坐标转换成百度坐标
    function translateCallback(point){
        var myP1 = new BMap.Point(point.lng,point.lat);    //起点
        var myP2 = new BMap.Point(endPoint.lon,endPoint.lat);    //终点
        var driving2 = new BMap.DrivingRoute(bm, {renderOptions:{map: bm, autoViewport: true}});    //路线实例
        driving2.search(myP1, myP2);    //显示一条线路
    }
    
    //检测设备是否支持定位功能
    if(window.navigator.geolocation){
        var geolocation=window.navigator.geolocation;
    
        //每一次位置的变化,就获取一次设备的位置,都会执行getPositionSuccess回调函数
        watchID= geolocation.watchPosition(getPositionSuccess,getPositionError);
    }else{
        $rootScope.showAlert("您的应用程序不支持地理位置定位")
    }
    
    //终止watchPosition持续追踪的方法
    function stopWatch(){
        if(watchID){
            //调用clearWatch方法终止持续追踪
            window.navigator.geolocation.clearWatch(watchID);
            watchID=null;
        }
    }
    
    //注册destroy事件,离开此页面时触发
    $scope.$on("$destroy",stopWatch);
    
    //获取用户位置信息成功调用的方法
    function getPositionSuccess(position){
        var lon=position.coords.longitude;  //读取经度
        var lat=position.coords.latitude;   //读取纬度
        console.log(123);
        //设置起点坐标
        var gpsPoint = new BMap.Point(lon,lat);  //119.69138,30.655101
        BMap.Convertor.translate(gpsPoint,0,translateCallback);//终点
    }
    
    //获取用户位置信息失败调用的方法
    function getPositionError(err){
        console.log(err);
        switch(err){
            case PositionError.TIMEOUT:
                $rootScope.showAlert("连接超时,请重试");
                break;
            case PositionError.PERMISSION_DENIED:
                $rootScope.showAlert("您拒接了使用位置共享服务");
                break;
            case PositionError.POSITION_UNAVAILABLE:
                $rootScope.showAlert("无法提供位置服务");
                break;
        }
    }

     起点就是设备的位置,里面问题是真实经纬度需要使用

    BMap.Convertor.translate();

    转换成百度地图的经纬度,否则地图上显示的位置会不准确。

  • 相关阅读:
    函数 free 的原型
    malloc 返回值的类型是 void *
    malloc 函数本身并不识别要申请的内存是什么类型
    用 free 或 delete 释放了内存之后,立即将指针设置为 NULL,防止产 生“野指针”
    动态内存的申请与释放必须配对,防止内存泄漏
    避免数组或指针的下标越界,特别要当心发生“多 1”或者“少 1” 操作
    不要忘记为数组和动态内存赋初值
    用 malloc 或 new 申请内存之后,应该立即检查指针值是否为 NULL
    释放了内存却继续使用它
    忘记了释放内存,造成内存泄露
  • 原文地址:https://www.cnblogs.com/yuzuoxiang/p/5053998.html
Copyright © 2020-2023  润新知