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 = '

' + obj.proName + '

' + '

风险等级:' + obj.riskType + '

' + '

作业内容:' + sliceStr(obj.workContent) + '

' + '

班组长:' + dealEmptyString(obj.foreman) + '' + dealEmptyString(obj.foremanPhone) + '

'; 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 ''; }