From ec763e1cb7dca873caf4afbc0dfde047b51753d3 Mon Sep 17 00:00:00 2001
From: riku <risaku@163.com>
Date: 星期五, 17 十月 2025 17:26:54 +0800
Subject: [PATCH] 2025.10.17
---
src/utils/map/util.js | 100 ++++++++++++++++++++++++++++++++++++++++++++++++-
1 files changed, 97 insertions(+), 3 deletions(-)
diff --git a/src/utils/map/util.js b/src/utils/map/util.js
index 3da926d..1b7b3a6 100644
--- a/src/utils/map/util.js
+++ b/src/utils/map/util.js
@@ -1,17 +1,111 @@
import { map, isDragging } from '@/utils/map/index_old';
+import marks from '@/utils/map/marks';
+import Layer from '@/utils/map/3dLayer';
+
+/**
+ * 鍧愭爣闆嗗悎鐨勬渶瑗垮崡瑙掑拰鏈�涓滃寳瑙�
+ * @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) {
- if (isDragging) {
+ setCenter(lnglat, ignore = false) {
+ if (!ignore && isDragging) {
return;
}
var now = new Date();
if (
this.lasttime == undefined ||
- now.getTime() - this.lasttime.getTime() >= 1000
+ now.getTime() - this.lasttime.getTime() >= 200
) {
map.setCenter(lnglat);
this.lasttime = now;
}
+ },
+ addViews(view) {
+ map.add(view);
+ },
+ removeViews(view) {
+ map.remove(view);
+ },
+ clearMap() {
+ marks.clearMassMarks();
+ map.clearMap();
+ Layer.clear();
+ },
+ 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