视图 view 由三种状态决定:中心(center)、分辨率(resolution)和旋转(rotation)。每个状态都有相应的 gettersetter

可以在视图里定义地图中心点、层级、分辨率、旋转以及地图投影等。
视图对象受到约束,主要由分辨率约束、旋转约束、中心约束。

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]。无返回值。

    1. view.setCenter([101, 44])

    resolution分辨率

    属性:

  • resolution:视图的初始分辨率,单位是每像素的投影单位(例如米每像素)。也可以通过 zoom 来设置。

  • zoom:表示地图初始的缩放级别。缩放级别分为多级,值越小,那么表示地图会显示的越小,值越大,地图越大,越清楚,与分辨率的值正好相反的规则。

限制属性:

  • resolutions:决定分辨率的约束范围。如果设置了 maxResolutionminResolutionminZoommaxZoomzoomFactor ,则该属性被忽略。
  • maxZoom:默认28。最大缩放等级。优先级低于 minResolution
  • minZoom:默认0。最小缩放等级。优先级低于 maxResolution
  • maxResolution:最大分辨率。
  • minResolution:最小分辨率。
  • constrainResolution:默认为 false 。如果为 true,则视图将始终在交互后将动画显示到最接近的缩放级别;如果为 false ,意味着允许中间缩放级别。我写了个demo测试,发现为 true 的时候,用 change:resolution 监听滚一次鼠标滚轮会触发多次,为 false 的时候,只触发一次。

为 true 时,滚轮滚动一次触发的 change:resolution 事件:
image.png
默认为 false 的时候,滚轮滚动一次触发的 change:resolution 事件:
image.png

  • 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: 4326

    Extent

    属性:

  • 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):监听事件。

    1. this.view.on('change:resolution', () => {
    2. console.log('zoom:' + this.view.getZoom())
    3. console.log('resolution:' + this.view.getResolution())
    4. })
  • once(type, listener):只监听一次。

参考文档: