视图 view 由三种状态决定:中心(center)、分辨率(resolution)和旋转(rotation)。每个状态都有相应的 getter 和 setter 。
可以在视图里定义地图中心点、层级、分辨率、旋转以及地图投影等。
视图对象受到约束,主要由分辨率约束、旋转约束、中心约束。
api:https://openlayers.org/en/latest/apidoc/module-ol_View-View.html
center中心
属性:
center:是一个坐标 [x, y],表示地图视图的中心位置。视图的初始中心,中心的坐标系由 projection 指定。
事件:
change:center
方法:
adjustCenter(deltaCoordinates):当在视图状态上应用增量时,应该使用adjustCenter来调整中心而不是setCenter。getCenter():获取地图的中心。setCenter(center):设置中心。接受一个参数,中心坐标,类型为ol.Coordinate,例如 [x, y]。无返回值。view.setCenter([101, 44])
resolution分辨率
属性:
resolution:视图的初始分辨率,单位是每像素的投影单位(例如米每像素)。也可以通过zoom来设置。zoom:表示地图初始的缩放级别。缩放级别分为多级,值越小,那么表示地图会显示的越小,值越大,地图越大,越清楚,与分辨率的值正好相反的规则。
限制属性:
resolutions:决定分辨率的约束范围。如果设置了maxResolution、minResolution、minZoom、maxZoom和zoomFactor,则该属性被忽略。maxZoom:默认28。最大缩放等级。优先级低于minResolution。minZoom:默认0。最小缩放等级。优先级低于maxResolution。maxResolution:最大分辨率。minResolution:最小分辨率。constrainResolution:默认为 false 。如果为 true,则视图将始终在交互后将动画显示到最接近的缩放级别;如果为 false ,意味着允许中间缩放级别。我写了个demo测试,发现为 true 的时候,用change:resolution监听滚一次鼠标滚轮会触发多次,为 false 的时候,只触发一次。
为 true 时,滚轮滚动一次触发的 change:resolution 事件:
默认为 false 的时候,滚轮滚动一次触发的 change:resolution 事件:
smoothResolutionConstraint:默认为 true。如果为 true,分辨率最小 / 最大值将平滑应用,即允许视图略微超过给定的分辨率或缩放界限。
事件:
change:resolution
方法:
adjustResolution(ratio, opt_anchor):当在视图状态上应用增量时,应该使用adjustResolution来调整分辨率而不是setResolution。adjustZoom(delta, opt_anchor):当在视图状态上应用增量时,应该使用adjustZoom来调整缩放级别而不是setZoom。getMaxResolution():获取视图最大值分辨率。getMinResolution():获取视图最小值分辨率。getMaxZoom():获取最大缩放级别。getMinZoom():获取最小缩放级别。getResolution():获取地图的分辨率,即比例尺。返回一个表示比例尺的数值。getResolutionForExtent(extent, opt_size):获取给定范围(以映射单元为单位)和大小(以像素为单位)的分辨率。getResolutionForZoom(zoom):获取缩放级别的分辨率。getResolutions():获取分辨率的约束范围。getZoom():获取地图的缩放级别,返回一个表示缩放级别的数值。getZoomForResolution(resolution):获取给定分辨率的缩放级别。setConstrainResolution(enabled):enabled 为布尔类型,设置视图是否允许中间的缩放级别。setMaxZoom(zoom):设置视图的最大缩放级别。setMinZoom(zoom):设置视图的最小缩放级别。setResolution(resolution):设置地图的分辨率(比例尺)。setZoom(zoom):参数为 number 类型,设置地图的缩放级别。
学习链接:
事件:
change:rotation
方法:
adjustRotation(delta, opt_anchor):当在视图状态上应用增量时,应该使用adjustRotation来调整缩放级别而不是setRotation。getRotation():获取地图的旋转角度。setRotation(rotation):参数为旋转的角度对应的值,并不是度数,如 Math.PI ,不是180度,作用是将地图旋转相应点角度,顺时针为正。projection
属性:
projection:地图的投影坐标系统
方法:
getProjection():获取地图使用的“投影坐标系统”,如 EPSG: 4326Extent
属性:
extent:[左下角经度,左下角纬度,右上角经度,右上角纬度]。用于设置view的显示区域。
方法:
calculateExtent(opt_size):计算当前视图状态的范围和传递的大小。opt_size指盒子像素尺寸,如未提供,将使用此视图的第一个映射的大小。动画
方法:
animate(var_args)
单个动画
动画视图。视图的中心、缩放(或分辨率)和旋转可以通过动画来实现视图状态之间的平滑转换。
默认情况下,动画持续时间为 1 秒,并且类型为 in-and-out easing。
通过设置持续时间 duration(以毫秒为单位)和缓动选项easing来定制此行为。
easing:
- easeIn:平缓加速
- easeOut:平缓减速
- inAndOut:平缓开始,先加速,再减速
- linear:匀速
- upAndDown:平缓开始,加速,最后再减速。
多个动画
要将多个动画连接在一起,请使用多个动画对象调用该方法。
如果提供一个函数作为animate方法的最后一个参数,它将在动画系列的末尾被调用。
如果动画系列独立完成,回调函数将被调用true;如果动画系列被取消,回调函数将被调用false。
取消动画
动画通过用户交互(例如拖动地图)或调用view.setCenter()、view.setResolution()或view.setRotation()(或调用其中一个方法的另一个方法)来取消。
demo:https://openlayers.org/en/latest/examples/animation.html
其他方法
animate(var_args):给视图添加动画。beginInteraction():通知视图交互已经开始。cancelAnimations():取消任何正在进行的动画。centerOn(coordinate, size, position):以坐标和视图位置为中心。- coordinate:坐标点
- size:盒子像素尺寸
- position:视图的居中位置。
endInteraction(opt_duration, opt_resolutionDirection, opt_anchor)fit(geometryOrExtent, opt_options):根据给定的地图大小和边界拟合给定的几何体或范围。getAnimating():确定视图是否处于动画状态。返回布尔值。getInteracting():确定用户是否与视图交互。on(type, listener):监听事件。this.view.on('change:resolution', () => {console.log('zoom:' + this.view.getZoom())console.log('resolution:' + this.view.getResolution())})
once(type, listener):只监听一次。
参考文档:
