From a41fe1fd72c328471f7e051245c86237bbc3e568 Mon Sep 17 00:00:00 2001
From: shuishen <1109946754@qq.com>
Date: Tue, 06 May 2025 15:01:20 +0800
Subject: [PATCH] 新建工单,地图坐标保存,坐标系转换处理; 详情中地图坐标系转换去除;
---
src/views/tickets/ticket.vue | 65 +++++++++++++++------
src/utils/coordinateTransformation.js | 103 ++++++++++++++++++++++++++++++++++
src/components/map-container/mapContainer.vue | 8 --
3 files changed, 151 insertions(+), 25 deletions(-)
diff --git a/src/components/map-container/mapContainer.vue b/src/components/map-container/mapContainer.vue
index 5cae64e..73ff5fa 100644
--- a/src/components/map-container/mapContainer.vue
+++ b/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)
diff --git a/src/utils/coordinateTransformation.js b/src/utils/coordinateTransformation.js
new file mode 100644
index 0000000..b451e3b
--- /dev/null
+++ b/src/utils/coordinateTransformation.js
@@ -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
+ );
+}
diff --git a/src/views/tickets/ticket.vue b/src/views/tickets/ticket.vue
index dbcbffb..d93ca5c 100644
--- a/src/views/tickets/ticket.vue
+++ b/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>
--
Gitblit v1.9.3