1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
| import { map, AMap, isDragging } from '@/utils/map/index'
| import marks from '@/utils/map/marks'
|
| /**
| * 坐标集合的最西南角和最东北角
| * @param {*} list
| * list 是接口获取的点 的数组
| */
| const getBound = (list) => {
| const offset = 0.05
| 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
| }
| var mybounds = new AMap.Bounds(sw, ne) // sw, ne > [xxx,xxx], [xxx,xxx]
| map.setBounds(mybounds)
| },
| }
|
|