无人机管理后台前端(已迁走)
新建工单,地图坐标保存,坐标系转换处理;
详情中地图坐标系转换去除;
2 files modified
1 files added
176 ■■■■ changed files
src/components/map-container/mapContainer.vue 8 ●●●● patch | view | raw | blame | history
src/utils/coordinateTransformation.js 103 ●●●●● patch | view | raw | blame | history
src/views/tickets/ticket.vue 65 ●●●● patch | view | raw | blame | history
src/components/map-container/mapContainer.vue
@@ -113,9 +113,7 @@
    if (!lng || !lat) return
    let [newLng, newLat] = DC.CoordTransform.GCJ02ToWGS84(lng, lat)
    let point = new DC.Point(new DC.Position(newLng, newLat))
    let point = new DC.Point(new DC.Position(lng, lat))
    pointLayer.addOverlay(point)
    window.$viewer?.zoomTo(pointLayer)
@@ -133,9 +131,7 @@
    const positionStr = data.map(item => {
        const [lng, lat] = item
        let [newLng, newLat] = DC.CoordTransform.GCJ02ToWGS84(lng, lat)
        return `${newLng}, ${newLat}`
        return `${lng}, ${lat}`
    }).join(';')
    let polyline = new DC.Polyline(positionStr)
src/utils/coordinateTransformation.js
New file
@@ -0,0 +1,103 @@
/*
 * @Author: GuLiMmo 2820890765@qq.com
 * @Date: 2024-06-12 13:51:57
 * @LastEditors: GuLiMmo 2820890765@qq.com
 * @LastEditTime: 2024-06-12 13:54:00
 * @FilePath: /bigScreen/src/utils/coordinateTransformation.js
 * @Description:
 * Copyright (c) 2024 by GuLiMmo, All Rights Reserved.
 */
const PI = Math.PI;
const a = 6378245.0;
const ee = 0.00669342162296594323;
export function wgs84ToGcj02(lng, lat) {
    if (out_of_china(lng, lat)) {
        return [lng, lat];
    } else {
        var dlat = transformlat(lng - 105.0, lat - 35.0);
        var dlng = transformlng(lng - 105.0, lat - 35.0);
        var radlat = (lat / 180.0) * PI;
        var magic = Math.sin(radlat);
        magic = 1 - ee * magic * magic;
        var sqrtmagic = Math.sqrt(magic);
        dlat = (dlat * 180.0) / (((a * (1 - ee)) / (magic * sqrtmagic)) * PI);
        dlng = (dlng * 180.0) / ((a / sqrtmagic) * Math.cos(radlat) * PI);
        var mglat = lat + dlat;
        var mglng = lng + dlng;
        return [mglng, mglat];
    }
}
export function gcj02ToWgs84(lng, lat) {
    if (out_of_china(lng, lat)) {
        return [lng, lat];
    } else {
        var dlat = transformlat(lng - 105.0, lat - 35.0);
        var dlng = transformlng(lng - 105.0, lat - 35.0);
        var radlat = (lat / 180.0) * PI;
        var magic = Math.sin(radlat);
        magic = 1 - ee * magic * magic;
        var sqrtmagic = Math.sqrt(magic);
        dlat = (dlat * 180.0) / (((a * (1 - ee)) / (magic * sqrtmagic)) * PI);
        dlng = (dlng * 180.0) / ((a / sqrtmagic) * Math.cos(radlat) * PI);
        var mglat = lat + dlat;
        var mglng = lng + dlng;
        return [lng * 2 - mglng, lat * 2 - mglat];
    }
}
function transformlat(lng, lat) {
    var ret =
        -100.0 +
        2.0 * lng +
        3.0 * lat +
        0.2 * lat * lat +
        0.1 * lng * lat +
        0.2 * Math.sqrt(Math.abs(lng));
    ret +=
        ((20.0 * Math.sin(6.0 * lng * PI) + 20.0 * Math.sin(2.0 * lng * PI)) *
            2.0) /
        3.0;
    ret +=
        ((20.0 * Math.sin(lat * PI) + 40.0 * Math.sin((lat / 3.0) * PI)) *
            2.0) /
        3.0;
    ret +=
        ((160.0 * Math.sin((lat / 12.0) * PI) +
            320 * Math.sin((lat * PI) / 30.0)) *
            2.0) /
        3.0;
    return ret;
}
function transformlng(lng, lat) {
    var ret =
        300.0 +
        lng +
        2.0 * lat +
        0.1 * lng * lng +
        0.1 * lng * lat +
        0.1 * Math.sqrt(Math.abs(lng));
    ret +=
        ((20.0 * Math.sin(6.0 * lng * PI) + 20.0 * Math.sin(2.0 * lng * PI)) *
            2.0) /
        3.0;
    ret +=
        ((20.0 * Math.sin(lng * PI) + 40.0 * Math.sin((lng / 3.0) * PI)) *
            2.0) /
        3.0;
    ret +=
        ((150.0 * Math.sin((lng / 12.0) * PI) +
            300.0 * Math.sin((lng / 30.0) * PI)) *
            2.0) /
        3.0;
    return ret;
}
// 判断是否在国内,不在国内则不做偏移
function out_of_china(lng, lat) {
    return (
        lng < 72.004 || lng > 137.8347 || lat < 0.8293 || lat > 55.8271 || false
    );
}
src/views/tickets/ticket.vue
@@ -463,6 +463,7 @@
</template>
<script>
import { gcj02ToWgs84, wgs84ToGcj02 } from '@/utils/coordinateTransformation'
import { getList, createTicket, getTicketInfo, flowEvent, getstatusCount, getStepInfo } from '@/api/tickets/ticket'
import { export_json_to_excel } from '@/utils/exportExcel'
import geoJson from '@/assets/geoJson.json'
@@ -1038,12 +1039,14 @@
          return
        }
        let [lng, lat] = this.disposeLocation(true, this.form)
        const submitData = {
          eventName: this.form.name,
          content: this.form.content,
          workType: "1",
          longitude: String(this.form.location[0]),
          latitude: String(this.form.location[1]),
          longitude: lng,
          latitude: lat,
          address: this.form.address,
          workOrderTypeDictKey: this.form.type,
          aiType: Array.isArray(this.form.algorithm) ? this.form.algorithm : [this.form.algorithm], // 传数组
@@ -1099,13 +1102,16 @@
        if (!handlerValue || handlerValue === '未分配') {
          handlerValue = undefined
        }
        let [lng, lat] = this.disposeLocation(true, this.form)
        const submitData = {
          id: this.form.id,
          eventName: this.form.name || undefined,
          content: this.form.content || undefined,
          workType: "1",
          longitude: this.form.location?.[0] ? String(this.form.location[0]) : undefined,
          latitude: this.form.location?.[1] ? String(this.form.location[1]) : undefined,
          longitude: lng,
          latitude: lat,
          address: this.form.address || undefined,
          workOrderTypeDictKey: this.form.type || undefined,
          aiType: this.form.algorithm && this.form.algorithm.length > 0
@@ -1873,13 +1879,19 @@
        photos: [],
      }
      this.form.location = Array.isArray(row.location) && row.location.length >= 2
        ? [
          Number(row.location[0]),
          Number(row.location[1]),
      let curLocation = []
      if (Array.isArray(row.location) && row.location.length >= 2) {
        let [lng, lat] = this.disposeLocation(false, row)
        curLocation = [
          lng,
          lat,
          row.location[2] || row.address || ''
        ]
        : []
      }
      this.form.location = curLocation
      this.form.address = this.form.location[2] || ''
      // 设置地图中心点
      if (Array.isArray(this.form.location) && this.form.location.length >= 2) {
@@ -1907,16 +1919,6 @@
      })
      this.dialogVisible = true
    },
    // 添加数据监听以确保算法数据的响应性
    watch: {
      'form.algorithm': {
        handler (newVal) {
          console.log('算法值变化:', newVal)
        },
        deep: true
      }
    },
    // 添加删除方法
@@ -2195,6 +2197,31 @@
      if (lastDot === -1) return url
      return url.slice(0, lastDot) + '_show' + url.slice(lastDot)
    },
    /**
     * 坐标转换方法处理
     * @param goWgs84 是否由国测转换到84,默认false----由84转换到国测
     */
    disposeLocation (goWgs84 = false, data) {
      let lng, lat
      if (goWgs84) {
        lng = data.location?.[0] ? String(data.location[0]) : undefined
        lat = data.location?.[1] ? String(data.location[1]) : undefined
        if (lng && lat) {
          [lng, lat] = gcj02ToWgs84(Number(lng), Number(lat))
        }
      } else {
        lng = Number(data.location[0])
        lat = Number(data.location[1])
        if (lng && lat) {
          [lng, lat] = wgs84ToGcj02(Number(lng), Number(lat))
        }
      }
      return [String(lng), String(lat)]
    }
  },
}
</script>