【问题标题】:How to fit openlayers map when map is not full size?当地图不是全尺寸时如何适应 openlayers 地图?
【发布时间】:2020-02-26 12:34:43
【问题描述】:

我有使用 https://www.npmjs.com/package/angular-split 的 Angular 应用程序。 1 个分割区域有开放的图层地图。如果只有地图分割区域可见,方法如下:

private zoomToExtent(extent: IExtent, view: ol.View) {
  const mapSize = this.map.getSize();
  this.map.getView().fit(extent, { size: mapSize });
}

工作得很好。但是,当窗口打开多个拆分时,它不起作用,因为即使地图更小,mapSize 仍然相同。

地图工作正常,因为右下角的地图按钮和比例线适应打开其他分割区域。

那么这应该怎么做,即如何获得真实的地图大小?

【问题讨论】:

  • 在调用.getSize()之前尝试添加this.map.updateSize()
  • 这绝对有效!非常感谢!

标签: openlayers angular-openlayers


【解决方案1】:

也许calculateExtent 很适合:

计算当前视图状态的范围和传递的大小。 大小是计算的框的像素尺寸 范围应该适合。在大多数情况下,您希望获得 整个地图,即map.getSize()

因此类似于:

const currentExtent = this.map.getView().calculateExtent(this.map.getSize());

编辑:@Mike 说得好:

updateSize 可能会更好:

强制重新计算地图视口大小。这应该称为 当第三方代码更改地图视口的大小时。

private zoomToExtent(extent: IExtent, view: ol.View) { // Parameter view unnecessary (?)
  this.map.updateSize();
  this.map.getView().fit(extent, { size: this.map.getSize() });
}

【讨论】:

  • 谢谢!参数在那里,因为在实际方法中使用它。在实际代码中,每当分割区域的可见性/大小发生变化时,我都会调用 updateSize。
猜你喜欢
  • 1970-01-01
  • 2021-04-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-21
  • 1970-01-01
相关资源
最近更新 更多