公司为什么要用的baiduAPI.js?
公司做的供应链,需要把百度地图接入 看运输的货物走的路线,在某个地点停放了多久【配套硬件是GPS设备】,这里就不多讲,这里我只讲公司怎么运用baiduAPI.的一些方法和实现的功能。
想拿学以致用的加QQ:83188296 我会把源码给你

引用的文件:

	<script src="/PubSrc/head.js"></script>
	<!--<script src="js/jquery-2.1.1.min.js"></script>-->
	<script src="../scripts/jquery.idTabs.js"></script>
	<script src="../scripts/baiduKey.js"></script>
    <script src="../scripts/baiduAPI.js"></script>
	<script src="../scripts/mapController.js"></script>

把js放上去 初始化地图会出现在这种效果:
公司运用的baiduAPI.js
自带缩放功能

然后是怎么点击一个车牌号或者订单号 出现当前的位置,出现位置标点是根据百度地图的经纬度来计算的,查到表中的经度纬度,把查到的经纬度放到放置图标的那个方法里面 就自然出图标了。代码如下:
给查到的表格里面的某一条数据 添加一个超链接 去查车辆或者订单号表绑定的GPSid表中的经纬度【SelectLonAndLat】

/*
订单号的数据表格
*/
function CreateOrderList(divID, height){	
	g_OrderList = $(divID).lnkGrid({
                columns: [
				{ display: '订单号', name: 'waybill_no', width:170, align:"left",
				 	render: function (rowdata, rowindex, value)
                    {
                          return "<a href='javascript:SelectLonAndLat(" + rowdata.vehicle_id +")'>" +value +"</a> ";  //订单号的超链接
                    },
			      }
				], 
				pageSize: 30,  //默认分页30条
				method: 'get', url:"?page=Map&pcmd=SearchOrderList&tm=" + (new Date()).getTime(),				
               width:  '95%' , height: height,  //设置宽度
				rownumbers:true,
				alternatingRow:true,
				checkbox:false
            });	
	return g_OrderList;		
}

好,这里我们查到了经纬度,因为我现在做的开发使用C++,java的话用SSM,SSH,或者随意什么框架只要用自己熟悉的取数据的方式拿到数据就行。

拿到数据之后赋值:
var Longitude = xmlRet.getValueByName("Longitude"); //定义经度 var Latitude = xmlRet.getValueByName("Latitude"); //定义纬度
赋值完以后调用百度的方法:

 PutTrack(Longitude,Latitude);	 那么这个方法是什么意思呢?
/*
把图标放到相应的经纬度的位置
//oPlayMarker=播放时的点
*/
function PutTrack(Longitude,Latitude) {
    //绘制播放图标  如果之前有值的话 那就说明已经有图标了 清空掉再放
    if (oPlayMarker != null)
	 {
        map.removeOverlay(oPlayMarker);
        oPlayMarker = null;
     }
    var tLastLon = Longitude; //定义经纬度
    var tLastLat = Latitude;
    console.log(tLastLon,tLastLat); //打印出走的经纬度
    var oLL02 = LL84To02(tLastLon, tLastLat);//经纬度转换
    var vMPoint = createLngLatObj(tLastLon, tLastLat, oLL02.lon, oLL02.lat);//创建经纬度对象
    oPlayMarker = map.createMarker(vMPoint, {//创建一个位置图标
        icon: "../image/loCar.png",//图标图片路径
        width: 22,
        height: 31,
        offsetType: 1
    });
    map.addOverlay(oPlayMarker);//将位置图标添加到地图上
	//置位地图中心点
    var bdBounds = map.getViewBounds();//获取地图的可视范围
    if (!map.IsLLObjInBounds(vMPoint, bdBounds)) { //经纬度是否在某个边界内
        map.setMapCenter(vMPoint);//设置地图中心点
    }
        iPlayRowNum = 0;
};

效果:
公司运用的baiduAPI.js
这里的线不用管 我后面会讲怎么画线,那我们怎么画线呢:
大概流程:先查到一堆数据 假设30条,拿到30条数据的经纬度 用数组的方式接收 再把30条经纬度用线的方式连接起来。
连线的代码:
先做一个查询的按钮吧: 用的hisinput和button 代码如下:

 <!--车辆的历史轨迹列表 -->
				  <div id="ltab2" style="height: 232px;">
<!--				  	  <div class="lnkFormArea">-->
					 <div align="center">  
					    <tr >
                        <td >开始时间:<input type="date"id="DateStart" value="开始时间"/>&nbsp;
					         时分:<input type="text"  style="width:50px; height=80px;" id="DateStartHour" value=""/>
                        </td>
                                    ----->
						 <td >结束时间:<input type="date" id="DateEnd" value="结束时间"/>&nbsp;
					         时分:<input type="text" style="width:50px; height=80px;" id="DateEndHour" value=""/></td>
                      <td ><input type="button" value="查询" onclick="SearchTrackList()"/></td>
                     </tr>
					 </div>
<!--                    </div>-->
				  	  <div id="Track_list"></div>
				  </div> 

效果图:
公司运用的baiduAPI.js

设置查询的日期默认值:我设置的是当前时间到前两个月的:

//设置开始与结束时间的默认值
var tmObj = new cTime();
tmObj.Add(-70*24*3600);
var strFrom = tmObj.ToStr('YYYY-MM-DD');
tmObj.Set(0); //reset to today.
var strTo = tmObj.ToStr('YYYY-MM-DD');  

调用数据查询的方法: 加了一些判断可以看一下

/*
点击查询车辆轨迹的按钮事件
*/
function SearchTrackList(){	
	var DateStart=$("#DateStart").val();  //判断开始和结束日期是否为空
    var DateEnd=$("#DateEnd").val();
	if(DateStart==""||DateStart==null){
    alert("请选择开始时间!");
    return false;
     }
	if(DateEnd==""||DateEnd==null){
     alert("请选择结束时间!");
     return false;
     }
	 if (aTableDatas_gps != null) {        //如果播放时的线对象不为空的话
	   aTableDatas_gps=[]; //清空轨迹表格     不加这个东西的话查询没数据会播放上一条
    } 
   var startNum = parseInt(DateStart.replace(/-/g,''),10);
   var endNum = parseInt(DateEnd.replace(/-/g,''),10);
   if(startNum>endNum){
    alert("结束时间不能在开始时间之前!");
   return false;
   }
	$("#pageloading").show();
	var url = "?page=Map&pcmd=SearchTrackList&vehicle_id="+$("#vehicle_id").val()+"&gpsdevice_id="+$("#gpsdevice_id").val();
	url+="&DateStart="+$("#DateStart").val();
	url+="&DateStartHour="+$("#DateStartHour").val();
	url+="&DateEnd="+$("#DateEnd").val();
	url+="&DateEndHour="+$("#DateEndHour").val();
	url += "&tm=" + (new Date()).getTime();
	var ret = AjaxHttpGet(url);//这个行是拿着上面的url进行一次ajax get 方法,相当于这里执行了一次查询,后面的g_track_list._setUrl(url);又会去查询一次,所以是下策
	g_track_list._setUrl(url);
	g_track_list.changePage("first");//跳转到第一页 	
	$("#pageloading").hide();
	var luxian="{\"obj\":"+ret+"}";//拼接成正确的json格式
	var obj = eval('(' + luxian + ')');
	trackListBack_gps(obj);//把拿到的json格式 在地图上画线连接成线路
}

trackListBack_gps是画线的

/*
在地图上画线连接成路线
*/
function trackListBack_gps(rObj)
{
	InitMap();
    //if (rObj.obj.HtmNO != htmNO) { return; }//如果当前查询回来的列表数据不是当前的htm单号的,则不绘制。
    if (rObj.obj != null && rObj.obj.Rows != null && rObj.obj.Rows.length > 0) 
	{			//如果获取的json的属性不为空
				var aDatasList = rObj.obj.Rows;
				aTableDatas_gps=[]; //清空轨迹表格
				var firstPoint;
				$.merge(aTableDatas_gps, aDatasList);
				aLineMPoints_gps = []; //清空轨迹线的经纬度集合
				$.each(aTableDatas_gps, function (i, tData) 
				{//循环遍历出每一对经纬度所在的点  i是下标 下标最大就是最后  
					  if (tData.Longitude == 0 || tData.Latitude == 0)
					   { 
						 return;
						}
					   var oLL02 = LL84To02(tData.Longitude, tData.Latitude);//经纬度转换
					   var mPoint = createLngLatObj(tData.Longitude, tData.Latitude, oLL02.lon, oLL02.lat);//创建经纬度对象
					   mPoint.LocTime = tData.LocTime;//后边通过时间绘制报警线路时使用
						if (i ==1)//定位地图中心点
						{
							firstPoint=mPoint;
							//置位地图中心点
                  var bdBounds = map.getViewBounds();//获取地图的可视范围
                  if (!map.IsLLObjInBounds(firstPoint, bdBounds)) { //经纬度是否在某个边界内
                  map.setMapCenter(firstPoint);//设置地图中心点
                       }
						}
					   aLineMPoints_gps.push(mPoint);//将经纬度对象放到经纬度集合中
						//计算地图视野(最小sw,最大ne)
					   compareLonLat(mPoint);//将创建的经纬度放到比较经纬度的方法去比较
				});
				oTrackLine_gps = map.createLine(aLineMPoints_gps, { color: aColor.gps });//把每一对经纬度的点连成一条线
		    //oTrackLine_gps
				if (oTrackLine_gps != null) 
				{//如果线不为空的话 
					map.addOverlay(oTrackLine_gps);//就把线添加到地图上展示
				}
           }
      else 
	  { 
	  }
};

这中间有一个compareLonLat方法:

/*
比较经纬度的方法
*/
function compareLonLat(mPoint) {
    //计算地图视野(最小sw,最大ne)
    if (mBounds.sw.lon == 0 || mPoint.lonlat.lon < mBounds.sw.lon) {
        mBounds.sw.lon = mPoint.lonlat.lon;
    }
    if (mBounds.sw.lat == 0 || mPoint.lonlat.lat < mBounds.sw.lat) {
        mBounds.sw.lat = mPoint.lonlat.lat;
    }
    if (mBounds.ne.lon == 0 || mPoint.lonlat.lon > mBounds.ne.lon) {
        mBounds.ne.lon = mPoint.lonlat.lon;
    }
    if (mBounds.ne.lat == 0 || mPoint.lonlat.lat > mBounds.ne.lat) {
        mBounds.ne.lat = mPoint.lonlat.lat;
    }
};

map.createLine是用来执行百度画线操作的:

所以我们完成了拿数据 把数据的经纬度放到比较经纬度的方法里面去比较 再放点画线 最后显示在地图上的操作。效果图:
公司运用的baiduAPI.js
因为我放的30条数据就这样子 所以才出个皮卡丘。
这里我没有画图标 有兴趣的去把拿到的第一个经纬度 放到外面第一个放图标的那里就行,我把经度纬度分别拿出来放,同时拿到的精确到是小数点后6位代码:

//						var lng=firstPoint.lng;
//						var lat=firstPoint.lat;
//						var lngNew=lng+"";	
//						var latNew=lat+"";
//						var lngNews;
//						var latNews;
//						var re = /([0-9]+\.[0-9]{6})[0-9]*/;	
//						lngNews=lngNew.replace(re,"$1");
//						latNews=latNew.replace(re,"$1");	
//							PutTrack(lngNews,latNews);	//置位地图中心点

然后我们是怎么点击播放 暂停 终止的 这里我们一起讲:
代码:

html代码
<div class="mapTool">
			<div class="playButton fix" id="playDiv" style="">
				<i class="playBtn" id="playBtn" title="播放"></i>
				<i class="playMonment" id="pauseBtn" title="暂停"></i>
				<i class="playStop" id="stopBtn" title="停止"></i>
            </div>
</div>

js方法:

$("#playBtn").on("click", startPlay);  //给id写点击事件
$("#pauseBtn").on("click", pausePlay);
$("#stopBtn").on("click", stopPlay);
 
//开始播放
function startPlay(){
    $("#playBtn").addClass("playBtnNow");
    $("#pauseBtn").removeClass("playMonmentNow");
    $("#stopBtn").removeClass("playStopNow");
    playTrack();//绘制播放点
};
function pausePlay() {
    $("#playBtn").removeClass("playBtnNow");
    $("#pauseBtn").addClass("playMonmentNow");
    $("#stopBtn").removeClass("playStopNow");
    clearPalyTimer();
};
//停止播放
function stopPlay() {
    $("#playBtn").removeClass("playBtnNow");
    $("#pauseBtn").removeClass("playMonmentNow");
    $("#stopBtn").addClass("playStopNow");
    if (oPlayMarker != null) {        //如果播放时的点不为空的话
        map.removeOverlay(oPlayMarker);//将播放点从地图上移除
        oPlayMarker = null;           //将播放点设空
    } 
    clearPalyTimer();
    iPlayRowNum = 0;
};

三个方法:

    playTrack();//绘制播放点
     clearPalyTimer();
     stopPlay() ;

function playTrack() {
    //绘制播放点
    if (oPlayMarker != null) {
        map.removeOverlay(oPlayMarker);
        oPlayMarker = null;
    }
   if (aTableDatas_gps == null||aTableDatas_gps=="") { //如果播放时的点不为空的话
	   alert("没有路线不能点击播放");
	   return false;
    } 
    var aPlayDatas = [];    
    aPlayDatas = aTableDatas_gps.concat();
    var tLastLon = aPlayDatas[iPlayRowNum].Longitude;
    var tLastLat = aPlayDatas[iPlayRowNum].Latitude;
    //console.log(tLastLon,tLastLat); //打印出走的经纬度
    var oLL02 = LL84To02(tLastLon, tLastLat);
    var vMPoint = createLngLatObj(tLastLon, tLastLat, oLL02.lon, oLL02.lat);
    oPlayMarker = map.createMarker(vMPoint, {
        icon: "../image/loCar.png",
        width: 22,
        height: 31,
        offsetType: 1
    });
    map.addOverlay(oPlayMarker);
    //置位地图中心点
    var bdBounds = map.getViewBounds();
    if (!map.IsLLObjInBounds(vMPoint, bdBounds)) {
        map.setMapCenter(vMPoint);
    }
    clearPalyTimer();
    //间隔时间继续播放
    if (iPlayRowNum < aPlayDatas.length - 1) {
        iPlayRowNum++;
        oPlayTimer = setTimeout(playTrack, 50);
    }
    else {
        //jAlert(GetString("Label_PlaybackComplete"));
        $("#playBtn").removeClass("playBtnNow");
        if (oPlayMarker != null) {
            map.removeOverlay(oPlayMarker);
            oPlayMarker = null;
        }
        clearPalyTimer();
        iPlayRowNum = 0;
    }
};
//重置播放时间
function clearPalyTimer() {
    if (oPlayTimer != null) {
        clearTimeout(oPlayTimer);
        oPlayTimer = null;
    }
};

这个效果图是动态的 所以就不放效果图了。公司运用的baiduAPI.js

这就是公司用到的基本的标点 画线 播放暂停终止功能

附带的一些小方法:

/*
* 获取页面高度和宽度
* return Array
*/
function GetPageSize() {
    try {
        var xScroll; //页面滚动宽度 
        var yScroll; //页面滚动高度

        if (window.innerHeight && window.scrollMaxY) {
            xScroll = document.body.scrollWidth;
            yScroll = window.innerHeight + window.scrollMaxY;
        }
        else if (document.body.scrollHeight > document.body.offsetHeight) {
            xScroll = document.body.scrollWidth;
            yScroll = document.body.scrollHeight;
        }
        else {
            xScroll = document.body.offsetWidth;
            yScroll = document.body.offsetHeight;
        }

        var windowWidth; //屏幕宽度
        var windowHeight; //屏幕高度

        if (self.innerHeight) { // all except Explorer
            windowWidth = self.innerWidth;
            windowHeight = self.innerHeight;
        }
        else if (document.documentElement && document.documentElement.clientHeight) { // Explorer 6 Strict Mode
            windowWidth = document.documentElement.clientWidth;
            windowHeight = document.documentElement.clientHeight;
        }
        else if (document.body) { // other Explorers
            windowWidth = document.body.clientWidth;
            windowHeight = document.body.clientHeight;
        }
        /*当页面滚动高度比屏幕高度小的时候,页面高度为屏幕高度,反之,为页面滚动高度*/
        if (yScroll < windowHeight) {
            pageHeight = windowHeight;
        }
        else {
            pageHeight = yScroll;
        }
        /*当页面滚动宽度比屏幕宽度小的时候,页面宽度为屏幕宽度,反之,为页面滚动宽度*/
        if (xScroll < windowWidth) {
            pageWidth = windowWidth;
        }
        else {
            pageWidth = xScroll;
        }

        arrayPageSize = new Array(pageWidth, pageHeight, windowWidth, windowHeight);
        return arrayPageSize;
    }
    catch (ex) {
        catchTheException("GetPageSize", ex);
    }
};

还有不懂的可以加我问一下 可能我讲的也不是很详细

相关文章: