From 1e2e8d9bea0560d3ea75b40ca5cd7ab0bb5f4afd Mon Sep 17 00:00:00 2001 From: Anton Tananaev Date: Sat, 31 Oct 2020 13:15:42 -0700 Subject: Import GPX file as geofence --- web/app/view/map/GeofenceMap.js | 20 ++++++++++++++++++++ web/app/view/map/GeofenceMapController.js | 24 ++++++++++++++++++++++++ web/l10n/en.json | 1 + 3 files changed, 45 insertions(+) (limited to 'web') diff --git a/web/app/view/map/GeofenceMap.js b/web/app/view/map/GeofenceMap.js index 8cef574..18c3386 100644 --- a/web/app/view/map/GeofenceMap.js +++ b/web/app/view/map/GeofenceMap.js @@ -37,6 +37,26 @@ Ext.define('Traccar.view.map.GeofenceMap', { listeners: { select: 'onTypeSelect' } + }, '-', { + xtype: 'tbtext', + html: Strings.sharedImport + }, { + xtype: 'filefield', + name: 'file', + buttonConfig: { + glyph: 'xf093@FontAwesome', + text: '', + tooltip: Strings.sharedSelectFile, + tooltipType: 'title' + }, + listeners: { + change: 'onFileChange', + afterrender: function (fileField) { + fileField.fileInputEl.set({ + accept: '.gpx' + }); + } + } }, { xtype: 'tbfill' }, { diff --git a/web/app/view/map/GeofenceMapController.js b/web/app/view/map/GeofenceMapController.js index f075ac9..5274bc3 100644 --- a/web/app/view/map/GeofenceMapController.js +++ b/web/app/view/map/GeofenceMapController.js @@ -33,6 +33,30 @@ Ext.define('Traccar.view.map.GeofenceMapController', { } }, + onFileChange: function (fileField) { + var reader, parser, xml, segment, point, projection, points = [], view = this.getView(); + if (fileField.fileInputEl.dom.files.length > 0) { + reader = new FileReader(); + reader.onload = function (event) { + parser = new DOMParser(); + xml = parser.parseFromString(reader.result, 'text/xml'); + segment = xml.getElementsByTagName('trkseg')[0]; + projection = view.mapView.getProjection(); + Array.from(segment.getElementsByTagName('trkpt')).forEach(function (point) { + lat = Number(point.getAttribute('lat')); + lon = Number(point.getAttribute('lon')); + points.push(ol.proj.transform([lon, lat], 'EPSG:4326', projection)); + }); + view.getFeatures().clear(); + view.getFeatures().push(new ol.Feature(new ol.geom.LineString(points))); + }; + reader.onerror = function (event) { + Traccar.app.showError(event.target.error); + }; + reader.readAsText(fileField.fileInputEl.dom.files[0]); + } + }, + onSaveClick: function (button) { var geometry, projection; if (this.getView().getFeatures().getLength() > 0) { diff --git a/web/l10n/en.json b/web/l10n/en.json index dceba5f..3867041 100644 --- a/web/l10n/en.json +++ b/web/l10n/en.json @@ -82,6 +82,7 @@ "sharedDeviceAccumulators": "Accumulators", "sharedAlarms": "Alarms", "sharedLocation": "Location", + "sharedImport": "Import", "attributeSpeedLimit": "Speed Limit", "attributePolylineDistance": "Polyline Distance", "attributeReportIgnoreOdometer": "Report: Ignore Odometer", -- cgit v1.2.3