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.
139 lines
3.7 KiB
139 lines
3.7 KiB
import http from "../plugins/axios"; |
|
|
|
const fakePath = require("@/assets/image/fake.png"); |
|
const fakeIcon = new BMap.Icon(fakePath, new BMap.Size(21, 31), { |
|
offset: new BMap.Size(10, 25) |
|
}); |
|
const locatePath = require("@/assets/image/locate.png"); |
|
const locateIcon = new BMap.Icon(locatePath, new BMap.Size(21, 31), { |
|
offset: new BMap.Size(10, 25) |
|
}); |
|
const dronePath = require("@/assets/drone/drone.gif"); |
|
const droneIcon = new BMap.Icon(dronePath, new BMap.Size(80, 80), { |
|
offset: new BMap.Size(10, 25) |
|
}); |
|
const circleOptions = { |
|
strokeColor: 'yellow', |
|
strokeWeight: 1, |
|
strokeOpacity: 0.5, |
|
fillColor: 'yellow', |
|
fillOpacity: 0.1 |
|
}; |
|
//圆的半径,单位为米 |
|
let radius = 100; |
|
http.get("public/get/circle/conf").then(rsp => { |
|
if (rsp) { |
|
radius = rsp[0]; |
|
circleOptions.fillOpacity = rsp[1]; |
|
} |
|
}) |
|
|
|
function paintLocation(map, data) { |
|
for (let i = 0; i < data.length; i++) { |
|
const loc = data[i]; |
|
if (loc.lng == 0 || loc.lat == 0) { |
|
continue; |
|
} |
|
const point = new BMap.Point(loc.lng, loc.lat); |
|
const marker = createMarker(loc); |
|
const text = "手机号码:--<br\>采集时间:" + loc.time + "<br\>经纬度:" + loc.lng + ", " + loc.lat + "<br\>场强:" + loc.rssi; |
|
marker.addEventListener("click", function() { |
|
map.closeInfoWindow(); |
|
openInfo(map, loc, text) |
|
}); |
|
map.addOverlay(marker); |
|
} |
|
|
|
} |
|
|
|
function paintTrack(map, data) { |
|
for (let i = 0; i < data.length; i++) { |
|
const track = data[i]; |
|
const point = new BMap.Point(track.lng, track.lat); |
|
const marker = createMarker(track, i); |
|
const text = "手机号码:--<br\>采集时间:" + track.time + "<br\>经度:" + track.lng + "<br\>纬度:" + track.lat; |
|
marker.addEventListener("click", function() { |
|
map.closeInfoWindow(); |
|
openInfo(map, track, text) |
|
}); |
|
if (marker.label) { |
|
marker.label.addEventListener("click", function() { |
|
map.closeInfoWindow(); |
|
openInfo(map, track, text) |
|
}); |
|
map.addOverlay(marker.label); |
|
} |
|
map.addOverlay(marker); |
|
if (i == data.length - 1) { |
|
map.centerAndZoom(point, 18); |
|
openInfo(map, track, text) |
|
} |
|
} |
|
} |
|
|
|
function createMarker(row, i) { |
|
const point = new BMap.Point(row.lng, row.lat); |
|
let marker; |
|
if (row.rssi) { |
|
marker = new BMap.Marker(point, { |
|
icon: locateIcon |
|
}); |
|
setLabel(marker, row.rssi - 1); |
|
} else if (row.trust == 0) { |
|
// marker = new BMap.Circle(point, radius, circleOptions); |
|
// marker.label = new BMap.Marker(marker.getCenter(), { |
|
// icon: fakeIcon |
|
// }); |
|
marker = new BMap.Marker(point, { |
|
icon: fakeIcon |
|
}); |
|
marker.label = new BMap.Circle(marker.getPosition(), radius, circleOptions); |
|
setLabel(marker, i); |
|
} else { |
|
marker = new BMap.Marker(point); |
|
setLabel(marker, i); |
|
} |
|
return marker; |
|
} |
|
|
|
function addLable(marker, i) { |
|
setLabel(marker.label, i); |
|
} |
|
|
|
function setLabel(marker, i) { |
|
const label = new BMap.Label(i + 1, { |
|
offset: new BMap.Size(2, 5) |
|
}); |
|
label.setStyle({ |
|
backgroundColor: "none", |
|
color: "black", |
|
border: '0px', |
|
borderRadius: "50%", |
|
height: "13px", |
|
width: "13px" |
|
}); |
|
marker.setLabel(label); |
|
} |
|
|
|
function openInfo(map, row, text) { |
|
const center = new BMap.Point(row.lng, row.lat) |
|
map.setCenter(center); |
|
const opts = { |
|
width: 250, |
|
height: 100, |
|
title: 'IMSI:' + row.imsi |
|
} |
|
if (!text) { |
|
text = "手机号码:--<br\>初次上报时间:" + row.firstTime + "<br\>最近上报时间:" + row.time + "<br\>经纬度:" + row.lng + "," + row.lat; |
|
} |
|
const infoWindow = new BMap.InfoWindow(text, opts); |
|
map.openInfoWindow(infoWindow, center); |
|
} |
|
|
|
export { |
|
createMarker, |
|
paintTrack, |
|
openInfo, |
|
droneIcon, |
|
paintLocation |
|
}
|
|
|