aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnton Tananaev <anton.tananaev@gmail.com>2021-03-10 09:30:17 -0800
committerGitHub <noreply@github.com>2021-03-10 09:30:17 -0800
commitcdb873bef8bfc951a7d95e55c995ac0d186c3143 (patch)
tree2c3c41a8d3d6e75bf0c6be06f7a46534bc75783d
parent624914d7bbafc3b78c439dd35d725ca368f0fd0d (diff)
parentdfebe4fde8da3fdae568b1b5e4f07686c6c4a7f3 (diff)
downloadtrackermap-web-cdb873bef8bfc951a7d95e55c995ac0d186c3143.tar.gz
trackermap-web-cdb873bef8bfc951a7d95e55c995ac0d186c3143.tar.bz2
trackermap-web-cdb873bef8bfc951a7d95e55c995ac0d186c3143.zip
Merge pull request #822 from mikems66/circlefence
Transform circle fence to polygon fence
-rw-r--r--modern/src/map/GeofenceMap.js9
-rw-r--r--modern/src/map/mapUtil.js24
2 files changed, 26 insertions, 7 deletions
diff --git a/modern/src/map/GeofenceMap.js b/modern/src/map/GeofenceMap.js
index 53d951d2..c98a8c16 100644
--- a/modern/src/map/GeofenceMap.js
+++ b/modern/src/map/GeofenceMap.js
@@ -1,9 +1,8 @@
-import wellknown from 'wellknown';
import { useEffect, useState } from 'react';
import { map } from './Map';
import { useEffectAsync } from '../reactHelper';
-import { reverseCoordinates } from './mapUtil';
+import { geofenceToFeature } from './mapUtil';
const GeofenceMap = () => {
const id = 'geofences';
@@ -74,11 +73,7 @@ const GeofenceMap = () => {
useEffect(() => {
map.getSource(id).setData({
type: 'FeatureCollection',
- features: geofences.map(item => [item.name, reverseCoordinates(wellknown(item.area))]).filter(([, geometry]) => !!geometry).map(([name, geometry]) => ({
- type: 'Feature',
- geometry: geometry,
- properties: { name },
- })),
+ features: geofences.map(geofenceToFeature)
});
}, [geofences]);
diff --git a/modern/src/map/mapUtil.js b/modern/src/map/mapUtil.js
index 15f16202..e7dc0327 100644
--- a/modern/src/map/mapUtil.js
+++ b/modern/src/map/mapUtil.js
@@ -1,3 +1,6 @@
+import wellknown from 'wellknown';
+import circle from '@turf/circle';
+
export const loadImage = (url) => {
return new Promise(imageLoaded => {
const image = new Image();
@@ -43,3 +46,24 @@ export const reverseCoordinates = it => {
}
}
}
+
+export const geofenceToFeature = (item) => {
+ if (item.area.indexOf('CIRCLE') > -1) {
+ let coordinates = item.area.replace(/CIRCLE|\(|\)|,/g, " ").trim().split(/ +/);
+ var options = { steps: 32, units: 'meters' };
+ let polygon = circle([Number(coordinates[1]), Number(coordinates[0])], Number(coordinates[2]), options);
+ return {
+ type: 'Feature',
+ geometry: polygon.geometry,
+ properties: { name: item.name }
+ };
+ } else {
+ return {
+ type: 'Feature',
+ geometry: reverseCoordinates(wellknown(item.area)),
+ properties: { name: item.name }
+ };
+ }
+}
+
+