UNPKG

2.99 kBPlain TextView Raw
1import { Map, FlyToOptions, FitBoundsOptions } from 'mapbox-gl'
2
3const 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
18const composedMethodGetter = (map: Map): object => ({
19 center: map.getCenter(),
20 zoom: map.getZoom(),
21 bearing: map.getBearing(),
22 pitch: map.getPitch()
23})
24
25const composedMethodConfig = {
26 events: composedMethodEvents,
27 getter: composedMethodGetter
28}
29
30const moveMethodConfig = {
31 events: [{ name: 'moveend', check: (map: Map): boolean => map.isMoving() }],
32 getter: (map: Map): object => ({ center: map.getCenter() })
33}
34
35const zoomMethodConfig = {
36 events: [{ name: 'zoomend', check: (map: Map): boolean => map.isZooming() }],
37 getter: (map: Map): object => ({ zoom: map.getZoom()})
38}
39
40const rotateMethodConfig = {
41 events: [{ name: 'rotateend', check: (map: Map): boolean => map.isRotating() }],
42 getter: (map: Map): object => ({ bearing: map.getBearing() })
43}
44
45export 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}