import CreateAbnormalEventInfoWindow from './messageWindow/CreateAbnormalEventInfoWindow'; import CreateTrajectoryInfoWindow from './messageWindow/CreateTrajectoryInfoWindow'; import CreateComponeyInfoWindow from './messageWindow/CreateComponeyInfoWindow'; import CreateAttendPointInfoWindow from './messageWindow/CreateAttendPointInfoWindow'; import CreateSearchAddressInfoWindow from './messageWindow/CreateSearchAddressInfoWindow'; import attendancePoint from "@assets/images/prevention/aPicture/attendancePoint.png"; import { isEmpty } from '@utils/utils'; import { recordAdd, getRecordLastJSON } from '@common/recordHistory'; import eventCenter from "@common/events"; // 引入 EventEmitter //打点(人员跟驻勤点的样式) //事件列表对搜索出的人员打点 export function markEventList(eventList, where = "") { let eventMarkers = []; eventList.length > 0 && eventList.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.id, indexText: index, }); const that = this; // 手动驻的点给点击事件 AMap.event.addListener(marker, "click", function () { that.props.dispatch({ type: "command/setEventSelectIndex", payload: marker.w.key, }); that.openEventInfo(item, map, marker); }); marker.setAnimation("AMAP_ANIMATION_DROP"); eventMarkers.push(marker); } }); this.state.map.add(eventMarkers); this.state.map.setFitView(eventMarkers); //自适应显示所有的标注点 return eventMarkers; // this.setState({ personMarkers }); } //事件的打点更换 export function openEventInfo(item, map, marker) { let infoWindow = new AMap.InfoWindow({ isCustom: true, //使用自定义窗体 content: this.createEventInfoWindow(item), offset: new AMap.Pixel(16, -45), }); infoWindow.open(this.state.map, marker.getPosition()); const markers = this.state.eventMarkers; markers.map((itemMark, i) => { if (itemMark.w.key === item.id) { 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 closeEventMarkers() { const markers = this.state.eventMarkers; markers.map((itemMark, i) => { markers[i].setContent( '
' + itemMark.w.indexText + "
" ); }); return markers; } //人员图层对搜索出的人员打点 export function markPersonList(personList, where = "") { let selectComponeyInfo = this.props.selectComponeyInfo // where代表搜索的值,“软件园三期”“百川信”有特殊的打点位置需求 if (!isEmpty(this.state.personMarkers)) { console.log('准备清除 markPersonList 标记'); this.state.map.remove(this.state.personMarkers); } if (!isEmpty(this.state.beijingMarkers)) { this.state.map.remove(this.state.beijingMarkers); } if (!isEmpty(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 () { selectComponeyInfo.clickType = 'personnel'; recordAdd({ from: 'ComponeyInfo', to: 'CreateTrajectoryInfoWindow', fromData: selectComponeyInfo, toID: '' }); that.props.dispatch({ type: "command/setPersonSelectIndex", payload: marker.w.key, }); that.openPersonInfo(item, marker, 'police'); // that.openPersonInfo(item, 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, marker, type) { let infoWindow if (type == 'police') { infoWindow = new AMap.InfoWindow({ isCustom: true, //使用自定义窗体 content: CreateTrajectoryInfoWindow.call(this, item, type, marker), offset: new AMap.Pixel(16, -45), }); } else { 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; if (type != 'place') { 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, ]); 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: marker.w.comTaskId, 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, layerStatus = '' }) { const that = this; const _defaultInfo = { isCustom: true, //使用自定义窗体 content: this.createAttendanceInfoWindow(item), offset: new AMap.Pixel(16, -45), }; const infoJson = isEmpty(layerStatus) || layerStatus != 'aPicture' ? _defaultInfo : { isCustom: true, //使用自定义窗体 content: CreateAttendPointInfoWindow.call(that, item, '', marker), offset: new AMap.Pixel(16, -45), } let infoWindow = new AMap.InfoWindow(infoJson); infoWindow.open(map, marker.getPosition()); map.setZoomAndCenter(this.state.zoom, [item.lnglat[0], item.lnglat[1]]); //同时设置地图层级与中心点 // map.setCenter([item.lnglat[0], item.lnglat[1]]); const markers = this.state.attendanceMarkers; // markers.map((itemMark, i) => { // if (itemMark.w.comTaskId == item.comTaskId) { // markers[i].setContent( // '
' + // "
" // ); // } else { // markers[i].setContent( // '
' + // "
" // ); // } // }); // this.setState({ // attendanceMarkers: markers, // }); markers[currentIndex].setContent( '
' + "
" ); if (afterIndex != null && afterIndex != currentIndex) { markers[afterIndex].setContent( '
' + "
" ); } 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 markPicture(pictureList, type, where = '') { console.log('markPicture', pictureList, type); let selectComponeyInfo = this.props.selectComponeyInfo var pictureMarks = [] var pictureDatas = []; pictureList.data.map((item, index) => { // item.longitude = "118."+parseInt(Math.random() * 1000000); // item.latitude = "24."+parseInt(Math.random() * 1000000); if (item.longitude && item.latitude) { item.mapIcon = pictureList.mapIcon ? pictureList.mapIcon : "//a.amap.com/jsapi_demos/static/demo-center/icons/poi-marker-default.png"; item.clickMapIcon = pictureList.clickMarkerIcon ? pictureList.clickMarkerIcon : item.mapIcon; if (type == 'attendancePoint' || type == 'attendance' || type == 'eventMarker') { item.mapIcon = item.markerIcon; item.clickMapIcon = item.clickMarkerIcon; } const key = !isEmpty(item.perId) ? item.perId : item.id; var marker = new AMap.Marker({ icon: item.mapIcon, // markerIcon: mapIcon, // clickMarkerIcon: clickMarkerIcon, position: new AMap.LngLat(item.longitude, item.latitude), // position: [0,0], offset: new AMap.Pixel(-13, -30), key: key, indexText: index, }); const that = this; switch (type) { //保安人员定位 case 'securityResource': case 'attendancePolice': // 手动驻的点给点击事件 AMap.event.addListener(marker, "click", function (e) { if (type == 'attendancePolice') { recordAdd({ from: 'AttendInfo', to: 'CreateTrajectoryInfoWindow', fromData: item, toID: 'attendancePolice' }); } else { const lastJSON = getRecordLastJSON(); if (lastJSON.to != 'CreateTrajectoryInfoWindow') { const fromData = lastJSON.to == "ComponeyInfo" ? selectComponeyInfo : null recordAdd({ from: lastJSON.to, to: 'CreateTrajectoryInfoWindow', fromData: fromData, toID: lastJSON.toID }); } } if (isEmpty(where)) { eventCenter.emit('checkedMapTag', { type, item: item, checked: true }); } else { // 周边搜索 eventCenter.emit('checkedMapTag', { type: "securityResourceSearch", item: item, checked: true }); } }); break; //保安公司定位 case 'securityCompany': let companyLogo = item.componeyLogo // 创建一个 Icon marker = new AMap.Marker({ position: new AMap.LngLat(item.longitude, item.latitude), content: `
`, // position: [0,0], offset: new AMap.Pixel(-13, -30) }); let infoWindow = new AMap.InfoWindow({ isCustom: true, //使用自定义窗体 content: CreateComponeyInfoWindow.call(that, item, type, marker), offset: new AMap.Pixel(16, -45), }); // 手动给驻点添加鼠标移入/移出事件 AMap.event.addListener(marker, "mouseover", function () { infoWindow.open(that.state.map, marker.getPosition()); }); AMap.event.addListener(marker, "mouseout", function () { infoWindow.close(); }); // TAG: 根据需求 368。点击打开公司办公地点定位,并打开公司信息弹框 // this.props.dispatch({ // type: 'command/clearInfoWindow', // payload: true // }) // this.props.dispatch({ // type: 'command/setSelectComponeyInfo', // payload: item // }) break; // 驻勤点 case 'attendancePoint': // 手动驻的点给点击事件 infoWindow = new AMap.InfoWindow({ isCustom: true, //使用自定义窗体 content: CreateAttendPointInfoWindow.call(that, item, type, marker), offset: new AMap.Pixel(0, -15), }); // 手动给驻点添加鼠标移入/移出事件 AMap.event.addListener(marker, "mouseover", function () { if (isEmpty(selectComponeyInfo.componeyLogo)) { recordAdd({ from: 'AttendInfo', to: 'CreateAttendPointInfoWindow', fromData: item, toID: '' }); } else { selectComponeyInfo.clickType = 'attendancePoints'; recordAdd({ from: 'ComponeyInfo', to: 'AttendInfo', fromData: selectComponeyInfo, toID: '' }); } infoWindow.open(that.state.map, marker.getPosition()); }); AMap.event.addListener(marker, "mouseout", function () { infoWindow.close(); }); // TAG: 根据需求 368。点击打开点击打开驻勤点定位,并打开驻勤点弹框 this.props.dispatch({ type: 'command/clearInfoWindow', payload: true }) break; // 搜索地址 case 'searchAddress': AMap.event.addListener(marker, "click", function(){ infoWindow = new AMap.InfoWindow({ isCustom: true, content: CreateSearchAddressInfoWindow.call(that, item, type, marker), offset: new AMap.Pixel(0, -15) }) infoWindow.open(that.state.map, marker.getPosition()) }) break; // 事件标记 case 'eventMarker': break; default: console.log("default"); // 手动驻的点给点击事件 AMap.event.addListener(marker, "click", function () { let infoWindow = new AMap.InfoWindow({ isCustom: true, //使用自定义窗体 content: that.createPicturePerception(item, pictureList.name, type), offset: new AMap.Pixel(16, -45), }); infoWindow.open(that.state.map, marker.getPosition()); }); break; } pictureMarks.push(marker) pictureDatas.push(item); } }) return { pictureMarks, pictureDatas } } //实时异常的打点信息 export function markNowErrorEvent(data) { let lng = JSON.parse(data.position) let { latitude, longitude } = lng let infoWindow = new AMap.InfoWindow({ content: CreateAbnormalEventInfoWindow(data) }); infoWindow.open(this.state.map, latitude && longitude ? [longitude, latitude] : this.state.map.getCenter()); } /****************警保联动图层****************/ export function markPolice(data) { var policeMarks = [] data.map((item, index) => { if (item.longitude && item.latitude) { var marker = new AMap.Marker({ position: new AMap.LngLat(item.longitude, item.latitude), title: "负责人:" + item.name || "--", content: '
' + index + "
", key: item.id, indexText: index, }); const that = this; //手动驻的点给点击事件 AMap.event.addListener(marker, "click", function () { //存储选中的点id that.props.dispatch({ type: "command/setPoliceSelectIndex", payload: marker.w.key, }); marker.setContent( '
' + marker.w.indexText + "
" ); that.openPersonInfo(item, marker, 'police'); }); policeMarks.push(marker) } }) return policeMarks }