Как подогнать карту openlayers, когда карта не в полном размере? - PullRequest
1 голос
/ 26 февраля 2020

У меня есть angular приложение, которое использует https://www.npmjs.com/package/angular-split. 1 разделенная область имеет открытую карту слоев. Если видна только область разделения карты, следующий метод:

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

работает просто отлично. Однако, когда окно имеет несколько открытых разделений, оно не работает, потому что mapSize остается тем же, даже если карта меньше.

В остальном карта работает нормально, потому что кнопки карты и линейка масштабирования в правом нижнем углу адаптируются к открытию других разделенных областей.

Так как же это сделать, то есть как получить реальный размер карты?

1 Ответ

1 голос
/ 26 февраля 2020

Может convertExtent хорошо подходит:

Рассчитать экстент для текущего состояния просмотра и переданного размера. Размер - это размеры в пикселях блока, в который должен помещаться вычисленный экстент. В большинстве случаев вы хотите получить экстент всей карты, то есть 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() });
}
...