视图 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)
:只监听一次。
参考文档: