Подтвердить что ты не робот

Как работают Bounds в OpenLayers 3?

Есть ли в OpenLayers 3 концепция OpenLayers.Bounds из OpenLayers 2.x? Как это изменилось, и каково его новое имя?

4b9b3361

Ответ 1

UPDATE: OL4: https://openlayers.org/en/latest/apidoc/ol.html#.Extent

Кажется, что новое слово для 'bounds' или 'bounding box' (BBOX) - это "степень". См.:

Один из способов узнать, что происходит на данный момент, - это выполнить поиск в репозитории OL3, например: https://github.com/openlayers/ol3/search?p=3&q=BBOX&type=Code

Ответ 2

Просто добавьте небольшой пример ответа: Оценки теперь называются "степенью", и это не сложный объект/класс, а просто массив из четырех чисел. В "ol.extent" есть куча вспомогательных функций для преобразования и т.д. Просто небольшой пример того, как преобразовать:

var tfn = ol.proj.getTransform('EPSG:4326', 'EPSG:3857');
var textent = ol.extent.applyTransform([6, 43, 16, 50], tfn);

Забастовкa >

var textent = ol.proj.transformExtent([6, 43, 16, 50], 'EPSG:4326', 'EPSG:3857');

Я не мог найти API-Doc до сих пор в http://ol3js.org/en/master/apidoc, поэтому вам нужно прочитать источник, чтобы получить информацию.

API-документы были завершены со времени BETA. Итак, вы найдете его сейчас. Забастовкa >

Как уже упоминалось в комментариях, правильная API-функция теперь ol.proj.transformExtent().

Ответ 3

Не удалось найти документацию об этой функции, но Extent работает:

var vectorSources = new ol.source.Vector();
var map = new ol.Map({
  target: map_id,
  layers: [
    new ol.layer.Tile({
      source: ol.source.OSM()
    }),
    new ol.layer.Vector({
      source: vectorSources
    })
  ],
  view: new ol.View({
    center: [0, 0],
    zoom: 12
  })
});

var feature1 = new ol.Feature({
  geometry: new ol.geom.Point(coords)
});
vectorSources.addFeature(feature1);
var feature2 = new ol.Feature({
  geometry: new ol.geom.Point(coords)
});
vectorSources.addFeature(feature2);
map.getView().fitExtent(vectorSources.getExtent(), map.getSize());

Метод vectorSources.getExtent() также может быть заменен любым объектом Extent, например:

map.getView(). fitExtent ([1,43,8,45], map.getSize());

Начиная с OpenLayer 3.9, метод изменился:

map.getView().fit(vectorSources.getExtent(), map.getSize());

Ответ 4

В OpenLayers 3.17.1 и после попытки различной вещи я смог установить границы двумя разными способами:

A) Как @Grmpfhmbl , используя ol.proj.transformExtent функцию, как показано ниже:

var extent = ol.proj.transformExtent(
    [-0.6860987, 50.9395474, -0.2833177, 50.7948214],
    "EPSG:4326", "EPSG:3857"
);

map.getView().fit( extent, map.getSize() );

B) Немного необычно, используя ol.geom.Polygon следующим образом:

// EPSG:3857 is optional as it is the default value
var a = ol.proj.fromLonLat( [-0.6860987, 50.9395474], "EPSG:3857" ),
    b = ol.proj.fromLonLat( [-0.2833177, 50.7948214], "EPSG:3857" ),
    extent = new ol.geom.Polygon([[a, b]]);

map.getView().fit( extent, map.getSize() );