百度地图BMap JS中根据两点经纬度坐标生成覆盖物并调整方向
2016-12-21 14:35
239 查看
首先从数据库中取得数据左边,后台代码就不放了,只放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);// 将标注添加到地图中
…………
…………
}
$.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);// 将标注添加到地图中
…………
…………
}
相关文章推荐
- java根据GPS经纬度坐标计算两点的距离算法
- 根据两点经纬度坐标计算距离的算法
- java/android 根据经纬度坐标计算两点的距离 (米/千米)
- java根据经纬度坐标计算两点的距离算法
- 根据两点经纬度求直线与正北方向的夹角
- 根据两点经纬度坐标计算距离
- 根据两点间经纬度坐标(double值)计算两点间距离,LBS操作相关工具类
- java根据经纬度坐标计算两点的距离算法
- 根据开始时间结束时间,开始的经纬度结束的经纬度,按照一定的时间频率生成坐标点。
- java根据经纬度坐标计算两点的距离算法
- c++根据两点经纬度坐标获取长度
- 4000 java根据经纬度坐标计算两点的距离算法
- java根据经纬度坐标计算两点的距离算法
- 根据GPS经纬度坐标计算两点的距离算法
- JavaScript 根据两点的经纬度坐标,计算实际的直线距离
- java 根据经纬度 坐标 计算两点之间的距离
- 根据点中坐标,调整怪物动作方向
- java根据经纬度坐标计算两点的距离算法,与百度地图测距工具相符
- java根据经纬度坐标计算两点的距离算法