помощью OpenLayers 3 зум в сочетании степени
Я использую openlayers 3 для создания карты с векторными объектами сверху. Пока все идет хорошо.
У меня есть несколько векторных слоев, сгруппированных в переменной под названием projecten.
var projecten = new ol.layer.Group({
title: 'Projecten',
layers: [
new ol.layer.Vector({
title: 'EVZ Den Dungen',
source: new ol.source.GeoJSON(
/** @type {olx.source.GeoJSONOptions} */ ({
object: EVZDenDungen,
projection: 'EPSG:3857'
})),
style: function(feature, resolution) {
return lookup[feature.get('landschapselement')];
}
}),
new ol.layer.Vector({
title: 'EVZ Croy',
source: new ol.source.GeoJSON(
/** @type {olx.source.GeoJSONOptions} */ ({
object: EVZCroy,
projection: 'EPSG:3857'
})),
style: function(feature, resolution) {
return lookup[feature.get('landschapselement')];
}
}),
new ol.layer.Vector({
title: 'Natuurcompensatie Gasselsbroek',
source: new ol.source.GeoJSON(
/** @type {olx.source.GeoJSONOptions} */ ({
object: NatuurcompensatieGasselsbroek,
projection: 'EPSG:3857'
})),
style: function(feature, resolution) {
return lookup[feature.get('landschapselement')];
}
}),
new ol.layer.Vector({
title: 'Ebben',
source: new ol.source.GeoJSON(
/** @type {olx.source.GeoJSONOptions} */ ({
object: Ebben,
projection: 'EPSG:3857'
})),
style: function(feature, resolution) {
return lookup[feature.get('landschapselement')];
}
}),
new ol.layer.Vector({
title: 'Zionsburg',
source: new ol.source.GeoJSON(
/** @type {olx.source.GeoJSONOptions} */ ({
object: Zionsburg,
projection: 'EPSG:3857'
})),
style: function(feature, resolution) {
return lookup[feature.get('landschapselement')];
}
})
]
})
Теперь я хочу каким-то образом перебрать переменные проекта, перебрать его слои один за другим, получить экстент каждого слоя объектов и остановиться, когда будет достигнут последний слой. Затем я хочу увеличить масштаб до этой комбинированной степени.
Это моя базовая настройка (я не очень хорошо разбираюсь в javascript и петли):
projecten.getLayers()
for (var i = 0, ii = layers.length; i < ii; ++i) {
layer = layers[i];
ol.extent.boundingExtend(extent, layer.getBounds());
}
map.getView().fitExtent(extent,map.getSize());
Есть идеи, как я могу заставить это работать?
1 ответ:
Вы должны быть в состоянии сделать это:
var extent = ol.extent.createEmpty(); projecten.getLayers().forEach(function(layer) { ol.extent.extend(extent, layer.getSource().getExtent()); }); map.getView().fitExtent(extent, map.getSize());
Используйте
ol.extent.createEmpty()
функция для инициализации экстента. Затем пройдите цикл по коллекции слоев и используйтеol.extent.extend()
чтобы создать экстент, включающий все объекты во всех ваших векторных источниках. Наконец, установите вид карты в этом объеме.Есть несколько вещей, чтобы отметить здесь. Тот самый
group.getLayers()
метод возвращает значениеol.Collection
из слоев. Это похоже на обычный JavaScriptArray
, за исключением того, что это заметный. Вы можете использоватьcollection.forEach()
метод для итерации через каждый слой в коллекции.Также обратите внимание, что вы должны позвонить
source.getExtent()
чтобы получить экстент всех загруженных в данный момент объектов в исходном коде.Наконец, ссылки выше относятся к версии 3.5.0 и выше. Вам нужно будет адаптировать свой код для работы с объектами
ol.source.Vector
вместо экспериментальных (а теперь удаленных) объектовol.source.GeoJSON
. Смотрите3.5.0 примечания к выпуску для получения подробной информации об обновлении новый векторный интерфейс API.