142 lines
3.4 KiB
JavaScript
142 lines
3.4 KiB
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
|