114 lines
3.2 KiB
JavaScript
114 lines
3.2 KiB
JavaScript
|
/**
|
||
|
* The class CoordinateDisplay shows the coordinates of the center of the sceen
|
||
|
* in the top left of the renderer.
|
||
|
*
|
||
|
* @private
|
||
|
* @class
|
||
|
* @extends PIXI.Graphics
|
||
|
* @see {@link http://pixijs.download/dev/docs/PIXI.Graphics.html|PIXI.Graphics}
|
||
|
*/
|
||
|
export class CoordinateDisplay extends PIXI.Graphics {
|
||
|
/**
|
||
|
* Creates an instance of a CoordinateDisplay.
|
||
|
*
|
||
|
* @constructor
|
||
|
* @param {MapApp} mapApp - The MapApp where the coordinates should be displayed.
|
||
|
*/
|
||
|
constructor(mapApp) {
|
||
|
super()
|
||
|
|
||
|
this.app = mapApp
|
||
|
|
||
|
this.crosshair = new PIXI.Graphics()
|
||
|
|
||
|
this.outerSize = 15
|
||
|
this.innerSize = 5
|
||
|
this.thickness = 2
|
||
|
this.color = 0xe73230
|
||
|
|
||
|
this.crosshair.lineStyle(this.thickness, this.color)
|
||
|
this.crosshair.moveTo(-this.outerSize, 0)
|
||
|
this.crosshair.lineTo(-this.innerSize, 0)
|
||
|
this.crosshair.moveTo(this.innerSize, 0)
|
||
|
this.crosshair.lineTo(this.outerSize, 0)
|
||
|
|
||
|
this.crosshair.moveTo(0, -this.outerSize)
|
||
|
this.crosshair.lineTo(0, -this.innerSize)
|
||
|
this.crosshair.moveTo(0, this.innerSize)
|
||
|
this.crosshair.lineTo(0, this.outerSize)
|
||
|
|
||
|
this.text = new PIXI.Text(
|
||
|
'Pending ...',
|
||
|
new PIXI.TextStyle({
|
||
|
fontFamily: 'Arial',
|
||
|
fontSize: 14,
|
||
|
fontWeight: 'bold',
|
||
|
fill: '#f6f6f6',
|
||
|
stroke: '#434f4f',
|
||
|
strokeThickness: 3
|
||
|
})
|
||
|
)
|
||
|
|
||
|
this.refreshCoordinates()
|
||
|
|
||
|
this.yOffset = 20
|
||
|
this.volume = 32
|
||
|
this.margin = 5
|
||
|
|
||
|
this._updateFrame()
|
||
|
|
||
|
this.text.position.set(20 + this.margin, this.yOffset + this.volume + 2 * this.margin)
|
||
|
|
||
|
this.addChild(this.text)
|
||
|
this.addChild(this.crosshair)
|
||
|
this.setCrosshair()
|
||
|
|
||
|
window.setInterval(this.refreshCoordinates.bind(this), 300)
|
||
|
}
|
||
|
|
||
|
_updateFrame() {
|
||
|
this.clear()
|
||
|
this.lineStyle(3, 0x434f4f, 1)
|
||
|
.beginFill(0x434f4f, 0.6)
|
||
|
.drawRoundedRect(20, this.yOffset + this.volume + this.margin, this.text.width + 2 * this.margin, 32, 5)
|
||
|
.endFill()
|
||
|
}
|
||
|
|
||
|
toggleCrosshair() {
|
||
|
if (this.crosshair.parent) this.disableCrosshair()
|
||
|
else this.enableCrosshair()
|
||
|
}
|
||
|
|
||
|
enableCrosshair() {
|
||
|
this.addChild(this.crosshair)
|
||
|
}
|
||
|
|
||
|
disableCrosshair() {
|
||
|
this.removeChild(this.crosshair)
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Refreshes displayed coordinates.
|
||
|
*
|
||
|
* @return {MapApp} Returns the MapApp object for chaining.
|
||
|
*/
|
||
|
refreshCoordinates() {
|
||
|
if (this.app.mapLayer.mapview.focus && this.app.mapLayer.mapview.zoom) {
|
||
|
//TODO pass a mapview to avoid global access.
|
||
|
var coords = this.app.mapLayer.mapview.focus
|
||
|
this.setCrosshair()
|
||
|
this.text.text =
|
||
|
'Lat: ' +
|
||
|
coords.x.toFixed(4) +
|
||
|
'| Lng: ' +
|
||
|
coords.y.toFixed(4) +
|
||
|
'| Zoom: ' +
|
||
|
this.app.mapLayer.mapview.zoom.toFixed(2)
|
||
|
this._updateFrame()
|
||
|
}
|
||
|
}
|
||
|
setCrosshair() {
|
||
|
this.crosshair.position.set(this.app.center.x, this.app.center.y)
|
||
|
}
|
||
|
}
|