commited for presentation.
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
import { DeepZoomMap } from './map.js'
|
||||
|
||||
/**
|
||||
* The MapView class is responsible for a consistent map view.
|
||||
* The MapViewport class is responsible for a consistent map view.
|
||||
* It is aware of the current viewposition, the scale and viewport.
|
||||
* It ensures, that maps can be changed, without the user noticing it.
|
||||
*
|
||||
@@ -11,7 +11,7 @@ export default class MapViewport {
|
||||
*
|
||||
* @param {object} [focus = {x:0, y:0}] - Defines the startup focuspoint of the app.
|
||||
* @param {number} [zoom = 0] - Defines the startup zoom of the app. Note that this is just a request.
|
||||
* The MapView will prioritize a full scale app, than displaying the demanded zoom factor
|
||||
* The MapViewport will prioritize a full scale app, than displaying the demanded zoom factor
|
||||
*/
|
||||
constructor({ focus = null, zoom = null, viewport = { min: { x: -85, y: -180 }, max: { x: 85, y: 180 } } } = {}) {
|
||||
this.viewport = viewport
|
||||
@@ -20,32 +20,71 @@ export default class MapViewport {
|
||||
this.referenceHeight = 256
|
||||
}
|
||||
|
||||
/**
|
||||
* The current focus point as map coordinates.
|
||||
*
|
||||
* @member {CoordinatePoint}
|
||||
* @readonly
|
||||
* @memberof MapViewport
|
||||
*/
|
||||
get focus() {
|
||||
return this._focus
|
||||
}
|
||||
|
||||
/**
|
||||
* The current zoom distance.
|
||||
* On DeepZoomMaps this is equal to the zoom level.
|
||||
*
|
||||
* @member {number}
|
||||
* @readonly
|
||||
* @memberof MapViewport
|
||||
*/
|
||||
get zoom() {
|
||||
return this._zoom
|
||||
}
|
||||
|
||||
/**
|
||||
* Applies the current view to a map.
|
||||
*
|
||||
*
|
||||
* @param {GeoMap} map - Map the viewport should be applied to.
|
||||
* @memberof MapViewport
|
||||
*/
|
||||
apply(map) {
|
||||
map.moveTo(this._focus, this._zoom)
|
||||
}
|
||||
|
||||
transformed(map) {
|
||||
/**
|
||||
* Update the focus point and zoom according to the map.
|
||||
* This is commonly called when the map is transformed.
|
||||
*
|
||||
* @param {GeoMap} map - Map to update.
|
||||
* @memberof MapViewport
|
||||
*/
|
||||
update(map) {
|
||||
this.updateZoom(map)
|
||||
this.updateFocusPoint(map)
|
||||
}
|
||||
|
||||
updatePosition(map) {
|
||||
this.updateFocusPoint(map)
|
||||
this.updateZoom(map)
|
||||
}
|
||||
|
||||
/**
|
||||
* Updates the focus point.
|
||||
* This is automatically called when calling update.
|
||||
*
|
||||
* @param {GeoMap} map
|
||||
* @memberof MapViewport
|
||||
*/
|
||||
updateFocusPoint(map) {
|
||||
const frame = map.getFrame()
|
||||
this._focus = this.coordinatesFromWindowPoint(map, frame.localCenter)
|
||||
}
|
||||
|
||||
/**
|
||||
* Updates the zoom.
|
||||
* This is automatically called when calling update.
|
||||
*
|
||||
* @param {GeoMap} map
|
||||
* @memberof MapViewport
|
||||
*/
|
||||
updateZoom(map) {
|
||||
/**
|
||||
* TODO: This relies on the fact, that all maps have the same tileSize,
|
||||
@@ -57,6 +96,16 @@ export default class MapViewport {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Transforms a position on the map to a position in the window.
|
||||
*
|
||||
* Inverse of windowPointToMapPoint.
|
||||
*
|
||||
* @param {GeoMap} map - Map to calculate the position on.
|
||||
* @param {Point} point - Position on the map in pixels.
|
||||
* @returns {Point} - Pixel position in the window.
|
||||
* @memberof MapViewport
|
||||
*/
|
||||
mapPointToWindowPoint(map, point) {
|
||||
let windowPoint = { x: 0, y: 0 }
|
||||
|
||||
@@ -76,6 +125,16 @@ export default class MapViewport {
|
||||
return windowPoint
|
||||
}
|
||||
|
||||
/**
|
||||
* Transforms in the window to a position on the map.
|
||||
*
|
||||
* Inverse of mapPointToWindowPoint(map, point) {.
|
||||
*
|
||||
* @param {GeoMap} map - Map to calculate the position on.
|
||||
* @param {Point} point -Pixel position in the window.
|
||||
* @returns {Point} - Position on the map in pixels.
|
||||
* @memberof MapViewport
|
||||
*/
|
||||
windowPointToMapPoint(map, point) {
|
||||
let pointOnMap = { x: 0, y: 0 }
|
||||
if (map['image'] && map.image['parent']) {
|
||||
|
||||
Reference in New Issue
Block a user