ol-ext
Version:
A set of cool extensions for OpenLayers (ol) in node modules structure
142 lines (134 loc) • 3.62 kB
JavaScript
import ol_control_Control from 'ol/control/Control.js'
import {unByKey as ol_Observable_unByKey} from 'ol/Observable.js'
import ol_style_Style from 'ol/style/Style.js'
import ol_style_Fill from 'ol/style/Fill.js'
import ol_style_Stroke from 'ol/style/Stroke.js'
import ol_style_Text from 'ol/style/Text.js'
import ol_ext_getMapCanvas from '../util/getMapCanvas.js'
/**
* @classdesc
* Attribution Control integrated in the canvas (for jpeg/png export purposes).
* @see http://www.kreidefossilien.de/webgis/dokumentation/beispiele/export-map-to-png-with-scale
*
* @constructor
* @extends {ol_control_Control}
* @param {Object=} options extend the ol.control options.
* @param {ol_style_Style} options.style style used to draw the title.
*/
var ol_control_CanvasBase = class olcontrolCanvasBase extends ol_control_Control {
constructor(options) {
options = options || {}
super(options)
// Define a style to draw on the canvas
this.setStyle(options.style)
}
/**
* Remove the control from its current map and attach it to the new map.
* Subclasses may set up event handlers to get notified about changes to
* the map here.
* @param {ol_Map} map Map.
* @api stable
*/
setMap(map) {
this.getCanvas(map)
var oldmap = this.getMap()
if (this._listener) {
ol_Observable_unByKey(this._listener)
this._listener = null
}
super.setMap(map)
if (oldmap) {
try { oldmap.renderSync()} catch (e) { /* ok */ }
}
if (map) {
this._listener = map.on('postcompose', this._draw.bind(this))
// Get a canvas layer on top of the map
}
}
/** Get canvas overlay
*/
getCanvas(map) {
return ol_ext_getMapCanvas(map)
}
/** Get map Canvas
* @private
*/
getContext(e) {
var ctx = e.context
if (!ctx && this.getMap()) {
var c = this.getMap().getViewport().getElementsByClassName('ol-fixedoverlay')[0]
ctx = c ? c.getContext('2d') : null
}
return ctx
}
/** Set Style
* @api
*/
setStyle(style) {
this._style = style || new ol_style_Style({})
}
/** Get style
* @api
*/
getStyle() {
return this._style
}
/** Get stroke
* @api
*/
getStroke() {
var t = this._style.getStroke()
if (!t)
this._style.setStroke(new ol_style_Stroke({ color: '#000', width: 1.25 }))
return this._style.getStroke()
}
/** Get fill
* @api
*/
getFill() {
var t = this._style.getFill()
if (!t)
this._style.setFill(new ol_style_Fill({ color: '#fff' }))
return this._style.getFill()
}
/** Get stroke
* @api
*/
getTextStroke() {
var t = this._style.getText()
if (!t)
t = new ol_style_Text({})
if (!t.getStroke())
t.setStroke(new ol_style_Stroke({ color: '#fff', width: 3 }))
return t.getStroke()
}
/** Get text fill
* @api
*/
getTextFill() {
var t = this._style.getText()
if (!t)
t = new ol_style_Text({})
if (!t.getFill())
t.setFill(new ol_style_Fill({ color: '#fff' }))
return t.getFill()
}
/** Get text font
* @api
*/
getTextFont() {
var t = this._style.getText()
if (!t)
t = new ol_style_Text({})
if (!t.getFont())
t.setFont('12px sans-serif')
return t.getFont()
}
/** Draw the control on canvas
* @protected
*/
_draw( /* e */) {
console.warn('[CanvasBase] draw function not implemented.')
}
}
export default ol_control_CanvasBase