diff options
author | Anton Tananaev <anton.tananaev@gmail.com> | 2021-03-10 09:30:17 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-03-10 09:30:17 -0800 |
commit | cdb873bef8bfc951a7d95e55c995ac0d186c3143 (patch) | |
tree | 2c3c41a8d3d6e75bf0c6be06f7a46534bc75783d /modern/src | |
parent | 624914d7bbafc3b78c439dd35d725ca368f0fd0d (diff) | |
parent | dfebe4fde8da3fdae568b1b5e4f07686c6c4a7f3 (diff) | |
download | etbsa-traccar-web-cdb873bef8bfc951a7d95e55c995ac0d186c3143.tar.gz etbsa-traccar-web-cdb873bef8bfc951a7d95e55c995ac0d186c3143.tar.bz2 etbsa-traccar-web-cdb873bef8bfc951a7d95e55c995ac0d186c3143.zip |
Merge pull request #822 from mikems66/circlefence
Transform circle fence to polygon fence
Diffstat (limited to 'modern/src')
-rw-r--r-- | modern/src/map/GeofenceMap.js | 9 | ||||
-rw-r--r-- | modern/src/map/mapUtil.js | 24 |
2 files changed, 26 insertions, 7 deletions
diff --git a/modern/src/map/GeofenceMap.js b/modern/src/map/GeofenceMap.js index 53d951d..c98a8c1 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 15f1620..e7dc032 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 } + }; + } +} + + |