1 | import { Map, FlyToOptions, FitBoundsOptions } from 'mapbox-gl'
|
2 |
|
3 | const composedMethodEvents = [
|
4 | { name: 'moveend', check: (map: Map, options: FlyToOptions): boolean =>
|
5 | options.center && map.isMoving()
|
6 | },
|
7 | { name: 'zoomend', check: (map: Map, options: FlyToOptions): boolean =>
|
8 | options.zoom !== undefined && options.zoom !== null && map.isZooming()
|
9 | },
|
10 | { name: 'rotateend', check: (map: Map, options: FlyToOptions): boolean =>
|
11 | options.bearing !== undefined && options.bearing !== null && map.isRotating()
|
12 | },
|
13 | { name: 'pitchend', check: (map: Map, options: FlyToOptions): boolean =>
|
14 | options.pitch !== undefined && options.bearing !== null && map.isMoving()
|
15 | }
|
16 | ]
|
17 |
|
18 | const composedMethodGetter = (map: Map): object => ({
|
19 | center: map.getCenter(),
|
20 | zoom: map.getZoom(),
|
21 | bearing: map.getBearing(),
|
22 | pitch: map.getPitch()
|
23 | })
|
24 |
|
25 | const composedMethodConfig = {
|
26 | events: composedMethodEvents,
|
27 | getter: composedMethodGetter
|
28 | }
|
29 |
|
30 | const moveMethodConfig = {
|
31 | events: [{ name: 'moveend', check: (map: Map): boolean => map.isMoving() }],
|
32 | getter: (map: Map): object => ({ center: map.getCenter() })
|
33 | }
|
34 |
|
35 | const zoomMethodConfig = {
|
36 | events: [{ name: 'zoomend', check: (map: Map): boolean => map.isZooming() }],
|
37 | getter: (map: Map): object => ({ zoom: map.getZoom()})
|
38 | }
|
39 |
|
40 | const rotateMethodConfig = {
|
41 | events: [{ name: 'rotateend', check: (map: Map): boolean => map.isRotating() }],
|
42 | getter: (map: Map): object => ({ bearing: map.getBearing() })
|
43 | }
|
44 |
|
45 | export default {
|
46 | setCenter: moveMethodConfig,
|
47 | panBy: moveMethodConfig,
|
48 | panTo: moveMethodConfig,
|
49 | setZoom: zoomMethodConfig,
|
50 | zoomTo: zoomMethodConfig,
|
51 | zoomIn: zoomMethodConfig,
|
52 | zoomOut: zoomMethodConfig,
|
53 |
|
54 | setBearing: rotateMethodConfig,
|
55 | rotateTo: rotateMethodConfig,
|
56 | resetNorth: rotateMethodConfig,
|
57 | snapToNorth: rotateMethodConfig,
|
58 | setPitch: {
|
59 | events: [{ name: 'pitchend', check: (map: Map): boolean => true }],
|
60 | getter: (map: Map): object => ({
|
61 | pitch: map.getPitch()
|
62 | })
|
63 | },
|
64 | fitBounds: {
|
65 | events: [
|
66 | { name: 'zoomend', check: (map: Map): boolean => map.isZooming() },
|
67 | { name: 'moveend', check: (map: Map): boolean => map.isMoving() },
|
68 | { name: 'rotateend', check: (map: Map): boolean => map.isRotating() }
|
69 | ],
|
70 | getter: (map: Map): object => ({
|
71 | zoom: map.getZoom(),
|
72 | bearing: map.getBearing(),
|
73 | pitch: map.getPitch(),
|
74 | center: map.getCenter()
|
75 | })
|
76 | },
|
77 | fitScreenCoordinates: {
|
78 | events: [
|
79 | { name: 'zoomend', check: (map: Map, options): boolean => map.isZooming() },
|
80 | { name: 'moveend', check: (map: Map, options): boolean => map.isMoving() },
|
81 | { name: 'rotateend', check: (map: Map, options): boolean => options.bearing && map.isRotating() }
|
82 | ],
|
83 | getter: (map: Map): object => ({
|
84 | zoom: map.getZoom(),
|
85 | center: map.getCenter(),
|
86 | bearing: map.getBearing(),
|
87 | pitch: map.getPitch()
|
88 | })
|
89 | },
|
90 | jumpTo: composedMethodConfig,
|
91 | easeTo: composedMethodConfig,
|
92 | flyTo: composedMethodConfig
|
93 | }
|