From b69eb1d72ce706d4e76014daa19b3720ee633feb Mon Sep 17 00:00:00 2001 From: Anton Tananaev Date: Sat, 18 Sep 2021 22:15:32 -0700 Subject: Add accuracy button --- web/app/view/map/Map.js | 16 ++++++++++++++-- web/app/view/map/MapController.js | 4 ++++ 2 files changed, 18 insertions(+), 2 deletions(-) (limited to 'web') diff --git a/web/app/view/map/Map.js b/web/app/view/map/Map.js index fbaa758..36e81de 100644 --- a/web/app/view/map/Map.js +++ b/web/app/view/map/Map.js @@ -65,6 +65,13 @@ Ext.define('Traccar.view.map.Map', { pressed: true, stateId: 'show-geofences-button', tooltip: Strings.sharedGeofences + }, { + handler: 'showAccuracy', + reference: 'showAccuracyButton', + glyph: 'xf140@FontAwesome', + pressed: true, + stateId: 'show-accuracy-button', + tooltip: Strings.positionAccuracy }, { handler: 'showCurrentLocation', glyph: 'xf124@FontAwesome', @@ -95,6 +102,10 @@ Ext.define('Traccar.view.map.Map', { return this.accuracySource; }, + getAccuracyLayer: function () { + return this.accuracyLayer; + }, + getRouteSource: function () { return this.routeSource; }, @@ -133,10 +144,11 @@ Ext.define('Traccar.view.map.Map', { })); this.accuracySource = new ol.source.Vector({}); - this.map.addLayer(new ol.layer.Vector({ + this.accuracyLayer = new ol.layer.Vector({ name: 'accuracyLayer', source: this.accuracySource - })); + }); + this.map.addLayer(this.accuracyLayer); this.markersSource = new ol.source.Vector({}); this.map.addLayer(new ol.layer.Vector({ diff --git a/web/app/view/map/MapController.js b/web/app/view/map/MapController.js index 7ba0ee3..d025b58 100644 --- a/web/app/view/map/MapController.js +++ b/web/app/view/map/MapController.js @@ -68,6 +68,10 @@ Ext.define('Traccar.view.map.MapController', { this.getView().getLiveRouteLayer().setVisible(button.pressed); }, + showAccuracy: function (button) { + this.getView().getAccuracyLayer().setVisible(button.pressed); + }, + getMapState: function () { var zoom, center, projection; projection = this.getView().getMapView().getProjection(); -- cgit v1.2.3 From 69ad0505188b822a540b14ec5a7d1654ec3375f4 Mon Sep 17 00:00:00 2001 From: Anton Tananaev Date: Sun, 31 Oct 2021 16:23:20 -0700 Subject: Merge shock and vibration alarms --- web/l10n/en.json | 1 - 1 file changed, 1 deletion(-) (limited to 'web') diff --git a/web/l10n/en.json b/web/l10n/en.json index 97243a6..8ee4d65 100644 --- a/web/l10n/en.json +++ b/web/l10n/en.json @@ -375,7 +375,6 @@ "alarmJamming": "Jamming", "alarmTemperature": "Temperature", "alarmParking": "Parking", - "alarmShock": "Shock", "alarmBonnet": "Bonnet", "alarmFootBrake": "Foot Brake", "alarmFuelLeak": "Fuel Leak", -- cgit v1.2.3 From ea72b9f96d6e03a4f9bbbeadcc8f41efbff4427f Mon Sep 17 00:00:00 2001 From: Anton Tananaev Date: Thu, 4 Nov 2021 23:23:37 -0700 Subject: Add events alarm column --- web/app/view/ReportController.js | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'web') diff --git a/web/app/view/ReportController.js b/web/app/view/ReportController.js index cc0fd4a..4241df3 100644 --- a/web/app/view/ReportController.js +++ b/web/app/view/ReportController.js @@ -527,6 +527,12 @@ Ext.define('Traccar.view.ReportController', { renderer: function (value) { return Traccar.app.getEventString(value); } + }, { + text: Strings.positionAlarm, + dataIndex: 'attributes', + renderer: function (value) { + return value['alarm']; + } }, { text: Strings.sharedGeofence, dataIndex: 'geofenceId', -- cgit v1.2.3 From a8d499612b3e37f0ba3864eb97ea396221be8cb7 Mon Sep 17 00:00:00 2001 From: Anton Tananaev Date: Thu, 25 Nov 2021 17:04:26 -0800 Subject: Enable LocationIQ by default --- modern/src/map/Map.js | 8 ++++++-- modern/src/map/mapStyles.js | 2 ++ web/app/store/MapTypes.js | 9 +++++++++ web/app/view/map/BaseMap.js | 32 ++++++++++++++++++++++++++++++-- web/l10n/en.json | 3 +++ 5 files changed, 50 insertions(+), 4 deletions(-) (limited to 'web') diff --git a/modern/src/map/Map.js b/modern/src/map/Map.js index 5e182a4..65094d7 100644 --- a/modern/src/map/Map.js +++ b/modern/src/map/Map.js @@ -8,7 +8,7 @@ import { SwitcherControl } from './switcher/switcher'; import deviceCategories from '../common/deviceCategories'; import { prepareIcon, loadImage } from './mapUtil'; import { - styleCarto, styleMapbox, styleMapTiler, styleOsm, + styleCarto, styleLocationIq, styleMapbox, styleMapTiler, styleOsm, } from './mapStyles'; import { useAttributePreference } from '../common/preferences'; import palette from '../theme/palette'; @@ -89,6 +89,7 @@ const Map = ({ children }) => { const mapboxAccessToken = useAttributePreference('mapboxAccessToken'); const mapTilerKey = useAttributePreference('mapTilerKey'); + const locationIqKey = useAttributePreference('locationIqKey', 'pk.b34237342901fc175252c790d1674dcc'); useEffect(() => { maplibregl.accessToken = mapboxAccessToken; @@ -96,6 +97,9 @@ const Map = ({ children }) => { useEffect(() => { switcher.updateStyles([ + { id: 'locationIqStreets', title: t('mapLocationIqStreets'), uri: styleLocationIq('streets', locationIqKey) }, + { id: 'locationIqEarth', title: t('mapLocationIqEarth'), uri: styleLocationIq('earth', locationIqKey) }, + { id: 'locationIqHybrid', title: t('mapLocationIqHybrid'), uri: styleLocationIq('hybrid', locationIqKey) }, { id: 'osm', title: t('mapOsm'), uri: styleOsm() }, { id: 'carto', title: t('mapCarto'), uri: styleCarto() }, { id: 'mapboxStreets', title: t('mapMapboxStreets'), uri: styleMapbox('streets-v11') }, @@ -103,7 +107,7 @@ const Map = ({ children }) => { { id: 'mapboxSatellite', title: t('mapMapboxSatellite'), uri: styleMapbox('satellite-v9') }, { id: 'mapTilerBasic', title: t('mapMapTilerBasic'), uri: styleMapTiler('basic', mapTilerKey) }, { id: 'mapTilerHybrid', title: t('mapMapTilerHybrid'), uri: styleMapTiler('hybrid', mapTilerKey) }, - ], 'osm'); + ], 'locationIqStreets'); }, [mapTilerKey]); useEffect(() => { diff --git a/modern/src/map/mapStyles.js b/modern/src/map/mapStyles.js index 9650ead..86813a1 100644 --- a/modern/src/map/mapStyles.js +++ b/modern/src/map/mapStyles.js @@ -51,3 +51,5 @@ export const styleCarto = () => ({ export const styleMapbox = (style) => `mapbox://styles/mapbox/${style}`; export const styleMapTiler = (style, key) => `https://api.maptiler.com/maps/${style}/style.json?key=${key}`; + +export const styleLocationIq = (style, key) => `https://tiles.locationiq.com/v3/${style}/vector.json?key=${key}`; diff --git a/web/app/store/MapTypes.js b/web/app/store/MapTypes.js index 9cca525..0165756 100644 --- a/web/app/store/MapTypes.js +++ b/web/app/store/MapTypes.js @@ -20,6 +20,15 @@ Ext.define('Traccar.store.MapTypes', { fields: ['key', 'name'], data: [{ + key: 'locationIqStreets', + name: Strings.mapLocationIqStreets + }, { + key: 'locationIqEarth', + name: Strings.mapLocationIqEarth + }, { + key: 'locationIqHybrid', + name: Strings.mapLocationIqHybrid + }, { key: 'osm', name: Strings.mapOsm }, { diff --git a/web/app/view/map/BaseMap.js b/web/app/view/map/BaseMap.js index efd0502..e280de8 100644 --- a/web/app/view/map/BaseMap.js +++ b/web/app/view/map/BaseMap.js @@ -30,12 +30,13 @@ Ext.define('Traccar.view.map.BaseMap', { }, initMap: function () { - var server, layer, type, bingKey, lat, lon, zoom, maxZoom, target, poiLayer, self = this; + var server, layer, type, bingKey, locationIqKey, lat, lon, zoom, maxZoom, target, poiLayer, self = this; server = Traccar.app.getServer(); type = Traccar.app.getPreference('map', null); bingKey = server.get('bingKey'); + locationIqKey = Traccar.app.getAttributePreference('locationIqKey', 'pk.b34237342901fc175252c790d1674dcc'); layer = new ol.layer.Group({ title: Strings.mapLayer, @@ -125,8 +126,35 @@ Ext.define('Traccar.view.map.BaseMap', { new ol.layer.Tile({ title: Strings.mapOsm, type: 'base', - visible: type === 'osm' || type === 'wikimedia' || !type, + visible: type === 'osm', source: new ol.source.OSM({}) + }), + new ol.layer.Tile({ + title: Strings.mapLocationIqHybrid, + type: 'base', + visible: type === 'locationIqHybrid', + source: new ol.source.XYZ({ + url: 'https://{a-c}-tiles.locationiq.com/v3/hybrid/r/{z}/{x}/{y}.jpg?key=' + locationIqKey, + attributions: '© LocationIQ' + }) + }), + new ol.layer.Tile({ + title: Strings.mapLocationIqEarth, + type: 'base', + visible: type === 'locationIqEarth', + source: new ol.source.XYZ({ + url: 'https://{a-c}-tiles.locationiq.com/v3/earth/r/{z}/{x}/{y}.jpg?key=' + locationIqKey, + attributions: '© LocationIQ' + }) + }), + new ol.layer.Tile({ + title: Strings.mapLocationIqStreets, + type: 'base', + visible: type === 'locationIqStreets' || type === 'wikimedia' || !type, + source: new ol.source.XYZ({ + url: 'https://{a-c}-tiles.locationiq.com/v3/streets/r/{z}/{x}/{y}.png?key=' + locationIqKey, + attributions: '© LocationIQ' + }) }) ] }); diff --git a/web/l10n/en.json b/web/l10n/en.json index 8ee4d65..dd31057 100644 --- a/web/l10n/en.json +++ b/web/l10n/en.json @@ -263,6 +263,9 @@ "mapMapboxSatellite": "Mapbox Satellite", "mapMapTilerBasic": "MapTiler Basic", "mapMapTilerHybrid": "MapTiler Hybrid", + "mapLocationIqStreets": "LocationIQ Streets", + "mapLocationIqEarth": "LocationIQ Earth", + "mapLocationIqHybrid": "LocationIQ Hybrid", "mapShapePolygon": "Polygon", "mapShapeCircle": "Circle", "mapShapePolyline": "Polyline", -- cgit v1.2.3 From f00ddba99b1d56c9471b19e68c8354ed27749d36 Mon Sep 17 00:00:00 2001 From: Anton Tananaev Date: Wed, 1 Dec 2021 23:15:22 -0800 Subject: Update LocationIQ keys --- modern/src/map/Map.js | 2 +- web/app/view/map/BaseMap.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) (limited to 'web') diff --git a/modern/src/map/Map.js b/modern/src/map/Map.js index 65094d7..dcf5a92 100644 --- a/modern/src/map/Map.js +++ b/modern/src/map/Map.js @@ -89,7 +89,7 @@ const Map = ({ children }) => { const mapboxAccessToken = useAttributePreference('mapboxAccessToken'); const mapTilerKey = useAttributePreference('mapTilerKey'); - const locationIqKey = useAttributePreference('locationIqKey', 'pk.b34237342901fc175252c790d1674dcc'); + const locationIqKey = useAttributePreference('locationIqKey', 'pk.0f147952a41c555a5b70614039fd148b'); useEffect(() => { maplibregl.accessToken = mapboxAccessToken; diff --git a/web/app/view/map/BaseMap.js b/web/app/view/map/BaseMap.js index e280de8..c27a8d7 100644 --- a/web/app/view/map/BaseMap.js +++ b/web/app/view/map/BaseMap.js @@ -36,7 +36,7 @@ Ext.define('Traccar.view.map.BaseMap', { type = Traccar.app.getPreference('map', null); bingKey = server.get('bingKey'); - locationIqKey = Traccar.app.getAttributePreference('locationIqKey', 'pk.b34237342901fc175252c790d1674dcc'); + locationIqKey = Traccar.app.getAttributePreference('locationIqKey', 'pk.0f147952a41c555a5b70614039fd148b'); layer = new ol.layer.Group({ title: Strings.mapLayer, -- cgit v1.2.3