You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
176 lines
6.4 KiB
176 lines
6.4 KiB
<template> |
|
<div class="map_warp"> |
|
<div id="container" style="width:100%;height:100%"></div> |
|
</div> |
|
</template> |
|
|
|
<script> |
|
import { lunzApi, appKey, key, carList } from "@/api/data"; |
|
import { dateFormat } from "@/util/date"; |
|
export default { |
|
data() { |
|
return { |
|
appKey: appKey, |
|
key: key, |
|
setInterval: null, |
|
baiduMap: null,//百度实例 |
|
locationModel: { 0: 'GPS定位', 1: '基站定位', 2: 'Wi-Fi定位', 3: '北斗定位', 4: 'GPS/北斗混合定位' }, |
|
locationStatus: { 0: '未启用', 1: '离线', 2: '静止', 3: '行驶中' }, |
|
locationAcc: { 0: '关闭', 1: '开启' }, |
|
carList: carList,//车辆设备 |
|
markList: [],//标注点记录 |
|
polyline: null,//昨日轨迹 |
|
} |
|
}, |
|
beforeDestroy() { |
|
if (this.setInterval) { |
|
clearInterval(this.setInterval); |
|
} |
|
}, |
|
beforeCreate() { |
|
if (this.setInterval) { |
|
clearInterval(this.setInterval); |
|
} |
|
}, |
|
mounted() { |
|
this.initMap(); |
|
window.addEventListener('resize', () => { |
|
if (this.setInterval) { |
|
clearInterval(this.setInterval); |
|
} |
|
this.initMap(); |
|
}); |
|
}, |
|
methods: { |
|
initMap() { |
|
this.baiduMap = new BMapGL.Map('container'); |
|
var point = new BMapGL.Point(118.880278, 35.649947); |
|
this.baiduMap.centerAndZoom(point, 11); |
|
this.baiduMap.enableScrollWheelZoom(true); |
|
var bdary = new BMapGL.Boundary(); |
|
bdary.get("日照市莒县", rs => { |
|
var pointArray = []; |
|
var count = rs.boundaries.length; |
|
for (var i = 0; i < count; i++) { |
|
var ply = new BMapGL.Polygon(rs.boundaries[i], { strokeWeight: 2, strokeColor: "#0e94eb", fillColor: '', fillOpacity: 0, }); //建立多边形覆盖物 |
|
this.baiduMap.addOverlay(ply); //添加覆盖物 |
|
pointArray = pointArray.concat(ply.getPath()); |
|
} |
|
}) |
|
this.carList.map((item, index) => { |
|
this.markList.map(mark => { |
|
this.baiduMap.removeOverlay(mark); |
|
}) |
|
this.markList = []; |
|
this.queryLunz(item.deviceId, item.key); |
|
this.setInterval = setInterval(() => { |
|
this.markList.map(mark => { |
|
this.baiduMap.removeOverlay(mark); |
|
}) |
|
this.markList = []; |
|
this.queryLunz(item.deviceId, item.key); |
|
}, 20 * 1000) |
|
}) |
|
}, |
|
//查询定位 |
|
queryLunz(deviceId, key) { |
|
lunzApi.getCarUserSimpleByImei(this.appKey, deviceId).then(res1 => { |
|
let carInfo = res1.Data; |
|
lunzApi.getCurrentDeviceInfoByIMEI(this.appKey, deviceId).then(res => { |
|
// 创建小车图标 |
|
var myIcon = new BMapGL.Icon(require("@/assets/images/car.png"), new BMapGL.Size(25, 25)); |
|
lunzApi.getBaiduNear(this.appKey, res.Data.BaiduLat, res.Data.BaiduLng).then(res2 => { |
|
// 创建Marker标注,使用小车图标 |
|
let lng = res.Data.BaiduLng; |
|
let lat = res.Data.BaiduLat; |
|
let pt = new BMapGL.Point(lng, lat); |
|
var marker = new BMapGL.Marker(pt, { |
|
icon: myIcon |
|
}); |
|
// 将标注添加到地图 |
|
this.baiduMap.addOverlay(marker); |
|
this.markList.push(marker); |
|
let sContent = `<div style="padding:0 10px 10px;font-size:14px;line-height:22px;"> |
|
<div>车主:${carInfo.UserName}</div> |
|
<div>车牌号:${carInfo.PlateNumber}</div> |
|
<div>设备号:${res.Data.IMEI}</div> |
|
<div>车架号:${carInfo.VinNumber}</div> |
|
<div>设备位置:${res2.Data}</div> |
|
<div>定位方式:${this.locationModel[res.Data.LocateMode]}</div> |
|
<div>最后定位时间:${res.Data.GPSTimeStamp.replace("T", " ")}</div> |
|
<div>最后检测时间:${res.Data.LastTimeStamp.replace("T", " ")}</div> |
|
<div>状态:${this.locationStatus[res.Data.SbcStatus]}</div> |
|
<div>时速:${res.Data.spd}km/h</div> |
|
<div>海拔:${res.Data.alt}</div> |
|
<div>ACC检测:${this.locationAcc[res.Data.acc]}</div> |
|
<div style="display: inline-block;border: 1px solid #eee;border-radius: 3px;padding: 3px 8px;color: #0e94eb;cursor: pointer;" id="btnPath_${carInfo.DeviceNumber}">行车轨迹</div> |
|
</div>`; |
|
let infoWindow = new BMapGL.InfoWindow(sContent); |
|
// marker添加点击事件 |
|
infoWindow.addEventListener('open', () => { |
|
document.getElementById('btnPath_' + carInfo.DeviceNumber).addEventListener('click', () => { |
|
this.queryPath(carInfo.DeviceNumber) |
|
}) |
|
}); |
|
marker.addEventListener('click', () => { |
|
this.openInfo(infoWindow, pt); |
|
}); |
|
}) |
|
|
|
}) |
|
}) |
|
}, |
|
//昨日轨迹 |
|
queryPath(deviceId) { |
|
let now = new Date(); |
|
let yesterDay1 = now.setDate(now.getDate() - 1); |
|
let param = { |
|
"Imei": deviceId, |
|
"StartTime": dateFormat(new Date(yesterDay1), 'yyyy-MM-dd'), |
|
"EndTime": dateFormat(new Date(), 'yyyy-MM-dd'), |
|
"MaxValue": 500 |
|
} |
|
lunzApi.getLocationsByImei(this.key, param).then(res => { |
|
let point = []; |
|
res.Data.map(item => { |
|
point.push(new BMapGL.Point(item.Lng, item.Lat)); |
|
}); |
|
if (this.polyline) { |
|
this.baiduMap.removeOverlay(this.polyline); |
|
this.polyline = null; |
|
} |
|
// this.polyline = new BMapGL.Polyline(point, { strokeColor: '#F5533D', strokeWeight: 2, strokeOpacity: 1, }) |
|
// this.baiduMap.addOverlay(this.polyline); |
|
this.polyline = new BMapGL.Polyline(point, { |
|
strokeColor: '#F5533D', |
|
strokeWeight: 3, |
|
strokeOpacity: 1, |
|
}); |
|
let trackAni = new BMapGLLib.TrackAnimation(this.baiduMap, this.polyline, { |
|
overallView: true, |
|
tilt: 30, |
|
duration: 20000, |
|
delay: 300 |
|
}, error => { |
|
this.$message({ |
|
message: '未查询到今日行车轨迹', |
|
type: 'warning' |
|
}); |
|
}); |
|
trackAni.start(); |
|
}) |
|
}, |
|
openInfo(infoWindow, pt) { |
|
this.baiduMap.openInfoWindow(infoWindow, pt); |
|
}, |
|
}, |
|
} |
|
</script> |
|
|
|
<style lang="scss" scoped> |
|
.map_warp { |
|
width: 100%; |
|
height: 100%; |
|
overflow: hidden; |
|
} |
|
</style> |