From 79f8c34319053236ee03359b1ecf38e065206485 Mon Sep 17 00:00:00 2001 From: Anton Tananaev Date: Sun, 3 Jul 2016 13:39:33 +1200 Subject: Start geofence drawing implementation --- web/app/view/GeofenceDialogController.js | 4 +- web/app/view/GeofenceMap.js | 83 ++++++++++++++++++++++++++++++++ web/app/view/GeofenceMapController.js | 20 ++++++++ 3 files changed, 105 insertions(+), 2 deletions(-) create mode 100644 web/app/view/GeofenceMap.js create mode 100644 web/app/view/GeofenceMapController.js (limited to 'web') diff --git a/web/app/view/GeofenceDialogController.js b/web/app/view/GeofenceDialogController.js index 96be0d3a5..d8597457f 100644 --- a/web/app/view/GeofenceDialogController.js +++ b/web/app/view/GeofenceDialogController.js @@ -19,14 +19,14 @@ Ext.define('Traccar.view.GeofenceDialogController', { alias: 'controller.geofenceDialog', requires: [ - 'Traccar.view.BaseMap' + 'Traccar.view.GeofenceMap' ], onAreaClick: function (button) { Ext.create('Traccar.view.BaseWindow', { title: Strings.sharedArea, items: { - xtype: 'baseMapView' + xtype: 'geofenceMapView' } }).show(); } diff --git a/web/app/view/GeofenceMap.js b/web/app/view/GeofenceMap.js new file mode 100644 index 000000000..8ec5ac224 --- /dev/null +++ b/web/app/view/GeofenceMap.js @@ -0,0 +1,83 @@ +/* + * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +Ext.define('Traccar.view.GeofenceMap', { + extend: 'Traccar.view.BaseMap', + xtype: 'geofenceMapView', + + requires: [ + 'Traccar.view.GeofenceMapController' + ], + + controller: 'geofenceMap', + + initMap: function () { + this.callParent(); + + var map = this.map; + + var features = new ol.Collection(); + var featureOverlay = new ol.layer.Vector({ + source: new ol.source.Vector({features: features}), + style: new ol.style.Style({ + fill: new ol.style.Fill({ + color: 'rgba(255, 255, 255, 0.2)' + }), + stroke: new ol.style.Stroke({ + color: '#ffcc33', + width: 2 + }), + image: new ol.style.Circle({ + radius: 7, + fill: new ol.style.Fill({ + color: '#ffcc33' + }) + }) + }) + }); + featureOverlay.setMap(map); + + var modify = new ol.interaction.Modify({ + features: features, + // the SHIFT key must be pressed to delete vertices, so + // that new vertices can be drawn at the same position + // of existing vertices + deleteCondition: function(event) { + return ol.events.condition.shiftKeyOnly(event) && + ol.events.condition.singleClick(event); + } + }); + map.addInteraction(modify); + + var draw; // global so we can remove it later + //var typeSelect = document.getElementById('type'); + + function addInteraction() { + draw = new ol.interaction.Draw({ + features: features, + type: 'Polygon' // (typeSelect.value) + }); + map.addInteraction(draw); + } + + /*typeSelect.onchange = function() { + map.removeInteraction(draw); + addInteraction(); + };*/ + + addInteraction(); + } +}); diff --git a/web/app/view/GeofenceMapController.js b/web/app/view/GeofenceMapController.js new file mode 100644 index 000000000..bc0fbfe1b --- /dev/null +++ b/web/app/view/GeofenceMapController.js @@ -0,0 +1,20 @@ +/* + * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +Ext.define('Traccar.view.GeofenceMapController', { + extend: 'Ext.app.ViewController', + alias: 'controller.geofenceMap' +}); -- cgit v1.2.3