百度地图api描绘车辆历史轨迹图

最近公司在做项目需需求:车辆定位后在地图显示历史轨迹的功能

一开始使用了google的地图api,但是发现会一直关闭,索性支持下国产,使用了百度地图api

search方法把两个点连接成线后,会出现起点和终点的图标,但是需要要求只有第一个点和最后一个点是起点和终点,中间的全是小车的图案

我画点的功能是为了覆盖掉 search连线的起始点,但是覆盖后悬浮弹出层会出现问题,所以我就写把存放起点和终点的层去掉,

但是地图渲染时需要时间的,我采取了2秒后执行,把存放起点和终点icon的div清空了,这样我就可以了,

当然,谁要是知道怎么去掉或者替换起点和终点的icon,可以告诉我,这样就可以不用画点了,

就会很简单了,

一下是我项目中的代码,进攻参考,

一下位简要代码:

//初始化地图
function initMap(){
map = new BMap.Map("allmap");// 创建Map实例
//根据登录人单位定位地图中心
var belongOrgName = $().getUser()["belongOrgName"];
//point = new BMap.Point(114.928715, 27.418907); // 创建点坐标
map.centerAndZoom(belongOrgName,8);// 初始化地图,设置中心点坐标和地图级别。
map.enableScrollWheelZoom();//启用滚轮放大缩小
map.addControl(new BMap.NavigationControl()); // 添加平移缩放控件
  map.addControl(new BMap.ScaleControl()); // 添加比例尺控件

map.addControl(new BMap.OverviewMapControl()); //添加缩略地图控件
 
}

下面-----线内代码是画图和点的代码,

data 是我通过ajax获得的后台封装的json数据,具体的每个只代表:

/*0 = id
1 = 单位id
2 = 设备编码
3 = 纬度
4 = 经度
5 = 纬度半球
6 = 经度半球
7 = 地面速度
8 = 地面航向
9 = 磁偏角
10 = 磁偏角方向
11 = 湿度
12 = 温度
13 = 采集时间
14 = 数据状态 
15 = 定位时间str
16 = 车名
17 = 车型
18 = 车牌号
19 = 单位名称

------------------------------------------------------

$.ajax({
url:url,
type:"POST",
async:false,
dataType:"json",
data:{deviceId:deviceId,orientationTimeStart:orientationTimeStart,orientationTimeEnd:orientationTimeEnd},
success:function(data){
if(data!=null){
//遍历车辆轨迹集合,一个个画点 画线
for ( var i = 0; i < data.length; i++) {
var s = data[i].split(",");
var snext;
if(i==data.length-1){
snext = null;
}else{
snext = data[i+1].split(",");
}

//画点
var sContent =
"<div class=‘city_BG‘ style=‘background-image: url("+$().getParam(‘stylePath‘)+name[3]+");font-size:12px;‘>" +
"<table style=‘magin-top:10px;magin-left:10px;height: 100%;width: 100%;‘>" +
"<tr>" +
"<td style=‘width:60px;‘ align=‘right‘>车型:"+s[17]+"</td>" +
"<td style=‘width:80px;text-align: center;‘ align=‘right‘>温度:"+s[11]+"℃"+"</td>" +
"</tr>" +
"<tr>" +
"<td style=‘width:60px;‘ align=‘right‘>车牌号:"+s[18]+"</td>" +
"<td style=‘width:80px;text-align: center;‘ align=‘right‘>湿度:"+s[12]+"%"+"</td>" +
"</tr>" +
"<tr>" +
"<td style=‘width:60px;‘ align=‘right‘ colspan=‘2‘>采集时间:"+s[13].substring(0,19)+"</td>" +
"</tr>" +
"<tr>" +
"<td style=‘width:60px;‘ align=‘right‘ colspan=‘2‘>定位时间:"+s[15]+"</td>" +
"</tr>" +
"</table>" +
"</div>";
var colorStr = "";
if("1"==s[14]){
colorStr = "green";
}
if("2"==s[14]){
colorStr = "red";
}
if("3"==s[14]){
colorStr = "yellow";
}
var marker = new ComplexCustomOverlayCar(new BMap.Point(s[3], s[4]), "",sContent,colorStr,s[19],s[20],s[21]);
map.addOverlay(marker);

//画线
if(snext != null){
var driving = new BMap.DrivingRoute(map, {renderOptions:{map: map, autoViewport: true}});
driving.search(new BMap.Point(s[3], s[4]), new BMap.Point(snext[3], snext[4]));
}
}
//重新设置开始点位地图中心,不确定是否好使
//map.centerAndZoom(new BMap.Point(data[0].split(",")[3], data[0].split(",")[4]),12);
}
}
});

此处 我使用的是同步的ajax,是因为,

//2秒后清除起始点图标,切勿模仿(因为我还没发现换图标的方法)
setTimeout(function(){
$("span.BMap_noprint").parent().remove();
},"2000");

-----------------------------

//添加车辆位置信息
function ComplexCustomOverlayCar(point,text,sContent,color,title,isStart,isEnd){
  this._point = point;
  this._text = text;
  this._sContent=sContent;
  this._color=color;
  this._title=title;
  this._isStart=isStart;
  this._isEnd=isEnd;
}
ComplexCustomOverlayCar.prototype = new BMap.Overlay();
ComplexCustomOverlayCar.prototype.initialize = function(map){
var searchInfoWindowCar = new BMapLib.SearchInfoWindow(map, this._sContent, {
title  : this._title,      //标题

width : 60,             //宽度
height : 115,              //高度
panel : "panel",
background : $().getParam(‘stylePath‘)+‘/resources/imgs/S_div.png‘,
enableAutoPan : true, //自动平移
   searchTypes :[]
});
  this._map = map;
  var div = this._div = document.createElement("div");
  div.style.position = "absolute";
  div.style.zIndex = BMap.Overlay.getZIndex(this._point.lat);
  div.style.cursor="pointer";
  div.appendChild(document.createTextNode(this._text));
  
  if("Y"==this._isStart){//是起点
 if(this._color=="red"){
$(div).addClass("map_car_start_chaowen");
 }else if(this._color=="green"){
  $(div).addClass("map_car_start_zhengchang");
 }
  }
  if("Y"==this._isEnd){//是终点
 if(this._color=="red"){
$(div).addClass("map_car_end_chaowen");
 }else if(this._color=="green"){
  $(div).addClass("map_car_end_zhengchang");
 }
  }
  if("Y"!=this._isStart && "Y"!=this._isEnd){//不是起点不是终点
 if(this._color=="red"){
$(div).addClass("map_car_jinggao");
 }else if(this._color=="green"){
  $(div).addClass("map_car_zhengchang");
 }
  }
  
  var that= this;
  div.onmouseover = function(){
  if(this._color=="red"){
      $(div).addClass("map_car_jinggao");
      }else if(this._color=="yellow"){
      $(div).addClass("map_car_chaoshi");
      }else if(this._color=="green"){
      $(div).addClass("map_car_zhengchang");
      }
  //打开悬浮曾
  searchInfoWindowCar.open(new BMap.Marker(that._point));
  };
  div.onmouseout = function(){
  if(this._color=="red"){
      $(div).removeClass("map_car_jinggao");
      }else if(this._color=="yellow"){
      $(div).removeClass("map_car_chaoshi");
      }else if(this._color=="green"){
      $(div).removeClass("map_car_zhengchang");
      }
  //关闭悬浮层
  searchInfoWindowCar.close(new BMap.Marker(that._point));
  };
  
  map.getPanes().labelPane.appendChild(div);
  
  return div;
};
ComplexCustomOverlayCar.prototype.draw = function(){
  var map = this._map;
  var pixel = map.pointToOverlayPixel(this._point);
  this._div.style.left = pixel.x-17+"px";
  this._div.style.top  = pixel.y-40+ "px";
};

时间: 2024-10-25 04:13:19

百度地图api描绘车辆历史轨迹图的相关文章

使用百度地图API实现轨迹回放

调用百度地图API实现路线的轨迹回放功能其实很简单,只要搞懂以下几点即可: 1.需要用Polyline方法先绘制好路线图 2.用Marker添加标注点 3.关键一步,通过结合定时器,使用Marker创建的标注点实例的setPosition改变标注点位置,实现播放功能 代码分享,直接复制即可使用 [html] view plaincopy <!DOCTYPE html> <html> <head> <meta name="viewport" co

百度地图API,根据经纬度实现车辆移动轨迹绘制

百度地图,实现车辆轨迹绘制 实现思路: 1.根据经纬度实现车辆轨迹绘制 2.使用百度地图API的两个覆盖物实现,Polyline(折线)绘制轨迹,Marker(图标)绘制小车图标 3.将每两个坐标间连线起来,形成连贯的轨迹线路 4.生成下一个图标后删除上一个绘制的图标,形成小车移动动画感 5.本例使用的是临近的随机坐标点 6.初学者,欢迎大家交流学习 7.查看实例 代码: [html] view plain copy <!DOCTYPE html> <html> <head&

百度地图API 绘制轨迹历史

1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 5 <meta name="viewport" content="initial-scale=1.0, user-scalable=no" /> 6 &l

使用百度地图API制作线路轨迹播放

1.使用百度地图API制作轨迹播放: 可应用于车辆跟踪.行驶线路回放.跑步行程的记录等地图应用场景, 1.1绘制静态轨迹图 获取多个轨迹点point(必须包含经度.纬度) 使用polyline对象依次连接相邻的2个点(注意polyline的个数比point的少1) 1.2绘制动态轨迹图(固定间隔时间) 每隔500毫秒读取一个轨迹点,实现a,b两个功能 a增加一条polyline b将marker从先前的point移到当前点 主方法使用setTimeout方法迭代来实现动态循环 Polyline在

【百度地图API】北京周边7日游——图标按路线轨迹行动

原文:[百度地图API]北京周边7日游--图标按路线轨迹行动 任务描述: 春节就要来啦~酸奶小妹的妈妈要从遥远的重庆,来到北京过春节呢!酸奶小妹忙着给妈妈计划,北京周边的旅游线路.计划好路线后,就开始驾车旅游啦~~ 如何实现: 利用百度地图API先确定几个坐标点points,把他们连成一条折线BMap.Polyline(points). 然后,更改标注图片为一辆小车,var myIcon = new BMap.Icon("car.png",...). 最后利用二次开发的类K_point

【百度地图API】发布静态图API啦!只需一个网址,即可展示定制百度地图!

原文:[百度地图API]发布静态图API啦!只需一个网址,即可展示定制百度地图! 摘要: 百度地图静态图API!您无须执行任何“特殊”操作便可在网页上显示此图片. 不需要 JavaScript.我们只需创建一个网址,并将其放入 <img> 标记中.即可将定制的百度地图图片嵌入到自己的网页中. ------------------------------------------------------------------------------------------------------

百度地图API

本文我将从如何使用地图API(本文以百度为例,谷歌类似)开始,往后的扩展行的内容详见后续文章.1.打开链接http://developer.baidu.com/map/jshome.htm  这里有很多DEMO,或者你直接百度搜索“百度地图API”,第一个就是.进入后有很多方向供你选择,由于现在开源的地图API都是JS脚本写的,所以我上面的链接就只针对JAVASCRIPT进行介绍.  即使是编程菜鸟(像我这种),也知道当你在任何一个开发环境下写代码时,都需要加入头文件,例如,你要在C++里使用c

吐槽贴:百度地图 api 封装 的实用功能 [源码下载]

ZMap 类 功能介绍 ZMap 是学习百度地图 api 接口,开发基本功能后整的一个脚本类,本类方法功能大多使用 prototype 原型 实现: 包含的功能有:轨迹回放,圈画区域可编辑,判断几个坐标是否在一个圆圈内,生活服务查询,从经纬度获取地址信息,地图工具包括测距,获取面积,以积打印地图,地图全屏,实时路况,坐标是否在polygon区域内,打车方案,经过中间途经点,添加地图控件: 地图界面: ZMap.js 部分代码说明 /** * 百度地图 api 功能整合 * @author Glo

百度地图API使用介绍

百度地图API 开始学习百度地图API最简单的方式是看一个简单的示例.以下代码创建了一个520x340大小的地图区域并以天安门作为地图的中心: 1. <html> 2. <head> 3. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 4. <title>Hello, World</title> 5. <sc