aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnton Tananaev <anton.tananaev@gmail.com>2020-10-31 13:15:42 -0700
committerAnton Tananaev <anton.tananaev@gmail.com>2020-10-31 13:15:42 -0700
commit1e2e8d9bea0560d3ea75b40ca5cd7ab0bb5f4afd (patch)
tree4de8c565e95842ce1ae9f70a96ffd7f430180b9a
parentdac214c3ac6066a6f23cf92807da89cc1a86c105 (diff)
downloadtrackermap-web-1e2e8d9bea0560d3ea75b40ca5cd7ab0bb5f4afd.tar.gz
trackermap-web-1e2e8d9bea0560d3ea75b40ca5cd7ab0bb5f4afd.tar.bz2
trackermap-web-1e2e8d9bea0560d3ea75b40ca5cd7ab0bb5f4afd.zip
Import GPX file as geofence
-rw-r--r--web/app/view/map/GeofenceMap.js20
-rw-r--r--web/app/view/map/GeofenceMapController.js24
-rw-r--r--web/l10n/en.json1
3 files changed, 45 insertions, 0 deletions
diff --git a/web/app/view/map/GeofenceMap.js b/web/app/view/map/GeofenceMap.js
index 8cef574b..18c33862 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 f075ac93..5274bc39 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 dceba5f8..38670418 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",