IntelligentRecognition/ah-jjsp-web/.svn/pristine/b8/b81778255481d61a37281c453ab...

362 lines
10 KiB
Plaintext
Raw Normal View History

2024-05-24 16:09:40 +08:00
let map;
$(function () {
initMap();
})
// 初始化地图
function initMap() {
createMap(); // 创建地图
madeBoundary(); //加载区域图
addMapControl(); // 添加自定义控件
setMapEvent(); //地图控件设置
// setTimeout(riskIcon,3000);
riskIcon();
}
//地图设置start
function setMapEvent() {
map.enableScrollWheelZoom();
map.enableKeyboard();
map.enableDragging();
map.enableDoubleClickZoom();
}
//地图设置end
// 创建地图
function createMap() {
map = new BMap.Map("map", {
mapType: BMAP_NORMAL_MAP
}); // 创建Map实例
map.centerAndZoom('合肥', 8); // 初始化地图,设置中心点坐标和地图级别
/* //添加地图类型控件
map.addControl(new BMap.MapTypeControl({
mapTypes: [
BMAP_NORMAL_MAP,
BMAP_HYBRID_MAP
]
}));*/
map.setCurrentCity("合肥"); // 设置地图显示的城市 此项是必须设置的
}
//设置区域图 start
function madeBoundary() {
datas = new Array("安徽省-");
let bdary = new BMap.Boundary();
for (let i = 0; i < datas.length; i++) {
getBoundary(datas[i], bdary);
}
}
function getBoundary(data, bdary) {
data = data.split("-");
bdary.get(data[0], function (rs) { //获取行政区域
let count = rs.boundaries.length; //行政区域的点有多少个
let pointArray = [];
for (let i = 0; i < count; i++) {
let ply = new BMap.Polygon(rs.boundaries[i], {
strokeWeight: 3,
strokeColor: "#1066FC",
fillOpacity: 1,
fillColor: data[1]
}); //建立多边形覆盖物
map.addOverlay(ply); //添加覆盖物
}
});
}
// 设置区域图end
//向地图添加控件start
function addMapControl() {
let mystyleJson = [{
"featureType": "road",
"elementType": "all",
"stylers": {
"lightness": 20
}
},
{
"featureType": "railway",
"elementType": "all",
"stylers": {
"visibility": "off"
}
},
{
"featureType": "local",
"elementType": "labels",
"stylers": {
"visibility": "off"
}
},
{
"featureType": "water",
"elementType": "all",
"stylers": {
"color": "#d1e5ff"
}
},
{
"featureType": "highway",
"elementType": "labels",
"stylers": {}
}
];
map.setMapStyle({
styleJson: mystyleJson
});
}
//向地图添加控件end
// 获取无人机
function getTerminal(arr) {
let result = [];
if (JSON.stringify(arr).indexOf("Longitude") != -1) {
let lon = arr.Res.GPS.Longitude;
let lat = arr.Res.GPS.Latitude
let data = wgs84tobd09(parseFloat(lon), parseFloat(lat));
result.push({
"lon": data[0],
"lat": data[1],
"puid": arr.Res.PUID
});
if (result != null && result.length > 0) {
for (let i = 0; i < result.length; i++) {
map.addOverlay(createMarker(result[i]));
}
} else {
layer.alert("数据获取失败");
}
}
}
// 获取施工现场点坐标
function getJobLocation() {
let result = [];
if (result != null && result.length > 0) {
for (let i = 0; i < result.length; i++) {
map.addOverlay(createJobLocationMarker(result[i]));
}
} else {
layer.alert("数据获取失败");
}
}
//创建地图覆盖物start
function createMarker(obj) { //创建地图覆盖物
let cent = "";
let pt = new BMap.Point(obj.lon, obj.lat);
let myIcon = getIcon();
return new BMap.Marker(pt, {
icon: myIcon
});
}
//设置无人机图标 start
function getIcon() {
let url = "../../img/无人机.png";
return new BMap.Icon(url, new BMap.Size(20, 20));
}
//设置无人机图标 end
function createWorksiteMarker(obj) { //创建地图覆盖物
let pt = new BMap.Point(obj.lon, obj.lat);
let myIcon = getWorksiteIcon(obj.isUAV);
let marker = new BMap.Marker(pt, {
icon: myIcon
});
return marker;
}
//根据状态设置作业现场图标 start
function getWorksiteIcon(isUAV) {
let url = '';
if (isUAV === "0") {
url = "../../img/作业现场1.png"; //作业现场无无人机
} else if (isUAV === "1") {
url = "../../img/作业现场2.png"; //作业现场有无人机
} else {
url = "../../img/作业现场2.png"; //作业现场有无人机
}
return new BMap.Icon(url, new BMap.Size(28, 28));
}
//根据状态设置作业现场图标 end
//创建施工现场覆盖物start
function createJobLocationMarker(obj) { //创建地图覆盖物
console.log(obj);
let cent = "";
let pt = new BMap.Point(obj.lon, obj.lat);
let myIcon = getJobLocationIcon(obj.riskType);
let marker = new BMap.Marker(pt, {
icon: myIcon
});
addClickHandler(marker, obj);
return marker;
}
//施工现场覆盖物图标
function getJobLocationIcon(riskType) {
let url = "";
if (riskType === '2') {
url = '../../img/compreDisplay/two-risk.png';
} else if (riskType === '3') {
url = '../../img/compreDisplay/three-risk.png';
} else if (riskType === '4') {
url = '../../img/compreDisplay/four-risk.png';
} else if (driskType === '5') {
url = '../../img/compreDisplay/five-risk.png';
}
return new BMap.Icon(url, new BMap.Size(33, 33));
}
//覆盖物事件start
function addClickHandler(marker, obj) {
let steelContent = '<div><p class="terrain-map-p">' + obj.proName + '</p>' +
'<p class="terrain-map-p">风险等级:' + obj.riskType + '</p>' +
'<p class="terrain-map-p" title="' + obj.workContent + '">作业内容:' + sliceStr(obj.workContent) + '</p>' +
'<p class="terrain-map-p">班组长:' + dealEmptyString(obj.foreman) + '' + dealEmptyString(obj.foremanPhone) + '</p></div>';
let steelOpts = {
width: 300, //信息窗口宽度
height: 170, //信息窗口高度
enableMessage: false //设置允许信息窗发送短息
};
marker.addEventListener("mouseover", function (e) {
this.openInfoWindow(new BMap.InfoWindow(steelContent, steelOpts));
});
/* marker.addEventListener("mouseout", function () {
this.closeInfoWindow();
}
);*/
}
function riskIcon() {
$.ajax({
type: "post",
data: {},
headers: {
"encrypt": sm3(JSON.stringify({}))
},
async: true,
url: dataUrl + 'proteam/pot/home/getRiskMap?token=' + token,
success: function (obj) {
console.log(obj.data);
for (let i = 0; i < obj.data.length; i++) {
console.log(obj.data[i]);
map.addOverlay(createJobLocationMarker(obj.data[i]));
}
}, error: function () {
console.error("获取数据失败");
}
});
}
// 定义一些常量
let x_PI = 3.14159265358979324 * 3000.0 / 180.0
let PI = 3.1415926535897932384626
let a = 6378245.0
let ee = 0.00669342162296594323
function gcj02tobd09(lng, lat) {
let z = Math.sqrt(lng * lng + lat * lat) + 0.00002 * Math.sin(lat * x_PI)
let theta = Math.atan2(lat, lng) + 0.000003 * Math.cos(lng * x_PI)
let bd_lng = z * Math.cos(theta) + 0.0065
let bd_lat = z * Math.sin(theta) + 0.006
return [bd_lng, bd_lat]
}
/**
* WGS84坐标系转火星坐标系GCj02 / 即WGS84 转谷歌、高德
* @param { Number } lng
* @param { Number } lat
*/
function wgs84togcj02(lng, lat) {
if (outOfChina(lng, lat)) {
return [lng, lat]
} else {
let dlat = transformlat(lng - 105.0, lat - 35.0)
let dlng = transformlng(lng - 105.0, lat - 35.0)
let radlat = lat / 180.0 * PI
let magic = Math.sin(radlat)
magic = 1 - ee * magic * magic
let sqrtmagic = Math.sqrt(magic)
dlat = (dlat * 180.0) / ((a * (1 - ee)) / (magic * sqrtmagic) * PI)
dlng = (dlng * 180.0) / (a / sqrtmagic * Math.cos(radlat) * PI)
let mglat = lat + dlat
let mglng = lng + dlng
return [mglng, mglat]
}
}
/**
* wgs84坐标系转百度坐标系
* @param {*} lng
* @param {*} lat
*/
function wgs84tobd09(lng, lat) {
// wgs84先转为火星坐标系
let gcj02 = wgs84togcj02(lng, lat)
// 火星坐标系转百度坐标系
return gcj02tobd09(gcj02[0], gcj02[1])
}
/**
* 经度转换
* @param { Number } lng
* @param { Number } lat
*/
function transformlat(lng, lat) {
let ret = -100.0 + 2.0 * lng + 3.0 * lat + 0.2 * lat * lat + 0.1 * lng * lat + 0.2 * Math.sqrt(Math.abs(lng))
ret += (20.0 * Math.sin(6.0 * lng * PI) + 20.0 * Math.sin(2.0 * lng * PI)) * 2.0 / 3.0
ret += (20.0 * Math.sin(lat * PI) + 40.0 * Math.sin(lat / 3.0 * PI)) * 2.0 / 3.0
ret += (160.0 * Math.sin(lat / 12.0 * PI) + 320 * Math.sin(lat * PI / 30.0)) * 2.0 / 3.0
return ret
}
/**
* 纬度转换
* @param { Number } lng
* @param { Number } lat
*/
function transformlng(lng, lat) {
let ret = 300.0 + lng + 2.0 * lat + 0.1 * lng * lng + 0.1 * lng * lat + 0.1 * Math.sqrt(Math.abs(lng))
ret += (20.0 * Math.sin(6.0 * lng * PI) + 20.0 * Math.sin(2.0 * lng * PI)) * 2.0 / 3.0
ret += (20.0 * Math.sin(lng * PI) + 40.0 * Math.sin(lng / 3.0 * PI)) * 2.0 / 3.0
ret += (150.0 * Math.sin(lng / 12.0 * PI) + 300.0 * Math.sin(lng / 30.0 * PI)) * 2.0 / 3.0
return ret
}
/**
* 判断是否在国内,不在国内则不做偏移
* @param {*} lng
* @param {*} lat
*/
function outOfChina(lng, lat) {
return (lng < 72.004 || lng > 137.8347) || ((lat < 0.8293 || lat > 55.8271) || false)
}
// 超长设置隐藏
function sliceStr(value) {
if (value) {
return value.length > 12 ? value.slice(0, 12) + '...' : value;
} else {
return '';
}
}
/*判空*/
function dealEmptyString(str) {
if (str) {
return str;
}
return '';
}