1. 程式人生 > >百度地圖BMap JS中根據兩點經緯度座標生成覆蓋物並調整方向

百度地圖BMap JS中根據兩點經緯度座標生成覆蓋物並調整方向

首先從資料庫中取得資料左邊,後臺程式碼就不放了,只放ajax

$.ajax({

 url: basePath+"XXXX",
 type: "post", 
 success: function(data) {
 try{
 locs=eval(data);
 var len1=locs.length;
 for(var i=0;i<len1;i++){
var locsChild=locs[i].data;
var len2=locsChild.length;
var flag = 0; // 前一個座標標記
 for(var j=0;j<len2;j++){
 if(locsChild[j].location_type=="1"){//判斷是點座標還是線路
 createMarker(locsChild[j],type,locsChild[flag]);//是點座標的話呼叫生成marker的方法,相鄰的兩個座標點為引數
 flag = j;
  }else if(locsChild[j].location_type=="0"){
  createPolyline(locsChild[j],i);//生成線路
  }
 }
 }
$("#allmap").hideLoading();
 }catch(ex){
 $("#allmap").hideLoading(); 
 openDialog(ex);
 }
 },
 error: function (XMLHttpRequest, textStatus, errorThrown) { 
 $("#allmap").hideLoading(); 
   openDialog(textStatus+" "+errorThrown); 
 } 

});

function createMarker(loc,type,preloc){

if(loc.data.length!=1){
return;
}
var myIcon= getIcon(XXXX);
var marker = new BMap.Marker(new BMap.Point(loc.data[0].lat,loc.data[0].lng),{icon:myIcon});//建立標註

if(!preloc.data.length!=1){

var Rc = 6378137; // 赤道半徑

var Rj = 6356725; // 極半徑 

var loc_m_RadLo = loc.data[0].lng * Math.PI/180.;
var pre_m_RadLo = preloc.data[0].lng * Math.PI/180.;
var loc_m_RadLa = loc.data[0].lat * Math.PI/180.;
var pre_m_RadLa = preloc.data[0].lat * Math.PI/180.;
var loc_Ec = Rj + (Rc - Rj) * (90.-loc.data[0].lat) / 90.;
var loc_Ed = loc_Ec * Math.cos(loc_m_RadLa);

var dx = (pre_m_RadLo - loc_m_RadLo) * loc_Ed;
var dy = (pre_m_RadLa - loc_m_RadLa) * loc_Ec;


var angle = Math.atan(Math.abs(dx/dy))*180./Math.PI;

var dLo = loc.data[0].lng - preloc.data[0].lng;
var dLa = loc.data[0].lat - preloc.data[0].lat;

//根據經緯度計算兩點之間的角度
if(dLo > 0 && dLa <= 0) {
angle = (90. - angle) + 90.;
}
else if(dLo <= 0 && dLa < 0) {
angle = angle + 180.;
}
else if(dLo < 0 && dLa >= 0) {
angle = (90. - angle) + 270;
}
// alert("角度是:"+angle);
 
}

marker.setRotation(360-angle);//設定旋轉角度

map.addOverlay(marker);// 將標註新增到地圖中

…………

…………

}