import { data } from "../GIS/SearchListTab/Attendance/TypeData"; import CreateMassAttenInfoWindow from "../mapModule/messageWindow/CreateMassAttenInfoWindow"; import { getPerInfoList,policeGetTaskById } from "../../../services/api"; //打点(人员跟驻勤点的样式) //人员图层对搜索出的人员打点 export function markPersonList(personList, where = "") { // where代表搜索的值,“软件园三期”“百川信”有特殊的打点位置需求 if (!!this.state.personMarkers) { this.state.map.remove(this.state.personMarkers); } if (this.state.beijingMarkers) { this.state.map.remove(this.state.beijingMarkers); } if (this.state.gaoqiMarkers) { this.state.map.remove(this.state.gaoqiMarkers); } let personMarkers = []; personList.length > 0 && personList.map((item, index) => { const map = this.state.map; if (item.lnglat) { var marker = new AMap.Marker({ position: new AMap.LngLat(item.lnglat[0], item.lnglat[1]), // 经纬度对象,也可以是经纬度构成的一维数组[116.39, 39.9] title: "负责人:" + item.name || "--", content: '
' + index + "
", key: item.perId, indexText: index, }); const that = this; //手动驻的点给点击事件 AMap.event.addListener(marker, "click", function () { that.props.dispatch({ type: "command/setPersonSelectIndex", payload: marker.w.key, }); that.openPersonInfo(item, map, marker); }); marker.setAnimation("AMAP_ANIMATION_DROP"); personMarkers.push(marker); } }); this.state.map.add(personMarkers); if (where === "厦门软件园三期" || where === "软件园三期") { let allMark = []; //假的点,用来居中到软三的作用 var marker1 = new AMap.Marker({ position: new AMap.LngLat(118.051211, 24.60608), // 经纬度对象,也可以是经纬度构成的一维数组[116.39, 39.9] }); allMark.push(marker1); var marker2 = new AMap.Marker({ position: new AMap.LngLat(118.047843, 24.611016), // 经纬度对象,也可以是经纬度构成的一维数组[116.39, 39.9] }); allMark.push(marker2); this.state.map.setFitView(allMark); } else { this.state.map.setFitView(personMarkers); //自适应显示所有的标注点 } return personMarkers; // this.setState({ personMarkers }); } //人员的打点更换 export function openPersonInfo(item, map, marker) { let infoWindow = new AMap.InfoWindow({ isCustom: true, //使用自定义窗体 content: this.createInfoWindow(item), offset: new AMap.Pixel(16, -45), }); infoWindow.open(this.state.map, marker.getPosition()); const markers = this.state.personMarkers; markers.map((itemMark, i) => { if (itemMark.w.key === item.perId) { markers[i].setContent( '
' + itemMark.w.indexText + "
" ); } else { markers[i].setContent( '
' + itemMark.w.indexText + "
" ); } }); this.state.map.setZoomAndCenter(this.state.zoom, [ marker.getPosition().lng, marker.getPosition().lat, ]); //同时设置地图层级与中心点 // this.state.map.setCenter(marker.getPosition());//设置中心点 // this.setState({ // personMarkers: markers, // }); return markers; } //人员的打点更换图标,切换成未打点状态 export function closePersonMarkers() { const markers = this.state.personMarkers; markers.map((itemMark, i) => { markers[i].setContent( '
' + itemMark.w.indexText + "
" ); }); return markers; } //搜索出的驻勤点打点 export function markerAttendanceList(attendanceList, typeName = "") { //先删除之前的打点 if (!!this.state.attendanceMarkers) { //如果是搜索列表的打点,先删除之前地图上的搜索的驻勤标记 this.state.map.remove(this.state.attendanceMarkers); } let attendanceMarkers = []; const length = attendanceList.length; if (length > 0) { for (let i = 0; i < length; i++) { if (attendanceList[i].lnglat) { var marker = new AMap.Marker({ position: new AMap.LngLat( attendanceList[i].lnglat[0], attendanceList[i].lnglat[1] ), // 经纬度对象,也可以是经纬度构成的一维数组[116.39, 39.9] title: "负责人:" + attendanceList[i].name || "--", content: attendanceList[i].markerIcon ? '
' + "
" : '
' + "
", comTaskId: attendanceList[i].comTaskId, markerIcon: attendanceList[i].markerIcon, clickMarkerIcon: attendanceList[i].clickMarkerIcon, }); marker.setAnimation("AMAP_ANIMATION_DROP"); const that = this; //手动驻的点给点击事件 AMap.event.addListener(marker, "click", function () { that.props.dispatch({ type: "command/setSelectIndex", payload: i, }); }); attendanceMarkers.push(marker); } } } this.state.map.add(attendanceMarkers); this.state.map.setFitView(attendanceMarkers); //自适应显示所有的标注点 return attendanceMarkers; // this.setState({ attendanceMarkers }); } //驻勤点的打点更换 export function openAttendanceInfo(item, map, marker,currentIndex,afterIndex) { let infoWindow = new AMap.InfoWindow({ isCustom: true, //使用自定义窗体 content: this.createAttendanceInfoWindow(item), offset: new AMap.Pixel(16, -45), }); infoWindow.open(map, marker.getPosition()); map.setZoomAndCenter(this.state.zoom, [item.lnglat[0], item.lnglat[1]]); //同时设置地图层级与中心点 const markers = this.state.attendanceMarkers; // markers.map((itemMark, i) => { // if (itemMark.w.comTaskId == item.comTaskId) { markers[currentIndex].setContent( '
' + "
" ); // } else { if(afterIndex!=null&&afterIndex!=currentIndex){ console.log("进来") markers[afterIndex].setContent( '
' + "
" ); } // } // }); // this.setState({ // attendanceMarkers: markers, // }); return markers; } //驻勤点的打点更换图标,切换成未打点状态 export function closeAttendanceMarker() { const markers = this.state.attendanceMarkers; markers.map((itemMark, i) => { markers[i].setContent( '
' + "
" ); }); // this.setState({ // attendanceMarkers: markers, // }); return markers; } //海量驻勤点的打点(多的) export function massAttendancePoint(attendaceList) { var cluster, markers = []; const length = attendaceList.length; for (var i = 0; i < length; i += 1) { const marker = new AMap.Marker({ position: new AMap.LngLat( attendaceList[i].lnglat[0], attendaceList[i].lnglat[1] ), // 经纬度对象,也可以是经纬度构成的一维数组[116.39, 39.9] // title: "负责人:" + attendaceList[i].name || "--", content: '
' + "
", comTaskId: attendaceList[i].comTaskId, }); markers.push(marker); const _this = this; // const currentValue = attendaceList[i]; AMap.event.addListener(marker, "click", function () { // let infoWindow = new AMap.InfoWindow({ // isCustom: true, //使用自定义窗体 // content: CreateMassAttenInfoWindow(currentValue, _this.state.map), // offset: new AMap.Pixel(16, -45), // }); // infoWindow.open(_this.state.map, marker.getPosition()); policeGetTaskById({ comTaskId: marker.w.comTaskId }).then((res) => { if (res.retType == "0") { let infoWindow = new AMap.InfoWindow({ isCustom: true, //使用自定义窗体 content: CreateMassAttenInfoWindow.call(this,res.data, _this.state.map), offset: new AMap.Pixel(16, -45), }); infoWindow.open(_this.state.map, marker.getPosition()); } }); }); } var count = markers.length; var _renderClusterMarker = function (context) { var factor = Math.pow(context.count / count, 1 / 18); var div = document.createElement("div"); var Hue = 180 - factor * 180; var bgColor = "hsla(" + Hue + ",100%,50%,0.7)"; var fontColor = "hsla(" + Hue + ",100%,20%,1)"; var borderColor = "hsla(" + Hue + ",100%,40%,1)"; var shadowColor = "hsla(" + Hue + ",100%,50%,1)"; div.style.backgroundColor = bgColor; var size = Math.round(30 + Math.pow(context.count / count, 1 / 5) * 20); div.style.width = div.style.height = size + "px"; div.style.border = "solid 1px " + borderColor; div.style.borderRadius = size / 2 + "px"; div.style.boxShadow = "0 0 1px " + shadowColor; div.innerHTML = context.count; div.style.lineHeight = size + "px"; div.style.color = fontColor; div.style.fontSize = "14px"; div.style.textAlign = "center"; context.marker.setOffset(new AMap.Pixel(-size / 2, -size / 2)); context.marker.setContent(div); }; if (cluster) { cluster.setMap(null); } cluster = new AMap.MarkerClusterer(this.state.map, markers, { gridSize: 80, renderClusterMarker: _renderClusterMarker, }); // for (let i = 0; i < attendaceList.length; i++) { // for (let j = 0; j < data.length; j++) { // if (attendaceList[i].taskStationType == data[j].key) { // attendaceList[i].name = data[j].title; // attendaceList[i].markerIcon = data[j].markerIcon; // attendaceList[i].clickMarkerIcon = data[j].clickMarkerIcon; // break; // } // } // //如果没有就用默认的值 // if (!attendaceList[i].markerIcon) { // attendaceList[i].markerIcon = data[data.length - 1].markerIcon; // attendaceList[i].clickMarkerIcon = data[data.length - 1].clickMarkerIcon; // } // } // console.log(attendaceList); // let attendanceMarkers = []; // const length = attendaceList.length; // for (let i = 0; i < length; i++) { // if (attendaceList[i].lnglat) { // var marker = new AMap.Marker({ // position: new AMap.LngLat( // attendaceList[i].lnglat[0], // attendaceList[i].lnglat[1] // ), // 经纬度对象,也可以是经纬度构成的一维数组[116.39, 39.9] // title: "负责人:" + attendaceList[i].name || "--", // content: attendaceList[i].markerIcon // ? '
' + // "
" // : '
' + "
", // comTaskId: attendaceList[i].comTaskId, // markerIcon: attendaceList[i].markerIcon, // clickMarkerIcon: attendaceList[i].clickMarkerIcon, // }); // marker.setAnimation("AMAP_ANIMATION_DROP"); // const that = this; // //手动驻的点给点击事件 // AMap.event.addListener(marker, "click", function () { // console.log(marker); // let infoWindow = new AMap.InfoWindow({ // isCustom: true, //使用自定义窗体 // content: CreateMassAttenInfoWindow(attendaceList[i], that.state.map), // offset: new AMap.Pixel(16, -45), // }); // infoWindow.open(that.state.map, marker.getPosition()); // }); // attendanceMarkers.push(marker); // } // } // this.state.map.add(attendanceMarkers); } //海量人员数据的打点(多的) export function massPersonPoint(personList) { var cluster, markers = []; const length = personList.length; for (var i = 0; i < length; i += 1) { const marker = new AMap.Marker({ position: personList[i]["lnglat"], content: '
', // content: // '
', offset: new AMap.Pixel(-15, -15), perId: personList[i]["perId"], }); markers.push(marker); const _this = this; AMap.event.addListener(marker, "click", function () { getPerInfoList({ perIds: marker.w.perId }).then((res) => { if (res.retType == "0") { let infoWindow = new AMap.InfoWindow({ isCustom: true, //使用自定义窗体 content: _this.createInfoWindow(res.data[0]), offset: new AMap.Pixel(12, -30), }); infoWindow.open(_this.state.map, marker.getPosition()); } }); }); } var count = markers.length; var _renderClusterMarker = function (context) { var factor = Math.pow(context.count / count, 1 / 18); var div = document.createElement("div"); var Hue = 180 - factor * 180; var bgColor = "hsla(" + Hue + ",100%,50%,0.7)"; var fontColor = "hsla(" + Hue + ",100%,20%,1)"; var borderColor = "hsla(" + Hue + ",100%,40%,1)"; var shadowColor = "hsla(" + Hue + ",100%,50%,1)"; div.style.backgroundColor = bgColor; var size = Math.round(30 + Math.pow(context.count / count, 1 / 5) * 20); div.style.width = div.style.height = size + "px"; div.style.border = "solid 1px " + borderColor; div.style.borderRadius = size / 2 + "px"; div.style.boxShadow = "0 0 1px " + shadowColor; div.innerHTML = context.count; div.style.lineHeight = size + "px"; div.style.color = fontColor; div.style.fontSize = "14px"; div.style.textAlign = "center"; context.marker.setOffset(new AMap.Pixel(-size / 2, -size / 2)); context.marker.setContent(div); }; if (cluster) { cluster.setMap(null); } cluster = new AMap.MarkerClusterer(this.state.map, markers, { gridSize: 80, renderClusterMarker: _renderClusterMarker, }); }