ol-ext
Version:
A set of cool extensions for OpenLayers (ol) in node modules structure
66 lines (57 loc) • 2.33 kB
JavaScript
/* Copyright (c) 2016 Jean-Marc VIGLINO,
released under the CeCILL-B license (French BSD license)
(http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.txt).
*/
import ol_control_Toggle from './Toggle.js'
import ol_interaction_GeolocationDraw from '../interaction/GeolocationDraw.js'
/** Geolocation bar
* The control bar is a container for other controls. It can be used to create toolbars.
* Control bars can be nested and combined with ol.control.Toggle to handle activate/deactivate.
*
* @constructor
* @fires tracking
* @extends {ol_control_Toggle}
* @param {Object=} options ol.interaction.GeolocationDraw option.
* @param {String} options.className class of the control
* @param {String} options.title title of the control to display as tooltip, default Geolocation
* @param {number} options.delay delay before removing the location in ms, delfaut 3000 (3s)
*/
var ol_control_GeolocationButton = class olcontrolGeolocationButton extends ol_control_Toggle {
constructor(options) {
options = options || {};
// Geolocation draw interaction
options.followTrack = options.followTrack || 'auto';
options.zoom = options.zoom || 16;
//options.minZoom = options.minZoom || 16;
var interaction = new ol_interaction_GeolocationDraw(options);
super({
className: options.className = ((options.className || '') + ' ol-geobt').trim(),
interaction: interaction,
title: options.title || 'Geolocation',
onToggle: function () {
interaction.pause(true);
interaction.setFollowTrack(options.followTrack || 'auto');
}
});
this.setActive(false);
interaction.on('tracking', function (e) {
this.dispatchEvent({ type: 'position', coordinate: e.geolocation.getPosition() });
}.bind(this));
// Timeout delay
var tout;
interaction.on('change:active', function () {
this.dispatchEvent({ type: 'position' });
if (tout) {
clearTimeout(tout);
tout = null;
}
if (interaction.getActive()) {
tout = setTimeout(function () {
interaction.setActive(false);
tout = null;
}.bind(this), options.delay || 3000);
}
}.bind(this));
}
}
export default ol_control_GeolocationButton