| | |
| | | import calculate from '@/utils/map/calculate'; |
| | | import gridMapUtil from '@/utils/map/grid'; |
| | | import { map } from '@/utils/map/index_old'; |
| | | import { map, onMapMounted } from '@/utils/map/index_old'; |
| | | |
| | | function clearAll(mapViews) { |
| | | if (mapViews) { |
| | | if (typeof mapViews.textViews === 'object') { |
| | | map.remove(mapViews.textViews); |
| | | export class SatelliteProxy { |
| | | // 地图网格相关对象 |
| | | mapViews; |
| | | |
| | | districtPolygon; |
| | | // 绘制区县边界 |
| | | drawDistrict(districtName, isNew) { |
| | | onMapMounted(() => { |
| | | if (this.districtPolygon && !isNew) { |
| | | map.remove(this.districtPolygon); |
| | | map.add(this.districtPolygon); |
| | | } else { |
| | | // eslint-disable-next-line no-undef |
| | | var district = new AMap.DistrictSearch({ |
| | | extensions: 'all', //返回行政区边界坐标等具体信息 |
| | | level: 'district' //设置查询行政区级别为区 |
| | | }); |
| | | district.search(districtName, (status, result) => { |
| | | var bounds = result.districtList[0].boundaries; //获取朝阳区的边界信息 |
| | | if (bounds) { |
| | | for (var i = 0; i < bounds.length; i++) { |
| | | //生成行政区划 polygon |
| | | // eslint-disable-next-line no-undef |
| | | this.districtPolygon = new AMap.Polygon({ |
| | | map: map, //显示该覆盖物的地图对象 |
| | | strokeWeight: 2, //轮廓线宽度 |
| | | path: bounds[i], //多边形轮廓线的节点坐标数组 |
| | | fillOpacity: 0, //多边形填充透明度 |
| | | fillColor: '#CCF3FF', //多边形填充颜色 |
| | | // strokeColor: '#ffffff' //线条颜色 |
| | | strokeColor: '#0552f7', //线条颜色 |
| | | zIndex: 9 |
| | | }); |
| | | } |
| | | map.setFitView(); //将覆盖物调整到合适视野 |
| | | } |
| | | }); |
| | | } |
| | | }); |
| | | } |
| | | |
| | | clearAll(mapViews) { |
| | | if (mapViews) { |
| | | if (typeof mapViews.gridViews === 'object') { |
| | | map.remove(mapViews.gridViews); |
| | | } |
| | | } |
| | | if (typeof mapViews.gridViews === 'object') { |
| | | map.remove(mapViews.gridViews); |
| | | this.clearText(mapViews); |
| | | } |
| | | |
| | | clearText(mapViews) { |
| | | if (mapViews) { |
| | | if (typeof mapViews.dataTxt === 'object') { |
| | | map.remove(mapViews.dataTxt); |
| | | } |
| | | if (typeof mapViews.dataLayer === 'object') { |
| | | map.remove(mapViews.dataLayer); |
| | | } |
| | | if (typeof mapViews.rankTxt === 'object') { |
| | | map.remove(mapViews.rankTxt); |
| | | } |
| | | if (typeof mapViews.rankLayer === 'object') { |
| | | map.remove(mapViews.rankLayer); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | function clearText(mapViews) { |
| | | if (mapViews && typeof mapViews.textViews === 'object') { |
| | | map.remove(mapViews.textViews); |
| | | // 绘制网格线 |
| | | drawPolyline(gridInfo, event) { |
| | | // 绘制网格 |
| | | const points = gridInfo.map((v) => { |
| | | return calculate.wgs84_To_Gcj02(v.longitude, v.latitude); |
| | | // return [v.longitude, v.latitude]; |
| | | }); |
| | | // const gridPoints = gridMapUtil.parseGridPoint(points); |
| | | // console.log('gridPoints:', gridPoints); |
| | | |
| | | const gridPoints = gridInfo.map((v, i) => { |
| | | return { |
| | | path: [ |
| | | calculate.wgs84_To_Gcj02(v.point1Lon, v.point1Lat), |
| | | calculate.wgs84_To_Gcj02(v.point2Lon, v.point2Lat), |
| | | calculate.wgs84_To_Gcj02(v.point3Lon, v.point3Lat), |
| | | calculate.wgs84_To_Gcj02(v.point4Lon, v.point4Lat) |
| | | // [v.point1Lon, v.point1Lat], |
| | | // [v.point2Lon, v.point2Lat], |
| | | // [v.point3Lon, v.point3Lat], |
| | | // [v.point4Lon, v.point4Lat] |
| | | ] |
| | | // eslint-disable-next-line no-undef |
| | | .map((d) => new AMap.LngLat(d[0], d[1])), |
| | | extData: points[i] |
| | | }; |
| | | }); |
| | | const gridViews = gridMapUtil.drawPolylines({ points: gridPoints, event }); |
| | | return { gridViews, gridPoints, points }; |
| | | } |
| | | } |
| | | |
| | | // 绘制网格线 |
| | | function drawPolyline(gridInfo) { |
| | | // 绘制网格 |
| | | const points = gridInfo.map((v) => { |
| | | // return calculate.wgs84_To_Gcj02(v.longitude, v.latitude); |
| | | return [v.longitude, v.latitude] |
| | | }); |
| | | const gridPoints = gridMapUtil.parseGridPoint(points); |
| | | const gridViews = gridMapUtil.drawPolylines(gridPoints); |
| | | return { gridViews, gridPoints, points }; |
| | | } |
| | | |
| | | // 绘制监测数据值 |
| | | function drawDataText(points, gridData, textViews, labelsLayer) { |
| | | const data = gridData.map((v, i) => { |
| | | return { |
| | | lnglat_GD: points[i], |
| | | // data: v.pm25 ? (v.pm25 + 'μg/m³') : '' |
| | | data: v.pm25 ? (v.pm25) : '' |
| | | }; |
| | | }); |
| | | return gridMapUtil.drawGridTextLabel(data, textViews, labelsLayer, 'bottom'); |
| | | } |
| | | |
| | | // 绘制监测数据排名文本 |
| | | function drawRankText(points, gridData, textViews, labelsLayer) { |
| | | const data = gridData.map((v, i) => { |
| | | return { |
| | | lnglat_GD: points[i], |
| | | // data: v.pm25 ? ('排名: ' + v.rank) : '' |
| | | data: v.pm25 ? (v.rank) : '' |
| | | }; |
| | | }); |
| | | return gridMapUtil.drawGridTextLabel(data, textViews, labelsLayer, 'top'); |
| | | } |
| | | |
| | | // 绘制监测数据值对应网格颜色 |
| | | function drawColor(gridViews, gridData, customColor) { |
| | | const pm25Data = gridData.map((v) => { |
| | | return v.pm25; |
| | | }); |
| | | if (customColor) { |
| | | gridMapUtil.drawGridColorCustom(gridViews, pm25Data); |
| | | } else { |
| | | gridMapUtil.drawGridColor(gridViews, pm25Data, 'PM25'); |
| | | // 绘制监测数据值 |
| | | drawDataText(points, gridDataDetail, textViews, labelsLayer) { |
| | | const data = gridDataDetail.map((v, i) => { |
| | | return { |
| | | lnglat_GD: points[i], |
| | | // data: v.pm25 ? (v.pm25 + 'μg/m³') : '' |
| | | data: v.pm25 ? v.pm25 : '' |
| | | }; |
| | | }); |
| | | // return gridMapUtil.drawGridTextLabel(data, textViews, labelsLayer, 'bottom'); |
| | | return gridMapUtil.drawGridText(data, textViews, 'top-center', 'data'); |
| | | } |
| | | |
| | | // 绘制监测数据排名文本 |
| | | drawRankText(points, gridDataDetail, textViews, labelsLayer) { |
| | | const data = gridDataDetail.map((v, i) => { |
| | | return { |
| | | lnglat_GD: points[i], |
| | | // data: v.pm25 ? ('排名: ' + v.rank) : '' |
| | | data: v.pm25 ? v.rank : '' |
| | | }; |
| | | }); |
| | | // return gridMapUtil.drawGridTextLabel(data, textViews, labelsLayer, 'top'); |
| | | return gridMapUtil.drawGridText(data, textViews, 'bottom-center', 'rank'); |
| | | } |
| | | |
| | | // 绘制监测数据值对应网格颜色 |
| | | drawColor({ |
| | | gridViews, |
| | | points, |
| | | gridDataDetail, |
| | | lastGridViews, |
| | | opacity, |
| | | zIndex, |
| | | customColor |
| | | }) { |
| | | // 根据数据筛选有数据的网格 |
| | | const res = []; |
| | | // 以及对应的中心点坐标 |
| | | const pointsRes = []; |
| | | gridDataDetail.forEach((d) => { |
| | | // 根据数据关联的网格编号,找到对应网格 |
| | | const cellId = d.cellId; |
| | | if (cellId > gridViews.length) { |
| | | throw Error( |
| | | '遥测数据的网格索引编号超出网格组范围,数据和网格组可能不对应' |
| | | ); |
| | | } |
| | | res.push(gridViews[cellId - 1]); |
| | | pointsRes.push(points[cellId - 1]); |
| | | }); |
| | | |
| | | // 根据绘制颜色方式绘制网格 |
| | | let resGridViews; |
| | | if (customColor) { |
| | | resGridViews = gridMapUtil.drawGridColorCustom( |
| | | res, |
| | | gridDataDetail, |
| | | opacity, |
| | | zIndex |
| | | ); |
| | | } else { |
| | | resGridViews = gridMapUtil.drawGridColor( |
| | | res, |
| | | gridDataDetail, |
| | | 'PM25', |
| | | opacity, |
| | | zIndex |
| | | ); |
| | | } |
| | | |
| | | if (lastGridViews) { |
| | | map.remove(lastGridViews); |
| | | } |
| | | map.add(resGridViews); |
| | | map.setFitView(resGridViews); |
| | | |
| | | return { resGridViews, pointsRes }; |
| | | } |
| | | |
| | | // 卫星网格配置准备 |
| | | gridPrepare(gridInfo, event) { |
| | | // clearText(mapViews); |
| | | this.clearAll(this.mapViews); |
| | | this.mapViews = this.drawPolyline(gridInfo, event); |
| | | } |
| | | |
| | | // 绘制网格遥感数据值和网格颜色 |
| | | drawGrid({ |
| | | gridData, |
| | | useCustomColor, |
| | | opacity, |
| | | zIndex, |
| | | showDataTxt, |
| | | showRankTxt |
| | | }) { |
| | | // SatelliteProxy.clearText(mapViews); |
| | | const { resGridViews, pointsRes } = this.drawColor({ |
| | | gridViews: this.mapViews.gridViews, |
| | | points: this.mapViews.points, |
| | | gridDataDetail: gridData, |
| | | lastGridViews: this.mapViews.lastGridViews, |
| | | customColor: useCustomColor, |
| | | opacity: opacity, |
| | | zIndex: zIndex |
| | | }); |
| | | this.mapViews.lastGridViews = resGridViews; |
| | | this.mapViews.lastPoints = pointsRes; |
| | | |
| | | // 数据标记 |
| | | const { textViews: dataTxt, labelsLayer: dataLayer } = this.drawDataText( |
| | | this.mapViews.lastPoints, |
| | | gridData, |
| | | this.mapViews.dataTxt, |
| | | this.mapViews.dataLayer |
| | | ); |
| | | this.mapViews.dataTxt = dataTxt; |
| | | this.mapViews.dataLayer = dataLayer; |
| | | |
| | | const { textViews: rankTxt, labelsLayer: rankLayer } = this.drawRankText( |
| | | this.mapViews.lastPoints, |
| | | gridData, |
| | | this.mapViews.rankTxt, |
| | | this.mapViews.rankLayer |
| | | ); |
| | | this.mapViews.rankTxt = rankTxt; |
| | | this.mapViews.rankLayer = rankLayer; |
| | | |
| | | if (showDataTxt) { |
| | | map.add(this.mapViews.dataTxt); |
| | | } |
| | | |
| | | if (showRankTxt) { |
| | | map.add(this.mapViews.rankTxt); |
| | | } |
| | | } |
| | | |
| | | // 调整各类地图覆盖物的可见性 |
| | | changeVisibility({ showGridViews, showDataTxt, showRankTxt }) { |
| | | if (showGridViews != undefined) { |
| | | showGridViews |
| | | ? map.add(this.mapViews.lastGridViews) |
| | | : map.remove(this.mapViews.lastGridViews); |
| | | } |
| | | if (showDataTxt != undefined) { |
| | | showDataTxt |
| | | ? map.add(this.mapViews.dataTxt) |
| | | : map.remove(this.mapViews.dataTxt); |
| | | } |
| | | if (showRankTxt != undefined) { |
| | | showRankTxt |
| | | ? map.add(this.mapViews.rankTxt) |
| | | : map.remove(this.mapViews.rankTxt); |
| | | } |
| | | } |
| | | |
| | | changeGridOpacity({ isOpacity, opacityValue }) { |
| | | this.mapViews.lastGridViews.forEach((e) => { |
| | | e.setOptions({ |
| | | fillOpacity: opacityValue ? opacityValue : isOpacity ? 0.1 : 0.7 |
| | | }); |
| | | }); |
| | | } |
| | | |
| | | setGridEvent(event) { |
| | | this.mapViews.gridViews.forEach((polygon) => { |
| | | event(polygon); |
| | | }); |
| | | } |
| | | |
| | | |
| | | } |
| | | |
| | | export default { |
| | | drawPolyline, |
| | | drawDataText, |
| | | drawRankText, |
| | | drawColor, |
| | | clearText, |
| | | clearAll |
| | | }; |
| | | // // 地图网格相关对象 |
| | | // let mapViews; |
| | | |
| | | // let districtPolygon; |
| | | // // 绘制区县边界 |
| | | // function drawDistrict(districtName, isNew) { |
| | | // onMapMounted(() => { |
| | | // if (districtPolygon && !isNew) { |
| | | // map.remove(districtPolygon); |
| | | // map.add(districtPolygon); |
| | | // } else { |
| | | // // eslint-disable-next-line no-undef |
| | | // var district = new AMap.DistrictSearch({ |
| | | // extensions: 'all', //返回行政区边界坐标等具体信息 |
| | | // level: 'district' //设置查询行政区级别为区 |
| | | // }); |
| | | // district.search(districtName, function (status, result) { |
| | | // var bounds = result.districtList[0].boundaries; //获取朝阳区的边界信息 |
| | | // if (bounds) { |
| | | // for (var i = 0; i < bounds.length; i++) { |
| | | // //生成行政区划 polygon |
| | | // // eslint-disable-next-line no-undef |
| | | // districtPolygon = new AMap.Polygon({ |
| | | // map: map, //显示该覆盖物的地图对象 |
| | | // strokeWeight: 2, //轮廓线宽度 |
| | | // path: bounds[i], //多边形轮廓线的节点坐标数组 |
| | | // fillOpacity: 0, //多边形填充透明度 |
| | | // fillColor: '#CCF3FF', //多边形填充颜色 |
| | | // // strokeColor: '#ffffff' //线条颜色 |
| | | // strokeColor: '#0552f7', //线条颜色 |
| | | // zIndex: 9 |
| | | // }); |
| | | // } |
| | | // map.setFitView(); //将覆盖物调整到合适视野 |
| | | // } |
| | | // }); |
| | | // } |
| | | // }); |
| | | // } |
| | | |
| | | // function clearAll(mapViews) { |
| | | // if (mapViews) { |
| | | // if (typeof mapViews.gridViews === 'object') { |
| | | // map.remove(mapViews.gridViews); |
| | | // } |
| | | // } |
| | | // clearText(mapViews); |
| | | // } |
| | | |
| | | // function clearText(mapViews) { |
| | | // if (mapViews) { |
| | | // if (typeof mapViews.dataTxt === 'object') { |
| | | // map.remove(mapViews.dataTxt); |
| | | // } |
| | | // if (typeof mapViews.dataLayer === 'object') { |
| | | // map.remove(mapViews.dataLayer); |
| | | // } |
| | | // if (typeof mapViews.rankTxt === 'object') { |
| | | // map.remove(mapViews.rankTxt); |
| | | // } |
| | | // if (typeof mapViews.rankLayer === 'object') { |
| | | // map.remove(mapViews.rankLayer); |
| | | // } |
| | | // } |
| | | // } |
| | | |
| | | // // 绘制网格线 |
| | | // function drawPolyline(gridInfo, event) { |
| | | // // 绘制网格 |
| | | // const points = gridInfo.map((v) => { |
| | | // return calculate.wgs84_To_Gcj02(v.longitude, v.latitude); |
| | | // // return [v.longitude, v.latitude]; |
| | | // }); |
| | | // // const gridPoints = gridMapUtil.parseGridPoint(points); |
| | | // // console.log('gridPoints:', gridPoints); |
| | | |
| | | // const gridPoints = gridInfo.map((v, i) => { |
| | | // return { |
| | | // path: [ |
| | | // calculate.wgs84_To_Gcj02(v.point1Lon, v.point1Lat), |
| | | // calculate.wgs84_To_Gcj02(v.point2Lon, v.point2Lat), |
| | | // calculate.wgs84_To_Gcj02(v.point3Lon, v.point3Lat), |
| | | // calculate.wgs84_To_Gcj02(v.point4Lon, v.point4Lat) |
| | | // // [v.point1Lon, v.point1Lat], |
| | | // // [v.point2Lon, v.point2Lat], |
| | | // // [v.point3Lon, v.point3Lat], |
| | | // // [v.point4Lon, v.point4Lat] |
| | | // ] |
| | | // // eslint-disable-next-line no-undef |
| | | // .map((d) => new AMap.LngLat(d[0], d[1])), |
| | | // extData: points[i] |
| | | // }; |
| | | // }); |
| | | // const gridViews = gridMapUtil.drawPolylines({ points: gridPoints, event }); |
| | | // return { gridViews, gridPoints, points }; |
| | | // } |
| | | |
| | | // // 绘制监测数据值 |
| | | // function drawDataText(points, gridDataDetail, textViews, labelsLayer) { |
| | | // const data = gridDataDetail.map((v, i) => { |
| | | // return { |
| | | // lnglat_GD: points[i], |
| | | // // data: v.pm25 ? (v.pm25 + 'μg/m³') : '' |
| | | // data: v.pm25 ? v.pm25 : '' |
| | | // }; |
| | | // }); |
| | | // // return gridMapUtil.drawGridTextLabel(data, textViews, labelsLayer, 'bottom'); |
| | | // return gridMapUtil.drawGridText(data, textViews, 'top-center', 'data'); |
| | | // } |
| | | |
| | | // // 绘制监测数据排名文本 |
| | | // function drawRankText(points, gridDataDetail, textViews, labelsLayer) { |
| | | // const data = gridDataDetail.map((v, i) => { |
| | | // return { |
| | | // lnglat_GD: points[i], |
| | | // // data: v.pm25 ? ('排名: ' + v.rank) : '' |
| | | // data: v.pm25 ? v.rank : '' |
| | | // }; |
| | | // }); |
| | | // // return gridMapUtil.drawGridTextLabel(data, textViews, labelsLayer, 'top'); |
| | | // return gridMapUtil.drawGridText(data, textViews, 'bottom-center', 'rank'); |
| | | // } |
| | | |
| | | // // 绘制监测数据值对应网格颜色 |
| | | // function drawColor({ |
| | | // gridViews, |
| | | // points, |
| | | // gridDataDetail, |
| | | // lastGridViews, |
| | | // opacity, |
| | | // zIndex, |
| | | // customColor |
| | | // }) { |
| | | // // 根据数据筛选有数据的网格 |
| | | // const res = []; |
| | | // // 以及对应的中心点坐标 |
| | | // const pointsRes = []; |
| | | // gridDataDetail.forEach((d) => { |
| | | // // 根据数据关联的网格编号,找到对应网格 |
| | | // const cellId = d.cellId; |
| | | // if (cellId > gridViews.length) { |
| | | // throw Error( |
| | | // '遥测数据的网格索引编号超出网格组范围,数据和网格组可能不对应' |
| | | // ); |
| | | // } |
| | | // res.push(gridViews[cellId - 1]); |
| | | // pointsRes.push(points[cellId - 1]); |
| | | // }); |
| | | |
| | | // // 根据绘制颜色方式绘制网格 |
| | | // let resGridViews; |
| | | // if (customColor) { |
| | | // resGridViews = gridMapUtil.drawGridColorCustom( |
| | | // res, |
| | | // gridDataDetail, |
| | | // opacity, |
| | | // zIndex |
| | | // ); |
| | | // } else { |
| | | // resGridViews = gridMapUtil.drawGridColor( |
| | | // res, |
| | | // gridDataDetail, |
| | | // 'PM25', |
| | | // opacity, |
| | | // zIndex |
| | | // ); |
| | | // } |
| | | |
| | | // if (lastGridViews) { |
| | | // map.remove(lastGridViews); |
| | | // } |
| | | // map.add(resGridViews); |
| | | // map.setFitView(resGridViews); |
| | | |
| | | // return { resGridViews, pointsRes }; |
| | | // } |
| | | |
| | | // // 卫星网格配置准备 |
| | | // function gridPrepare(gridInfo, event) { |
| | | // // clearText(mapViews); |
| | | // clearAll(mapViews); |
| | | // mapViews = drawPolyline(gridInfo, event); |
| | | // } |
| | | |
| | | // // 绘制网格遥感数据值和网格颜色 |
| | | // function drawGrid({ |
| | | // gridData, |
| | | // useCustomColor, |
| | | // opacity, |
| | | // zIndex, |
| | | // showDataTxt, |
| | | // showRankTxt |
| | | // }) { |
| | | // // SatelliteProxy.clearText(mapViews); |
| | | // const { resGridViews, pointsRes } = drawColor({ |
| | | // gridViews: mapViews.gridViews, |
| | | // points: mapViews.points, |
| | | // gridDataDetail: gridData, |
| | | // lastGridViews: mapViews.lastGridViews, |
| | | // customColor: useCustomColor, |
| | | // opacity: opacity, |
| | | // zIndex: zIndex |
| | | // }); |
| | | // mapViews.lastGridViews = resGridViews; |
| | | // mapViews.lastPoints = pointsRes; |
| | | |
| | | // // 数据标记 |
| | | // const { textViews: dataTxt, labelsLayer: dataLayer } = drawDataText( |
| | | // mapViews.lastPoints, |
| | | // gridData, |
| | | // mapViews.dataTxt, |
| | | // mapViews.dataLayer |
| | | // ); |
| | | // mapViews.dataTxt = dataTxt; |
| | | // mapViews.dataLayer = dataLayer; |
| | | |
| | | // const { textViews: rankTxt, labelsLayer: rankLayer } = drawRankText( |
| | | // mapViews.lastPoints, |
| | | // gridData, |
| | | // mapViews.rankTxt, |
| | | // mapViews.rankLayer |
| | | // ); |
| | | // mapViews.rankTxt = rankTxt; |
| | | // mapViews.rankLayer = rankLayer; |
| | | |
| | | // if (showDataTxt) { |
| | | // map.add(mapViews.dataTxt); |
| | | // } |
| | | |
| | | // if (showRankTxt) { |
| | | // map.add(mapViews.rankTxt); |
| | | // } |
| | | // } |
| | | |
| | | // // 调整各类地图覆盖物的可见性 |
| | | // function changeVisibility({ showGridViews, showDataTxt, showRankTxt }) { |
| | | // if (showGridViews != undefined) { |
| | | // showGridViews ? map.add(mapViews.lastGridViews) : map.remove(mapViews.lastGridViews); |
| | | // } |
| | | // if (showDataTxt != undefined) { |
| | | // showDataTxt ? map.add(mapViews.dataTxt) : map.remove(mapViews.dataTxt); |
| | | // } |
| | | // if (showRankTxt != undefined) { |
| | | // showRankTxt ? map.add(mapViews.rankTxt) : map.remove(mapViews.rankTxt); |
| | | // } |
| | | // } |
| | | |
| | | // function changeGridOpacity({ isOpacity, opacityValue }) { |
| | | // mapViews.lastGridViews.forEach((e) => { |
| | | // e.setOptions({ |
| | | // fillOpacity: opacityValue ? opacityValue : isOpacity ? 0.1 : 0.7 |
| | | // }); |
| | | // }); |
| | | // } |
| | | |
| | | // export default { |
| | | // drawDistrict, |
| | | // drawPolyline, |
| | | // drawDataText, |
| | | // drawRankText, |
| | | // drawColor, |
| | | // gridPrepare, |
| | | // drawGrid, |
| | | // changeVisibility, |
| | | // changeGridOpacity, |
| | | // clearText, |
| | | // clearAll |
| | | // }; |