|
1 | 1 | <template> |
2 | | - <mapbox |
3 | | - :accessToken="accessToken" |
4 | | - :mapOptions="{ |
5 | | - style: mapStyle, |
6 | | - center: [67.4692816, 30.0313007], |
7 | | - zoom: 3 |
8 | | - }" |
9 | | - @map-load="loaded" |
10 | | - /> |
| 2 | + <div class="map-container"> |
| 3 | + <div id="map" class="map"></div> |
| 4 | + </div> |
11 | 5 | </template> |
12 | 6 |
|
13 | 7 | <script> |
14 | | -import Mapbox from 'mapbox-gl-vue' |
15 | | -
|
16 | 8 | export default { |
17 | 9 | name: 'Map', |
18 | | - components: { |
19 | | - Mapbox |
20 | | - }, |
21 | 10 | props: { |
22 | | - confirmed: Object, |
23 | | - dead: Object |
| 11 | + confirmed: Object |
24 | 12 | }, |
25 | 13 | data() { |
26 | 14 | return { |
27 | 15 | accessToken: |
28 | | - 'pk.eyJ1IjoicXVlZW5zaWRlMDQiLCJhIjoiY2s3bG1rNjMzMDk4czNscG1yZHU3NDRiMyJ9.PB6Uq1rIDULWXJp7T8ypng', |
29 | | - mapStyle: 'mapbox://styles/mapbox/light-v10' |
| 16 | + 'pk.eyJ1IjoicXVlZW5zaWRlMDQiLCJhIjoiY2s3bG1rNjMzMDk4czNscG1yZHU3NDRiMyJ9.PB6Uq1rIDULWXJp7T8ypng' |
30 | 17 | } |
31 | 18 | }, |
32 | 19 | methods: { |
33 | | - loaded(map) { |
34 | | - map.addSource('confirmed', { |
35 | | - type: 'geojson', |
36 | | - data: this.confirmed, |
37 | | - cluster: true, |
38 | | - clusterMaxZoom: 20, |
39 | | - clusterRadius: 50 |
40 | | - }) |
| 20 | + createMap() { |
| 21 | + const mapboxgl = require('mapbox-gl/dist/mapbox-gl') |
| 22 | + mapboxgl.accessToken = this.accessToken |
41 | 23 |
|
42 | | - map.addSource('dead', { |
43 | | - type: 'geojson', |
44 | | - data: this.dead, |
45 | | - cluster: true, |
46 | | - clusterMaxZoom: 20, |
47 | | - clusterRadius: 50 |
48 | | - }) |
| 24 | + const oranges = ['#ffa500', '#ffae19', '#ffb732', '#ffc04c'] |
| 25 | + const blacks = ['#000000', '#191919', '#323232', '#4c4c4c'] |
49 | 26 |
|
50 | | - map.addLayer({ |
51 | | - id: 'confirmed-clusters', |
52 | | - type: 'circle', |
53 | | - source: 'confirmed', |
54 | | - filter: ['==', 'state', 'confirmed'], |
55 | | - paint: { |
56 | | - 'circle-color': [ |
57 | | - 'step', |
58 | | - ['get', 'latest'], |
59 | | - '#FF6347', |
60 | | - 100, |
61 | | - '#FFA500', |
62 | | - 750, |
63 | | - '#FF4500' |
64 | | - ], |
65 | | - 'circle-radius': [ |
66 | | - 'step', |
67 | | - ['get', 'latest'], |
68 | | - 20, |
69 | | - 100, |
70 | | - 30, |
71 | | - 750, |
72 | | - 40 |
73 | | - ] |
74 | | - } |
| 27 | + const map = new mapboxgl.Map({ |
| 28 | + container: 'map', |
| 29 | + style: 'mapbox://styles/mapbox/light-v10', |
| 30 | + center: [117.2264, 31.8257], |
| 31 | + zoom: 3 |
75 | 32 | }) |
76 | 33 |
|
77 | | - map.addLayer({ |
78 | | - id: 'confirmed-cluster-count', |
79 | | - type: 'symbol', |
80 | | - source: 'confirmed', |
81 | | - filter: ['has', 'latest'], |
82 | | - layout: { |
83 | | - 'text-field': '{latest}', |
84 | | - 'text-font': ['DIN Offc Pro Medium', 'Arial Unicode MS Bold'], |
85 | | - 'text-size': 12 |
86 | | - } |
87 | | - }) |
| 34 | + const addLayers = map => { |
| 35 | + map.addSource('confirmed', { |
| 36 | + type: 'geojson', |
| 37 | + data: this.confirmed, |
| 38 | + cluster: true, |
| 39 | + clusterRadius: 50 |
| 40 | + }) |
| 41 | +
|
| 42 | + map.addLayer({ |
| 43 | + id: 'confirmed_cluster', |
| 44 | + type: 'circle', |
| 45 | + source: 'confirmed', |
| 46 | + paint: { |
| 47 | + 'circle-color': [ |
| 48 | + 'step', |
| 49 | + ['get', 'latest'], |
| 50 | + oranges[2], |
| 51 | + 100, |
| 52 | + oranges[1], |
| 53 | + 750, |
| 54 | + oranges[0] |
| 55 | + ], |
| 56 | + 'circle-radius': ['step', ['get', 'latest'], 15, 100, 20, 750, 25] |
| 57 | + } |
| 58 | + }) |
| 59 | +
|
| 60 | + map.addLayer({ |
| 61 | + id: 'confirmed_cluster_count', |
| 62 | + type: 'symbol', |
| 63 | + source: 'confirmed', |
| 64 | + layout: { |
| 65 | + 'text-field': '{latest}', |
| 66 | + 'text-font': ['DIN Offc Pro Medium', 'Arial Unicode MS Bold'], |
| 67 | + 'text-size': 12 |
| 68 | + } |
| 69 | + }) |
88 | 70 |
|
89 | | - map.addLayer({ |
90 | | - id: 'confirmed-unclustered-point', |
91 | | - type: 'circle', |
92 | | - source: 'confirmed', |
93 | | - filter: ['!', ['has', 'latest']], |
94 | | - paint: { |
95 | | - 'circle-color': '#FF4500', |
96 | | - 'circle-radius': 4, |
97 | | - 'circle-stroke-width': 1, |
98 | | - 'circle-stroke-color': '#FF4500' |
99 | | - } |
| 71 | + map.addLayer({ |
| 72 | + id: 'confirmed_unclustered_point', |
| 73 | + type: 'circle', |
| 74 | + source: 'confirmed', |
| 75 | + filter: ['!=', 'state', 1], |
| 76 | + paint: { |
| 77 | + 'circle-color': oranges[3], |
| 78 | + 'circle-radius': 4, |
| 79 | + 'circle-stroke-width': 1, |
| 80 | + 'circle-stroke-color': oranges[3] |
| 81 | + } |
| 82 | + }) |
| 83 | + } |
| 84 | +
|
| 85 | + map.on('style.load', function() { |
| 86 | + addLayers(map) |
100 | 87 | }) |
101 | 88 |
|
102 | | - map.on('click', 'clusters', function(e) { |
| 89 | + map.on('click', 'confirmed_cluster', function(e) { |
103 | 90 | var features = map.queryRenderedFeatures(e.point, { |
104 | | - layers: ['clusters'] |
| 91 | + layers: ['confirmed_cluster'] |
105 | 92 | }) |
106 | 93 | var clusterId = features[0].properties.cluster_id |
107 | 94 | map |
108 | 95 | .getSource('confirmed') |
109 | 96 | .getClusterExpansionZoom(clusterId, function(err, zoom) { |
110 | 97 | if (err) return |
111 | | -
|
112 | 98 | map.easeTo({ |
113 | 99 | center: features[0].geometry.coordinates, |
114 | | - zoom: zoom |
| 100 | + zoom: map.getZoom() + 1 |
115 | 101 | }) |
116 | 102 | }) |
117 | 103 | }) |
118 | 104 | } |
| 105 | + }, |
| 106 | + mounted() { |
| 107 | + this.createMap() |
119 | 108 | } |
120 | 109 | } |
121 | 110 | </script> |
|
0 commit comments