diff options
-rw-r--r-- | web/app/GeofenceConverter.js | 22 | ||||
-rw-r--r-- | web/app/store/GeofenceTypes.js | 3 | ||||
-rw-r--r-- | web/l10n/en.json | 1 |
3 files changed, 26 insertions, 0 deletions
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 }] }); diff --git a/web/l10n/en.json b/web/l10n/en.json index 55335da5..c558abdf 100644 --- a/web/l10n/en.json +++ b/web/l10n/en.json @@ -111,6 +111,7 @@ "mapBingAerial": "Bing Maps Aerial", "mapShapePolygon": "Polygon", "mapShapeCircle": "Circle", + "mapShapePolyline": "Polyline", "mapLiveRoutes": "Live Routes", "stateTitle": "State", "stateName": "Attribute", |