@sumaris-net/ngx-components 2.4.63 → 2.4.65
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/esm2020/src/app/shared/geolocation/geolocation.utils.mjs +45 -7
- package/fesm2015/sumaris-net.ngx-components.mjs +43 -6
- package/fesm2015/sumaris-net.ngx-components.mjs.map +1 -1
- package/fesm2020/sumaris-net.ngx-components.mjs +43 -6
- package/fesm2020/sumaris-net.ngx-components.mjs.map +1 -1
- package/package.json +2 -2
- package/src/app/shared/geolocation/geolocation.utils.d.ts +9 -1
|
@@ -1,14 +1,46 @@
|
|
|
1
1
|
import { Geolocation } from '@capacitor/geolocation';
|
|
2
|
+
import { isNil } from '../functions';
|
|
2
3
|
export class IPosition {
|
|
3
4
|
}
|
|
4
5
|
export class GeolocationUtils {
|
|
6
|
+
static isNotNilAndValid(position, opts) {
|
|
7
|
+
if (!position || isNil(position.latitude) || isNil(position.longitude))
|
|
8
|
+
return false;
|
|
9
|
+
// Invalid lat/lon
|
|
10
|
+
if (position.latitude < -90 || position.latitude > 90
|
|
11
|
+
|| position.longitude < -180 || position.longitude > 180) {
|
|
12
|
+
// /!\ Log in console, because should never occur
|
|
13
|
+
if (opts?.debug)
|
|
14
|
+
console.warn('Invalid lat/long position: ', position);
|
|
15
|
+
return false;
|
|
16
|
+
}
|
|
17
|
+
// OK: valid
|
|
18
|
+
return true;
|
|
19
|
+
}
|
|
20
|
+
static isNilOrInvalid(position, opts) {
|
|
21
|
+
return !GeolocationUtils.isNotNilAndValid(position, opts);
|
|
22
|
+
}
|
|
23
|
+
static computeDistanceInMiles(position1, position2) {
|
|
24
|
+
// Invalid position(s): skip
|
|
25
|
+
if (GeolocationUtils.isNilOrInvalid(position1, { debug: true })
|
|
26
|
+
|| GeolocationUtils.isNilOrInvalid(position2, { debug: true }))
|
|
27
|
+
return;
|
|
28
|
+
const latitude1Rad = Math.PI * position1.latitude / 180;
|
|
29
|
+
const longitude1Rad = Math.PI * position1.longitude / 180;
|
|
30
|
+
const latitude2Rad = Math.PI * position2.latitude / 180;
|
|
31
|
+
const longitude2Rad = Math.PI * position2.longitude / 180;
|
|
32
|
+
let distance = 2 * 6371 * Math.asin(Math.sqrt(Math.pow(Math.sin((latitude1Rad - latitude2Rad) / 2), 2)
|
|
33
|
+
+ Math.cos(latitude1Rad) * Math.cos(latitude2Rad) * Math.pow(Math.sin((longitude2Rad - longitude1Rad) / 2), 2)));
|
|
34
|
+
distance = Math.round((((distance / 1.852) + Number.EPSILON) * 100)) / 100;
|
|
35
|
+
return distance;
|
|
36
|
+
}
|
|
5
37
|
/**
|
|
6
38
|
* Get the position by geo loc sensor
|
|
7
39
|
*/
|
|
8
40
|
static async getCurrentPosition(platform, options) {
|
|
9
41
|
// Use Capacitor plugin
|
|
10
42
|
try {
|
|
11
|
-
console.info(`[
|
|
43
|
+
console.info(`[geolocation-utils] Get current geo location, using Capacitor...(timeout: ${options?.timeout})`);
|
|
12
44
|
const pos = await Geolocation.getCurrentPosition(options);
|
|
13
45
|
return {
|
|
14
46
|
latitude: pos.coords.latitude,
|
|
@@ -16,13 +48,19 @@ export class GeolocationUtils {
|
|
|
16
48
|
};
|
|
17
49
|
}
|
|
18
50
|
catch (err) {
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
51
|
+
// If capacitor : throw error (cannot fallback to browser geolocation, because of browser security limitation)
|
|
52
|
+
if (platform.is('capacitor')) {
|
|
53
|
+
console.error(`[geolocation-utils] Cannot get current geo location, using Capacitor: ${err?.message || ''} (code=${err?.code || 'null'})`);
|
|
54
|
+
const permissions = await Geolocation.checkPermissions();
|
|
55
|
+
const permissionStatus = permissions?.coarseLocation || permissions?.location;
|
|
56
|
+
if (permissionStatus === 'denied') {
|
|
57
|
+
throw { ...err, code: GeolocationPositionError.PERMISSION_DENIED };
|
|
58
|
+
}
|
|
22
59
|
throw err;
|
|
60
|
+
}
|
|
23
61
|
}
|
|
24
62
|
// Or fallback to navigator
|
|
25
|
-
console.info('[
|
|
63
|
+
console.info('[geolocation-utils] Get current geo location, using browser...');
|
|
26
64
|
return new Promise((resolve, reject) => {
|
|
27
65
|
navigator.geolocation.getCurrentPosition((res) => {
|
|
28
66
|
resolve({
|
|
@@ -32,10 +70,10 @@ export class GeolocationUtils {
|
|
|
32
70
|
}, (err) => {
|
|
33
71
|
let message = err?.message || err;
|
|
34
72
|
message = typeof message === 'string' ? message : JSON.stringify(message);
|
|
35
|
-
console.error('[
|
|
73
|
+
console.error('[geolocation-utils] Cannot get current geo location, using browser:' + message);
|
|
36
74
|
reject(err);
|
|
37
75
|
}, options);
|
|
38
76
|
});
|
|
39
77
|
}
|
|
40
78
|
}
|
|
41
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
79
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VvbG9jYXRpb24udXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL3NoYXJlZC9nZW9sb2NhdGlvbi9nZW9sb2NhdGlvbi51dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsV0FBVyxFQUFZLE1BQU0sd0JBQXdCLENBQUM7QUFHL0QsT0FBTyxFQUFDLEtBQUssRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUVuQyxNQUFNLE9BQU8sU0FBUztDQUdyQjtBQUVELE1BQU0sT0FBZ0IsZ0JBQWdCO0lBRXBDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFtQixFQUFFLElBQXdCO1FBRW5FLElBQUksQ0FBQyxRQUFRLElBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxLQUFLLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQztZQUFFLE9BQU8sS0FBSyxDQUFDO1FBRXJGLGtCQUFrQjtRQUNsQixJQUFJLFFBQVEsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxFQUFFLElBQUksUUFBUSxDQUFDLFFBQVEsR0FBRyxFQUFFO2VBQ2hELFFBQVEsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxHQUFHLElBQUksUUFBUSxDQUFDLFNBQVMsR0FBRyxHQUFHLEVBQUU7WUFFMUQsaURBQWlEO1lBQ2pELElBQUksSUFBSSxFQUFFLEtBQUs7Z0JBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyw4QkFBOEIsRUFBRSxRQUFRLENBQUMsQ0FBQztZQUN4RSxPQUFPLEtBQUssQ0FBQztTQUNkO1FBRUQsWUFBWTtRQUNaLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELE1BQU0sQ0FBQyxjQUFjLENBQUMsUUFBbUIsRUFBRSxJQUF3QjtRQUNqRSxPQUFPLENBQUMsZ0JBQWdCLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzVELENBQUM7SUFFRCxNQUFNLENBQUMsc0JB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SSxDQUFDLGdFQUFnRSxDQUFDLENBQUE7UUFDOUUsT0FBTyxJQUFJLE9BQU8sQ0FBWSxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUNoRCxTQUFTLENBQUMsV0FBVyxDQUFDLGtCQUFrQixDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7Z0JBQzdDLE9BQU8sQ0FBWTtvQkFDakIsUUFBUSxFQUFFLEdBQUcsQ0FBQyxNQUFNLENBQUMsUUFBUTtvQkFDN0IsU0FBUyxFQUFFLEdBQUcsQ0FBQyxNQUFNLENBQUMsU0FBUztpQkFDaEMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQyxFQUNELENBQUMsR0FBRyxFQUFFLEVBQUU7Z0JBQ04sSUFBSSxPQUFPLEdBQUcsR0FBRyxFQUFFLE9BQU8sSUFBSSxHQUFHLENBQUM7Z0JBQ2xDLE9BQU8sR0FBRyxPQUFPLE9BQU8sS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDMUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxxRUFBcUUsR0FBRyxPQUFPLENBQUMsQ0FBQztnQkFDL0YsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ2QsQ0FBQyxFQUNELE9BQU8sQ0FDUixDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0NBRUYiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBHZW9sb2NhdGlvbiwgUG9zaXRpb24gfSBmcm9tICdAY2FwYWNpdG9yL2dlb2xvY2F0aW9uJztcbmltcG9ydCB7UGxhdGZvcm1TZXJ2aWNlfSBmcm9tICcuLi8uLi9jb3JlL3NlcnZpY2VzL3BsYXRmb3JtLnNlcnZpY2UnO1xuaW1wb3J0IHtQbGF0Zm9ybX0gZnJvbSAnQGlvbmljL2FuZ3VsYXInO1xuaW1wb3J0IHtpc05pbH0gZnJvbSAnLi4vZnVuY3Rpb25zJztcblxuZXhwb3J0IGNsYXNzIElQb3NpdGlvbiB7XG4gIGxhdGl0dWRlOiBudW1iZXI7XG4gIGxvbmdpdHVkZTogbnVtYmVyO1xufVxuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgR2VvbG9jYXRpb25VdGlscyB7XG5cbiAgc3RhdGljIGlzTm90TmlsQW5kVmFsaWQocG9zaXRpb246IElQb3NpdGlvbiwgb3B0cz86IHtkZWJ1Zz86IGJvb2xlYW59KSB7XG5cbiAgICBpZiAoIXBvc2l0aW9uIHx8IGlzTmlsKHBvc2l0aW9uLmxhdGl0dWRlKSB8fCBpc05pbChwb3NpdGlvbi5sb25naXR1ZGUpKSByZXR1cm4gZmFsc2U7XG5cbiAgICAvLyBJbnZhbGlkIGxhdC9sb25cbiAgICBpZiAocG9zaXRpb24ubGF0aXR1ZGUgPCAtOTAgfHwgcG9zaXRpb24ubGF0aXR1ZGUgPiA5MFxuICAgICAgfHwgcG9zaXRpb24ubG9uZ2l0dWRlIDwgLTE4MCB8fCBwb3NpdGlvbi5sb25naXR1ZGUgPiAxODApIHtcblxuICAgICAgLy8gLyFcXCBMb2cgaW4gY29uc29sZSwgYmVjYXVzZSBzaG91bGQgbmV2ZXIgb2NjdXJcbiAgICAgIGlmIChvcHRzPy5kZWJ1ZykgY29uc29sZS53YXJuKCdJbnZhbGlkIGxhdC9sb25nIHBvc2l0aW9uOiAgJywgcG9zaXRpb24pO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIE9LOiB2YWxpZFxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgc3RhdGljIGlzTmlsT3JJbnZhbGlkKHBvc2l0aW9uOiBJUG9zaXRpb24sIG9wdHM/OiB7ZGVidWc/OiBib29sZWFufSkge1xuICAgIHJldHVybiAhR2VvbG9jYXRpb25VdGlscy5pc05vdE5pbEFuZFZhbGlkKHBvc2l0aW9uLCBvcHRzKTtcbiAgfVxuXG4gIHN0YXRpYyBjb21wdXRlRGlzdGFuY2VJbk1pbGVzKHBvc2l0aW9uMTogSVBvc2l0aW9uLCBwb3NpdGlvbjI6IElQb3NpdGlvbik6IG51bWJlciB7XG4gICAgLy8gSW52YWxpZCBwb3NpdGlvbihzKTogc2tpcFxuICAgIGlmIChHZW9sb2NhdGlvblV0aWxzLmlzTmlsT3JJbnZhbGlkKHBvc2l0aW9uMSwge2RlYnVnOiB0cnVlfSlcbiAgICAgIHx8IEdlb2xvY2F0aW9uVXRpbHMuaXNOaWxPckludmFsaWQocG9zaXRpb24yLCB7ZGVidWc6IHRydWV9KSkgcmV0dXJuO1xuXG4gICAgY29uc3QgbGF0aXR1ZGUxUmFkID0gTWF0aC5QSSAqIHBvc2l0aW9uMS5sYXRpdHVkZSAvIDE4MDtcbiAgICBjb25zdCBsb25naXR1ZGUxUmFkID0gTWF0aC5QSSAqIHBvc2l0aW9uMS5sb25naXR1ZGUgLyAxODA7XG4gICAgY29uc3QgbGF0aXR1ZGUyUmFkID0gTWF0aC5QSSAqIHBvc2l0aW9uMi5sYXRpdHVkZSAvIDE4MDtcbiAgICBjb25zdCBsb25naXR1ZGUyUmFkID0gTWF0aC5QSSAqIHBvc2l0aW9uMi5sb25naXR1ZGUgLyAxODA7XG5cbiAgICBsZXQgZGlzdGFuY2UgPSAyICogNjM3MSAqIE1hdGguYXNpbihcbiAgICAgIE1hdGguc3FydChcbiAgICAgICAgTWF0aC5wb3coTWF0aC5zaW4oKGxhdGl0dWRlMVJhZCAtIGxhdGl0dWRlMlJhZCkgLyAyKSwgMilcbiAgICAgICAgKyBNYXRoLmNvcyhsYXRpdHVkZTFSYWQpICogTWF0aC5jb3MobGF0aXR1ZGUyUmFkKSAqIE1hdGgucG93KE1hdGguc2luKChsb25naXR1ZGUyUmFkIC0gbG9uZ2l0dWRlMVJhZCkgLyAyKSwgMilcbiAgICAgICkpO1xuICAgIGRpc3RhbmNlID0gTWF0aC5yb3VuZCgoKChkaXN0YW5jZSAvIDEuODUyKSArIE51bWJlci5FUFNJTE9OKSAqIDEwMCkpIC8gMTAwO1xuICAgIHJldHVybiBkaXN0YW5jZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHBvc2l0aW9uIGJ5IGdlbyBsb2Mgc2Vuc29yXG4gICAqL1xuICBzdGF0aWMgYXN5bmMgZ2V0Q3VycmVudFBvc2l0aW9uKHBsYXRmb3JtOiBQbGF0Zm9ybVNlcnZpY2V8UGxhdGZvcm0sIG9wdGlvbnM/OiBQb3NpdGlvbk9wdGlvbnMpOiBQcm9taXNlPElQb3NpdGlvbj4ge1xuXG4gICAgLy8gVXNlIENhcGFjaXRvciBwbHVnaW5cbiAgICB0cnkge1xuICAgICAgY29uc29sZS5pbmZvKGBbZ2VvbG9jYXRpb24tdXRpbHNdIEdldCBjdXJyZW50IGdlbyBsb2NhdGlvbiwgdXNpbmcgQ2FwYWNpdG9yLi4uKHRpbWVvdXQ6ICR7b3B0aW9ucz8udGltZW91dH0pYCk7XG4gICAgICBjb25zdCBwb3M6IFBvc2l0aW9uID0gYXdhaXQgR2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKG9wdGlvbnMpO1xuICAgICAgcmV0dXJuIDxJUG9zaXRpb24+e1xuICAgICAgICBsYXRpdHVkZTogcG9zLmNvb3Jkcy5sYXRpdHVkZSxcbiAgICAgICAgbG9uZ2l0dWRlOiBwb3MuY29vcmRzLmxvbmdpdHVkZVxuICAgICAgfTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIC8vIElmIGNhcGFjaXRvciA6IHRocm93IGVycm9yIChjYW5ub3QgZmFsbGJhY2sgdG8gYnJvd3NlciBnZW9sb2NhdGlvbiwgYmVjYXVzZSBvZiBicm93c2VyIHNlY3VyaXR5IGxpbWl0YXRpb24pXG4gICAgICBpZiAocGxhdGZvcm0uaXMoJ2NhcGFjaXRvcicpKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYFtnZW9sb2NhdGlvbi11dGlsc10gQ2Fubm90IGdldCBjdXJyZW50IGdlbyBsb2NhdGlvbiwgdXNpbmcgQ2FwYWNpdG9yOiAke2Vycj8ubWVzc2FnZSB8fCAnJ30gKGNvZGU9JHtlcnI/LmNvZGUgfHwgJ251bGwnfSlgKTtcbiAgICAgICAgY29uc3QgcGVybWlzc2lvbnMgPSBhd2FpdCBHZW9sb2NhdGlvbi5jaGVja1Blcm1pc3Npb25zKCk7XG4gICAgICAgIGNvbnN0IHBlcm1pc3Npb25TdGF0dXMgPSBwZXJtaXNzaW9ucz8uY29hcnNlTG9jYXRpb24gfHwgcGVybWlzc2lvbnM/LmxvY2F0aW9uO1xuICAgICAgICBpZiAocGVybWlzc2lvblN0YXR1cyA9PT0gJ2RlbmllZCcpIHtcbiAgICAgICAgICB0aHJvdyB7Li4uZXJyLCBjb2RlOiBHZW9sb2NhdGlvblBvc2l0aW9uRXJyb3IuUEVSTUlTU0lPTl9ERU5JRUR9O1xuICAgICAgICB9XG4gICAgICAgIHRocm93IGVycjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBPciBmYWxsYmFjayB0byBuYXZpZ2F0b3JcbiAgICBjb25zb2xlLmluZm8oJ1tnZW9sb2NhdGlvbi11dGlsc10gR2V0IGN1cnJlbnQgZ2VvIGxvY2F0aW9uLCB1c2luZyBicm93c2VyLi4uJylcbiAgICByZXR1cm4gbmV3IFByb21pc2U8SVBvc2l0aW9uPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBuYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKChyZXMpID0+IHtcbiAgICAgICAgICByZXNvbHZlKDxJUG9zaXRpb24+e1xuICAgICAgICAgICAgbGF0aXR1ZGU6IHJlcy5jb29yZHMubGF0aXR1ZGUsXG4gICAgICAgICAgICBsb25naXR1ZGU6IHJlcy5jb29yZHMubG9uZ2l0dWRlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIChlcnIpID0+IHtcbiAgICAgICAgICBsZXQgbWVzc2FnZSA9IGVycj8ubWVzc2FnZSB8fCBlcnI7XG4gICAgICAgICAgbWVzc2FnZSA9IHR5cGVvZiBtZXNzYWdlID09PSAnc3RyaW5nJyA/IG1lc3NhZ2UgOiBKU09OLnN0cmluZ2lmeShtZXNzYWdlKTtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdbZ2VvbG9jYXRpb24tdXRpbHNdIENhbm5vdCBnZXQgY3VycmVudCBnZW8gbG9jYXRpb24sIHVzaW5nIGJyb3dzZXI6JyArIG1lc3NhZ2UpO1xuICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICB9LFxuICAgICAgICBvcHRpb25zXG4gICAgICApO1xuICAgIH0pO1xuICB9XG5cbn1cbiJdfQ==
|
|
@@ -21994,6 +21994,37 @@ class JobUtils {
|
|
|
21994
21994
|
class IPosition {
|
|
21995
21995
|
}
|
|
21996
21996
|
class GeolocationUtils {
|
|
21997
|
+
static isNotNilAndValid(position, opts) {
|
|
21998
|
+
if (!position || isNil(position.latitude) || isNil(position.longitude))
|
|
21999
|
+
return false;
|
|
22000
|
+
// Invalid lat/lon
|
|
22001
|
+
if (position.latitude < -90 || position.latitude > 90
|
|
22002
|
+
|| position.longitude < -180 || position.longitude > 180) {
|
|
22003
|
+
// /!\ Log in console, because should never occur
|
|
22004
|
+
if (opts === null || opts === void 0 ? void 0 : opts.debug)
|
|
22005
|
+
console.warn('Invalid lat/long position: ', position);
|
|
22006
|
+
return false;
|
|
22007
|
+
}
|
|
22008
|
+
// OK: valid
|
|
22009
|
+
return true;
|
|
22010
|
+
}
|
|
22011
|
+
static isNilOrInvalid(position, opts) {
|
|
22012
|
+
return !GeolocationUtils.isNotNilAndValid(position, opts);
|
|
22013
|
+
}
|
|
22014
|
+
static computeDistanceInMiles(position1, position2) {
|
|
22015
|
+
// Invalid position(s): skip
|
|
22016
|
+
if (GeolocationUtils.isNilOrInvalid(position1, { debug: true })
|
|
22017
|
+
|| GeolocationUtils.isNilOrInvalid(position2, { debug: true }))
|
|
22018
|
+
return;
|
|
22019
|
+
const latitude1Rad = Math.PI * position1.latitude / 180;
|
|
22020
|
+
const longitude1Rad = Math.PI * position1.longitude / 180;
|
|
22021
|
+
const latitude2Rad = Math.PI * position2.latitude / 180;
|
|
22022
|
+
const longitude2Rad = Math.PI * position2.longitude / 180;
|
|
22023
|
+
let distance = 2 * 6371 * Math.asin(Math.sqrt(Math.pow(Math.sin((latitude1Rad - latitude2Rad) / 2), 2)
|
|
22024
|
+
+ Math.cos(latitude1Rad) * Math.cos(latitude2Rad) * Math.pow(Math.sin((longitude2Rad - longitude1Rad) / 2), 2)));
|
|
22025
|
+
distance = Math.round((((distance / 1.852) + Number.EPSILON) * 100)) / 100;
|
|
22026
|
+
return distance;
|
|
22027
|
+
}
|
|
21997
22028
|
/**
|
|
21998
22029
|
* Get the position by geo loc sensor
|
|
21999
22030
|
*/
|
|
@@ -22001,7 +22032,7 @@ class GeolocationUtils {
|
|
|
22001
22032
|
return __awaiter(this, void 0, void 0, function* () {
|
|
22002
22033
|
// Use Capacitor plugin
|
|
22003
22034
|
try {
|
|
22004
|
-
console.info(`[
|
|
22035
|
+
console.info(`[geolocation-utils] Get current geo location, using Capacitor...(timeout: ${options === null || options === void 0 ? void 0 : options.timeout})`);
|
|
22005
22036
|
const pos = yield Geolocation.getCurrentPosition(options);
|
|
22006
22037
|
return {
|
|
22007
22038
|
latitude: pos.coords.latitude,
|
|
@@ -22009,13 +22040,19 @@ class GeolocationUtils {
|
|
|
22009
22040
|
};
|
|
22010
22041
|
}
|
|
22011
22042
|
catch (err) {
|
|
22012
|
-
|
|
22013
|
-
|
|
22014
|
-
|
|
22043
|
+
// If capacitor : throw error (cannot fallback to browser geolocation, because of browser security limitation)
|
|
22044
|
+
if (platform.is('capacitor')) {
|
|
22045
|
+
console.error(`[geolocation-utils] Cannot get current geo location, using Capacitor: ${(err === null || err === void 0 ? void 0 : err.message) || ''} (code=${(err === null || err === void 0 ? void 0 : err.code) || 'null'})`);
|
|
22046
|
+
const permissions = yield Geolocation.checkPermissions();
|
|
22047
|
+
const permissionStatus = (permissions === null || permissions === void 0 ? void 0 : permissions.coarseLocation) || (permissions === null || permissions === void 0 ? void 0 : permissions.location);
|
|
22048
|
+
if (permissionStatus === 'denied') {
|
|
22049
|
+
throw Object.assign(Object.assign({}, err), { code: GeolocationPositionError.PERMISSION_DENIED });
|
|
22050
|
+
}
|
|
22015
22051
|
throw err;
|
|
22052
|
+
}
|
|
22016
22053
|
}
|
|
22017
22054
|
// Or fallback to navigator
|
|
22018
|
-
console.info('[
|
|
22055
|
+
console.info('[geolocation-utils] Get current geo location, using browser...');
|
|
22019
22056
|
return new Promise((resolve, reject) => {
|
|
22020
22057
|
navigator.geolocation.getCurrentPosition((res) => {
|
|
22021
22058
|
resolve({
|
|
@@ -22025,7 +22062,7 @@ class GeolocationUtils {
|
|
|
22025
22062
|
}, (err) => {
|
|
22026
22063
|
let message = (err === null || err === void 0 ? void 0 : err.message) || err;
|
|
22027
22064
|
message = typeof message === 'string' ? message : JSON.stringify(message);
|
|
22028
|
-
console.error('[
|
|
22065
|
+
console.error('[geolocation-utils] Cannot get current geo location, using browser:' + message);
|
|
22029
22066
|
reject(err);
|
|
22030
22067
|
}, options);
|
|
22031
22068
|
});
|