@open-pioneer/geolocation 0.4.4 → 0.8.0-dev.20241120115147
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/CHANGELOG.md +56 -0
- package/Geolocation.d.ts +2 -5
- package/Geolocation.js +3 -7
- package/Geolocation.js.map +1 -1
- package/GeolocationController.d.ts +3 -3
- package/GeolocationController.js +16 -14
- package/GeolocationController.js.map +1 -1
- package/package.json +13 -13
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,61 @@
|
|
|
1
1
|
# @open-pioneer/geolocation
|
|
2
2
|
|
|
3
|
+
## 0.8.0-dev.20241120115147
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- b717121: Update from OL 9 to OL 10.
|
|
8
|
+
- 2fa8020: Update trails core package dependencies.
|
|
9
|
+
|
|
10
|
+
- Also updates Chakra UI to the latest 2.x version and Chakra React Select to version 5.
|
|
11
|
+
- Removes any obsolete references to `@chakra-ui/system`.
|
|
12
|
+
This dependency seems to be no longer required and may lead to duplicate packages in your dependency tree.
|
|
13
|
+
|
|
14
|
+
### Patch Changes
|
|
15
|
+
|
|
16
|
+
- d8337a6: Refactor implementation to use the new reactive properties of the map model.
|
|
17
|
+
- Updated dependencies [b717121]
|
|
18
|
+
- Updated dependencies [e7978a8]
|
|
19
|
+
- Updated dependencies [7ae9f90]
|
|
20
|
+
- Updated dependencies [d8337a6]
|
|
21
|
+
- Updated dependencies [b2127df]
|
|
22
|
+
- Updated dependencies [2fa8020]
|
|
23
|
+
- Updated dependencies [7ae9f90]
|
|
24
|
+
- Updated dependencies [d8337a6]
|
|
25
|
+
- @open-pioneer/map@0.8.0-dev.20241120115147
|
|
26
|
+
- @open-pioneer/map-ui-components@0.8.0-dev.20241120115147
|
|
27
|
+
|
|
28
|
+
## 0.7.0
|
|
29
|
+
|
|
30
|
+
### Minor Changes
|
|
31
|
+
|
|
32
|
+
- 310800c: Switch from `peerDependencies` to normal `dependencies`. Peer dependencies have some usability problems when used at scale.
|
|
33
|
+
|
|
34
|
+
### Patch Changes
|
|
35
|
+
|
|
36
|
+
- 310800c: Update core packages version.
|
|
37
|
+
- 583f1d6: The `mapId` or `map` properties are now optional on individual components.
|
|
38
|
+
You can use the `DefaultMapProvider` to configure an implicit default value.
|
|
39
|
+
|
|
40
|
+
Note that configuring _neither_ a default _nor_ an explicit `map` or `mapId` will trigger a runtime error.
|
|
41
|
+
|
|
42
|
+
- 583f1d6: All UI components in this project now accept the `mapId` (a `string`) _or_ the `map` (a `MapModel`) directly.
|
|
43
|
+
- a8b3449: Switch to a new versioning strategy.
|
|
44
|
+
From now on, packages released by this repository share a common version number.
|
|
45
|
+
- 900eb11: Update dependencies.
|
|
46
|
+
- Updated dependencies [310800c]
|
|
47
|
+
- Updated dependencies [2502050]
|
|
48
|
+
- Updated dependencies [583f1d6]
|
|
49
|
+
- Updated dependencies [583f1d6]
|
|
50
|
+
- Updated dependencies [397d617]
|
|
51
|
+
- Updated dependencies [a8b3449]
|
|
52
|
+
- Updated dependencies [310800c]
|
|
53
|
+
- Updated dependencies [900eb11]
|
|
54
|
+
- Updated dependencies [583f1d6]
|
|
55
|
+
- Updated dependencies [397d617]
|
|
56
|
+
- @open-pioneer/map-ui-components@0.7.0
|
|
57
|
+
- @open-pioneer/map@0.7.0
|
|
58
|
+
|
|
3
59
|
## 0.4.4
|
|
4
60
|
|
|
5
61
|
### Patch Changes
|
package/Geolocation.d.ts
CHANGED
|
@@ -1,14 +1,11 @@
|
|
|
1
|
+
import { MapModelProps } from "@open-pioneer/map";
|
|
1
2
|
import { CommonComponentProps } from "@open-pioneer/react-utils";
|
|
2
3
|
import { StyleLike } from "ol/style/Style";
|
|
3
4
|
import { FC, RefAttributes } from "react";
|
|
4
5
|
/**
|
|
5
6
|
* These are properties supported by the {@link Geolocation} component.
|
|
6
7
|
*/
|
|
7
|
-
export interface GeolocationProps extends CommonComponentProps, RefAttributes<HTMLButtonElement
|
|
8
|
-
/**
|
|
9
|
-
* The id of the map.
|
|
10
|
-
*/
|
|
11
|
-
mapId: string;
|
|
8
|
+
export interface GeolocationProps extends CommonComponentProps, RefAttributes<HTMLButtonElement>, MapModelProps {
|
|
12
9
|
/**
|
|
13
10
|
* The default maximal zoom level
|
|
14
11
|
*/
|
package/Geolocation.js
CHANGED
|
@@ -9,8 +9,8 @@ import { MdMyLocation } from 'react-icons/md';
|
|
|
9
9
|
import { GeolocationController } from './GeolocationController.js';
|
|
10
10
|
|
|
11
11
|
const Geolocation = forwardRef(function Geolocation2(props, ref) {
|
|
12
|
-
const {
|
|
13
|
-
const { map } = useMapModel(
|
|
12
|
+
const { maxZoom, positionFeatureStyle, accuracyFeatureStyle, trackingOptions } = props;
|
|
13
|
+
const { map } = useMapModel(props);
|
|
14
14
|
const controller = useController(
|
|
15
15
|
map,
|
|
16
16
|
maxZoom,
|
|
@@ -89,11 +89,7 @@ function useController(map, maxZoom, trackingOptions, positionFeatureStyle, accu
|
|
|
89
89
|
message: description
|
|
90
90
|
});
|
|
91
91
|
};
|
|
92
|
-
const geolocationController = new GeolocationController(
|
|
93
|
-
map.olMap,
|
|
94
|
-
onError,
|
|
95
|
-
trackingOptions
|
|
96
|
-
);
|
|
92
|
+
const geolocationController = new GeolocationController(map, onError, trackingOptions);
|
|
97
93
|
setController(geolocationController);
|
|
98
94
|
return () => {
|
|
99
95
|
geolocationController.destroy();
|
package/Geolocation.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Geolocation.js","sources":["Geolocation.tsx"],"sourcesContent":["// SPDX-FileCopyrightText: 2023 Open Pioneer project (https://github.com/open-pioneer)\n// SPDX-License-Identifier: Apache-2.0\nimport { MapModel, useMapModel } from \"@open-pioneer/map\";\nimport { ToolButton } from \"@open-pioneer/map-ui-components\";\nimport { NotificationService } from \"@open-pioneer/notifier\";\nimport { CommonComponentProps, useCommonComponentProps } from \"@open-pioneer/react-utils\";\nimport { useReactiveSnapshot } from \"@open-pioneer/reactivity\";\nimport { StyleLike } from \"ol/style/Style\";\nimport { useIntl, useService } from \"open-pioneer:react-hooks\";\nimport { FC, ForwardedRef, RefAttributes, forwardRef, useEffect, useState } from \"react\";\nimport { MdMyLocation } from \"react-icons/md\";\nimport { GeolocationController, OnErrorCallback } from \"./GeolocationController\";\n\n/**\n * These are properties supported by the {@link Geolocation} component.\n */\nexport interface GeolocationProps
|
|
1
|
+
{"version":3,"file":"Geolocation.js","sources":["Geolocation.tsx"],"sourcesContent":["// SPDX-FileCopyrightText: 2023 Open Pioneer project (https://github.com/open-pioneer)\n// SPDX-License-Identifier: Apache-2.0\nimport { MapModel, MapModelProps, useMapModel } from \"@open-pioneer/map\";\nimport { ToolButton } from \"@open-pioneer/map-ui-components\";\nimport { NotificationService } from \"@open-pioneer/notifier\";\nimport { CommonComponentProps, useCommonComponentProps } from \"@open-pioneer/react-utils\";\nimport { useReactiveSnapshot } from \"@open-pioneer/reactivity\";\nimport { StyleLike } from \"ol/style/Style\";\nimport { useIntl, useService } from \"open-pioneer:react-hooks\";\nimport { FC, ForwardedRef, RefAttributes, forwardRef, useEffect, useState } from \"react\";\nimport { MdMyLocation } from \"react-icons/md\";\nimport { GeolocationController, OnErrorCallback } from \"./GeolocationController\";\n\n/**\n * These are properties supported by the {@link Geolocation} component.\n */\nexport interface GeolocationProps\n extends CommonComponentProps,\n RefAttributes<HTMLButtonElement>,\n MapModelProps {\n /**\n * The default maximal zoom level\n */\n maxZoom?: number;\n /**\n * Style to be applied for the positioning highlight feature.\n */\n positionFeatureStyle?: StyleLike;\n /**\n * Style to be applied for the accuracy highlight of the positioning feature.\n */\n accuracyFeatureStyle?: StyleLike;\n /**\n * Position options for the Geolocation-Object.\n * See [PositionOptions](https://www.w3.org/TR/geolocation/#position_options_interface) for more details.\n *\n * NOTE: Changing the tracking options at runtime will reset the component's state.\n */\n trackingOptions?: PositionOptions;\n}\n\nexport const Geolocation: FC<GeolocationProps> = forwardRef(function Geolocation(\n props: GeolocationProps,\n ref: ForwardedRef<HTMLButtonElement>\n) {\n const { maxZoom, positionFeatureStyle, accuracyFeatureStyle, trackingOptions } = props;\n const { map } = useMapModel(props);\n const controller = useController(\n map,\n maxZoom,\n trackingOptions,\n positionFeatureStyle,\n accuracyFeatureStyle\n );\n return controller && <GeolocationImpl {...props} controller={controller} ref={ref} />;\n});\n\n// This is a separate component so we can act like the controller is always present.\n// This is the case in practice (except for the initial loading phase where the component is not-yet-mounted).\nconst GeolocationImpl = forwardRef(function GeolocationImpl(\n props: GeolocationProps & { controller: GeolocationController },\n ref: ForwardedRef<HTMLButtonElement>\n) {\n const { controller } = props;\n const { containerProps } = useCommonComponentProps(\"geolocation\", props);\n const { isLoading, isActive } = useReactiveSnapshot(() => {\n return {\n isLoading: controller.loading,\n isActive: controller.active\n };\n }, [controller]);\n\n const intl = useIntl();\n const label = (() => {\n if (!controller.supported) {\n return intl.formatMessage({ id: \"locateNotSupported\" });\n }\n\n if (isActive) {\n return intl.formatMessage({ id: \"locateMeEnd\" });\n } else {\n return intl.formatMessage({ id: \"locateMeStart\" });\n }\n })();\n\n const toggleActiveState = () => {\n if (controller.active) {\n controller.stopGeolocation();\n } else {\n controller.startGeolocation();\n }\n };\n\n return (\n <ToolButton\n ref={ref}\n label={label}\n icon={<MdMyLocation />}\n onClick={() => toggleActiveState()}\n isActive={isActive}\n isLoading={isLoading}\n isDisabled={!controller.supported}\n {...containerProps}\n />\n );\n});\n\nfunction useController(\n map: MapModel | undefined,\n maxZoom: number | undefined,\n trackingOptions: PositionOptions | undefined,\n positionFeatureStyle: StyleLike | undefined,\n accuracyFeatureStyle: StyleLike | undefined\n): GeolocationController | undefined {\n const intl = useIntl();\n const notificationService = useService<NotificationService>(\"notifier.NotificationService\");\n const [controller, setController] = useState<GeolocationController>();\n useEffect(() => {\n if (!map) {\n return;\n }\n\n const onError: OnErrorCallback = (error) => {\n const title = intl.formatMessage({ id: \"error\" });\n const description = (() => {\n switch (error) {\n case \"permission-denied\":\n return intl.formatMessage({ id: \"permissionDenied\" });\n case \"position-unavailable\":\n return intl.formatMessage({ id: \"positionUnavailable\" });\n case \"timeout\":\n return intl.formatMessage({ id: \"timeout\" });\n case \"unknown\":\n return intl.formatMessage({ id: \"unknownError\" });\n }\n })();\n\n notificationService.notify({\n level: \"error\",\n title: title,\n message: description\n });\n };\n\n const geolocationController = new GeolocationController(map, onError, trackingOptions);\n setController(geolocationController);\n\n return () => {\n geolocationController.destroy();\n setController(undefined);\n };\n }, [map, trackingOptions, intl, notificationService]);\n useEffect(() => {\n controller?.setPositionFeatureStyle(positionFeatureStyle);\n }, [controller, positionFeatureStyle]);\n useEffect(() => {\n controller?.setAccuracyFeatureStyle(accuracyFeatureStyle);\n }, [controller, accuracyFeatureStyle]);\n useEffect(() => {\n controller?.setMaxZoom(maxZoom);\n }, [controller, maxZoom]);\n return controller;\n}\n"],"names":["Geolocation","GeolocationImpl"],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
+
import { MapModel } from "@open-pioneer/map";
|
|
1
2
|
import Feature from "ol/Feature";
|
|
2
3
|
import olGeolocation from "ol/Geolocation";
|
|
3
|
-
import OlMap from "ol/Map";
|
|
4
4
|
import { Style } from "ol/style";
|
|
5
5
|
import { StyleLike } from "ol/style/Style";
|
|
6
6
|
export type ErrorEvent = "permission-denied" | "position-unavailable" | "timeout" | "unknown";
|
|
@@ -9,7 +9,7 @@ export declare class GeolocationController {
|
|
|
9
9
|
#private;
|
|
10
10
|
/** True if location tracking is supported by the browser. */
|
|
11
11
|
readonly supported = true;
|
|
12
|
-
private readonly
|
|
12
|
+
private readonly map;
|
|
13
13
|
private readonly positionHighlightLayer;
|
|
14
14
|
private readonly geolocation;
|
|
15
15
|
private readonly onError;
|
|
@@ -20,7 +20,7 @@ export declare class GeolocationController {
|
|
|
20
20
|
private setMapToPosition;
|
|
21
21
|
private trackingOptions;
|
|
22
22
|
private isInitialZoom;
|
|
23
|
-
constructor(
|
|
23
|
+
constructor(map: MapModel, onError: OnErrorCallback, trackingOptions?: PositionOptions);
|
|
24
24
|
destroy(): void;
|
|
25
25
|
startGeolocation(): void;
|
|
26
26
|
stopGeolocation(): void;
|
package/GeolocationController.js
CHANGED
|
@@ -14,7 +14,7 @@ const DEFAULT_MAX_ZOOM = 17;
|
|
|
14
14
|
class GeolocationController {
|
|
15
15
|
/** True if location tracking is supported by the browser. */
|
|
16
16
|
supported = !!navigator.geolocation;
|
|
17
|
-
|
|
17
|
+
map;
|
|
18
18
|
positionHighlightLayer;
|
|
19
19
|
geolocation;
|
|
20
20
|
onError;
|
|
@@ -27,8 +27,8 @@ class GeolocationController {
|
|
|
27
27
|
isInitialZoom = true;
|
|
28
28
|
#loading = reactive(false);
|
|
29
29
|
#active = reactive(false);
|
|
30
|
-
constructor(
|
|
31
|
-
this.
|
|
30
|
+
constructor(map, onError, trackingOptions) {
|
|
31
|
+
this.map = map;
|
|
32
32
|
this.onError = onError;
|
|
33
33
|
this.isInitialZoom = true;
|
|
34
34
|
this.accuracyFeature = new Feature();
|
|
@@ -45,7 +45,7 @@ class GeolocationController {
|
|
|
45
45
|
this.geolocation = new olGeolocation({
|
|
46
46
|
tracking: false,
|
|
47
47
|
trackingOptions: geolocationTrackingOptions,
|
|
48
|
-
projection:
|
|
48
|
+
projection: map.olView?.getProjection()
|
|
49
49
|
});
|
|
50
50
|
this.trackingOptions = geolocationTrackingOptions;
|
|
51
51
|
this.geolocation.on("error", (event) => this.handleGeolocationError(event));
|
|
@@ -62,11 +62,10 @@ class GeolocationController {
|
|
|
62
62
|
if (this.#active.value) {
|
|
63
63
|
return;
|
|
64
64
|
}
|
|
65
|
-
const olMap = this.olMap;
|
|
66
65
|
const geolocationPromise = new Promise((resolve) => {
|
|
67
66
|
this.#active.value = true;
|
|
68
67
|
this.#loading.value = true;
|
|
69
|
-
this.geolocation?.setProjection(
|
|
68
|
+
this.geolocation?.setProjection(this.map.olView?.getProjection());
|
|
70
69
|
this.geolocation?.setTracking(true);
|
|
71
70
|
const accuracyChangeHandler = this.geolocation.on(
|
|
72
71
|
"change:accuracyGeometry",
|
|
@@ -83,7 +82,7 @@ class GeolocationController {
|
|
|
83
82
|
if (!bufferedExtent) {
|
|
84
83
|
return;
|
|
85
84
|
}
|
|
86
|
-
|
|
85
|
+
this.map.olView.fit(bufferedExtent, {
|
|
87
86
|
maxZoom: this.maxZoom
|
|
88
87
|
});
|
|
89
88
|
this.isInitialZoom = false;
|
|
@@ -96,17 +95,20 @@ class GeolocationController {
|
|
|
96
95
|
if (coordinates && (coordinates[0] || coordinates[1]) !== void 0) {
|
|
97
96
|
this.positionFeature?.setGeometry(new Point(coordinates));
|
|
98
97
|
if (this.setMapToPosition) {
|
|
99
|
-
|
|
98
|
+
this.map.olView.setCenter(coordinates);
|
|
100
99
|
}
|
|
101
100
|
if (this.positionFeature?.getGeometry() !== void 0) {
|
|
102
101
|
resolve();
|
|
103
102
|
}
|
|
104
103
|
}
|
|
105
104
|
});
|
|
106
|
-
const resolutionChangeHandler =
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
105
|
+
const resolutionChangeHandler = this.map.olView.on(
|
|
106
|
+
"change:resolution",
|
|
107
|
+
() => {
|
|
108
|
+
this.setMapToPosition = this.isInitialZoom;
|
|
109
|
+
}
|
|
110
|
+
);
|
|
111
|
+
const draggingHandler = this.map.olMap.on("pointermove", (evt) => {
|
|
110
112
|
if (evt.dragging) {
|
|
111
113
|
this.setMapToPosition = false;
|
|
112
114
|
}
|
|
@@ -117,7 +119,7 @@ class GeolocationController {
|
|
|
117
119
|
resolutionChangeHandler,
|
|
118
120
|
draggingHandler
|
|
119
121
|
);
|
|
120
|
-
olMap.addLayer(this.positionHighlightLayer);
|
|
122
|
+
this.map.olMap.addLayer(this.positionHighlightLayer);
|
|
121
123
|
});
|
|
122
124
|
geolocationPromise.then(() => {
|
|
123
125
|
this.#loading.value = false;
|
|
@@ -138,7 +140,7 @@ class GeolocationController {
|
|
|
138
140
|
this.changeHandlers = [];
|
|
139
141
|
this.accuracyFeature?.setGeometry(void 0);
|
|
140
142
|
this.positionFeature?.setGeometry(void 0);
|
|
141
|
-
this.olMap.removeLayer(this.positionHighlightLayer);
|
|
143
|
+
this.map.olMap.removeLayer(this.positionHighlightLayer);
|
|
142
144
|
}
|
|
143
145
|
/** True if the position is being tracked. */
|
|
144
146
|
get active() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GeolocationController.js","sources":["GeolocationController.ts"],"sourcesContent":["// SPDX-FileCopyrightText: 2023 Open Pioneer project (https://github.com/open-pioneer)\n// SPDX-License-Identifier: Apache-2.0\nimport { reactive } from \"@conterra/reactivity-core\";\nimport { createLogger } from \"@open-pioneer/core\";\nimport { TOPMOST_LAYER_Z, calculateBufferedExtent } from \"@open-pioneer/map\";\nimport Feature from \"ol/Feature\";\nimport olGeolocation, { GeolocationError } from \"ol/Geolocation\";\nimport OlMap from \"ol/Map\";\nimport { unByKey } from \"ol/Observable\";\nimport { Coordinate } from \"ol/coordinate\";\nimport type { EventsKey } from \"ol/events\";\nimport { Extent } from \"ol/extent\";\nimport { Polygon } from \"ol/geom\";\nimport Point from \"ol/geom/Point\";\nimport VectorLayer from \"ol/layer/Vector\";\nimport VectorSource from \"ol/source/Vector\";\nimport { Circle as CircleStyle, Fill, Stroke, Style } from \"ol/style\";\nimport { StyleLike } from \"ol/style/Style\";\n\nconst LOG = createLogger(\"geolocation:GeolocationController\");\nconst DEFAULT_MAX_ZOOM = 17;\n\nexport type ErrorEvent = \"permission-denied\" | \"position-unavailable\" | \"timeout\" | \"unknown\";\n\nexport type OnErrorCallback = (errorEvent: ErrorEvent) => void;\n\nexport class GeolocationController {\n /** True if location tracking is supported by the browser. */\n public readonly supported = !!navigator.geolocation;\n\n private readonly olMap: OlMap;\n private readonly positionHighlightLayer: VectorLayer<Feature>;\n private readonly geolocation: olGeolocation;\n private readonly onError: OnErrorCallback;\n\n private maxZoom: number = DEFAULT_MAX_ZOOM;\n private accuracyFeature: Feature | undefined;\n private positionFeature: Feature | undefined;\n private changeHandlers: EventsKey[] = [];\n private setMapToPosition: boolean = true;\n private trackingOptions: PositionOptions = {};\n private isInitialZoom: boolean = true;\n\n #loading = reactive(false);\n #active = reactive(false);\n\n constructor(olMap: OlMap, onError: OnErrorCallback, trackingOptions?: PositionOptions) {\n this.olMap = olMap;\n this.onError = onError;\n this.isInitialZoom = true;\n\n this.accuracyFeature = new Feature();\n this.accuracyFeature.setStyle(getDefaultAccuracyStyle());\n\n this.positionFeature = new Feature();\n this.positionFeature.setStyle(getDefaultPositionStyle());\n\n this.positionHighlightLayer = new VectorLayer({\n source: new VectorSource({\n features: [this.accuracyFeature, this.positionFeature]\n })\n });\n this.positionHighlightLayer.setZIndex(TOPMOST_LAYER_Z);\n\n const geolocationTrackingOptions: PositionOptions =\n trackingOptions || getDefaultTrackingOptions();\n\n this.geolocation = new olGeolocation({\n tracking: false,\n trackingOptions: geolocationTrackingOptions,\n projection: olMap.getView()?.getProjection()\n });\n\n this.trackingOptions = geolocationTrackingOptions;\n this.geolocation.on(\"error\", (event) => this.handleGeolocationError(event));\n }\n\n destroy() {\n this.stopGeolocation();\n this.geolocation?.setTracking(false);\n this.geolocation.dispose();\n this.accuracyFeature = undefined;\n this.positionFeature = undefined;\n this.positionHighlightLayer.dispose();\n }\n\n startGeolocation() {\n if (this.#active.value) {\n return;\n }\n\n const olMap = this.olMap;\n const geolocationPromise = new Promise<void>((resolve) => {\n this.#active.value = true;\n this.#loading.value = true;\n\n this.geolocation?.setProjection(olMap.getView()?.getProjection());\n this.geolocation?.setTracking(true);\n\n const accuracyChangeHandler: EventsKey = this.geolocation.on(\n \"change:accuracyGeometry\",\n () => {\n const accuracyGeometry: Polygon | undefined =\n this.geolocation.getAccuracyGeometry() || undefined;\n this.accuracyFeature?.setGeometry(accuracyGeometry);\n if (this.accuracyFeature?.getGeometry() !== undefined) {\n resolve();\n }\n if (this.isInitialZoom) {\n const accuracyGeometryExtent: Extent | undefined = this?.accuracyFeature\n ?.getGeometry()\n ?.getExtent();\n if (accuracyGeometryExtent) {\n const bufferedExtent = calculateBufferedExtent(accuracyGeometryExtent);\n if (!bufferedExtent) {\n return;\n }\n olMap.getView().fit(bufferedExtent, {\n maxZoom: this.maxZoom\n });\n this.isInitialZoom = false;\n }\n }\n }\n );\n\n const positionChangeHandler: EventsKey = this.geolocation.on(\"change:position\", () => {\n const coordinates: Coordinate | undefined = this.geolocation.getPosition();\n if (coordinates && (coordinates[0] || coordinates[1]) !== undefined) {\n this.positionFeature?.setGeometry(new Point(coordinates));\n if (this.setMapToPosition) {\n olMap.getView().setCenter(coordinates);\n }\n if (this.positionFeature?.getGeometry() !== undefined) {\n resolve();\n }\n }\n });\n\n // zoom changes\n const resolutionChangeHandler: EventsKey = olMap\n .getView()\n .on(\"change:resolution\", () => {\n this.setMapToPosition = this.isInitialZoom;\n });\n\n // pointermove is triggered when a pointer is moved.\n // Note that on touch devices this is triggered when the map is panned,\n // so is not the same as mousemove.\n const draggingHandler: EventsKey = olMap.on(\"pointermove\", (evt) => {\n if (evt.dragging) {\n this.setMapToPosition = false;\n }\n });\n\n this.changeHandlers.push(\n accuracyChangeHandler,\n positionChangeHandler,\n resolutionChangeHandler,\n draggingHandler\n );\n\n olMap.addLayer(this.positionHighlightLayer);\n });\n\n geolocationPromise\n .then(() => {\n // Promise resolves once we have a position\n this.#loading.value = false;\n })\n .catch((error: Error) => {\n LOG.error(\"Failed to determine location\", error);\n });\n }\n\n stopGeolocation() {\n this.geolocation?.setTracking(false);\n this.#active.value = false;\n this.#loading.value = false;\n this.trackingOptions = {};\n this.setMapToPosition = true;\n this.isInitialZoom = true;\n\n this.changeHandlers.forEach((handler) => {\n unByKey(handler);\n });\n this.changeHandlers = [];\n this.accuracyFeature?.setGeometry(undefined);\n this.positionFeature?.setGeometry(undefined);\n this.olMap.removeLayer(this.positionHighlightLayer);\n }\n\n /** True if the position is being tracked. */\n get active(): boolean {\n return this.#active.value;\n }\n\n /**\n * True if loading (active but no position available yet).\n * Use this to show a progress indicator.\n */\n get loading(): boolean {\n return this.#loading.value;\n }\n\n setPositionFeatureStyle(styleLike: StyleLike | undefined) {\n this.positionFeature?.setStyle(styleLike ?? getDefaultPositionStyle());\n }\n\n setAccuracyFeatureStyle(styleLike: StyleLike | undefined) {\n this.accuracyFeature?.setStyle(styleLike ?? getDefaultAccuracyStyle());\n }\n\n setMaxZoom(maxZoom: number | undefined) {\n this.maxZoom = maxZoom ?? DEFAULT_MAX_ZOOM;\n }\n\n getMaxZoom() {\n return this.maxZoom;\n }\n\n getPositionFeature() {\n return this.positionFeature;\n }\n\n getAccuracyFeature() {\n return this.accuracyFeature;\n }\n\n getTrackingOptions() {\n return this.trackingOptions;\n }\n\n getGeolocation() {\n return this.geolocation;\n }\n\n private handleGeolocationError(event: GeolocationError) {\n LOG.error(\"Error from geolocation API:\", event.message);\n\n this.stopGeolocation();\n const error: ErrorEvent = (() => {\n switch (event.code) {\n case 1:\n return \"permission-denied\";\n case 2:\n return \"position-unavailable\";\n case 3:\n return \"timeout\";\n default:\n return \"unknown\";\n }\n })();\n this.onError(error);\n }\n}\n\nexport const getDefaultPositionStyle = () => {\n return new Style({\n image: new CircleStyle({\n radius: 6,\n fill: new Fill({\n color: \"#3399CC\"\n }),\n stroke: new Stroke({\n color: \"#fff\",\n width: 2\n })\n })\n });\n};\n\nexport const getDefaultAccuracyStyle = () => {\n return new Style({\n stroke: new Stroke({\n color: \"#3399CC\",\n width: 3\n }),\n fill: new Fill({\n color: \"rgba(0, 0, 255, 0.05)\"\n })\n });\n};\n\nexport const getDefaultTrackingOptions = (): PositionOptions => {\n return {\n \"enableHighAccuracy\": true,\n \"timeout\": 60000,\n \"maximumAge\": 600000\n };\n};\n"],"names":["CircleStyle"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"GeolocationController.js","sources":["GeolocationController.ts"],"sourcesContent":["// SPDX-FileCopyrightText: 2023 Open Pioneer project (https://github.com/open-pioneer)\n// SPDX-License-Identifier: Apache-2.0\nimport { reactive } from \"@conterra/reactivity-core\";\nimport { createLogger } from \"@open-pioneer/core\";\nimport { TOPMOST_LAYER_Z, calculateBufferedExtent, MapModel } from \"@open-pioneer/map\";\nimport Feature from \"ol/Feature\";\nimport olGeolocation, { GeolocationError } from \"ol/Geolocation\";\nimport { unByKey } from \"ol/Observable\";\nimport { Coordinate } from \"ol/coordinate\";\nimport type { EventsKey } from \"ol/events\";\nimport { Extent } from \"ol/extent\";\nimport { Polygon } from \"ol/geom\";\nimport Point from \"ol/geom/Point\";\nimport VectorLayer from \"ol/layer/Vector\";\nimport VectorSource from \"ol/source/Vector\";\nimport { Circle as CircleStyle, Fill, Stroke, Style } from \"ol/style\";\nimport { StyleLike } from \"ol/style/Style\";\n\nconst LOG = createLogger(\"geolocation:GeolocationController\");\nconst DEFAULT_MAX_ZOOM = 17;\n\nexport type ErrorEvent = \"permission-denied\" | \"position-unavailable\" | \"timeout\" | \"unknown\";\n\nexport type OnErrorCallback = (errorEvent: ErrorEvent) => void;\n\nexport class GeolocationController {\n /** True if location tracking is supported by the browser. */\n public readonly supported = !!navigator.geolocation;\n\n private readonly map: MapModel;\n private readonly positionHighlightLayer: VectorLayer<VectorSource, Feature>;\n private readonly geolocation: olGeolocation;\n private readonly onError: OnErrorCallback;\n\n private maxZoom: number = DEFAULT_MAX_ZOOM;\n private accuracyFeature: Feature | undefined;\n private positionFeature: Feature | undefined;\n private changeHandlers: EventsKey[] = [];\n private setMapToPosition: boolean = true;\n private trackingOptions: PositionOptions = {};\n private isInitialZoom: boolean = true;\n\n #loading = reactive(false);\n #active = reactive(false);\n\n constructor(map: MapModel, onError: OnErrorCallback, trackingOptions?: PositionOptions) {\n this.map = map;\n this.onError = onError;\n this.isInitialZoom = true;\n\n this.accuracyFeature = new Feature();\n this.accuracyFeature.setStyle(getDefaultAccuracyStyle());\n\n this.positionFeature = new Feature();\n this.positionFeature.setStyle(getDefaultPositionStyle());\n\n this.positionHighlightLayer = new VectorLayer({\n source: new VectorSource({\n features: [this.accuracyFeature, this.positionFeature]\n })\n });\n this.positionHighlightLayer.setZIndex(TOPMOST_LAYER_Z);\n\n const geolocationTrackingOptions: PositionOptions =\n trackingOptions || getDefaultTrackingOptions();\n\n this.geolocation = new olGeolocation({\n tracking: false,\n trackingOptions: geolocationTrackingOptions,\n projection: map.olView?.getProjection()\n });\n\n this.trackingOptions = geolocationTrackingOptions;\n this.geolocation.on(\"error\", (event) => this.handleGeolocationError(event));\n }\n\n destroy() {\n this.stopGeolocation();\n this.geolocation?.setTracking(false);\n this.geolocation.dispose();\n this.accuracyFeature = undefined;\n this.positionFeature = undefined;\n this.positionHighlightLayer.dispose();\n }\n\n startGeolocation() {\n if (this.#active.value) {\n return;\n }\n\n const geolocationPromise = new Promise<void>((resolve) => {\n this.#active.value = true;\n this.#loading.value = true;\n\n this.geolocation?.setProjection(this.map.olView?.getProjection());\n this.geolocation?.setTracking(true);\n\n const accuracyChangeHandler: EventsKey = this.geolocation.on(\n \"change:accuracyGeometry\",\n () => {\n const accuracyGeometry: Polygon | undefined =\n this.geolocation.getAccuracyGeometry() || undefined;\n this.accuracyFeature?.setGeometry(accuracyGeometry);\n if (this.accuracyFeature?.getGeometry() !== undefined) {\n resolve();\n }\n if (this.isInitialZoom) {\n const accuracyGeometryExtent: Extent | undefined = this?.accuracyFeature\n ?.getGeometry()\n ?.getExtent();\n if (accuracyGeometryExtent) {\n const bufferedExtent = calculateBufferedExtent(accuracyGeometryExtent);\n if (!bufferedExtent) {\n return;\n }\n this.map.olView.fit(bufferedExtent, {\n maxZoom: this.maxZoom\n });\n this.isInitialZoom = false;\n }\n }\n }\n );\n\n const positionChangeHandler: EventsKey = this.geolocation.on(\"change:position\", () => {\n const coordinates: Coordinate | undefined = this.geolocation.getPosition();\n if (coordinates && (coordinates[0] || coordinates[1]) !== undefined) {\n this.positionFeature?.setGeometry(new Point(coordinates));\n if (this.setMapToPosition) {\n this.map.olView.setCenter(coordinates);\n }\n if (this.positionFeature?.getGeometry() !== undefined) {\n resolve();\n }\n }\n });\n\n // zoom changes\n const resolutionChangeHandler: EventsKey = this.map.olView.on(\n \"change:resolution\",\n () => {\n this.setMapToPosition = this.isInitialZoom;\n }\n );\n\n // pointermove is triggered when a pointer is moved.\n // Note that on touch devices this is triggered when the map is panned,\n // so is not the same as mousemove.\n const draggingHandler: EventsKey = this.map.olMap.on(\"pointermove\", (evt) => {\n if (evt.dragging) {\n this.setMapToPosition = false;\n }\n });\n\n this.changeHandlers.push(\n accuracyChangeHandler,\n positionChangeHandler,\n resolutionChangeHandler,\n draggingHandler\n );\n\n this.map.olMap.addLayer(this.positionHighlightLayer);\n });\n\n geolocationPromise\n .then(() => {\n // Promise resolves once we have a position\n this.#loading.value = false;\n })\n .catch((error: Error) => {\n LOG.error(\"Failed to determine location\", error);\n });\n }\n\n stopGeolocation() {\n this.geolocation?.setTracking(false);\n this.#active.value = false;\n this.#loading.value = false;\n this.trackingOptions = {};\n this.setMapToPosition = true;\n this.isInitialZoom = true;\n\n this.changeHandlers.forEach((handler) => {\n unByKey(handler);\n });\n this.changeHandlers = [];\n this.accuracyFeature?.setGeometry(undefined);\n this.positionFeature?.setGeometry(undefined);\n this.map.olMap.removeLayer(this.positionHighlightLayer);\n }\n\n /** True if the position is being tracked. */\n get active(): boolean {\n return this.#active.value;\n }\n\n /**\n * True if loading (active but no position available yet).\n * Use this to show a progress indicator.\n */\n get loading(): boolean {\n return this.#loading.value;\n }\n\n setPositionFeatureStyle(styleLike: StyleLike | undefined) {\n this.positionFeature?.setStyle(styleLike ?? getDefaultPositionStyle());\n }\n\n setAccuracyFeatureStyle(styleLike: StyleLike | undefined) {\n this.accuracyFeature?.setStyle(styleLike ?? getDefaultAccuracyStyle());\n }\n\n setMaxZoom(maxZoom: number | undefined) {\n this.maxZoom = maxZoom ?? DEFAULT_MAX_ZOOM;\n }\n\n getMaxZoom() {\n return this.maxZoom;\n }\n\n getPositionFeature() {\n return this.positionFeature;\n }\n\n getAccuracyFeature() {\n return this.accuracyFeature;\n }\n\n getTrackingOptions() {\n return this.trackingOptions;\n }\n\n getGeolocation() {\n return this.geolocation;\n }\n\n private handleGeolocationError(event: GeolocationError) {\n LOG.error(\"Error from geolocation API:\", event.message);\n\n this.stopGeolocation();\n const error: ErrorEvent = (() => {\n switch (event.code) {\n case 1:\n return \"permission-denied\";\n case 2:\n return \"position-unavailable\";\n case 3:\n return \"timeout\";\n default:\n return \"unknown\";\n }\n })();\n this.onError(error);\n }\n}\n\nexport const getDefaultPositionStyle = () => {\n return new Style({\n image: new CircleStyle({\n radius: 6,\n fill: new Fill({\n color: \"#3399CC\"\n }),\n stroke: new Stroke({\n color: \"#fff\",\n width: 2\n })\n })\n });\n};\n\nexport const getDefaultAccuracyStyle = () => {\n return new Style({\n stroke: new Stroke({\n color: \"#3399CC\",\n width: 3\n }),\n fill: new Fill({\n color: \"rgba(0, 0, 255, 0.05)\"\n })\n });\n};\n\nexport const getDefaultTrackingOptions = (): PositionOptions => {\n return {\n \"enableHighAccuracy\": true,\n \"timeout\": 60000,\n \"maximumAge\": 600000\n };\n};\n"],"names":["CircleStyle"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"type": "module",
|
|
3
3
|
"name": "@open-pioneer/geolocation",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.8.0-dev.20241120115147",
|
|
5
5
|
"description": "This package provides a component to locate a user's position.",
|
|
6
6
|
"keywords": [
|
|
7
7
|
"open-pioneer-trails"
|
|
@@ -13,19 +13,19 @@
|
|
|
13
13
|
"url": "https://github.com/open-pioneer/trails-openlayers-base-packages",
|
|
14
14
|
"directory": "src/packages/geolocation"
|
|
15
15
|
},
|
|
16
|
-
"
|
|
17
|
-
"@conterra/reactivity-core": "^0.4.
|
|
18
|
-
"@open-pioneer/chakra-integration": "^
|
|
19
|
-
"@open-pioneer/core": "^
|
|
20
|
-
"@open-pioneer/notifier": "^0.
|
|
21
|
-
"@open-pioneer/react-utils": "^
|
|
22
|
-
"@open-pioneer/reactivity": "^
|
|
23
|
-
"@open-pioneer/runtime": "^2.
|
|
24
|
-
"ol": "^
|
|
16
|
+
"dependencies": {
|
|
17
|
+
"@conterra/reactivity-core": "^0.4.3",
|
|
18
|
+
"@open-pioneer/chakra-integration": "^2.4.0-dev.20241120092632",
|
|
19
|
+
"@open-pioneer/core": "^2.4.0-dev.20241120092632",
|
|
20
|
+
"@open-pioneer/notifier": "^2.4.0-dev.20241120092632",
|
|
21
|
+
"@open-pioneer/react-utils": "^2.4.0-dev.20241120092632",
|
|
22
|
+
"@open-pioneer/reactivity": "^2.4.0-dev.20241120092632",
|
|
23
|
+
"@open-pioneer/runtime": "^2.4.0-dev.20241120092632",
|
|
24
|
+
"ol": "^10.2.1",
|
|
25
25
|
"react": "^18.3.1",
|
|
26
|
-
"react-icons": "^5.
|
|
27
|
-
"@open-pioneer/map
|
|
28
|
-
"@open-pioneer/map": "^0.
|
|
26
|
+
"react-icons": "^5.3.0",
|
|
27
|
+
"@open-pioneer/map": "^0.8.0-dev.20241120115147",
|
|
28
|
+
"@open-pioneer/map-ui-components": "^0.8.0-dev.20241120115147"
|
|
29
29
|
},
|
|
30
30
|
"exports": {
|
|
31
31
|
"./package.json": "./package.json",
|