From 247dacca9784396eeaf17ef3e85c7ae646b786e4 Mon Sep 17 00:00:00 2001
From: quanyawei <401863037@qq.com>
Date: Wed, 28 Aug 2024 15:56:50 +0800
Subject: [PATCH] Merge branch 'feature_1.0'

---
 src/views/list/road.vue | 1071 ++++++++++++++++++++++++++++++++++++++++-------------------
 1 files changed, 729 insertions(+), 342 deletions(-)

diff --git a/src/views/list/road.vue b/src/views/list/road.vue
index f5fc431..ebdfce7 100644
--- a/src/views/list/road.vue
+++ b/src/views/list/road.vue
@@ -2,17 +2,10 @@
   <div style="display: flex; overflow: hidden">
     <div class="left">
       <div class="left-one">
-        <a-range-picker
-          v-model="timevalue"
-          show-time
-          @ok="change1()"
-          valueFormat="yyyy-MM-DD HH:MM:SS"
-          style="width: 175px"
-        />
         <a-select
           ref="select"
           v-model="carvalue"
-          style="width: 180px; margin-left: 10px"
+          style="width: 180px"
           placeholder="������������������"
         >
           <a-select-option
@@ -22,6 +15,13 @@
             >{{ item.name }}</a-select-option
           >
         </a-select>
+        <a-range-picker
+          :show-time="{ format: 'HH:mm' }"
+          @ok="change1"
+          format="YYYY-MM-DD HH:mm"
+          style="width: 175px; margin-left: 10px"
+        />
+
         <a-button type="primary" style="margin-left: 10px" @click="selectCar"
           >������</a-button
         >
@@ -29,7 +29,19 @@
           >������</a-button
         >
       </div>
-
+      <div class="left-five">
+        <a-input
+          style="width: 300px; margin-left: 0px"
+          v-model="selectLuName"
+          placeholder="���������������������"
+        />
+        <a-button type="primary" style="margin-left: 10px" @click="selectLu"
+          >������</a-button
+        >
+        <a-button type="primary" style="margin-left: 10px" @click="clearPolygon"
+          >������������</a-button
+        >
+      </div>
       <div class="left-two">
         <a-table
           :dataSource="dataSource"
@@ -41,6 +53,15 @@
         ></a-table>
       </div>
       <div class="left-three" style="margin-top: 20px">
+        <a-button type="primary" style="margin-left: 10px" @click="reosurce"
+          >������������������</a-button
+        >
+        <a-button
+          type="primary"
+          style="margin-left: 10px"
+          @click="showAllPolygon"
+          >������������������</a-button
+        >
         <a-button
           v-show="upa === ''"
           type="primary"
@@ -113,26 +134,42 @@
       <div>
         <div>
           <span style="font-size: 17.5px; color: black; margin-left: 50px"
-            >������ :</span
+            >������������ :</span
           >
           <a-input
             style="width: 300px; margin-left: 15px"
-            placeholder="���������������"
+            placeholder="���������������������"
             v-model="startLu"
           />
         </div>
-        <div style="margin-top: 10px; margin-left: 50px">
+        <!-- <div style="margin-top: 10px; margin-left: 50px">
           <span style="font-size: 17.5px; color: black">������ :</span>
           <a-input
             style="width: 300px; margin-left: 15px"
             placeholder="���������������"
             v-model="endLu"
           />
-        </div>
+        </div> -->
       </div>
     </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">
@@ -152,403 +189,714 @@
 </template>
 
 <script lang="tsx">
-import {Component, Prop, Vue, Model, Watch} from "vue-property-decorator";
+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 { jsonp } from "vue-jsonp";
 import any = jasmine.any;
-
-
+import { da } from "date-fns/locale";
+import { Moment } from "moment";
+import coordtransform from "coordtransform";
 @Component({
-  components: {
-    
-  }
+  components: {},
 })
 export default class road extends Vue {
-  private timevalue:any=[]
-  private change1(){
-    console.log(this.timevalue);
+  private timevalue: any = [];
+
+  private change1(dates: Moment[]) {
+    this.timevalue = [];
+    this.timevalue = [
+      dates[0].format("YYYY-MM-DD HH:mm"),
+      dates[1].format("YYYY-MM-DD HH:mm"),
+    ];
   }
-   private  mounted() {
+  private mounted() {
+    let a = coordtransform.bd09togcj02(120.16669577, 33.35188998);
+    console.log("bd09togcj02:", coordtransform.gcj02towgs84(a[0], a[1]));
     this.roadmap();
   }
-  private map:any
-  private roadmap(){
-      this.map = new BMapGL.Map('roadmap')
-      // ������������������������������������
-      var point = new BMapGL.Point(116.404, 39.915);
-      this.map.centerAndZoom('���������', 15);
-      this.map.enableScrollWheelZoom(true) // ������������������������������������������������������s
+  private dateFormat(fmt: string, date: any) {
+    let o = {
+      "M+": date.getMonth() + 1, //������
+      "d+": date.getDate(), //���
+      "h+": date.getHours(), //������
+      "m+": date.getMinutes(), //���
+      "s+": date.getSeconds(), //���
+      "q+": Math.floor((date.getMonth() + 3) / 3), //������
+      S: date.getMilliseconds(), //������
+    };
+    if (/(y+)/.test(fmt))
+      fmt = fmt.replace(
+        RegExp.$1,
+        (date.getFullYear() + "").substr(4 - RegExp.$1.length)
+      );
+    for (let k in o)
+      if (new RegExp("(" + k + ")").test(fmt))
+        fmt = fmt.replace(
+          RegExp.$1,
+          RegExp.$1.length == 1
+            ? o[k]
+            : ("00" + o[k]).substr(("" + o[k]).length)
+        );
+    return fmt;
+  }
+  private map: any;
+  private drawingManager: any;
+  private roadmap() {
+    this.map = new BMapGL.Map("roadmap", {
+      enableMapClick: false, //������������������
+    });
+    // ������������������������������������
+    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;
-  private handleCreateModalCancel1():any{
-    this.visibleCreateModal1=false;
+  private handleCreateModalCancel1(): any {
+    this.visibleCreateModal1 = false;
   }
   private selectedRows: any[] = [];
   private tableLoading: boolean = false;
   private columns: any[] = [
     {
-      title: "������",
-      dataIndex: "startPoint"
+      title: "������",
+      dataIndex: "key",
+      key: "key",
+      align: "center",
+      customRender: (text, record, index) => `${index + 1}`,
+      width: 60,
     },
     {
-      title: "������",
-      dataIndex: "endPoint"
+      title: "������������",
+      dataIndex: "startPoint",
+      align: "center",
     },
     {
       title: "������",
-      customRender: this.opRender
-    }
+      customRender: this.opRender,
+      align: "center",
+    },
   ];
-  private openIn(){
-    this.visibleCreateModal1=true;
+  private openIn() {
+    this.visibleCreateModal1 = true;
   }
-  private startLu:any=''
-  private endLu:any=''
-  private insertCarLu(){
-    post('coordinate/interCruiserRoad',{
-      startPoint:this.startLu,
-      endPoint:this.endLu
-    }).then((res)=>{
+  private startLu: any = "";
+  private endLu: any = "";
+  private insertCarLu() {
+    if (this.carvalue === "������������������") {
+      this.$message.warning("���������������������������!");
+      return;
+    }
+
+    post("coordinate/interCruiserRoad", {
+      startPoint: this.startLu,
+      mac: this.carvalue,
+    }).then((res) => {
       console.log(res);
-      this.$message.success(res.data.message)
-      this.visibleCreateModal1=false;
-      this.startLu=''
-      this.endLu=''
-      this.selectLu()
-    })
+      this.$message.success(res.data.message);
+      this.visibleCreateModal1 = false;
+      this.startLu = "";
+      this.endLu = "";
+      this.selectLu();
+    });
   }
+
   private opRender(text: string, record: any, index: number) {
     return (
-        <div style="width:180px">
-          <a onClick={() => this.handleEditModalVisible(record)}>
-            {" "}
-            ������{" "}
-          </a>
-          <a-divider type="vertical"/>
-           <a onClick={() => this.handleEditbatch(record)}>
-            {" "}
-            ������������{" "}
-          </a>
-          <a-divider type="vertical"/>
-          <a-popconfirm
-              title="������������������"
-              ok-text="������"
-              cancel-text="������"
-              onConfirm={() => this.deleteDevice(record)}
-          >
-            <a href="#">������</a>
-          </a-popconfirm>
-        </div>
-        )
+      <div style="width:180px;text-align:left">
+        <a onClick={() => this.handleEditModalVisible(record)}> ������ </a>
+        <a-divider type="vertical" />
+        <a onClick={() => this.handleEditbatch(record)}> ������������ </a>
+        <a-divider type="vertical" />
+        <a-popconfirm
+          title="������������������"
+          ok-text="������"
+          cancel-text="������"
+          onConfirm={() => this.deleteDevice(record)}
+        >
+          <a href="#">������</a>
+        </a-popconfirm>
+        <br></br>
+        <a onClick={() => this.canvasbatch(record)}> ������������������ </a>
+        <a-divider type="vertical" />
+        <a onClick={() => this.handleEditCanves(record)}> ������������ </a>
+        <br></br>
+        <a onClick={() => this.handleShowPolygon(record)}> ������������ </a>
+      </div>
+    );
   }
-  private deleteDevice(record){
-    get('coordinate/deleteCruiserRoad',{
-      id:record.coordinateId
-    }).then((res)=>{
+  private deleteDevice(record: any) {
+    get("coordinate/deleteCruiserRoad", {
+      id: record.coordinateId,
+    }).then((res) => {
       console.log(res);
-      this.$message.success(res.data.message)
-      this.selectLu()
-    })
+      this.$message.success(res.data.message);
+      this.selectLu();
+    });
   }
-  private pointshow:boolean=false
-  private batchid:any=0
-  private batchshow:boolean=false
-  private handleEditbatch(record){
-    this.check=false
-    this.startstate='batch'
-    this.batchshow=true
-    this.selectCar();
-    this.batchid=record.coordinateId
+  private pointshow: boolean = false;
+  private batchid: any = 0;
+  private batchshow: boolean = false;
+  private handleEditbatch(record: any) {
+    this.check = false;
+    this.startstate = "batch";
+    this.batchshow = true;
+    // this.selectCar();
+    this.batchid = record.coordinateId;
   }
-  private handlebatch(){
-    this.selectCar()
-    this.batchshow=false
+  private handlebatch() {
+    // this.selectCar()
+    this.batchshow = false;
     this.handlenull();
   }
-  private handlenull(){
-    this.starttime=''
-    this.endtime=''
+  private handlenull() {
+    this.starttime = "";
+    this.endtime = "";
   }
-  private insertbatch(){
-     post('coordinateDetail/batch',{
-       coordinateId:this.batchid,
-        time1:this.starttime,
-        time2:this.endtime,
-        mac:this.carvalue,
-    }).then((res=>{
+  private insertbatch() {
+    console.log("this.starttime", this.starttime);
+    console.log("this.starttime", this.endtime);
+    post("coordinateDetail/batch", {
+      type: "0",
+      time1: this.starttime,
+      time2: this.endtime,
+      coordinateId: this.batchid,
+      mac: this.carvalue,
+    }).then((res) => {
       console.log(res);
-      this.$message.success(res.data.message)
-      this.starttime=''
-      this.endtime=''
-      this.selectCar()
-    }))
+      this.$message.success(res.data.message);
+      this.starttime = "";
+      this.endtime = "";
+      // this.selectCar()
+    });
   }
-  private upa=''
-  private recordid:any=0
-  private handleEditModalVisible(record){
-    this.check=false
-    this.handlebatch()
-    this.startstate='none'
-    this.upa='upa'
-    this.recordid=record.coordinateId
-    if(this.carvalue==='������������������'){
-      this.$message.warning('������������������')
-      return
+  // ������������������
+  showAllPolygon() {
+    let macType = null;
+    if (this.carvalue !== "������������������") {
+      macType = this.carvalue;
     }
-    if(this.timevalue.length===0){
-      this.$message.warning('���������������')
-      return
+    get("coordinate/selectCruiserRoad", {
+      name: "",
+      mac: macType,
+    }).then((res) => {
+      res.data.data.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);
     }
-    post('coordinateDetail/select',{
-      coordinateId:record.coordinateId,
+  }
+  // ������������
+  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],
+      });
+    });
+    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: any) {
+    console.log("dataList", this.dataList);
+    this.check = false;
+    this.handlebatch();
+    this.startstate = "none";
+    this.dataList = [];
+    this.upa = "upa";
+    this.recordid = record.coordinateId;
+    if (this.carvalue === "������������������") {
+      this.$message.warning("������������������");
+      return;
+    }
+    if (this.timevalue.length === 0) {
+      this.$message.warning("���������������");
+      return;
+    }
+    post("coordinateDetail/select", {
+      coordinateId: record.coordinateId,
       // time1:'2023-08-05 00:00:00',
       // time2:'2023-08-06 00:00:00',
-      time1:this.timevalue[0],
-      time2:this.timevalue[1],
-      mac:this.carvalue,
-    }).then((res)=>{
-      console.log(res);
-      this.carDate=[]
-      this.pointshow=true
-      this.setMarker(res)
-    })
+      time1: this.timevalue[0],
+      time2: this.timevalue[1],
+      mac: this.carvalue,
+    }).then((res) => {
+      this.carDate = [];
+      this.pointshow = true;
+      this.setMarker(res);
+    });
   }
-  private openupa(){
-    post('coordinateDetail/insert',{
-      coordinateId:this.recordid,
-      data:this.dataList
-    }).then((res)=>{
-      console.log(res);
-      this.$message.success(res.data.message)
-      this.upa=''
-      this.dataList=[]
-      this.carDate=[]
-      this.selectCar()
-    })
+  private openupa() {
+    post("coordinateDetail/insert", {
+      coordinateId: this.recordid,
+      data: this.dataList,
+    }).then((res) => {
+      this.$message.success(res.data.message);
+      this.upa = "";
+      this.dataList = [];
+      this.carDate = [];
+      // this.selectCar()
+    });
   }
-  private inupa(){
-    this.upa=''
-    this.selectCar()
+  private inupa() {
+    this.upa = "";
+    // this.selectCar()
   }
-  private carvalue:any='������������������'
-  private carIndex:any=[]
-  private car(){
-    get('cruiserInfo/selectCruisers',{
-    }).then((res)=>{
-      this.carIndex=res.data.data;
+  private carvalue: any = "������������������";
+  private carIndex: any = [];
+  private car() {
+    get("cruiserInfo/selectCruisers", {}).then((res) => {
+      this.carIndex = res.data.data;
       console.log(this.carIndex);
-    })
+    });
   }
-  private check:boolean=false
-  private showfix:boolean=false
-  private messageshow:any=''
-  private selectCheck(){
-    if(this.carvalue==='������������������'){
-      this.$message.warning('������������������')
-      return
+  private check: boolean = false;
+  private showfix: boolean = false;
+  private messageshow: any = "";
+  private selectCheck() {
+    if (this.carvalue === "������������������") {
+      this.$message.warning("������������������");
+      return;
     }
-    if(this.timevalue.length===0){
-      this.$message.warning('���������������')
-      return
+    if (this.timevalue.length === 0) {
+      this.$message.warning("���������������");
+      return;
     }
-    get('cruiserInfo/getCruiserCompare',{
-      mac:this.carvalue,
+    get("cruiserInfo/getCruiserCompare", {
+      mac: this.carvalue,
       // time1:'2023-08-05 00:00:00',
       // time2:'2023-08-06 00:00:00'
-      time1:this.timevalue[0],
-      time2:this.timevalue[1]
-    }).then((res)=>{
-      console.log(res.data.data,'res');
-      this.messageshow=res.data.data.message
-      this.showfix=true
+      time1: this.timevalue[0],
+      time2: this.timevalue[1],
+    }).then((res) => {
+      console.log(res.data.data, "res");
+      this.messageshow = res.data.data.message;
+      this.showfix = true;
       // this.check=true
-      this.carDate=[]
-      this.pointshow=false
-      this.setMarker(res)
-    })
+      this.carDate = [];
+      this.pointshow = false;
+      this.setMarker(res);
+    });
   }
-  private closemess(){
-    this.showfix=false
+  private closemess() {
+    this.showfix = false;
   }
-  private carDate:any=[]
-  private selectCar(){
+  private carDate: any = [];
+  private selectCar() {
     console.log(this.timevalue);
-    if(this.carvalue==='������������������'){
-      this.$message.warning('������������������')
-      return
+    if (this.carvalue === "������������������") {
+      this.$message.warning("������������������");
+      return;
     }
-    if(this.timevalue.length===0){
-      this.$message.warning('���������������')
-      return
+    if (this.timevalue.length === 0) {
+      this.$message.warning("���������������");
+      return;
     }
-    get('cruiserInfo/getCruiserInFo',{
-      mac:this.carvalue,
+    console.log("this.timevalue", this.timevalue);
+    get("cruiserInfo/getCruiserInFo", {
+      mac: this.carvalue,
       // time1:'2023-08-05 00:00:00',
       // time2:'2023-08-06 00:00:00'
-      time1:this.timevalue[0],
-      time2:this.timevalue[1]
-    }).then((res)=>{
-      console.log(res.data.data,'res');
+      time1: this.timevalue[0],
+      time2: this.timevalue[1],
+    }).then((res) => {
+      console.log(res.data.data, "res");
       // console.log(this.carDate,'this.carDate');
-      this.carDate=[]
-      this.pointshow=false
-      this.setMarker(res)
-    })
+      this.carDate = [];
+      this.pointshow = false;
+      this.map.removeOverlay();
+      this.setMarker(res);
+    });
   }
-  private markerdata:any=[]
-  private marker:any=[]
-  private dataList:any=[]
-  private indataList:any=[]
-  private LudataList:any=[]
-  private carDataList:any=[]
-  private starttime:any=''
-  private endtime:any=''
-  private startstate:any='none'
-  private  setMarker(res) {
-    console.log(res);
-    const that=this
-     that.carDate=[]
-     that.carDataList=[]
-     for(var i=0;i<res.data.data.rsData.length;i++){
-        that.carDate.push(res.data.data.rsData[i])
+  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 = [];
+  private marker: any = [];
+  private dataList: any = [];
+  private indataList: any = [];
+  private LudataList: any = [];
+  private carDataList: any = [];
+  private starttime: any = "";
+  private endtime: any = "";
+  private InfoWindow = null;
+  private startstate: any = "none";
+  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);
       }
-       for(var i=0;i<res.data.data.data.length;i++){
-        that.carDataList.push(res.data.data.data[i])
-      }
-      console.log(that.carDate,'that.carDate');
-      console.log(that.carDataList,'that.carDataList');
-      that.map.clearOverlays()
-      let bPoints = []
-      let aPoints = []
-      if (res.status ===200) {
-        for (let i = 0; i < that.carDate.length; i++) {
-          //������������point
-          var myIcon = new BMapGL.Icon(require("@/assets/723cd95f31481a502d495b2d814d658.png"), new BMapGL.Size(50, 50), {
-            });
-          const statePoint = new BMapGL.Point(that.carDate[i].flylon,that.carDate[i].flylat);
-          bPoints.push(statePoint)
-          that.marker[i] = new BMapGL.Marker(statePoint,{icon:myIcon});
-          that.marker[i].customData = {data: that.carDate[i].data,state: that.carDate[i].state};
-          //������������������marker
-          that.map.addOverlay(that.marker[i]);
-          // if(that.check===false){
-          that.marker[i].addEventListener("click",function(){
-          console.log(that.carDate[i].data,'that.carDate[i].data');
-            switch(that.carDate[i].state){
-              case '1':
-                  that.marker[i].setIcon(new BMapGL.Icon(require("@/assets/fb259ce2e368f6853a58b91d6f6b293.png"), new BMapGL.Size(50, 50)
-              ));
-                that.carDate[i].state='2'
-                break;
-              case '2':
-                 that.marker[i].setIcon(new BMapGL.Icon(require("@/assets/723cd95f31481a502d495b2d814d658.png"), new BMapGL.Size(50, 50)
-              ));
-                that.carDate[i].state='1'
-            }
-                that.dataList.push({code:that.carDate[i].data,state:that.carDate[i].state});
-              if(that.startstate==='batch'){
-                if(that.starttime!==''&&that.endtime!==''){
-                  that.$message.warning('������������')
-                  return
-                }
-                 if(that.starttime===''){
-                  that.starttime=that.carDate[i].time
-                  }else{
-                    that.endtime=that.carDate[i].time
-                  }
-              }
-                
-                     
-            for (let i = 0; i < that.dataList.length; i++) {
-              for (let j = i + 1; j < that.dataList.length; j++) {
-                if (that.dataList[i].code == that.dataList[j].code) {
-                  that.dataList.splice(j, 1);
-                   if(that.dataList[i].state==='1'){
-                    that.dataList[i].state='2'
-                   }else{
-                    that.dataList[i].state='1'
-                   }
-                }
-              }
-            }
-          }); //������������
-        // }
-      }
+    });
+    // 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 };
+      });
 
-        for (let i = 0; i < that.carDataList.length; i++) {
-          // console.log(that.carDataList[i],'that.carDataList[i]');
-          //������������point
-          var myIcon = new BMapGL.Icon(require("@/assets/fb259ce2e368f6853a58b91d6f6b293.png"), new BMapGL.Size(50, 50));
-          const statePoint = new BMapGL.Point(that.carDataList[i].longitude,that.carDataList[i].latitude);
-          // console.log(statePoint,'statePoint');
-          aPoints.push(statePoint)
-          //���marker���������data��������� ������������������
-          that.markerdata[i] = new BMapGL.Marker(statePoint,{icon:myIcon});
-          that.markerdata[i].customData = {data: that.carDataList[i].code,state: that.carDataList[i].state,id:that.carDataList[i].id};
-          //������������������marker
-          that.map.addOverlay(that.markerdata[i]);
-          // if(that.check===false){
-          that.markerdata[i].addEventListener("click",function(){
-            switch(that.carDataList[i].state){
-              case '1':
-                 that.markerdata[i].setIcon(new BMapGL.Icon(require("@/assets/fb259ce2e368f6853a58b91d6f6b293.png"), new BMapGL.Size(50, 50)
-              ));
-              that.carDataList[i].state='2';
-              break;
-              case '2':
-                console.log(123);
-               that.markerdata[i].setIcon(new BMapGL.Icon(require("@/assets/723cd95f31481a502d495b2d814d658.png"), new BMapGL.Size(50, 50)
-              ));
-              that.carDataList[i].state='1';
-              break;
-            }
-                that.dataList.push({code:that.carDataList[i].code,state:that.carDataList[i].state,id:that.carDataList[i].id});
-              // console.log(that.dataList);
-            for (let i = 0; i < that.dataList.length; i++) {
-              for (let j = i + 1; j < that.dataList.length; j++) {
-                if (that.dataList[i].code == that.dataList[j].code) {
-                  that.dataList.splice(j, 1);
-                   if(that.dataList[i].state==='1'){
-                    that.dataList[i].state='2'
-                   }else{
-                    that.dataList[i].state='1'
-                   }
-                }
-              }
-            }
-          }); //������������
-        // }
-      }
+      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 = [];
+    let pointSlint = [];
 
-        //���������������������������������������
-        if(that.pointshow===false){
-          that.setZoom(bPoints)
-        }else{
-          that.setZoom(aPoints)
+    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));
+    }
+    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();
+    let bPoints = [];
+    let aPoints = [];
+    if (res.status === 200) {
+      for (let i = 0; i < that.carDate.length; i++) {
+        //������������point
+        let myIcon = new BMapGL.Icon(
+          require("@/assets/723cd95f31481a502d495b2d814d658.png"),
+          new BMapGL.Size(50, 50),
+          {}
+        );
+        let startIcon = new BMapGL.Icon(
+          require("@/assets/start.png"),
+          new BMapGL.Size(50, 50),
+          {}
+        );
+        let endIcon = new BMapGL.Icon(
+          require("@/assets/end.png"),
+          new BMapGL.Size(50, 50),
+          {}
+        );
+        const statePoint = new BMapGL.Point(
+          that.carDate[i].flylon,
+          that.carDate[i].flylat
+        );
+        bPoints.push(statePoint);
+        if (i === 0) {
+          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].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].customData = {
+            data: that.carDate[i].data,
+            state: that.carDate[i].state,
+          };
+          that.marker[i].iconPng = "myIcon";
         }
+        let infoWindow = "";
+        //that.marker[i].name = that.carDate[i].time;
+        that.marker[i].on("mouseover", function(e) {
+          infoWindow = new BMapGL.InfoWindow(
+            "������������:" + that.carDate[i].time
+          );
+          that.map.openInfoWindow(infoWindow, statePoint);
+        });
+
+        that.marker[i].on("mouseout", function(e) {
+          that.map.closeInfoWindow(infoWindow, statePoint);
+        });
+        // that.marker.setTitle(that.carDate[i].time);
+
+        //������������������marker
+        that.map.addOverlay(that.marker[i]);
+        // if(that.check===false){
+        that.marker[i].addEventListener("click", function() {
+          switch (that.carDate[i].state) {
+            case "1":
+              console.log("that.marker", that.marker[i]);
+              that.marker[i].setIcon(
+                new BMapGL.Icon(
+                  require("@/assets/fb259ce2e368f6853a58b91d6f6b293.png"),
+                  new BMapGL.Size(50, 50)
+                )
+              );
+              that.carDate[i].state = "2";
+              break;
+            case "2":
+              that.marker[i].setIcon(
+                new BMapGL.Icon(
+                  require("@/assets/723cd95f31481a502d495b2d814d658.png"),
+                  new BMapGL.Size(50, 50)
+                )
+              );
+              that.carDate[i].state = "1";
+          }
+          that.dataList.push({
+            code: that.carDate[i].data,
+            state: that.carDate[i].state,
+          });
+          if (that.startstate === "batch") {
+            if (that.starttime !== "" && that.endtime !== "") {
+              that.$message.warning("������������");
+              return;
+            }
+            if (that.starttime === "") {
+              that.starttime = that.carDate[i].time;
+            } else {
+              that.endtime = that.carDate[i].time;
+            }
+          }
+
+          for (let i = 0; i < that.dataList.length; i++) {
+            for (let j = i + 1; j < that.dataList.length; j++) {
+              if (that.dataList[i].code == that.dataList[j].code) {
+                that.dataList.splice(j, 1);
+                if (that.dataList[i].state === "1") {
+                  that.dataList[i].state = "2";
+                } else {
+                  that.dataList[i].state = "1";
+                }
+              }
+            }
+          }
+        }); //������������
+        // }
+      }
+
+      for (let i = 0; i < that.carDataList.length; i++) {
+        // console.log(that.carDataList[i],'that.carDataList[i]');
+        //������������point
+        let myIcon = new BMapGL.Icon(
+          require("@/assets/fb259ce2e368f6853a58b91d6f6b293.png"),
+          new BMapGL.Size(50, 50)
+        );
+        const statePoint = new BMapGL.Point(
+          that.carDataList[i].longitude,
+          that.carDataList[i].latitude
+        );
+        // console.log(statePoint,'statePoint');
+        aPoints.push(statePoint);
+        //���marker���������data��������� ������������������
+        that.markerdata[i] = new BMapGL.Marker(statePoint, {
+          icon: myIcon,
+        });
+        that.markerdata[i].customData = {
+          data: that.carDataList[i].code,
+          state: that.carDataList[i].state,
+          id: that.carDataList[i].id,
+        };
+        //������������������marker
+        that.map.addOverlay(that.markerdata[i]);
+        // if(that.check===false){
+        that.markerdata[i].addEventListener("click", function() {
+          switch (that.carDataList[i].state) {
+            case "1":
+              that.markerdata[i].setIcon(
+                new BMapGL.Icon(
+                  require("@/assets/fb259ce2e368f6853a58b91d6f6b293.png"),
+                  new BMapGL.Size(50, 50)
+                )
+              );
+              that.carDataList[i].state = "2";
+              break;
+            case "2":
+              console.log(123);
+              that.markerdata[i].setIcon(
+                new BMapGL.Icon(
+                  require("@/assets/723cd95f31481a502d495b2d814d658.png"),
+                  new BMapGL.Size(50, 50)
+                )
+              );
+              that.carDataList[i].state = "1";
+              break;
+          }
+          that.dataList.push({
+            code: that.carDataList[i].code,
+            state: that.carDataList[i].state,
+            id: that.carDataList[i].id,
+          });
+          // console.log(that.dataList);
+          for (let i = 0; i < that.dataList.length; i++) {
+            for (let j = i + 1; j < that.dataList.length; j++) {
+              if (that.dataList[i].code == that.dataList[j].code) {
+                that.dataList.splice(j, 1);
+                if (that.dataList[i].state === "1") {
+                  that.dataList[i].state = "2";
+                } else {
+                  that.dataList[i].state = "1";
+                }
+              }
+            }
+          }
+        }); //������������
+        // }
+      }
+
+      //���������������������������������������
+      if (that.pointshow === false) {
+        that.setZoom(bPoints);
+      } else {
+        that.setZoom(aPoints);
       }
     }
-    private setZoom(bPoints) {
-      var view = this.map.getViewport(eval(bPoints));
-      var mapZoom = view.zoom;
-      var centerPoint = view.center;
-      this.map.centerAndZoom(centerPoint, mapZoom);
-    }
-
-    private selectLu(){
-      get('coordinate/selectCruiserRoad',{
-      }).then((res)=>{
-        this.dataSource=res.data.data
-      })
-    }
-  private created () {
-    this.car()  
-    this.selectLu()
   }
 
+  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() {
+    let macType = null;
+    if (this.carvalue !== "������������������") {
+      macType = this.carvalue;
+    }
+    get("coordinate/selectCruiserRoad", {
+      name: this.selectLuName,
+      mac: macType,
+    }).then((res) => {
+      this.dataSource = res.data.data;
+    });
+  }
+  private created() {
+    this.car();
+    this.selectLu();
+  }
 }
 </script>
 
@@ -577,8 +925,11 @@
   height: 60px;
   border-bottom: 1px dashed gray;
 }
+.left-five {
+  margin-top: 20px;
+}
 .left-two {
-  margin-top: 30px;
+  margin-top: 10px;
 }
 .BMap_Marker.BMap_noprint {
   width: 23px;
@@ -592,4 +943,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