From eb8d6f28ec5b764043b99cdadfd60a51a79423a8 Mon Sep 17 00:00:00 2001 From: Abyss777 Date: Sat, 26 Nov 2016 19:23:10 +0700 Subject: Implement polyline geofences --- web/app/GeofenceConverter.js | 22 ++++++++++++++++++++++ web/app/store/GeofenceTypes.js | 3 +++ 2 files changed, 25 insertions(+) (limited to 'web/app') diff --git a/web/app/GeofenceConverter.js b/web/app/GeofenceConverter.js index f0e28b3f..9e3c1327 100644 --- a/web/app/GeofenceConverter.js +++ b/web/app/GeofenceConverter.js @@ -49,6 +49,20 @@ Ext.define('Traccar.GeofenceConverter', { geometry = new ol.geom.Circle(center, radius); } } + } else if (wkt.lastIndexOf('LINESTRING', 0) === 0) { + content = wkt.match(/\([^\(\)]+\)/); + if (content !== null) { + coordinates = content[0].match(/-?\d+\.?\d*/g); + if (coordinates !== null) { + projection = mapView.getProjection(); + for (i = 0; i < coordinates.length; i += 2) { + lat = Number(coordinates[i]); + lon = Number(coordinates[i + 1]); + points.push(ol.proj.transform([lon, lat], 'EPSG:4326', projection)); + } + geometry = new ol.geom.LineString(points); + } + } } return geometry; }, @@ -74,6 +88,14 @@ Ext.define('Traccar.GeofenceConverter', { result += points[0][i][1] + ' ' + points[0][i][0] + ', '; } result = result.substring(0, result.length - 2) + '))'; + } else if (geometry instanceof ol.geom.LineString) { + geometry.transform(projection, 'EPSG:4326'); + points = geometry.getCoordinates(); + result = 'LINESTRING ('; + for (i = 0; i < points.length; i += 1) { + result += points[i][1] + ' ' + points[i][0] + ', '; + } + result = result.substring(0, result.length - 2) + ')'; } return result; } diff --git a/web/app/store/GeofenceTypes.js b/web/app/store/GeofenceTypes.js index c102de69..45b79897 100644 --- a/web/app/store/GeofenceTypes.js +++ b/web/app/store/GeofenceTypes.js @@ -25,5 +25,8 @@ Ext.define('Traccar.store.GeofenceTypes', { }, { key: 'Circle', name: Strings.mapShapeCircle + }, { + key: 'LineString', + name: Strings.mapShapePolyline }] }); -- cgit v1.2.3