🐛 运单轨迹与实时定位WGS-84转GCJ-02后再绘制高德地图

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-10-08 19:37:27 +08:00
parent d1f804056e
commit 570fbeb537
2 changed files with 103 additions and 6 deletions
@@ -3642,6 +3642,7 @@ import { addressTypeOptions } from '@/option/base/common-address';
import { packageOptions } from '@/option/business/common';
import { formatUpdateUserName } from '@/utils/audit';
import { getToken, isAdministrator } from '@/utils/auth';
import { wgs84ToGcj02 } from '@/utils/coordinate';
import { openImportDialog } from '@/utils/import-excel';
import { normalizeMapSearchResults, searchAmapPlaceText } from '@/utils/map-search';
import { loadMeasurementUnitOptions } from '@/utils/measurement-unit';
@@ -6306,12 +6307,14 @@ export default {
}
},
async renderWaybillLocateMap(locateInfo) {
const longitude = Number(locateInfo?.longitude);
const latitude = Number(locateInfo?.latitude);
if (!Number.isFinite(longitude) || !Number.isFinite(latitude)) {
const rawLongitude = Number(locateInfo?.longitude);
const rawLatitude = Number(locateInfo?.latitude);
if (!Number.isFinite(rawLongitude) || !Number.isFinite(rawLatitude)) {
this.$message.warning('定位坐标无效,无法在地图上展示');
return;
}
// LBS 返回 WGS-84,高德地图使用 GCJ-02,绘制前需转换
const [longitude, latitude] = wgs84ToGcj02(rawLongitude, rawLatitude);
try {
await this.loadAmap();
await this.$nextTick();
@@ -6332,7 +6335,7 @@ export default {
`<div><b>${locateInfo.vehicleNo || '车辆位置'}</b></div>`,
locateInfo.locateTime ? `<div>时间:${locateInfo.locateTime}</div>` : '',
locateInfo.address ? `<div>地址:${locateInfo.address}</div>` : '',
`<div>坐标:${longitude}, ${latitude}</div>`,
`<div>坐标:${rawLongitude}, ${rawLatitude}</div>`,
`</div>`,
].join('');
this.waybillLocateInfoWindow = new window.AMap.InfoWindow({
@@ -6359,9 +6362,17 @@ export default {
}
},
async renderWaybillTrackMap(points) {
// LBS 轨迹为 WGS-84,绘制到高德前转为 GCJ-02
const path = (points || [])
.map(item => [Number(item.longitude), Number(item.latitude)])
.filter(item => Number.isFinite(item[0]) && Number.isFinite(item[1]));
.map(item => {
const longitude = Number(item.longitude);
const latitude = Number(item.latitude);
if (!Number.isFinite(longitude) || !Number.isFinite(latitude)) {
return null;
}
return wgs84ToGcj02(longitude, latitude);
})
.filter(Boolean);
if (!path.length) {
this.$message.warning('轨迹坐标无效,无法在地图上展示');
return;