Как установить свойство extent в представлении после инициализации карты с помощью openlayer3?

#javascript #maps #openlayers #openlayers-3

#javascript #Карты #openlayers #openlayers-3

Вопрос:

Моя цель — переместить карту до определенного предела, когда мы перетаскиваем ее (точно так же, как Google map), после чего она должна заблокироваться. Эта поддержка присутствует в Openlayer версии 2.0 с использованием Bounds. Но в версии 3 я должен установить свойство extent при инициализации представления. Я застрял на этом этапе. Вид не устанавливается после инициализации карты.

   var map = new ol.Map({
    target: 'map',
    layers: [
      new ol.layer.Tile({
        source: new ol.source.OSM()
      })
    ],
    view: new ol.View({
      center: ol.proj.fromLonLat([73.8, 18.5]),
      zoom: 12
    })
  });
  

Теперь я хочу установить свойство extent в представлении

   map.setView(new ol.View({
    center: ol.proj.fromLonLat([73.8, 18.5]),
    extent: map.getView().calculateExtent(map.getSize()),
    zoom : 12
  }));
  

Этот код не работает. Есть ли какой-либо другой способ сделать это или я делаю что-то не так?
В консоли нет ошибки. Но карта не отображается.

Комментарии:

1. jsfiddle.net/nh9fs74k

Ответ №1:

Вместо map.setView(new ol.View({...........

Используйте этот фрагмент кода после инициализации карты

 .....
var myExtent = [xmin,ymin,xmax,ymax];
map.getView().fit(myExtent , map.getSize());
........
  

Обновить
Чтобы предотвратить перетаскивание карты за пределы текущего экстента, выполните следующие действия:

 map.setView(
new ol.View({
    center: ol.proj.fromLonLat([73.8, 18.5]),
    extent: map.getView().calculateExtent(map.getSize()),   
    zoom: 12
  })
);
  

вот скрипка

Комментарии:

1. Спасибо за ответ, Павлос. Да, это нормально. На самом деле я получаю эти значения (xmin, ymin, xmaz, ymax) из «map.getView().calculateExtent (map.getSize())», ваш фрагмент кода абсолютно правильный, но моя цель не решена, эта область карты должна блокироваться после определенной области. если я жестко запрограммирую, что значения непосредственно отображаются в инициализаторе представления свойств «extent» карты, это сработает. Но это невозможно.

2. Что вы пытаетесь сделать???? Что значит заблокировать? Запретить перемещение за пределы экстента. Пожалуйста, объясните подробно или лучше сделайте скрипку, чтобы продемонстрировать вашу проблему.

3. ДА. Запретить перемещение за пределы экстента.

4. существует обновление решения для соответствия экстенту, преобразуйте ваш экстент в 3857 srs, как это используют openlayers. Спасибо