百度地圖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);// 將標註新增到地圖中
…………
…………
}