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);
|
}
|
};
|