From 3b9c063e44b86dc7fb4f41dd656bba1d02707034 Mon Sep 17 00:00:00 2001 From: suixy <2277317060@qq.com> Date: Fri, 10 Oct 2025 18:10:13 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=98=BE=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/views/index.vue | 28 ++++++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/src/views/index.vue b/src/views/index.vue index ed3b85d..cb39be7 100644 --- a/src/views/index.vue +++ b/src/views/index.vue @@ -771,6 +771,29 @@ const getDistanceInMeters = (lon1, lat1, lon2, lat2) => { const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a)); return R * c; } + +function getXYDistanceFromMin(current, minPoint) { + const R = 6371000; // 地球半径(米) + const toRad = deg => deg * Math.PI / 180; + + // 计算两点之间某一维的距离 + const haversineDistance = (lat1, lon1, lat2, lon2) => { + const dLat = toRad(lat2 - lat1); + const dLon = toRad(lon2 - lon1); + const a = + Math.sin(dLat / 2) ** 2 + + Math.cos(toRad(lat1)) * Math.cos(toRad(lat2)) * Math.sin(dLon / 2) ** 2; + const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a)); + return R * c; + }; + + // 横向距离(经度方向) + const xDistance = haversineDistance(minPoint.lat, minPoint.lon, minPoint.lat, current.lon); + // 纵向距离(纬度方向) + const yDistance = haversineDistance(minPoint.lat, minPoint.lon, current.lat, minPoint.lon); + + return {xDistance, yDistance}; +} const processData = (data) => { // console.log('data',data.ty) // console.log('FodName', data.FodName) @@ -792,9 +815,10 @@ const processData = (data) => { } // console.log(data.Longitude > area.LonMin, data.Longitude < area.LonMax, data.Latitude > area.LatMin, data.Latitude < area.LatMax) if (data.Longitude > area.LonMin && data.Longitude < area.LonMax && data.Latitude > area.LatMin && data.Latitude < area.LatMax) { + let xAndy = getXYDistanceFromMin({lon: data.Longitude, lat: data.Latitude}, {lon: area.LonMin, lat: area.LatMin}) let location = { - x: getDistanceInMeters(data.Longitude, area.LonMin), - y: getDistanceInMeters(data.Latitude, area.LatMin), + x: xAndy.xDistance, + y: xAndy.yDistance, rotate: data.HeadingAngle // rotate: 0 }