Browse Source

fix: 增加自定义点位指路机计算

ShangHai_LongXiang
高志龙 2 years ago
parent
commit
1c015f1a96
  1. 91
      public/static/qm/MainMap_QM_go.js

91
public/static/qm/MainMap_QM_go.js

@ -4392,7 +4392,11 @@ MainMap_QM.prototype = {
} }
}, },
//获取目标物角度和距离 deviceObj
/**
* 获取指路机方向
* @param {*} objArr
* @returns
*/
getObjectAngle:function(objArr){ getObjectAngle:function(objArr){
if(parseInt(Map_QM.util.startObj.node) || parseInt(Map_QM.util.startObj.node) == 0){ if(parseInt(Map_QM.util.startObj.node) || parseInt(Map_QM.util.startObj.node) == 0){
let pathData =Map_QM.util.allMap[parseInt(Map_QM.util.startObj.build)].buildArr[parseInt(Map_QM.util.startObj.floor)].mapData.path; let pathData =Map_QM.util.allMap[parseInt(Map_QM.util.startObj.build)].buildArr[parseInt(Map_QM.util.startObj.floor)].mapData.path;
@ -4404,13 +4408,13 @@ getObjectAngle:function(objArr){
const costAll = dijkstra.single_source_shortest_paths( Map_QM.util.pathStateObj.basePath,startNade,startNade).costs; const costAll = dijkstra.single_source_shortest_paths( Map_QM.util.pathStateObj.basePath,startNade,startNade).costs;
for(let i=0;i<objArr.length; i++){ for(let i=0;i<objArr.length; i++){
if(parseInt(objArr[i].type) == 1){ //店铺 if(parseInt(objArr[i].type) == 1){ //店铺
for (let h = 0; h < Map_QM.util.allMap[Map_QM.util.startObj.build].buildArr.length; h++) {
let mapData = Map_QM.util.allMap[Map_QM.util.startObj.build].buildArr[h].mapData;
if(objArr[i].buildingOrder != "undefined" && objArr[i].floorOrder != "undefined" ){
let mapData = Map_QM.util.allMap[parseInt(objArr[i].buildingOrder)].buildArr[parseInt(objArr[i].floorOrder)].mapData;
let angle = 0; let angle = 0;
for(let g=0; g<mapData.shopArea.length; g++){ for(let g=0; g<mapData.shopArea.length; g++){
if (objArr[i].typeAbbreviation == mapData.shopArea[g].name) { if (objArr[i].typeAbbreviation == mapData.shopArea[g].name) {
let toNade = Map_QM.util.startObj.build +"_" +h +"_" +mapData.shopArea[g].shopNav;
if(Map_QM.util.startObj.floor == h){ // 同楼层
let toNade = objArr[i].buildingOrder +"_" + parseInt(objArr[i].floorOrder) +"_" +mapData.shopArea[g].shopNav;
if(parseInt(objArr[i].buildingOrder) == Map_QM.util.startObj.build && Map_QM.util.startObj.floor == parseInt(objArr[i].floorOrder)){ // 同楼层
let x0 = (mapData.shopArea[g].xaxis-Map_QM.util.startObj.xaxis); let x0 = (mapData.shopArea[g].xaxis-Map_QM.util.startObj.xaxis);
let y0 = -1*(mapData.shopArea[g].yaxis-Map_QM.util.startObj.yaxis); let y0 = -1*(mapData.shopArea[g].yaxis-Map_QM.util.startObj.yaxis);
angle = (360+parseInt(Math.atan2(x0,y0)*180/Math.PI))%360; angle = (360+parseInt(Math.atan2(x0,y0)*180/Math.PI))%360;
@ -4418,7 +4422,7 @@ getObjectAngle:function(objArr){
}else{ // 不同楼层 }else{ // 不同楼层
let pathNodes = dijkstra.find_path(Map_QM.util.pathStateObj.graphPath, startNade, toNade); let pathNodes = dijkstra.find_path(Map_QM.util.pathStateObj.graphPath, startNade, toNade);
for(let u=0; u<pathNodes.nodes.length; u++){ for(let u=0; u<pathNodes.nodes.length; u++){
if(Map_QM.util.startObj.floor != pathNodes.nodes[u].split("_")[1]){
if(Map_QM.util.startObj.floor != pathNodes.nodes[u].split("_")[1] || Map_QM.util.startObj.build != pathNodes.nodes[u].split("_")[0]){
let fac = Map_QM.getFacilIcon(pathNodes.nodes[u].split("_")); let fac = Map_QM.getFacilIcon(pathNodes.nodes[u].split("_"));
let x0 = fac.position.x - Map_QM.util.startObj.xaxis; let x0 = fac.position.x - Map_QM.util.startObj.xaxis;
let y0 = fac.position.y + Map_QM.util.startObj.yaxis; let y0 = fac.position.y + Map_QM.util.startObj.yaxis;
@ -4433,37 +4437,68 @@ getObjectAngle:function(objArr){
} }
} }
} }
}else{ // 设施
}else if(parseInt(objArr[i].type) == 2){ // 设施
let item = Map_QM.pathIcon({type: objArr[i].typeAbbreviation}); let item = Map_QM.pathIcon({type: objArr[i].typeAbbreviation});
let toNade = item.build + "_" + item.floor + "_" + item.node;
let angle = 0;
if(item.floor == Map_QM.util.startObj.floor){
let x0 = item.site.x-Map_QM.util.startObj.xaxis;
let y0 = item.site.y+Map_QM.util.startObj.yaxis;
angle = (360+parseInt(Math.atan2(x0,y0)*180/Math.PI))%360;
angle = Math.abs(angle - parseInt(Map_QM.util.deviceObj.angle));
}else{
let pathNodes = dijkstra.find_path(Map_QM.util.pathStateObj.graphPath, startNade, toNade);
for(let u=0; u<pathNodes.nodes.length; u++){
if(Map_QM.util.startObj.floor != pathNodes.nodes[u].split("_")[1]){
let fac = Map_QM.getFacilIcon(pathNodes.nodes[u].split("_"));
let x0 = fac.position.x - Map_QM.util.startObj.xaxis;
let y0 = fac.position.y + Map_QM.util.startObj.yaxis;
angle = (360+parseInt(Math.atan2(x0,y0)*180/Math.PI))%360;
angle = Math.abs(angle - parseInt(Map_QM.util.deviceObj.angle));
break;
if(item){
let toNade = item.build + "_" + item.floor + "_" + item.node;
let angle = 0;
if(item.build== Map_QM.util.startObj.build && item.floor == Map_QM.util.startObj.floor){
let x0 = item.site.x-Map_QM.util.startObj.xaxis;
let y0 = item.site.y+Map_QM.util.startObj.yaxis;
angle = (360+parseInt(Math.atan2(x0,y0)*180/Math.PI))%360;
angle = Math.abs(angle - parseInt(Map_QM.util.deviceObj.angle));
}else{
let pathNodes = dijkstra.find_path(Map_QM.util.pathStateObj.graphPath, startNade, toNade);
for(let u=0; u<pathNodes.nodes.length; u++){
if(Map_QM.util.startObj.floor != pathNodes.nodes[u].split("_")[1] || Map_QM.util.startObj.build != pathNodes.nodes[u].split("_")[0]){
let fac = Map_QM.getFacilIcon(pathNodes.nodes[u].split("_"));
let x0 = fac.position.x - Map_QM.util.startObj.xaxis;
let y0 = fac.position.y + Map_QM.util.startObj.yaxis;
angle = (360+parseInt(Math.atan2(x0,y0)*180/Math.PI))%360;
angle = Math.abs(angle - parseInt(Map_QM.util.deviceObj.angle));
break;
}
}
}
objArr[i].angle = angle;
objArr[i].cost = parseInt(costAll[toNade] / Map_QM.util.options.mapScale);
}
}else{ //点位
// h g
console.log(objArr[i])
if(objArr[i].buildingOrder != "undefined" && objArr[i].floorOrder != "undefined" ){
let mapData = Map_QM.util.allMap[Map_QM.util.startObj.build].buildArr[Map_QM.util.startObj.floor].mapData;
if(mapData.path){
mapData.path.nodes.sort(Map_QM.util.sortNode);
let angle = 0;
let toNade = objArr[i].buildingOrder +"_" + objArr[i].floorOrder +"_" + objArr[i].location;
if(objArr[i].buildingOrder == Map_QM.util.startObj.build && Map_QM.util.startObj.floor == objArr[i].floorOrder){ // 同楼层
let x0 = (mapData.path.nodes[parseInt(objArr[i].location)].x - Map_QM.util.startObj.xaxis);
let y0 = -1*(mapData.path.nodes[parseInt(objArr[i].location)].y - Map_QM.util.startObj.yaxis);
angle = (360+parseInt(Math.atan2(x0,y0)*180/Math.PI))%360;
angle = Math.abs(angle - parseInt(Map_QM.util.deviceObj.angle));
}else{ // 不同楼层
let pathNodes = dijkstra.find_path(Map_QM.util.pathStateObj.graphPath, startNade, toNade);
for(let u=0; u<pathNodes.nodes.length; u++){
if(Map_QM.util.startObj.floor != pathNodes.nodes[u].split("_")[1] || Map_QM.util.startObj.build != pathNodes.nodes[u].split("_")[0]){
let fac = Map_QM.getFacilIcon(pathNodes.nodes[u].split("_"));
let x0 = fac.position.x - Map_QM.util.startObj.xaxis;
let y0 = fac.position.y + Map_QM.util.startObj.yaxis;
angle = (360+parseInt(Math.atan2(x0,y0)*180/Math.PI))%360;
angle = Math.abs(angle - parseInt(Map_QM.util.deviceObj.angle));
break;
}
} }
}
objArr[i].angle = angle;
objArr[i].cost = parseInt(costAll[toNade] / Map_QM.util.options.mapScale);
} }
} }
objArr[i].angle = angle;
objArr[i].cost = parseInt(costAll[toNade] / Map_QM.util.options.mapScale);
} }
} }
} }
return objArr; return objArr;
}, },
/** /**
* @api {方法} pathIcon({type:"xsj"}) 获取最近设施 * @api {方法} pathIcon({type:"xsj"}) 获取最近设施
* @apiGroup 地图导航 * @apiGroup 地图导航

Loading…
Cancel
Save