From b487b91abd2a0d769b82ddf90924f93afe9b05b3 Mon Sep 17 00:00:00 2001
From: quanyawei <401863037@qq.com>
Date: Mon, 22 Apr 2024 13:17:21 +0800
Subject: [PATCH] Merge branch 'feature_1.0'

---
 src/views/list/road.vue |  296 ++++++++++++++++++++++++++++++++++++++++++++++++++++++----
 1 files changed, 272 insertions(+), 24 deletions(-)

diff --git a/src/views/list/road.vue b/src/views/list/road.vue
index e5f7ff1..b302774 100644
--- a/src/views/list/road.vue
+++ b/src/views/list/road.vue
@@ -28,6 +28,9 @@
         <a-button type="primary" style="margin-left: 10px" @click="selectCheck"
           >������</a-button
         >
+        <a-button type="primary" style="margin-left: 10px" @click="reosurce"
+          >������������������</a-button
+        >
       </div>
       <div class="left-five">
         <a-input
@@ -37,6 +40,15 @@
         />
         <a-button type="primary" style="margin-left: 10px" @click="selectLu"
           >������</a-button
+        >
+        <a-button type="primary" style="margin-left: 10px" @click="clearPolygon"
+          >������������</a-button
+        >
+        <a-button
+          type="primary"
+          style="margin-left: 10px"
+          @click="showAllPolygon"
+          >������������������</a-button
         >
       </div>
       <div class="left-two">
@@ -142,6 +154,22 @@
     </a-modal>
     <div class="right">
       <div id="roadmap" class="roadmap"></div>
+      <ul class="drawing-panel">
+        <li
+          class="bmap-btn bmap-rectangle"
+          @click="draw('rectangle')"
+          :style="{
+            'background-position-y': actNav === 'rectangle' ? '-52px' : '0px',
+          }"
+        ></li>
+        <li
+          class="bmap-btn bmap-polygon"
+          @click="draw('polygon')"
+          :style="{
+            'background-position-y': actNav === 'polygon' ? '-52px' : '0px',
+          }"
+        ></li>
+      </ul>
     </div>
     <div class="fixeds" v-show="showfix === true">
       <div style="font-size: 20px; margin-left: 50px; margin-top: 50px">
@@ -163,12 +191,14 @@
 <script lang="tsx">
 import { Component, Prop, Vue, Model, Watch } from "vue-property-decorator";
 import { get, post } from "@/util/request";
+import * as turf from "@turf/turf";
 import org from "@/util/org";
 import axios from "axios";
 import { jsonp } from "vue-jsonp";
 import any = jasmine.any;
 import { da } from "date-fns/locale";
 import { Moment } from "moment";
+import coordtransform from "coordtransform";
 @Component({
   components: {},
 })
@@ -183,6 +213,8 @@
     ];
   }
   private mounted() {
+    let a = coordtransform.bd09togcj02(120.16669577, 33.35188998);
+    console.log("bd09togcj02:", coordtransform.gcj02towgs84(a[0], a[1]));
     this.roadmap();
   }
   private dateFormat(fmt: string, date: any) {
@@ -200,7 +232,7 @@
         RegExp.$1,
         (date.getFullYear() + "").substr(4 - RegExp.$1.length)
       );
-    for (var k in o)
+    for (let k in o)
       if (new RegExp("(" + k + ")").test(fmt))
         fmt = fmt.replace(
           RegExp.$1,
@@ -211,12 +243,26 @@
     return fmt;
   }
   private map: any;
+  private drawingManager: any;
   private roadmap() {
-    this.map = new BMapGL.Map("roadmap");
+    this.map = new BMapGL.Map("roadmap", {
+      enableMapClick: false, //������������������
+    });
     // ������������������������������������
-    var point = new BMapGL.Point(116.404, 39.915);
+    let point = new BMapGL.Point(116.404, 39.915);
     this.map.centerAndZoom("���������", 15);
     this.map.enableScrollWheelZoom(true); // ������������������������������������������������������s
+    this.drawingManager = new BMapGLLib.DrawingManager(this.map, {
+      // isOpen: true, // ������������������������
+      enableCalculate: false, // ������������������������������
+      enableSorption: true, // ������������������������������
+      sorptiondistance: 20, // ������������������
+      circleOptions: this.styleOptions, // ������������
+      polylineOptions: this.styleOptions, // ������������
+      polygonOptions: this.styleOptions, // ������������������
+      rectangleOptions: this.styleOptions, // ���������������
+      labelOptions: this.labelOptions, // label������
+    });
   }
   private dataSource: any[] = [];
   private visibleCreateModal1: boolean = false;
@@ -276,6 +322,12 @@
         <a-divider type="vertical" />
         <a onClick={() => this.handleEditbatch(record)}> ������������ </a>
         <a-divider type="vertical" />
+        <a onClick={() => this.canvasbatch(record)}> ������������������ </a>
+        <a-divider type="vertical" />
+        <a onClick={() => this.handleEditCanves(record)}> ������������ </a>
+        <a-divider type="vertical" />
+        <a onClick={() => this.handleShowPolygon(record)}> ������������ </a>
+        <a-divider type="vertical" />
         <a-popconfirm
           title="������������������"
           ok-text="������"
@@ -287,7 +339,7 @@
       </div>
     );
   }
-  private deleteDevice(record) {
+  private deleteDevice(record: any) {
     get("coordinate/deleteCruiserRoad", {
       id: record.coordinateId,
     }).then((res) => {
@@ -299,7 +351,7 @@
   private pointshow: boolean = false;
   private batchid: any = 0;
   private batchshow: boolean = false;
-  private handleEditbatch(record) {
+  private handleEditbatch(record: any) {
     this.check = false;
     this.startstate = "batch";
     this.batchshow = true;
@@ -316,10 +368,13 @@
     this.endtime = "";
   }
   private insertbatch() {
+    console.log("this.starttime", this.starttime);
+    console.log("this.starttime", this.endtime);
     post("coordinateDetail/batch", {
-      coordinateId: this.batchid,
+      type: "0",
       time1: this.starttime,
       time2: this.endtime,
+      coordinateId: this.batchid,
       mac: this.carvalue,
     }).then((res) => {
       console.log(res);
@@ -329,9 +384,74 @@
       // this.selectCar()
     });
   }
+  // ������������������
+  showAllPolygon() {
+    console.log("this.dataSource", this.dataSource);
+    this.dataSource.forEach((item: any) => {
+      if (item.bdValues) {
+        let pointList = item.bdValues.map((item: any) => {
+          return new BMapGL.Point(item.lng, item.lat);
+        });
+        let polygon = new BMapGL.Polygon([...pointList]);
+        console.log("polygon", polygon);
+        this.map.addOverlay(polygon);
+      }
+    });
+  }
+  // ������������
+  handleShowPolygon(record: any) {
+    console.log(record);
+    if (record.bdValues) {
+      let pointList = record.bdValues.map((item: any) => {
+        return new BMapGL.Point(item.lng, item.lat);
+      });
+      let polygon = new BMapGL.Polygon([...pointList]);
+      console.log("polygon", polygon);
+      this.map.addOverlay(polygon);
+    }
+  }
+  // ������������
+  private handleEditCanves(record: any) {
+    console.log("this.turfPolygon", this.turfPolygon);
+    if (this.roadbaiduPolygon.length > 0) {
+      post("coordinate/updateCruiserRoad", {
+        coordinateId: record.coordinateId,
+        bdValue: this.roadbaiduPolygon,
+        value: this.road84Polygon,
+      }).then((res) => {
+        this.$message.success("������������");
+        this.selectLu();
+      });
+    } else {
+      this.$message.warning("���������������");
+    }
+  }
+  private canvasbatch(record: any) {
+    let ptsWithin = turf.pointsWithinPolygon(this.multiPt, this.turfPolygon);
+    let data: { flylon: number; flylat: number }[] = [];
+    turf.coordEach(ptsWithin, (currentCoord) => {
+      data.push({
+        flylon: currentCoord[0],
+        flylat: currentCoord[1],
+      });
+    });
+    console.log("data", data);
+    this.check = false;
+    this.startstate = "batch";
+    post("coordinateDetail/batch", {
+      type: "1",
+      coordinateId: record.coordinateId,
+      list: data,
+      mac: this.carvalue,
+    }).then((res) => {
+      console.log(res);
+      this.$message.success(res.data.message);
+      // this.selectCar()
+    });
+  }
   private upa = "";
   private recordid: any = 0;
-  private handleEditModalVisible(record) {
+  private handleEditModalVisible(record: any) {
     console.log("dataList", this.dataList);
     this.check = false;
     this.handlebatch();
@@ -438,7 +558,20 @@
       // console.log(this.carDate,'this.carDate');
       this.carDate = [];
       this.pointshow = false;
+      this.map.removeOverlay();
       this.setMarker(res);
+    });
+  }
+  reosurce() {
+    console.log("this.timevalue", this.timevalue);
+    post("coordinateDetail/queryAll", {
+      mac: this.carvalue,
+      time1: this.timevalue[0],
+      time2: this.timevalue[1],
+    }).then((res) => {
+      console.log(res.data.data, "res");
+      this.$message.success("������������");
+      // console.log(this.carDate,'this.carDate');
     });
   }
   private markerdata: any = [];
@@ -451,14 +584,85 @@
   private endtime: any = "";
   private InfoWindow = null;
   private startstate: any = "none";
-  private setMarker(res) {
+  private styleOptions = {
+    strokeColor: "#5E87DB", // ������������
+    fillColor: "#5E87DB", // ������������������������������������������������������������
+    strokeWeight: 2, // ���������������������������������
+    strokeOpacity: 1, // ������������������������������0-1
+    fillOpacity: 0.2, // ������������������������������0-1
+  };
+  private labelOptions = {
+    borderRadius: "2px",
+    background: "#FFFBCC",
+    border: "1px solid #E1E1E1",
+    color: "#703A04",
+    fontSize: "12px",
+    letterSpacing: "0",
+    padding: "5px",
+  };
+  private actNav: String = "";
+  private clearPolygon() {
+    //������������overlays
+    let overlays = this.map.getOverlays();
+    this.drawingManager.clearOverlays();
+    //���������Marker������������Label������
+    overlays.forEach((overlay: any) => {
+      if (overlay.toString() === "Polygon") {
+        this.map.removeOverlay(overlay);
+      }
+    });
+    // this.map.clearOverlays();
+  }
+  private turfPolygon: any = null;
+  private roadbaiduPolygon: any = [];
+  private road84Polygon: any = [];
+  private draw(drawingType: String) {
+    console.log("new BMapGLLib", this.drawingManager);
+    this.actNav = drawingType;
+    if (
+      this.drawingManager._isOpen &&
+      this.drawingManager.getDrawingMode() === drawingType
+    ) {
+      this.drawingManager.close();
+    } else {
+      this.drawingManager.setDrawingMode(drawingType);
+      this.drawingManager.open();
+    }
+    // ������������������������������
+    this.drawingManager.addEventListener("overlaycomplete", (e: any) => {
+      // ������������������
+      this.actNav = "";
+      const polygon = e.overlay;
+      // ���������������������������
+      const polygonPoints = polygon.getPath();
+      this.roadbaiduPolygon = polygonPoints;
+      let transformationPoints = polygonPoints.map((coord: any) => {
+        const [x, y] = [coord.lng, coord.lat];
+        const [lng1, lat1] = coordtransform.bd09togcj02(x, y);
+        const [lng2, lat2] = coordtransform.gcj02towgs84(lng1, lat1);
+        return { lng: lng2, lat: lat2 };
+      });
+
+      this.road84Polygon = transformationPoints;
+      console.log("polygonPoints2", transformationPoints);
+      this.turfPolygon = turf.polygon([
+        transformationPoints.map((item: any) => [item.lng, item.lat]),
+      ]);
+    });
+  }
+  private multiPt: any = [];
+  private setMarker(res: any) {
     const that = this;
     that.carDate = [];
     that.carDataList = [];
-    for (var i = 0; i < res.data.data.rsData.length; i++) {
+    let pointSlint = [];
+
+    for (let i = 0; i < res.data.data.rsData.length; i++) {
       that.carDate.push(res.data.data.rsData[i]);
+      pointSlint.push(res.data.data.rsData[i].data.split("_").map(Number));
     }
-    for (var i = 0; i < res.data.data.data.length; i++) {
+    this.multiPt = turf.points([...pointSlint]);
+    for (let i = 0; i < res.data.data.data.length; i++) {
       that.carDataList.push(res.data.data.data[i]);
     }
     that.map.clearOverlays();
@@ -467,17 +671,17 @@
     if (res.status === 200) {
       for (let i = 0; i < that.carDate.length; i++) {
         //������������point
-        var myIcon = new BMapGL.Icon(
+        let myIcon = new BMapGL.Icon(
           require("@/assets/723cd95f31481a502d495b2d814d658.png"),
           new BMapGL.Size(50, 50),
           {}
         );
-        var startIcon = new BMapGL.Icon(
+        let startIcon = new BMapGL.Icon(
           require("@/assets/start.png"),
           new BMapGL.Size(50, 50),
           {}
         );
-        var endIcon = new BMapGL.Icon(
+        let endIcon = new BMapGL.Icon(
           require("@/assets/end.png"),
           new BMapGL.Size(50, 50),
           {}
@@ -488,28 +692,34 @@
         );
         bPoints.push(statePoint);
         if (i === 0) {
-          that.marker[i] = new BMapGL.Marker(statePoint, { icon: startIcon });
+          that.marker[i] = new BMapGL.Marker(statePoint, {
+            icon: startIcon,
+          });
           that.marker[i].customData = {
             data: that.carDate[i].data,
             state: that.carDate[i].state,
           };
           that.marker[i].iconPng = "startIcon";
         } else if (i === that.carDate.length - 1) {
-          that.marker[i] = new BMapGL.Marker(statePoint, { icon: endIcon });
+          that.marker[i] = new BMapGL.Marker(statePoint, {
+            icon: endIcon,
+          });
           that.marker[i].customData = {
             data: that.carDate[i].data,
             state: that.carDate[i].state,
           };
           that.marker[i].iconPng = "endIcon";
         } else {
-          that.marker[i] = new BMapGL.Marker(statePoint, { icon: myIcon });
+          that.marker[i] = new BMapGL.Marker(statePoint, {
+            icon: myIcon,
+          });
           that.marker[i].customData = {
             data: that.carDate[i].data,
             state: that.carDate[i].state,
           };
           that.marker[i].iconPng = "myIcon";
         }
-        var infoWindow = "";
+        let infoWindow = "";
         //that.marker[i].name = that.carDate[i].time;
         that.marker[i].on("mouseover", function(e) {
           infoWindow = new BMapGL.InfoWindow(
@@ -582,7 +792,7 @@
       for (let i = 0; i < that.carDataList.length; i++) {
         // console.log(that.carDataList[i],'that.carDataList[i]');
         //������������point
-        var myIcon = new BMapGL.Icon(
+        let myIcon = new BMapGL.Icon(
           require("@/assets/fb259ce2e368f6853a58b91d6f6b293.png"),
           new BMapGL.Size(50, 50)
         );
@@ -593,7 +803,9 @@
         // console.log(statePoint,'statePoint');
         aPoints.push(statePoint);
         //���marker���������data��������� ������������������
-        that.markerdata[i] = new BMapGL.Marker(statePoint, { icon: myIcon });
+        that.markerdata[i] = new BMapGL.Marker(statePoint, {
+          icon: myIcon,
+        });
         that.markerdata[i].customData = {
           data: that.carDataList[i].code,
           state: that.carDataList[i].state,
@@ -655,15 +867,15 @@
     }
   }
 
-  private setZoom(bPoints) {
-    var view = this.map.getViewport(eval(bPoints));
-    var mapZoom = view.zoom;
-    var centerPoint = view.center;
+  private setZoom(bPoints: any) {
+    let view = this.map.getViewport(eval(bPoints));
+    let mapZoom = view.zoom;
+    let centerPoint = view.center;
     this.map.centerAndZoom(centerPoint, mapZoom);
   }
   private selectLuName: any = null;
   private selectLu() {
-    var macType = null;
+    let macType = null;
     if (this.carvalue !== "������������������") {
       macType = this.carvalue;
     }
@@ -724,4 +936,40 @@
   left: 55%;
   z-index: 999;
 }
+.drawing-panel {
+  z-index: 200;
+  position: absolute;
+  top: 10rem;
+  margin-left: 2rem;
+  padding-left: 0;
+  border-radius: .25rem;
+  height: 47px;
+  box-shadow: 0 2px 6px 0 rgba(27, 142, 236, 0.5);
+}
+.bmap-btn {
+  border-right: 1px solid #d2d2d2;
+  float: left;
+  width: 64px;
+  height: 100%;
+  background-image: url(
+//api.map.baidu.com/library/DrawingManager/1.4/src/bg_drawing_tool.png);
+  cursor: pointer;
+  list-style: none;
+  padding: 0;
+}
+.drawing-panel .bmap-marker {
+  background-position: -65px 0;
+}
+.drawing-panel .bmap-polyline {
+  background-position: -195px 0;
+}
+.drawing-panel .bmap-rectangle {
+  background-position: -325px 0;
+}
+.drawing-panel .bmap-polygon {
+  background-position: -260px 0;
+}
+.drawing-panel .bmap-circle {
+  background-position: -130px 0;
+}
 </style>

--
Gitblit v1.8.0