@mapcomponents/react-maplibre 0.1.59 → 0.1.61
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.eslintignore +2 -1
- package/CHANGELOG.md +15 -0
- package/coverage/clover.xml +142 -47
- package/coverage/coverage-final.json +5 -4
- package/coverage/lcov-report/index.html +36 -21
- package/coverage/lcov-report/src/components/MapLibreMap/MapLibreMap.tsx.html +1 -1
- package/coverage/lcov-report/src/components/MapLibreMap/index.html +1 -1
- package/coverage/lcov-report/src/components/MlCenterPosition/MlCenterPosition.tsx.html +1 -1
- package/coverage/lcov-report/src/components/MlCenterPosition/index.html +1 -1
- package/coverage/lcov-report/src/components/MlCreatePdfButton/MlCreatePdfButton.tsx.html +1 -1
- package/coverage/lcov-report/src/components/MlCreatePdfButton/index.html +1 -1
- package/coverage/lcov-report/src/components/MlCreatePdfForm/MlCreatePdfForm.tsx.html +2 -2
- package/coverage/lcov-report/src/components/MlCreatePdfForm/index.html +1 -1
- package/coverage/lcov-report/src/components/MlFeatureEditor/MlFeatureEditor.tsx.html +1 -1
- package/coverage/lcov-report/src/components/MlFeatureEditor/index.html +1 -1
- package/coverage/lcov-report/src/components/MlFillExtrusionLayer/MlFillExtrusionLayer.tsx.html +1 -1
- package/coverage/lcov-report/src/components/MlFillExtrusionLayer/index.html +1 -1
- package/coverage/lcov-report/src/components/MlFollowGps/MlFollowGps.tsx.html +1 -1
- package/coverage/lcov-report/src/components/MlFollowGps/index.html +1 -1
- package/coverage/lcov-report/src/components/MlGPXViewer/MlGPXViewer.tsx.html +1 -1
- package/coverage/lcov-report/src/components/MlGPXViewer/gpxConverter.js.html +1 -1
- package/coverage/lcov-report/src/components/MlGPXViewer/index.html +1 -1
- package/coverage/lcov-report/src/components/MlGeoJsonLayer/MlGeoJsonLayer.tsx.html +1 -1
- package/coverage/lcov-report/src/components/MlGeoJsonLayer/index.html +1 -1
- package/coverage/lcov-report/src/components/MlGeojsonLayerWithSource/MlGeojsonLayerWithSource.tsx.html +1 -1
- package/coverage/lcov-report/src/components/MlGeojsonLayerWithSource/index.html +1 -1
- package/coverage/lcov-report/src/components/MlImageMarkerLayer/MlImageMarkerLayer.tsx.html +1 -1
- package/coverage/lcov-report/src/components/MlImageMarkerLayer/index.html +1 -1
- package/coverage/lcov-report/src/components/MlLayer/MlLayer.tsx.html +1 -1
- package/coverage/lcov-report/src/components/MlLayer/index.html +1 -1
- package/coverage/lcov-report/src/components/MlLayerMagnify/MlLayerMagnify.tsx.html +1 -1
- package/coverage/lcov-report/src/components/MlLayerMagnify/index.html +1 -1
- package/coverage/lcov-report/src/components/MlLayerSwipe/MlLayerSwipe.tsx.html +1 -1
- package/coverage/lcov-report/src/components/MlLayerSwipe/index.html +1 -1
- package/coverage/lcov-report/src/components/MlLayerSwitcher/MlLayerSwitcher.js.html +1 -1
- package/coverage/lcov-report/src/components/MlLayerSwitcher/components/LayerBox.js.html +1 -1
- package/coverage/lcov-report/src/components/MlLayerSwitcher/components/index.html +1 -1
- package/coverage/lcov-report/src/components/MlLayerSwitcher/index.html +1 -1
- package/coverage/lcov-report/src/components/MlMarker/MlMarker.tsx.html +1 -1
- package/coverage/lcov-report/src/components/MlMarker/index.html +1 -1
- package/coverage/lcov-report/src/components/MlMeasureTool/MlMeasureTool.tsx.html +1 -1
- package/coverage/lcov-report/src/components/MlMeasureTool/index.html +1 -1
- package/coverage/lcov-report/src/components/MlNavigationCompass/MlNavigationCompass.tsx.html +1 -1
- package/coverage/lcov-report/src/components/MlNavigationCompass/index.html +1 -1
- package/coverage/lcov-report/src/components/MlNavigationTools/MlNavigationTools.tsx.html +1 -1
- package/coverage/lcov-report/src/components/MlNavigationTools/index.html +1 -1
- package/coverage/lcov-report/src/components/MlOsmLayer/MlOsmLayer.js.html +1 -1
- package/coverage/lcov-report/src/components/MlOsmLayer/MlOsmLayer.stories_.js.html +1 -1
- package/coverage/lcov-report/src/components/MlOsmLayer/index.html +1 -1
- package/coverage/lcov-report/src/components/MlScaleReference/MlScaleReference.js.html +1 -1
- package/coverage/lcov-report/src/components/MlScaleReference/index.html +1 -1
- package/coverage/lcov-report/src/components/MlShareMapState/MlShareMapState.js.html +1 -1
- package/coverage/lcov-report/src/components/MlShareMapState/index.html +1 -1
- package/coverage/lcov-report/src/components/MlSpatialElevationProfile/MlSpatialElevationProfile.js.html +1 -1
- package/coverage/lcov-report/src/components/MlSpatialElevationProfile/index.html +1 -1
- package/coverage/lcov-report/src/components/MlThreeJsLayer/MlThreeJsLayer.js.html +1 -1
- package/coverage/lcov-report/src/components/MlThreeJsLayer/index.html +1 -1
- package/coverage/lcov-report/src/components/MlTransitionGeoJsonLayer/MlTransitionGeoJsonLayer.tsx.html +1 -1
- package/coverage/lcov-report/src/components/MlTransitionGeoJsonLayer/index.html +1 -1
- package/coverage/lcov-report/src/components/MlUseMapDebugger/MlUseMapDebugger.js.html +1 -1
- package/coverage/lcov-report/src/components/MlUseMapDebugger/index.html +1 -1
- package/coverage/lcov-report/src/components/MlVectorTileLayer/MlVectorTileLayer.tsx.html +92 -146
- package/coverage/lcov-report/src/components/MlVectorTileLayer/index.html +21 -21
- package/coverage/lcov-report/src/components/MlWmsFeatureInfoPopup/MlWmsFeatureInfoPopup.js.html +1 -1
- package/coverage/lcov-report/src/components/MlWmsFeatureInfoPopup/index.html +1 -1
- package/coverage/lcov-report/src/components/MlWmsLayer/MlWmsLayer.tsx.html +1 -1
- package/coverage/lcov-report/src/components/MlWmsLayer/index.html +1 -1
- package/coverage/lcov-report/src/components/MlWmsLoader/MlWmsLoader.tsx.html +1 -1
- package/coverage/lcov-report/src/components/MlWmsLoader/index.html +1 -1
- package/coverage/lcov-report/src/contexts/MapContext.tsx.html +1 -1
- package/coverage/lcov-report/src/contexts/SimpleDataContext.js.html +1 -1
- package/coverage/lcov-report/src/contexts/SimpleDataProvider.js.html +1 -1
- package/coverage/lcov-report/src/contexts/index.html +1 -1
- package/coverage/lcov-report/src/hooks/index.html +1 -1
- package/coverage/lcov-report/src/hooks/useCameraFollowPath/index.html +116 -0
- package/coverage/lcov-report/src/hooks/useCameraFollowPath/useCameraFollowPath.tsx.html +661 -0
- package/coverage/lcov-report/src/hooks/{exportMap → useExportMap}/index.html +3 -3
- package/coverage/lcov-report/src/hooks/{exportMap → useExportMap}/index.ts.html +4 -4
- package/coverage/lcov-report/src/hooks/{exportMap → useExportMap}/lib.ts.html +4 -4
- package/coverage/lcov-report/src/hooks/useLayer.ts.html +1 -1
- package/coverage/lcov-report/src/hooks/useLayerEvent.js.html +1 -1
- package/coverage/lcov-report/src/hooks/useMap.ts.html +4 -4
- package/coverage/lcov-report/src/hooks/useMapState.ts.html +1 -1
- package/coverage/lcov-report/src/hooks/useSource.ts.html +1 -1
- package/coverage/lcov-report/src/hooks/useWms.js.html +1 -1
- package/coverage/lcov-report/src/index.html +1 -1
- package/coverage/lcov-report/src/index.ts.html +6 -3
- package/coverage/lcov.info +270 -76
- package/dist/components/MlCreatePdfForm/MlCreatePdfForm.d.ts +1 -1
- package/dist/components/MlCreatePdfForm/lib/PdfForm.d.ts +1 -1
- package/dist/components/MlVectorTileLayer/MlVectorTileLayer.d.ts +5 -24
- package/dist/hooks/useCameraFollowPath/useCameraFollowPath.d.ts +35 -0
- package/dist/hooks/useCameraFollowPath/useCameraFollowPath.stories.d.ts +17 -0
- package/dist/hooks/useExportMap/index.d.ts +11 -0
- package/dist/hooks/useExportMap/lib.d.ts +36 -0
- package/dist/index.d.ts +2 -1
- package/dist/index.esm.js +209 -63
- package/dist/index.esm.js.map +1 -1
- package/package.json +2 -1
- package/scripts/build-catalogue-meta.js +1 -1
- package/src/components/MlCreatePdfForm/MlCreatePdfForm.tsx +1 -1
- package/src/components/MlCreatePdfForm/lib/PdfForm.tsx +5 -5
- package/src/components/MlVectorTileLayer/MlVectorTileLayer.stories.js +15 -9
- package/src/components/MlVectorTileLayer/MlVectorTileLayer.test.js +7 -6
- package/src/components/MlVectorTileLayer/MlVectorTileLayer.tsx +59 -77
- package/src/hooks/useCameraFollowPath/useCameraFollowPath.doc.de.md +4 -0
- package/src/hooks/useCameraFollowPath/useCameraFollowPath.doc.en.md +1 -0
- package/src/hooks/useCameraFollowPath/useCameraFollowPath.meta.json +15 -0
- package/src/hooks/useCameraFollowPath/useCameraFollowPath.stories.tsx +198 -0
- package/src/hooks/useCameraFollowPath/useCameraFollowPath.tsx +192 -0
- package/src/hooks/{exportMap → useExportMap}/index.ts +1 -1
- package/src/hooks/{exportMap → useExportMap}/lib.ts +1 -1
- package/src/index.ts +2 -1
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
import { useEffect, useCallback, useRef } from 'react';
|
|
2
|
+
|
|
3
|
+
import * as turf from '@turf/turf';
|
|
4
|
+
import useMap from '../useMap';
|
|
5
|
+
import { LngLatBoundsLike, LngLatLike } from 'maplibre-gl';
|
|
6
|
+
|
|
7
|
+
interface useCameraFollowPathProps {
|
|
8
|
+
/**
|
|
9
|
+
* Id of the target MapLibre instance in mapContext
|
|
10
|
+
*/
|
|
11
|
+
mapId?: string;
|
|
12
|
+
/**
|
|
13
|
+
* Id of an existing layer in the mapLibre instance to help specify the layer order
|
|
14
|
+
* This layer will be visually beneath the layer with the "insertBeforeLayer" id.
|
|
15
|
+
*/
|
|
16
|
+
insertBeforeLayer?: string;
|
|
17
|
+
/* pause is an useRef const and is triggerd in the storie */
|
|
18
|
+
pause?: boolean;
|
|
19
|
+
/* zoom is an useRef const and is triggerd in the storie */
|
|
20
|
+
zoom?: number;
|
|
21
|
+
/* pitch is an useRef const and is triggerd in the storie */
|
|
22
|
+
pitch?: number;
|
|
23
|
+
/* speed is an useRef const and is triggerd in the storie */
|
|
24
|
+
speed?: number;
|
|
25
|
+
/* kmPerStep is an useRef const */
|
|
26
|
+
kmPerStep?: number;
|
|
27
|
+
/* route is a json file, which is defined loaded in the storie */
|
|
28
|
+
route?: any;
|
|
29
|
+
/* stepDuration is a const */
|
|
30
|
+
stepDuration?: number;
|
|
31
|
+
/* timeoutId is an useRef const */
|
|
32
|
+
timeoutId?: number;
|
|
33
|
+
}
|
|
34
|
+
export type { useCameraFollowPathProps };
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Component template
|
|
38
|
+
*
|
|
39
|
+
*/
|
|
40
|
+
const useCameraFollowPath = (props: useCameraFollowPathProps) => {
|
|
41
|
+
// Use a useRef hook to reference the layer object to be able to access it later inside useEffect hooks
|
|
42
|
+
// without the requirement of adding it to the dependency list (ignore the false eslint exhaustive deps warning)
|
|
43
|
+
const initializedRef = useRef(false);
|
|
44
|
+
const pause = useRef<boolean | undefined>(props.pause);
|
|
45
|
+
const zoom = useRef<number | undefined>(props.zoom);
|
|
46
|
+
const pitch = useRef<number | undefined>(props.pitch);
|
|
47
|
+
const step = useRef(1);
|
|
48
|
+
const speed = useRef<number | undefined>(props.speed);
|
|
49
|
+
const timeoutId = useRef();
|
|
50
|
+
|
|
51
|
+
const kmPerStep = props.kmPerStep || 0.01;
|
|
52
|
+
const routeDistance = turf.lineDistance(props.route);
|
|
53
|
+
const stepDuration = props.stepDuration || 70;
|
|
54
|
+
|
|
55
|
+
const mapHook = useMap({
|
|
56
|
+
mapId: props.mapId,
|
|
57
|
+
waitForLayer: props.insertBeforeLayer,
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
useEffect(() => {
|
|
61
|
+
pause.current = props.pause;
|
|
62
|
+
if (!pause.current) {
|
|
63
|
+
play();
|
|
64
|
+
}
|
|
65
|
+
}, [props.pause]);
|
|
66
|
+
useEffect(() => {
|
|
67
|
+
if (!mapHook.map) return;
|
|
68
|
+
zoom.current = props.zoom;
|
|
69
|
+
if (typeof zoom.current !== 'undefined' && mapHook.map.map.getZoom() !== zoom.current) {
|
|
70
|
+
mapHook.map.map.setZoom(zoom.current);
|
|
71
|
+
}
|
|
72
|
+
}, [mapHook.map, props.zoom]);
|
|
73
|
+
useEffect(() => {
|
|
74
|
+
if (!mapHook.map) return;
|
|
75
|
+
pitch.current = props.pitch;
|
|
76
|
+
if (typeof pitch.current !== 'undefined' && pitch.current !== mapHook.map.map.getPitch()) {
|
|
77
|
+
mapHook.map.map.setPitch(pitch.current);
|
|
78
|
+
}
|
|
79
|
+
}, [mapHook.map, props.pitch]);
|
|
80
|
+
useEffect(() => {
|
|
81
|
+
speed.current = props.speed;
|
|
82
|
+
}, [props.speed]);
|
|
83
|
+
|
|
84
|
+
const disableInteractivity = useCallback(() => {
|
|
85
|
+
if (!mapHook.map) return;
|
|
86
|
+
mapHook.map.map['scrollZoom'].disable();
|
|
87
|
+
mapHook.map.map['boxZoom'].disable();
|
|
88
|
+
mapHook.map.map['dragRotate'].disable();
|
|
89
|
+
mapHook.map.map['dragPan'].disable();
|
|
90
|
+
mapHook.map.map['keyboard'].disable();
|
|
91
|
+
mapHook.map.map['doubleClickZoom'].disable();
|
|
92
|
+
mapHook.map.map['touchZoomRotate'].disable();
|
|
93
|
+
}, [mapHook.map]);
|
|
94
|
+
const enableInteractivity = useCallback(() => {
|
|
95
|
+
if (!mapHook.map) return;
|
|
96
|
+
mapHook.map.map['scrollZoom'].enable();
|
|
97
|
+
mapHook.map.map['boxZoom'].enable();
|
|
98
|
+
mapHook.map.map['dragRotate'].enable();
|
|
99
|
+
mapHook.map.map['dragPan'].enable();
|
|
100
|
+
mapHook.map.map['keyboard'].enable();
|
|
101
|
+
mapHook.map.map['doubleClickZoom'].enable();
|
|
102
|
+
mapHook.map.map['touchZoomRotate'].enable();
|
|
103
|
+
}, [mapHook.map]);
|
|
104
|
+
|
|
105
|
+
function centerRoute() {
|
|
106
|
+
if (!mapHook.map || !props.route) return;
|
|
107
|
+
const bbox = turf.bbox(props.route);
|
|
108
|
+
let bounds: LngLatBoundsLike;
|
|
109
|
+
if (bbox && bbox.length > 3) {
|
|
110
|
+
bounds = [
|
|
111
|
+
[bbox[0], bbox[1]],
|
|
112
|
+
[bbox[2], bbox[3]],
|
|
113
|
+
];
|
|
114
|
+
mapHook.map.map.fitBounds(bounds, { padding: 100 });
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
function play() {
|
|
118
|
+
if (!mapHook.map) return;
|
|
119
|
+
|
|
120
|
+
if (!pause.current) {
|
|
121
|
+
disableInteractivity();
|
|
122
|
+
if (typeof zoom.current !== 'undefined' && mapHook.map.map.getZoom() !== zoom.current) {
|
|
123
|
+
mapHook.map.map.setZoom(zoom.current);
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
const alongRoutelati: number[] = turf.along(props.route, step.current * kmPerStep).geometry
|
|
127
|
+
.coordinates;
|
|
128
|
+
|
|
129
|
+
if (step.current * kmPerStep < routeDistance) {
|
|
130
|
+
mapHook.map.map.easeTo({
|
|
131
|
+
center: alongRoutelati as LngLatLike,
|
|
132
|
+
bearing: turf.bearing(
|
|
133
|
+
turf.point([mapHook.map.map.getCenter().lng, mapHook.map.map.getCenter().lat]),
|
|
134
|
+
turf.point(alongRoutelati)
|
|
135
|
+
),
|
|
136
|
+
duration: stepDuration,
|
|
137
|
+
essential: true,
|
|
138
|
+
});
|
|
139
|
+
if (typeof speed.current !== 'undefined') {
|
|
140
|
+
step.current = step.current + speed.current;
|
|
141
|
+
} else {
|
|
142
|
+
step.current++;
|
|
143
|
+
}
|
|
144
|
+
console.log('PAN MOVE');
|
|
145
|
+
setTimeout(() => {
|
|
146
|
+
play();
|
|
147
|
+
}, 100);
|
|
148
|
+
} else {
|
|
149
|
+
mapHook.map.map.setPitch(0);
|
|
150
|
+
centerRoute();
|
|
151
|
+
enableInteractivity();
|
|
152
|
+
console.log('ENABLE CONTROLS');
|
|
153
|
+
step.current = 1;
|
|
154
|
+
}
|
|
155
|
+
} else {
|
|
156
|
+
enableInteractivity();
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
function reset() {
|
|
161
|
+
if (!mapHook.map) return;
|
|
162
|
+
centerRoute();
|
|
163
|
+
enableInteractivity();
|
|
164
|
+
step.current = 1;
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
useEffect(() => {
|
|
168
|
+
if (!mapHook.map || initializedRef.current) return;
|
|
169
|
+
initializedRef.current = true;
|
|
170
|
+
centerRoute();
|
|
171
|
+
}, [mapHook.map]);
|
|
172
|
+
|
|
173
|
+
useEffect(() => {
|
|
174
|
+
return () => {
|
|
175
|
+
if (timeoutId.current) {
|
|
176
|
+
clearTimeout(timeoutId.current);
|
|
177
|
+
}
|
|
178
|
+
};
|
|
179
|
+
}, []);
|
|
180
|
+
|
|
181
|
+
return {
|
|
182
|
+
play: play,
|
|
183
|
+
reset: reset,
|
|
184
|
+
};
|
|
185
|
+
};
|
|
186
|
+
|
|
187
|
+
useCameraFollowPath.defaultProps = {
|
|
188
|
+
mapId: undefined,
|
|
189
|
+
zoom: 18,
|
|
190
|
+
};
|
|
191
|
+
|
|
192
|
+
export default useCameraFollowPath;
|
|
@@ -10,7 +10,7 @@ interface exportMapProps {
|
|
|
10
10
|
mapId?: string;
|
|
11
11
|
}
|
|
12
12
|
|
|
13
|
-
export default function
|
|
13
|
+
export default function useExportMap(props: exportMapProps) {
|
|
14
14
|
const mapHook = useMap({ mapId: props.mapId });
|
|
15
15
|
|
|
16
16
|
const _createExport = useMemo(() => {
|
package/src/index.ts
CHANGED
|
@@ -35,7 +35,8 @@ export { default as useMapState } from "./hooks/useMapState";
|
|
|
35
35
|
export { default as useMap } from "./hooks/useMap";
|
|
36
36
|
export { default as useWms } from "./hooks/useWms.js";
|
|
37
37
|
export { default as useSource } from "./hooks/useSource";
|
|
38
|
-
export { default as useExportMap } from "./hooks/
|
|
38
|
+
export { default as useExportMap } from "./hooks/useExportMap";
|
|
39
|
+
export { default as useCameraFollowPath } from "./hooks/useCameraFollowPath/useCameraFollowPath";
|
|
39
40
|
|
|
40
41
|
export { MapComponentsProvider } from "./contexts/MapContext";
|
|
41
42
|
export { default as MapContext } from "./contexts/MapContext";
|