前一个星期公司要求完成车载系统的实时定位功能,并在web页面显示,其实只是从数据库获取GPS坐标,然后在百度地图上画出来而已,在此记录以下。

准备工作:

准备Map工具类

var Util = window.Util || {};

/**
 * 数据库的格式 12121.212   ddmmm.mm
 * 处理经纬度信息121.21212 dd.mm.mmm  转化为 dd.dddddd
 * 如果是 -300 非法值,则直接返回原值.
 */
Util.formatSBYCoords = function(lnglat) {if (lnglat === -300) {return lnglat;}var l = lnglat  ;
    var lq = parseInt(l/100) ;
    var lqq = (l-lq*100)/60 ;
    var lqqq = lq +lqq ;
    return lqqq ;
}/**
 * 真实的GPS坐标转换成百度的坐标.
 * @param lng GPS 经度
 * @param lat GPS 纬度
 * @param callback 转换成功后执行的回调函数,如果成功时返回的对象里面 x  代表经度  y 代表纬度.
 */
Util.transferGPS2BD = function(lng, lat, callback) {var callbackName = 'cbk_' + Math.round(Math.random() * 10000);
    var arr = lng + ',' + lat;
    var PositionUrl = "http://api.map.baidu.com/geoconv/v1/?coords="+arr+"&from=1&to=5&ak=gxB9Y6SdvED78vddAYI3psLH&callback=BMap." + callbackName;
    var script = document.createElement('script');
    script.src = PositionUrl;
    document.getElementsByTagName("head")[0].appendChild(script);
    BMap[callbackName] = function(xyResult) {delete BMap[callbackName];    //调用完需要删除改函数
        //var point = new BMap.Point(xyResult.x, xyResult.y);

        //console.log('callback', xyResult);
        callback && callback(xyResult);
    }
}/**
 * 根据GPS坐标转换成实际的地址。
 * @param lng GPS 经度
 * @param lat GPS 纬度
 * @param callback 回调函数
 */
Util.getAddress = function(lng, lat, callback) {var callbackName = 'cbk_' + Math.round(Math.random() * 10000);
    var arr = lat + ',' + lng;
    var PositionUrl = "http://api.map.baidu.com/geocoder/v2/?ak=gxB9Y6SdvED78vddAYI3psLH&callback=BMap." + callbackName + "&location=" + arr + "&coordtype=wgs84ll&output=json&pois=0";
    var script = document.createElement('script');
    script.src = PositionUrl;
    document.getElementsByTagName("head")[0].appendChild(script);
    BMap[callbackName] = function(xyResult) {delete BMap[callbackName];    //调用完需要删除改函数
        //var point = new BMap.Point(xyResult.x, xyResult.y);

        //console.log('callback', xyResult);
        callback && callback(xyResult);
    }
}

执行:

1.初始化地图

CarRealMap.prototype.initMap = function () {var map = new BMap.Map("allmap");
    map.centerAndZoom(new BMap.Point(120.21339, 30.247387), 15);
    map.addControl(new BMap.MapTypeControl());
    map.addControl(new BMap.NavigationControl());
    map.addControl(new BMap.ScaleControl());
    map.addControl(new BMap.OverviewMapControl());
    this.map = map;
}

2.获取用户查看车辆的信息,判断该车是否在工作(出车),未出车显示Lab提示,出车则画出车辆并显示数据的Lab

CarRealMap.prototype.getData = function () {var self = this;
    UtilHelper.ajax(UtilHelper.getMapData(), 'GET', {"refId":$('#refId').val()}, function(result){if(result.runStatus == undefined || result.runStatus == 1){var point = new BMap.Point(120.21339, 30.247387);
            self.map.centerAndZoom(point, 12);
            var opts = {position : point,    // 指定文本标注所在的地理位置
                offset   : new BMap.Size(0, 0)    //设置文本偏移量
            }var carName = "";
            if(result.name != undefined){carName = "(" + result.name + ")";
            }var label = new BMap.Label("当前车辆" + carName + "未使用", opts);
            label.setStyle({color : "red",
                fontSize : "20px",
                height : "20px",
                lineHeight : "20px",
                fontFamily:"微软雅黑"
            });
            self.map.addOverlay(label);

        }else{Util.transferGPS2BD(Util.formatSBYCoords(result.longitude), Util.formatSBYCoords(result.latitude), function(data){if(data.status === 0){var point = new BMap.Point(data.result[0].x, data.result[0].y);
                    self.drawCar(point, result);
                    self.drawTraveLine(point, result);
                }});
        }});
}

2.1 画出车辆方法:

CarRealMap.prototype.drawCar = function (point, realdata) {var self = this;

    var myIcon = new BMap.Icon("http://7xji3q.com1.z0.glb.clouddn.com/car.jpg",
        new BMap.Size(54, 23), {anchor: new BMap.Size(7, 25)});

    if(!self.carMarker){var marker = new BMap.Marker(point, {icon: myIcon});

        marker.setLabel(self.drawMakerLabel(realdata));
        self.carMarker = marker;
        self.map.addOverlay(marker);
    }else{self.carMarker.setLabel(self.drawMakerLabel(realdata));
        self.carMarker.setPosition(point);
    }self.setCarIcon();
    self.map.panTo(point);

}

2.2 画出车辆轨迹方法:

CarRealMap.prototype.drawTraveLine = function (point, realdata) {if(!this.polyline){var polyline = new BMap.Polyline([point], {strokeColor:"#005890", strokeWeight:6, strokeOpacity:0.9});
        this.polyline = polyline;
        this.map.addOverlay(this.polyline);
    }this.paths.push(point);
    this.polyline.setPath(this.paths);
}

2.3 画出数据lab方法:

CarRealMap.prototype.drawMakerLabel = function (realdata) {var t1 = '--';
    var t2 = '--';
    var t3 = '--';
    var bg_color = '#FFF';
    if (realdata.t1 != -300) {t1 = realdata.t1;}if (realdata.t2 != -300) {t2 = realdata.t2;}if (realdata.t3 != -300) {t3 = realdata.t3;}if (realdata.isAlarm === 0) { bg_color = '#FF0000'}var label = new BMap.Label("车牌: " + realdata.name + "  T1: " + t1 + " ℃  T2: " + t2 + " ℃ <br/> T3: " + t3 + " ℃ ",
        {offset:new BMap.Size(45,-25)});
    label.setStyle({'border-color': '#333', 'font-size': '14px', 'background-color': bg_color,'max-width':'none'});
    return label;
}

2.4 画出车辆小图标方法

CarRealMap.prototype.setCarIcon = function () {var myIcon = new BMap.Icon("http://7xji3q.com1.z0.glb.clouddn.com/car.jpg",
        new BMap.Size(54, 23), { anchor: new BMap.Size(7, 25)});
    this.carMarker.setIcon(myIcon);
}

2.5 执行以上方法并setInterval获取数据

CarRealMap.prototype.init = function () {this.initMap();
    this.paths=[];
    window.setInterval(this.getData.bind(this), 10000);
    this.getData();

}

Web项目中完成百度地图GPS定位相关推荐

  1. ios项目中调用百度地图iphone版与百度地图HDipad版的坑

    最近在写项目的时候发现了项目中调用百度地图的一个坑,iphone版与ipad版的不同. 一.首先百度地图在ipad上叫百度地图HD,要区分有GPS和没GPS版,也就是说没GPS的没有导航功能,在使用项 ...

  2. 前端项目中使用百度地图api,含实例

    前言 一.使用百度地图接口的步骤 二.简单例子 1.第一个地图 2.控件 3.静态/动态添加点圈线面 4.文字标注.信息窗口 5. Web服务API-IP定位服务 6.Web服务API-地点检索服务 ...

  3. AngularJS进阶(十九)在AngularJS应用中集成百度地图实现定位功能

    在AngularJS应用中集成百度地图实现定位功能 注:请点击此处进行充电! 前言 根据项目需求,需要实现手机定位功能,考虑到百度业务的强大能力,遂决定使用百度地图第三方服务. 添加第三方模块的步骤与 ...

  4. AngularJS进阶 十九 在AngularJS应用中集成百度地图实现定位功能

    在AngularJS应用中集成百度地图实现定位功能 注:请点击此处进行充电! 前言 根据项目需求,需要实现手机定位功能,考虑到百度业务的强大能力,遂决定使用百度地图第三方服务. 添加第三方模块的步骤与 ...

  5. Android 百度地图开发(一)--- 申请API Key和在项目中显示百度地图

    2019独角兽企业重金招聘Python工程师标准>>> 最近自己想研究下地图,本来想研究google Map,但是申请API key比较坑爹,于是从百度地图入手,其实他们的用法都差不 ...

  6. react 使用 leaflet 百度地图_【React】react项目中应用百度地图添加起始点绘制路线...

    如图:项目中百度地图的应用添加起始点.终点并绘制路线 在展示代码的时候首先展示一下后台返回给我的接口 { 其中position_list参数代表的是用户的行驶点, area参数代表的是服务区的坐标点, ...

  7. vue项目中 使用百度地图 轨迹动画

    在上篇博客中,介绍了如何在vue项目中集成百度地图,这篇博客主要是说如何在vue项目中使用轨迹动画 在项目开发过程中,比如你需要实时的观察一个人的行走路线,行走过程.  这个时候我们就需要在地图上使用 ...

  8. 百度地图的使用方法,如何在Vue项目中使用百度地图

    关于百度地图的解释 百度地图又称LBS:LocationBussinessServer,是基于定义位置的商业服务,现在常用的地图有百度地图和高德地图居多 官网入口 https://lbsyun.bai ...

  9. 在Fragment中实现百度地图,定位到当前位置(基于SDKv2.1.0)

    使用最新版本的百度地图需要注意的几个地方: 1.libs文件夹下要有android-support-v4.jar.baidumapapi_v2_1_0.jar.locSDK_3.1.jar三个jar包 ...

最新文章

  1. 如何将知识图谱特征学习应用到推荐系统?
  2. 死机、蓝屏、系统运行过慢
  3. LeetCode Super Pow(快速求幂算法)
  4. hdoj3351-stack
  5. Java与Python:哪一种最适合您? [信息图]
  6. HBase-再看HBase
  7. koajs 项目实战(二)
  8. JSK-133 冒泡排序【排序】
  9. C# 压缩PDF图片
  10. 线性调频信号的时频域分析
  11. javascript 分割字符串
  12. 软件测试培训到底值不值得参加?
  13. 74HC595使用方法
  14. centos6 安装 directAdmin
  15. DataGridView绑定null后再次绑定DataSource列标题成英文
  16. 电脑桌面便签怎么修改便签字体颜色?
  17. 字符串分隔StringUtils.delimitedListToStringArray
  18. 叮咚~您的MySQL云备份已上线
  19. 如何恢复已删除的照片
  20. 字节跳动面试真题:Redis为什么快?

热门文章

  1. 看IE9带来的新概念
  2. elementui的使用问题
  3. STM32F4移植EMWIN(RA8875驱动显示屏)
  4. 智慧城市的发展动力、推动因素、负面影响、挑战与应对
  5. Matlab中图文本中的希腊字母和特殊字符
  6. 红米note9 android10,红米note9pro和红米note10pro区别
  7. 小程序输入框字数统计
  8. NPT 时间服务实战
  9. 【离散数学】第一章 命题
  10. solidworks中加入参考图纸图片