From f5624d6a7ad32ee475e00edbad26bc98ea4629e1 Mon Sep 17 00:00:00 2001 From: riku <risaku@163.com> Date: 星期五, 10 五月 2024 17:35:54 +0800 Subject: [PATCH] 实时走航模块 --- src/utils/map/calculate.js | 57 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 57 insertions(+), 0 deletions(-) diff --git a/src/utils/map/calculate.js b/src/utils/map/calculate.js index 058531f..505d082 100644 --- a/src/utils/map/calculate.js +++ b/src/utils/map/calculate.js @@ -4,6 +4,52 @@ import { map } from './index_old'; +function _prepare4convert(lnglats) { + var coor = []; + var maxLength = 1000; + var start = 0; + var end = start + maxLength; + while (end <= lnglats.length) { + coor.push(lnglats.slice(start, end)); + start += maxLength; + end += maxLength; + } + if (start < lnglats.length) { + coor.push(lnglats.slice(start)); + } + return coor; +} + +function parse2LngLat(lnglats) { + // 鍒涘缓鍖呭惈4涓妭鐐圭殑鎶樼嚎鍙婃枃瀛楁爣娉� + var path = []; + lnglats.forEach(function (value) { + // eslint-disable-next-line no-undef + path.push(new AMap.LngLat(value[0], value[1])); + }); + return path; +} + +/** + * 灏唃ps缁忕含搴﹁浆鎹负楂樺痉鍦板浘缁忕含搴� + * @param {*} lnglats + * @param {*} callback + */ +function _convertLatlng(index, coor, lnglats, callback) { + if (index < coor.length) { + var path = parse2LngLat(coor[index]); + // eslint-disable-next-line no-undef + AMap.convertFrom(path, 'gps', function (status, result) { + if (result.info === 'ok') { + lnglats.push.apply(lnglats, result.locations); + _convertLatlng(index + 1, coor, lnglats, callback); + } + }); + } else { + callback(lnglats); + } +} + export default { /** * 鏍规嵁鍧愭爣鐐广�佽窛绂诲拰瑙掑害锛屽緱鍒板彟涓�涓潗鏍囩偣 @@ -55,5 +101,16 @@ coors_GD.push(p); } return coors_GD; + }, + + convertFromGPS: function (gps, callback) { + var coor = _prepare4convert(gps); + _convertLatlng(0, coor, [], function (result) { + var gd = []; + result.forEach((r) => { + gd.push([r.lng, r.lat]); + }); + callback(gd); + }); } }; -- Gitblit v1.9.3