import { map, isDragging } from '@/utils/map/index_old'; import marks from '@/utils/map/marks'; /** * 坐标集合的最西南角和最东北角 * @param {*} list * list 是接口获取的点 的数组 */ 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, ignore = false) { if (!ignore && isDragging) { return; } var now = new Date(); if ( this.lasttime == undefined || 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(); }, 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); } };