From c40500d288339cd9b2200f8f909e3cd5471c0c22 Mon Sep 17 00:00:00 2001 From: riku <risaku@163.com> Date: 星期五, 30 八月 2024 17:38:29 +0800 Subject: [PATCH] 1. 优化3D动画中风向的变化逻辑; 2. 修复折线图切换因子时,数据直接跳转至起始处的问题; 3. 折线图和表格加回风向因子; 4. 优化风向的均值计算为矢量计算,同时最大最小值不显示; 5. 新增表格数据导出功能; --- src/utils/map/util.js | 92 ++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 92 insertions(+), 0 deletions(-) diff --git a/src/utils/map/util.js b/src/utils/map/util.js index 3da926d..ee73357 100644 --- a/src/utils/map/util.js +++ b/src/utils/map/util.js @@ -1,4 +1,65 @@ import { map, isDragging } from '@/utils/map/index_old'; +import marks from '@/utils/map/marks'; + +/** + * 鍧愭爣闆嗗悎鐨勬渶瑗垮崡瑙掑拰鏈�涓滃寳瑙� + * @param {*} list + * list 鏄帴鍙h幏鍙栫殑鐐� 鐨勬暟缁� + */ +const getBound = (list) => { + const offset = 0.005; + let south = null; + let west = null; + let north = null; + let east = null; + for (let item of list) { + // 鎺掗櫎鏃犳晥缁忕含搴� + if (item[0] == 0 && item[1] == 0) { + continue; + } + if ((west && item[0] < west) || !west) { + west = item[0] - offset; + } + if ((south && item[1] < south) || !south) { + south = item[1] - offset; + } + if ((east && item[0] > east) || !east) { + east = item[0] + offset; + } + if ((north && item[1] > north) || !north) { + north = item[1] + offset; + } + } + if (!south || !west || !north || !east) { + return { sw: null, ne: null }; + } else { + return { sw: [west, south], ne: [east, north] }; + } +}; + +/** + * 鏍规嵁涓績鐐瑰嚭鍙戠殑鍗婂緞锛屽緱鍒板悎閫傜殑鍦板浘缂╂斁绯绘暟 + * 楂樺痉鍦板浘缂╂斁绯绘暟姣忓噺灏�1锛屽垯鍦板浘灞曠ず鐨勫疄闄呰窛绂绘斁澶�1鍊� + * 楂樺痉鍦板浘缂╂斁绯绘暟鑼冨洿[3, 18] + * @param {*} d + */ +const distanceToZoom = (d) => { + let baseDis = 250, + z = 0; + while (baseDis < d) { + baseDis *= 2; + z++; + } + + // 澶氫綑鐨勫湴鍥剧缉鏀剧郴鏁� + const x = (baseDis - d) / (baseDis / 2); + z -= x; + z = z < 0 ? 0 : z; + + z = 18 - z; + z = z < 3 ? 3 : z; + return z; +}; export default { setCenter(lnglat) { @@ -13,5 +74,36 @@ map.setCenter(lnglat); this.lasttime = now; } + }, + addViews(view) { + map.add(view); + }, + removeViews(view) { + map.remove(view); + }, + clearMap() { + marks.clearMassMarks(); + map.clearMap(); + }, + setFitView(views) { + if (views) { + map.setFitView(views); + } else { + map.setFitView(); + } + }, + setFitSector({ p, r }) { + this.setCenter(p); + const z = distanceToZoom(r); + map.setZoom(z); + }, + setBound(lnglats_GD) { + const { sw, ne } = getBound(lnglats_GD); + if (!sw || !ne) { + return; + } + // eslint-disable-next-line no-undef + var mybounds = new AMap.Bounds(sw, ne); // sw, ne > [xxx,xxx], [xxx,xxx] + map.setBounds(mybounds); } }; -- Gitblit v1.9.3